@nocobase/plugin-workflow 0.11.1-alpha.5 → 0.12.0-alpha.2
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/client.d.ts +2 -3
- package/client.js +1 -1
- package/dist/client/index.js +7802 -0
- package/{lib → dist}/client/nodes/aggregate.d.ts +1 -5
- package/{lib → dist}/client/nodes/create.d.ts +1 -2
- package/{lib → dist}/client/nodes/destroy.d.ts +1 -1
- package/{lib → dist}/client/nodes/query.d.ts +1 -2
- package/{lib → dist}/client/nodes/request.d.ts +1 -2
- package/{lib → dist}/client/nodes/update.d.ts +1 -1
- package/{lib → dist}/client/schemas/collection.d.ts +1 -2
- package/{lib → dist}/client/triggers/collection.d.ts +6 -7
- package/{lib → dist}/index.d.ts +1 -0
- package/dist/index.js +18 -0
- package/dist/locale/en-US.js +133 -0
- package/{lib → dist}/locale/es-ES.js +51 -54
- package/dist/locale/fr-FR.js +133 -0
- package/dist/locale/ja-JP.js +91 -0
- package/dist/locale/pt-BR.js +133 -0
- package/dist/locale/ru-RU.js +91 -0
- package/dist/locale/tr-TR.js +91 -0
- package/dist/locale/zh-CN.js +216 -0
- package/dist/node_modules/cron-parser/.eslintrc.json +15 -0
- package/dist/node_modules/cron-parser/.travis.yml +7 -0
- package/dist/node_modules/cron-parser/LICENSE +21 -0
- package/dist/node_modules/cron-parser/component.json +11 -0
- package/dist/node_modules/cron-parser/index.d.ts +1 -0
- package/dist/node_modules/cron-parser/lib/date.js +252 -0
- package/dist/node_modules/cron-parser/lib/expression.js +983 -0
- package/dist/node_modules/cron-parser/lib/field_compactor.js +70 -0
- package/dist/node_modules/cron-parser/lib/field_stringify.js +38 -0
- package/dist/node_modules/cron-parser/lib/parser.js +1 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/build/amd/luxon.js +8489 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/build/cjs-browser/luxon.js +8487 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/build/global/luxon.js +8490 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/build/global/luxon.min.js +1 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/build/node/luxon.js +7522 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/package.json +96 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/datetime.js +2169 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/duration.js +880 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/errors.js +61 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/conversions.js +157 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/diff.js +80 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/digits.js +76 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/english.js +233 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/formats.js +191 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/formatter.js +386 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/invalid.js +14 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/locale.js +482 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/regexParser.js +335 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/tokenParser.js +424 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/util.js +292 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/zoneUtil.js +36 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/info.js +193 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/interval.js +602 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/luxon.js +26 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/luxonFilled.js +13 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/settings.js +137 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/zone.js +88 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/IANAZone.js +191 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/fixedOffsetZone.js +94 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/invalidZone.js +53 -0
- package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/localZone.js +63 -0
- package/dist/node_modules/cron-parser/package.json +1 -0
- package/dist/node_modules/cron-parser/test/31_of_month.js +17 -0
- package/dist/node_modules/cron-parser/test/bug.js +29 -0
- package/dist/node_modules/cron-parser/test/crondate.js +16 -0
- package/dist/node_modules/cron-parser/test/crontab.example +7 -0
- package/dist/node_modules/cron-parser/test/empty_around_comma.js +22 -0
- package/dist/node_modules/cron-parser/test/expression.js +1489 -0
- package/dist/node_modules/cron-parser/test/field_compactor.js +250 -0
- package/dist/node_modules/cron-parser/test/field_stringify.js +84 -0
- package/dist/node_modules/cron-parser/test/fields.js +32 -0
- package/dist/node_modules/cron-parser/test/increment_on_first_iteration.js +22 -0
- package/dist/node_modules/cron-parser/test/index-ts3.test-d.ts +133 -0
- package/dist/node_modules/cron-parser/test/index.test-d.ts +138 -0
- package/dist/node_modules/cron-parser/test/leap_year.js +17 -0
- package/dist/node_modules/cron-parser/test/parser.js +46 -0
- package/dist/node_modules/cron-parser/test/parser_crondate_formats.js +145 -0
- package/dist/node_modules/cron-parser/test/parser_day_of_month.js +169 -0
- package/dist/node_modules/cron-parser/test/prev_date.js +32 -0
- package/dist/node_modules/cron-parser/test/stringify.js +402 -0
- package/dist/node_modules/cron-parser/test/timezone.js +422 -0
- package/dist/node_modules/cron-parser/types/common.d.ts +131 -0
- package/dist/node_modules/cron-parser/types/index.d.ts +45 -0
- package/dist/node_modules/cron-parser/types/ts3/index.d.ts +28 -0
- package/dist/node_modules/lru-cache/index-cjs.d.ts +7 -0
- package/dist/node_modules/lru-cache/index-cjs.js +1 -0
- package/dist/node_modules/lru-cache/index.d.ts +807 -0
- package/dist/node_modules/lru-cache/index.js +1334 -0
- package/dist/node_modules/lru-cache/index.min.js +2 -0
- package/dist/node_modules/lru-cache/package.json +1 -0
- package/dist/server/Plugin.js +297 -0
- package/{src/server/Processor.ts → dist/server/Processor.js} +80 -147
- package/dist/server/actions/index.js +49 -0
- package/{src/server/actions/nodes.ts → dist/server/actions/nodes.js} +55 -81
- package/{src/server/actions/workflows.ts → dist/server/actions/workflows.js} +60 -72
- package/dist/server/collections/executions.js +37 -0
- package/dist/server/collections/flow_nodes.js +56 -0
- package/dist/server/collections/jobs.js +33 -0
- package/dist/server/collections/workflows.js +90 -0
- package/{lib → dist}/server/constants.js +5 -8
- package/dist/server/fields/expression-field.js +11 -0
- package/dist/server/fields/index.js +11 -0
- package/dist/server/functions/index.js +13 -0
- package/dist/server/index.js +41 -0
- package/dist/server/instructions/aggregate.js +37 -0
- package/dist/server/instructions/calculation.js +34 -0
- package/dist/server/instructions/condition.js +123 -0
- package/{src/server/instructions/create.ts → dist/server/instructions/create.js} +17 -17
- package/dist/server/instructions/delay.js +87 -0
- package/dist/server/instructions/destroy.js +24 -0
- package/dist/server/instructions/index.js +40 -0
- package/{src/server/instructions/loop.ts → dist/server/instructions/loop.js} +21 -43
- package/{src/server/instructions/manual/actions.ts → dist/server/instructions/manual/actions.js} +18 -44
- package/dist/server/instructions/manual/collecions/jobs.js +21 -0
- package/dist/server/instructions/manual/collecions/users.js +19 -0
- package/dist/server/instructions/manual/collecions/users_jobs.js +52 -0
- package/{src/server/instructions/manual/forms/create.ts → dist/server/instructions/manual/forms/create.js} +8 -8
- package/dist/server/instructions/manual/forms/index.js +16 -0
- package/{src/server/instructions/manual/forms/update.ts → dist/server/instructions/manual/forms/update.js} +8 -8
- package/dist/server/instructions/manual/index.js +160 -0
- package/dist/server/instructions/parallel.js +105 -0
- package/dist/server/instructions/query.js +36 -0
- package/dist/server/instructions/request.js +69 -0
- package/dist/server/instructions/sql.js +26 -0
- package/dist/server/instructions/update.js +24 -0
- package/{src/server/migrations/20221129153547-calculation-variables.ts → dist/server/migrations/20221129153547-calculation-variables.js} +20 -19
- package/dist/server/migrations/20230221032941-change-request-body-type.js +71 -0
- package/dist/server/migrations/20230221071831-calculation-expression.js +94 -0
- package/dist/server/migrations/20230221121203-condition-calculation.js +41 -0
- package/dist/server/migrations/20230221162902-jsonb-to-json.js +52 -0
- package/dist/server/migrations/20230411034722-manual-multi-form.js +252 -0
- package/dist/server/migrations/20230612021134-manual-collection-block.js +126 -0
- package/dist/server/migrations/20230710115902-manual-action-values.js +74 -0
- package/{src/server/triggers/collection.ts → dist/server/triggers/collection.js} +34 -64
- package/dist/server/triggers/index.js +27 -0
- package/{src/server/triggers/schedule.ts → dist/server/triggers/schedule.js} +108 -220
- package/dist/server/types/Execution.js +8 -0
- package/dist/server/types/FlowNode.js +8 -0
- package/dist/server/types/Job.js +8 -0
- package/dist/server/types/Workflow.js +8 -0
- package/dist/server/types/index.js +2 -0
- package/{lib → dist}/server/utils.js +6 -8
- package/package.json +26 -37
- package/server.d.ts +2 -3
- package/server.js +1 -1
- package/lib/client/AddButton.js +0 -161
- package/lib/client/Branch.js +0 -50
- package/lib/client/CanvasContent.js +0 -51
- package/lib/client/ExecutionCanvas.js +0 -218
- package/lib/client/ExecutionLink.js +0 -48
- package/lib/client/ExecutionPage.js +0 -68
- package/lib/client/ExecutionResourceProvider.js +0 -48
- package/lib/client/FlowContext.js +0 -21
- package/lib/client/WorkflowCanvas.js +0 -300
- package/lib/client/WorkflowLink.js +0 -48
- package/lib/client/WorkflowPage.js +0 -70
- package/lib/client/WorkflowProvider.js +0 -100
- package/lib/client/components/CollectionBlockInitializer.js +0 -103
- package/lib/client/components/CollectionFieldset.js +0 -198
- package/lib/client/components/Duration.js +0 -72
- package/lib/client/components/DynamicExpression.js +0 -117
- package/lib/client/components/FieldsSelect.js +0 -72
- package/lib/client/components/FilterDynamicComponent.js +0 -34
- package/lib/client/components/NodeDescription.js +0 -73
- package/lib/client/components/NullRender.js +0 -9
- package/lib/client/components/OpenDrawer.js +0 -68
- package/lib/client/components/RadioWithTooltip.js +0 -65
- package/lib/client/components/ValueBlock.js +0 -103
- package/lib/client/components/renderEngineReference.js +0 -49
- package/lib/client/constants.js +0 -126
- package/lib/client/index.js +0 -121
- package/lib/client/interfaces/expression.js +0 -38
- package/lib/client/locale/index.js +0 -42
- package/lib/client/nodes/aggregate.js +0 -353
- package/lib/client/nodes/calculation.js +0 -292
- package/lib/client/nodes/condition.js +0 -531
- package/lib/client/nodes/create.js +0 -110
- package/lib/client/nodes/delay.js +0 -47
- package/lib/client/nodes/destroy.js +0 -49
- package/lib/client/nodes/index.js +0 -550
- package/lib/client/nodes/loop.js +0 -171
- package/lib/client/nodes/manual/AssigneesSelect.js +0 -56
- package/lib/client/nodes/manual/DetailsBlockProvider.js +0 -106
- package/lib/client/nodes/manual/FormBlockInitializer.js +0 -107
- package/lib/client/nodes/manual/FormBlockProvider.js +0 -113
- package/lib/client/nodes/manual/ModeConfig.js +0 -126
- package/lib/client/nodes/manual/SchemaConfig.js +0 -468
- package/lib/client/nodes/manual/WorkflowTodo.js +0 -642
- package/lib/client/nodes/manual/WorkflowTodoBlockInitializer.js +0 -60
- package/lib/client/nodes/manual/forms/create.js +0 -111
- package/lib/client/nodes/manual/forms/custom.js +0 -428
- package/lib/client/nodes/manual/forms/update.js +0 -168
- package/lib/client/nodes/manual/index.js +0 -168
- package/lib/client/nodes/manual/utils.js +0 -31
- package/lib/client/nodes/parallel.js +0 -162
- package/lib/client/nodes/query.js +0 -112
- package/lib/client/nodes/request.js +0 -225
- package/lib/client/nodes/sql.js +0 -61
- package/lib/client/nodes/update.js +0 -127
- package/lib/client/schemas/collection.js +0 -93
- package/lib/client/schemas/executions.js +0 -190
- package/lib/client/schemas/workflows.js +0 -397
- package/lib/client/style.js +0 -350
- package/lib/client/triggers/collection.js +0 -188
- package/lib/client/triggers/index.js +0 -356
- package/lib/client/triggers/schedule/EndsByField.js +0 -71
- package/lib/client/triggers/schedule/OnField.js +0 -117
- package/lib/client/triggers/schedule/RepeatField.js +0 -155
- package/lib/client/triggers/schedule/ScheduleConfig.js +0 -251
- package/lib/client/triggers/schedule/constants.js +0 -11
- package/lib/client/triggers/schedule/index.js +0 -101
- package/lib/client/triggers/schedule/locale/Cron.zh-CN.js +0 -48
- package/lib/client/utils.js +0 -59
- package/lib/client/variable.js +0 -319
- package/lib/index.js +0 -13
- package/lib/locale/en-US.js +0 -136
- package/lib/locale/fr-FR.js +0 -136
- package/lib/locale/ja-JP.js +0 -94
- package/lib/locale/pt-BR.js +0 -136
- package/lib/locale/ru-RU.js +0 -94
- package/lib/locale/tr-TR.js +0 -94
- package/lib/locale/zh-CN.js +0 -219
- package/lib/server/Plugin.js +0 -382
- package/lib/server/Processor.js +0 -394
- package/lib/server/actions/index.js +0 -30
- package/lib/server/actions/nodes.js +0 -269
- package/lib/server/actions/workflows.js +0 -273
- package/lib/server/collections/executions.js +0 -33
- package/lib/server/collections/flow_nodes.js +0 -53
- package/lib/server/collections/jobs.js +0 -30
- package/lib/server/collections/workflows.js +0 -76
- package/lib/server/fields/expression-field.js +0 -19
- package/lib/server/fields/index.js +0 -12
- package/lib/server/functions/index.js +0 -26
- package/lib/server/index.js +0 -55
- package/lib/server/instructions/aggregate.js +0 -57
- package/lib/server/instructions/calculation.js +0 -59
- package/lib/server/instructions/condition.js +0 -150
- package/lib/server/instructions/create.js +0 -60
- package/lib/server/instructions/delay.js +0 -118
- package/lib/server/instructions/destroy.js +0 -37
- package/lib/server/instructions/index.js +0 -44
- package/lib/server/instructions/loop.js +0 -107
- package/lib/server/instructions/manual/actions.js +0 -99
- package/lib/server/instructions/manual/collecions/jobs.js +0 -21
- package/lib/server/instructions/manual/collecions/users.js +0 -19
- package/lib/server/instructions/manual/collecions/users_jobs.js +0 -46
- package/lib/server/instructions/manual/forms/create.js +0 -52
- package/lib/server/instructions/manual/forms/index.js +0 -15
- package/lib/server/instructions/manual/forms/update.js +0 -53
- package/lib/server/instructions/manual/index.js +0 -174
- package/lib/server/instructions/parallel.js +0 -128
- package/lib/server/instructions/query.js +0 -53
- package/lib/server/instructions/request.js +0 -99
- package/lib/server/instructions/sql.js +0 -34
- package/lib/server/instructions/update.js +0 -38
- package/lib/server/migrations/20221129153547-calculation-variables.js +0 -92
- package/lib/server/migrations/20230221032941-change-request-body-type.js +0 -90
- package/lib/server/migrations/20230221071831-calculation-expression.js +0 -111
- package/lib/server/migrations/20230221121203-condition-calculation.js +0 -103
- package/lib/server/migrations/20230221162902-jsonb-to-json.js +0 -64
- package/lib/server/migrations/20230411034722-manual-multi-form.js +0 -297
- package/lib/server/migrations/20230612021134-manual-collection-block.js +0 -155
- package/lib/server/migrations/20230710115902-manual-action-values.js +0 -97
- package/lib/server/triggers/collection.js +0 -175
- package/lib/server/triggers/index.js +0 -46
- package/lib/server/triggers/schedule.js +0 -582
- package/lib/server/types/Execution.js +0 -15
- package/lib/server/types/FlowNode.js +0 -15
- package/lib/server/types/Job.js +0 -15
- package/lib/server/types/Workflow.js +0 -15
- package/lib/server/types/index.js +0 -5
- package/src/client/AddButton.tsx +0 -111
- package/src/client/Branch.tsx +0 -37
- package/src/client/CanvasContent.tsx +0 -25
- package/src/client/ExecutionCanvas.tsx +0 -166
- package/src/client/ExecutionLink.tsx +0 -16
- package/src/client/ExecutionPage.tsx +0 -45
- package/src/client/ExecutionResourceProvider.tsx +0 -21
- package/src/client/FlowContext.ts +0 -7
- package/src/client/WorkflowCanvas.tsx +0 -221
- package/src/client/WorkflowLink.tsx +0 -16
- package/src/client/WorkflowPage.tsx +0 -52
- package/src/client/WorkflowProvider.tsx +0 -84
- package/src/client/components/CollectionBlockInitializer.tsx +0 -71
- package/src/client/components/CollectionFieldset.tsx +0 -152
- package/src/client/components/Duration.tsx +0 -45
- package/src/client/components/DynamicExpression.tsx +0 -57
- package/src/client/components/FieldsSelect.tsx +0 -32
- package/src/client/components/FilterDynamicComponent.tsx +0 -15
- package/src/client/components/NodeDescription.tsx +0 -51
- package/src/client/components/NullRender.tsx +0 -3
- package/src/client/components/OpenDrawer.tsx +0 -24
- package/src/client/components/RadioWithTooltip.tsx +0 -38
- package/src/client/components/ValueBlock.tsx +0 -67
- package/src/client/components/renderEngineReference.tsx +0 -30
- package/src/client/constants.tsx +0 -91
- package/src/client/index.tsx +0 -51
- package/src/client/interfaces/expression.tsx +0 -25
- package/src/client/locale/index.ts +0 -18
- package/src/client/nodes/aggregate.tsx +0 -327
- package/src/client/nodes/calculation.tsx +0 -216
- package/src/client/nodes/condition.tsx +0 -463
- package/src/client/nodes/create.tsx +0 -85
- package/src/client/nodes/delay.tsx +0 -37
- package/src/client/nodes/destroy.tsx +0 -34
- package/src/client/nodes/index.tsx +0 -500
- package/src/client/nodes/loop.tsx +0 -144
- package/src/client/nodes/manual/AssigneesSelect.tsx +0 -33
- package/src/client/nodes/manual/DetailsBlockProvider.tsx +0 -80
- package/src/client/nodes/manual/FormBlockInitializer.tsx +0 -69
- package/src/client/nodes/manual/FormBlockProvider.tsx +0 -75
- package/src/client/nodes/manual/ModeConfig.tsx +0 -84
- package/src/client/nodes/manual/SchemaConfig.tsx +0 -509
- package/src/client/nodes/manual/WorkflowTodo.tsx +0 -607
- package/src/client/nodes/manual/WorkflowTodoBlockInitializer.tsx +0 -28
- package/src/client/nodes/manual/forms/create.tsx +0 -92
- package/src/client/nodes/manual/forms/custom.tsx +0 -392
- package/src/client/nodes/manual/forms/update.tsx +0 -134
- package/src/client/nodes/manual/index.tsx +0 -162
- package/src/client/nodes/manual/utils.ts +0 -28
- package/src/client/nodes/parallel.tsx +0 -138
- package/src/client/nodes/query.tsx +0 -88
- package/src/client/nodes/request.tsx +0 -185
- package/src/client/nodes/sql.tsx +0 -37
- package/src/client/nodes/update.tsx +0 -100
- package/src/client/schemas/collection.ts +0 -75
- package/src/client/schemas/executions.tsx +0 -169
- package/src/client/schemas/workflows.ts +0 -364
- package/src/client/style.tsx +0 -350
- package/src/client/triggers/collection.tsx +0 -190
- package/src/client/triggers/index.tsx +0 -311
- package/src/client/triggers/schedule/EndsByField.tsx +0 -40
- package/src/client/triggers/schedule/OnField.tsx +0 -64
- package/src/client/triggers/schedule/RepeatField.tsx +0 -116
- package/src/client/triggers/schedule/ScheduleConfig.tsx +0 -227
- package/src/client/triggers/schedule/constants.ts +0 -4
- package/src/client/triggers/schedule/index.tsx +0 -78
- package/src/client/triggers/schedule/locale/Cron.zh-CN.ts +0 -79
- package/src/client/utils.ts +0 -36
- package/src/client/variable.tsx +0 -318
- package/src/index.ts +0 -1
- package/src/locale/en-US.ts +0 -136
- package/src/locale/es-ES.ts +0 -129
- package/src/locale/fr-FR.ts +0 -137
- package/src/locale/ja-JP.ts +0 -90
- package/src/locale/pt-BR.ts +0 -136
- package/src/locale/ru-RU.ts +0 -90
- package/src/locale/tr-TR.ts +0 -90
- package/src/locale/zh-CN.ts +0 -248
- package/src/server/Plugin.ts +0 -355
- package/src/server/__tests__/Plugin.test.ts +0 -398
- package/src/server/__tests__/Processor.test.ts +0 -474
- package/src/server/__tests__/actions/workflows.test.ts +0 -419
- package/src/server/__tests__/collections/categories.ts +0 -27
- package/src/server/__tests__/collections/comments.ts +0 -24
- package/src/server/__tests__/collections/posts.ts +0 -42
- package/src/server/__tests__/collections/replies.ts +0 -9
- package/src/server/__tests__/collections/tags.ts +0 -15
- package/src/server/__tests__/index.ts +0 -89
- package/src/server/__tests__/instructions/aggregate.test.ts +0 -294
- package/src/server/__tests__/instructions/calculation.test.ts +0 -265
- package/src/server/__tests__/instructions/condition.test.ts +0 -434
- package/src/server/__tests__/instructions/create.test.ts +0 -129
- package/src/server/__tests__/instructions/delay.test.ts +0 -182
- package/src/server/__tests__/instructions/destroy.test.ts +0 -58
- package/src/server/__tests__/instructions/loop.test.ts +0 -331
- package/src/server/__tests__/instructions/manual.test.ts +0 -1173
- package/src/server/__tests__/instructions/parallel.test.ts +0 -445
- package/src/server/__tests__/instructions/query.test.ts +0 -359
- package/src/server/__tests__/instructions/request.test.ts +0 -247
- package/src/server/__tests__/instructions/sql.test.ts +0 -162
- package/src/server/__tests__/instructions/update.test.ts +0 -189
- package/src/server/__tests__/triggers/collection.test.ts +0 -333
- package/src/server/__tests__/triggers/schedule.test.ts +0 -369
- package/src/server/actions/index.ts +0 -25
- package/src/server/collections/executions.ts +0 -35
- package/src/server/collections/flow_nodes.ts +0 -54
- package/src/server/collections/jobs.ts +0 -31
- package/src/server/collections/workflows.ts +0 -88
- package/src/server/constants.ts +0 -26
- package/src/server/fields/expression-field.ts +0 -11
- package/src/server/fields/index.ts +0 -7
- package/src/server/functions/index.ts +0 -16
- package/src/server/index.ts +0 -6
- package/src/server/instructions/aggregate.ts +0 -42
- package/src/server/instructions/calculation.ts +0 -41
- package/src/server/instructions/condition.ts +0 -172
- package/src/server/instructions/delay.ts +0 -105
- package/src/server/instructions/destroy.ts +0 -23
- package/src/server/instructions/index.ts +0 -64
- package/src/server/instructions/manual/collecions/jobs.ts +0 -17
- package/src/server/instructions/manual/collecions/users.ts +0 -15
- package/src/server/instructions/manual/collecions/users_jobs.ts +0 -50
- package/src/server/instructions/manual/forms/index.ts +0 -12
- package/src/server/instructions/manual/index.ts +0 -184
- package/src/server/instructions/parallel.ts +0 -121
- package/src/server/instructions/query.ts +0 -42
- package/src/server/instructions/request.ts +0 -88
- package/src/server/instructions/sql.ts +0 -25
- package/src/server/instructions/update.ts +0 -24
- package/src/server/migrations/20230221032941-change-request-body-type.ts +0 -76
- package/src/server/migrations/20230221071831-calculation-expression.ts +0 -102
- package/src/server/migrations/20230221121203-condition-calculation.ts +0 -82
- package/src/server/migrations/20230221162902-jsonb-to-json.ts +0 -51
- package/src/server/migrations/20230411034722-manual-multi-form.ts +0 -282
- package/src/server/migrations/20230612021134-manual-collection-block.ts +0 -138
- package/src/server/migrations/20230710115902-manual-action-values.ts +0 -78
- package/src/server/triggers/index.ts +0 -22
- package/src/server/types/Execution.ts +0 -26
- package/src/server/types/FlowNode.ts +0 -21
- package/src/server/types/Job.ts +0 -18
- package/src/server/types/Workflow.ts +0 -36
- package/src/server/types/index.ts +0 -4
- package/src/server/utils.ts +0 -17
- /package/{lib → dist}/client/AddButton.d.ts +0 -0
- /package/{lib → dist}/client/Branch.d.ts +0 -0
- /package/{lib → dist}/client/CanvasContent.d.ts +0 -0
- /package/{lib → dist}/client/ExecutionCanvas.d.ts +0 -0
- /package/{lib → dist}/client/ExecutionLink.d.ts +0 -0
- /package/{lib → dist}/client/ExecutionPage.d.ts +0 -0
- /package/{lib → dist}/client/ExecutionResourceProvider.d.ts +0 -0
- /package/{lib → dist}/client/FlowContext.d.ts +0 -0
- /package/{lib → dist}/client/WorkflowCanvas.d.ts +0 -0
- /package/{lib → dist}/client/WorkflowLink.d.ts +0 -0
- /package/{lib → dist}/client/WorkflowPage.d.ts +0 -0
- /package/{lib → dist}/client/WorkflowProvider.d.ts +0 -0
- /package/{lib → dist}/client/components/CollectionBlockInitializer.d.ts +0 -0
- /package/{lib → dist}/client/components/CollectionFieldset.d.ts +0 -0
- /package/{lib → dist}/client/components/Duration.d.ts +0 -0
- /package/{lib → dist}/client/components/DynamicExpression.d.ts +0 -0
- /package/{lib → dist}/client/components/FieldsSelect.d.ts +0 -0
- /package/{lib → dist}/client/components/FilterDynamicComponent.d.ts +0 -0
- /package/{lib → dist}/client/components/NodeDescription.d.ts +0 -0
- /package/{lib → dist}/client/components/NullRender.d.ts +0 -0
- /package/{lib → dist}/client/components/OpenDrawer.d.ts +0 -0
- /package/{lib → dist}/client/components/RadioWithTooltip.d.ts +0 -0
- /package/{lib → dist}/client/components/ValueBlock.d.ts +0 -0
- /package/{lib → dist}/client/components/renderEngineReference.d.ts +0 -0
- /package/{lib → dist}/client/constants.d.ts +0 -0
- /package/{lib → dist}/client/index.d.ts +0 -0
- /package/{lib → dist}/client/interfaces/expression.d.ts +0 -0
- /package/{lib → dist}/client/locale/index.d.ts +0 -0
- /package/{lib → dist}/client/nodes/calculation.d.ts +0 -0
- /package/{lib → dist}/client/nodes/condition.d.ts +0 -0
- /package/{lib → dist}/client/nodes/delay.d.ts +0 -0
- /package/{lib → dist}/client/nodes/index.d.ts +0 -0
- /package/{lib → dist}/client/nodes/loop.d.ts +0 -0
- /package/{lib → dist}/client/nodes/manual/AssigneesSelect.d.ts +0 -0
- /package/{lib → dist}/client/nodes/manual/DetailsBlockProvider.d.ts +0 -0
- /package/{lib → dist}/client/nodes/manual/FormBlockInitializer.d.ts +0 -0
- /package/{lib → dist}/client/nodes/manual/FormBlockProvider.d.ts +0 -0
- /package/{lib → dist}/client/nodes/manual/ModeConfig.d.ts +0 -0
- /package/{lib → dist}/client/nodes/manual/SchemaConfig.d.ts +0 -0
- /package/{lib → dist}/client/nodes/manual/WorkflowTodo.d.ts +0 -0
- /package/{lib → dist}/client/nodes/manual/WorkflowTodoBlockInitializer.d.ts +0 -0
- /package/{lib → dist}/client/nodes/manual/forms/create.d.ts +0 -0
- /package/{lib → dist}/client/nodes/manual/forms/custom.d.ts +0 -0
- /package/{lib → dist}/client/nodes/manual/forms/update.d.ts +0 -0
- /package/{lib → dist}/client/nodes/manual/index.d.ts +0 -0
- /package/{lib → dist}/client/nodes/manual/utils.d.ts +0 -0
- /package/{lib → dist}/client/nodes/parallel.d.ts +0 -0
- /package/{lib → dist}/client/nodes/sql.d.ts +0 -0
- /package/{lib → dist}/client/schemas/executions.d.ts +0 -0
- /package/{lib → dist}/client/schemas/workflows.d.ts +0 -0
- /package/{lib → dist}/client/style.d.ts +0 -0
- /package/{lib → dist}/client/triggers/index.d.ts +0 -0
- /package/{lib → dist}/client/triggers/schedule/EndsByField.d.ts +0 -0
- /package/{lib → dist}/client/triggers/schedule/OnField.d.ts +0 -0
- /package/{lib → dist}/client/triggers/schedule/RepeatField.d.ts +0 -0
- /package/{lib → dist}/client/triggers/schedule/ScheduleConfig.d.ts +0 -0
- /package/{lib → dist}/client/triggers/schedule/constants.d.ts +0 -0
- /package/{lib → dist}/client/triggers/schedule/index.d.ts +0 -0
- /package/{lib → dist}/client/triggers/schedule/locale/Cron.zh-CN.d.ts +0 -0
- /package/{lib → dist}/client/utils.d.ts +0 -0
- /package/{lib → dist}/client/variable.d.ts +0 -0
- /package/{lib → dist}/locale/en-US.d.ts +0 -0
- /package/{lib → dist}/locale/es-ES.d.ts +0 -0
- /package/{lib → dist}/locale/fr-FR.d.ts +0 -0
- /package/{lib → dist}/locale/ja-JP.d.ts +0 -0
- /package/{lib → dist}/locale/pt-BR.d.ts +0 -0
- /package/{lib → dist}/locale/ru-RU.d.ts +0 -0
- /package/{lib → dist}/locale/tr-TR.d.ts +0 -0
- /package/{lib → dist}/locale/zh-CN.d.ts +0 -0
- /package/{lib → dist}/server/Plugin.d.ts +0 -0
- /package/{lib → dist}/server/Processor.d.ts +0 -0
- /package/{lib → dist}/server/actions/index.d.ts +0 -0
- /package/{lib → dist}/server/actions/nodes.d.ts +0 -0
- /package/{lib → dist}/server/actions/workflows.d.ts +0 -0
- /package/{lib → dist}/server/collections/executions.d.ts +0 -0
- /package/{lib → dist}/server/collections/flow_nodes.d.ts +0 -0
- /package/{lib → dist}/server/collections/jobs.d.ts +0 -0
- /package/{lib → dist}/server/collections/workflows.d.ts +0 -0
- /package/{lib → dist}/server/constants.d.ts +0 -0
- /package/{lib → dist}/server/fields/expression-field.d.ts +0 -0
- /package/{lib → dist}/server/fields/index.d.ts +0 -0
- /package/{lib → dist}/server/functions/index.d.ts +0 -0
- /package/{lib → dist}/server/index.d.ts +0 -0
- /package/{lib → dist}/server/instructions/aggregate.d.ts +0 -0
- /package/{lib → dist}/server/instructions/calculation.d.ts +0 -0
- /package/{lib → dist}/server/instructions/condition.d.ts +0 -0
- /package/{lib → dist}/server/instructions/create.d.ts +0 -0
- /package/{lib → dist}/server/instructions/delay.d.ts +0 -0
- /package/{lib → dist}/server/instructions/destroy.d.ts +0 -0
- /package/{lib → dist}/server/instructions/index.d.ts +0 -0
- /package/{lib → dist}/server/instructions/loop.d.ts +0 -0
- /package/{lib → dist}/server/instructions/manual/actions.d.ts +0 -0
- /package/{lib → dist}/server/instructions/manual/collecions/jobs.d.ts +0 -0
- /package/{lib → dist}/server/instructions/manual/collecions/users.d.ts +0 -0
- /package/{lib → dist}/server/instructions/manual/collecions/users_jobs.d.ts +0 -0
- /package/{lib → dist}/server/instructions/manual/forms/create.d.ts +0 -0
- /package/{lib → dist}/server/instructions/manual/forms/index.d.ts +0 -0
- /package/{lib → dist}/server/instructions/manual/forms/update.d.ts +0 -0
- /package/{lib → dist}/server/instructions/manual/index.d.ts +0 -0
- /package/{lib → dist}/server/instructions/parallel.d.ts +0 -0
- /package/{lib → dist}/server/instructions/query.d.ts +0 -0
- /package/{lib → dist}/server/instructions/request.d.ts +0 -0
- /package/{lib → dist}/server/instructions/sql.d.ts +0 -0
- /package/{lib → dist}/server/instructions/update.d.ts +0 -0
- /package/{lib → dist}/server/migrations/20221129153547-calculation-variables.d.ts +0 -0
- /package/{lib → dist}/server/migrations/20230221032941-change-request-body-type.d.ts +0 -0
- /package/{lib → dist}/server/migrations/20230221071831-calculation-expression.d.ts +0 -0
- /package/{lib → dist}/server/migrations/20230221121203-condition-calculation.d.ts +0 -0
- /package/{lib → dist}/server/migrations/20230221162902-jsonb-to-json.d.ts +0 -0
- /package/{lib → dist}/server/migrations/20230411034722-manual-multi-form.d.ts +0 -0
- /package/{lib → dist}/server/migrations/20230612021134-manual-collection-block.d.ts +0 -0
- /package/{lib → dist}/server/migrations/20230710115902-manual-action-values.d.ts +0 -0
- /package/{lib → dist}/server/triggers/collection.d.ts +0 -0
- /package/{lib → dist}/server/triggers/index.d.ts +0 -0
- /package/{lib → dist}/server/triggers/schedule.d.ts +0 -0
- /package/{lib → dist}/server/types/Execution.d.ts +0 -0
- /package/{lib → dist}/server/types/FlowNode.d.ts +0 -0
- /package/{lib → dist}/server/types/Job.d.ts +0 -0
- /package/{lib → dist}/server/types/Workflow.d.ts +0 -0
- /package/{lib → dist}/server/types/index.d.ts +0 -0
- /package/{lib → dist}/server/utils.d.ts +0 -0
|
@@ -1,65 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
import parser from 'cron-parser';
|
|
3
|
-
import Plugin, { Trigger } from '..';
|
|
4
|
-
import type { WorkflowModel } from '../types';
|
|
1
|
+
'use strict';
|
|
5
2
|
|
|
6
|
-
|
|
7
|
-
| string
|
|
8
|
-
| {
|
|
9
|
-
field: string;
|
|
10
|
-
// in seconds
|
|
11
|
-
offset?: number;
|
|
12
|
-
unit?: 1000 | 60000 | 3600000 | 86400000;
|
|
13
|
-
};
|
|
14
|
-
export interface ScheduleTriggerConfig {
|
|
15
|
-
// trigger mode
|
|
16
|
-
mode: number;
|
|
17
|
-
// how to repeat
|
|
18
|
-
repeat?: string | number | null;
|
|
19
|
-
// limit of repeat times
|
|
20
|
-
limit?: number;
|
|
21
|
-
|
|
22
|
-
startsOn?: ScheduleOnField;
|
|
23
|
-
endsOn?: ScheduleOnField;
|
|
24
|
-
}
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
25
4
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
} as const;
|
|
5
|
+
var database = require('@nocobase/database');
|
|
6
|
+
var parser = require('cron-parser');
|
|
7
|
+
var __ = require('..');
|
|
30
8
|
|
|
31
|
-
|
|
32
|
-
on?(this: ScheduleTrigger, workflow: WorkflowModel): void;
|
|
33
|
-
off?(this: ScheduleTrigger, workflow: WorkflowModel): void;
|
|
34
|
-
shouldCache(this: ScheduleTrigger, workflow: WorkflowModel, now: Date): Promise<boolean> | boolean;
|
|
35
|
-
trigger(this: ScheduleTrigger, workflow: WorkflowModel, now: Date): any;
|
|
36
|
-
}
|
|
9
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
37
10
|
|
|
38
|
-
|
|
11
|
+
var parser__default = /*#__PURE__*/_interopDefault(parser);
|
|
39
12
|
|
|
40
|
-
|
|
41
|
-
|
|
13
|
+
const SCHEDULE_MODE = {
|
|
14
|
+
CONSTANT: 0,
|
|
15
|
+
COLLECTION_FIELD: 1
|
|
16
|
+
};
|
|
17
|
+
const ScheduleModes = /* @__PURE__ */ new Map();
|
|
18
|
+
function parseDateWithoutMs(date) {
|
|
19
|
+
return Math.floor(Date.parse(date) / 1e3) * 1e3;
|
|
42
20
|
}
|
|
43
|
-
|
|
44
21
|
ScheduleModes.set(SCHEDULE_MODE.CONSTANT, {
|
|
45
22
|
shouldCache(workflow, now) {
|
|
46
23
|
const { startsOn, endsOn, repeat } = workflow.config;
|
|
47
24
|
const timestamp = now.getTime();
|
|
48
|
-
|
|
49
|
-
// NOTE: align to second start
|
|
50
25
|
const startTime = parseDateWithoutMs(startsOn);
|
|
51
26
|
if (!startTime || startTime > timestamp + this.cacheCycle) {
|
|
52
27
|
return false;
|
|
53
28
|
}
|
|
54
|
-
|
|
55
29
|
if (repeat) {
|
|
56
|
-
if (typeof repeat ===
|
|
57
|
-
const next = timestamp - (
|
|
30
|
+
if (typeof repeat === "number") {
|
|
31
|
+
const next = timestamp - (timestamp - startTime) % repeat + repeat;
|
|
58
32
|
if (next <= timestamp || next > timestamp + this.cacheCycle) {
|
|
59
33
|
return false;
|
|
60
34
|
}
|
|
61
35
|
}
|
|
62
|
-
|
|
63
36
|
if (endsOn) {
|
|
64
37
|
const endTime = parseDateWithoutMs(endsOn);
|
|
65
38
|
if (!endTime || endTime <= timestamp) {
|
|
@@ -71,25 +44,21 @@ ScheduleModes.set(SCHEDULE_MODE.CONSTANT, {
|
|
|
71
44
|
return false;
|
|
72
45
|
}
|
|
73
46
|
}
|
|
74
|
-
|
|
75
47
|
return true;
|
|
76
48
|
},
|
|
77
49
|
trigger(workflow, now) {
|
|
78
50
|
const { startsOn, endsOn, repeat } = workflow.config;
|
|
79
51
|
const timestamp = now.getTime();
|
|
80
|
-
// NOTE: align to second start
|
|
81
52
|
const startTime = parseDateWithoutMs(startsOn);
|
|
82
53
|
if (!startTime || startTime > timestamp) {
|
|
83
54
|
return;
|
|
84
55
|
}
|
|
85
|
-
|
|
86
56
|
if (repeat) {
|
|
87
|
-
if (typeof repeat ===
|
|
57
|
+
if (typeof repeat === "number") {
|
|
88
58
|
if (Math.round(timestamp - startTime) % repeat) {
|
|
89
59
|
return;
|
|
90
60
|
}
|
|
91
61
|
}
|
|
92
|
-
|
|
93
62
|
if (endsOn) {
|
|
94
63
|
const endTime = parseDateWithoutMs(endsOn);
|
|
95
64
|
if (!endTime || endTime < timestamp) {
|
|
@@ -101,53 +70,46 @@ ScheduleModes.set(SCHEDULE_MODE.CONSTANT, {
|
|
|
101
70
|
return;
|
|
102
71
|
}
|
|
103
72
|
}
|
|
104
|
-
|
|
105
73
|
return this.plugin.trigger(workflow, { date: now });
|
|
106
|
-
}
|
|
74
|
+
}
|
|
107
75
|
});
|
|
108
|
-
|
|
109
|
-
function getOnTimestampWithOffset(on, now: Date) {
|
|
76
|
+
function getOnTimestampWithOffset(on, now) {
|
|
110
77
|
switch (typeof on) {
|
|
111
|
-
case
|
|
78
|
+
case "string":
|
|
112
79
|
return parseDateWithoutMs(on);
|
|
113
|
-
case
|
|
114
|
-
const { field, offset = 0, unit =
|
|
80
|
+
case "object": {
|
|
81
|
+
const { field, offset = 0, unit = 1e3 } = on;
|
|
115
82
|
if (!field) {
|
|
116
83
|
return null;
|
|
117
84
|
}
|
|
118
85
|
const timestamp = now.getTime();
|
|
119
|
-
// onDate + offset > now
|
|
120
|
-
// onDate > now - offset
|
|
121
86
|
return timestamp - offset * unit;
|
|
122
87
|
}
|
|
123
88
|
default:
|
|
124
89
|
return null;
|
|
125
90
|
}
|
|
126
91
|
}
|
|
127
|
-
|
|
128
92
|
function getDataOptionTime(data, on, dir = 1) {
|
|
129
93
|
if (!on) {
|
|
130
94
|
return null;
|
|
131
95
|
}
|
|
132
96
|
switch (typeof on) {
|
|
133
|
-
case
|
|
97
|
+
case "string": {
|
|
134
98
|
const time = parseDateWithoutMs(on);
|
|
135
99
|
return time ? time : null;
|
|
136
100
|
}
|
|
137
|
-
case
|
|
138
|
-
const { field, offset = 0, unit =
|
|
101
|
+
case "object": {
|
|
102
|
+
const { field, offset = 0, unit = 1e3 } = on;
|
|
139
103
|
return data.get(field) ? data.get(field).getTime() - offset * unit * dir : null;
|
|
140
104
|
}
|
|
141
105
|
default:
|
|
142
106
|
return null;
|
|
143
107
|
}
|
|
144
108
|
}
|
|
145
|
-
|
|
146
|
-
function getHookId(workflow, type: string) {
|
|
109
|
+
function getHookId(workflow, type) {
|
|
147
110
|
return `${type}#${workflow.id}`;
|
|
148
111
|
}
|
|
149
|
-
|
|
150
|
-
const DialectTimestampFnMap: { [key: string]: (col: string) => string } = {
|
|
112
|
+
const DialectTimestampFnMap = {
|
|
151
113
|
postgres(col) {
|
|
152
114
|
return `CAST(FLOOR(extract(epoch from "${col}")) AS INTEGER)`;
|
|
153
115
|
},
|
|
@@ -156,10 +118,9 @@ const DialectTimestampFnMap: { [key: string]: (col: string) => string } = {
|
|
|
156
118
|
},
|
|
157
119
|
sqlite(col) {
|
|
158
120
|
return `CAST(FLOOR(unixepoch(${col})) AS INTEGER)`;
|
|
159
|
-
}
|
|
121
|
+
}
|
|
160
122
|
};
|
|
161
123
|
DialectTimestampFnMap.mariadb = DialectTimestampFnMap.mysql;
|
|
162
|
-
|
|
163
124
|
ScheduleModes.set(SCHEDULE_MODE.COLLECTION_FIELD, {
|
|
164
125
|
on(workflow) {
|
|
165
126
|
const { collection, startsOn, endsOn, repeat } = workflow.config;
|
|
@@ -168,9 +129,8 @@ ScheduleModes.set(SCHEDULE_MODE.COLLECTION_FIELD, {
|
|
|
168
129
|
if (this.events.has(name)) {
|
|
169
130
|
return;
|
|
170
131
|
}
|
|
171
|
-
// NOTE: toggle cache depends on new date
|
|
172
132
|
const listener = async (data, options) => {
|
|
173
|
-
const now = new Date();
|
|
133
|
+
const now = /* @__PURE__ */ new Date();
|
|
174
134
|
now.setMilliseconds(0);
|
|
175
135
|
const timestamp = now.getTime();
|
|
176
136
|
const startTime = getDataOptionTime(data, startsOn);
|
|
@@ -187,20 +147,14 @@ ScheduleModes.set(SCHEDULE_MODE.COLLECTION_FIELD, {
|
|
|
187
147
|
if (!matchNext.call(this, workflow, now)) {
|
|
188
148
|
return;
|
|
189
149
|
}
|
|
190
|
-
if (
|
|
191
|
-
typeof repeat === 'number' &&
|
|
192
|
-
repeat > this.cacheCycle &&
|
|
193
|
-
(timestamp - startTime) % repeat > this.cacheCycle
|
|
194
|
-
) {
|
|
150
|
+
if (typeof repeat === "number" && repeat > this.cacheCycle && (timestamp - startTime) % repeat > this.cacheCycle) {
|
|
195
151
|
return;
|
|
196
152
|
}
|
|
197
|
-
|
|
198
153
|
this.setCache(workflow);
|
|
199
154
|
};
|
|
200
155
|
this.events.set(name, listener);
|
|
201
156
|
this.plugin.app.db.on(event, listener);
|
|
202
157
|
},
|
|
203
|
-
|
|
204
158
|
off(workflow) {
|
|
205
159
|
const { collection } = workflow.config;
|
|
206
160
|
const event = `${collection}.afterSave`;
|
|
@@ -211,261 +165,207 @@ ScheduleModes.set(SCHEDULE_MODE.COLLECTION_FIELD, {
|
|
|
211
165
|
this.plugin.app.db.off(event, listener);
|
|
212
166
|
}
|
|
213
167
|
},
|
|
214
|
-
|
|
215
168
|
async shouldCache(workflow, now) {
|
|
216
169
|
const { db } = this.plugin.app;
|
|
217
170
|
const { startsOn, endsOn, repeat, collection } = workflow.config;
|
|
218
171
|
const timestamp = now.getTime();
|
|
219
|
-
|
|
220
172
|
const startTimestamp = getOnTimestampWithOffset(startsOn, now);
|
|
221
173
|
if (!startTimestamp) {
|
|
222
174
|
return false;
|
|
223
175
|
}
|
|
224
|
-
|
|
225
|
-
const conditions: any[] = [
|
|
176
|
+
const conditions = [
|
|
226
177
|
{
|
|
227
178
|
[startsOn.field]: {
|
|
228
|
-
[Op.lt]: new Date(startTimestamp + this.cacheCycle)
|
|
229
|
-
}
|
|
230
|
-
}
|
|
179
|
+
[database.Op.lt]: new Date(startTimestamp + this.cacheCycle)
|
|
180
|
+
}
|
|
181
|
+
}
|
|
231
182
|
];
|
|
232
|
-
|
|
233
|
-
// when repeat is number, means repeat after startsOn
|
|
234
|
-
// (now - startsOn) % repeat <= cacheCycle
|
|
235
183
|
if (repeat) {
|
|
236
|
-
const tsFn = DialectTimestampFnMap[db.options.dialect
|
|
237
|
-
if (typeof repeat ===
|
|
184
|
+
const tsFn = DialectTimestampFnMap[db.options.dialect];
|
|
185
|
+
if (typeof repeat === "number" && repeat > this.cacheCycle && tsFn) {
|
|
238
186
|
conditions.push(
|
|
239
|
-
where(
|
|
240
|
-
fn(
|
|
241
|
-
{ [Op.lt]: Math.round(this.cacheCycle /
|
|
242
|
-
)
|
|
187
|
+
database.where(
|
|
188
|
+
database.fn("MOD", database.literal(`${Math.round(timestamp / 1e3)} - ${tsFn(startsOn.field)}`), Math.round(repeat / 1e3)),
|
|
189
|
+
{ [database.Op.lt]: Math.round(this.cacheCycle / 1e3) }
|
|
190
|
+
)
|
|
243
191
|
);
|
|
244
|
-
// conditions.push(literal(`mod(${timestamp} - ${tsFn(startsOn.field)} * 1000, ${repeat}) < ${this.cacheCycle}`));
|
|
245
192
|
}
|
|
246
|
-
|
|
247
193
|
if (endsOn) {
|
|
248
194
|
const endTimestamp = getOnTimestampWithOffset(endsOn, now);
|
|
249
195
|
if (!endTimestamp) {
|
|
250
196
|
return false;
|
|
251
197
|
}
|
|
252
|
-
if (typeof endsOn ===
|
|
198
|
+
if (typeof endsOn === "string") {
|
|
253
199
|
if (endTimestamp <= timestamp) {
|
|
254
200
|
return false;
|
|
255
201
|
}
|
|
256
202
|
} else {
|
|
257
203
|
conditions.push({
|
|
258
204
|
[endsOn.field]: {
|
|
259
|
-
[Op.gte]: new Date(endTimestamp + this.interval)
|
|
260
|
-
}
|
|
205
|
+
[database.Op.gte]: new Date(endTimestamp + this.interval)
|
|
206
|
+
}
|
|
261
207
|
});
|
|
262
208
|
}
|
|
263
209
|
}
|
|
264
210
|
} else {
|
|
265
211
|
conditions.push({
|
|
266
212
|
[startsOn.field]: {
|
|
267
|
-
[Op.gte]: new Date(startTimestamp)
|
|
268
|
-
}
|
|
213
|
+
[database.Op.gte]: new Date(startTimestamp)
|
|
214
|
+
}
|
|
269
215
|
});
|
|
270
216
|
}
|
|
271
|
-
|
|
272
217
|
const { model } = db.getCollection(collection);
|
|
273
218
|
const count = await model.count({
|
|
274
|
-
where: { [Op.and]: conditions }
|
|
219
|
+
where: { [database.Op.and]: conditions }
|
|
275
220
|
});
|
|
276
|
-
|
|
277
221
|
return Boolean(count);
|
|
278
222
|
},
|
|
279
|
-
|
|
280
|
-
async trigger(workflow, now: Date) {
|
|
223
|
+
async trigger(workflow, now) {
|
|
281
224
|
const { startsOn, repeat, endsOn, collection, appends } = workflow.config;
|
|
282
225
|
const timestamp = now.getTime();
|
|
283
|
-
|
|
284
226
|
const startTimestamp = getOnTimestampWithOffset(startsOn, now);
|
|
285
227
|
if (!startTimestamp) {
|
|
286
228
|
return false;
|
|
287
229
|
}
|
|
288
|
-
|
|
289
|
-
const conditions: any[] = [
|
|
230
|
+
const conditions = [
|
|
290
231
|
{
|
|
291
232
|
[startsOn.field]: {
|
|
292
|
-
[Op.lt]: new Date(startTimestamp + this.interval)
|
|
293
|
-
}
|
|
294
|
-
}
|
|
233
|
+
[database.Op.lt]: new Date(startTimestamp + this.interval)
|
|
234
|
+
}
|
|
235
|
+
}
|
|
295
236
|
];
|
|
296
|
-
|
|
297
237
|
if (repeat) {
|
|
298
|
-
// startsOn not after now
|
|
299
238
|
conditions.push({
|
|
300
239
|
[startsOn.field]: {
|
|
301
|
-
[Op.lt]: new Date(startTimestamp)
|
|
302
|
-
}
|
|
240
|
+
[database.Op.lt]: new Date(startTimestamp)
|
|
241
|
+
}
|
|
303
242
|
});
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
if (typeof repeat === 'number' && tsFn) {
|
|
243
|
+
const tsFn = DialectTimestampFnMap[this.plugin.app.db.options.dialect];
|
|
244
|
+
if (typeof repeat === "number" && tsFn) {
|
|
307
245
|
conditions.push(
|
|
308
|
-
where(
|
|
309
|
-
fn(
|
|
310
|
-
{ [Op.eq]: 0 }
|
|
311
|
-
)
|
|
246
|
+
database.where(
|
|
247
|
+
database.fn("MOD", database.literal(`${Math.round(timestamp / 1e3)} - ${tsFn(startsOn.field)}`), Math.round(repeat / 1e3)),
|
|
248
|
+
{ [database.Op.eq]: 0 }
|
|
249
|
+
)
|
|
312
250
|
);
|
|
313
|
-
// conditions.push(literal(`MOD(CAST(${timestamp} AS BIGINT) - CAST((FLOOR(${tsFn(startsOn.field)}) AS BIGINT) * 1000), ${repeat}) = 0`));
|
|
314
251
|
}
|
|
315
|
-
|
|
316
252
|
if (endsOn) {
|
|
317
253
|
const endTimestamp = getOnTimestampWithOffset(endsOn, now);
|
|
318
254
|
if (!endTimestamp) {
|
|
319
255
|
return false;
|
|
320
256
|
}
|
|
321
|
-
|
|
322
|
-
if (typeof endsOn === 'string') {
|
|
257
|
+
if (typeof endsOn === "string") {
|
|
323
258
|
if (endTimestamp <= timestamp) {
|
|
324
259
|
return false;
|
|
325
260
|
}
|
|
326
261
|
} else {
|
|
327
262
|
conditions.push({
|
|
328
263
|
[endsOn.field]: {
|
|
329
|
-
[Op.gte]: new Date(endTimestamp + this.interval)
|
|
330
|
-
}
|
|
264
|
+
[database.Op.gte]: new Date(endTimestamp + this.interval)
|
|
265
|
+
}
|
|
331
266
|
});
|
|
332
267
|
}
|
|
333
268
|
}
|
|
334
269
|
} else {
|
|
335
|
-
// startsOn exactly equal to now in 1s
|
|
336
270
|
conditions.push({
|
|
337
271
|
[startsOn.field]: {
|
|
338
|
-
[Op.gte]: new Date(startTimestamp)
|
|
339
|
-
}
|
|
272
|
+
[database.Op.gte]: new Date(startTimestamp)
|
|
273
|
+
}
|
|
340
274
|
});
|
|
341
275
|
}
|
|
342
|
-
|
|
343
276
|
const repo = this.plugin.app.db.getRepository(collection);
|
|
344
277
|
const instances = await repo.find({
|
|
345
278
|
filter: {
|
|
346
|
-
$and: conditions
|
|
279
|
+
$and: conditions
|
|
347
280
|
},
|
|
348
|
-
appends
|
|
281
|
+
appends
|
|
349
282
|
});
|
|
350
|
-
|
|
351
283
|
instances.forEach((item) => {
|
|
352
284
|
this.plugin.trigger(workflow, {
|
|
353
285
|
date: now,
|
|
354
|
-
data: item.toJSON()
|
|
286
|
+
data: item.toJSON()
|
|
355
287
|
});
|
|
356
288
|
});
|
|
357
|
-
}
|
|
289
|
+
}
|
|
358
290
|
});
|
|
359
|
-
|
|
360
|
-
function matchNext(this: ScheduleTrigger, workflow, now: Date, range: number = this.cacheCycle): boolean {
|
|
291
|
+
function matchNext(workflow, now, range = this.cacheCycle) {
|
|
361
292
|
const { repeat } = workflow.config;
|
|
362
|
-
|
|
363
|
-
// but if in current cycle, should be put in cache
|
|
364
|
-
// no repeat but in current cycle means startsOn has been configured
|
|
365
|
-
// so we need to more info to determine if necessary config items
|
|
366
|
-
if (typeof repeat !== 'string') {
|
|
293
|
+
if (typeof repeat !== "string") {
|
|
367
294
|
return true;
|
|
368
295
|
}
|
|
369
|
-
|
|
370
296
|
const currentDate = new Date(now);
|
|
371
297
|
currentDate.setMilliseconds(-1);
|
|
372
298
|
const timestamp = now.getTime();
|
|
373
|
-
const interval =
|
|
299
|
+
const interval = parser__default.default.parseExpression(repeat, { currentDate });
|
|
374
300
|
const next = interval.next();
|
|
375
|
-
|
|
376
|
-
// NOTE: cache all workflows will be matched in current cycle
|
|
377
301
|
if (next.getTime() - timestamp <= range) {
|
|
378
302
|
return true;
|
|
379
303
|
}
|
|
380
|
-
|
|
381
304
|
return false;
|
|
382
305
|
}
|
|
383
|
-
|
|
384
|
-
export default class ScheduleTrigger extends Trigger {
|
|
306
|
+
class ScheduleTrigger extends __.Trigger {
|
|
385
307
|
static CacheRules = [
|
|
386
308
|
({ config, allExecuted }) => (config.limit ? allExecuted < config.limit : true) && config.startsOn,
|
|
387
309
|
matchNext,
|
|
388
|
-
function
|
|
310
|
+
function(workflow, now) {
|
|
389
311
|
const { mode } = workflow.config;
|
|
390
312
|
const modeHandlers = ScheduleModes.get(mode);
|
|
391
313
|
if (!modeHandlers) {
|
|
392
314
|
return false;
|
|
393
315
|
}
|
|
394
316
|
return modeHandlers.shouldCache.call(this, workflow, now);
|
|
395
|
-
}
|
|
317
|
+
}
|
|
396
318
|
];
|
|
397
|
-
|
|
398
319
|
static TriggerRules = [
|
|
399
320
|
({ config, allExecuted }) => (config.limit ? allExecuted < config.limit : true) && config.startsOn,
|
|
400
|
-
function
|
|
321
|
+
function(workflow, now) {
|
|
401
322
|
return matchNext.call(this, workflow, now, 0);
|
|
402
|
-
}
|
|
323
|
+
}
|
|
403
324
|
];
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
private timer: NodeJS.Timeout | null = null;
|
|
408
|
-
|
|
409
|
-
private cache: Map<number | string, any> = new Map();
|
|
410
|
-
|
|
325
|
+
events = /* @__PURE__ */ new Map();
|
|
326
|
+
timer = null;
|
|
327
|
+
cache = /* @__PURE__ */ new Map();
|
|
411
328
|
// running interval, default to 1s
|
|
412
|
-
interval =
|
|
329
|
+
interval = 1e3;
|
|
413
330
|
// caching workflows in range, default to 1min
|
|
414
|
-
cacheCycle =
|
|
415
|
-
|
|
416
|
-
constructor(plugin: Plugin) {
|
|
331
|
+
cacheCycle = 6e4;
|
|
332
|
+
constructor(plugin) {
|
|
417
333
|
super(plugin);
|
|
418
|
-
|
|
419
|
-
plugin.app.on('beforeStop', () => {
|
|
334
|
+
plugin.app.on("beforeStop", () => {
|
|
420
335
|
if (this.timer) {
|
|
421
336
|
clearInterval(this.timer);
|
|
422
337
|
}
|
|
423
338
|
});
|
|
424
339
|
}
|
|
425
|
-
|
|
426
340
|
init() {
|
|
427
|
-
if (this.plugin.app.name !==
|
|
341
|
+
if (this.plugin.app.name !== "main") {
|
|
428
342
|
return;
|
|
429
343
|
}
|
|
430
|
-
|
|
431
344
|
if (this.timer) {
|
|
432
345
|
return;
|
|
433
346
|
}
|
|
434
|
-
|
|
435
|
-
const now = new Date();
|
|
436
|
-
|
|
437
|
-
// NOTE: assign to this.timer to avoid duplicated initialization
|
|
347
|
+
const now = /* @__PURE__ */ new Date();
|
|
438
348
|
this.timer = setTimeout(
|
|
439
349
|
this.run,
|
|
440
350
|
// NOTE:
|
|
441
351
|
// try to align to system time on each second starts,
|
|
442
352
|
// after at least 1 second initialized for everything to get ready.
|
|
443
353
|
// so jobs in 2 seconds will be missed at first start.
|
|
444
|
-
|
|
354
|
+
1e3 - now.getMilliseconds()
|
|
445
355
|
);
|
|
446
356
|
}
|
|
447
|
-
|
|
448
357
|
run = () => {
|
|
449
|
-
const now = new Date();
|
|
450
|
-
|
|
451
|
-
const nextInterval = 1_001 - now.getMilliseconds();
|
|
358
|
+
const now = /* @__PURE__ */ new Date();
|
|
359
|
+
const nextInterval = 1001 - now.getMilliseconds();
|
|
452
360
|
now.setMilliseconds(0);
|
|
453
|
-
|
|
454
|
-
// NOTE: trigger `onTick` for high interval jobs which are cached in last 1 min
|
|
455
361
|
this.onTick(now);
|
|
456
|
-
|
|
457
|
-
// NOTE: reload when second match cache cycle
|
|
458
362
|
if (!(now.getTime() % this.cacheCycle)) {
|
|
459
363
|
this.reload();
|
|
460
364
|
}
|
|
461
|
-
|
|
462
365
|
this.timer = setTimeout(this.run, nextInterval);
|
|
463
366
|
};
|
|
464
|
-
|
|
465
367
|
async onTick(now) {
|
|
466
|
-
|
|
467
|
-
const isSqlite = this.plugin.app.db.options.dialect === 'sqlite';
|
|
468
|
-
|
|
368
|
+
const isSqlite = this.plugin.app.db.options.dialect === "sqlite";
|
|
469
369
|
return Array.from(this.cache.values()).reduce(
|
|
470
370
|
(prev, workflow) => {
|
|
471
371
|
if (!this.shouldTrigger(workflow, now)) {
|
|
@@ -477,70 +377,58 @@ export default class ScheduleTrigger extends Trigger {
|
|
|
477
377
|
this.trigger(workflow, now);
|
|
478
378
|
return null;
|
|
479
379
|
},
|
|
480
|
-
isSqlite ? Promise.resolve() : null
|
|
380
|
+
isSqlite ? Promise.resolve() : null
|
|
481
381
|
);
|
|
482
382
|
}
|
|
483
|
-
|
|
484
383
|
async reload() {
|
|
485
|
-
const WorkflowModel = this.plugin.app.db.getCollection(
|
|
384
|
+
const WorkflowModel = this.plugin.app.db.getCollection("workflows").model;
|
|
486
385
|
const workflows = await WorkflowModel.findAll({
|
|
487
|
-
where: { enabled: true, type:
|
|
386
|
+
where: { enabled: true, type: "schedule" },
|
|
488
387
|
include: [
|
|
489
388
|
{
|
|
490
|
-
association:
|
|
491
|
-
attributes: [
|
|
389
|
+
association: "executions",
|
|
390
|
+
attributes: ["id", "createdAt"],
|
|
492
391
|
separate: true,
|
|
493
392
|
limit: 1,
|
|
494
|
-
order: [[
|
|
495
|
-
}
|
|
393
|
+
order: [["createdAt", "DESC"]]
|
|
394
|
+
}
|
|
496
395
|
],
|
|
497
|
-
group: [
|
|
396
|
+
group: ["id"]
|
|
498
397
|
});
|
|
499
|
-
|
|
500
|
-
// NOTE: clear cached jobs in last cycle
|
|
501
|
-
this.cache = new Map();
|
|
502
|
-
|
|
398
|
+
this.cache = /* @__PURE__ */ new Map();
|
|
503
399
|
this.inspect(workflows);
|
|
504
400
|
}
|
|
505
|
-
|
|
506
401
|
inspect(workflows) {
|
|
507
|
-
const now = new Date();
|
|
402
|
+
const now = /* @__PURE__ */ new Date();
|
|
508
403
|
now.setMilliseconds(0);
|
|
509
|
-
|
|
510
404
|
workflows.forEach(async (workflow) => {
|
|
511
405
|
const should = await this.shouldCache(workflow, now);
|
|
512
|
-
|
|
513
406
|
if (should) {
|
|
514
|
-
this.plugin.app.logger.info(
|
|
407
|
+
this.plugin.app.logger.info("caching scheduled workflow will run in next minute:", workflow.id);
|
|
515
408
|
}
|
|
516
|
-
|
|
517
409
|
this.setCache(workflow, !should);
|
|
518
410
|
});
|
|
519
411
|
}
|
|
520
|
-
|
|
521
412
|
setCache(workflow, out = false) {
|
|
522
413
|
out ? this.cache.delete(workflow.id) : this.cache.set(workflow.id, workflow);
|
|
523
414
|
}
|
|
524
|
-
|
|
525
415
|
async shouldCache(workflow, now) {
|
|
526
|
-
for await (const rule of
|
|
527
|
-
if (!
|
|
416
|
+
for await (const rule of this.constructor.CacheRules) {
|
|
417
|
+
if (!await rule.call(this, workflow, now)) {
|
|
528
418
|
return false;
|
|
529
419
|
}
|
|
530
420
|
}
|
|
531
421
|
return true;
|
|
532
422
|
}
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
for (const rule of (<typeof ScheduleTrigger>this.constructor).TriggerRules) {
|
|
423
|
+
shouldTrigger(workflow, now) {
|
|
424
|
+
for (const rule of this.constructor.TriggerRules) {
|
|
536
425
|
if (!rule.call(this, workflow, now)) {
|
|
537
426
|
return false;
|
|
538
427
|
}
|
|
539
428
|
}
|
|
540
429
|
return true;
|
|
541
430
|
}
|
|
542
|
-
|
|
543
|
-
async trigger(workflow, date: Date) {
|
|
431
|
+
async trigger(workflow, date) {
|
|
544
432
|
const { mode } = workflow.config;
|
|
545
433
|
const modeHandlers = ScheduleModes.get(mode);
|
|
546
434
|
if (!modeHandlers) {
|
|
@@ -548,11 +436,8 @@ export default class ScheduleTrigger extends Trigger {
|
|
|
548
436
|
}
|
|
549
437
|
return modeHandlers.trigger.call(this, workflow, date);
|
|
550
438
|
}
|
|
551
|
-
|
|
552
439
|
on(workflow) {
|
|
553
|
-
// NOTE: lazy initialization
|
|
554
440
|
this.init();
|
|
555
|
-
|
|
556
441
|
const { mode } = workflow.config;
|
|
557
442
|
const modeHandlers = ScheduleModes.get(mode);
|
|
558
443
|
if (modeHandlers && modeHandlers.on) {
|
|
@@ -569,3 +454,6 @@ export default class ScheduleTrigger extends Trigger {
|
|
|
569
454
|
this.cache.delete(workflow.id);
|
|
570
455
|
}
|
|
571
456
|
}
|
|
457
|
+
|
|
458
|
+
exports.SCHEDULE_MODE = SCHEDULE_MODE;
|
|
459
|
+
exports.default = ScheduleTrigger;
|