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,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ControllerBuilder = exports.ControllerDomainBuilder = exports.ControllerGroupBuilder = exports.ControllerEndpointBuilder = void 0;
|
|
4
|
+
const controller_schema_1 = require("./controller.schema");
|
|
5
|
+
const dependency_1 = require("../../../engine/dependency");
|
|
6
|
+
class ControllerEndpointBuilder {
|
|
7
|
+
constructor(module, name) {
|
|
8
|
+
this.module = module;
|
|
9
|
+
this.name = name;
|
|
10
|
+
this._authn = [];
|
|
11
|
+
this._tags = [];
|
|
12
|
+
}
|
|
13
|
+
as(alias) {
|
|
14
|
+
this._alias = alias;
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
authn(providers) {
|
|
18
|
+
if (!Array.isArray(providers)) {
|
|
19
|
+
providers = [providers];
|
|
20
|
+
}
|
|
21
|
+
this._authn = providers;
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
tag(tag) {
|
|
25
|
+
this._tags.push(tag);
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
tags(tags) {
|
|
29
|
+
this._tags.push(...tags);
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
msg(msg) {
|
|
33
|
+
this._msg = new dependency_1.$Dependency(this.module, 'message', msg);
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
toJob(job) {
|
|
37
|
+
this._target = new dependency_1.$Dependency(this.module, 'job', job);
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
toResource(resource) {
|
|
41
|
+
this._target = new dependency_1.$Dependency(this.module, 'resource', resource);
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
toMachine(machine) {
|
|
45
|
+
this._target = new dependency_1.$Dependency(this.module, 'machine', machine);
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
static build(builder) {
|
|
49
|
+
return new controller_schema_1.$ControllerEndpoint(builder.name, builder._alias || builder.name, builder._authn, builder._tags, builder._msg, builder._target);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.ControllerEndpointBuilder = ControllerEndpointBuilder;
|
|
53
|
+
class ControllerGroupBuilder {
|
|
54
|
+
constructor(module, name) {
|
|
55
|
+
this.module = module;
|
|
56
|
+
this.name = name;
|
|
57
|
+
this._authn = [];
|
|
58
|
+
this.groups = {};
|
|
59
|
+
this.endpoints = {};
|
|
60
|
+
}
|
|
61
|
+
as(alias) {
|
|
62
|
+
this._alias = alias;
|
|
63
|
+
return this;
|
|
64
|
+
}
|
|
65
|
+
authn(providers) {
|
|
66
|
+
if (!Array.isArray(providers)) {
|
|
67
|
+
providers = [providers];
|
|
68
|
+
}
|
|
69
|
+
this._authn = providers;
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
72
|
+
endpoint(name, $) {
|
|
73
|
+
const builder = new ControllerEndpointBuilder(this.module, name);
|
|
74
|
+
$(builder);
|
|
75
|
+
this.endpoints[name] = builder;
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
78
|
+
group(name, $) {
|
|
79
|
+
const builder = new ControllerGroupBuilder(this.module, name);
|
|
80
|
+
$(builder);
|
|
81
|
+
this.groups[name] = builder;
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
84
|
+
static build(builder) {
|
|
85
|
+
const endpoints = this.buildEndpoints(builder.endpoints);
|
|
86
|
+
const groups = this.buildGroups(builder.groups);
|
|
87
|
+
return new controller_schema_1.$ControllerGroup(builder.name, builder._alias || builder.name, builder._authn, groups, endpoints);
|
|
88
|
+
}
|
|
89
|
+
static buildGroups(builders) {
|
|
90
|
+
const groups = {};
|
|
91
|
+
for (const g in builders) {
|
|
92
|
+
const group = builders[g];
|
|
93
|
+
groups[g] = this.build(group);
|
|
94
|
+
}
|
|
95
|
+
return groups;
|
|
96
|
+
}
|
|
97
|
+
static buildEndpoints(builders) {
|
|
98
|
+
const endpoints = {};
|
|
99
|
+
for (const g in builders) {
|
|
100
|
+
const endpoint = builders[g];
|
|
101
|
+
endpoints[g] = ControllerEndpointBuilder.build(endpoint);
|
|
102
|
+
}
|
|
103
|
+
return endpoints;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.ControllerGroupBuilder = ControllerGroupBuilder;
|
|
107
|
+
class ControllerDomainBuilder extends ControllerGroupBuilder {
|
|
108
|
+
constructor() {
|
|
109
|
+
super(...arguments);
|
|
110
|
+
this._version = 'v1';
|
|
111
|
+
}
|
|
112
|
+
version(version) {
|
|
113
|
+
this._version = version;
|
|
114
|
+
return this;
|
|
115
|
+
}
|
|
116
|
+
static build(builder) {
|
|
117
|
+
const group = ControllerGroupBuilder.build(builder);
|
|
118
|
+
return new controller_schema_1.$ControllerDomain(group.name, group.alias, group.authn, builder._version, group.groups, group.endpoints);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
exports.ControllerDomainBuilder = ControllerDomainBuilder;
|
|
122
|
+
class ControllerBuilder {
|
|
123
|
+
constructor(module, name) {
|
|
124
|
+
this.module = module;
|
|
125
|
+
this.name = name;
|
|
126
|
+
this.$b = 'controller';
|
|
127
|
+
this._authn = [];
|
|
128
|
+
this.domains = {};
|
|
129
|
+
}
|
|
130
|
+
as(alias) {
|
|
131
|
+
this._alias = alias;
|
|
132
|
+
return this;
|
|
133
|
+
}
|
|
134
|
+
authn(providers) {
|
|
135
|
+
if (!Array.isArray(providers)) {
|
|
136
|
+
providers = [providers];
|
|
137
|
+
}
|
|
138
|
+
this._authn = providers;
|
|
139
|
+
return this;
|
|
140
|
+
}
|
|
141
|
+
domain(name, $) {
|
|
142
|
+
const builder = new ControllerDomainBuilder(this.module, name);
|
|
143
|
+
$(builder);
|
|
144
|
+
const version = builder._version;
|
|
145
|
+
this.domains[name + '.' + version] = builder;
|
|
146
|
+
return this;
|
|
147
|
+
}
|
|
148
|
+
// Build
|
|
149
|
+
static build(node) {
|
|
150
|
+
const domains = this.buildDomains(node.builder.domains);
|
|
151
|
+
const input = Object.values(domains)
|
|
152
|
+
.map(domain => this.buildInput(domain))
|
|
153
|
+
.flat();
|
|
154
|
+
node.schema = new controller_schema_1.$Controller(node.module, node.builder.name, node.builder._alias || node.builder.name, node.builder._authn, input, domains);
|
|
155
|
+
return node.schema;
|
|
156
|
+
}
|
|
157
|
+
static buildInput(group) {
|
|
158
|
+
const input = [];
|
|
159
|
+
for (const e in group.endpoints) {
|
|
160
|
+
const endpoint = group.endpoints[e];
|
|
161
|
+
input.push(endpoint.msg);
|
|
162
|
+
}
|
|
163
|
+
for (const e in group.groups) {
|
|
164
|
+
const groupInput = this.buildInput(group.groups[e]);
|
|
165
|
+
input.push(...groupInput);
|
|
166
|
+
}
|
|
167
|
+
return input;
|
|
168
|
+
}
|
|
169
|
+
static buildDomains(builders) {
|
|
170
|
+
const domains = {};
|
|
171
|
+
for (const g in builders) {
|
|
172
|
+
const domain = builders[g];
|
|
173
|
+
domains[g] = ControllerDomainBuilder.build(domain);
|
|
174
|
+
}
|
|
175
|
+
return domains;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
exports.ControllerBuilder = ControllerBuilder;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ControllerAdapter } from './adapters/controller_adapter';
|
|
2
|
+
import { $Controller } from './controller.schema';
|
|
3
|
+
export type ControllerConfig<B extends $Controller, Providers extends Record<string, any>> = {
|
|
4
|
+
/** Adapter used by this Controller to communicate with a data source */
|
|
5
|
+
adapter?: (schema: B, providers: Providers) => ControllerAdapter;
|
|
6
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { $Module, $Space } from "../../../schema";
|
|
2
|
+
import { Module } from "../../../engine/module";
|
|
3
|
+
import { $Controller, $ControllerEndpoint } from './controller.schema';
|
|
4
|
+
import { ControllerAdapter } from './adapters/controller_adapter';
|
|
5
|
+
import { ControllerConfig } from './controller.config';
|
|
6
|
+
import { AnyDaemon } from "../../../engine/daemon";
|
|
7
|
+
export declare class ControllerEndpoint<$ extends $ControllerEndpoint> {
|
|
8
|
+
schema: $;
|
|
9
|
+
adapter: ControllerAdapter;
|
|
10
|
+
path: string;
|
|
11
|
+
constructor(schema: $, adapter: ControllerAdapter, path: string);
|
|
12
|
+
invoke(data: Record<string, any>): Promise<import("../../../engine/transaction/trx").TrxStatus<any>>;
|
|
13
|
+
}
|
|
14
|
+
export declare class Controller<S extends $Space, M extends $Module, $ extends $Controller> {
|
|
15
|
+
schema: $;
|
|
16
|
+
config?: ControllerConfig<$, any> | undefined;
|
|
17
|
+
providers: Record<string, any>;
|
|
18
|
+
adapter: ControllerAdapter;
|
|
19
|
+
constructor(module: Module<S, M>, schema: $, config?: ControllerConfig<$, any> | undefined, providers?: Record<string, any>);
|
|
20
|
+
bind(daemon: AnyDaemon): void;
|
|
21
|
+
}
|
|
22
|
+
export type AnyController = Controller<any, any, any>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Controller = exports.ControllerEndpoint = void 0;
|
|
4
|
+
const cli_controller_adapter_1 = require("./adapters/cli.controller_adapter");
|
|
5
|
+
class ControllerEndpoint {
|
|
6
|
+
constructor(schema, adapter, path) {
|
|
7
|
+
this.schema = schema;
|
|
8
|
+
this.adapter = adapter;
|
|
9
|
+
this.path = path;
|
|
10
|
+
}
|
|
11
|
+
invoke(data) {
|
|
12
|
+
const raw = {
|
|
13
|
+
...data,
|
|
14
|
+
$: this.schema.msg.name
|
|
15
|
+
};
|
|
16
|
+
return this.adapter.trx(async ($) => {
|
|
17
|
+
if (this.schema.target.type === 'job') {
|
|
18
|
+
return $.job(this.schema.target.refName).run(raw);
|
|
19
|
+
}
|
|
20
|
+
if (this.schema.target.type === 'resource') {
|
|
21
|
+
return $.resource(this.schema.target.refName).run(raw);
|
|
22
|
+
}
|
|
23
|
+
if (this.schema.target.type === 'machine') {
|
|
24
|
+
return $.machine(this.schema.target.refName).run(raw);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.ControllerEndpoint = ControllerEndpoint;
|
|
30
|
+
class Controller {
|
|
31
|
+
constructor(module, schema, config, providers = {}) {
|
|
32
|
+
this.schema = schema;
|
|
33
|
+
this.config = config;
|
|
34
|
+
this.providers = providers;
|
|
35
|
+
this.adapter = config?.adapter?.(schema, providers) || new cli_controller_adapter_1.CLIControllerAdapter(schema);
|
|
36
|
+
}
|
|
37
|
+
bind(daemon) {
|
|
38
|
+
this.adapter.bind(daemon);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.Controller = Controller;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { $Message } from "../../entities/message/message.schema";
|
|
2
|
+
import { AnyUsers } from "../../../engine/auth/authn";
|
|
3
|
+
import { $Dependency } from "../../../engine/dependency";
|
|
4
|
+
export declare class $ControllerEndpoint {
|
|
5
|
+
name: string;
|
|
6
|
+
alias: string;
|
|
7
|
+
authn: string[];
|
|
8
|
+
tags: string[];
|
|
9
|
+
msg: $Dependency;
|
|
10
|
+
target: $Dependency;
|
|
11
|
+
$t: string;
|
|
12
|
+
constructor(name: string, alias: string, authn: string[], tags: string[], msg: $Dependency, target: $Dependency);
|
|
13
|
+
}
|
|
14
|
+
export declare class $ControllerGroup {
|
|
15
|
+
name: string;
|
|
16
|
+
alias: string;
|
|
17
|
+
authn: string[];
|
|
18
|
+
groups: Record<string, $ControllerGroup>;
|
|
19
|
+
endpoints: Record<string, $ControllerEndpoint>;
|
|
20
|
+
$t: string;
|
|
21
|
+
constructor(name: string, alias: string, authn: string[], groups?: Record<string, $ControllerGroup>, endpoints?: Record<string, $ControllerEndpoint>);
|
|
22
|
+
}
|
|
23
|
+
export declare class $ControllerDomain extends $ControllerGroup {
|
|
24
|
+
name: string;
|
|
25
|
+
alias: string;
|
|
26
|
+
authn: string[];
|
|
27
|
+
version: string;
|
|
28
|
+
groups: Record<string, $ControllerGroup>;
|
|
29
|
+
endpoints: Record<string, $ControllerEndpoint>;
|
|
30
|
+
$t: string;
|
|
31
|
+
constructor(name: string, alias: string, authn: string[], version: string, groups?: Record<string, $ControllerGroup>, endpoints?: Record<string, $ControllerEndpoint>);
|
|
32
|
+
}
|
|
33
|
+
export declare class $Controller {
|
|
34
|
+
module: string;
|
|
35
|
+
name: string;
|
|
36
|
+
alias: string;
|
|
37
|
+
authn: string[];
|
|
38
|
+
input: $Dependency[];
|
|
39
|
+
domains: Record<string, $ControllerDomain>;
|
|
40
|
+
$t: "controller";
|
|
41
|
+
'#authn': AnyUsers;
|
|
42
|
+
'#input': $Message;
|
|
43
|
+
constructor(module: string, name: string, alias: string, authn: string[], input: $Dependency[], domains?: Record<string, $ControllerDomain>);
|
|
44
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.$Controller = exports.$ControllerDomain = exports.$ControllerGroup = exports.$ControllerEndpoint = void 0;
|
|
4
|
+
class $ControllerEndpoint {
|
|
5
|
+
constructor(name, alias, authn, tags, msg, target) {
|
|
6
|
+
this.name = name;
|
|
7
|
+
this.alias = alias;
|
|
8
|
+
this.authn = authn;
|
|
9
|
+
this.tags = tags;
|
|
10
|
+
this.msg = msg;
|
|
11
|
+
this.target = target;
|
|
12
|
+
this.$t = 'controller.endpoint';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.$ControllerEndpoint = $ControllerEndpoint;
|
|
16
|
+
class $ControllerGroup {
|
|
17
|
+
constructor(name, alias, authn, groups = {}, endpoints = {}) {
|
|
18
|
+
this.name = name;
|
|
19
|
+
this.alias = alias;
|
|
20
|
+
this.authn = authn;
|
|
21
|
+
this.groups = groups;
|
|
22
|
+
this.endpoints = endpoints;
|
|
23
|
+
this.$t = 'controller.group';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.$ControllerGroup = $ControllerGroup;
|
|
27
|
+
class $ControllerDomain extends $ControllerGroup {
|
|
28
|
+
constructor(name, alias, authn, version, groups = {}, endpoints = {}) {
|
|
29
|
+
super(name, alias, authn, groups, endpoints);
|
|
30
|
+
this.name = name;
|
|
31
|
+
this.alias = alias;
|
|
32
|
+
this.authn = authn;
|
|
33
|
+
this.version = version;
|
|
34
|
+
this.groups = groups;
|
|
35
|
+
this.endpoints = endpoints;
|
|
36
|
+
this.$t = 'controller.domain';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.$ControllerDomain = $ControllerDomain;
|
|
40
|
+
class $Controller {
|
|
41
|
+
constructor(module, name, alias, authn, input, domains = {}) {
|
|
42
|
+
this.module = module;
|
|
43
|
+
this.name = name;
|
|
44
|
+
this.alias = alias;
|
|
45
|
+
this.authn = authn;
|
|
46
|
+
this.input = input;
|
|
47
|
+
this.domains = domains;
|
|
48
|
+
this.$t = 'controller';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.$Controller = $Controller;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { AnyTrxNode } from "../../../../engine/transaction/trx_node";
|
|
2
|
+
import { NesoiObj, NewOrOldObj } from "../../../../engine/data/obj";
|
|
3
|
+
import { BucketCacheSync } from '../cache/bucket_cache';
|
|
4
|
+
import { NQL_AnyQuery, NQL_Pagination } from '../query/nql.schema';
|
|
5
|
+
import { NQLRunner } from '../query/nql_engine';
|
|
6
|
+
import { $Bucket } from "../../..";
|
|
7
|
+
export type BucketAdapterConfig = {
|
|
8
|
+
updatedAtField: string;
|
|
9
|
+
};
|
|
10
|
+
export declare abstract class BucketAdapter<Obj extends NesoiObj> {
|
|
11
|
+
protected schema: $Bucket;
|
|
12
|
+
protected nql: NQLRunner;
|
|
13
|
+
protected config: BucketAdapterConfig;
|
|
14
|
+
constructor(schema: $Bucket, nql: NQLRunner, config?: Partial<BucketAdapterConfig>);
|
|
15
|
+
/**
|
|
16
|
+
* **Dangerous!**
|
|
17
|
+
* This should only be used on inner adapters of bucket caches.
|
|
18
|
+
* Be extremely careful when implementing this on permanent storage adapters.
|
|
19
|
+
*/
|
|
20
|
+
protected abstract deleteEverything(trx: AnyTrxNode): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Return one entity by ID
|
|
23
|
+
*/
|
|
24
|
+
abstract get(trx: AnyTrxNode, id: Obj['id']): Promise<undefined | Obj>;
|
|
25
|
+
/**
|
|
26
|
+
* Return all entities
|
|
27
|
+
*/
|
|
28
|
+
abstract index(trx: AnyTrxNode): Promise<Obj[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Return the results of a query
|
|
31
|
+
*/
|
|
32
|
+
query<MetadataOnly extends boolean>(trx: AnyTrxNode, query: NQL_AnyQuery, pagination?: NQL_Pagination, config?: {
|
|
33
|
+
metadataOnly: MetadataOnly;
|
|
34
|
+
}): Promise<MetadataOnly extends true ? {
|
|
35
|
+
id: Obj['id'];
|
|
36
|
+
[x: string]: any;
|
|
37
|
+
}[] : Obj[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Create/update an entity and return it.
|
|
40
|
+
*
|
|
41
|
+
* - If the `obj` has an `id` property, it's a **replace**.
|
|
42
|
+
* - If not, it's a **create**.
|
|
43
|
+
*/
|
|
44
|
+
abstract put(trx: AnyTrxNode, obj: NewOrOldObj<Obj>): Promise<Obj>;
|
|
45
|
+
/**
|
|
46
|
+
* Create/update many entities and return them.
|
|
47
|
+
*
|
|
48
|
+
* For each `obj` of `objs`:
|
|
49
|
+
* - If the `obj` has an `id` property, it's a **replace**.
|
|
50
|
+
* - If not, it's a **create**.
|
|
51
|
+
*/
|
|
52
|
+
abstract putMany(trx: AnyTrxNode, objs: NewOrOldObj<Obj>[]): Promise<Obj[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Delete an entity by ID
|
|
55
|
+
*/
|
|
56
|
+
abstract delete(trx: AnyTrxNode, id: Obj['id']): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Delete many entities by their IDs
|
|
59
|
+
*/
|
|
60
|
+
abstract deleteMany(trx: AnyTrxNode, ids: Obj['id'][]): Promise<void>;
|
|
61
|
+
getUpdateEpoch(obj: Obj): number;
|
|
62
|
+
/**
|
|
63
|
+
* Given an id, sync that object only.
|
|
64
|
+
* - If the id doesn't exist on the source, return 'deleted'
|
|
65
|
+
* - If it does, check if it changed since lastObjUpdateEpoch
|
|
66
|
+
* - If yes, return the updated object
|
|
67
|
+
* - If not, return null
|
|
68
|
+
* @returns
|
|
69
|
+
* - null: Object hasn't changed
|
|
70
|
+
* - Obj: Object has changed
|
|
71
|
+
* - 'deleted': Object was deleted
|
|
72
|
+
*/
|
|
73
|
+
abstract syncOne(trx: AnyTrxNode, id: Obj['id'], lastObjUpdateEpoch: number): Promise<null | 'deleted' | BucketCacheSync<Obj>>;
|
|
74
|
+
/**
|
|
75
|
+
* Given an id, if the object was not deleted and has changed on source,
|
|
76
|
+
* sync the object and all objects of this bucket updated before it.
|
|
77
|
+
* @returns
|
|
78
|
+
* - null: Object hasn't changed
|
|
79
|
+
* - Obj[]: Object or past objects changed
|
|
80
|
+
* - 'deleted': Object was deleted
|
|
81
|
+
*/
|
|
82
|
+
abstract syncOneAndPast(trx: AnyTrxNode, id: Obj['id'], lastUpdateEpoch: number): Promise<null | 'deleted' | BucketCacheSync<Obj>[]>;
|
|
83
|
+
/**
|
|
84
|
+
* Resync the entire cache.
|
|
85
|
+
* - Hash the ids, check if it matches the incoming hash
|
|
86
|
+
* - If yes, read all data that changed since last time
|
|
87
|
+
* - If not, read all data and return a hard resync (previous data will be wiped)
|
|
88
|
+
@returns
|
|
89
|
+
* - null: Cache hasn't changed
|
|
90
|
+
* - { data: Obj[], hash: string, hard: true }: Cache has changed
|
|
91
|
+
*/
|
|
92
|
+
abstract syncAll(trx: AnyTrxNode, lastHash?: string, lastUpdateEpoch?: number): Promise<null | {
|
|
93
|
+
sync: BucketCacheSync<Obj>[];
|
|
94
|
+
hash: string;
|
|
95
|
+
updateEpoch: number;
|
|
96
|
+
reset: boolean;
|
|
97
|
+
}>;
|
|
98
|
+
/**
|
|
99
|
+
* Returns a scope string, used to optimize queries.
|
|
100
|
+
* Should be the same for adapters that can be queried together.
|
|
101
|
+
*/
|
|
102
|
+
abstract getQueryMeta(): {
|
|
103
|
+
scope: string;
|
|
104
|
+
avgTime: number;
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
export type AnyBucketAdapter = BucketAdapter<any>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BucketAdapter = void 0;
|
|
4
|
+
const trx_node_1 = require("../../../../engine/transaction/trx_node");
|
|
5
|
+
const error_1 = require("../../../../engine/data/error");
|
|
6
|
+
const datetime_1 = require("../../../../engine/data/datetime");
|
|
7
|
+
const nql_compiler_1 = require("../query/nql_compiler");
|
|
8
|
+
class BucketAdapter {
|
|
9
|
+
constructor(schema, nql, config) {
|
|
10
|
+
this.schema = schema;
|
|
11
|
+
this.nql = nql;
|
|
12
|
+
this.config = {
|
|
13
|
+
updatedAtField: config?.updatedAtField || 'updated_at'
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Return the results of a query
|
|
18
|
+
*/
|
|
19
|
+
async query(trx, query, pagination, config) {
|
|
20
|
+
const module = trx_node_1.TrxNode.getModule(trx);
|
|
21
|
+
const compiled = await nql_compiler_1.NQL_Compiler.build(module, this.schema.name, query);
|
|
22
|
+
const results = await module.nql.run(trx, compiled);
|
|
23
|
+
if (config?.metadataOnly) {
|
|
24
|
+
return results.map(obj => ({
|
|
25
|
+
id: obj.id,
|
|
26
|
+
[this.config.updatedAtField]: this.getUpdateEpoch(obj)
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
return results;
|
|
30
|
+
}
|
|
31
|
+
/* Cache Operations */
|
|
32
|
+
getUpdateEpoch(obj) {
|
|
33
|
+
const objUpdateStr = obj[this.config.updatedAtField];
|
|
34
|
+
if (!objUpdateStr) {
|
|
35
|
+
throw error_1.NesoiError.Bucket.NoUpdatedAtField({ bucket: 'TODO', id: obj.id, field: this.config.updatedAtField });
|
|
36
|
+
}
|
|
37
|
+
const objUpdate = datetime_1.NesoiDatetime.fromISO(objUpdateStr);
|
|
38
|
+
return objUpdate.epoch;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.BucketAdapter = BucketAdapter;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BucketAdapter, BucketAdapterConfig } from './bucket_adapter';
|
|
2
|
+
import { NesoiObj, NewOrOldObj } from "../../../../engine/data/obj";
|
|
3
|
+
import { AnyTrxNode } from "../../../../engine/transaction/trx_node";
|
|
4
|
+
import { $Bucket } from "../../..";
|
|
5
|
+
export declare class MemoryBucketAdapter<Obj extends NesoiObj> extends BucketAdapter<Obj> {
|
|
6
|
+
schema: $Bucket;
|
|
7
|
+
data: Record<Obj['id'], Obj>;
|
|
8
|
+
constructor(schema: $Bucket, data?: Record<Obj['id'], Obj>, config?: BucketAdapterConfig);
|
|
9
|
+
getQueryMeta(): {
|
|
10
|
+
scope: string;
|
|
11
|
+
avgTime: number;
|
|
12
|
+
};
|
|
13
|
+
protected deleteEverything(trx: AnyTrxNode): Promise<void>;
|
|
14
|
+
index(trx: AnyTrxNode): Promise<Obj[]>;
|
|
15
|
+
get(trx: AnyTrxNode, id: Obj['id']): Promise<Awaited<Record<Obj["id"], Obj>[Obj["id"]]>>;
|
|
16
|
+
put(trx: AnyTrxNode, obj: NewOrOldObj<Obj>): Promise<any>;
|
|
17
|
+
putMany(trx: AnyTrxNode, objs: NewOrOldObj<Obj>[]): Promise<any[]>;
|
|
18
|
+
delete(trx: AnyTrxNode, id: Obj['id']): Promise<void>;
|
|
19
|
+
deleteMany(trx: AnyTrxNode, ids: Obj['id'][]): Promise<void>;
|
|
20
|
+
syncOne(trx: AnyTrxNode, id: Obj['id'], lastObjUpdateEpoch: number): Promise<"deleted" | {
|
|
21
|
+
obj: Awaited<Record<Obj["id"], Obj>[Obj["id"]]>;
|
|
22
|
+
updateEpoch: number;
|
|
23
|
+
} | null>;
|
|
24
|
+
syncOneAndPast(trx: AnyTrxNode, id: Obj['id'], lastUpdateEpoch: number): Promise<"deleted" | {
|
|
25
|
+
obj: Obj;
|
|
26
|
+
updateEpoch: number;
|
|
27
|
+
}[] | null>;
|
|
28
|
+
syncAll(trx: AnyTrxNode, lastHash?: string, lastUpdateEpoch?: number): Promise<{
|
|
29
|
+
sync: {
|
|
30
|
+
obj: Obj;
|
|
31
|
+
updateEpoch: number;
|
|
32
|
+
}[];
|
|
33
|
+
hash: string;
|
|
34
|
+
updateEpoch: number;
|
|
35
|
+
reset: boolean;
|
|
36
|
+
} | null>;
|
|
37
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MemoryBucketAdapter = void 0;
|
|
4
|
+
const bucket_adapter_1 = require("./bucket_adapter");
|
|
5
|
+
const crypto_1 = require("crypto");
|
|
6
|
+
const memory_nql_1 = require("./memory.nql");
|
|
7
|
+
class MemoryBucketAdapter extends bucket_adapter_1.BucketAdapter {
|
|
8
|
+
constructor(schema, data = {}, config) {
|
|
9
|
+
const nql = new memory_nql_1.MemoryNQLRunner();
|
|
10
|
+
super(schema, nql, config);
|
|
11
|
+
this.schema = schema;
|
|
12
|
+
this.data = data;
|
|
13
|
+
nql.bind(this);
|
|
14
|
+
}
|
|
15
|
+
getQueryMeta() {
|
|
16
|
+
return {
|
|
17
|
+
scope: `memory.${this.schema.name}`,
|
|
18
|
+
avgTime: 10
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/* Dangerous, used on cache only */
|
|
22
|
+
deleteEverything(trx) {
|
|
23
|
+
this.data = {};
|
|
24
|
+
return Promise.resolve();
|
|
25
|
+
}
|
|
26
|
+
/* Read operations */
|
|
27
|
+
index(trx) {
|
|
28
|
+
const objs = Object.values(this.data);
|
|
29
|
+
return Promise.resolve(objs);
|
|
30
|
+
}
|
|
31
|
+
get(trx, id) {
|
|
32
|
+
return Promise.resolve(this.data[id]);
|
|
33
|
+
}
|
|
34
|
+
/* Write Operations */
|
|
35
|
+
async put(trx, obj) {
|
|
36
|
+
if (!obj.id) {
|
|
37
|
+
const lastId = (await this.index(trx))
|
|
38
|
+
.map((obj) => parseInt(obj.id))
|
|
39
|
+
.sort((a, b) => b - a)[0] || 0;
|
|
40
|
+
obj.id = lastId + 1;
|
|
41
|
+
}
|
|
42
|
+
this.data[obj.id] = obj;
|
|
43
|
+
return Promise.resolve(obj);
|
|
44
|
+
}
|
|
45
|
+
putMany(trx, objs) {
|
|
46
|
+
return Promise.all(objs.map(obj => this.put(trx, obj)));
|
|
47
|
+
}
|
|
48
|
+
delete(trx, id) {
|
|
49
|
+
delete this.data[id];
|
|
50
|
+
return Promise.resolve();
|
|
51
|
+
}
|
|
52
|
+
deleteMany(trx, ids) {
|
|
53
|
+
for (const id of ids) {
|
|
54
|
+
delete this.data[id];
|
|
55
|
+
}
|
|
56
|
+
return Promise.resolve();
|
|
57
|
+
}
|
|
58
|
+
/* Cache Operations */
|
|
59
|
+
async syncOne(trx, id, lastObjUpdateEpoch) {
|
|
60
|
+
// 1. Check if object was deleted
|
|
61
|
+
const obj = await this.get(trx, id);
|
|
62
|
+
if (!obj) {
|
|
63
|
+
return 'deleted';
|
|
64
|
+
}
|
|
65
|
+
// 2. Check if object was updated
|
|
66
|
+
const updateEpoch = this.getUpdateEpoch(obj);
|
|
67
|
+
const hasObjUpdated = updateEpoch > lastObjUpdateEpoch;
|
|
68
|
+
if (!hasObjUpdated) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
// 3. Return updated object and epoch
|
|
72
|
+
return {
|
|
73
|
+
obj,
|
|
74
|
+
updateEpoch
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
async syncOneAndPast(trx, id, lastUpdateEpoch) {
|
|
78
|
+
// 1. Check if object was deleted
|
|
79
|
+
const obj = await this.get(trx, id);
|
|
80
|
+
if (!obj) {
|
|
81
|
+
return 'deleted';
|
|
82
|
+
}
|
|
83
|
+
// 2. Check if object was updated
|
|
84
|
+
const objUpdateEpoch = this.getUpdateEpoch(obj);
|
|
85
|
+
const hasObjUpdated = objUpdateEpoch > lastUpdateEpoch;
|
|
86
|
+
if (!hasObjUpdated) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
// 3. Return all objects updated and the max epoch
|
|
90
|
+
let updateEpoch = 0;
|
|
91
|
+
const changed = Object.values(this.data)
|
|
92
|
+
.map(obj => {
|
|
93
|
+
const epoch = this.getUpdateEpoch(obj);
|
|
94
|
+
if (epoch > updateEpoch) {
|
|
95
|
+
updateEpoch = epoch;
|
|
96
|
+
}
|
|
97
|
+
return { obj, updateEpoch: epoch };
|
|
98
|
+
})
|
|
99
|
+
.filter(obj => obj.updateEpoch > lastUpdateEpoch);
|
|
100
|
+
if (!changed.length) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
return changed;
|
|
104
|
+
}
|
|
105
|
+
async syncAll(trx, lastHash, lastUpdateEpoch = 0) {
|
|
106
|
+
// 1. Hash the current ids
|
|
107
|
+
const idStr = Object.keys(this.data).sort().join('');
|
|
108
|
+
const hash = (0, crypto_1.createHash)('md5').update(idStr).digest('hex');
|
|
109
|
+
// 2. If hash changed, return a reset sync with all objects
|
|
110
|
+
if (hash !== lastHash) {
|
|
111
|
+
let updateEpoch = 0;
|
|
112
|
+
const sync = (await this.index(trx))
|
|
113
|
+
.map(obj => {
|
|
114
|
+
const epoch = this.getUpdateEpoch(obj);
|
|
115
|
+
if (epoch > updateEpoch) {
|
|
116
|
+
updateEpoch = epoch;
|
|
117
|
+
}
|
|
118
|
+
return { obj, updateEpoch: epoch };
|
|
119
|
+
});
|
|
120
|
+
return {
|
|
121
|
+
sync,
|
|
122
|
+
hash,
|
|
123
|
+
updateEpoch,
|
|
124
|
+
reset: true
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// 3. Find the data that changed and return it
|
|
128
|
+
let updateEpoch = 0;
|
|
129
|
+
const sync = Object.values(this.data)
|
|
130
|
+
.map(obj => {
|
|
131
|
+
const epoch = this.getUpdateEpoch(obj);
|
|
132
|
+
if (epoch > updateEpoch) {
|
|
133
|
+
updateEpoch = epoch;
|
|
134
|
+
}
|
|
135
|
+
return { obj, updateEpoch: epoch };
|
|
136
|
+
})
|
|
137
|
+
.filter(obj => obj.updateEpoch > lastUpdateEpoch);
|
|
138
|
+
if (!sync.length) {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
sync,
|
|
143
|
+
hash,
|
|
144
|
+
updateEpoch,
|
|
145
|
+
reset: false
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
exports.MemoryBucketAdapter = MemoryBucketAdapter;
|
|
File without changes
|