@quadnix/octo 0.0.30 → 0.1.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/LICENSE +661 -0
- package/README.md +25 -3
- package/dist/app.type.d.ts +143 -4
- package/dist/app.type.js +80 -9
- package/dist/app.type.js.map +1 -1
- package/dist/decorators/action.decorator.d.ts +10 -6
- package/dist/decorators/action.decorator.js +19 -6
- package/dist/decorators/action.decorator.js.map +1 -1
- package/dist/decorators/anchor.decorator.d.ts +12 -5
- package/dist/decorators/anchor.decorator.js +12 -5
- package/dist/decorators/anchor.decorator.js.map +1 -1
- package/dist/decorators/enable-hook.decorator.d.ts +1 -1
- package/dist/decorators/enable-hook.decorator.js +1 -1
- package/dist/decorators/factory.decorator.d.ts +18 -34
- package/dist/decorators/factory.decorator.js +18 -34
- package/dist/decorators/factory.decorator.js.map +1 -1
- package/dist/decorators/model.decorator.d.ts +1 -1
- package/dist/decorators/model.decorator.js +1 -1
- package/dist/decorators/module.decorator.d.ts +16 -10
- package/dist/decorators/module.decorator.js +16 -10
- package/dist/decorators/module.decorator.js.map +1 -1
- package/dist/decorators/on-event.decorator.d.ts +5 -0
- package/dist/decorators/on-event.decorator.js +5 -0
- package/dist/decorators/on-event.decorator.js.map +1 -1
- package/dist/decorators/validate.decorator.d.ts +15 -1
- package/dist/decorators/validate.decorator.js +15 -1
- package/dist/decorators/validate.decorator.js.map +1 -1
- package/dist/errors/container.error.d.ts +18 -0
- package/dist/errors/container.error.js +18 -0
- package/dist/errors/container.error.js.map +1 -1
- package/dist/errors/index.d.ts +1 -0
- package/dist/errors/index.js +1 -0
- package/dist/errors/index.js.map +1 -1
- package/dist/errors/module.error.d.ts +6 -0
- package/dist/errors/module.error.js +6 -0
- package/dist/errors/module.error.js.map +1 -1
- package/dist/errors/node.error.d.ts +56 -0
- package/dist/errors/node.error.js +56 -0
- package/dist/errors/node.error.js.map +1 -1
- package/dist/errors/schema.error.d.ts +6 -0
- package/dist/errors/schema.error.js +6 -0
- package/dist/errors/schema.error.js.map +1 -1
- package/dist/errors/terraform.error.d.ts +19 -0
- package/dist/errors/terraform.error.js +23 -0
- package/dist/errors/terraform.error.js.map +1 -0
- package/dist/errors/transaction.error.d.ts +61 -0
- package/dist/errors/transaction.error.js +61 -0
- package/dist/errors/transaction.error.js.map +1 -1
- package/dist/events/action.event.d.ts +0 -2
- package/dist/events/action.event.js +0 -2
- package/dist/events/action.event.js.map +1 -1
- package/dist/events/event.model.d.ts +21 -5
- package/dist/events/event.model.js +11 -5
- package/dist/events/event.model.js.map +1 -1
- package/dist/events/hook/commit.hook.event.d.ts +0 -6
- package/dist/events/hook/commit.hook.event.js +0 -6
- package/dist/events/hook/commit.hook.event.js.map +1 -1
- package/dist/events/hook/hook.event.d.ts +0 -2
- package/dist/events/hook/hook.event.js +0 -2
- package/dist/events/hook/hook.event.js.map +1 -1
- package/dist/events/hook/model.hook.event.d.ts +0 -6
- package/dist/events/hook/model.hook.event.js +0 -6
- package/dist/events/hook/model.hook.event.js.map +1 -1
- package/dist/events/hook/resource.hook.event.d.ts +0 -6
- package/dist/events/hook/resource.hook.event.js +0 -6
- package/dist/events/hook/resource.hook.event.js.map +1 -1
- package/dist/events/index.d.ts +3 -0
- package/dist/events/index.js +3 -0
- package/dist/events/index.js.map +1 -1
- package/dist/events/mode-result.event.d.ts +57 -0
- package/dist/events/mode-result.event.js +24 -0
- package/dist/events/mode-result.event.js.map +1 -0
- package/dist/events/mode.event.d.ts +57 -0
- package/dist/events/mode.event.js +32 -0
- package/dist/events/mode.event.js.map +1 -0
- package/dist/events/module.event.d.ts +0 -2
- package/dist/events/module.event.js +0 -2
- package/dist/events/module.event.js.map +1 -1
- package/dist/events/registration.event.d.ts +18 -14
- package/dist/events/registration.event.js +18 -14
- package/dist/events/registration.event.js.map +1 -1
- package/dist/events/serialization.event.d.ts +15 -12
- package/dist/events/serialization.event.js +15 -12
- package/dist/events/serialization.event.js.map +1 -1
- package/dist/events/terraform.event.d.ts +42 -0
- package/dist/events/terraform.event.js +31 -0
- package/dist/events/terraform.event.js.map +1 -0
- package/dist/events/transaction.event.d.ts +0 -37
- package/dist/events/transaction.event.js +0 -28
- package/dist/events/transaction.event.js.map +1 -1
- package/dist/functions/container/container.d.ts +54 -13
- package/dist/functions/container/container.js +63 -18
- package/dist/functions/container/container.js.map +1 -1
- package/dist/functions/container/test-container.d.ts +43 -29
- package/dist/functions/container/test-container.js +71 -43
- package/dist/functions/container/test-container.js.map +1 -1
- package/dist/functions/dependency/dependency.d.ts +82 -8
- package/dist/functions/dependency/dependency.js +80 -14
- package/dist/functions/dependency/dependency.js.map +1 -1
- package/dist/functions/diff/aggregate-resource-actions.d.ts +19 -0
- package/dist/functions/diff/aggregate-resource-actions.js +41 -0
- package/dist/functions/diff/aggregate-resource-actions.js.map +1 -0
- package/dist/functions/diff/diff-metadata.d.ts +21 -3
- package/dist/functions/diff/diff-metadata.js +18 -0
- package/dist/functions/diff/diff-metadata.js.map +1 -1
- package/dist/functions/diff/diff.d.ts +55 -1
- package/dist/functions/diff/diff.js +44 -3
- package/dist/functions/diff/diff.js.map +1 -1
- package/dist/functions/diff/diff.utility.d.ts +17 -2
- package/dist/functions/diff/diff.utility.js +53 -38
- package/dist/functions/diff/diff.utility.js.map +1 -1
- package/dist/functions/hook/commit.hook.d.ts +16 -1
- package/dist/functions/hook/commit.hook.js +21 -6
- package/dist/functions/hook/commit.hook.js.map +1 -1
- package/dist/functions/hook/model-action.hook.d.ts +16 -1
- package/dist/functions/hook/model-action.hook.js +21 -6
- package/dist/functions/hook/model-action.hook.js.map +1 -1
- package/dist/functions/hook/resource-action.hook.d.ts +16 -1
- package/dist/functions/hook/resource-action.hook.js +21 -6
- package/dist/functions/hook/resource-action.hook.js.map +1 -1
- package/dist/functions/node/node-action.abstract.d.ts +23 -0
- package/dist/functions/node/node-action.abstract.js +20 -0
- package/dist/functions/node/node-action.abstract.js.map +1 -1
- package/dist/functions/node/node.abstract.d.ts +56 -5
- package/dist/functions/node/node.abstract.js +85 -12
- package/dist/functions/node/node.abstract.js.map +1 -1
- package/dist/functions/node/node.interface.d.ts +1 -0
- package/dist/functions/schema/schema.d.ts +7 -0
- package/dist/functions/schema/schema.js +9 -0
- package/dist/functions/schema/schema.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +244 -14
- package/dist/main.js +361 -72
- package/dist/main.js.map +1 -1
- package/dist/models/account/account.model.d.ts +37 -7
- package/dist/models/account/account.model.js +40 -8
- package/dist/models/account/account.model.js.map +1 -1
- package/dist/models/account/account.schema.d.ts +13 -1
- package/dist/models/account/account.schema.js +12 -0
- package/dist/models/account/account.schema.js.map +1 -1
- package/dist/models/app/app.model.d.ts +16 -1
- package/dist/models/app/app.model.js +19 -4
- package/dist/models/app/app.model.js.map +1 -1
- package/dist/models/app/app.schema.d.ts +6 -0
- package/dist/models/app/app.schema.js +6 -0
- package/dist/models/app/app.schema.js.map +1 -1
- package/dist/models/deployment/deployment.model.d.ts +13 -1
- package/dist/models/deployment/deployment.model.js +16 -4
- package/dist/models/deployment/deployment.model.js.map +1 -1
- package/dist/models/deployment/deployment.schema.d.ts +2 -0
- package/dist/models/deployment/deployment.schema.js +2 -0
- package/dist/models/deployment/deployment.schema.js.map +1 -1
- package/dist/models/environment/environment.model.d.ts +13 -1
- package/dist/models/environment/environment.model.js +20 -8
- package/dist/models/environment/environment.model.js.map +1 -1
- package/dist/models/environment/environment.schema.d.ts +2 -0
- package/dist/models/environment/environment.schema.js +2 -0
- package/dist/models/environment/environment.schema.js.map +1 -1
- package/dist/models/execution/execution.model.d.ts +20 -2
- package/dist/models/execution/execution.model.js +46 -28
- package/dist/models/execution/execution.model.js.map +1 -1
- package/dist/models/execution/execution.schema.d.ts +11 -0
- package/dist/models/execution/execution.schema.js +11 -0
- package/dist/models/execution/execution.schema.js.map +1 -1
- package/dist/models/filesystem/filesystem.model.d.ts +27 -1
- package/dist/models/filesystem/filesystem.model.js +30 -4
- package/dist/models/filesystem/filesystem.model.js.map +1 -1
- package/dist/models/filesystem/filesystem.schema.d.ts +5 -0
- package/dist/models/filesystem/filesystem.schema.js +5 -0
- package/dist/models/filesystem/filesystem.schema.js.map +1 -1
- package/dist/models/image/image.model.d.ts +17 -4
- package/dist/models/image/image.model.js +20 -7
- package/dist/models/image/image.model.js.map +1 -1
- package/dist/models/image/image.schema.d.ts +8 -0
- package/dist/models/image/image.schema.js +8 -0
- package/dist/models/image/image.schema.js.map +1 -1
- package/dist/models/model-action.interface.d.ts +17 -4
- package/dist/models/model.abstract.d.ts +96 -1
- package/dist/models/model.abstract.js +106 -7
- package/dist/models/model.abstract.js.map +1 -1
- package/dist/models/model.interface.d.ts +3 -0
- package/dist/models/pipeline/pipeline.model.d.ts +13 -1
- package/dist/models/pipeline/pipeline.model.js +18 -6
- package/dist/models/pipeline/pipeline.model.js.map +1 -1
- package/dist/models/pipeline/pipeline.schema.d.ts +8 -0
- package/dist/models/pipeline/pipeline.schema.js +8 -0
- package/dist/models/pipeline/pipeline.schema.js.map +1 -1
- package/dist/models/region/region.model.d.ts +16 -1
- package/dist/models/region/region.model.js +19 -4
- package/dist/models/region/region.model.js.map +1 -1
- package/dist/models/region/region.schema.d.ts +6 -0
- package/dist/models/region/region.schema.js +6 -0
- package/dist/models/region/region.schema.js.map +1 -1
- package/dist/models/server/server.model.d.ts +13 -1
- package/dist/models/server/server.model.js +16 -4
- package/dist/models/server/server.model.js.map +1 -1
- package/dist/models/server/server.schema.d.ts +3 -1
- package/dist/models/server/server.schema.js +3 -1
- package/dist/models/server/server.schema.js.map +1 -1
- package/dist/models/service/service.model.d.ts +15 -1
- package/dist/models/service/service.model.js +15 -1
- package/dist/models/service/service.model.js.map +1 -1
- package/dist/models/service/service.schema.d.ts +4 -1
- package/dist/models/service/service.schema.js +4 -1
- package/dist/models/service/service.schema.js.map +1 -1
- package/dist/models/subnet/subnet.model.d.ts +27 -3
- package/dist/models/subnet/subnet.model.js +40 -16
- package/dist/models/subnet/subnet.model.js.map +1 -1
- package/dist/models/subnet/subnet.schema.d.ts +9 -0
- package/dist/models/subnet/subnet.schema.js +9 -0
- package/dist/models/subnet/subnet.schema.js.map +1 -1
- package/dist/modes/apply-transaction.d.ts +23 -0
- package/dist/modes/apply-transaction.js +25 -0
- package/dist/modes/apply-transaction.js.map +1 -0
- package/dist/modes/commit.mode.d.ts +54 -0
- package/dist/modes/commit.mode.js +235 -0
- package/dist/modes/commit.mode.js.map +1 -0
- package/dist/modes/generate.mode.d.ts +29 -0
- package/dist/modes/generate.mode.js +49 -0
- package/dist/modes/generate.mode.js.map +1 -0
- package/dist/modes/run-action.mode.d.ts +30 -0
- package/dist/modes/run-action.mode.js +140 -0
- package/dist/modes/run-action.mode.js.map +1 -0
- package/dist/modes/validate.mode.d.ts +162 -0
- package/dist/modes/validate.mode.js +480 -0
- package/dist/modes/validate.mode.js.map +1 -0
- package/dist/modules/module.abstract.d.ts +51 -0
- package/dist/modules/module.abstract.js +36 -0
- package/dist/modules/module.abstract.js.map +1 -1
- package/dist/modules/module.container.d.ts +36 -0
- package/dist/modules/module.container.js +36 -0
- package/dist/modules/module.container.js.map +1 -1
- package/dist/modules/test-module.container.d.ts +139 -25
- package/dist/modules/test-module.container.js +410 -178
- package/dist/modules/test-module.container.js.map +1 -1
- package/dist/overlays/anchor.abstract.d.ts +32 -1
- package/dist/overlays/anchor.abstract.js +42 -11
- package/dist/overlays/anchor.abstract.js.map +1 -1
- package/dist/overlays/anchor.schema.d.ts +21 -0
- package/dist/overlays/anchor.schema.js +21 -0
- package/dist/overlays/anchor.schema.js.map +1 -1
- package/dist/overlays/overlay-data.repository.d.ts +18 -0
- package/dist/overlays/overlay-data.repository.js +18 -0
- package/dist/overlays/overlay-data.repository.js.map +1 -1
- package/dist/overlays/overlay.abstract.d.ts +56 -1
- package/dist/overlays/overlay.abstract.js +79 -20
- package/dist/overlays/overlay.abstract.js.map +1 -1
- package/dist/overlays/overlay.schema.d.ts +20 -0
- package/dist/overlays/overlay.schema.js +20 -0
- package/dist/overlays/overlay.schema.js.map +1 -1
- package/dist/resources/resource-action.interface.d.ts +26 -2
- package/dist/resources/resource-data.repository.d.ts +63 -1
- package/dist/resources/resource-data.repository.js +94 -4
- package/dist/resources/resource-data.repository.js.map +1 -1
- package/dist/resources/resource.abstract.d.ts +118 -3
- package/dist/resources/resource.abstract.js +166 -33
- package/dist/resources/resource.abstract.js.map +1 -1
- package/dist/resources/resource.schema.d.ts +29 -1
- package/dist/resources/resource.schema.js +28 -0
- package/dist/resources/resource.schema.js.map +1 -1
- package/dist/resources/terraform-resource.abstract.d.ts +44 -0
- package/dist/resources/terraform-resource.abstract.js +45 -0
- package/dist/resources/terraform-resource.abstract.js.map +1 -0
- package/dist/services/event/event.service.d.ts +30 -3
- package/dist/services/event/event.service.js +58 -16
- package/dist/services/event/event.service.js.map +1 -1
- package/dist/services/input/input.service.d.ts +52 -3
- package/dist/services/input/input.service.js +72 -8
- package/dist/services/input/input.service.js.map +1 -1
- package/dist/services/schema-translation/schema-translation.service.d.ts +9 -0
- package/dist/services/schema-translation/schema-translation.service.js +9 -0
- package/dist/services/schema-translation/schema-translation.service.js.map +1 -1
- package/dist/services/serialization/model/model-serialization.service.d.ts +26 -2
- package/dist/services/serialization/model/model-serialization.service.js +110 -62
- package/dist/services/serialization/model/model-serialization.service.js.map +1 -1
- package/dist/services/serialization/resource/resource-serialization.service.d.ts +33 -4
- package/dist/services/serialization/resource/resource-serialization.service.js +64 -28
- package/dist/services/serialization/resource/resource-serialization.service.js.map +1 -1
- package/dist/services/state-management/file-app-lock.utility.d.ts +43 -0
- package/dist/services/state-management/file-app-lock.utility.js +124 -0
- package/dist/services/state-management/file-app-lock.utility.js.map +1 -0
- package/dist/services/state-management/local-encryption.state-provider.d.ts +53 -2
- package/dist/services/state-management/local-encryption.state-provider.js +75 -49
- package/dist/services/state-management/local-encryption.state-provider.js.map +1 -1
- package/dist/services/state-management/local.state-provider.d.ts +49 -2
- package/dist/services/state-management/local.state-provider.js +70 -49
- package/dist/services/state-management/local.state-provider.js.map +1 -1
- package/dist/services/state-management/state-management.service.d.ts +141 -6
- package/dist/services/state-management/state-management.service.js +149 -4
- package/dist/services/state-management/state-management.service.js.map +1 -1
- package/dist/services/state-management/state-provider.interface.d.ts +55 -1
- package/dist/services/state-management/terraform-state.service.d.ts +76 -0
- package/dist/services/state-management/terraform-state.service.js +154 -0
- package/dist/services/state-management/terraform-state.service.js.map +1 -0
- package/dist/services/state-management/test.state-provider.d.ts +38 -1
- package/dist/services/state-management/test.state-provider.js +52 -21
- package/dist/services/state-management/test.state-provider.js.map +1 -1
- package/dist/services/terraform/terraform.service.d.ts +426 -0
- package/dist/services/terraform/terraform.service.js +995 -0
- package/dist/services/terraform/terraform.service.js.map +1 -0
- package/dist/services/terraform/terraform.type.d.ts +387 -0
- package/dist/services/terraform/terraform.type.js +579 -0
- package/dist/services/terraform/terraform.type.js.map +1 -0
- package/dist/services/transaction/transaction.service.d.ts +86 -10
- package/dist/services/transaction/transaction.service.js +387 -232
- package/dist/services/transaction/transaction.service.js.map +1 -1
- package/dist/services/validation/validation.service.d.ts +13 -1
- package/dist/services/validation/validation.service.js +12 -0
- package/dist/services/validation/validation.service.js.map +1 -1
- package/dist/utilities/array/array.utility.d.ts +3 -0
- package/dist/utilities/array/array.utility.js +3 -0
- package/dist/utilities/array/array.utility.js.map +1 -1
- package/dist/utilities/file/file.utility.d.ts +15 -0
- package/dist/utilities/file/file.utility.js +18 -1
- package/dist/utilities/file/file.utility.js.map +1 -1
- package/dist/utilities/hcl/hcl.utility.d.ts +61 -0
- package/dist/utilities/hcl/hcl.utility.js +229 -0
- package/dist/utilities/hcl/hcl.utility.js.map +1 -0
- package/dist/utilities/node/node.utility.d.ts +3 -0
- package/dist/utilities/node/node.utility.js +3 -0
- package/dist/utilities/node/node.utility.js.map +1 -1
- package/dist/utilities/object/object.utility.d.ts +12 -0
- package/dist/utilities/object/object.utility.js +12 -0
- package/dist/utilities/object/object.utility.js.map +1 -1
- package/dist/utilities/project/project.utility.d.ts +28 -0
- package/dist/utilities/project/project.utility.js +35 -0
- package/dist/utilities/project/project.utility.js.map +1 -0
- package/dist/utilities/string/string.utility.d.ts +21 -0
- package/dist/utilities/string/string.utility.js +39 -0
- package/dist/utilities/string/string.utility.js.map +1 -0
- package/dist/utilities/terraform/terraform.utility.d.ts +227 -0
- package/dist/utilities/terraform/terraform.utility.js +434 -0
- package/dist/utilities/terraform/terraform.utility.js.map +1 -0
- package/dist/utilities/test-helpers/test-classes.d.ts +18 -31
- package/dist/utilities/test-helpers/test-classes.js +18 -41
- package/dist/utilities/test-helpers/test-classes.js.map +1 -1
- package/dist/utilities/test-helpers/test-models.js +12 -0
- package/dist/utilities/test-helpers/test-models.js.map +1 -1
- package/dist/utilities/test-helpers/test-modes.d.ts +315 -0
- package/dist/utilities/test-helpers/test-modes.js +463 -0
- package/dist/utilities/test-helpers/test-modes.js.map +1 -0
- package/dist/utilities/test-helpers/test-modules.d.ts +41 -0
- package/dist/utilities/test-helpers/test-modules.js +79 -0
- package/dist/utilities/test-helpers/test-modules.js.map +1 -0
- package/dist/utilities/test-helpers/test-overlays.d.ts +17 -1
- package/dist/utilities/test-helpers/test-overlays.js +49 -5
- package/dist/utilities/test-helpers/test-overlays.js.map +1 -1
- package/dist/utilities/test-helpers/test-resources.d.ts +19 -1
- package/dist/utilities/test-helpers/test-resources.js +61 -3
- package/dist/utilities/test-helpers/test-resources.js.map +1 -1
- package/dist/utilities/validation/validation.utility.d.ts +24 -0
- package/dist/utilities/validation/validation.utility.js +24 -0
- package/dist/utilities/validation/validation.utility.js.map +1 -1
- package/package.json +6 -5
- package/dist/services/capture/capture.service.d.ts +0 -19
- package/dist/services/capture/capture.service.js +0 -43
- package/dist/services/capture/capture.service.js.map +0 -1
- package/dist/utilities/cidr/cidr.utility.d.ts +0 -10
- package/dist/utilities/cidr/cidr.utility.js +0 -51
- package/dist/utilities/cidr/cidr.utility.js.map +0 -1
|
@@ -4,14 +4,57 @@ import type { ModelActionHook } from '../functions/hook/model-action.hook.js';
|
|
|
4
4
|
import type { ResourceActionHook } from '../functions/hook/resource-action.hook.js';
|
|
5
5
|
import type { IModule } from './module.interface.js';
|
|
6
6
|
/**
|
|
7
|
+
* The base class of every module - the unit you actually assemble infrastructure from.
|
|
8
|
+
*
|
|
9
|
+
* A module takes typed inputs, and produces models, overlays, and anchors. It is the reusable piece:
|
|
10
|
+
* you publish one, someone else loads it with {@link Octo.loadModule} and their own inputs, and the
|
|
11
|
+
* models it built become available to the modules that run after it.
|
|
12
|
+
*
|
|
13
|
+
* Everything a module needs from another module it finds by schema - see
|
|
14
|
+
* {@link AModel.getAnchorsMatchingSchema} - so modules compose without importing each other's classes.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* @Module<MyModule>('@example', MyModuleSchema)
|
|
19
|
+
* export class MyModule extends AModule<MyModuleSchema, MyRegion> {
|
|
20
|
+
* async onInit(inputs: MyModuleSchema): Promise<MyRegion> { ... }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
7
24
|
* @group Modules
|
|
25
|
+
*
|
|
26
|
+
* @see Definition of [Modules](/docs/fundamentals/modules).
|
|
8
27
|
*/
|
|
9
28
|
export declare abstract class AModule<S, T extends UnknownModel> implements IModule<S, T> {
|
|
10
29
|
static readonly MODULE_PACKAGE: string;
|
|
11
30
|
static readonly MODULE_SCHEMA: ModuleSchema<AModule<any, any>>;
|
|
31
|
+
/**
|
|
32
|
+
* The ID this module was loaded under. It scopes everything the module produces, so the same
|
|
33
|
+
* module class can be loaded more than once.
|
|
34
|
+
*/
|
|
12
35
|
readonly moduleId: string;
|
|
36
|
+
/**
|
|
37
|
+
* @param moduleId The ID this module is loaded under.
|
|
38
|
+
*/
|
|
13
39
|
constructor(moduleId: string);
|
|
40
|
+
/**
|
|
41
|
+
* Builds this module's infrastructure. It is where you construct models, attach anchors,
|
|
42
|
+
* and create overlays.
|
|
43
|
+
*
|
|
44
|
+
* Validate inputs here and throw a [ModuleError](/api/octo/class/ModuleError) on anything you
|
|
45
|
+
* cannot satisfy - failing in `onInit` costs nothing, while failing later costs a half-built stack.
|
|
46
|
+
*
|
|
47
|
+
* @param inputs The inputs this module was loaded with, already validated against its schema.
|
|
48
|
+
* @returns The nodes this module produced. Return them all, including overlays - they are what
|
|
49
|
+
* later modules resolve against.
|
|
50
|
+
*/
|
|
14
51
|
abstract onInit(inputs: S): Promise<T | UnknownModel[]>;
|
|
52
|
+
/**
|
|
53
|
+
* To hook custom behavior into Octo's lifecycle for the duration of this module.
|
|
54
|
+
* Override it to return the callbacks you want run.
|
|
55
|
+
*
|
|
56
|
+
* @see Techniques for [Hooks](/docs/techniques/hooks).
|
|
57
|
+
*/
|
|
15
58
|
registerHooks(): {
|
|
16
59
|
postCommitHooks?: Parameters<CommitHook['collectHooks']>[0]['postHooks'];
|
|
17
60
|
postModelActionHooks?: Parameters<ModelActionHook['collectHooks']>[0]['postHooks'];
|
|
@@ -20,5 +63,13 @@ export declare abstract class AModule<S, T extends UnknownModel> implements IMod
|
|
|
20
63
|
preModelActionHooks?: Parameters<ModelActionHook['collectHooks']>[0]['preHooks'];
|
|
21
64
|
preResourceActionHooks?: Parameters<ResourceActionHook['collectHooks']>[0]['preHooks'];
|
|
22
65
|
};
|
|
66
|
+
/**
|
|
67
|
+
* To derive values that both {@link AModule.onInit} and this module's actions need - typically
|
|
68
|
+
* facts resolved from another module's anchors, such as an account ID or a region's availability
|
|
69
|
+
* zones. Override it, and the returned object is handed to every action of this module as
|
|
70
|
+
* `actionInputs.metadata`.
|
|
71
|
+
*
|
|
72
|
+
* @param inputs The inputs this module was loaded with.
|
|
73
|
+
*/
|
|
23
74
|
registerMetadata(inputs: S): Promise<Record<string, unknown>>;
|
|
24
75
|
}
|
|
@@ -1,14 +1,50 @@
|
|
|
1
1
|
import { strict as assert } from 'assert';
|
|
2
2
|
/**
|
|
3
|
+
* The base class of every module - the unit you actually assemble infrastructure from.
|
|
4
|
+
*
|
|
5
|
+
* A module takes typed inputs, and produces models, overlays, and anchors. It is the reusable piece:
|
|
6
|
+
* you publish one, someone else loads it with {@link Octo.loadModule} and their own inputs, and the
|
|
7
|
+
* models it built become available to the modules that run after it.
|
|
8
|
+
*
|
|
9
|
+
* Everything a module needs from another module it finds by schema - see
|
|
10
|
+
* {@link AModel.getAnchorsMatchingSchema} - so modules compose without importing each other's classes.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* @Module<MyModule>('@example', MyModuleSchema)
|
|
15
|
+
* export class MyModule extends AModule<MyModuleSchema, MyRegion> {
|
|
16
|
+
* async onInit(inputs: MyModuleSchema): Promise<MyRegion> { ... }
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
3
20
|
* @group Modules
|
|
21
|
+
*
|
|
22
|
+
* @see Definition of [Modules](/docs/fundamentals/modules).
|
|
4
23
|
*/
|
|
5
24
|
export class AModule {
|
|
25
|
+
/**
|
|
26
|
+
* @param moduleId The ID this module is loaded under.
|
|
27
|
+
*/
|
|
6
28
|
constructor(moduleId) {
|
|
7
29
|
this.moduleId = moduleId;
|
|
8
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* To hook custom behavior into Octo's lifecycle for the duration of this module.
|
|
33
|
+
* Override it to return the callbacks you want run.
|
|
34
|
+
*
|
|
35
|
+
* @see Techniques for [Hooks](/docs/techniques/hooks).
|
|
36
|
+
*/
|
|
9
37
|
registerHooks() {
|
|
10
38
|
return {};
|
|
11
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* To derive values that both {@link AModule.onInit} and this module's actions need - typically
|
|
42
|
+
* facts resolved from another module's anchors, such as an account ID or a region's availability
|
|
43
|
+
* zones. Override it, and the returned object is handed to every action of this module as
|
|
44
|
+
* `actionInputs.metadata`.
|
|
45
|
+
*
|
|
46
|
+
* @param inputs The inputs this module was loaded with.
|
|
47
|
+
*/
|
|
12
48
|
async registerMetadata(inputs) {
|
|
13
49
|
assert(!!inputs);
|
|
14
50
|
return {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.abstract.js","sourceRoot":"","sources":["../../src/modules/module.abstract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;AAO1C
|
|
1
|
+
{"version":3,"file":"module.abstract.js","sourceRoot":"","sources":["../../src/modules/module.abstract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;AAO1C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAgB,OAAO;IAW3B;;OAEG;IACH,YAAY,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAeD;;;;;OAKG;IACH,aAAa;QAQX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,gBAAgB,CAAC,MAAS;QAC9B,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
|
|
@@ -16,16 +16,43 @@ export declare class ModuleContainer {
|
|
|
16
16
|
private readonly inputService;
|
|
17
17
|
private readonly overlayDataRepository;
|
|
18
18
|
private modules;
|
|
19
|
+
/**
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
19
22
|
constructor(eventService: EventService, inputService: InputService, overlayDataRepository: OverlayDataRepository);
|
|
23
|
+
/**
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
20
26
|
apply(): Promise<{
|
|
21
27
|
[key: string]: unknown;
|
|
22
28
|
}>;
|
|
29
|
+
/**
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
23
32
|
getMetadata(module: Constructable<UnknownModule> | string): ModuleContainer['modules'][0] | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
24
36
|
getMetadataIndex(module: Constructable<UnknownModule> | string): number;
|
|
37
|
+
/**
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
25
40
|
getModuleInstanceInputKeys(moduleId: string): string[];
|
|
41
|
+
/**
|
|
42
|
+
* @internal
|
|
43
|
+
*/
|
|
26
44
|
load<M extends UnknownModule>(module: Constructable<M> | string, moduleId: string, inputs: ModuleSchemaInputs<M>): void;
|
|
45
|
+
/**
|
|
46
|
+
* @internal
|
|
47
|
+
*/
|
|
27
48
|
order(modules: (Constructable<UnknownModule> | string)[]): void;
|
|
49
|
+
/**
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
28
52
|
register(module: Constructable<UnknownModule>, properties: ModuleOptions): void;
|
|
53
|
+
/**
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
29
56
|
registerHooks({ postCommitHooks, postModelActionHooks, postResourceActionHooks, preCommitHooks, preModelActionHooks, preResourceActionHooks, }?: {
|
|
30
57
|
postCommitHooks?: Parameters<CommitHook['collectHooks']>[0]['postHooks'];
|
|
31
58
|
postModelActionHooks?: Parameters<ModelActionHook['collectHooks']>[0]['postHooks'];
|
|
@@ -34,7 +61,13 @@ export declare class ModuleContainer {
|
|
|
34
61
|
preModelActionHooks?: Parameters<ModelActionHook['collectHooks']>[0]['preHooks'];
|
|
35
62
|
preResourceActionHooks?: Parameters<ResourceActionHook['collectHooks']>[0]['preHooks'];
|
|
36
63
|
}): void;
|
|
64
|
+
/**
|
|
65
|
+
* @internal
|
|
66
|
+
*/
|
|
37
67
|
reset(): void;
|
|
68
|
+
/**
|
|
69
|
+
* @internal
|
|
70
|
+
*/
|
|
38
71
|
unload(module: Constructable<UnknownModule>): void;
|
|
39
72
|
}
|
|
40
73
|
/**
|
|
@@ -42,6 +75,9 @@ export declare class ModuleContainer {
|
|
|
42
75
|
*/
|
|
43
76
|
export declare class ModuleContainerFactory {
|
|
44
77
|
private static instance;
|
|
78
|
+
/**
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
45
81
|
static create(forceNew?: boolean): Promise<ModuleContainer>;
|
|
46
82
|
}
|
|
47
83
|
export {};
|
|
@@ -20,12 +20,18 @@ import { InputService } from '../services/input/input.service.js';
|
|
|
20
20
|
* @internal
|
|
21
21
|
*/
|
|
22
22
|
export class ModuleContainer {
|
|
23
|
+
/**
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
23
26
|
constructor(eventService, inputService, overlayDataRepository) {
|
|
24
27
|
this.eventService = eventService;
|
|
25
28
|
this.inputService = inputService;
|
|
26
29
|
this.overlayDataRepository = overlayDataRepository;
|
|
27
30
|
this.modules = [];
|
|
28
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* @internal
|
|
34
|
+
*/
|
|
29
35
|
async apply() {
|
|
30
36
|
const result = {};
|
|
31
37
|
for (const moduleMetadata of this.modules) {
|
|
@@ -95,14 +101,23 @@ export class ModuleContainer {
|
|
|
95
101
|
}
|
|
96
102
|
return result;
|
|
97
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* @internal
|
|
106
|
+
*/
|
|
98
107
|
getMetadata(module) {
|
|
99
108
|
const index = this.getMetadataIndex(module);
|
|
100
109
|
return index === -1 ? undefined : this.modules[index];
|
|
101
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* @internal
|
|
113
|
+
*/
|
|
102
114
|
getMetadataIndex(module) {
|
|
103
115
|
const moduleName = typeof module === 'string' ? module : `${module.MODULE_PACKAGE}/${module.name}`;
|
|
104
116
|
return this.modules.findIndex((m) => `${m.properties.packageName}/${m.module.name}` === moduleName);
|
|
105
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* @internal
|
|
120
|
+
*/
|
|
106
121
|
getModuleInstanceInputKeys(moduleId) {
|
|
107
122
|
const moduleIndex = this.modules.findIndex((m) => m.instances.findIndex((i) => i.moduleId === moduleId) !== -1);
|
|
108
123
|
if (moduleIndex === -1) {
|
|
@@ -110,6 +125,9 @@ export class ModuleContainer {
|
|
|
110
125
|
}
|
|
111
126
|
return this.modules[moduleIndex].instances.find((i) => i.moduleId === moduleId).inputKeys;
|
|
112
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* @internal
|
|
130
|
+
*/
|
|
113
131
|
load(module, moduleId, inputs) {
|
|
114
132
|
const moduleName = typeof module === 'string' ? module : `${module.MODULE_PACKAGE}/${module.name}`;
|
|
115
133
|
const m = this.getMetadata(module);
|
|
@@ -129,6 +147,9 @@ export class ModuleContainer {
|
|
|
129
147
|
this.inputService.registerInput(moduleId, key, JSON.parse(JSON.stringify(value)));
|
|
130
148
|
}
|
|
131
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* @internal
|
|
152
|
+
*/
|
|
132
153
|
order(modules) {
|
|
133
154
|
this.modules.sort((a, b) => {
|
|
134
155
|
const aIndex = modules.findIndex((m) => {
|
|
@@ -142,12 +163,18 @@ export class ModuleContainer {
|
|
|
142
163
|
return aIndex - bIndex;
|
|
143
164
|
});
|
|
144
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* @internal
|
|
168
|
+
*/
|
|
145
169
|
register(module, properties) {
|
|
146
170
|
const moduleName = `${module.MODULE_PACKAGE}/${module.name}`;
|
|
147
171
|
if (!this.modules.some((m) => `${m.properties.packageName}/${m.module.name}` === moduleName)) {
|
|
148
172
|
this.modules.push({ hidden: true, instances: [], module, properties });
|
|
149
173
|
}
|
|
150
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* @internal
|
|
177
|
+
*/
|
|
151
178
|
registerHooks({ postCommitHooks, postModelActionHooks, postResourceActionHooks, preCommitHooks, preModelActionHooks, preResourceActionHooks, } = {}) {
|
|
152
179
|
CommitHook.getInstance().collectHooks({ postHooks: postCommitHooks, preHooks: preCommitHooks });
|
|
153
180
|
ModelActionHook.getInstance().collectHooks({
|
|
@@ -159,12 +186,18 @@ export class ModuleContainer {
|
|
|
159
186
|
preHooks: preResourceActionHooks,
|
|
160
187
|
});
|
|
161
188
|
}
|
|
189
|
+
/**
|
|
190
|
+
* @internal
|
|
191
|
+
*/
|
|
162
192
|
reset() {
|
|
163
193
|
for (const m of this.modules) {
|
|
164
194
|
m.hidden = true;
|
|
165
195
|
m.instances = [];
|
|
166
196
|
}
|
|
167
197
|
}
|
|
198
|
+
/**
|
|
199
|
+
* @internal
|
|
200
|
+
*/
|
|
168
201
|
unload(module) {
|
|
169
202
|
const m = this.getMetadata(module);
|
|
170
203
|
if (m) {
|
|
@@ -176,6 +209,9 @@ export class ModuleContainer {
|
|
|
176
209
|
* @internal
|
|
177
210
|
*/
|
|
178
211
|
let ModuleContainerFactory = class ModuleContainerFactory {
|
|
212
|
+
/**
|
|
213
|
+
* @internal
|
|
214
|
+
*/
|
|
179
215
|
static async create(forceNew = false) {
|
|
180
216
|
const [eventService, inputService, overlayDataRepository] = await Promise.all([
|
|
181
217
|
Container.getInstance().get(EventService),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.container.js","sourceRoot":"","sources":["../../src/modules/module.container.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAOlE;;GAEG;AACH,MAAM,OAAO,eAAe;IAQ1B,YACmB,YAA0B,EAC1B,YAA0B,EAC1B,qBAA4C;QAF5C,iBAAY,GAAZ,YAAY,CAAc;QAC1B,iBAAY,GAAZ,YAAY,CAAc;QAC1B,0BAAqB,GAArB,qBAAqB,CAAuB;
|
|
1
|
+
{"version":3,"file":"module.container.js","sourceRoot":"","sources":["../../src/modules/module.container.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { Constructable,
|
|
1
|
+
import type { Constructable, ModuleSchemaInputs, UnknownAnchor, UnknownModel, UnknownModule } from '../app.type.js';
|
|
2
|
+
import { type Container } from '../functions/container/container.js';
|
|
2
3
|
import type { DiffMetadata } from '../functions/diff/diff-metadata.js';
|
|
3
4
|
import { Octo } from '../main.js';
|
|
4
|
-
import type {
|
|
5
|
+
import type { ValidateReport } from '../modes/validate.mode.js';
|
|
5
6
|
import type { BaseAnchorSchema } from '../overlays/anchor.schema.js';
|
|
6
7
|
import type { BaseResourceSchema } from '../resources/resource.schema.js';
|
|
7
8
|
import type { IStateProvider } from '../services/state-management/state-provider.interface.js';
|
|
@@ -9,6 +10,11 @@ import { create } from '../utilities/test-helpers/test-models.js';
|
|
|
9
10
|
import { createTestOverlays } from '../utilities/test-helpers/test-overlays.js';
|
|
10
11
|
import { createResources, createTestResources } from '../utilities/test-helpers/test-resources.js';
|
|
11
12
|
/**
|
|
13
|
+
* One module to load into a {@link TestModuleContainer} run.
|
|
14
|
+
*
|
|
15
|
+
* Set `hidden` to register the module without running it - use it for a module a test needs
|
|
16
|
+
* present but not applied, e.g. one that is only there to be found by a schema lookup.
|
|
17
|
+
*
|
|
12
18
|
* @group Modules
|
|
13
19
|
*/
|
|
14
20
|
export type TestModule<M extends UnknownModule> = {
|
|
@@ -18,39 +24,147 @@ export type TestModule<M extends UnknownModule> = {
|
|
|
18
24
|
type: Constructable<M>;
|
|
19
25
|
};
|
|
20
26
|
/**
|
|
27
|
+
* The harness for testing a module.
|
|
28
|
+
*
|
|
29
|
+
* It runs your module through the real Octo lifecycle against an in-memory state provider, and hands
|
|
30
|
+
* back everything a test needs to assert on: the model and resource transactions, the generated HCL,
|
|
31
|
+
* and the resource responses. Create it inside a {@link TestContainer} so each test file is isolated.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* const container = await TestContainer.create({ mocks: [] }, { factoryTimeoutInMs: 500 });
|
|
36
|
+
* const testModuleContainer = new TestModuleContainer(container);
|
|
37
|
+
* await testModuleContainer.initialize();
|
|
38
|
+
*
|
|
39
|
+
* const generator = testModuleContainer.runModules([
|
|
40
|
+
* { inputs: { name: 'test-app' }, moduleId: 'app', type: SimpleAppModule },
|
|
41
|
+
* ]);
|
|
42
|
+
* const { modelTransaction } = (await generator.next()).value;
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
21
45
|
* @group Modules
|
|
22
46
|
*/
|
|
23
47
|
export declare class TestModuleContainer {
|
|
24
|
-
readonly
|
|
48
|
+
private readonly container;
|
|
49
|
+
private readonly octo;
|
|
50
|
+
private previousHcl;
|
|
25
51
|
private stateProvider;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
52
|
+
/**
|
|
53
|
+
* @param container The {@link TestContainer} this run resolves its services from.
|
|
54
|
+
*/
|
|
55
|
+
constructor(container: Container);
|
|
56
|
+
/**
|
|
57
|
+
* To seed resources that already exist, as though the given module had produced them.
|
|
58
|
+
* Use it to stand up the prerequisites a module under test expects to find.
|
|
59
|
+
*/
|
|
60
|
+
createResources(moduleId: string, args: Parameters<typeof createResources>[0], options?: Parameters<typeof createResources>[1]): Promise<ReturnType<typeof createResources>>;
|
|
61
|
+
/**
|
|
62
|
+
* To build a throwaway anchor for a test double, without declaring an anchor class.
|
|
63
|
+
*/
|
|
38
64
|
createTestAnchor<S extends BaseAnchorSchema & {
|
|
39
65
|
parentInstance: UnknownModel;
|
|
40
66
|
}>(anchorId: string, properties: S['properties'], parent: S['parentInstance']): UnknownAnchor;
|
|
67
|
+
/**
|
|
68
|
+
* To seed models, as though the given module had produced them.
|
|
69
|
+
* Each model gets a no-op action, so the models appear in a transaction without doing any work.
|
|
70
|
+
*/
|
|
41
71
|
createTestModels(moduleId: string, args: Parameters<typeof create>[0]): Promise<ReturnType<typeof create>>;
|
|
72
|
+
/**
|
|
73
|
+
* To seed overlays, as though the given module had produced them.
|
|
74
|
+
* An overlay given no actions gets a no-op one.
|
|
75
|
+
*/
|
|
42
76
|
createTestOverlays(moduleId: string, args: Parameters<typeof createTestOverlays>[0]): Promise<ReturnType<typeof createTestOverlays>>;
|
|
43
|
-
|
|
77
|
+
/**
|
|
78
|
+
* To seed resources, as though the given module had produced them.
|
|
79
|
+
* A resource given no actions gets a no-op one, unless terraform owns it.
|
|
80
|
+
*/
|
|
44
81
|
createTestResources<S extends BaseResourceSchema[]>(moduleId: string, args: Parameters<typeof createTestResources<S>>[0], options?: Parameters<typeof createTestResources>[1]): Promise<ReturnType<typeof createTestResources<S>>>;
|
|
45
|
-
|
|
82
|
+
/**
|
|
83
|
+
* Reduces a transaction's diffs, model or resource, to a stable digest you can snapshot:
|
|
84
|
+
* `+ <context>` (create), `- <context>` (delete), `^ <context>` (replace), `* <context>` (update).
|
|
85
|
+
*
|
|
86
|
+
* A diff is classified exactly as {@link Octo.validate} aggregates it, so a digest and a validate
|
|
87
|
+
* report of the same transaction never disagree. Only an add/delete of a `resourceId` creates or
|
|
88
|
+
* destroys a resource; an add/delete on any other field changes a resource that stays -
|
|
89
|
+
* re-pointing a `parent`, most commonly - and reads as an update.
|
|
90
|
+
*
|
|
91
|
+
* The digest has one entry per diff, not per resource, so a resource may appear more than once.
|
|
92
|
+
*/
|
|
93
|
+
digestDiffs(diffs: DiffMetadata[][]): string[];
|
|
94
|
+
/**
|
|
95
|
+
* Boots Octo for the test. Call it once, before running any module.
|
|
96
|
+
*
|
|
97
|
+
* @param stateProvider Defaults to an in-memory {@link TestStateProvider}. Only the local and test
|
|
98
|
+
* providers are accepted - a test must never write to shared state.
|
|
99
|
+
* @param initializeInContainer Factories to resolve at boot. See {@link Octo.initialize}.
|
|
100
|
+
* @param excludeInContainer Factories to unregister at boot. See {@link Octo.initialize}.
|
|
101
|
+
*/
|
|
46
102
|
initialize(stateProvider?: IStateProvider, initializeInContainer?: Parameters<typeof Octo.prototype.initialize>[1], excludeInContainer?: Parameters<typeof Octo.prototype.initialize>[2]): Promise<void>;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
103
|
+
/**
|
|
104
|
+
* Whether the committed resource state matches the previous one, i.e. whether the last run
|
|
105
|
+
* settled without leaving a pending change.
|
|
106
|
+
*/
|
|
107
|
+
isResourceStateEqual(): Promise<boolean>;
|
|
108
|
+
/**
|
|
109
|
+
* Reduces a transaction to the names of the actions it ran, in order. Snapshot it to assert that
|
|
110
|
+
* a change triggered the actions you expected.
|
|
111
|
+
*/
|
|
112
|
+
mapTransactionActions(transaction: DiffMetadata[][]): string[][];
|
|
113
|
+
/**
|
|
114
|
+
* See {@link Octo.registerHooks}.
|
|
115
|
+
*/
|
|
116
|
+
registerHooks(...args: Parameters<Octo['registerHooks']>): ReturnType<Octo['registerHooks']>;
|
|
117
|
+
/**
|
|
118
|
+
* See {@link Octo.registerTags}.
|
|
119
|
+
*/
|
|
120
|
+
registerTags(...args: Parameters<Octo['registerTags']>): ReturnType<Octo['registerTags']>;
|
|
121
|
+
/**
|
|
122
|
+
* See {@link Octo.registerTerraformConfig}. Required before a run that generates terraform.
|
|
123
|
+
*/
|
|
124
|
+
registerTerraformConfig(...args: Parameters<Octo['registerTerraformConfig']>): ReturnType<Octo['registerTerraformConfig']>;
|
|
125
|
+
/**
|
|
126
|
+
* See {@link Octo.registerTerraformProvider}. Required before a run that generates terraform.
|
|
127
|
+
*/
|
|
128
|
+
registerTerraformProvider(...args: Parameters<Octo['registerTerraformProvider']>): ReturnType<Octo['registerTerraformProvider']>;
|
|
129
|
+
/**
|
|
130
|
+
* Tears down the composed graph - models, overlays, inputs, and modules - so the next
|
|
131
|
+
* {@link TestModuleContainer.runModules} composes fresh. Call it in your test teardown.
|
|
132
|
+
*/
|
|
55
133
|
reset(): Promise<void>;
|
|
134
|
+
/**
|
|
135
|
+
* Runs the given modules through Octo's lifecycle, and yields the result once.
|
|
136
|
+
*
|
|
137
|
+
* How far the lifecycle goes is set by `terraformTarget`, and this is the choice that decides what
|
|
138
|
+
* the test costs:
|
|
139
|
+
* - `'skip'` - composes and commits in memory. No terraform, no cloud. This is a unit test.
|
|
140
|
+
* - `'plan'` - generates the module folders and runs `terraform plan` against them.
|
|
141
|
+
* - `'apply'` - generates, plans, applies, and commits. **This creates real infrastructure.**
|
|
142
|
+
*
|
|
143
|
+
* @param modules The modules to load, in order.
|
|
144
|
+
* @param options `filterByModuleIds` narrows the run to those modules; `outputDir` is where the
|
|
145
|
+
* terraform folders are written, defaulting to a temporary directory.
|
|
146
|
+
*/
|
|
147
|
+
runModules<M extends UnknownModule>(modules: TestModule<M> | TestModule<M>[], { filterByModuleIds, outputDir, terraformTarget, }?: {
|
|
148
|
+
filterByModuleIds?: string[];
|
|
149
|
+
outputDir?: string;
|
|
150
|
+
terraformTarget?: 'apply' | 'plan' | 'skip';
|
|
151
|
+
}): AsyncGenerator<{
|
|
152
|
+
hclDiff: string;
|
|
153
|
+
hclRender: string;
|
|
154
|
+
modelTransaction: DiffMetadata[][];
|
|
155
|
+
resourceDiffs: DiffMetadata[][];
|
|
156
|
+
resourceTransaction: DiffMetadata[][];
|
|
157
|
+
responses: {
|
|
158
|
+
[resourceContext: string]: unknown;
|
|
159
|
+
};
|
|
160
|
+
validateReport: ValidateReport | undefined;
|
|
161
|
+
warnings: {
|
|
162
|
+
message: string;
|
|
163
|
+
moduleId?: string;
|
|
164
|
+
}[];
|
|
165
|
+
}>;
|
|
166
|
+
/**
|
|
167
|
+
* Persists the run's state, so a later run in the same test diffs against it.
|
|
168
|
+
*/
|
|
169
|
+
private commit;
|
|
56
170
|
}
|