nesoi 3.0.0
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/lib/adapters/postgres/src/migrator/database.d.ts +37 -0
- package/lib/adapters/postgres/src/migrator/database.js +88 -0
- package/lib/adapters/postgres/src/migrator/index.d.ts +1 -0
- package/lib/adapters/postgres/src/migrator/index.js +5 -0
- package/lib/adapters/postgres/src/migrator/migration.d.ts +73 -0
- package/lib/adapters/postgres/src/migrator/migration.js +351 -0
- package/lib/adapters/postgres/src/migrator/migrator.d.ts +21 -0
- package/lib/adapters/postgres/src/migrator/migrator.js +73 -0
- package/lib/adapters/postgres/src/migrator/runner.d.ts +61 -0
- package/lib/adapters/postgres/src/migrator/runner.js +202 -0
- package/lib/adapters/postgres/src/postgres.bucket_adapter.d.ts +45 -0
- package/lib/adapters/postgres/src/postgres.bucket_adapter.js +278 -0
- package/lib/adapters/postgres/src/postgres.cli.d.ts +46 -0
- package/lib/adapters/postgres/src/postgres.cli.js +124 -0
- package/lib/adapters/postgres/src/postgres.nql.d.ts +12 -0
- package/lib/adapters/postgres/src/postgres.nql.js +69 -0
- package/lib/adapters/postgres/test/postgres.bucket_adapter.test.d.ts +1 -0
- package/lib/adapters/postgres/test/postgres.bucket_adapter.test.js +173 -0
- package/lib/adapters/postgres/test/postgres.bucket_query.test.d.ts +0 -0
- package/lib/adapters/postgres/test/postgres.bucket_query.test.js +136 -0
- package/lib/compiler/apps/monolyth/monolyth_compiler.d.ts +21 -0
- package/lib/compiler/apps/monolyth/monolyth_compiler.js +95 -0
- package/lib/compiler/apps/monolyth/stages/1_mkdir_stage.d.ts +12 -0
- package/lib/compiler/apps/monolyth/stages/1_mkdir_stage.js +80 -0
- package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.d.ts +12 -0
- package/lib/compiler/apps/monolyth/stages/2_build_typescript_stage.js +128 -0
- package/lib/compiler/apps/monolyth/stages/3_copy_types_stage.d.ts +12 -0
- package/lib/compiler/apps/monolyth/stages/3_copy_types_stage.js +75 -0
- package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.d.ts +13 -0
- package/lib/compiler/apps/monolyth/stages/4_dump_modules_stage.js +130 -0
- package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.d.ts +12 -0
- package/lib/compiler/apps/monolyth/stages/5_dump_cli_stage.js +65 -0
- package/lib/compiler/apps/monolyth/stages/6_dump_package_json_stage.d.ts +12 -0
- package/lib/compiler/apps/monolyth/stages/6_dump_package_json_stage.js +74 -0
- package/lib/compiler/compiler.d.ts +19 -0
- package/lib/compiler/compiler.js +83 -0
- package/lib/compiler/elements/bucket.element.d.ts +23 -0
- package/lib/compiler/elements/bucket.element.js +304 -0
- package/lib/compiler/elements/constants.element.d.ts +9 -0
- package/lib/compiler/elements/constants.element.js +88 -0
- package/lib/compiler/elements/controller.element.d.ts +6 -0
- package/lib/compiler/elements/controller.element.js +22 -0
- package/lib/compiler/elements/element.d.ts +49 -0
- package/lib/compiler/elements/element.js +105 -0
- package/lib/compiler/elements/externals.element.d.ts +19 -0
- package/lib/compiler/elements/externals.element.js +83 -0
- package/lib/compiler/elements/job.element.d.ts +7 -0
- package/lib/compiler/elements/job.element.js +62 -0
- package/lib/compiler/elements/machine.element.d.ts +10 -0
- package/lib/compiler/elements/machine.element.js +98 -0
- package/lib/compiler/elements/message.element.d.ts +9 -0
- package/lib/compiler/elements/message.element.js +175 -0
- package/lib/compiler/elements/queue.element.d.ts +6 -0
- package/lib/compiler/elements/queue.element.js +24 -0
- package/lib/compiler/elements/resource.element.d.ts +7 -0
- package/lib/compiler/elements/resource.element.js +64 -0
- package/lib/compiler/error.d.ts +21 -0
- package/lib/compiler/error.js +57 -0
- package/lib/compiler/helpers/dump_helpers.d.ts +11 -0
- package/lib/compiler/helpers/dump_helpers.js +157 -0
- package/lib/compiler/helpers/name_helpers.d.ts +20 -0
- package/lib/compiler/helpers/name_helpers.js +44 -0
- package/lib/compiler/index.d.ts +2 -0
- package/lib/compiler/index.js +7 -0
- package/lib/compiler/module.d.ts +24 -0
- package/lib/compiler/module.js +122 -0
- package/lib/compiler/stages/1_scan_stage.d.ts +10 -0
- package/lib/compiler/stages/1_scan_stage.js +23 -0
- package/lib/compiler/stages/2_treeshake_stage.d.ts +11 -0
- package/lib/compiler/stages/2_treeshake_stage.js +24 -0
- package/lib/compiler/stages/3_extract_ts_stage.d.ts +10 -0
- package/lib/compiler/stages/3_extract_ts_stage.js +71 -0
- package/lib/compiler/stages/4_build_schemas_stage.d.ts +10 -0
- package/lib/compiler/stages/4_build_schemas_stage.js +25 -0
- package/lib/compiler/stages/5_inject_ts_stage.d.ts +10 -0
- package/lib/compiler/stages/5_inject_ts_stage.js +22 -0
- package/lib/compiler/stages/6_build_elements_stage.d.ts +11 -0
- package/lib/compiler/stages/6_build_elements_stage.js +22 -0
- package/lib/compiler/stages/7_dump_stage.d.ts +14 -0
- package/lib/compiler/stages/7_dump_stage.js +208 -0
- package/lib/compiler/stages/8_diagnose_stage.d.ts +16 -0
- package/lib/compiler/stages/8_diagnose_stage.js +43 -0
- package/lib/compiler/treeshake.d.ts +58 -0
- package/lib/compiler/treeshake.js +424 -0
- package/lib/compiler/typescript/bridge/extract.d.ts +11 -0
- package/lib/compiler/typescript/bridge/extract.js +270 -0
- package/lib/compiler/typescript/bridge/inject.d.ts +10 -0
- package/lib/compiler/typescript/bridge/inject.js +140 -0
- package/lib/compiler/typescript/bridge/organize.d.ts +61 -0
- package/lib/compiler/typescript/bridge/organize.js +258 -0
- package/lib/compiler/typescript/error.d.ts +88 -0
- package/lib/compiler/typescript/error.js +265 -0
- package/lib/compiler/typescript/parser.d.ts +48 -0
- package/lib/compiler/typescript/parser.js +581 -0
- package/lib/compiler/typescript/source.d.ts +12 -0
- package/lib/compiler/typescript/source.js +87 -0
- package/lib/compiler/typescript/transformers/app_inject.transformer.d.ts +2 -0
- package/lib/compiler/typescript/transformers/app_inject.transformer.js +89 -0
- package/lib/compiler/typescript/transformers/replace_import.transformer.d.ts +4 -0
- package/lib/compiler/typescript/transformers/replace_import.transformer.js +102 -0
- package/lib/compiler/typescript/typescript_compiler.d.ts +63 -0
- package/lib/compiler/typescript/typescript_compiler.js +602 -0
- package/lib/elements/blocks/block.builder.d.ts +29 -0
- package/lib/elements/blocks/block.builder.js +87 -0
- package/lib/elements/blocks/block.d.ts +15 -0
- package/lib/elements/blocks/block.js +37 -0
- package/lib/elements/blocks/block.schema.d.ts +23 -0
- package/lib/elements/blocks/block.schema.js +15 -0
- package/lib/elements/blocks/externals/externals.builder.d.ts +30 -0
- package/lib/elements/blocks/externals/externals.builder.js +37 -0
- package/lib/elements/blocks/externals/externals.schema.d.ts +11 -0
- package/lib/elements/blocks/externals/externals.schema.js +19 -0
- package/lib/elements/blocks/job/internal/machine_job.builder.d.ts +52 -0
- package/lib/elements/blocks/job/internal/machine_job.builder.js +74 -0
- package/lib/elements/blocks/job/internal/machine_job.schema.d.ts +5 -0
- package/lib/elements/blocks/job/internal/machine_job.schema.js +10 -0
- package/lib/elements/blocks/job/internal/resource_job.builder.d.ts +109 -0
- package/lib/elements/blocks/job/internal/resource_job.builder.js +146 -0
- package/lib/elements/blocks/job/internal/resource_job.d.ts +14 -0
- package/lib/elements/blocks/job/internal/resource_job.js +30 -0
- package/lib/elements/blocks/job/internal/resource_job.schema.d.ts +11 -0
- package/lib/elements/blocks/job/internal/resource_job.schema.js +15 -0
- package/lib/elements/blocks/job/job.builder.d.ts +118 -0
- package/lib/elements/blocks/job/job.builder.js +137 -0
- package/lib/elements/blocks/job/job.d.ts +13 -0
- package/lib/elements/blocks/job/job.js +40 -0
- package/lib/elements/blocks/job/job.schema.d.ts +26 -0
- package/lib/elements/blocks/job/job.schema.js +20 -0
- package/lib/elements/blocks/machine/machine.builder.d.ts +58 -0
- package/lib/elements/blocks/machine/machine.builder.js +135 -0
- package/lib/elements/blocks/machine/machine.d.ts +86 -0
- package/lib/elements/blocks/machine/machine.js +228 -0
- package/lib/elements/blocks/machine/machine.schema.d.ts +85 -0
- package/lib/elements/blocks/machine/machine.schema.js +64 -0
- package/lib/elements/blocks/machine/machine_state.builder.d.ts +58 -0
- package/lib/elements/blocks/machine/machine_state.builder.js +186 -0
- package/lib/elements/blocks/machine/machine_transition.builder.d.ts +48 -0
- package/lib/elements/blocks/machine/machine_transition.builder.js +98 -0
- package/lib/elements/blocks/queue/adapters/bucket.queue_adapter.d.ts +10 -0
- package/lib/elements/blocks/queue/adapters/bucket.queue_adapter.js +17 -0
- package/lib/elements/blocks/queue/adapters/queue_adapter.d.ts +6 -0
- package/lib/elements/blocks/queue/adapters/queue_adapter.js +6 -0
- package/lib/elements/blocks/queue/queue.builder.d.ts +40 -0
- package/lib/elements/blocks/queue/queue.builder.js +31 -0
- package/lib/elements/blocks/queue/queue.d.ts +9 -0
- package/lib/elements/blocks/queue/queue.js +11 -0
- package/lib/elements/blocks/queue/queue.schema.d.ts +12 -0
- package/lib/elements/blocks/queue/queue.schema.js +17 -0
- package/lib/elements/blocks/resource/resource.builder.d.ts +60 -0
- package/lib/elements/blocks/resource/resource.builder.js +224 -0
- package/lib/elements/blocks/resource/resource.d.ts +48 -0
- package/lib/elements/blocks/resource/resource.js +125 -0
- package/lib/elements/blocks/resource/resource.schema.d.ts +32 -0
- package/lib/elements/blocks/resource/resource.schema.js +30 -0
- package/lib/elements/blocks/resource/resource.types.d.ts +38 -0
- package/lib/elements/blocks/resource/resource.types.js +3 -0
- package/lib/elements/edge/controller/adapters/cli.controller_adapter.d.ts +8 -0
- package/lib/elements/edge/controller/adapters/cli.controller_adapter.js +17 -0
- package/lib/elements/edge/controller/adapters/controller_adapter.d.ts +14 -0
- package/lib/elements/edge/controller/adapters/controller_adapter.js +44 -0
- package/lib/elements/edge/controller/controller.builder.d.ts +78 -0
- package/lib/elements/edge/controller/controller.builder.js +178 -0
- package/lib/elements/edge/controller/controller.config.d.ts +6 -0
- package/lib/elements/edge/controller/controller.config.js +2 -0
- package/lib/elements/edge/controller/controller.d.ts +22 -0
- package/lib/elements/edge/controller/controller.js +41 -0
- package/lib/elements/edge/controller/controller.schema.d.ts +44 -0
- package/lib/elements/edge/controller/controller.schema.js +51 -0
- package/lib/elements/entities/bucket/adapters/bucket_adapter.d.ts +107 -0
- package/lib/elements/entities/bucket/adapters/bucket_adapter.js +41 -0
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.d.ts +37 -0
- package/lib/elements/entities/bucket/adapters/memory.bucket_adapter.js +149 -0
- package/lib/elements/entities/bucket/adapters/memory.bucket_query copy.d.ts +0 -0
- package/lib/elements/entities/bucket/adapters/memory.bucket_query copy.js +218 -0
- package/lib/elements/entities/bucket/adapters/memory.nql.d.ts +19 -0
- package/lib/elements/entities/bucket/adapters/memory.nql.js +212 -0
- package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.d.ts +20 -0
- package/lib/elements/entities/bucket/adapters/slow_memory.bucket_adapter.js +31 -0
- package/lib/elements/entities/bucket/bucket.builder.d.ts +61 -0
- package/lib/elements/entities/bucket/bucket.builder.js +130 -0
- package/lib/elements/entities/bucket/bucket.config.d.ts +29 -0
- package/lib/elements/entities/bucket/bucket.config.js +2 -0
- package/lib/elements/entities/bucket/bucket.d.ts +36 -0
- package/lib/elements/entities/bucket/bucket.infer.d.ts +22 -0
- package/lib/elements/entities/bucket/bucket.infer.js +85 -0
- package/lib/elements/entities/bucket/bucket.js +125 -0
- package/lib/elements/entities/bucket/bucket.schema.d.ts +24 -0
- package/lib/elements/entities/bucket/bucket.schema.js +16 -0
- package/lib/elements/entities/bucket/bucket.types.d.ts +32 -0
- package/lib/elements/entities/bucket/bucket.types.js +2 -0
- package/lib/elements/entities/bucket/cache/bucket_cache.d.ts +35 -0
- package/lib/elements/entities/bucket/cache/bucket_cache.js +182 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.builder.d.ts +11 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.builder.js +27 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.d.ts +16 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.infer.d.ts +9 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.infer.js +2 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.js +136 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.schema.d.ts +28 -0
- package/lib/elements/entities/bucket/graph/bucket_graph.schema.js +27 -0
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.d.ts +36 -0
- package/lib/elements/entities/bucket/graph/bucket_graph_link.builder.js +56 -0
- package/lib/elements/entities/bucket/model/bucket_model.builder.d.ts +13 -0
- package/lib/elements/entities/bucket/model/bucket_model.builder.js +24 -0
- package/lib/elements/entities/bucket/model/bucket_model.convert.d.ts +5 -0
- package/lib/elements/entities/bucket/model/bucket_model.convert.js +51 -0
- package/lib/elements/entities/bucket/model/bucket_model.infer.d.ts +13 -0
- package/lib/elements/entities/bucket/model/bucket_model.infer.js +2 -0
- package/lib/elements/entities/bucket/model/bucket_model.schema.d.ts +35 -0
- package/lib/elements/entities/bucket/model/bucket_model.schema.js +47 -0
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.d.ts +119 -0
- package/lib/elements/entities/bucket/model/bucket_model_field.builder.js +154 -0
- package/lib/elements/entities/bucket/query/nql.schema.d.ts +140 -0
- package/lib/elements/entities/bucket/query/nql.schema.js +2 -0
- package/lib/elements/entities/bucket/query/nql_compiler.d.ts +44 -0
- package/lib/elements/entities/bucket/query/nql_compiler.js +620 -0
- package/lib/elements/entities/bucket/query/nql_engine.d.ts +16 -0
- package/lib/elements/entities/bucket/query/nql_engine.js +42 -0
- package/lib/elements/entities/bucket/view/bucket_view.builder.d.ts +14 -0
- package/lib/elements/entities/bucket/view/bucket_view.builder.js +24 -0
- package/lib/elements/entities/bucket/view/bucket_view.d.ts +10 -0
- package/lib/elements/entities/bucket/view/bucket_view.js +102 -0
- package/lib/elements/entities/bucket/view/bucket_view.schema.d.ts +55 -0
- package/lib/elements/entities/bucket/view/bucket_view.schema.js +42 -0
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.d.ts +37 -0
- package/lib/elements/entities/bucket/view/bucket_view_field.builder.js +138 -0
- package/lib/elements/entities/constants/constants.builder.d.ts +57 -0
- package/lib/elements/entities/constants/constants.builder.js +116 -0
- package/lib/elements/entities/constants/constants.d.ts +7 -0
- package/lib/elements/entities/constants/constants.js +15 -0
- package/lib/elements/entities/constants/constants.schema.d.ts +51 -0
- package/lib/elements/entities/constants/constants.schema.js +45 -0
- package/lib/elements/entities/message/message.builder.d.ts +33 -0
- package/lib/elements/entities/message/message.builder.js +41 -0
- package/lib/elements/entities/message/message.d.ts +11 -0
- package/lib/elements/entities/message/message.infer.d.ts +63 -0
- package/lib/elements/entities/message/message.infer.js +2 -0
- package/lib/elements/entities/message/message.js +52 -0
- package/lib/elements/entities/message/message.schema.d.ts +15 -0
- package/lib/elements/entities/message/message.schema.js +13 -0
- package/lib/elements/entities/message/message_parser.d.ts +12 -0
- package/lib/elements/entities/message/message_parser.js +112 -0
- package/lib/elements/entities/message/template/message_template.builder.d.ts +14 -0
- package/lib/elements/entities/message/template/message_template.builder.js +20 -0
- package/lib/elements/entities/message/template/message_template.schema.d.ts +57 -0
- package/lib/elements/entities/message/template/message_template.schema.js +28 -0
- package/lib/elements/entities/message/template/message_template_field.builder.d.ts +225 -0
- package/lib/elements/entities/message/template/message_template_field.builder.js +172 -0
- package/lib/elements/entities/message/template/message_template_parser.d.ts +3 -0
- package/lib/elements/entities/message/template/message_template_parser.js +83 -0
- package/lib/elements/index.d.ts +11 -0
- package/lib/elements/index.js +23 -0
- package/lib/engine/apps/app.config.d.ts +49 -0
- package/lib/engine/apps/app.config.js +38 -0
- package/lib/engine/apps/app.d.ts +70 -0
- package/lib/engine/apps/app.js +101 -0
- package/lib/engine/apps/inline.app.d.ts +48 -0
- package/lib/engine/apps/inline.app.js +144 -0
- package/lib/engine/apps/monolyth/monolyth.app.d.ts +20 -0
- package/lib/engine/apps/monolyth/monolyth.app.js +94 -0
- package/lib/engine/apps/monolyth/monolyth.cli.d.ts +45 -0
- package/lib/engine/apps/monolyth/monolyth.cli.js +362 -0
- package/lib/engine/auth/authn.d.ts +18 -0
- package/lib/engine/auth/authn.js +9 -0
- package/lib/engine/auth/zero.authn_provider.d.ts +13 -0
- package/lib/engine/auth/zero.authn_provider.js +13 -0
- package/lib/engine/cli/cli.d.ts +19 -0
- package/lib/engine/cli/cli.js +88 -0
- package/lib/engine/cli/cli_adapter.d.ts +18 -0
- package/lib/engine/cli/cli_adapter.js +61 -0
- package/lib/engine/cli/ui.d.ts +36 -0
- package/lib/engine/cli/ui.js +188 -0
- package/lib/engine/daemon.d.ts +35 -0
- package/lib/engine/daemon.js +66 -0
- package/lib/engine/data/date.d.ts +10 -0
- package/lib/engine/data/date.js +32 -0
- package/lib/engine/data/datetime.d.ts +12 -0
- package/lib/engine/data/datetime.js +31 -0
- package/lib/engine/data/decimal.d.ts +11 -0
- package/lib/engine/data/decimal.js +70 -0
- package/lib/engine/data/error.d.ts +213 -0
- package/lib/engine/data/error.js +386 -0
- package/lib/engine/data/obj.d.ts +16 -0
- package/lib/engine/data/obj.js +5 -0
- package/lib/engine/data/tree.d.ts +17 -0
- package/lib/engine/data/tree.js +111 -0
- package/lib/engine/dependency.d.ts +68 -0
- package/lib/engine/dependency.js +91 -0
- package/lib/engine/module.d.ts +97 -0
- package/lib/engine/module.js +335 -0
- package/lib/engine/space.d.ts +54 -0
- package/lib/engine/space.js +138 -0
- package/lib/engine/transaction/nodes/bucket.trx_node.d.ts +53 -0
- package/lib/engine/transaction/nodes/bucket.trx_node.js +522 -0
- package/lib/engine/transaction/nodes/bucket_query.trx_node.d.ts +17 -0
- package/lib/engine/transaction/nodes/bucket_query.trx_node.js +82 -0
- package/lib/engine/transaction/nodes/job.trx_node.d.ts +13 -0
- package/lib/engine/transaction/nodes/job.trx_node.js +40 -0
- package/lib/engine/transaction/nodes/machine.trx_node.d.ts +12 -0
- package/lib/engine/transaction/nodes/machine.trx_node.js +39 -0
- package/lib/engine/transaction/nodes/queue.trx_node.d.ts +10 -0
- package/lib/engine/transaction/nodes/queue.trx_node.js +24 -0
- package/lib/engine/transaction/nodes/resource.trx_node.d.ts +24 -0
- package/lib/engine/transaction/nodes/resource.trx_node.js +77 -0
- package/lib/engine/transaction/trx.d.ts +50 -0
- package/lib/engine/transaction/trx.js +94 -0
- package/lib/engine/transaction/trx_engine.config.d.ts +15 -0
- package/lib/engine/transaction/trx_engine.config.js +2 -0
- package/lib/engine/transaction/trx_engine.d.ts +27 -0
- package/lib/engine/transaction/trx_engine.js +95 -0
- package/lib/engine/transaction/trx_node.d.ts +61 -0
- package/lib/engine/transaction/trx_node.js +175 -0
- package/lib/engine/tree.d.ts +34 -0
- package/lib/engine/tree.js +237 -0
- package/lib/engine/util/cache.d.ts +6 -0
- package/lib/engine/util/cache.js +20 -0
- package/lib/engine/util/console.d.ts +4 -0
- package/lib/engine/util/console.js +24 -0
- package/lib/engine/util/deep.d.ts +7 -0
- package/lib/engine/util/deep.js +2 -0
- package/lib/engine/util/dotenv.d.ts +15 -0
- package/lib/engine/util/dotenv.js +94 -0
- package/lib/engine/util/i18n.d.ts +5 -0
- package/lib/engine/util/i18n.js +19 -0
- package/lib/engine/util/log.d.ts +17 -0
- package/lib/engine/util/log.js +93 -0
- package/lib/engine/util/parse.d.ts +63 -0
- package/lib/engine/util/parse.js +229 -0
- package/lib/engine/util/promise.d.ts +3 -0
- package/lib/engine/util/promise.js +14 -0
- package/lib/engine/util/shell.d.ts +6 -0
- package/lib/engine/util/shell.js +44 -0
- package/lib/engine/util/string.d.ts +18 -0
- package/lib/engine/util/string.js +25 -0
- package/lib/engine/util/type.d.ts +7 -0
- package/lib/engine/util/type.js +3 -0
- package/lib/schema.d.ts +63 -0
- package/lib/schema.js +2 -0
- package/package.json +22 -0
- package/tools/compile.d.ts +1 -0
- package/tools/compile.js +68 -0
- package/tools/joaquin/job.d.ts +40 -0
- package/tools/joaquin/job.js +47 -0
- package/tools/joaquin/message.d.ts +12 -0
- package/tools/joaquin/message.js +47 -0
- package/tools/joaquin/mock.d.ts +28 -0
- package/tools/joaquin/mock.js +128 -0
- package/tsconfig.build.tsbuildinfo +1 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MachineBuilder = void 0;
|
|
4
|
+
const machine_schema_1 = require("./machine.schema");
|
|
5
|
+
const machine_state_builder_1 = require("./machine_state.builder");
|
|
6
|
+
const block_builder_1 = require("../block.builder");
|
|
7
|
+
const job_builder_1 = require("../job/job.builder");
|
|
8
|
+
const dependency_1 = require("../../../engine/dependency");
|
|
9
|
+
const message_builder_1 = require("../../entities/message/message.builder");
|
|
10
|
+
const machine_transition_builder_1 = require("./machine_transition.builder");
|
|
11
|
+
class MachineBuilder extends block_builder_1.BlockBuilder {
|
|
12
|
+
constructor(module, name) {
|
|
13
|
+
super(module, 'machine', name);
|
|
14
|
+
this.$b = 'machine';
|
|
15
|
+
this._buckets = [];
|
|
16
|
+
this._states = {};
|
|
17
|
+
}
|
|
18
|
+
/* [Block] */
|
|
19
|
+
authn(...providers) {
|
|
20
|
+
return super.authn(...providers);
|
|
21
|
+
}
|
|
22
|
+
messages(def) {
|
|
23
|
+
return super.messages(def);
|
|
24
|
+
}
|
|
25
|
+
/* [Data] */
|
|
26
|
+
bucket(names) {
|
|
27
|
+
names = Array.isArray(names) ? names : [names];
|
|
28
|
+
this._buckets = names.map(name => new dependency_1.$Dependency(this.module, 'bucket', name));
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
stateField(key) {
|
|
32
|
+
this._stateField = key;
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
stateAliasField(key) {
|
|
36
|
+
this._stateAliasField = key;
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
/* The machine nodes */
|
|
40
|
+
state(name, $) {
|
|
41
|
+
const builder = new machine_state_builder_1.MachineStateBuilder(this, this.module, name, Object.values(this._states).length === 0);
|
|
42
|
+
if ($) {
|
|
43
|
+
$(builder);
|
|
44
|
+
}
|
|
45
|
+
this._states[name] = builder;
|
|
46
|
+
return this;
|
|
47
|
+
// return this as unknown as MachineBuilder<Space, Module, Name, $ & {
|
|
48
|
+
// states: {
|
|
49
|
+
// [K in Name]: TMachineState<{ path: Name }>
|
|
50
|
+
// }
|
|
51
|
+
// }>;
|
|
52
|
+
}
|
|
53
|
+
logger($) {
|
|
54
|
+
this._logger = $;
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
/* Build */
|
|
58
|
+
static build(node, tree, module) {
|
|
59
|
+
const states = {};
|
|
60
|
+
const transitions = {
|
|
61
|
+
from: {},
|
|
62
|
+
to: {}
|
|
63
|
+
};
|
|
64
|
+
// Build substates
|
|
65
|
+
for (const key in node.builder._states) {
|
|
66
|
+
const childBuilder = node.builder._states[key];
|
|
67
|
+
const child = machine_state_builder_1.MachineStateBuilder.build(childBuilder);
|
|
68
|
+
Object.assign(states, child.states);
|
|
69
|
+
machine_transition_builder_1.MachineTransitionBuilder.merge(transitions, child.transitions);
|
|
70
|
+
}
|
|
71
|
+
// Asign unique inputs to states based on transitions to that state
|
|
72
|
+
Object.entries(transitions.to)
|
|
73
|
+
.forEach(([state, msgTransitions]) => {
|
|
74
|
+
Object.values(msgTransitions)
|
|
75
|
+
.flat(1)
|
|
76
|
+
.forEach(t => {
|
|
77
|
+
if (!states[state].input.some(dep => dep.tag === t.msg.tag)) {
|
|
78
|
+
states[state].input.push(t.msg);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
const input = Object.values(states)
|
|
83
|
+
.map(state => state.input)
|
|
84
|
+
.flat(1);
|
|
85
|
+
node.schema = new machine_schema_1.$Machine(node.builder.module, node.builder.name, node.builder._alias || node.builder.name, node.builder._authn, input, node.builder._buckets, node.builder._stateField || 'state', states, transitions, node.builder._stateAliasField, node.builder._logger);
|
|
86
|
+
// Configure state jobs with proper input, based on transition targets
|
|
87
|
+
const inlineJobsConfig = {};
|
|
88
|
+
Object.values(states).forEach(state => {
|
|
89
|
+
const transFrom = transitions.from[state.name] || {};
|
|
90
|
+
const inputLeave = [];
|
|
91
|
+
Object.values(transFrom)
|
|
92
|
+
.flat(1)
|
|
93
|
+
.filter($t => !inputLeave.some(dep => dep.tag === $t.msg.tag))
|
|
94
|
+
.forEach($t => inputLeave.push($t.msg));
|
|
95
|
+
const transTo = transitions.to[state.name] || {};
|
|
96
|
+
const inputEnter = [];
|
|
97
|
+
Object.values(transTo)
|
|
98
|
+
.flat(1)
|
|
99
|
+
.filter($t => !inputEnter.some(dep => dep.tag === $t.msg.tag))
|
|
100
|
+
.forEach($t => inputEnter.push($t.msg));
|
|
101
|
+
state.inputEnter = inputEnter;
|
|
102
|
+
state.inputLeave = inputLeave;
|
|
103
|
+
if (state.jobs.beforeEnter) {
|
|
104
|
+
inlineJobsConfig[state.jobs.beforeEnter.name] = {
|
|
105
|
+
MachineJob: { input: inputEnter }
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
if (state.jobs.afterEnter) {
|
|
109
|
+
inlineJobsConfig[state.jobs.afterEnter.name] = {
|
|
110
|
+
MachineJob: { input: inputEnter }
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
if (state.jobs.beforeLeave) {
|
|
114
|
+
inlineJobsConfig[state.jobs.beforeLeave.name] = {
|
|
115
|
+
MachineJob: { input: inputLeave }
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
if (state.jobs.afterLeave) {
|
|
119
|
+
inlineJobsConfig[state.jobs.afterLeave.name] = {
|
|
120
|
+
MachineJob: { input: inputLeave }
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
const { inlineJobs, nestedInlineMessages } = job_builder_1.JobBuilder.buildInlines(node, tree, module, inlineJobsConfig);
|
|
125
|
+
return {
|
|
126
|
+
schema: node.schema,
|
|
127
|
+
inlineMessages: {
|
|
128
|
+
...message_builder_1.MessageBuilder.buildInlines(node, tree, module),
|
|
129
|
+
...nestedInlineMessages
|
|
130
|
+
},
|
|
131
|
+
inlineJobs
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.MachineBuilder = MachineBuilder;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { $Module, $Space } from "../../../schema";
|
|
2
|
+
import { $Machine } from './machine.schema';
|
|
3
|
+
import { Module } from "../../../engine/module";
|
|
4
|
+
import { Block } from '../block';
|
|
5
|
+
import { TrxNode } from "../../../engine/transaction/trx_node";
|
|
6
|
+
import { AnyMessage } from "../../entities/message/message";
|
|
7
|
+
import { NesoiObjId } from "../../../engine/data/obj";
|
|
8
|
+
export declare const MachineOutputCode: {
|
|
9
|
+
info: {
|
|
10
|
+
msg_received: string;
|
|
11
|
+
state_changed: string;
|
|
12
|
+
state_not_changed: string;
|
|
13
|
+
job_returned_message: string;
|
|
14
|
+
job_unmet_condition: string;
|
|
15
|
+
job_from_transition: string;
|
|
16
|
+
};
|
|
17
|
+
warn: {
|
|
18
|
+
no_transition_found: string;
|
|
19
|
+
no_transition_run: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export declare class MachineOutputEntry<Type = string, Code = string, Text = string, Data = any> {
|
|
23
|
+
type: Type;
|
|
24
|
+
code: Code;
|
|
25
|
+
text: Text;
|
|
26
|
+
data: Data;
|
|
27
|
+
constructor(type: Type, code: Code, text: Text, data: Data);
|
|
28
|
+
static info_msg_received(msg: AnyMessage, state: string, obj: Record<string, any>): MachineOutputEntry<"info", "msg_received", `Message '${string}' received at state '${string}'`, {
|
|
29
|
+
msg: AnyMessage;
|
|
30
|
+
state: string;
|
|
31
|
+
obj: Record<string, any>;
|
|
32
|
+
}>;
|
|
33
|
+
static info_state_changed(from: string, to: string): MachineOutputEntry<"info", "state_changed", `State changed from '${string}' to '${string}'`, {
|
|
34
|
+
from: string;
|
|
35
|
+
to: string;
|
|
36
|
+
}>;
|
|
37
|
+
static info_state_not_changed(from: string): MachineOutputEntry<"info", "state_not_changed", `State didn't change, remains at '${string}'`, {
|
|
38
|
+
from: string;
|
|
39
|
+
}>;
|
|
40
|
+
static info_job_returned_message(job: string, msg: AnyMessage): MachineOutputEntry<"info", "job_returned_message", `Job '${string}' returned a message '${string}', which was added to the machine queue`, {
|
|
41
|
+
job: string;
|
|
42
|
+
msg: AnyMessage;
|
|
43
|
+
}>;
|
|
44
|
+
static info_job_from_state(job: string, state: string): MachineOutputEntry<"info", "job_from_state", `Job '${string}' ran for state '${string}'`, {
|
|
45
|
+
job: string;
|
|
46
|
+
state: string;
|
|
47
|
+
}>;
|
|
48
|
+
static info_unmet_condition(transition: string, error: string): MachineOutputEntry<"info", "unmet_condition", `Transition '${string}' condition failed: '${string}'`, {
|
|
49
|
+
transition: string;
|
|
50
|
+
error: string;
|
|
51
|
+
}>;
|
|
52
|
+
static info_job_from_transition(job: string, transition: string): MachineOutputEntry<"info", "job_from_transition", `Job '${string}' ran from transition '${string}'`, {
|
|
53
|
+
job: string;
|
|
54
|
+
transition: string;
|
|
55
|
+
}>;
|
|
56
|
+
static warn_no_transition_found(state: string, msg: string): MachineOutputEntry<"warn", "no_transition_found", `No transition found for state '${string}' and message '${string}'`, {
|
|
57
|
+
state: string;
|
|
58
|
+
msg: string;
|
|
59
|
+
}>;
|
|
60
|
+
static warn_no_transition_run(state: string): MachineOutputEntry<"warn", "no_transition_run", `No transition from state '${string}' passes the assertions`, {
|
|
61
|
+
state: string;
|
|
62
|
+
}>;
|
|
63
|
+
}
|
|
64
|
+
export declare class MachineOutput {
|
|
65
|
+
entries: MachineOutputEntry[];
|
|
66
|
+
constructor(entries?: MachineOutputEntry[]);
|
|
67
|
+
static add(output: MachineOutput, ...entries: MachineOutputEntry[]): void;
|
|
68
|
+
summary(): string;
|
|
69
|
+
jobs(): MachineOutputEntry<string, string, string, any>[];
|
|
70
|
+
}
|
|
71
|
+
export declare class Machine<S extends $Space, M extends $Module, $ extends $Machine> extends Block<S, M, $> {
|
|
72
|
+
module: Module<S, M>;
|
|
73
|
+
schema: $;
|
|
74
|
+
constructor(module: Module<S, M>, schema: $);
|
|
75
|
+
protected run(trx: TrxNode<S, M, $['#authn']>, msg: AnyMessage & {
|
|
76
|
+
id: NesoiObjId;
|
|
77
|
+
}): Promise<MachineOutput>;
|
|
78
|
+
protected _run(trx: TrxNode<S, M, $['#authn']>, _msg: AnyMessage & {
|
|
79
|
+
id: NesoiObjId;
|
|
80
|
+
}): Promise<{
|
|
81
|
+
obj: Record<string, any>;
|
|
82
|
+
output: MachineOutput;
|
|
83
|
+
}>;
|
|
84
|
+
private runStateJob;
|
|
85
|
+
}
|
|
86
|
+
export type AnyMachine = Machine<any, any, any>;
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Machine = exports.MachineOutput = exports.MachineOutputEntry = exports.MachineOutputCode = void 0;
|
|
4
|
+
const block_1 = require("../block");
|
|
5
|
+
const trx_node_1 = require("../../../engine/transaction/trx_node");
|
|
6
|
+
const message_1 = require("../../entities/message/message");
|
|
7
|
+
const error_1 = require("../../../engine/data/error");
|
|
8
|
+
const string_1 = require("../../../engine/util/string");
|
|
9
|
+
const log_1 = require("../../../engine/util/log");
|
|
10
|
+
exports.MachineOutputCode = {
|
|
11
|
+
'info': {
|
|
12
|
+
'msg_received': 'Message received',
|
|
13
|
+
'state_changed': 'State changed',
|
|
14
|
+
'state_not_changed': 'State didn\'t change',
|
|
15
|
+
'job_returned_message': 'Job returned a message, which will be sent back to the machine',
|
|
16
|
+
'job_unmet_condition': 'A condition of the job was not met',
|
|
17
|
+
'job_from_transition': 'A job was run for the transition',
|
|
18
|
+
},
|
|
19
|
+
'warn': {
|
|
20
|
+
'no_transition_found': 'No matching transition was found',
|
|
21
|
+
'no_transition_run': 'No transition matched the required conditions to run',
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
class MachineOutputEntry {
|
|
25
|
+
constructor(type, code, text, data) {
|
|
26
|
+
this.type = type;
|
|
27
|
+
this.code = code;
|
|
28
|
+
this.text = text;
|
|
29
|
+
this.data = data;
|
|
30
|
+
}
|
|
31
|
+
static info_msg_received(msg, state, obj) {
|
|
32
|
+
return new MachineOutputEntry('info', 'msg_received', `Message '${msg.$}' received at state '${state}'`, { msg, state, obj });
|
|
33
|
+
}
|
|
34
|
+
static info_state_changed(from, to) {
|
|
35
|
+
return new MachineOutputEntry('info', 'state_changed', `State changed from '${from}' to '${to}'`, { from, to });
|
|
36
|
+
}
|
|
37
|
+
static info_state_not_changed(from) {
|
|
38
|
+
return new MachineOutputEntry('info', 'state_not_changed', `State didn't change, remains at '${from}'`, { from });
|
|
39
|
+
}
|
|
40
|
+
static info_job_returned_message(job, msg) {
|
|
41
|
+
return new MachineOutputEntry('info', 'job_returned_message', `Job '${job}' returned a message '${msg.$}', which was added to the machine queue`, { job, msg });
|
|
42
|
+
}
|
|
43
|
+
static info_job_from_state(job, state) {
|
|
44
|
+
return new MachineOutputEntry('info', 'job_from_state', `Job '${job}' ran for state '${state}'`, { job, state });
|
|
45
|
+
}
|
|
46
|
+
static info_unmet_condition(transition, error) {
|
|
47
|
+
return new MachineOutputEntry('info', 'unmet_condition', `Transition '${transition}' condition failed: '${error}'`, { transition, error });
|
|
48
|
+
}
|
|
49
|
+
static info_job_from_transition(job, transition) {
|
|
50
|
+
return new MachineOutputEntry('info', 'job_from_transition', `Job '${job}' ran from transition '${transition}'`, { job, transition });
|
|
51
|
+
}
|
|
52
|
+
static warn_no_transition_found(state, msg) {
|
|
53
|
+
return new MachineOutputEntry('warn', 'no_transition_found', `No transition found for state '${state}' and message '${msg}'`, { state, msg });
|
|
54
|
+
}
|
|
55
|
+
static warn_no_transition_run(state) {
|
|
56
|
+
return new MachineOutputEntry('warn', 'no_transition_run', `No transition from state '${state}' passes the assertions`, { state });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.MachineOutputEntry = MachineOutputEntry;
|
|
60
|
+
class MachineOutput {
|
|
61
|
+
constructor(entries = []) {
|
|
62
|
+
this.entries = entries;
|
|
63
|
+
}
|
|
64
|
+
static add(output, ...entries) {
|
|
65
|
+
output.entries.push(...entries);
|
|
66
|
+
}
|
|
67
|
+
summary() {
|
|
68
|
+
let str = '\n';
|
|
69
|
+
this.entries.forEach(entry => {
|
|
70
|
+
const pad = ' '.repeat(Math.max(5 - entry.type.length, 0));
|
|
71
|
+
const color = {
|
|
72
|
+
'info': 'lightpurple',
|
|
73
|
+
'warn': 'yellow',
|
|
74
|
+
'job': 'lightblue',
|
|
75
|
+
'state': 'lightgreen'
|
|
76
|
+
}[entry.type] || 'lightred';
|
|
77
|
+
const type = entry.type ? (0, string_1.colored)(`[${entry.type}]`, color) : 'unknown';
|
|
78
|
+
str += `- ${type}${pad} ${(0, string_1.colored)(entry.code, color)}\n`;
|
|
79
|
+
str += ` ${(0, string_1.colored)(entry.text, 'lightgray')}\n`;
|
|
80
|
+
});
|
|
81
|
+
return str;
|
|
82
|
+
}
|
|
83
|
+
jobs() {
|
|
84
|
+
return this.entries.filter(entry => entry.type === 'job');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.MachineOutput = MachineOutput;
|
|
88
|
+
class Machine extends block_1.Block {
|
|
89
|
+
constructor(module, schema) {
|
|
90
|
+
super('machine', module, schema);
|
|
91
|
+
this.module = module;
|
|
92
|
+
this.schema = schema;
|
|
93
|
+
}
|
|
94
|
+
async run(trx, msg) {
|
|
95
|
+
const { obj, output } = await this._run(trx, msg);
|
|
96
|
+
if (this.schema.logger) {
|
|
97
|
+
try {
|
|
98
|
+
await this.schema.logger({
|
|
99
|
+
trx,
|
|
100
|
+
schema: this.schema,
|
|
101
|
+
obj,
|
|
102
|
+
output
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
log_1.Log.error('machine', this.schema.name, 'Logger failed.', {
|
|
107
|
+
error: e.toString(),
|
|
108
|
+
stack: e.stack
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return output;
|
|
113
|
+
}
|
|
114
|
+
async _run(trx, _msg) {
|
|
115
|
+
const output = new MachineOutput();
|
|
116
|
+
const msg = message_1.Message.clone(_msg);
|
|
117
|
+
const ctx = { trx, msg };
|
|
118
|
+
if (!msg.id) {
|
|
119
|
+
throw error_1.NesoiError.Machine.MessageHasNoId(this.schema.alias);
|
|
120
|
+
}
|
|
121
|
+
// Read data from bucket
|
|
122
|
+
let bucketUsed;
|
|
123
|
+
let obj;
|
|
124
|
+
for (const bucket of this.schema.buckets) {
|
|
125
|
+
obj = await trx.bucket(bucket.refName).readOne(msg.id);
|
|
126
|
+
if (obj) {
|
|
127
|
+
bucketUsed = bucket;
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (!obj) {
|
|
132
|
+
throw error_1.NesoiError.Machine.ObjNotFound(this.schema.alias, msg.id);
|
|
133
|
+
}
|
|
134
|
+
// Get current state
|
|
135
|
+
const stateName = obj[this.schema.stateField];
|
|
136
|
+
if (!stateName) {
|
|
137
|
+
throw error_1.NesoiError.Machine.StateNotFound(this.schema.alias, msg.id);
|
|
138
|
+
}
|
|
139
|
+
const state = this.schema.states[stateName];
|
|
140
|
+
if (!state) {
|
|
141
|
+
throw error_1.NesoiError.Machine.StateNotFound(this.schema.alias, msg.id);
|
|
142
|
+
}
|
|
143
|
+
MachineOutput.add(output, MachineOutputEntry.info_msg_received(msg, state.name, obj));
|
|
144
|
+
// Find list of transitions for given state and message
|
|
145
|
+
const transitions = this.schema.transitions.from[stateName]?.[msg.$];
|
|
146
|
+
if (!transitions?.length) {
|
|
147
|
+
MachineOutput.add(output, MachineOutputEntry.warn_no_transition_found(state.name, msg.$));
|
|
148
|
+
return { obj, output };
|
|
149
|
+
}
|
|
150
|
+
const queue = [];
|
|
151
|
+
// Run "beforeLeave" job of current state
|
|
152
|
+
await this.runStateJob(trx, output, queue, state.jobs.beforeLeave, msg, obj, state.name, undefined, 'before_leave', `Ran job '${state.jobs.beforeLeave?.name}' before leaving '${state.name}'`);
|
|
153
|
+
// Try each transition until one works
|
|
154
|
+
let nextState;
|
|
155
|
+
let nextMsg;
|
|
156
|
+
for (const transition of transitions) {
|
|
157
|
+
// Transition condition [ .if() ]
|
|
158
|
+
if (transition.condition) {
|
|
159
|
+
const conditionResult = await transition.condition(ctx);
|
|
160
|
+
// Condition not met, save message as info and try next transition
|
|
161
|
+
if (conditionResult !== true) {
|
|
162
|
+
MachineOutput.add(output, MachineOutputEntry.info_unmet_condition(transition.name, conditionResult));
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Condition passed, run this transition
|
|
167
|
+
// Get next state
|
|
168
|
+
const nextStateName = transition.to;
|
|
169
|
+
nextState = this.schema.states[nextStateName];
|
|
170
|
+
if (!state) {
|
|
171
|
+
throw error_1.NesoiError.Machine.StateNotFound(this.schema.alias, msg.id);
|
|
172
|
+
}
|
|
173
|
+
// Run all transition jobs
|
|
174
|
+
for (const job of transition.jobs) {
|
|
175
|
+
await trx_node_1.TrxNode.jobWithCustomCtx(trx, job.refName, {
|
|
176
|
+
obj,
|
|
177
|
+
from: state.name,
|
|
178
|
+
to: nextState.name
|
|
179
|
+
}).forward(msg);
|
|
180
|
+
MachineOutput.add(output, MachineOutputEntry.info_job_from_transition(job.tag, transition.name));
|
|
181
|
+
}
|
|
182
|
+
// Run "beforeEnter" job of next state
|
|
183
|
+
await this.runStateJob(trx, output, queue, nextState.jobs.beforeEnter, msg, obj, state.name, nextState.name, 'before_enter', `Ran job '${nextState.jobs.beforeEnter?.name}' before entering '${nextState.name}'`);
|
|
184
|
+
// Change object state to new state and save
|
|
185
|
+
// TODO: log object changes
|
|
186
|
+
obj[this.schema.stateField] = nextState.name;
|
|
187
|
+
if (this.schema.stateAliasField) {
|
|
188
|
+
obj[this.schema.stateAliasField] = nextState.alias;
|
|
189
|
+
}
|
|
190
|
+
obj = await trx.bucket(bucketUsed.refName).put(obj);
|
|
191
|
+
if (nextStateName !== stateName) {
|
|
192
|
+
MachineOutput.add(output, MachineOutputEntry.info_state_changed(state.name, nextState.name));
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
MachineOutput.add(output, MachineOutputEntry.info_state_not_changed(state.name));
|
|
196
|
+
}
|
|
197
|
+
// Run "afterLeave" job of previous state (which was the current until now)
|
|
198
|
+
await this.runStateJob(trx, output, queue, state.jobs.afterLeave, msg, obj, state.name, state.name, 'after_leave', `Ran job '${state.jobs.afterLeave?.name}' after leaving '${state.name}'`);
|
|
199
|
+
// Run "afterEnter" job of current state (which was the next until now)
|
|
200
|
+
await this.runStateJob(trx, output, queue, nextState.jobs.afterEnter, msg, obj, state.name, nextState.name, 'after_enter', `Ran job '${nextState.jobs.afterEnter?.name}' after entering '${nextState.name}'`);
|
|
201
|
+
}
|
|
202
|
+
// No transition run,
|
|
203
|
+
if (!nextState) {
|
|
204
|
+
MachineOutput.add(output, MachineOutputEntry.warn_no_transition_run(state.name));
|
|
205
|
+
}
|
|
206
|
+
// TODO: queue nextMsg
|
|
207
|
+
if (nextMsg) {
|
|
208
|
+
// ...
|
|
209
|
+
}
|
|
210
|
+
return { obj, output };
|
|
211
|
+
}
|
|
212
|
+
async runStateJob(trx, output, queue, job, msg, obj, from, to, code, text) {
|
|
213
|
+
if (!job) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const result = await trx_node_1.TrxNode.jobWithCustomCtx(trx, job.refName, {
|
|
217
|
+
obj,
|
|
218
|
+
from,
|
|
219
|
+
to
|
|
220
|
+
}).forward(msg);
|
|
221
|
+
MachineOutput.add(output, MachineOutputEntry.info_job_from_state(job.tag, from));
|
|
222
|
+
if (result instanceof message_1.Message) {
|
|
223
|
+
queue.push(result);
|
|
224
|
+
MachineOutput.add(output, MachineOutputEntry.info_job_returned_message(job.tag, result));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
exports.Machine = Machine;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { $Block } from "../block.schema";
|
|
2
|
+
import { $JobAssert } from "../job/job.schema";
|
|
3
|
+
import { $Dependency } from "../../../engine/dependency";
|
|
4
|
+
import { AnyTrxNode } from "../../../engine/transaction/trx_node";
|
|
5
|
+
import { MachineOutput } from './machine';
|
|
6
|
+
export declare class $MachineTransition extends $Block {
|
|
7
|
+
module: string;
|
|
8
|
+
name: string;
|
|
9
|
+
alias: string;
|
|
10
|
+
authn: string[];
|
|
11
|
+
msg: $Dependency;
|
|
12
|
+
from: string;
|
|
13
|
+
to: string;
|
|
14
|
+
condition?: $JobAssert<any, any, never, any> | undefined;
|
|
15
|
+
jobs: $Dependency[];
|
|
16
|
+
$t: any;
|
|
17
|
+
constructor(module: string, name: string, alias: string, authn: string[], msg: $Dependency, from: string, to: string, condition?: $JobAssert<any, any, never, any> | undefined, jobs?: $Dependency[]);
|
|
18
|
+
}
|
|
19
|
+
export type $MachineTransitions = {
|
|
20
|
+
from: {
|
|
21
|
+
[state: string]: {
|
|
22
|
+
[msg: string]: $MachineTransition[];
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
to: {
|
|
26
|
+
[state: string]: {
|
|
27
|
+
[msg: string]: $MachineTransition[];
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
export declare class $MachineState extends $Block {
|
|
32
|
+
module: string;
|
|
33
|
+
name: string;
|
|
34
|
+
alias: string;
|
|
35
|
+
authn: string[];
|
|
36
|
+
initial: boolean;
|
|
37
|
+
final: boolean;
|
|
38
|
+
inputEnter: $Dependency[];
|
|
39
|
+
inputLeave: $Dependency[];
|
|
40
|
+
jobs: {
|
|
41
|
+
beforeEnter?: $Dependency;
|
|
42
|
+
afterEnter?: $Dependency;
|
|
43
|
+
beforeLeave?: $Dependency;
|
|
44
|
+
afterLeave?: $Dependency;
|
|
45
|
+
};
|
|
46
|
+
$t: any;
|
|
47
|
+
'#input.enter': any;
|
|
48
|
+
'#input.leave': any;
|
|
49
|
+
constructor(module: string, name: string, alias: string, authn: string[], initial: boolean, final: boolean, inputEnter: $Dependency[], inputLeave: $Dependency[], jobs: {
|
|
50
|
+
beforeEnter?: $Dependency;
|
|
51
|
+
afterEnter?: $Dependency;
|
|
52
|
+
beforeLeave?: $Dependency;
|
|
53
|
+
afterLeave?: $Dependency;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
export type $MachineStates = {
|
|
57
|
+
[x: string]: $MachineState;
|
|
58
|
+
};
|
|
59
|
+
export declare class $Machine extends $Block {
|
|
60
|
+
module: string;
|
|
61
|
+
name: string;
|
|
62
|
+
alias: string;
|
|
63
|
+
authn: string[];
|
|
64
|
+
input: $Dependency[];
|
|
65
|
+
buckets: $Dependency[];
|
|
66
|
+
stateField: string;
|
|
67
|
+
states: $MachineStates;
|
|
68
|
+
transitions: $MachineTransitions;
|
|
69
|
+
stateAliasField?: string | undefined;
|
|
70
|
+
logger?: $MachineLogFn<any> | undefined;
|
|
71
|
+
$t: "machine";
|
|
72
|
+
'#data': unknown;
|
|
73
|
+
constructor(module: string, name: string, alias: string, authn: string[], input: $Dependency[], buckets: $Dependency[], stateField: string, states: $MachineStates, transitions: $MachineTransitions, stateAliasField?: string | undefined, logger?: $MachineLogFn<any> | undefined);
|
|
74
|
+
}
|
|
75
|
+
export declare class $MachineJobScope {
|
|
76
|
+
module: string;
|
|
77
|
+
machine: string;
|
|
78
|
+
constructor(module: string, machine: string);
|
|
79
|
+
}
|
|
80
|
+
export type $MachineLogFn<M extends $Machine = $Machine> = (ctx: {
|
|
81
|
+
trx: AnyTrxNode;
|
|
82
|
+
schema: M;
|
|
83
|
+
obj: M['#data'];
|
|
84
|
+
output: MachineOutput;
|
|
85
|
+
}) => any | Promise<any>;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.$MachineJobScope = exports.$Machine = exports.$MachineState = exports.$MachineTransition = void 0;
|
|
4
|
+
const block_schema_1 = require("../block.schema");
|
|
5
|
+
// Transition
|
|
6
|
+
class $MachineTransition extends block_schema_1.$Block {
|
|
7
|
+
constructor(module, name, alias, authn, msg, from, to, condition, jobs = []) {
|
|
8
|
+
super(module, name, alias, authn, [msg], {});
|
|
9
|
+
this.module = module;
|
|
10
|
+
this.name = name;
|
|
11
|
+
this.alias = alias;
|
|
12
|
+
this.authn = authn;
|
|
13
|
+
this.msg = msg;
|
|
14
|
+
this.from = from;
|
|
15
|
+
this.to = to;
|
|
16
|
+
this.condition = condition;
|
|
17
|
+
this.jobs = jobs;
|
|
18
|
+
this.$t = 'machine.transition';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.$MachineTransition = $MachineTransition;
|
|
22
|
+
// State
|
|
23
|
+
class $MachineState extends block_schema_1.$Block {
|
|
24
|
+
constructor(module, name, alias, authn, initial, final, inputEnter, inputLeave, jobs) {
|
|
25
|
+
super(module, name, alias, authn, [...inputEnter, ...inputLeave], {});
|
|
26
|
+
this.module = module;
|
|
27
|
+
this.name = name;
|
|
28
|
+
this.alias = alias;
|
|
29
|
+
this.authn = authn;
|
|
30
|
+
this.initial = initial;
|
|
31
|
+
this.final = final;
|
|
32
|
+
this.inputEnter = inputEnter;
|
|
33
|
+
this.inputLeave = inputLeave;
|
|
34
|
+
this.jobs = jobs;
|
|
35
|
+
this.$t = 'machine.state';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.$MachineState = $MachineState;
|
|
39
|
+
// Machine
|
|
40
|
+
class $Machine extends block_schema_1.$Block {
|
|
41
|
+
constructor(module, name, alias, authn, input, buckets, stateField, states, transitions, stateAliasField, logger) {
|
|
42
|
+
super(module, name, alias, authn, input, {});
|
|
43
|
+
this.module = module;
|
|
44
|
+
this.name = name;
|
|
45
|
+
this.alias = alias;
|
|
46
|
+
this.authn = authn;
|
|
47
|
+
this.input = input;
|
|
48
|
+
this.buckets = buckets;
|
|
49
|
+
this.stateField = stateField;
|
|
50
|
+
this.states = states;
|
|
51
|
+
this.transitions = transitions;
|
|
52
|
+
this.stateAliasField = stateAliasField;
|
|
53
|
+
this.logger = logger;
|
|
54
|
+
this.$t = 'machine';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.$Machine = $Machine;
|
|
58
|
+
class $MachineJobScope {
|
|
59
|
+
constructor(module, machine) {
|
|
60
|
+
this.module = module;
|
|
61
|
+
this.machine = machine;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.$MachineJobScope = $MachineJobScope;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { $Module, $Space, ScopedMessageNameWithId } from "../../../schema";
|
|
2
|
+
import { $Machine, $MachineState, $MachineStates, $MachineTransition, $MachineTransitions } from './machine.schema';
|
|
3
|
+
import { MachineTransitionDef } from './machine_transition.builder';
|
|
4
|
+
import { Overlay } from "../../../engine/util/type";
|
|
5
|
+
import { BlockBuilder } from '../block.builder';
|
|
6
|
+
import { $Job } from '../job/job.schema';
|
|
7
|
+
import { AnyMachineBuilder } from './machine.builder';
|
|
8
|
+
import { MachineJobDef } from '../job/internal/machine_job.builder';
|
|
9
|
+
export declare class MachineStateBuilder<S extends $Space, M extends $Module, $M extends $Machine, $ extends $MachineState = $MachineState> extends BlockBuilder<S, M, 'machine'> {
|
|
10
|
+
private machine;
|
|
11
|
+
private _initial;
|
|
12
|
+
private _transitions;
|
|
13
|
+
private _states;
|
|
14
|
+
private _final;
|
|
15
|
+
constructor(machine: AnyMachineBuilder, module: string, name: string, _initial?: boolean);
|
|
16
|
+
private _jobs;
|
|
17
|
+
as(alias: string): this;
|
|
18
|
+
final(): this;
|
|
19
|
+
beforeEnter<Def extends MachineJobDef<S, M, `${$['name']}__before_enter`, Overlay<$Job, {
|
|
20
|
+
'#input': $['#input.enter'];
|
|
21
|
+
}>, {
|
|
22
|
+
obj: $M['#data'];
|
|
23
|
+
from: $M['transitions']['to'][$['name']][keyof $M['transitions']['to'][$['name']]][number]['from'];
|
|
24
|
+
to: $M['transitions']['to'][$['name']][keyof $M['transitions']['from'][$['name']]][number]['to'];
|
|
25
|
+
}>>(def: Def): this;
|
|
26
|
+
afterEnter<Def extends MachineJobDef<S, M, `${$['name']}__after_enter`, Overlay<$Job, {
|
|
27
|
+
'#input': $['#input.enter'];
|
|
28
|
+
}>, {
|
|
29
|
+
obj: $M['#data'];
|
|
30
|
+
from: $M['transitions']['to'][$['name']][keyof $M['transitions']['to'][$['name']]][number]['from'];
|
|
31
|
+
to: $M['transitions']['from'][$['name']][keyof $M['transitions']['from'][$['name']]][number]['to'];
|
|
32
|
+
}>>(def: Def): this;
|
|
33
|
+
beforeLeave<Def extends MachineJobDef<S, M, `${$['name']}__before_leave`, Overlay<$Job, {
|
|
34
|
+
'#input': $['#input.leave'];
|
|
35
|
+
}>, {
|
|
36
|
+
obj: $M['#data'];
|
|
37
|
+
from: $M['transitions']['to'][$['name']][keyof $M['transitions']['to'][$['name']]][number]['from'];
|
|
38
|
+
to: $M['transitions']['from'][$['name']][keyof $M['transitions']['from'][$['name']]][number]['to'];
|
|
39
|
+
}>>(def: Def): this;
|
|
40
|
+
afterLeave<Def extends MachineJobDef<S, M, `${$['name']}__after_leave`, Overlay<$Job, {
|
|
41
|
+
'#input': $['#input.leave'];
|
|
42
|
+
}>, {
|
|
43
|
+
obj: $M['#data'];
|
|
44
|
+
from: $M['transitions']['to'][$['name']][keyof $M['transitions']['to'][$['name']]][number]['from'];
|
|
45
|
+
to: $M['transitions']['from'][$['name']][keyof $M['transitions']['from'][$['name']]][number]['to'];
|
|
46
|
+
}>>(def: Def): this;
|
|
47
|
+
transition<MsgName extends ScopedMessageNameWithId<M, $M['name'], $M['#data']['id' & keyof $M['#data']]>, Def extends MachineTransitionDef<S, M, $M, Overlay<$MachineTransition, {
|
|
48
|
+
'#input': M['messages'][MsgName extends `@.${infer X}` ? `${$M['name']}.${X}` : MsgName];
|
|
49
|
+
from: $['name'];
|
|
50
|
+
}>>>(msg: MsgName, $: Def): this;
|
|
51
|
+
state<Name extends string, Def extends MachineStateDef<S, M, $M, $M['states'][`${$['name']}.${Name}`]>>(name: Name, $?: Def): this;
|
|
52
|
+
/** Build */
|
|
53
|
+
static build(builder: MachineStateBuilder<any, any, any>): {
|
|
54
|
+
states: $MachineStates;
|
|
55
|
+
transitions: $MachineTransitions;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export type MachineStateDef<S extends $Space, M extends $Module, $M extends $Machine, State extends $MachineState> = ($: MachineStateBuilder<S, M, $M, State>) => any;
|