@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.
- package/LICENSE +36 -0
- package/NOTICE +7 -0
- package/README.md +40 -0
- package/dist/browser/{createResourceDialog-BWJkjiOO.js → createResourceDialog-DI9pL-Yr.js} +2 -2
- package/dist/browser/{dialog-CUy_fwx9.js → dialog-BYJGvItc.js} +54 -19
- package/dist/browser/{flowChanges-CgSnSqqP.js → flowChanges-RL-H4CjD.js} +306 -48
- package/dist/browser/{flowWorkspace-Bf7H-r0t.js → flowWorkspace-BkDsETj0.js} +20745 -20186
- package/dist/browser/preview.css +73 -3
- package/dist/browser/preview.js +21410 -20607
- package/dist/browser/{typeScriptSession-B0hC-C8y.js → typeScriptSession-CSRwWmZm.js} +1 -1
- package/dist/browser/ui.css +72 -2
- package/dist/browser/workbench.css +73 -3
- package/dist/browser/workbench.js +14 -76
- package/dist/browser/{workbenchSelect-C3e4J93X.js → workbenchSelect-BcWPWGzw.js} +1 -1
- package/dist/command/index.js +34 -34
- package/dist/common/authoring.d.ts +1 -1
- package/dist/common/authoringFields.d.ts +1 -1
- package/dist/common/authoringSchema.d.ts +28 -4
- package/dist/common/connector-proxy.d.ts +1 -1
- package/dist/common/control-api-conformance.d.ts +1 -1
- package/dist/common/control-api-conformance.js +61 -24
- package/dist/common/control-api.d.ts +4 -3
- package/dist/common/control-api.js +59 -22
- package/dist/common/control-requests.d.ts +2 -1
- package/dist/common/control-requests.js +204 -42
- package/dist/common/cron-trigger.d.ts +1 -1
- package/dist/common/decision.d.ts +1 -1
- package/dist/common/draftOperations.d.ts +1 -1
- package/dist/common/engine-contract.d.ts +3 -2
- package/dist/common/event-source-definition.d.ts +1 -1
- package/dist/common/flow-agent.d.ts +1 -1
- package/dist/{browser → common}/flow-authoring-node.d.ts +3 -3
- package/dist/{browser → common}/flow-authoring.js +75 -23
- package/dist/{browser → common}/flow-change-schema.d.ts +177 -6
- package/dist/{browser → common}/flow-change.d.ts +35 -15
- package/dist/{browser → common}/flow-change.js +77 -25
- package/dist/common/flow-connectionUsage.d.ts +1 -1
- package/dist/common/flow-encoding.d.ts +1 -1
- package/dist/common/flow-encoding.js +34 -16
- package/dist/common/flow-errorHandling.d.ts +1 -1
- package/dist/common/flow-graph.d.ts +1 -1
- package/dist/common/flow-modules.d.ts +1 -1
- package/dist/common/flow-promptTemplate.d.ts +1 -1
- package/dist/common/flow-retry.d.ts +1 -1
- package/dist/common/flow-semantics.d.ts +1 -1
- package/dist/common/flow-semantics.js +151 -32
- package/dist/common/flow-workflowFile.d.ts +1 -1
- package/dist/common/flowInspection.d.ts +3 -3
- package/dist/common/integration-trigger.d.ts +1 -1
- package/dist/common/licenses.md +118 -1
- package/dist/common/liveDetails.d.ts +1 -1
- package/dist/common/mcp.d.ts +2 -1
- package/dist/common/mcp.js +59 -22
- package/dist/common/openapi.d.ts +1 -1
- package/dist/common/poll-trigger.d.ts +1 -1
- package/dist/common/run-results.d.ts +8 -1
- package/dist/common/runtime-contract.d.ts +8 -2
- package/dist/common/runtime-contract.js +22 -5
- package/dist/common/scheduler-checkpoint.d.ts +1 -1
- package/dist/common/scheduler-dependencies.d.ts +1 -1
- package/dist/common/scheduler-node-execution.d.ts +1 -1
- package/dist/common/scheduler.d.ts +2 -2
- package/dist/common/scheduler.js +31 -12
- package/dist/common/trigger-catalog.d.ts +1 -1
- package/dist/common/trigger-config-options.d.ts +1 -1
- package/dist/common/trigger-config.d.ts +1 -1
- package/dist/common/trigger-contract.d.ts +2 -2
- package/dist/common/trigger-localization.d.ts +1 -1
- package/dist/common/webhook-response.d.ts +1 -1
- package/dist/common/webhook-trigger.d.ts +1 -1
- package/dist/common/workflow.d.ts +17 -1
- package/dist/common/workflow.js +68 -22
- package/dist/index.d.ts +6 -3
- package/package.json +7 -6
- package/src/base/common/json.ts +90 -0
- package/src/canvas/common/commands.ts +15 -0
- package/src/connector/common/actionSchema.ts +168 -0
- package/src/connector/common/proxy.ts +44 -0
- package/src/control/common/api.ts +1505 -0
- package/src/control/common/authoring.ts +912 -0
- package/src/control/common/authoringCondition.ts +110 -0
- package/src/control/common/authoringDiagnosticFields.ts +136 -0
- package/src/control/common/authoringExamples.ts +192 -0
- package/src/control/common/authoringFields.ts +53 -0
- package/src/control/common/authoringLlm.ts +70 -0
- package/src/control/common/authoringOpenApi.ts +129 -0
- package/src/control/common/authoringSchema.ts +404 -0
- package/src/control/common/authoringTools.ts +123 -0
- package/src/control/common/authoringTriggers.ts +26 -0
- package/src/control/common/checkDecoders.ts +65 -0
- package/src/control/common/conformance.ts +1989 -0
- package/src/control/common/connectorDecoders.ts +370 -0
- package/src/control/common/connectorQueries.ts +61 -0
- package/src/control/common/decoding.ts +60 -0
- package/src/control/common/draftOperations.ts +61 -0
- package/src/control/common/errors.ts +114 -0
- package/src/control/common/eventSourceSchemas.ts +13 -0
- package/src/control/common/eventSources.ts +186 -0
- package/src/control/common/flowDecoders.ts +153 -0
- package/src/control/common/flowInspection.ts +181 -0
- package/src/control/common/flowNotifications.ts +37 -0
- package/src/control/common/liveDetails.ts +124 -0
- package/src/control/common/mcp.ts +241 -0
- package/src/control/common/mcpConformance.ts +142 -0
- package/src/control/common/providerAccess.ts +28 -0
- package/src/control/common/providerIconSprite.ts +42 -0
- package/src/control/common/publicationDecoders.ts +98 -0
- package/src/control/common/random.ts +16 -0
- package/src/control/common/requests.ts +112 -0
- package/src/control/common/resultQuery.ts +8 -0
- package/src/control/common/results.ts +176 -0
- package/src/control/common/revisionDecoders.ts +52 -0
- package/src/control/common/runDecoders.ts +240 -0
- package/src/control/common/triggerCatalog.ts +89 -0
- package/src/control/common/triggerDecoders.ts +175 -0
- package/src/decision/common/decision.ts +168 -0
- package/src/event-source/common/catalog.generated.json +65 -0
- package/src/event-source/common/definition.ts +66 -0
- package/src/event-source/common/index.ts +99 -0
- package/src/execution/common/checkpoint.ts +311 -0
- package/src/execution/common/dependencies.ts +440 -0
- package/src/execution/common/engineContract.ts +80 -0
- package/src/execution/common/events.ts +328 -0
- package/src/execution/common/node-execution.ts +467 -0
- package/src/execution/common/runLifecycle.ts +250 -0
- package/src/execution/common/runtime.ts +563 -0
- package/src/execution/common/scheduler.ts +696 -0
- package/src/execution/common/wait.ts +36 -0
- package/src/flow/common/agent.ts +305 -0
- package/src/flow/common/authoring.ts +30 -0
- package/src/flow/common/change.ts +1036 -0
- package/src/flow/common/changeSchema.ts +783 -0
- package/src/flow/common/codePermissions.ts +2 -0
- package/src/flow/common/condition.ts +265 -0
- package/src/flow/common/connectionUsage.ts +131 -0
- package/src/flow/common/edgeChanges.ts +35 -0
- package/src/flow/common/encoding.ts +437 -0
- package/src/flow/common/errorHandling.ts +34 -0
- package/src/flow/common/graph.ts +892 -0
- package/src/flow/common/inputValue.ts +16 -0
- package/src/flow/common/json.ts +8 -0
- package/src/flow/common/moduleChanges.ts +31 -0
- package/src/flow/common/modules.ts +292 -0
- package/src/flow/common/nodeChanges.ts +762 -0
- package/src/flow/common/portChanges.ts +36 -0
- package/src/flow/common/promptTemplate.ts +15 -0
- package/src/flow/common/retry.ts +20 -0
- package/src/flow/common/schema.ts +162 -0
- package/src/flow/common/schemaCompare.ts +176 -0
- package/src/flow/common/schemaComparer.ts +178 -0
- package/src/flow/common/schemaKeywords.ts +53 -0
- package/src/flow/common/semantics.ts +474 -0
- package/src/flow/common/sourceField.ts +35 -0
- package/src/flow/common/triggerScheduleSchema.ts +8 -0
- package/src/flow/common/wait.ts +30 -0
- package/src/flow/common/webhookMethod.ts +7 -0
- package/src/flow/common/webhookResponse.ts +75 -0
- package/src/flow/common/workflowFile.ts +97 -0
- package/src/json-schema-subset/checker/array.ts +142 -0
- package/src/json-schema-subset/checker/cache.ts +57 -0
- package/src/json-schema-subset/checker/checker.ts +230 -0
- package/src/json-schema-subset/checker/enumAndConst.ts +113 -0
- package/src/json-schema-subset/checker/equals.ts +93 -0
- package/src/json-schema-subset/checker/numeric/checker.ts +50 -0
- package/src/json-schema-subset/checker/numeric/float.ts +121 -0
- package/src/json-schema-subset/checker/numeric/index.ts +1 -0
- package/src/json-schema-subset/checker/numeric/integer.ts +119 -0
- package/src/json-schema-subset/checker/numeric/integerNormalizer.ts +72 -0
- package/src/json-schema-subset/checker/object.ts +354 -0
- package/src/json-schema-subset/checker/range.ts +91 -0
- package/src/json-schema-subset/checker/string.ts +60 -0
- package/src/json-schema-subset/checker/tools/index.ts +3 -0
- package/src/json-schema-subset/checker/tools/mark.ts +82 -0
- package/src/json-schema-subset/checker/tools/quantum.ts +106 -0
- package/src/json-schema-subset/checker/tools/range.ts +210 -0
- package/src/json-schema-subset/checker/validator.ts +23 -0
- package/src/json-schema-subset/compiler/array.ts +163 -0
- package/src/json-schema-subset/compiler/combination.ts +109 -0
- package/src/json-schema-subset/compiler/common.ts +99 -0
- package/src/json-schema-subset/compiler/compiler.ts +188 -0
- package/src/json-schema-subset/compiler/enumAndConst.ts +75 -0
- package/src/json-schema-subset/compiler/index.ts +11 -0
- package/src/json-schema-subset/compiler/object.ts +411 -0
- package/src/json-schema-subset/compiler/primitive.ts +144 -0
- package/src/json-schema-subset/compiler/utils.ts +24 -0
- package/src/json-schema-subset/compiler/wrapper.ts +192 -0
- package/src/json-schema-subset/error.ts +55 -0
- package/src/json-schema-subset/expression/calculator.ts +442 -0
- package/src/json-schema-subset/expression/combination.ts +49 -0
- package/src/json-schema-subset/expression/expression.ts +191 -0
- package/src/json-schema-subset/expression/index.ts +25 -0
- package/src/json-schema-subset/expression/result.ts +88 -0
- package/src/json-schema-subset/expression/types.ts +36 -0
- package/src/json-schema-subset/extends/extendsContext.ts +89 -0
- package/src/json-schema-subset/extends/index.ts +2 -0
- package/src/json-schema-subset/extends/types.ts +12 -0
- package/src/json-schema-subset/global.ts +60 -0
- package/src/json-schema-subset/index.ts +8 -0
- package/src/json-schema-subset/preprocessing.ts +74 -0
- package/src/json-schema-subset/types.ts +8 -0
- package/src/json-schema-subset/utils.ts +95 -0
- package/src/localization/common/languages.ts +118 -0
- package/src/localization/common/timeZone.ts +25 -0
- package/src/openapi/common/authBindings.ts +12 -0
- package/src/openapi/common/openapi.ts +459 -0
- package/src/trigger/common/config.ts +56 -0
- package/src/trigger/common/configOptions.ts +15 -0
- package/src/trigger/common/configSchema.ts +8 -0
- package/src/trigger/common/contract.ts +132 -0
- package/src/trigger/common/cron.ts +151 -0
- package/src/trigger/common/integration.ts +498 -0
- package/src/trigger/common/poll.ts +187 -0
- package/src/trigger/common/webhook.ts +412 -0
- package/src/trigger/providers/airtable/locales/fr.json +18 -0
- package/src/trigger/providers/airtable/locales/ja.json +18 -0
- package/src/trigger/providers/airtable/locales/ko.json +18 -0
- package/src/trigger/providers/airtable/locales/ru.json +18 -0
- package/src/trigger/providers/airtable/locales/zh-CN.json +18 -0
- package/src/trigger/providers/airtable/locales/zh-TW.json +18 -0
- package/src/trigger/providers/asana/locales/fr.json +15 -0
- package/src/trigger/providers/asana/locales/ja.json +15 -0
- package/src/trigger/providers/asana/locales/ko.json +15 -0
- package/src/trigger/providers/asana/locales/ru.json +15 -0
- package/src/trigger/providers/asana/locales/zh-CN.json +15 -0
- package/src/trigger/providers/asana/locales/zh-TW.json +15 -0
- package/src/trigger/providers/calendly/locales/fr.json +16 -0
- package/src/trigger/providers/calendly/locales/ja.json +16 -0
- package/src/trigger/providers/calendly/locales/ko.json +16 -0
- package/src/trigger/providers/calendly/locales/ru.json +16 -0
- package/src/trigger/providers/calendly/locales/zh-CN.json +16 -0
- package/src/trigger/providers/calendly/locales/zh-TW.json +16 -0
- package/src/trigger/providers/catalog.generated.json +4996 -0
- package/src/trigger/providers/clickup/locales/fr.json +16 -0
- package/src/trigger/providers/clickup/locales/ja.json +16 -0
- package/src/trigger/providers/clickup/locales/ko.json +16 -0
- package/src/trigger/providers/clickup/locales/ru.json +16 -0
- package/src/trigger/providers/clickup/locales/zh-CN.json +16 -0
- package/src/trigger/providers/clickup/locales/zh-TW.json +16 -0
- package/src/trigger/providers/definitions.ts +19 -0
- package/src/trigger/providers/feishu/locales/fr.json +20 -0
- package/src/trigger/providers/feishu/locales/ja.json +20 -0
- package/src/trigger/providers/feishu/locales/ko.json +20 -0
- package/src/trigger/providers/feishu/locales/ru.json +20 -0
- package/src/trigger/providers/feishu/locales/zh-CN.json +20 -0
- package/src/trigger/providers/feishu/locales/zh-TW.json +20 -0
- package/src/trigger/providers/fieldDescriptions.ts +392 -0
- package/src/trigger/providers/fieldLabels.ts +256 -0
- package/src/trigger/providers/fireflies/locales/fr.json +17 -0
- package/src/trigger/providers/fireflies/locales/ja.json +17 -0
- package/src/trigger/providers/fireflies/locales/ko.json +17 -0
- package/src/trigger/providers/fireflies/locales/ru.json +17 -0
- package/src/trigger/providers/fireflies/locales/zh-CN.json +17 -0
- package/src/trigger/providers/fireflies/locales/zh-TW.json +17 -0
- package/src/trigger/providers/github/locales/fr.json +30 -0
- package/src/trigger/providers/github/locales/ja.json +30 -0
- package/src/trigger/providers/github/locales/ko.json +30 -0
- package/src/trigger/providers/github/locales/ru.json +30 -0
- package/src/trigger/providers/github/locales/zh-CN.json +30 -0
- package/src/trigger/providers/github/locales/zh-TW.json +30 -0
- package/src/trigger/providers/gitlab/locales/fr.json +18 -0
- package/src/trigger/providers/gitlab/locales/ja.json +18 -0
- package/src/trigger/providers/gitlab/locales/ko.json +18 -0
- package/src/trigger/providers/gitlab/locales/ru.json +18 -0
- package/src/trigger/providers/gitlab/locales/zh-CN.json +18 -0
- package/src/trigger/providers/gitlab/locales/zh-TW.json +18 -0
- package/src/trigger/providers/gmail/locales/fr.json +18 -0
- package/src/trigger/providers/gmail/locales/ja.json +18 -0
- package/src/trigger/providers/gmail/locales/ko.json +18 -0
- package/src/trigger/providers/gmail/locales/ru.json +18 -0
- package/src/trigger/providers/gmail/locales/zh-CN.json +18 -0
- package/src/trigger/providers/gmail/locales/zh-TW.json +18 -0
- package/src/trigger/providers/google-calendar/locales/fr.json +15 -0
- package/src/trigger/providers/google-calendar/locales/ja.json +15 -0
- package/src/trigger/providers/google-calendar/locales/ko.json +15 -0
- package/src/trigger/providers/google-calendar/locales/ru.json +15 -0
- package/src/trigger/providers/google-calendar/locales/zh-CN.json +15 -0
- package/src/trigger/providers/google-calendar/locales/zh-TW.json +15 -0
- package/src/trigger/providers/google-drive/locales/fr.json +48 -0
- package/src/trigger/providers/google-drive/locales/ja.json +48 -0
- package/src/trigger/providers/google-drive/locales/ko.json +48 -0
- package/src/trigger/providers/google-drive/locales/ru.json +48 -0
- package/src/trigger/providers/google-drive/locales/zh-CN.json +48 -0
- package/src/trigger/providers/google-drive/locales/zh-TW.json +48 -0
- package/src/trigger/providers/google-sheets/locales/fr.json +19 -0
- package/src/trigger/providers/google-sheets/locales/ja.json +19 -0
- package/src/trigger/providers/google-sheets/locales/ko.json +19 -0
- package/src/trigger/providers/google-sheets/locales/ru.json +19 -0
- package/src/trigger/providers/google-sheets/locales/zh-CN.json +19 -0
- package/src/trigger/providers/google-sheets/locales/zh-TW.json +19 -0
- package/src/trigger/providers/intercom/locales/fr.json +17 -0
- package/src/trigger/providers/intercom/locales/ja.json +17 -0
- package/src/trigger/providers/intercom/locales/ko.json +17 -0
- package/src/trigger/providers/intercom/locales/ru.json +17 -0
- package/src/trigger/providers/intercom/locales/zh-CN.json +17 -0
- package/src/trigger/providers/intercom/locales/zh-TW.json +17 -0
- package/src/trigger/providers/jira/locales/fr.json +17 -0
- package/src/trigger/providers/jira/locales/ja.json +17 -0
- package/src/trigger/providers/jira/locales/ko.json +17 -0
- package/src/trigger/providers/jira/locales/ru.json +17 -0
- package/src/trigger/providers/jira/locales/zh-CN.json +17 -0
- package/src/trigger/providers/jira/locales/zh-TW.json +17 -0
- package/src/trigger/providers/linear/locales/fr.json +13 -0
- package/src/trigger/providers/linear/locales/ja.json +13 -0
- package/src/trigger/providers/linear/locales/ko.json +13 -0
- package/src/trigger/providers/linear/locales/ru.json +13 -0
- package/src/trigger/providers/linear/locales/zh-CN.json +13 -0
- package/src/trigger/providers/linear/locales/zh-TW.json +13 -0
- package/src/trigger/providers/locales/fr.ts +71 -0
- package/src/trigger/providers/locales/ja.ts +71 -0
- package/src/trigger/providers/locales/ko.ts +71 -0
- package/src/trigger/providers/locales/ru.ts +71 -0
- package/src/trigger/providers/locales/zh-CN.ts +71 -0
- package/src/trigger/providers/locales/zh-TW.ts +71 -0
- package/src/trigger/providers/localization.ts +59 -0
- package/src/trigger/providers/notion/locales/fr.json +16 -0
- package/src/trigger/providers/notion/locales/ja.json +16 -0
- package/src/trigger/providers/notion/locales/ko.json +16 -0
- package/src/trigger/providers/notion/locales/ru.json +16 -0
- package/src/trigger/providers/notion/locales/zh-CN.json +16 -0
- package/src/trigger/providers/notion/locales/zh-TW.json +16 -0
- package/src/trigger/providers/one-drive/locales/fr.json +16 -0
- package/src/trigger/providers/one-drive/locales/ja.json +16 -0
- package/src/trigger/providers/one-drive/locales/ko.json +16 -0
- package/src/trigger/providers/one-drive/locales/ru.json +16 -0
- package/src/trigger/providers/one-drive/locales/zh-CN.json +16 -0
- package/src/trigger/providers/one-drive/locales/zh-TW.json +16 -0
- package/src/trigger/providers/outlook/locales/fr.json +18 -0
- package/src/trigger/providers/outlook/locales/ja.json +18 -0
- package/src/trigger/providers/outlook/locales/ko.json +18 -0
- package/src/trigger/providers/outlook/locales/ru.json +18 -0
- package/src/trigger/providers/outlook/locales/zh-CN.json +18 -0
- package/src/trigger/providers/outlook/locales/zh-TW.json +18 -0
- package/src/trigger/providers/pandadoc/locales/fr.json +12 -0
- package/src/trigger/providers/pandadoc/locales/ja.json +12 -0
- package/src/trigger/providers/pandadoc/locales/ko.json +12 -0
- package/src/trigger/providers/pandadoc/locales/ru.json +12 -0
- package/src/trigger/providers/pandadoc/locales/zh-CN.json +12 -0
- package/src/trigger/providers/pandadoc/locales/zh-TW.json +12 -0
- package/src/trigger/providers/pipedrive/locales/fr.json +15 -0
- package/src/trigger/providers/pipedrive/locales/ja.json +15 -0
- package/src/trigger/providers/pipedrive/locales/ko.json +15 -0
- package/src/trigger/providers/pipedrive/locales/ru.json +15 -0
- package/src/trigger/providers/pipedrive/locales/zh-CN.json +15 -0
- package/src/trigger/providers/pipedrive/locales/zh-TW.json +15 -0
- package/src/trigger/providers/remote.ts +163 -0
- package/src/trigger/providers/resend/locales/fr.json +16 -0
- package/src/trigger/providers/resend/locales/ja.json +16 -0
- package/src/trigger/providers/resend/locales/ko.json +16 -0
- package/src/trigger/providers/resend/locales/ru.json +16 -0
- package/src/trigger/providers/resend/locales/zh-CN.json +16 -0
- package/src/trigger/providers/resend/locales/zh-TW.json +16 -0
- package/src/trigger/providers/sentry/locales/fr.json +19 -0
- package/src/trigger/providers/sentry/locales/ja.json +19 -0
- package/src/trigger/providers/sentry/locales/ko.json +19 -0
- package/src/trigger/providers/sentry/locales/ru.json +19 -0
- package/src/trigger/providers/sentry/locales/zh-CN.json +19 -0
- package/src/trigger/providers/sentry/locales/zh-TW.json +19 -0
- package/src/trigger/providers/shopify/locales/fr.json +18 -0
- package/src/trigger/providers/shopify/locales/ja.json +18 -0
- package/src/trigger/providers/shopify/locales/ko.json +18 -0
- package/src/trigger/providers/shopify/locales/ru.json +18 -0
- package/src/trigger/providers/shopify/locales/zh-CN.json +18 -0
- package/src/trigger/providers/shopify/locales/zh-TW.json +18 -0
- package/src/trigger/providers/slack/locales/fr.json +18 -0
- package/src/trigger/providers/slack/locales/ja.json +18 -0
- package/src/trigger/providers/slack/locales/ko.json +18 -0
- package/src/trigger/providers/slack/locales/ru.json +18 -0
- package/src/trigger/providers/slack/locales/zh-CN.json +18 -0
- package/src/trigger/providers/slack/locales/zh-TW.json +18 -0
- package/src/trigger/providers/slackbot/locales/fr.json +23 -0
- package/src/trigger/providers/slackbot/locales/ja.json +23 -0
- package/src/trigger/providers/slackbot/locales/ko.json +23 -0
- package/src/trigger/providers/slackbot/locales/ru.json +23 -0
- package/src/trigger/providers/slackbot/locales/zh-CN.json +23 -0
- package/src/trigger/providers/slackbot/locales/zh-TW.json +23 -0
- package/src/trigger/providers/source-events.ts +25 -0
- package/src/trigger/providers/stripe/locales/fr.json +17 -0
- package/src/trigger/providers/stripe/locales/ja.json +17 -0
- package/src/trigger/providers/stripe/locales/ko.json +17 -0
- package/src/trigger/providers/stripe/locales/ru.json +17 -0
- package/src/trigger/providers/stripe/locales/zh-CN.json +17 -0
- package/src/trigger/providers/stripe/locales/zh-TW.json +17 -0
- package/src/trigger/providers/tally/locales/fr.json +12 -0
- package/src/trigger/providers/tally/locales/ja.json +12 -0
- package/src/trigger/providers/tally/locales/ko.json +12 -0
- package/src/trigger/providers/tally/locales/ru.json +12 -0
- package/src/trigger/providers/tally/locales/zh-CN.json +12 -0
- package/src/trigger/providers/tally/locales/zh-TW.json +12 -0
- package/src/trigger/providers/telegram/locales/fr.json +17 -0
- package/src/trigger/providers/telegram/locales/ja.json +17 -0
- package/src/trigger/providers/telegram/locales/ko.json +17 -0
- package/src/trigger/providers/telegram/locales/ru.json +17 -0
- package/src/trigger/providers/telegram/locales/zh-CN.json +17 -0
- package/src/trigger/providers/telegram/locales/zh-TW.json +17 -0
- package/src/trigger/providers/typeform/locales/fr.json +12 -0
- package/src/trigger/providers/typeform/locales/ja.json +12 -0
- package/src/trigger/providers/typeform/locales/ko.json +12 -0
- package/src/trigger/providers/typeform/locales/ru.json +12 -0
- package/src/trigger/providers/typeform/locales/zh-CN.json +12 -0
- package/src/trigger/providers/typeform/locales/zh-TW.json +12 -0
- package/src/trigger/providers/vercel/locales/fr.json +18 -0
- package/src/trigger/providers/vercel/locales/ja.json +18 -0
- package/src/trigger/providers/vercel/locales/ko.json +18 -0
- package/src/trigger/providers/vercel/locales/ru.json +18 -0
- package/src/trigger/providers/vercel/locales/zh-CN.json +18 -0
- package/src/trigger/providers/vercel/locales/zh-TW.json +18 -0
- package/src/trigger/providers/woocommerce/locales/fr.json +19 -0
- package/src/trigger/providers/woocommerce/locales/ja.json +19 -0
- package/src/trigger/providers/woocommerce/locales/ko.json +19 -0
- package/src/trigger/providers/woocommerce/locales/ru.json +19 -0
- package/src/trigger/providers/woocommerce/locales/zh-CN.json +19 -0
- package/src/trigger/providers/woocommerce/locales/zh-TW.json +19 -0
- package/src/trigger/providers/zendesk/locales/fr.json +15 -0
- package/src/trigger/providers/zendesk/locales/ja.json +15 -0
- package/src/trigger/providers/zendesk/locales/ko.json +15 -0
- package/src/trigger/providers/zendesk/locales/ru.json +15 -0
- package/src/trigger/providers/zendesk/locales/zh-CN.json +15 -0
- package/src/trigger/providers/zendesk/locales/zh-TW.json +15 -0
- package/src/trigger/providers/zoom/locales/fr.json +17 -0
- package/src/trigger/providers/zoom/locales/ja.json +17 -0
- package/src/trigger/providers/zoom/locales/ko.json +17 -0
- package/src/trigger/providers/zoom/locales/ru.json +17 -0
- package/src/trigger/providers/zoom/locales/zh-CN.json +17 -0
- package/src/trigger/providers/zoom/locales/zh-TW.json +17 -0
- package/src/types/index.ts +112 -0
- package/src/workflow/common/workflow.ts +273 -0
- package/dist/browser/lib-DrKav3HG.js +0 -11403
- /package/dist/{browser → common}/flow-authoring-edge.d.ts +0 -0
- /package/dist/{browser → common}/flow-authoring-module.d.ts +0 -0
- /package/dist/{browser → common}/flow-authoring.d.ts +0 -0
- /package/dist/{browser → common}/flow-input-value.d.ts +0 -0
- /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
|
+
* 
|
|
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'
|