@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,144 @@
|
|
|
1
|
+
import type { JSONSchema7, JSONSchema7TypeName } from 'json-schema'
|
|
2
|
+
import type { Context } from './common.ts'
|
|
3
|
+
import type { InputSchema } from './compiler.ts'
|
|
4
|
+
import type { CompiledSchema } from './wrapper.ts'
|
|
5
|
+
|
|
6
|
+
import { pick } from '../utils.ts'
|
|
7
|
+
import { recordError, isJSONSchemaKey, recordWarn } from './common.ts'
|
|
8
|
+
import { CompiledKind, wrapCompiledSchema } from './wrapper.ts'
|
|
9
|
+
|
|
10
|
+
type NumericKeys = 'type' | 'multipleOf' | 'maximum' | 'exclusiveMaximum' | 'minimum' | 'exclusiveMinimum'
|
|
11
|
+
type StringKeys = 'type' | 'format' | 'maxLength' | 'minLength' | 'pattern'
|
|
12
|
+
|
|
13
|
+
const NUMERIC_KEYS = new Set<NumericKeys>(['type', 'multipleOf', 'maximum', 'exclusiveMaximum', 'minimum', 'exclusiveMinimum'])
|
|
14
|
+
const STRING_KEYS = new Set<StringKeys>(['type', 'format', 'maxLength', 'minLength', 'pattern'])
|
|
15
|
+
|
|
16
|
+
export type PrimitiveInputSchema = InputSchema & {
|
|
17
|
+
readonly type: Exclude<JSONSchema7TypeName, 'object' | 'array'>
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function compilePrimitiveSchema<E>(context: Context<E>, schema: PrimitiveInputSchema): CompiledSchema<E> | null {
|
|
21
|
+
const { type } = schema
|
|
22
|
+
switch (type) {
|
|
23
|
+
case 'number':
|
|
24
|
+
case 'integer': {
|
|
25
|
+
return compileNumericSchema(context, schema)
|
|
26
|
+
}
|
|
27
|
+
case 'string': {
|
|
28
|
+
return compileStringSchema(context, schema)
|
|
29
|
+
}
|
|
30
|
+
case 'boolean':
|
|
31
|
+
case 'null': {
|
|
32
|
+
const rejectKeys = Object.keys(schema).filter((k) => isJSONSchemaKey(k) && k !== 'type')
|
|
33
|
+
if (rejectKeys.length > 0) {
|
|
34
|
+
recordWarn(context, `key "type" will exclude other keys: ${rejectKeys.toSorted().join(', ')}`)
|
|
35
|
+
}
|
|
36
|
+
const kind = type === 'null' ? CompiledKind.Null : CompiledKind.Boolean
|
|
37
|
+
const compiledSchema = { type }
|
|
38
|
+
return wrapCompiledSchema(kind, compiledSchema, context.delegate, context.path)
|
|
39
|
+
}
|
|
40
|
+
default: {
|
|
41
|
+
recordError(context, `invalid type ${JSON.stringify(type)}`)
|
|
42
|
+
return null
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function compileNumericSchema<E>(context: Context<E>, schema: PrimitiveInputSchema): CompiledSchema<E> | null {
|
|
48
|
+
const rejectKeys = Object.keys(schema).filter((k) => !NUMERIC_KEYS.has(k as NumericKeys) && isJSONSchemaKey(k))
|
|
49
|
+
if (rejectKeys.length > 0) {
|
|
50
|
+
recordWarn(context, `type=${JSON.stringify(schema.type)} will exclude other keys: ${rejectKeys.toSorted().join(', ')}`)
|
|
51
|
+
}
|
|
52
|
+
const compiledSchema = pick(schema, NUMERIC_KEYS)
|
|
53
|
+
|
|
54
|
+
for (const key of NUMERIC_KEYS) {
|
|
55
|
+
const value = compiledSchema[key]
|
|
56
|
+
if (key !== 'type' && value !== undefined && Number.isNaN(value)) {
|
|
57
|
+
recordWarn(context, 'found NaN', key)
|
|
58
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
59
|
+
delete (compiledSchema as any)[key]
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const { maximum, exclusiveMaximum, minimum, exclusiveMinimum } = compiledSchema
|
|
63
|
+
|
|
64
|
+
if (maximum !== undefined && exclusiveMaximum !== undefined) {
|
|
65
|
+
if (maximum === exclusiveMaximum) {
|
|
66
|
+
delete compiledSchema.maximum
|
|
67
|
+
} else if (maximum < exclusiveMaximum) {
|
|
68
|
+
delete compiledSchema.exclusiveMaximum
|
|
69
|
+
} else if (maximum > exclusiveMaximum) {
|
|
70
|
+
delete compiledSchema.maximum
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (minimum !== undefined && exclusiveMinimum !== undefined) {
|
|
74
|
+
if (minimum === exclusiveMinimum) {
|
|
75
|
+
delete compiledSchema.minimum
|
|
76
|
+
} else if (minimum < exclusiveMinimum) {
|
|
77
|
+
delete compiledSchema.exclusiveMinimum
|
|
78
|
+
} else if (minimum > exclusiveMinimum) {
|
|
79
|
+
delete compiledSchema.minimum
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const { multipleOf } = compiledSchema
|
|
83
|
+
|
|
84
|
+
if (multipleOf === 0) {
|
|
85
|
+
delete compiledSchema.multipleOf
|
|
86
|
+
compiledSchema.type = 'number'
|
|
87
|
+
recordWarn(context, 'cannot be 0', 'multipleOf')
|
|
88
|
+
}
|
|
89
|
+
let kind: CompiledKind = CompiledKind.Numeric
|
|
90
|
+
if (!isNumericPossibleInvalid(compiledSchema)) {
|
|
91
|
+
kind = CompiledKind.Never
|
|
92
|
+
}
|
|
93
|
+
return wrapCompiledSchema(kind, compiledSchema, context.delegate, context.path)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function isNumericPossibleInvalid(compiledSchema: JSONSchema7): boolean {
|
|
97
|
+
const { maximum, exclusiveMaximum, minimum, exclusiveMinimum } = compiledSchema
|
|
98
|
+
|
|
99
|
+
if (maximum !== undefined && minimum !== undefined) {
|
|
100
|
+
return maximum >= minimum
|
|
101
|
+
} else if (exclusiveMaximum !== undefined && minimum !== undefined) {
|
|
102
|
+
return exclusiveMaximum > minimum
|
|
103
|
+
} else if (maximum !== undefined && exclusiveMinimum !== undefined) {
|
|
104
|
+
return maximum > exclusiveMinimum
|
|
105
|
+
} else if (exclusiveMaximum !== undefined && exclusiveMinimum !== undefined) {
|
|
106
|
+
return exclusiveMaximum > exclusiveMinimum
|
|
107
|
+
} else {
|
|
108
|
+
return true
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function compileStringSchema<E>(context: Context<E>, schema: PrimitiveInputSchema): CompiledSchema<E> | null {
|
|
113
|
+
const rejectKeys = Object.keys(schema).filter((k) => !STRING_KEYS.has(k as StringKeys) && isJSONSchemaKey(k))
|
|
114
|
+
if (rejectKeys.length > 0) {
|
|
115
|
+
recordWarn(context, `type="string" will exclude other keys: ${rejectKeys.toSorted().join(', ')}`)
|
|
116
|
+
}
|
|
117
|
+
const compiledSchema = pick(schema, STRING_KEYS)
|
|
118
|
+
|
|
119
|
+
cleanInvalidLength(context, compiledSchema, 'maxLength')
|
|
120
|
+
cleanInvalidLength(context, compiledSchema, 'minLength')
|
|
121
|
+
|
|
122
|
+
const max = compiledSchema.maxLength
|
|
123
|
+
const min = compiledSchema.minLength
|
|
124
|
+
let kind: CompiledKind = CompiledKind.String
|
|
125
|
+
|
|
126
|
+
if (max !== undefined) {
|
|
127
|
+
if (max < 0) {
|
|
128
|
+
kind = CompiledKind.Never
|
|
129
|
+
} else if (max !== undefined && min !== undefined && max < min) {
|
|
130
|
+
kind = CompiledKind.Never
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return wrapCompiledSchema(kind, compiledSchema, context.delegate, context.path)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function cleanInvalidLength<E>(context: Context<E>, compiledSchema: JSONSchema7, key: 'maxLength' | 'minLength'): void {
|
|
137
|
+
const length = compiledSchema[key]
|
|
138
|
+
if (length !== undefined) {
|
|
139
|
+
if (Number.isNaN(length)) {
|
|
140
|
+
recordWarn(context, 'found NaN', key)
|
|
141
|
+
delete compiledSchema[key]
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export function cleanEmptyValues<T extends object>(origin: T): Partial<T> {
|
|
2
|
+
for (const key in origin) {
|
|
3
|
+
const value = origin[key]
|
|
4
|
+
if (value === undefined) {
|
|
5
|
+
delete origin[key]
|
|
6
|
+
} else if (value && typeof value === 'object') {
|
|
7
|
+
if (Array.isArray(value)) {
|
|
8
|
+
if (value.length === 0) {
|
|
9
|
+
delete origin[key]
|
|
10
|
+
}
|
|
11
|
+
} else if (isEmptyObject(value)) {
|
|
12
|
+
delete origin[key]
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return origin
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function isEmptyObject(object: object): boolean {
|
|
20
|
+
for (const _ in object) {
|
|
21
|
+
return false
|
|
22
|
+
}
|
|
23
|
+
return true
|
|
24
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import type { JSONSchema7 } from 'json-schema'
|
|
2
|
+
import type { ExtendsSchema } from '../extends/index.ts'
|
|
3
|
+
import type { Schema } from '../types.ts'
|
|
4
|
+
import type { JSONDelegate } from '../types.ts'
|
|
5
|
+
import type { DeepReadonly } from '../utils.ts'
|
|
6
|
+
|
|
7
|
+
import { createId, deepFreeze } from '../utils.ts'
|
|
8
|
+
|
|
9
|
+
const symbolID = Symbol('compiledId')
|
|
10
|
+
const symbolKind = Symbol('compiledKind')
|
|
11
|
+
const symbolPath = Symbol('compiledPath')
|
|
12
|
+
const symbolValidatorLoader = Symbol('validatorLoader')
|
|
13
|
+
|
|
14
|
+
export type SchemaPath = readonly (string | number)[]
|
|
15
|
+
|
|
16
|
+
export const CompiledKind = Object.freeze({
|
|
17
|
+
Extends: 0,
|
|
18
|
+
Never: 1,
|
|
19
|
+
Any: 2,
|
|
20
|
+
Null: 3,
|
|
21
|
+
String: 4,
|
|
22
|
+
Numeric: 5,
|
|
23
|
+
Boolean: 6,
|
|
24
|
+
Object: 7,
|
|
25
|
+
Array: 8,
|
|
26
|
+
Not: 9,
|
|
27
|
+
Combination: 10,
|
|
28
|
+
EnumOrConst: 11,
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
export type CompiledKind = (typeof CompiledKind)[keyof typeof CompiledKind]
|
|
32
|
+
|
|
33
|
+
export type CompiledValue = null | number | string | boolean | CompiledObject
|
|
34
|
+
export type CompiledObject = (CompiledValue[] | { [key: string]: CompiledValue }) & {
|
|
35
|
+
readonly [symbolID]: number
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
type ValidatorLoader<E> = () => (value: unknown) => boolean | readonly E[]
|
|
39
|
+
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
|
+
export const ANY: DeepReadonly<CompiledSchema<any>> = deepFreeze(toCompiledSchema(CompiledKind.Any, createId(), {}, () => () => true))
|
|
42
|
+
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
|
+
export const NEVER: DeepReadonly<CompiledSchema<any>> = deepFreeze(
|
|
45
|
+
toCompiledSchema(CompiledKind.Never, createId(), { type: 'string', maxLength: 0, minLength: 1 }, () => () => false),
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
export interface CompiledSchema<E> extends JSONSchema7 {
|
|
49
|
+
readonly [symbolKind]: CompiledKind
|
|
50
|
+
readonly [symbolID]: number
|
|
51
|
+
readonly [symbolPath]: SchemaPath
|
|
52
|
+
readonly [symbolValidatorLoader]?: ValidatorLoader<E>
|
|
53
|
+
readonly isValid?: (value: unknown) => boolean | readonly E[]
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function isCompiledObject(value: unknown): value is DeepReadonly<CompiledObject> {
|
|
57
|
+
if (value === null || typeof value !== 'object') {
|
|
58
|
+
return false
|
|
59
|
+
}
|
|
60
|
+
return symbolID in value
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function isCompiledSchema<E>(object: unknown): object is DeepReadonly<CompiledSchema<E>> {
|
|
64
|
+
if (object === null || typeof object !== 'object') {
|
|
65
|
+
return false
|
|
66
|
+
}
|
|
67
|
+
return symbolID in object && symbolKind in object
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function getKind<E>(schema: Schema<E>): CompiledKind {
|
|
71
|
+
if (isCompiledSchema(schema)) {
|
|
72
|
+
return schema[symbolKind]
|
|
73
|
+
} else {
|
|
74
|
+
return CompiledKind.Extends
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function getId<E>(schema: ExtendsSchema | DeepReadonly<CompiledSchema<E>> | DeepReadonly<CompiledObject>): number {
|
|
79
|
+
if (isCompiledSchema(schema) || isCompiledObject(schema)) {
|
|
80
|
+
return schema[symbolID]
|
|
81
|
+
} else {
|
|
82
|
+
return (schema as ExtendsSchema).id
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function getPath<E>(schema: Schema<E>): SchemaPath | undefined {
|
|
87
|
+
return isCompiledSchema(schema) ? schema[symbolPath] : undefined
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function assertCompiledValue<V>(value: V): asserts value is V & CompiledValue {
|
|
91
|
+
let failure = false
|
|
92
|
+
switch (typeof value) {
|
|
93
|
+
case 'number':
|
|
94
|
+
case 'string':
|
|
95
|
+
case 'boolean': {
|
|
96
|
+
break
|
|
97
|
+
}
|
|
98
|
+
case 'object': {
|
|
99
|
+
failure = !isCompiledObject(value)
|
|
100
|
+
break
|
|
101
|
+
}
|
|
102
|
+
default: {
|
|
103
|
+
failure = true
|
|
104
|
+
break
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (failure) {
|
|
108
|
+
throw new Error('assert a CompiledValue but fail')
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export function wrapCompiledValue(value: unknown): CompiledValue {
|
|
113
|
+
if (value === null || typeof value !== 'object') {
|
|
114
|
+
return value as CompiledValue
|
|
115
|
+
}
|
|
116
|
+
Object.defineProperty(value, symbolID, {
|
|
117
|
+
value: createId(),
|
|
118
|
+
configurable: false,
|
|
119
|
+
writable: false,
|
|
120
|
+
enumerable: false,
|
|
121
|
+
})
|
|
122
|
+
return value as CompiledValue
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function wrapCompiledSchema<E>(kind: CompiledKind, schema: JSONSchema7, delegate?: JSONDelegate<E>, path: SchemaPath = []): CompiledSchema<E> {
|
|
126
|
+
return toCompiledSchema(
|
|
127
|
+
kind,
|
|
128
|
+
createId(),
|
|
129
|
+
schema,
|
|
130
|
+
delegate &&
|
|
131
|
+
(() => {
|
|
132
|
+
return delegate.compile(schema)
|
|
133
|
+
}),
|
|
134
|
+
path,
|
|
135
|
+
)
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export function toNever<T extends CompiledSchema<E>, E>(schema: T): T {
|
|
139
|
+
return toCompiledSchema(CompiledKind.Never, createId(), { ...schema }, schema[symbolValidatorLoader], schema[symbolPath]) as T
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function toCompiledSchema<E>(
|
|
143
|
+
kind: CompiledKind,
|
|
144
|
+
id: number,
|
|
145
|
+
schema: JSONSchema7,
|
|
146
|
+
validatorLoader?: ValidatorLoader<E>,
|
|
147
|
+
path: SchemaPath = [],
|
|
148
|
+
): CompiledSchema<E> {
|
|
149
|
+
let validator: ReturnType<ValidatorLoader<E>> | null = null
|
|
150
|
+
|
|
151
|
+
Object.defineProperties(schema, {
|
|
152
|
+
[symbolKind]: {
|
|
153
|
+
value: kind,
|
|
154
|
+
configurable: false,
|
|
155
|
+
writable: false,
|
|
156
|
+
enumerable: false,
|
|
157
|
+
},
|
|
158
|
+
[symbolID]: {
|
|
159
|
+
value: id,
|
|
160
|
+
configurable: false,
|
|
161
|
+
writable: false,
|
|
162
|
+
enumerable: false,
|
|
163
|
+
},
|
|
164
|
+
[symbolPath]: {
|
|
165
|
+
value: path,
|
|
166
|
+
configurable: false,
|
|
167
|
+
writable: false,
|
|
168
|
+
enumerable: false,
|
|
169
|
+
},
|
|
170
|
+
[symbolValidatorLoader]: {
|
|
171
|
+
value: validatorLoader,
|
|
172
|
+
configurable: false,
|
|
173
|
+
writable: false,
|
|
174
|
+
enumerable: false,
|
|
175
|
+
},
|
|
176
|
+
isValid: {
|
|
177
|
+
configurable: false,
|
|
178
|
+
enumerable: false,
|
|
179
|
+
get: (): ((value: unknown) => boolean | readonly E[]) | undefined => {
|
|
180
|
+
if (validatorLoader) {
|
|
181
|
+
if (!validator) {
|
|
182
|
+
validator = validatorLoader()
|
|
183
|
+
}
|
|
184
|
+
return validator
|
|
185
|
+
} else {
|
|
186
|
+
return undefined
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
})
|
|
191
|
+
return schema as CompiledSchema<E>
|
|
192
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export class SchemaError<E = unknown> extends Error {
|
|
2
|
+
public readonly items: readonly SchemaErrorItem<E>[]
|
|
3
|
+
|
|
4
|
+
public constructor(items: readonly SchemaErrorItem<E>[] = []) {
|
|
5
|
+
super(createSchemaErrorMessage(items))
|
|
6
|
+
this.name = 'SchemaError'
|
|
7
|
+
this.items = items
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type SchemaErrorItem<E = unknown> = CompiledSchemaErrorItem | ExternalSchemaErrorItem<E>
|
|
12
|
+
|
|
13
|
+
export type CompiledSchemaErrorItem = {
|
|
14
|
+
readonly kind: typeof SchemaErrorItemKind.Compiled
|
|
15
|
+
readonly path: (number | string)[]
|
|
16
|
+
readonly message: string
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type ExternalSchemaErrorItem<E = unknown> = {
|
|
20
|
+
readonly kind: typeof SchemaErrorItemKind.External
|
|
21
|
+
readonly error: E
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export const SchemaErrorItemKind = Object.freeze({
|
|
25
|
+
Compiled: 0,
|
|
26
|
+
External: 1,
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
export type SchemaErrorItemKind = (typeof SchemaErrorItemKind)[keyof typeof SchemaErrorItemKind]
|
|
30
|
+
|
|
31
|
+
export function stringifySchemaError<E = unknown>(errorItem: SchemaErrorItem<E>): string {
|
|
32
|
+
switch (errorItem.kind) {
|
|
33
|
+
case SchemaErrorItemKind.Compiled: {
|
|
34
|
+
const { message, path } = errorItem
|
|
35
|
+
return `${message} (at ${path.length > 0 ? path.join('.') : '$root'})`
|
|
36
|
+
}
|
|
37
|
+
case SchemaErrorItemKind.External: {
|
|
38
|
+
return String(errorItem.error)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function createSchemaErrorMessage(items: readonly SchemaErrorItem[]): string {
|
|
44
|
+
switch (items.length) {
|
|
45
|
+
case 0: {
|
|
46
|
+
return 'without any items'
|
|
47
|
+
}
|
|
48
|
+
case 1: {
|
|
49
|
+
return stringifySchemaError(items[0])
|
|
50
|
+
}
|
|
51
|
+
default: {
|
|
52
|
+
return `${stringifySchemaError(items[0])} ... omit the rest ${items.length - 1} items`
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|