@quadnix/octo 0.0.30 → 0.2.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 +117 -8
- package/dist/app.type.d.ts +277 -19
- 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 +4 -6
- package/dist/decorators/model.decorator.js +2 -7
- package/dist/decorators/model.decorator.js.map +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 +7 -2
- package/dist/decorators/on-event.decorator.js +5 -0
- package/dist/decorators/on-event.decorator.js.map +1 -1
- package/dist/decorators/resource.decorator.d.ts +50 -1
- package/dist/decorators/resource.decorator.js +38 -1
- package/dist/decorators/resource.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 +14 -1
- package/dist/errors/schema.error.js +11 -1
- package/dist/errors/schema.error.js.map +1 -1
- package/dist/errors/terraform.error.d.ts +20 -0
- package/dist/errors/terraform.error.js +24 -0
- package/dist/errors/terraform.error.js.map +1 -0
- package/dist/errors/transaction.error.d.ts +93 -2
- package/dist/errors/transaction.error.js +83 -0
- package/dist/errors/transaction.error.js.map +1 -1
- package/dist/events/action.event.d.ts +8 -4
- package/dist/events/action.event.js +2 -4
- package/dist/events/action.event.js.map +1 -1
- package/dist/events/command.event.d.ts +43 -0
- package/dist/events/command.event.js +33 -0
- package/dist/events/command.event.js.map +1 -0
- package/dist/events/event.model.d.ts +26 -8
- package/dist/events/event.model.js +15 -7
- package/dist/events/event.model.js.map +1 -1
- package/dist/events/hook/commit.hook.event.d.ts +1 -7
- 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 +1 -3
- 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 +1 -7
- 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 +1 -7
- 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 +5 -0
- package/dist/events/index.js +5 -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 +61 -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 +7 -5
- package/dist/events/module.event.js +3 -4
- package/dist/events/module.event.js.map +1 -1
- package/dist/events/registration.event.d.ts +19 -15
- package/dist/events/registration.event.js +18 -14
- package/dist/events/registration.event.js.map +1 -1
- package/dist/events/serialization.event.d.ts +16 -13
- package/dist/events/serialization.event.js +15 -12
- package/dist/events/serialization.event.js.map +1 -1
- package/dist/events/state.event.d.ts +102 -0
- package/dist/events/state.event.js +69 -0
- package/dist/events/state.event.js.map +1 -0
- package/dist/events/terraform.event.d.ts +78 -0
- package/dist/events/terraform.event.js +55 -0
- package/dist/events/terraform.event.js.map +1 -0
- package/dist/events/transaction.event.d.ts +3 -40
- package/dist/events/transaction.event.js +1 -29
- package/dist/events/transaction.event.js.map +1 -1
- package/dist/functions/container/container.d.ts +54 -13
- package/dist/functions/container/container.js +64 -19
- 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 +84 -23
- package/dist/functions/dependency/dependency.js +84 -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 +68 -7
- package/dist/functions/diff/diff.js +44 -3
- package/dist/functions/diff/diff.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 -2
- package/dist/functions/node/node-action.abstract.js +22 -8
- 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 +106 -22
- package/dist/functions/node/node.abstract.js.map +1 -1
- package/dist/functions/node/node.interface.d.ts +3 -1
- package/dist/functions/schema/schema.d.ts +7 -0
- package/dist/functions/schema/schema.js +10 -1
- package/dist/functions/schema/schema.js.map +1 -1
- package/dist/index.d.ts +12 -6
- package/dist/index.js +9 -4
- package/dist/index.js.map +1 -1
- package/dist/index.type.d.ts +5 -0
- package/dist/index.type.js +2 -0
- package/dist/index.type.js.map +1 -0
- package/dist/main.d.ts +245 -14
- package/dist/main.js +377 -72
- package/dist/main.js.map +1 -1
- package/dist/models/account/account.model.d.ts +43 -7
- package/dist/models/account/account.model.js +56 -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 +13 -8
- package/dist/models/app/app.model.js +17 -32
- 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 +6 -0
- package/dist/models/deployment/deployment.schema.js +6 -0
- package/dist/models/deployment/deployment.schema.js.map +1 -1
- package/dist/models/environment/environment.model.d.ts +15 -3
- package/dist/models/environment/environment.model.js +22 -10
- 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 +21 -3
- package/dist/models/execution/execution.model.js +47 -29
- 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 +19 -5
- package/dist/models/image/image.model.js +25 -11
- 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 +107 -8
- 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 +14 -2
- package/dist/models/pipeline/pipeline.model.js +19 -7
- 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 +15 -3
- package/dist/models/server/server.model.js +18 -6
- 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 +37 -6
- package/dist/models/service/service.model.js +65 -11
- package/dist/models/service/service.model.js.map +1 -1
- package/dist/models/service/service.schema.d.ts +48 -1
- package/dist/models/service/service.schema.js +56 -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 +30 -0
- package/dist/modes/generate.mode.js +50 -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 +186 -0
- package/dist/modes/validate.mode.js +558 -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 +43 -1
- package/dist/modules/module.container.js +77 -5
- 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 +383 -199
- 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 +29 -3
- 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 +163 -6
- package/dist/resources/resource.abstract.js +223 -59
- package/dist/resources/resource.abstract.js.map +1 -1
- package/dist/resources/resource.interface.d.ts +0 -2
- package/dist/resources/resource.schema.d.ts +39 -1
- package/dist/resources/resource.schema.js +38 -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 +32 -5
- 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 +82 -5
- package/dist/services/input/input.service.js +143 -12
- 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 +25 -3
- package/dist/services/serialization/model/model-serialization.service.js +113 -62
- package/dist/services/serialization/model/model-serialization.service.js.map +1 -1
- package/dist/services/serialization/resource/resource-serialization.service.d.ts +36 -6
- package/dist/services/serialization/resource/resource-serialization.service.js +77 -28
- package/dist/services/serialization/resource/resource-serialization.service.js.map +1 -1
- package/dist/services/state-management/local.state-provider.d.ts +67 -4
- package/dist/services/state-management/local.state-provider.js +168 -41
- package/dist/services/state-management/local.state-provider.js.map +1 -1
- package/dist/services/state-management/remote.state-provider.d.ts +216 -0
- package/dist/services/state-management/remote.state-provider.js +645 -0
- package/dist/services/state-management/remote.state-provider.js.map +1 -0
- package/dist/services/state-management/state-management.service.d.ts +195 -17
- package/dist/services/state-management/state-management.service.js +259 -10
- package/dist/services/state-management/state-management.service.js.map +1 -1
- package/dist/services/state-management/state-provider.interface.d.ts +98 -3
- package/dist/services/state-management/state-provider.interface.js +14 -1
- package/dist/services/state-management/state-provider.interface.js.map +1 -1
- package/dist/services/state-management/terraform-state.service.d.ts +99 -0
- package/dist/services/state-management/terraform-state.service.js +197 -0
- package/dist/services/state-management/terraform-state.service.js.map +1 -0
- package/dist/services/state-management/test.state-provider.d.ts +42 -4
- package/dist/services/state-management/test.state-provider.js +77 -25
- package/dist/services/state-management/test.state-provider.js.map +1 -1
- package/dist/services/terraform/terraform.service.d.ts +480 -0
- package/dist/services/terraform/terraform.service.js +1082 -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 +110 -10
- package/dist/services/transaction/transaction.service.js +570 -251
- package/dist/services/transaction/transaction.service.js.map +1 -1
- package/dist/services/validation/validation.service.d.ts +15 -3
- 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/{functions → utilities}/diff/diff.utility.d.ts +19 -3
- package/dist/{functions → utilities}/diff/diff.utility.js +57 -41
- package/dist/utilities/diff/diff.utility.js.map +1 -0
- package/dist/utilities/file/file.utility.d.ts +16 -2
- package/dist/utilities/file/file.utility.js +23 -61
- package/dist/utilities/file/file.utility.js.map +1 -1
- package/dist/utilities/hcl/hcl.utility.d.ts +128 -0
- package/dist/utilities/hcl/hcl.utility.js +402 -0
- package/dist/utilities/hcl/hcl.utility.js.map +1 -0
- package/dist/utilities/http/http.utility.d.ts +57 -0
- package/dist/utilities/http/http.utility.js +98 -0
- package/dist/utilities/http/http.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 +41 -0
- package/dist/utilities/string/string.utility.js +65 -0
- package/dist/utilities/string/string.utility.js.map +1 -0
- package/dist/utilities/terraform/terraform.utility.d.ts +276 -0
- package/dist/utilities/terraform/terraform.utility.js +623 -0
- package/dist/utilities/terraform/terraform.utility.js.map +1 -0
- package/dist/utilities/test-helpers/test-classes.d.ts +36 -30
- package/dist/utilities/test-helpers/test-classes.js +38 -39
- package/dist/utilities/test-helpers/test-classes.js.map +1 -1
- package/dist/utilities/test-helpers/test-models.d.ts +8 -1
- package/dist/utilities/test-helpers/test-models.js +37 -12
- 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 +486 -0
- package/dist/utilities/test-helpers/test-modes.js.map +1 -0
- package/dist/utilities/test-helpers/test-modules.d.ts +47 -0
- package/dist/utilities/test-helpers/test-modules.js +85 -0
- package/dist/utilities/test-helpers/test-modules.js.map +1 -0
- package/dist/utilities/test-helpers/test-overlays.d.ts +20 -2
- package/dist/utilities/test-helpers/test-overlays.js +56 -6
- package/dist/utilities/test-helpers/test-overlays.js.map +1 -1
- package/dist/utilities/test-helpers/test-resources.d.ts +23 -3
- package/dist/utilities/test-helpers/test-resources.js +83 -23
- 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 +12 -6
- package/dist/functions/diff/diff.utility.js.map +0 -1
- 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/services/state-management/local-encryption.state-provider.d.ts +0 -20
- package/dist/services/state-management/local-encryption.state-provider.js +0 -90
- package/dist/services/state-management/local-encryption.state-provider.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
|
@@ -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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Constructable, ModuleSchemaInputs, UnknownModule } from '../app.type.js';
|
|
1
|
+
import type { Constructable, ModelSerializedOutput, ModuleSchemaInputs, UnknownModule } from '../app.type.js';
|
|
2
2
|
import { CommitHook } from '../functions/hook/commit.hook.js';
|
|
3
3
|
import { ModelActionHook } from '../functions/hook/model-action.hook.js';
|
|
4
4
|
import { ResourceActionHook } from '../functions/hook/resource-action.hook.js';
|
|
@@ -16,16 +16,49 @@ 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
|
+
* Every module that ran, by module id, with the inputs it was given before references resolved.
|
|
43
|
+
*
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
getModuleInstances(): ModelSerializedOutput['modules'];
|
|
47
|
+
/**
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
26
50
|
load<M extends UnknownModule>(module: Constructable<M> | string, moduleId: string, inputs: ModuleSchemaInputs<M>): void;
|
|
51
|
+
/**
|
|
52
|
+
* @internal
|
|
53
|
+
*/
|
|
27
54
|
order(modules: (Constructable<UnknownModule> | string)[]): void;
|
|
55
|
+
/**
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
28
58
|
register(module: Constructable<UnknownModule>, properties: ModuleOptions): void;
|
|
59
|
+
/**
|
|
60
|
+
* @internal
|
|
61
|
+
*/
|
|
29
62
|
registerHooks({ postCommitHooks, postModelActionHooks, postResourceActionHooks, preCommitHooks, preModelActionHooks, preResourceActionHooks, }?: {
|
|
30
63
|
postCommitHooks?: Parameters<CommitHook['collectHooks']>[0]['postHooks'];
|
|
31
64
|
postModelActionHooks?: Parameters<ModelActionHook['collectHooks']>[0]['postHooks'];
|
|
@@ -34,7 +67,13 @@ export declare class ModuleContainer {
|
|
|
34
67
|
preModelActionHooks?: Parameters<ModelActionHook['collectHooks']>[0]['preHooks'];
|
|
35
68
|
preResourceActionHooks?: Parameters<ResourceActionHook['collectHooks']>[0]['preHooks'];
|
|
36
69
|
}): void;
|
|
70
|
+
/**
|
|
71
|
+
* @internal
|
|
72
|
+
*/
|
|
37
73
|
reset(): void;
|
|
74
|
+
/**
|
|
75
|
+
* @internal
|
|
76
|
+
*/
|
|
38
77
|
unload(module: Constructable<UnknownModule>): void;
|
|
39
78
|
}
|
|
40
79
|
/**
|
|
@@ -42,6 +81,9 @@ export declare class ModuleContainer {
|
|
|
42
81
|
*/
|
|
43
82
|
export declare class ModuleContainerFactory {
|
|
44
83
|
private static instance;
|
|
84
|
+
/**
|
|
85
|
+
* @internal
|
|
86
|
+
*/
|
|
45
87
|
static create(forceNew?: boolean): Promise<ModuleContainer>;
|
|
46
88
|
}
|
|
47
89
|
export {};
|
|
@@ -16,16 +16,23 @@ import { OverlayDataRepository } from '../overlays/overlay-data.repository.js';
|
|
|
16
16
|
import { AOverlay } from '../overlays/overlay.abstract.js';
|
|
17
17
|
import { EventService } from '../services/event/event.service.js';
|
|
18
18
|
import { InputService } from '../services/input/input.service.js';
|
|
19
|
+
import { DiffUtility } from '../utilities/diff/diff.utility.js';
|
|
19
20
|
/**
|
|
20
21
|
* @internal
|
|
21
22
|
*/
|
|
22
23
|
export class ModuleContainer {
|
|
24
|
+
/**
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
23
27
|
constructor(eventService, inputService, overlayDataRepository) {
|
|
24
28
|
this.eventService = eventService;
|
|
25
29
|
this.inputService = inputService;
|
|
26
30
|
this.overlayDataRepository = overlayDataRepository;
|
|
27
31
|
this.modules = [];
|
|
28
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
29
36
|
async apply() {
|
|
30
37
|
const result = {};
|
|
31
38
|
for (const moduleMetadata of this.modules) {
|
|
@@ -90,19 +97,28 @@ export class ModuleContainer {
|
|
|
90
97
|
// Register module.
|
|
91
98
|
this.inputService.registerModule(i.moduleId, instance);
|
|
92
99
|
i.applied = true;
|
|
100
|
+
this.eventService.emit(new ModuleEvent(module.name, { inputs: { ...resolvedModuleSchema }, moduleId: i.moduleId }));
|
|
93
101
|
}
|
|
94
|
-
this.eventService.emit(new ModuleEvent(module.name));
|
|
95
102
|
}
|
|
96
103
|
return result;
|
|
97
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* @internal
|
|
107
|
+
*/
|
|
98
108
|
getMetadata(module) {
|
|
99
109
|
const index = this.getMetadataIndex(module);
|
|
100
110
|
return index === -1 ? undefined : this.modules[index];
|
|
101
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* @internal
|
|
114
|
+
*/
|
|
102
115
|
getMetadataIndex(module) {
|
|
103
116
|
const moduleName = typeof module === 'string' ? module : `${module.MODULE_PACKAGE}/${module.name}`;
|
|
104
117
|
return this.modules.findIndex((m) => `${m.properties.packageName}/${m.module.name}` === moduleName);
|
|
105
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* @internal
|
|
121
|
+
*/
|
|
106
122
|
getModuleInstanceInputKeys(moduleId) {
|
|
107
123
|
const moduleIndex = this.modules.findIndex((m) => m.instances.findIndex((i) => i.moduleId === moduleId) !== -1);
|
|
108
124
|
if (moduleIndex === -1) {
|
|
@@ -110,25 +126,66 @@ export class ModuleContainer {
|
|
|
110
126
|
}
|
|
111
127
|
return this.modules[moduleIndex].instances.find((i) => i.moduleId === moduleId).inputKeys;
|
|
112
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Every module that ran, by module id, with the inputs it was given before references resolved.
|
|
131
|
+
*
|
|
132
|
+
* @internal
|
|
133
|
+
*/
|
|
134
|
+
getModuleInstances() {
|
|
135
|
+
const modules = {};
|
|
136
|
+
for (const { instances, module, properties } of this.modules) {
|
|
137
|
+
for (const { applied, inputs, moduleId } of instances) {
|
|
138
|
+
if (applied) {
|
|
139
|
+
modules[moduleId] = {
|
|
140
|
+
className: `${properties.packageName}/${module.name}`,
|
|
141
|
+
inputs,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return modules;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* @internal
|
|
150
|
+
*/
|
|
113
151
|
load(module, moduleId, inputs) {
|
|
114
152
|
const moduleName = typeof module === 'string' ? module : `${module.MODULE_PACKAGE}/${module.name}`;
|
|
115
153
|
const m = this.getMetadata(module);
|
|
116
154
|
if (!m) {
|
|
117
155
|
throw new ModuleError(`Module "${moduleName}" not yet registered!`, moduleName);
|
|
118
156
|
}
|
|
119
|
-
|
|
120
|
-
if (
|
|
121
|
-
|
|
157
|
+
// Octo reads a reference such as `${{module-id.model.region}}` by splitting it on dots.
|
|
158
|
+
if (moduleId.includes('.')) {
|
|
159
|
+
throw new ModuleError(`Module id "${moduleId}" cannot contain "."!`, moduleName);
|
|
160
|
+
}
|
|
161
|
+
// Loading a module again under its id, with the same inputs, changes nothing. Any other module
|
|
162
|
+
// under that id would be lost.
|
|
163
|
+
const copiedInputs = JSON.parse(JSON.stringify(inputs));
|
|
164
|
+
const existing = this.modules.find((metadata) => metadata.instances.some((i) => i.moduleId === moduleId));
|
|
165
|
+
if (existing) {
|
|
166
|
+
const instance = existing.instances.find((i) => i.moduleId === moduleId);
|
|
167
|
+
if (existing === m && DiffUtility.isObjectDeepEquals(instance.inputs, copiedInputs)) {
|
|
168
|
+
m.hidden = false;
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
throw new ModuleError(`Module id "${moduleId}" is already in use!`, moduleName);
|
|
122
172
|
}
|
|
173
|
+
m.hidden = false;
|
|
123
174
|
m.instances.push({
|
|
124
175
|
applied: false,
|
|
125
176
|
inputKeys: getSchemaKeys(module.MODULE_SCHEMA),
|
|
177
|
+
inputs: copiedInputs,
|
|
126
178
|
moduleId,
|
|
127
179
|
});
|
|
128
|
-
|
|
180
|
+
// A copy of its own: resolving an input overwrites it in place, which would change the copy kept
|
|
181
|
+
// above to compare a later load against.
|
|
182
|
+
for (const [key, value] of Object.entries(copiedInputs)) {
|
|
129
183
|
this.inputService.registerInput(moduleId, key, JSON.parse(JSON.stringify(value)));
|
|
130
184
|
}
|
|
131
185
|
}
|
|
186
|
+
/**
|
|
187
|
+
* @internal
|
|
188
|
+
*/
|
|
132
189
|
order(modules) {
|
|
133
190
|
this.modules.sort((a, b) => {
|
|
134
191
|
const aIndex = modules.findIndex((m) => {
|
|
@@ -142,12 +199,18 @@ export class ModuleContainer {
|
|
|
142
199
|
return aIndex - bIndex;
|
|
143
200
|
});
|
|
144
201
|
}
|
|
202
|
+
/**
|
|
203
|
+
* @internal
|
|
204
|
+
*/
|
|
145
205
|
register(module, properties) {
|
|
146
206
|
const moduleName = `${module.MODULE_PACKAGE}/${module.name}`;
|
|
147
207
|
if (!this.modules.some((m) => `${m.properties.packageName}/${m.module.name}` === moduleName)) {
|
|
148
208
|
this.modules.push({ hidden: true, instances: [], module, properties });
|
|
149
209
|
}
|
|
150
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* @internal
|
|
213
|
+
*/
|
|
151
214
|
registerHooks({ postCommitHooks, postModelActionHooks, postResourceActionHooks, preCommitHooks, preModelActionHooks, preResourceActionHooks, } = {}) {
|
|
152
215
|
CommitHook.getInstance().collectHooks({ postHooks: postCommitHooks, preHooks: preCommitHooks });
|
|
153
216
|
ModelActionHook.getInstance().collectHooks({
|
|
@@ -159,12 +222,18 @@ export class ModuleContainer {
|
|
|
159
222
|
preHooks: preResourceActionHooks,
|
|
160
223
|
});
|
|
161
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* @internal
|
|
227
|
+
*/
|
|
162
228
|
reset() {
|
|
163
229
|
for (const m of this.modules) {
|
|
164
230
|
m.hidden = true;
|
|
165
231
|
m.instances = [];
|
|
166
232
|
}
|
|
167
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* @internal
|
|
236
|
+
*/
|
|
168
237
|
unload(module) {
|
|
169
238
|
const m = this.getMetadata(module);
|
|
170
239
|
if (m) {
|
|
@@ -176,6 +245,9 @@ export class ModuleContainer {
|
|
|
176
245
|
* @internal
|
|
177
246
|
*/
|
|
178
247
|
let ModuleContainerFactory = class ModuleContainerFactory {
|
|
248
|
+
/**
|
|
249
|
+
* @internal
|
|
250
|
+
*/
|
|
179
251
|
static async create(forceNew = false) {
|
|
180
252
|
const [eventService, inputService, overlayDataRepository] = await Promise.all([
|
|
181
253
|
Container.getInstance().get(EventService),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.container.js","sourceRoot":"","sources":["../../src/modules/module.container.ts"],"names":[],"mappings":";;;;;;
|
|
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
|
}
|