@ankhorage/infra 4.1.10 → 5.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/CHANGELOG.md +24 -0
- package/README.md +21 -32
- package/dist/cli/bin.d.ts +1 -8
- package/dist/cli/bin.d.ts.map +1 -1
- package/dist/cli/bin.js +2 -34
- package/dist/cli/bin.js.map +1 -1
- package/dist/cli/commands/destroy.d.ts +11 -0
- package/dist/cli/commands/destroy.d.ts.map +1 -0
- package/dist/cli/commands/destroy.js +51 -0
- package/dist/cli/commands/destroy.js.map +1 -0
- package/dist/cli/commands/down.d.ts +11 -0
- package/dist/cli/commands/down.d.ts.map +1 -0
- package/dist/cli/commands/down.js +27 -0
- package/dist/cli/commands/down.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +11 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +29 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/outputs.d.ts +11 -0
- package/dist/cli/commands/outputs.d.ts.map +1 -0
- package/dist/cli/commands/outputs.js +25 -0
- package/dist/cli/commands/outputs.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +11 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +19 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/status.d.ts +11 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +19 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/up.d.ts +11 -0
- package/dist/cli/commands/up.d.ts.map +1 -0
- package/dist/cli/commands/up.js +28 -0
- package/dist/cli/commands/up.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +11 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +19 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/constants.d.ts +66 -0
- package/dist/cli/constants.d.ts.map +1 -0
- package/dist/cli/constants.js +19 -0
- package/dist/cli/constants.js.map +1 -0
- package/dist/cli/createDefaultInfraCommandContext.d.ts +4 -0
- package/dist/cli/createDefaultInfraCommandContext.d.ts.map +1 -0
- package/dist/{commandContext.js → cli/createDefaultInfraCommandContext.js} +4 -3
- package/dist/cli/createDefaultInfraCommandContext.js.map +1 -0
- package/dist/cli/createInfraRuntimeProvider.d.ts +5 -0
- package/dist/cli/createInfraRuntimeProvider.d.ts.map +1 -0
- package/dist/cli/createInfraRuntimeProvider.js +22 -0
- package/dist/cli/createInfraRuntimeProvider.js.map +1 -0
- package/dist/cli/createProviderCommandDescriptors.d.ts +4 -0
- package/dist/cli/createProviderCommandDescriptors.d.ts.map +1 -0
- package/dist/cli/createProviderCommandDescriptors.js +6 -0
- package/dist/cli/createProviderCommandDescriptors.js.map +1 -0
- package/dist/cli/findInfraCommand.d.ts +4 -0
- package/dist/cli/findInfraCommand.d.ts.map +1 -0
- package/dist/cli/findInfraCommand.js +6 -0
- package/dist/cli/findInfraCommand.js.map +1 -0
- package/dist/cli/index.d.ts +3 -8
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -24
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/renderInfraRootHelp.d.ts +3 -0
- package/dist/cli/renderInfraRootHelp.d.ts.map +1 -0
- package/dist/cli/renderInfraRootHelp.js +21 -0
- package/dist/cli/renderInfraRootHelp.js.map +1 -0
- package/dist/cli/renderUnknownInfraCommand.d.ts +3 -0
- package/dist/cli/renderUnknownInfraCommand.d.ts.map +1 -0
- package/dist/cli/renderUnknownInfraCommand.js +5 -0
- package/dist/cli/renderUnknownInfraCommand.js.map +1 -0
- package/dist/cli/runInfraCliAsync.d.ts +10 -0
- package/dist/cli/runInfraCliAsync.d.ts.map +1 -0
- package/dist/cli/runInfraCliAsync.js +34 -0
- package/dist/cli/runInfraCliAsync.js.map +1 -0
- package/dist/cli/runInfraCommandAsync.d.ts +4 -0
- package/dist/cli/runInfraCommandAsync.d.ts.map +1 -0
- package/dist/cli/runInfraCommandAsync.js +100 -0
- package/dist/cli/runInfraCommandAsync.js.map +1 -0
- package/dist/cli/utils/prepareInfraCommandOperationAsync.d.ts +4 -0
- package/dist/cli/utils/prepareInfraCommandOperationAsync.d.ts.map +1 -0
- package/dist/cli/utils/prepareInfraCommandOperationAsync.js +45 -0
- package/dist/cli/utils/prepareInfraCommandOperationAsync.js.map +1 -0
- package/dist/cli/utils/requireInfraSuccess.d.ts +7 -0
- package/dist/cli/utils/requireInfraSuccess.d.ts.map +1 -0
- package/dist/cli/utils/requireInfraSuccess.js +17 -0
- package/dist/cli/utils/requireInfraSuccess.js.map +1 -0
- package/dist/cli/utils/resolveInfraPersistence.d.ts +4 -0
- package/dist/cli/utils/resolveInfraPersistence.d.ts.map +1 -0
- package/dist/cli/utils/resolveInfraPersistence.js +17 -0
- package/dist/cli/utils/resolveInfraPersistence.js.map +1 -0
- package/dist/cli/utils/writeInfraEnvironmentOutputs.d.ts +5 -0
- package/dist/cli/utils/writeInfraEnvironmentOutputs.d.ts.map +1 -0
- package/dist/cli/utils/writeInfraEnvironmentOutputs.js +16 -0
- package/dist/cli/utils/writeInfraEnvironmentOutputs.js.map +1 -0
- package/dist/cli/utils/writeInfraStructured.d.ts +4 -0
- package/dist/cli/utils/writeInfraStructured.d.ts.map +1 -0
- package/dist/cli/utils/writeInfraStructured.js +8 -0
- package/dist/cli/utils/writeInfraStructured.js.map +1 -0
- package/dist/constants.d.ts +10 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/{packageMetadata.js → constants.js} +6 -3
- package/dist/constants.js.map +1 -0
- package/dist/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraCredentialPort.d.ts +4 -0
- package/dist/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraCredentialPort.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraCredentialPort.js +35 -0
- package/dist/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraCredentialPort.js.map +1 -0
- package/dist/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraSecretPort.d.ts +4 -0
- package/dist/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraSecretPort.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraSecretPort.js +23 -0
- package/dist/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraSecretPort.js.map +1 -0
- package/dist/features/environment-lifecycle/adapters/outbound/createNodeInfraAdapterPackageResolver.d.ts +4 -0
- package/dist/features/environment-lifecycle/adapters/outbound/createNodeInfraAdapterPackageResolver.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/adapters/outbound/createNodeInfraAdapterPackageResolver.js +9 -0
- package/dist/features/environment-lifecycle/adapters/outbound/createNodeInfraAdapterPackageResolver.js.map +1 -0
- package/dist/features/environment-lifecycle/adapters/outbound/readStoredInfraStateAsync.d.ts +5 -0
- package/dist/features/environment-lifecycle/adapters/outbound/readStoredInfraStateAsync.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/adapters/outbound/readStoredInfraStateAsync.js +28 -0
- package/dist/features/environment-lifecycle/adapters/outbound/readStoredInfraStateAsync.js.map +1 -0
- package/dist/features/environment-lifecycle/adapters/outbound/removeStoredInfraStateAsync.d.ts +4 -0
- package/dist/features/environment-lifecycle/adapters/outbound/removeStoredInfraStateAsync.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/adapters/outbound/removeStoredInfraStateAsync.js +7 -0
- package/dist/features/environment-lifecycle/adapters/outbound/removeStoredInfraStateAsync.js.map +1 -0
- package/dist/features/environment-lifecycle/adapters/outbound/resolveInfraProjectAsync.d.ts +7 -0
- package/dist/features/environment-lifecycle/adapters/outbound/resolveInfraProjectAsync.d.ts.map +1 -0
- package/dist/{project.js → features/environment-lifecycle/adapters/outbound/resolveInfraProjectAsync.js} +10 -34
- package/dist/features/environment-lifecycle/adapters/outbound/resolveInfraProjectAsync.js.map +1 -0
- package/dist/features/environment-lifecycle/adapters/outbound/writeInfraGeneratedArtifactsAsync.d.ts +5 -0
- package/dist/features/environment-lifecycle/adapters/outbound/writeInfraGeneratedArtifactsAsync.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/adapters/outbound/writeInfraGeneratedArtifactsAsync.js +28 -0
- package/dist/features/environment-lifecycle/adapters/outbound/writeInfraGeneratedArtifactsAsync.js.map +1 -0
- package/dist/features/environment-lifecycle/adapters/outbound/writeStoredInfraStateAsync.d.ts +4 -0
- package/dist/features/environment-lifecycle/adapters/outbound/writeStoredInfraStateAsync.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/adapters/outbound/writeStoredInfraStateAsync.js +16 -0
- package/dist/features/environment-lifecycle/adapters/outbound/writeStoredInfraStateAsync.js.map +1 -0
- package/dist/features/environment-lifecycle/application/ports/outbound/infraAdapterPackage.d.ts +9 -0
- package/dist/features/environment-lifecycle/application/ports/outbound/infraAdapterPackage.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/application/ports/outbound/infraAdapterPackage.js +2 -0
- package/dist/features/environment-lifecycle/application/ports/outbound/infraAdapterPackage.js.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/collectInfraWorkloadsAsync.d.ts +4 -0
- package/dist/features/environment-lifecycle/application/use-cases/collectInfraWorkloadsAsync.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/collectInfraWorkloadsAsync.js +15 -0
- package/dist/features/environment-lifecycle/application/use-cases/collectInfraWorkloadsAsync.js.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/destroyInfraEnvironmentAsync.d.ts +4 -0
- package/dist/features/environment-lifecycle/application/use-cases/destroyInfraEnvironmentAsync.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/destroyInfraEnvironmentAsync.js +84 -0
- package/dist/features/environment-lifecycle/application/use-cases/destroyInfraEnvironmentAsync.js.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/downInfraEnvironmentAsync.d.ts +4 -0
- package/dist/features/environment-lifecycle/application/use-cases/downInfraEnvironmentAsync.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/downInfraEnvironmentAsync.js +55 -0
- package/dist/features/environment-lifecycle/application/use-cases/downInfraEnvironmentAsync.js.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/generateInfraEnvironmentAsync.d.ts +4 -0
- package/dist/features/environment-lifecycle/application/use-cases/generateInfraEnvironmentAsync.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/generateInfraEnvironmentAsync.js +38 -0
- package/dist/features/environment-lifecycle/application/use-cases/generateInfraEnvironmentAsync.js.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/getInfraEnvironmentOutputs.d.ts +4 -0
- package/dist/features/environment-lifecycle/application/use-cases/getInfraEnvironmentOutputs.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/getInfraEnvironmentOutputs.js +34 -0
- package/dist/features/environment-lifecycle/application/use-cases/getInfraEnvironmentOutputs.js.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/planInfraEnvironmentAsync.d.ts +4 -0
- package/dist/features/environment-lifecycle/application/use-cases/planInfraEnvironmentAsync.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/planInfraEnvironmentAsync.js +57 -0
- package/dist/features/environment-lifecycle/application/use-cases/planInfraEnvironmentAsync.js.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/prepareInfraOperationAsync.d.ts +5 -0
- package/dist/features/environment-lifecycle/application/use-cases/prepareInfraOperationAsync.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/prepareInfraOperationAsync.js +109 -0
- package/dist/features/environment-lifecycle/application/use-cases/prepareInfraOperationAsync.js.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/resolveInfraAdaptersAsync.d.ts +6 -0
- package/dist/features/environment-lifecycle/application/use-cases/resolveInfraAdaptersAsync.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/resolveInfraAdaptersAsync.js +181 -0
- package/dist/features/environment-lifecycle/application/use-cases/resolveInfraAdaptersAsync.js.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/statusInfraEnvironmentAsync.d.ts +4 -0
- package/dist/features/environment-lifecycle/application/use-cases/statusInfraEnvironmentAsync.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/statusInfraEnvironmentAsync.js +68 -0
- package/dist/features/environment-lifecycle/application/use-cases/statusInfraEnvironmentAsync.js.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/upInfraEnvironmentAsync.d.ts +4 -0
- package/dist/features/environment-lifecycle/application/use-cases/upInfraEnvironmentAsync.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/upInfraEnvironmentAsync.js +98 -0
- package/dist/features/environment-lifecycle/application/use-cases/upInfraEnvironmentAsync.js.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/validateInfraAdaptersAsync.d.ts +5 -0
- package/dist/features/environment-lifecycle/application/use-cases/validateInfraAdaptersAsync.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/validateInfraAdaptersAsync.js +17 -0
- package/dist/features/environment-lifecycle/application/use-cases/validateInfraAdaptersAsync.js.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/validateInfraEnvironmentAsync.d.ts +4 -0
- package/dist/features/environment-lifecycle/application/use-cases/validateInfraEnvironmentAsync.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/application/use-cases/validateInfraEnvironmentAsync.js +13 -0
- package/dist/features/environment-lifecycle/application/use-cases/validateInfraEnvironmentAsync.js.map +1 -0
- package/dist/features/environment-lifecycle/composition/createInfraCommandServices.d.ts +4 -0
- package/dist/features/environment-lifecycle/composition/createInfraCommandServices.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/composition/createInfraCommandServices.js +43 -0
- package/dist/features/environment-lifecycle/composition/createInfraCommandServices.js.map +1 -0
- package/dist/features/environment-lifecycle/domain/orderInfraPlanActions.d.ts +4 -0
- package/dist/features/environment-lifecycle/domain/orderInfraPlanActions.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/domain/orderInfraPlanActions.js +54 -0
- package/dist/features/environment-lifecycle/domain/orderInfraPlanActions.js.map +1 -0
- package/dist/features/environment-lifecycle/domain/resolveInfraEnvironment.d.ts +5 -0
- package/dist/features/environment-lifecycle/domain/resolveInfraEnvironment.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/domain/resolveInfraEnvironment.js +39 -0
- package/dist/features/environment-lifecycle/domain/resolveInfraEnvironment.js.map +1 -0
- package/dist/features/environment-lifecycle/utils/appendInfraFailure.d.ts +7 -0
- package/dist/features/environment-lifecycle/utils/appendInfraFailure.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/utils/appendInfraFailure.js +5 -0
- package/dist/features/environment-lifecycle/utils/appendInfraFailure.js.map +1 -0
- package/dist/features/environment-lifecycle/utils/createInfraExecutionContext.d.ts +5 -0
- package/dist/features/environment-lifecycle/utils/createInfraExecutionContext.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/utils/createInfraExecutionContext.js +13 -0
- package/dist/features/environment-lifecycle/utils/createInfraExecutionContext.js.map +1 -0
- package/dist/features/environment-lifecycle/utils/createInfraFailure.d.ts +4 -0
- package/dist/features/environment-lifecycle/utils/createInfraFailure.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/utils/createInfraFailure.js +5 -0
- package/dist/features/environment-lifecycle/utils/createInfraFailure.js.map +1 -0
- package/dist/features/environment-lifecycle/utils/createInfraLedger.d.ts +12 -0
- package/dist/features/environment-lifecycle/utils/createInfraLedger.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/utils/createInfraLedger.js +14 -0
- package/dist/features/environment-lifecycle/utils/createInfraLedger.js.map +1 -0
- package/dist/features/environment-lifecycle/utils/infraIdentityKey.d.ts +4 -0
- package/dist/features/environment-lifecycle/utils/infraIdentityKey.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/utils/infraIdentityKey.js +5 -0
- package/dist/features/environment-lifecycle/utils/infraIdentityKey.js.map +1 -0
- package/dist/features/environment-lifecycle/utils/isInfraStoredState.d.ts +4 -0
- package/dist/features/environment-lifecycle/utils/isInfraStoredState.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/utils/isInfraStoredState.js +103 -0
- package/dist/features/environment-lifecycle/utils/isInfraStoredState.js.map +1 -0
- package/dist/features/environment-lifecycle/utils/mergeInfraOutputs.d.ts +4 -0
- package/dist/features/environment-lifecycle/utils/mergeInfraOutputs.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/utils/mergeInfraOutputs.js +10 -0
- package/dist/features/environment-lifecycle/utils/mergeInfraOutputs.js.map +1 -0
- package/dist/features/environment-lifecycle/utils/mergeInfraResources.d.ts +4 -0
- package/dist/features/environment-lifecycle/utils/mergeInfraResources.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/utils/mergeInfraResources.js +10 -0
- package/dist/features/environment-lifecycle/utils/mergeInfraResources.js.map +1 -0
- package/dist/features/environment-lifecycle/utils/normalizeInfraEnvironmentKey.d.ts +3 -0
- package/dist/features/environment-lifecycle/utils/normalizeInfraEnvironmentKey.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/utils/normalizeInfraEnvironmentKey.js +8 -0
- package/dist/features/environment-lifecycle/utils/normalizeInfraEnvironmentKey.js.map +1 -0
- package/dist/features/environment-lifecycle/utils/resolveInfraStatePath.d.ts +4 -0
- package/dist/features/environment-lifecycle/utils/resolveInfraStatePath.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/utils/resolveInfraStatePath.js +11 -0
- package/dist/features/environment-lifecycle/utils/resolveInfraStatePath.js.map +1 -0
- package/dist/features/environment-lifecycle/utils/resolveProjectFile.d.ts +3 -0
- package/dist/features/environment-lifecycle/utils/resolveProjectFile.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/utils/resolveProjectFile.js +19 -0
- package/dist/features/environment-lifecycle/utils/resolveProjectFile.js.map +1 -0
- package/dist/features/environment-lifecycle/utils/retainUnchangedAdapterOutputs.d.ts +4 -0
- package/dist/features/environment-lifecycle/utils/retainUnchangedAdapterOutputs.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/utils/retainUnchangedAdapterOutputs.js +6 -0
- package/dist/features/environment-lifecycle/utils/retainUnchangedAdapterOutputs.js.map +1 -0
- package/dist/features/environment-lifecycle/utils/retainUnchangedAdapterResources.d.ts +4 -0
- package/dist/features/environment-lifecycle/utils/retainUnchangedAdapterResources.d.ts.map +1 -0
- package/dist/features/environment-lifecycle/utils/retainUnchangedAdapterResources.js +6 -0
- package/dist/features/environment-lifecycle/utils/retainUnchangedAdapterResources.js.map +1 -0
- package/dist/index.d.ts +16 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -15
- package/dist/index.js.map +1 -1
- package/dist/metadata/index.d.ts +1 -1
- package/dist/metadata/index.d.ts.map +1 -1
- package/dist/metadata/index.js +1 -1
- package/dist/metadata/index.js.map +1 -1
- package/dist/project/index.d.ts +7 -5
- package/dist/project/index.d.ts.map +1 -1
- package/dist/project/index.js +6 -5
- package/dist/project/index.js.map +1 -1
- package/dist/readme-usage.js +17 -26
- package/dist/readme-usage.js.map +1 -1
- package/dist/testSupport.d.ts +1 -1
- package/dist/testSupport.d.ts.map +1 -1
- package/dist/testSupport.js +11 -1
- package/dist/testSupport.js.map +1 -1
- package/dist/types/infraCli.d.ts +91 -0
- package/dist/types/infraCli.d.ts.map +1 -0
- package/dist/types/infraCli.js +2 -0
- package/dist/types/infraCli.js.map +1 -0
- package/dist/types/infraOrchestration.d.ts +84 -0
- package/dist/types/infraOrchestration.d.ts.map +1 -0
- package/dist/types/infraOrchestration.js +2 -0
- package/dist/types/infraOrchestration.js.map +1 -0
- package/dist/{project.d.ts → types/infraProject.d.ts} +6 -6
- package/dist/types/infraProject.d.ts.map +1 -0
- package/dist/types/infraProject.js +2 -0
- package/dist/types/infraProject.js.map +1 -0
- package/package.json +21 -11
- package/src/adapterPackages.integration.test.ts +79 -0
- package/src/cli/bin.ts +2 -61
- package/src/cli/cli.test.ts +35 -126
- package/src/cli/commands/destroy.ts +57 -0
- package/src/cli/commands/down.ts +28 -0
- package/src/cli/commands/generate.ts +34 -0
- package/src/cli/commands/outputs.ts +25 -0
- package/src/cli/commands/plan.ts +20 -0
- package/src/cli/commands/status.ts +20 -0
- package/src/cli/commands/up.ts +29 -0
- package/src/cli/commands/validate.ts +20 -0
- package/src/cli/constants.ts +19 -0
- package/src/cli/createDefaultInfraCommandContext.ts +17 -0
- package/src/cli/createInfraRuntimeProvider.ts +35 -0
- package/src/cli/createProviderCommandDescriptors.ts +8 -0
- package/src/cli/findInfraCommand.ts +7 -0
- package/src/cli/index.test.ts +12 -20
- package/src/cli/index.ts +7 -49
- package/src/cli/renderInfraRootHelp.ts +23 -0
- package/src/cli/renderUnknownInfraCommand.ts +4 -0
- package/src/cli/runInfraCliAsync.ts +51 -0
- package/src/cli/runInfraCommandAsync.ts +114 -0
- package/src/cli/utils/prepareInfraCommandOperationAsync.ts +64 -0
- package/src/cli/utils/requireInfraSuccess.ts +24 -0
- package/src/cli/utils/resolveInfraPersistence.ts +22 -0
- package/src/cli/utils/writeInfraEnvironmentOutputs.ts +24 -0
- package/src/cli/utils/writeInfraStructured.ts +11 -0
- package/src/commands.test.ts +198 -196
- package/src/{packageMetadata.ts → constants.ts} +5 -2
- package/src/environmentLifecycle.test.ts +193 -0
- package/src/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraCredentialPort.ts +52 -0
- package/src/features/environment-lifecycle/adapters/outbound/createEnvironmentInfraSecretPort.ts +32 -0
- package/src/features/environment-lifecycle/adapters/outbound/createNodeInfraAdapterPackageResolver.ts +10 -0
- package/src/features/environment-lifecycle/adapters/outbound/readStoredInfraStateAsync.ts +34 -0
- package/src/features/environment-lifecycle/adapters/outbound/removeStoredInfraStateAsync.ts +12 -0
- package/src/{project.ts → features/environment-lifecycle/adapters/outbound/resolveInfraProjectAsync.ts} +10 -45
- package/src/features/environment-lifecycle/adapters/outbound/writeInfraGeneratedArtifactsAsync.ts +34 -0
- package/src/features/environment-lifecycle/adapters/outbound/writeStoredInfraStateAsync.ts +21 -0
- package/src/features/environment-lifecycle/application/ports/outbound/infraAdapterPackage.ts +10 -0
- package/src/features/environment-lifecycle/application/use-cases/collectInfraWorkloadsAsync.ts +25 -0
- package/src/features/environment-lifecycle/application/use-cases/destroyInfraEnvironmentAsync.ts +119 -0
- package/src/features/environment-lifecycle/application/use-cases/downInfraEnvironmentAsync.ts +65 -0
- package/src/features/environment-lifecycle/application/use-cases/generateInfraEnvironmentAsync.ts +51 -0
- package/src/features/environment-lifecycle/application/use-cases/getInfraEnvironmentOutputs.ts +41 -0
- package/src/features/environment-lifecycle/application/use-cases/planInfraEnvironmentAsync.ts +67 -0
- package/src/features/environment-lifecycle/application/use-cases/prepareInfraOperationAsync.ts +137 -0
- package/src/features/environment-lifecycle/application/use-cases/resolveInfraAdaptersAsync.ts +257 -0
- package/src/features/environment-lifecycle/application/use-cases/statusInfraEnvironmentAsync.ts +80 -0
- package/src/features/environment-lifecycle/application/use-cases/upInfraEnvironmentAsync.ts +126 -0
- package/src/features/environment-lifecycle/application/use-cases/validateInfraAdaptersAsync.ts +25 -0
- package/src/features/environment-lifecycle/application/use-cases/validateInfraEnvironmentAsync.ts +21 -0
- package/src/features/environment-lifecycle/composition/createInfraCommandServices.ts +47 -0
- package/src/features/environment-lifecycle/domain/orderInfraPlanActions.ts +64 -0
- package/src/features/environment-lifecycle/domain/resolveInfraEnvironment.ts +62 -0
- package/src/features/environment-lifecycle/utils/appendInfraFailure.ts +9 -0
- package/src/features/environment-lifecycle/utils/createInfraExecutionContext.ts +24 -0
- package/src/features/environment-lifecycle/utils/createInfraFailure.ts +6 -0
- package/src/features/environment-lifecycle/utils/createInfraLedger.ts +30 -0
- package/src/features/environment-lifecycle/utils/infraIdentityKey.ts +6 -0
- package/src/features/environment-lifecycle/utils/isInfraStoredState.ts +141 -0
- package/src/features/environment-lifecycle/utils/mergeInfraOutputs.ts +14 -0
- package/src/features/environment-lifecycle/utils/mergeInfraResources.ts +14 -0
- package/src/features/environment-lifecycle/utils/normalizeInfraEnvironmentKey.ts +7 -0
- package/src/features/environment-lifecycle/utils/resolveInfraStatePath.ts +12 -0
- package/src/features/environment-lifecycle/utils/resolveProjectFile.ts +22 -0
- package/src/features/environment-lifecycle/utils/retainUnchangedAdapterOutputs.ts +15 -0
- package/src/features/environment-lifecycle/utils/retainUnchangedAdapterResources.ts +15 -0
- package/src/index.test.ts +22 -315
- package/src/index.ts +41 -53
- package/src/infraComposition.integration.test.ts +128 -0
- package/src/infraOperations.test.ts +386 -0
- package/src/infraUp.test.ts +260 -0
- package/src/metadata/index.ts +1 -1
- package/src/package.test.ts +4 -2
- package/src/project/index.test.ts +8 -188
- package/src/project/index.ts +7 -22
- package/src/project.test.ts +39 -189
- package/src/projectContractsParser.test.ts +2 -2
- package/src/projectInfrastructure.test.ts +121 -167
- package/src/readme-usage.ts +17 -26
- package/src/testSupport.ts +12 -2
- package/src/types/infraCli.ts +115 -0
- package/src/types/infraOrchestration.ts +126 -0
- package/src/types/infraProject.ts +15 -0
- package/dist/adapters/minikube/auth/index.d.ts +0 -8
- package/dist/adapters/minikube/auth/index.d.ts.map +0 -1
- package/dist/adapters/minikube/auth/index.js +0 -29
- package/dist/adapters/minikube/auth/index.js.map +0 -1
- package/dist/adapters/minikube/auth/oauthRuntime.d.ts +0 -4
- package/dist/adapters/minikube/auth/oauthRuntime.d.ts.map +0 -1
- package/dist/adapters/minikube/auth/oauthRuntime.js +0 -138
- package/dist/adapters/minikube/auth/oauthRuntime.js.map +0 -1
- package/dist/adapters/minikube/auth/supabase/index.d.ts +0 -7
- package/dist/adapters/minikube/auth/supabase/index.d.ts.map +0 -1
- package/dist/adapters/minikube/auth/supabase/index.js +0 -232
- package/dist/adapters/minikube/auth/supabase/index.js.map +0 -1
- package/dist/adapters/minikube/auth/supabase/profile.d.ts +0 -20
- package/dist/adapters/minikube/auth/supabase/profile.d.ts.map +0 -1
- package/dist/adapters/minikube/auth/supabase/profile.js +0 -452
- package/dist/adapters/minikube/auth/supabase/profile.js.map +0 -1
- package/dist/adapters/minikube/auth/targetAwareOAuthRuntime.d.ts +0 -7
- package/dist/adapters/minikube/auth/targetAwareOAuthRuntime.d.ts.map +0 -1
- package/dist/adapters/minikube/auth/targetAwareOAuthRuntime.js +0 -104
- package/dist/adapters/minikube/auth/targetAwareOAuthRuntime.js.map +0 -1
- package/dist/adapters/minikube/authz/cerbos/index.d.ts +0 -13
- package/dist/adapters/minikube/authz/cerbos/index.d.ts.map +0 -1
- package/dist/adapters/minikube/authz/cerbos/index.js +0 -382
- package/dist/adapters/minikube/authz/cerbos/index.js.map +0 -1
- package/dist/adapters/minikube/authz/index.d.ts +0 -9
- package/dist/adapters/minikube/authz/index.d.ts.map +0 -1
- package/dist/adapters/minikube/authz/index.js +0 -23
- package/dist/adapters/minikube/authz/index.js.map +0 -1
- package/dist/adapters/minikube/base/index.d.ts +0 -14
- package/dist/adapters/minikube/base/index.d.ts.map +0 -1
- package/dist/adapters/minikube/base/index.js +0 -3433
- package/dist/adapters/minikube/base/index.js.map +0 -1
- package/dist/adapters/minikube/base/supabaseMigrations.d.ts +0 -2
- package/dist/adapters/minikube/base/supabaseMigrations.d.ts.map +0 -1
- package/dist/adapters/minikube/base/supabaseMigrations.js +0 -6
- package/dist/adapters/minikube/base/supabaseMigrations.js.map +0 -1
- package/dist/adapters/minikube/contracts.d.ts +0 -34
- package/dist/adapters/minikube/contracts.d.ts.map +0 -1
- package/dist/adapters/minikube/contracts.js +0 -10
- package/dist/adapters/minikube/contracts.js.map +0 -1
- package/dist/adapters/minikube/index.d.ts +0 -3
- package/dist/adapters/minikube/index.d.ts.map +0 -1
- package/dist/adapters/minikube/index.js +0 -136
- package/dist/adapters/minikube/index.js.map +0 -1
- package/dist/adapters/minikube/secrets/index.d.ts +0 -7
- package/dist/adapters/minikube/secrets/index.d.ts.map +0 -1
- package/dist/adapters/minikube/secrets/index.js +0 -13
- package/dist/adapters/minikube/secrets/index.js.map +0 -1
- package/dist/adapters/minikube/secrets/supabase-vault/index.d.ts +0 -8
- package/dist/adapters/minikube/secrets/supabase-vault/index.d.ts.map +0 -1
- package/dist/adapters/minikube/secrets/supabase-vault/index.js +0 -118
- package/dist/adapters/minikube/secrets/supabase-vault/index.js.map +0 -1
- package/dist/adapters/minikube/storage/index.d.ts +0 -7
- package/dist/adapters/minikube/storage/index.d.ts.map +0 -1
- package/dist/adapters/minikube/storage/index.js +0 -77
- package/dist/adapters/minikube/storage/index.js.map +0 -1
- package/dist/adapters/minikube/storage/supabase/index.d.ts +0 -7
- package/dist/adapters/minikube/storage/supabase/index.d.ts.map +0 -1
- package/dist/adapters/minikube/storage/supabase/index.js +0 -82
- package/dist/adapters/minikube/storage/supabase/index.js.map +0 -1
- package/dist/authRedirects.d.ts +0 -19
- package/dist/authRedirects.d.ts.map +0 -1
- package/dist/authRedirects.js +0 -80
- package/dist/authRedirects.js.map +0 -1
- package/dist/authTargetRedirects.d.ts +0 -12
- package/dist/authTargetRedirects.d.ts.map +0 -1
- package/dist/authTargetRedirects.js +0 -32
- package/dist/authTargetRedirects.js.map +0 -1
- package/dist/commandContext.d.ts +0 -12
- package/dist/commandContext.d.ts.map +0 -1
- package/dist/commandContext.js.map +0 -1
- package/dist/commands.d.ts +0 -95
- package/dist/commands.d.ts.map +0 -1
- package/dist/commands.js +0 -256
- package/dist/commands.js.map +0 -1
- package/dist/infraValidation.d.ts +0 -4
- package/dist/infraValidation.d.ts.map +0 -1
- package/dist/infraValidation.js +0 -63
- package/dist/infraValidation.js.map +0 -1
- package/dist/packageMetadata.d.ts +0 -10
- package/dist/packageMetadata.d.ts.map +0 -1
- package/dist/packageMetadata.js.map +0 -1
- package/dist/project.d.ts.map +0 -1
- package/dist/project.js.map +0 -1
- package/dist/projectDatabase.d.ts +0 -5
- package/dist/projectDatabase.d.ts.map +0 -1
- package/dist/projectDatabase.js +0 -22
- package/dist/projectDatabase.js.map +0 -1
- package/dist/projectEnvironment.d.ts +0 -6
- package/dist/projectEnvironment.d.ts.map +0 -1
- package/dist/projectEnvironment.js +0 -45
- package/dist/projectEnvironment.js.map +0 -1
- package/dist/projectInfrastructure.d.ts +0 -38
- package/dist/projectInfrastructure.d.ts.map +0 -1
- package/dist/projectInfrastructure.js +0 -145
- package/dist/projectInfrastructure.js.map +0 -1
- package/dist/runtime.d.ts +0 -54
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js +0 -151
- package/dist/runtime.js.map +0 -1
- package/dist/secretStore.d.ts +0 -19
- package/dist/secretStore.d.ts.map +0 -1
- package/dist/secretStore.js +0 -22
- package/dist/secretStore.js.map +0 -1
- package/dist/types.d.ts +0 -70
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/src/adapters/minikube/README.md +0 -115
- package/src/adapters/minikube/appRuntimeServing.test.ts +0 -28
- package/src/adapters/minikube/auth/index.ts +0 -40
- package/src/adapters/minikube/auth/oauthRuntime.ts +0 -163
- package/src/adapters/minikube/auth/supabase/index.test.ts +0 -227
- package/src/adapters/minikube/auth/supabase/index.ts +0 -293
- package/src/adapters/minikube/auth/supabase/oauthRuntime.test.ts +0 -154
- package/src/adapters/minikube/auth/supabase/profile.integration.test.ts +0 -1028
- package/src/adapters/minikube/auth/supabase/profile.ts +0 -526
- package/src/adapters/minikube/auth/supabase/providerAssignments.test.ts +0 -36
- package/src/adapters/minikube/auth/targetAwareOAuthRuntime.test.ts +0 -83
- package/src/adapters/minikube/auth/targetAwareOAuthRuntime.ts +0 -136
- package/src/adapters/minikube/authz/cerbos/index.ts +0 -486
- package/src/adapters/minikube/authz/index.ts +0 -32
- package/src/adapters/minikube/base/appImageBuild.test.ts +0 -352
- package/src/adapters/minikube/base/index.test.ts +0 -693
- package/src/adapters/minikube/base/index.ts +0 -3763
- package/src/adapters/minikube/base/portForwardRuntime.test.ts +0 -624
- package/src/adapters/minikube/base/supabaseMigrations.test.ts +0 -168
- package/src/adapters/minikube/base/supabaseMigrations.ts +0 -5
- package/src/adapters/minikube/base/twoAppIsolation.integration.test.ts +0 -898
- package/src/adapters/minikube/base/upgradeReconciliation.test.ts +0 -135
- package/src/adapters/minikube/contracts.ts +0 -46
- package/src/adapters/minikube/index.ts +0 -172
- package/src/adapters/minikube/secrets/index.test.ts +0 -147
- package/src/adapters/minikube/secrets/index.ts +0 -19
- package/src/adapters/minikube/secrets/supabase-vault/index.ts +0 -139
- package/src/adapters/minikube/storage/index.ts +0 -91
- package/src/adapters/minikube/storage/supabase/index.ts +0 -108
- package/src/apiInfrastructure.test.ts +0 -69
- package/src/authRedirects.test.ts +0 -63
- package/src/authRedirects.ts +0 -113
- package/src/authTargetRedirects.test.ts +0 -62
- package/src/authTargetRedirects.ts +0 -46
- package/src/commandContext.ts +0 -27
- package/src/commands.ts +0 -404
- package/src/generatedApiLedgerCleanup.test.ts +0 -72
- package/src/infraApiValidation.test.ts +0 -42
- package/src/infraValidation.ts +0 -99
- package/src/minikubeImageLifecycle.test.ts +0 -35
- package/src/projectDatabase.ts +0 -27
- package/src/projectEnvironment.ts +0 -51
- package/src/projectInfrastructure.ts +0 -221
- package/src/runtime.test.ts +0 -124
- package/src/runtime.ts +0 -234
- package/src/secretStore.test.ts +0 -76
- package/src/secretStore.ts +0 -44
- package/src/types.ts +0 -82
package/dist/features/environment-lifecycle/application/use-cases/resolveInfraAdaptersAsync.js
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { INFRA_ADAPTER_CATALOG, isInfraAdapterDescriptor, validateInfraAdapterSelection, } from '@ankhorage/contracts/infra';
|
|
2
|
+
/*** Resolve exactly the selected provider packages and validate their public adapter boundaries. */
|
|
3
|
+
export async function resolveInfraAdaptersAsync(environment, resolver) {
|
|
4
|
+
const entries = getSelectedCatalogEntries(environment);
|
|
5
|
+
const modules = await Promise.all(entries.map(async (entry) => loadModuleAsync(entry.package, resolver)));
|
|
6
|
+
const loadingDiagnostics = modules.flatMap((result) => result.diagnostics);
|
|
7
|
+
if (loadingDiagnostics.length > 0)
|
|
8
|
+
return { ok: false, diagnostics: loadingDiagnostics };
|
|
9
|
+
const loaded = modules.flatMap((result) => (result.ok ? [result.value] : []));
|
|
10
|
+
const selection = validateInfraAdapterSelection(environment, loaded.map(({ infraAdapterDescriptor }) => infraAdapterDescriptor));
|
|
11
|
+
if (!selection.ok)
|
|
12
|
+
return selection;
|
|
13
|
+
const instantiated = instantiateModules(loaded);
|
|
14
|
+
if (!instantiated.ok)
|
|
15
|
+
return instantiated;
|
|
16
|
+
const instances = instantiated.value;
|
|
17
|
+
const compute = instances.find(isComputeAdapter);
|
|
18
|
+
const runtime = instances.find(isRuntimeAdapter);
|
|
19
|
+
const services = instances.filter(isServiceAdapter);
|
|
20
|
+
const diagnostics = validateInstances(compute, runtime, services, selection.value);
|
|
21
|
+
return diagnostics.length > 0 || compute === undefined || runtime === undefined
|
|
22
|
+
? { ok: false, diagnostics }
|
|
23
|
+
: {
|
|
24
|
+
ok: true,
|
|
25
|
+
value: { compute, runtime, services: orderServiceAdapters(services) },
|
|
26
|
+
diagnostics: [],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/*** Order services by selected capability dependencies while preserving catalog order for peers. */
|
|
30
|
+
function orderServiceAdapters(services) {
|
|
31
|
+
const pending = [...services];
|
|
32
|
+
const ordered = [];
|
|
33
|
+
const provided = new Set(['compute', 'runtime', 'workloads', 'networking']);
|
|
34
|
+
while (pending.length > 0) {
|
|
35
|
+
const index = pending.findIndex((service) => service.descriptor.dependencies.every((dependency) => provided.has(dependency) ||
|
|
36
|
+
!services.some(({ descriptor }) => hasCapability(descriptor, dependency))));
|
|
37
|
+
if (index < 0)
|
|
38
|
+
return services;
|
|
39
|
+
const [service] = pending.splice(index, 1);
|
|
40
|
+
if (service === undefined)
|
|
41
|
+
return services;
|
|
42
|
+
ordered.push(service);
|
|
43
|
+
for (const capability of service.descriptor.capabilities)
|
|
44
|
+
provided.add(capability);
|
|
45
|
+
}
|
|
46
|
+
return ordered;
|
|
47
|
+
}
|
|
48
|
+
/*** Compare catalog capability values across descriptor union members. */
|
|
49
|
+
function hasCapability(descriptor, capability) {
|
|
50
|
+
return descriptor.capabilities.includes(capability);
|
|
51
|
+
}
|
|
52
|
+
/*** Invoke selected factories safely and require their instances to match the module descriptor. */
|
|
53
|
+
function instantiateModules(modules) {
|
|
54
|
+
const instances = [];
|
|
55
|
+
const diagnostics = [];
|
|
56
|
+
for (const module of modules) {
|
|
57
|
+
try {
|
|
58
|
+
const instance = module.createInfraAdapter();
|
|
59
|
+
if (!isAdapterForDescriptor(instance, module.infraAdapterDescriptor)) {
|
|
60
|
+
diagnostics.push(instanceDiagnostic(module.infraAdapterDescriptor.id, `Selected adapter factory for ${module.infraAdapterDescriptor.package} returned a mismatched lifecycle implementation.`));
|
|
61
|
+
}
|
|
62
|
+
else
|
|
63
|
+
instances.push(instance);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
diagnostics.push(instanceDiagnostic(module.infraAdapterDescriptor.id, `Selected adapter factory for ${module.infraAdapterDescriptor.package} could not be created.`));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return diagnostics.length > 0
|
|
70
|
+
? { ok: false, diagnostics }
|
|
71
|
+
: { ok: true, value: instances, diagnostics: [] };
|
|
72
|
+
}
|
|
73
|
+
/*** Select each configured adapter once, including multi-capability service providers. */
|
|
74
|
+
function getSelectedCatalogEntries(environment) {
|
|
75
|
+
const ids = new Set([
|
|
76
|
+
environment.deployment.compute.provider,
|
|
77
|
+
environment.deployment.runtime.provider,
|
|
78
|
+
environment.database?.provider,
|
|
79
|
+
environment.objectStorage?.provider,
|
|
80
|
+
environment.auth?.provider,
|
|
81
|
+
environment.authz?.provider,
|
|
82
|
+
environment.secretStore?.provider,
|
|
83
|
+
]);
|
|
84
|
+
return Object.values(INFRA_ADAPTER_CATALOG).filter((entry) => ids.has(entry.id));
|
|
85
|
+
}
|
|
86
|
+
/*** Convert module-resolution errors into provider-safe diagnostics without importing alternatives. */
|
|
87
|
+
async function loadModuleAsync(packageName, resolver) {
|
|
88
|
+
try {
|
|
89
|
+
const loaded = await resolver.loadAsync(packageName);
|
|
90
|
+
return isInfraAdapterPackageModule(loaded)
|
|
91
|
+
? { ok: true, value: loaded, diagnostics: [] }
|
|
92
|
+
: adapterFailure('infra-adapter-module-invalid', `Selected adapter package ${packageName} does not export its canonical descriptor and factory.`);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return adapterFailure('infra-adapter-package-unavailable', `Selected adapter package ${packageName} could not be loaded.`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/*** Validate the runtime shape of a dynamically loaded provider package. */
|
|
99
|
+
function isInfraAdapterPackageModule(value) {
|
|
100
|
+
return (isRecord(value) &&
|
|
101
|
+
isInfraAdapterDescriptor(value.infraAdapterDescriptor) &&
|
|
102
|
+
typeof value.createInfraAdapter === 'function');
|
|
103
|
+
}
|
|
104
|
+
/*** Validate one compute adapter instance without trusting a dynamic module cast. */
|
|
105
|
+
function isComputeAdapter(value) {
|
|
106
|
+
return hasAdapterMethods(value, 'compute', [
|
|
107
|
+
'validateAsync',
|
|
108
|
+
'inspectAsync',
|
|
109
|
+
'planAsync',
|
|
110
|
+
'ensureAsync',
|
|
111
|
+
'statusAsync',
|
|
112
|
+
'destroyAsync',
|
|
113
|
+
]);
|
|
114
|
+
}
|
|
115
|
+
/*** Validate one runtime adapter instance without trusting a dynamic module cast. */
|
|
116
|
+
function isRuntimeAdapter(value) {
|
|
117
|
+
return hasAdapterMethods(value, 'runtime', [
|
|
118
|
+
'validateAsync',
|
|
119
|
+
'planAsync',
|
|
120
|
+
'ensureAsync',
|
|
121
|
+
'statusAsync',
|
|
122
|
+
'suspendAsync',
|
|
123
|
+
'destroyAsync',
|
|
124
|
+
]);
|
|
125
|
+
}
|
|
126
|
+
/*** Validate one service adapter instance without trusting a dynamic module cast. */
|
|
127
|
+
function isServiceAdapter(value) {
|
|
128
|
+
return hasAdapterMethods(value, 'service', [
|
|
129
|
+
'validateAsync',
|
|
130
|
+
'planAsync',
|
|
131
|
+
'desiredWorkloadsAsync',
|
|
132
|
+
'reconcileAsync',
|
|
133
|
+
'statusAsync',
|
|
134
|
+
'destroyAsync',
|
|
135
|
+
]);
|
|
136
|
+
}
|
|
137
|
+
/*** Match a factory result to the exact descriptor selected from its module. */
|
|
138
|
+
function isAdapterForDescriptor(value, expected) {
|
|
139
|
+
const validShape = expected.kind === 'compute'
|
|
140
|
+
? isComputeAdapter(value)
|
|
141
|
+
: expected.kind === 'runtime'
|
|
142
|
+
? isRuntimeAdapter(value)
|
|
143
|
+
: isServiceAdapter(value);
|
|
144
|
+
return (validShape &&
|
|
145
|
+
isRecord(value) &&
|
|
146
|
+
isInfraAdapterDescriptor(value.descriptor) &&
|
|
147
|
+
value.descriptor.id === expected.id &&
|
|
148
|
+
value.descriptor.package === expected.package);
|
|
149
|
+
}
|
|
150
|
+
/*** Check a dynamic adapter descriptor kind and its required lifecycle methods. */
|
|
151
|
+
function hasAdapterMethods(value, kind, methods) {
|
|
152
|
+
return (isRecord(value) &&
|
|
153
|
+
isInfraAdapterDescriptor(value.descriptor) &&
|
|
154
|
+
value.descriptor.kind === kind &&
|
|
155
|
+
methods.every((method) => typeof Reflect.get(value, method) === 'function'));
|
|
156
|
+
}
|
|
157
|
+
/*** Ensure factories returned exactly one matching compute/runtime adapter and every service. */
|
|
158
|
+
function validateInstances(compute, runtime, services, descriptors) {
|
|
159
|
+
const expectedServices = descriptors.filter(({ kind }) => kind === 'service').length;
|
|
160
|
+
const diagnostics = [];
|
|
161
|
+
if (compute === undefined)
|
|
162
|
+
diagnostics.push(instanceDiagnostic('compute', 'Selected compute adapter factory is invalid.'));
|
|
163
|
+
if (runtime === undefined)
|
|
164
|
+
diagnostics.push(instanceDiagnostic('runtime', 'Selected runtime adapter factory is invalid.'));
|
|
165
|
+
if (services.length !== expectedServices)
|
|
166
|
+
diagnostics.push(instanceDiagnostic('service', 'A selected service adapter factory is invalid.'));
|
|
167
|
+
return diagnostics;
|
|
168
|
+
}
|
|
169
|
+
/*** Create an adapter-factory diagnostic without exposing module exception details. */
|
|
170
|
+
function instanceDiagnostic(kind, message) {
|
|
171
|
+
return { severity: 'error', code: `infra-${kind}-adapter-invalid`, message };
|
|
172
|
+
}
|
|
173
|
+
/*** Create a failed adapter resolution result. */
|
|
174
|
+
function adapterFailure(code, message) {
|
|
175
|
+
return { ok: false, diagnostics: [{ severity: 'error', code, message }] };
|
|
176
|
+
}
|
|
177
|
+
/*** Narrow dynamically loaded module and adapter values. */
|
|
178
|
+
function isRecord(value) {
|
|
179
|
+
return typeof value === 'object' && value !== null;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=resolveInfraAdaptersAsync.js.map
|
package/dist/features/environment-lifecycle/application/use-cases/resolveInfraAdaptersAsync.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveInfraAdaptersAsync.js","sourceRoot":"","sources":["../../../../../src/features/environment-lifecycle/application/use-cases/resolveInfraAdaptersAsync.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n INFRA_ADAPTER_CATALOG,\n type InfraAdapterDescriptor,\n type InfraComputeAdapter,\n type InfraDiagnostic,\n type InfraEnvironmentSpec,\n type InfraResult,\n type InfraRuntimeAdapter,\n type InfraServiceAdapter,\n isInfraAdapterDescriptor,\n validateInfraAdapterSelection,\n} from '@ankhorage/contracts/infra';\n\nimport type { ResolvedInfraAdapters } from '../../../../types/infraOrchestration.js';\nimport type {\n InfraAdapterPackageModule,\n InfraAdapterPackageResolver,\n} from '../ports/outbound/infraAdapterPackage.js';\n\n/*** Resolve exactly the selected provider packages and validate their public adapter boundaries. */\nexport async function resolveInfraAdaptersAsync(\n environment: InfraEnvironmentSpec,\n resolver: InfraAdapterPackageResolver,\n): Promise<InfraResult<ResolvedInfraAdapters>> {\n const entries = getSelectedCatalogEntries(environment);\n const modules = await Promise.all(\n entries.map(async (entry) => loadModuleAsync(entry.package, resolver)),\n );\n const loadingDiagnostics = modules.flatMap((result) => result.diagnostics);\n if (loadingDiagnostics.length > 0) return { ok: false, diagnostics: loadingDiagnostics };\n const loaded = modules.flatMap((result) => (result.ok ? [result.value] : []));\n const selection = validateInfraAdapterSelection(\n environment,\n loaded.map(({ infraAdapterDescriptor }) => infraAdapterDescriptor),\n );\n if (!selection.ok) return selection;\n const instantiated = instantiateModules(loaded);\n if (!instantiated.ok) return instantiated;\n const instances = instantiated.value;\n const compute = instances.find(isComputeAdapter);\n const runtime = instances.find(isRuntimeAdapter);\n const services = instances.filter(isServiceAdapter);\n const diagnostics = validateInstances(compute, runtime, services, selection.value);\n return diagnostics.length > 0 || compute === undefined || runtime === undefined\n ? { ok: false, diagnostics }\n : {\n ok: true,\n value: { compute, runtime, services: orderServiceAdapters(services) },\n diagnostics: [],\n };\n}\n\n/*** Order services by selected capability dependencies while preserving catalog order for peers. */\nfunction orderServiceAdapters(\n services: readonly InfraServiceAdapter[],\n): readonly InfraServiceAdapter[] {\n const pending = [...services];\n const ordered: InfraServiceAdapter[] = [];\n const provided = new Set<string>(['compute', 'runtime', 'workloads', 'networking']);\n while (pending.length > 0) {\n const index = pending.findIndex((service) =>\n service.descriptor.dependencies.every(\n (dependency) =>\n provided.has(dependency) ||\n !services.some(({ descriptor }) => hasCapability(descriptor, dependency)),\n ),\n );\n if (index < 0) return services;\n const [service] = pending.splice(index, 1);\n if (service === undefined) return services;\n ordered.push(service);\n for (const capability of service.descriptor.capabilities) provided.add(capability);\n }\n return ordered;\n}\n\n/*** Compare catalog capability values across descriptor union members. */\nfunction hasCapability(descriptor: InfraAdapterDescriptor, capability: string): boolean {\n return (descriptor.capabilities as readonly string[]).includes(capability);\n}\n\n/*** Invoke selected factories safely and require their instances to match the module descriptor. */\nfunction instantiateModules(\n modules: readonly InfraAdapterPackageModule[],\n): InfraResult<readonly unknown[]> {\n const instances: unknown[] = [];\n const diagnostics: InfraDiagnostic[] = [];\n for (const module of modules) {\n try {\n const instance = module.createInfraAdapter();\n if (!isAdapterForDescriptor(instance, module.infraAdapterDescriptor)) {\n diagnostics.push(\n instanceDiagnostic(\n module.infraAdapterDescriptor.id,\n `Selected adapter factory for ${module.infraAdapterDescriptor.package} returned a mismatched lifecycle implementation.`,\n ),\n );\n } else instances.push(instance);\n } catch {\n diagnostics.push(\n instanceDiagnostic(\n module.infraAdapterDescriptor.id,\n `Selected adapter factory for ${module.infraAdapterDescriptor.package} could not be created.`,\n ),\n );\n }\n }\n return diagnostics.length > 0\n ? { ok: false, diagnostics }\n : { ok: true, value: instances, diagnostics: [] };\n}\n\n/*** Select each configured adapter once, including multi-capability service providers. */\nfunction getSelectedCatalogEntries(environment: InfraEnvironmentSpec) {\n const ids = new Set([\n environment.deployment.compute.provider,\n environment.deployment.runtime.provider,\n environment.database?.provider,\n environment.objectStorage?.provider,\n environment.auth?.provider,\n environment.authz?.provider,\n environment.secretStore?.provider,\n ]);\n return Object.values(INFRA_ADAPTER_CATALOG).filter((entry) => ids.has(entry.id));\n}\n\n/*** Convert module-resolution errors into provider-safe diagnostics without importing alternatives. */\nasync function loadModuleAsync(\n packageName: string,\n resolver: InfraAdapterPackageResolver,\n): Promise<InfraResult<InfraAdapterPackageModule>> {\n try {\n const loaded: unknown = await resolver.loadAsync(packageName);\n return isInfraAdapterPackageModule(loaded)\n ? { ok: true, value: loaded, diagnostics: [] }\n : adapterFailure(\n 'infra-adapter-module-invalid',\n `Selected adapter package ${packageName} does not export its canonical descriptor and factory.`,\n );\n } catch {\n return adapterFailure(\n 'infra-adapter-package-unavailable',\n `Selected adapter package ${packageName} could not be loaded.`,\n );\n }\n}\n\n/*** Validate the runtime shape of a dynamically loaded provider package. */\nfunction isInfraAdapterPackageModule(value: unknown): value is InfraAdapterPackageModule {\n return (\n isRecord(value) &&\n isInfraAdapterDescriptor(value.infraAdapterDescriptor) &&\n typeof value.createInfraAdapter === 'function'\n );\n}\n\n/*** Validate one compute adapter instance without trusting a dynamic module cast. */\nfunction isComputeAdapter(value: unknown): value is InfraComputeAdapter {\n return hasAdapterMethods(value, 'compute', [\n 'validateAsync',\n 'inspectAsync',\n 'planAsync',\n 'ensureAsync',\n 'statusAsync',\n 'destroyAsync',\n ]);\n}\n\n/*** Validate one runtime adapter instance without trusting a dynamic module cast. */\nfunction isRuntimeAdapter(value: unknown): value is InfraRuntimeAdapter {\n return hasAdapterMethods(value, 'runtime', [\n 'validateAsync',\n 'planAsync',\n 'ensureAsync',\n 'statusAsync',\n 'suspendAsync',\n 'destroyAsync',\n ]);\n}\n\n/*** Validate one service adapter instance without trusting a dynamic module cast. */\nfunction isServiceAdapter(value: unknown): value is InfraServiceAdapter {\n return hasAdapterMethods(value, 'service', [\n 'validateAsync',\n 'planAsync',\n 'desiredWorkloadsAsync',\n 'reconcileAsync',\n 'statusAsync',\n 'destroyAsync',\n ]);\n}\n\n/*** Match a factory result to the exact descriptor selected from its module. */\nfunction isAdapterForDescriptor(value: unknown, expected: InfraAdapterDescriptor): boolean {\n const validShape =\n expected.kind === 'compute'\n ? isComputeAdapter(value)\n : expected.kind === 'runtime'\n ? isRuntimeAdapter(value)\n : isServiceAdapter(value);\n return (\n validShape &&\n isRecord(value) &&\n isInfraAdapterDescriptor(value.descriptor) &&\n value.descriptor.id === expected.id &&\n value.descriptor.package === expected.package\n );\n}\n\n/*** Check a dynamic adapter descriptor kind and its required lifecycle methods. */\nfunction hasAdapterMethods(\n value: unknown,\n kind: InfraAdapterDescriptor['kind'],\n methods: readonly string[],\n): boolean {\n return (\n isRecord(value) &&\n isInfraAdapterDescriptor(value.descriptor) &&\n value.descriptor.kind === kind &&\n methods.every((method) => typeof Reflect.get(value, method) === 'function')\n );\n}\n\n/*** Ensure factories returned exactly one matching compute/runtime adapter and every service. */\nfunction validateInstances(\n compute: InfraComputeAdapter | undefined,\n runtime: InfraRuntimeAdapter | undefined,\n services: readonly InfraServiceAdapter[],\n descriptors: readonly InfraAdapterDescriptor[],\n): readonly InfraDiagnostic[] {\n const expectedServices = descriptors.filter(({ kind }) => kind === 'service').length;\n const diagnostics: InfraDiagnostic[] = [];\n if (compute === undefined)\n diagnostics.push(instanceDiagnostic('compute', 'Selected compute adapter factory is invalid.'));\n if (runtime === undefined)\n diagnostics.push(instanceDiagnostic('runtime', 'Selected runtime adapter factory is invalid.'));\n if (services.length !== expectedServices)\n diagnostics.push(\n instanceDiagnostic('service', 'A selected service adapter factory is invalid.'),\n );\n return diagnostics;\n}\n\n/*** Create an adapter-factory diagnostic without exposing module exception details. */\nfunction instanceDiagnostic(kind: string, message: string): InfraDiagnostic {\n return { severity: 'error', code: `infra-${kind}-adapter-invalid`, message };\n}\n\n/*** Create a failed adapter resolution result. */\nfunction adapterFailure(code: string, message: string): InfraResult<never> {\n return { ok: false, diagnostics: [{ severity: 'error', code, message }] };\n}\n\n/*** Narrow dynamically loaded module and adapter values. */\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === 'object' && value !== null;\n}\n"]}
|
package/dist/features/environment-lifecycle/application/use-cases/statusInfraEnvironmentAsync.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { InfraOperationRequest, InfraOrchestrationDependencies, InfraStatusOperationResult } from '../../../../types/infraOrchestration.js';
|
|
2
|
+
/*** Aggregate provider-neutral compute, runtime and service status. */
|
|
3
|
+
export declare function statusInfraEnvironmentAsync(request: InfraOperationRequest, dependencies: InfraOrchestrationDependencies): Promise<InfraStatusOperationResult>;
|
|
4
|
+
//# sourceMappingURL=statusInfraEnvironmentAsync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusInfraEnvironmentAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/environment-lifecycle/application/use-cases/statusInfraEnvironmentAsync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,qBAAqB,EACrB,8BAA8B,EAC9B,0BAA0B,EAC3B,MAAM,yCAAyC,CAAC;AAIjD,uEAAuE;AACvE,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,qBAAqB,EAC9B,YAAY,EAAE,8BAA8B,GAC3C,OAAO,CAAC,0BAA0B,CAAC,CA6CrC"}
|
package/dist/features/environment-lifecycle/application/use-cases/statusInfraEnvironmentAsync.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { appendInfraFailure } from '../../utils/appendInfraFailure.js';
|
|
2
|
+
import { prepareInfraOperationAsync } from './prepareInfraOperationAsync.js';
|
|
3
|
+
/*** Aggregate provider-neutral compute, runtime and service status. */
|
|
4
|
+
export async function statusInfraEnvironmentAsync(request, dependencies) {
|
|
5
|
+
const prepared = await prepareInfraOperationAsync(request, 'status', dependencies);
|
|
6
|
+
if (!prepared.ok)
|
|
7
|
+
return prepared;
|
|
8
|
+
const diagnostics = [...prepared.diagnostics];
|
|
9
|
+
const resources = [];
|
|
10
|
+
const compute = await prepared.value.adapters.compute.statusAsync(prepared.value.context);
|
|
11
|
+
if (!compute.ok)
|
|
12
|
+
return appendInfraFailure(diagnostics, compute);
|
|
13
|
+
resources.push(...compute.value);
|
|
14
|
+
diagnostics.push(...compute.diagnostics);
|
|
15
|
+
if (prepared.value.runtimeDesired.targets.length === 0) {
|
|
16
|
+
resources.push({
|
|
17
|
+
owner: {
|
|
18
|
+
projectId: request.projectId,
|
|
19
|
+
environment: prepared.value.environment.id,
|
|
20
|
+
adapter: prepared.value.adapters.runtime.descriptor.id,
|
|
21
|
+
resourceId: 'runtime',
|
|
22
|
+
},
|
|
23
|
+
state: 'absent',
|
|
24
|
+
detail: 'Compute has not exposed a portable runtime target.',
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
const runtime = await prepared.value.adapters.runtime.statusAsync(prepared.value.context, prepared.value.runtimeDesired);
|
|
29
|
+
if (!runtime.ok)
|
|
30
|
+
return appendInfraFailure(diagnostics, runtime);
|
|
31
|
+
resources.push(...runtime.value);
|
|
32
|
+
diagnostics.push(...runtime.diagnostics);
|
|
33
|
+
}
|
|
34
|
+
for (const service of prepared.value.adapters.services) {
|
|
35
|
+
const status = await service.statusAsync(prepared.value.context);
|
|
36
|
+
if (!status.ok)
|
|
37
|
+
return appendInfraFailure(diagnostics, status);
|
|
38
|
+
resources.push(...status.value);
|
|
39
|
+
diagnostics.push(...status.diagnostics);
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
ok: true,
|
|
43
|
+
value: {
|
|
44
|
+
projectId: request.projectId,
|
|
45
|
+
environment: prepared.value.environment.id,
|
|
46
|
+
state: aggregateInfraStatus(resources),
|
|
47
|
+
resources,
|
|
48
|
+
},
|
|
49
|
+
diagnostics,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/*** Select the most actionable canonical status, treating an empty environment as absent. */
|
|
53
|
+
function aggregateInfraStatus(resources) {
|
|
54
|
+
if (resources.length === 0)
|
|
55
|
+
return 'absent';
|
|
56
|
+
const severity = [
|
|
57
|
+
'failed',
|
|
58
|
+
'degraded',
|
|
59
|
+
'pending',
|
|
60
|
+
'unknown',
|
|
61
|
+
'stopped',
|
|
62
|
+
'retained',
|
|
63
|
+
'absent',
|
|
64
|
+
'ready',
|
|
65
|
+
];
|
|
66
|
+
return (severity.find((state) => resources.some((resource) => resource.state === state)) ?? 'unknown');
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=statusInfraEnvironmentAsync.js.map
|
package/dist/features/environment-lifecycle/application/use-cases/statusInfraEnvironmentAsync.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusInfraEnvironmentAsync.js","sourceRoot":"","sources":["../../../../../src/features/environment-lifecycle/application/use-cases/statusInfraEnvironmentAsync.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InfraDiagnostic, InfraResourceStatus } from '@ankhorage/contracts/infra';\n\nimport type {\n InfraOperationRequest,\n InfraOrchestrationDependencies,\n InfraStatusOperationResult,\n} from '../../../../types/infraOrchestration.js';\nimport { appendInfraFailure } from '../../utils/appendInfraFailure.js';\nimport { prepareInfraOperationAsync } from './prepareInfraOperationAsync.js';\n\n/*** Aggregate provider-neutral compute, runtime and service status. */\nexport async function statusInfraEnvironmentAsync(\n request: InfraOperationRequest,\n dependencies: InfraOrchestrationDependencies,\n): Promise<InfraStatusOperationResult> {\n const prepared = await prepareInfraOperationAsync(request, 'status', dependencies);\n if (!prepared.ok) return prepared;\n const diagnostics: InfraDiagnostic[] = [...prepared.diagnostics];\n const resources: InfraResourceStatus[] = [];\n const compute = await prepared.value.adapters.compute.statusAsync(prepared.value.context);\n if (!compute.ok) return appendInfraFailure(diagnostics, compute);\n resources.push(...compute.value);\n diagnostics.push(...compute.diagnostics);\n if (prepared.value.runtimeDesired.targets.length === 0) {\n resources.push({\n owner: {\n projectId: request.projectId,\n environment: prepared.value.environment.id,\n adapter: prepared.value.adapters.runtime.descriptor.id,\n resourceId: 'runtime',\n },\n state: 'absent',\n detail: 'Compute has not exposed a portable runtime target.',\n });\n } else {\n const runtime = await prepared.value.adapters.runtime.statusAsync(\n prepared.value.context,\n prepared.value.runtimeDesired,\n );\n if (!runtime.ok) return appendInfraFailure(diagnostics, runtime);\n resources.push(...runtime.value);\n diagnostics.push(...runtime.diagnostics);\n }\n for (const service of prepared.value.adapters.services) {\n const status = await service.statusAsync(prepared.value.context);\n if (!status.ok) return appendInfraFailure(diagnostics, status);\n resources.push(...status.value);\n diagnostics.push(...status.diagnostics);\n }\n return {\n ok: true,\n value: {\n projectId: request.projectId,\n environment: prepared.value.environment.id,\n state: aggregateInfraStatus(resources),\n resources,\n },\n diagnostics,\n };\n}\n\n/*** Select the most actionable canonical status, treating an empty environment as absent. */\nfunction aggregateInfraStatus(\n resources: readonly InfraResourceStatus[],\n): InfraResourceStatus['state'] {\n if (resources.length === 0) return 'absent';\n const severity: readonly InfraResourceStatus['state'][] = [\n 'failed',\n 'degraded',\n 'pending',\n 'unknown',\n 'stopped',\n 'retained',\n 'absent',\n 'ready',\n ];\n return (\n severity.find((state) => resources.some((resource) => resource.state === state)) ?? 'unknown'\n );\n}\n"]}
|
package/dist/features/environment-lifecycle/application/use-cases/upInfraEnvironmentAsync.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { InfraOrchestrationDependencies, InfraUpOperationResult, InfraUpRequest } from '../../../../types/infraOrchestration.js';
|
|
2
|
+
/*** Validate and reconcile compute, contributed workloads, runtime and services in dependency order. */
|
|
3
|
+
export declare function upInfraEnvironmentAsync(request: InfraUpRequest, dependencies: InfraOrchestrationDependencies): Promise<InfraUpOperationResult>;
|
|
4
|
+
//# sourceMappingURL=upInfraEnvironmentAsync.d.ts.map
|
package/dist/features/environment-lifecycle/application/use-cases/upInfraEnvironmentAsync.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upInfraEnvironmentAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/environment-lifecycle/application/use-cases/upInfraEnvironmentAsync.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,8BAA8B,EAC9B,sBAAsB,EACtB,cAAc,EACf,MAAM,yCAAyC,CAAC;AAUjD,wGAAwG;AACxG,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,8BAA8B,GAC3C,OAAO,CAAC,sBAAsB,CAAC,CA0EjC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { resolveInfraEnvironment } from '../../domain/resolveInfraEnvironment.js';
|
|
2
|
+
import { appendInfraFailure } from '../../utils/appendInfraFailure.js';
|
|
3
|
+
import { createInfraExecutionContext } from '../../utils/createInfraExecutionContext.js';
|
|
4
|
+
import { createInfraLedger } from '../../utils/createInfraLedger.js';
|
|
5
|
+
import { mergeInfraOutputs } from '../../utils/mergeInfraOutputs.js';
|
|
6
|
+
import { collectInfraWorkloadsAsync } from './collectInfraWorkloadsAsync.js';
|
|
7
|
+
import { resolveInfraAdaptersAsync } from './resolveInfraAdaptersAsync.js';
|
|
8
|
+
import { validateInfraAdaptersAsync } from './validateInfraAdaptersAsync.js';
|
|
9
|
+
/*** Validate and reconcile compute, contributed workloads, runtime and services in dependency order. */
|
|
10
|
+
export async function upInfraEnvironmentAsync(request, dependencies) {
|
|
11
|
+
const environment = resolveInfraEnvironment({
|
|
12
|
+
manifest: request.manifest,
|
|
13
|
+
environment: request.environment,
|
|
14
|
+
operation: 'up',
|
|
15
|
+
});
|
|
16
|
+
if (!environment.ok)
|
|
17
|
+
return environment;
|
|
18
|
+
const diagnostics = [...environment.diagnostics];
|
|
19
|
+
const adapters = await resolveInfraAdaptersAsync(environment.value.desired, dependencies.adapterResolver);
|
|
20
|
+
if (!adapters.ok)
|
|
21
|
+
return appendInfraFailure(diagnostics, adapters);
|
|
22
|
+
diagnostics.push(...adapters.diagnostics);
|
|
23
|
+
const context = createInfraExecutionContext(request, environment.value, dependencies);
|
|
24
|
+
const validation = await validateInfraAdaptersAsync(context, adapters.value);
|
|
25
|
+
if (!validation.ok)
|
|
26
|
+
return appendInfraFailure(diagnostics, validation);
|
|
27
|
+
diagnostics.push(...validation.diagnostics);
|
|
28
|
+
const workloads = await collectInfraWorkloadsAsync(context, adapters.value.services);
|
|
29
|
+
if (!workloads.ok)
|
|
30
|
+
return appendInfraFailure(diagnostics, workloads);
|
|
31
|
+
diagnostics.push(...workloads.diagnostics);
|
|
32
|
+
const compute = await adapters.value.compute.ensureAsync(context, environment.value.desired.deployment.compute);
|
|
33
|
+
if (!compute.ok)
|
|
34
|
+
return appendInfraFailure(diagnostics, compute);
|
|
35
|
+
diagnostics.push(...compute.diagnostics);
|
|
36
|
+
const runtimeDesired = {
|
|
37
|
+
selection: environment.value.desired.deployment.runtime,
|
|
38
|
+
targets: compute.value.targets,
|
|
39
|
+
workloads: [...(environment.value.desired.workloads ?? []), ...workloads.value],
|
|
40
|
+
availableOutputs: mergeInfraOutputs(request.previous?.outputs ?? [], compute.value.outputs),
|
|
41
|
+
};
|
|
42
|
+
const runtimeValidation = await adapters.value.runtime.validateAsync(context, runtimeDesired);
|
|
43
|
+
if (!runtimeValidation.ok)
|
|
44
|
+
return appendInfraFailure(diagnostics, runtimeValidation);
|
|
45
|
+
diagnostics.push(...runtimeValidation.diagnostics);
|
|
46
|
+
const runtime = await adapters.value.runtime.ensureAsync(context, runtimeDesired);
|
|
47
|
+
if (!runtime.ok)
|
|
48
|
+
return appendInfraFailure(diagnostics, runtime);
|
|
49
|
+
diagnostics.push(...runtime.diagnostics);
|
|
50
|
+
const services = await reconcileServicesAsync(context, adapters.value.services, [
|
|
51
|
+
...compute.value.outputs,
|
|
52
|
+
...runtime.value.outputs,
|
|
53
|
+
]);
|
|
54
|
+
if (!services.ok)
|
|
55
|
+
return appendInfraFailure(diagnostics, services);
|
|
56
|
+
diagnostics.push(...services.diagnostics);
|
|
57
|
+
const resources = [
|
|
58
|
+
...compute.value.resources,
|
|
59
|
+
...runtime.value.resources,
|
|
60
|
+
...services.value.resources,
|
|
61
|
+
];
|
|
62
|
+
const outputs = mergeInfraOutputs(compute.value.outputs, runtime.value.outputs, services.value.outputs);
|
|
63
|
+
const ledger = createInfraLedger({
|
|
64
|
+
projectId: request.projectId,
|
|
65
|
+
environment: environment.value.id,
|
|
66
|
+
targets: compute.value.targets,
|
|
67
|
+
resources,
|
|
68
|
+
outputs,
|
|
69
|
+
previous: request.previous,
|
|
70
|
+
});
|
|
71
|
+
return {
|
|
72
|
+
ok: true,
|
|
73
|
+
value: {
|
|
74
|
+
environment: environment.value.id,
|
|
75
|
+
targets: compute.value.targets,
|
|
76
|
+
resources,
|
|
77
|
+
outputs,
|
|
78
|
+
ledger,
|
|
79
|
+
},
|
|
80
|
+
diagnostics,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/*** Reconcile service-owned external state after its runtime workloads expose outputs. */
|
|
84
|
+
async function reconcileServicesAsync(context, services, runtimeOutputs) {
|
|
85
|
+
const resources = [];
|
|
86
|
+
const outputs = [];
|
|
87
|
+
const diagnostics = [];
|
|
88
|
+
for (const service of services) {
|
|
89
|
+
const result = await service.reconcileAsync(context, runtimeOutputs);
|
|
90
|
+
if (!result.ok)
|
|
91
|
+
return appendInfraFailure(diagnostics, result);
|
|
92
|
+
resources.push(...result.value.resources);
|
|
93
|
+
outputs.push(...result.value.outputs);
|
|
94
|
+
diagnostics.push(...result.diagnostics);
|
|
95
|
+
}
|
|
96
|
+
return { ok: true, value: { resources, outputs }, diagnostics };
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=upInfraEnvironmentAsync.js.map
|
package/dist/features/environment-lifecycle/application/use-cases/upInfraEnvironmentAsync.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upInfraEnvironmentAsync.js","sourceRoot":"","sources":["../../../../../src/features/environment-lifecycle/application/use-cases/upInfraEnvironmentAsync.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n InfraDiagnostic,\n InfraExecutionContext,\n InfraOutput,\n InfraOwnedResource,\n InfraResult,\n InfraServiceAdapter,\n} from '@ankhorage/contracts/infra';\n\nimport type {\n InfraOrchestrationDependencies,\n InfraUpOperationResult,\n InfraUpRequest,\n} from '../../../../types/infraOrchestration.js';\nimport { resolveInfraEnvironment } from '../../domain/resolveInfraEnvironment.js';\nimport { appendInfraFailure } from '../../utils/appendInfraFailure.js';\nimport { createInfraExecutionContext } from '../../utils/createInfraExecutionContext.js';\nimport { createInfraLedger } from '../../utils/createInfraLedger.js';\nimport { mergeInfraOutputs } from '../../utils/mergeInfraOutputs.js';\nimport { collectInfraWorkloadsAsync } from './collectInfraWorkloadsAsync.js';\nimport { resolveInfraAdaptersAsync } from './resolveInfraAdaptersAsync.js';\nimport { validateInfraAdaptersAsync } from './validateInfraAdaptersAsync.js';\n\n/*** Validate and reconcile compute, contributed workloads, runtime and services in dependency order. */\nexport async function upInfraEnvironmentAsync(\n request: InfraUpRequest,\n dependencies: InfraOrchestrationDependencies,\n): Promise<InfraUpOperationResult> {\n const environment = resolveInfraEnvironment({\n manifest: request.manifest,\n environment: request.environment,\n operation: 'up',\n });\n if (!environment.ok) return environment;\n const diagnostics: InfraDiagnostic[] = [...environment.diagnostics];\n const adapters = await resolveInfraAdaptersAsync(\n environment.value.desired,\n dependencies.adapterResolver,\n );\n if (!adapters.ok) return appendInfraFailure(diagnostics, adapters);\n diagnostics.push(...adapters.diagnostics);\n const context = createInfraExecutionContext(request, environment.value, dependencies);\n const validation = await validateInfraAdaptersAsync(context, adapters.value);\n if (!validation.ok) return appendInfraFailure(diagnostics, validation);\n diagnostics.push(...validation.diagnostics);\n const workloads = await collectInfraWorkloadsAsync(context, adapters.value.services);\n if (!workloads.ok) return appendInfraFailure(diagnostics, workloads);\n diagnostics.push(...workloads.diagnostics);\n const compute = await adapters.value.compute.ensureAsync(\n context,\n environment.value.desired.deployment.compute,\n );\n if (!compute.ok) return appendInfraFailure(diagnostics, compute);\n diagnostics.push(...compute.diagnostics);\n const runtimeDesired = {\n selection: environment.value.desired.deployment.runtime,\n targets: compute.value.targets,\n workloads: [...(environment.value.desired.workloads ?? []), ...workloads.value],\n availableOutputs: mergeInfraOutputs(request.previous?.outputs ?? [], compute.value.outputs),\n };\n const runtimeValidation = await adapters.value.runtime.validateAsync(context, runtimeDesired);\n if (!runtimeValidation.ok) return appendInfraFailure(diagnostics, runtimeValidation);\n diagnostics.push(...runtimeValidation.diagnostics);\n const runtime = await adapters.value.runtime.ensureAsync(context, runtimeDesired);\n if (!runtime.ok) return appendInfraFailure(diagnostics, runtime);\n diagnostics.push(...runtime.diagnostics);\n const services = await reconcileServicesAsync(context, adapters.value.services, [\n ...compute.value.outputs,\n ...runtime.value.outputs,\n ]);\n if (!services.ok) return appendInfraFailure(diagnostics, services);\n diagnostics.push(...services.diagnostics);\n const resources = [\n ...compute.value.resources,\n ...runtime.value.resources,\n ...services.value.resources,\n ];\n const outputs = mergeInfraOutputs(\n compute.value.outputs,\n runtime.value.outputs,\n services.value.outputs,\n );\n const ledger = createInfraLedger({\n projectId: request.projectId,\n environment: environment.value.id,\n targets: compute.value.targets,\n resources,\n outputs,\n previous: request.previous,\n });\n return {\n ok: true,\n value: {\n environment: environment.value.id,\n targets: compute.value.targets,\n resources,\n outputs,\n ledger,\n },\n diagnostics,\n };\n}\n\n/*** Reconcile service-owned external state after its runtime workloads expose outputs. */\nasync function reconcileServicesAsync(\n context: InfraExecutionContext,\n services: readonly InfraServiceAdapter[],\n runtimeOutputs: readonly InfraOutput[],\n): Promise<\n InfraResult<{\n readonly resources: readonly InfraOwnedResource[];\n readonly outputs: readonly InfraOutput[];\n }>\n> {\n const resources: InfraOwnedResource[] = [];\n const outputs: InfraOutput[] = [];\n const diagnostics: InfraDiagnostic[] = [];\n for (const service of services) {\n const result = await service.reconcileAsync(context, runtimeOutputs);\n if (!result.ok) return appendInfraFailure(diagnostics, result);\n resources.push(...result.value.resources);\n outputs.push(...result.value.outputs);\n diagnostics.push(...result.diagnostics);\n }\n return { ok: true, value: { resources, outputs }, diagnostics };\n}\n"]}
|
package/dist/features/environment-lifecycle/application/use-cases/validateInfraAdaptersAsync.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { InfraExecutionContext, InfraResult } from '@ankhorage/contracts/infra';
|
|
2
|
+
import type { ResolvedInfraAdapters } from '../../../../types/infraOrchestration.js';
|
|
3
|
+
/*** Validate compute and service configuration before any mutating adapter call. */
|
|
4
|
+
export declare function validateInfraAdaptersAsync(context: InfraExecutionContext, adapters: ResolvedInfraAdapters): Promise<InfraResult<null>>;
|
|
5
|
+
//# sourceMappingURL=validateInfraAdaptersAsync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateInfraAdaptersAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/environment-lifecycle/application/use-cases/validateInfraAdaptersAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,qBAAqB,EACrB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAGrF,oFAAoF;AACpF,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAW5B"}
|
package/dist/features/environment-lifecycle/application/use-cases/validateInfraAdaptersAsync.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { appendInfraFailure } from '../../utils/appendInfraFailure.js';
|
|
2
|
+
/*** Validate compute and service configuration before any mutating adapter call. */
|
|
3
|
+
export async function validateInfraAdaptersAsync(context, adapters) {
|
|
4
|
+
const diagnostics = [];
|
|
5
|
+
const compute = await adapters.compute.validateAsync(context, context.desired.deployment.compute);
|
|
6
|
+
if (!compute.ok)
|
|
7
|
+
return compute;
|
|
8
|
+
diagnostics.push(...compute.diagnostics);
|
|
9
|
+
for (const service of adapters.services) {
|
|
10
|
+
const validation = await service.validateAsync(context);
|
|
11
|
+
if (!validation.ok)
|
|
12
|
+
return appendInfraFailure(diagnostics, validation);
|
|
13
|
+
diagnostics.push(...validation.diagnostics);
|
|
14
|
+
}
|
|
15
|
+
return { ok: true, value: null, diagnostics };
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=validateInfraAdaptersAsync.js.map
|
package/dist/features/environment-lifecycle/application/use-cases/validateInfraAdaptersAsync.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateInfraAdaptersAsync.js","sourceRoot":"","sources":["../../../../../src/features/environment-lifecycle/application/use-cases/validateInfraAdaptersAsync.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAA8B,EAC9B,QAA+B;IAE/B,MAAM,WAAW,GAAsB,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClG,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAChC,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACzC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,CAAC,EAAE;YAAE,OAAO,kBAAkB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACvE,WAAW,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAChD,CAAC","sourcesContent":["import type {\n InfraDiagnostic,\n InfraExecutionContext,\n InfraResult,\n} from '@ankhorage/contracts/infra';\n\nimport type { ResolvedInfraAdapters } from '../../../../types/infraOrchestration.js';\nimport { appendInfraFailure } from '../../utils/appendInfraFailure.js';\n\n/*** Validate compute and service configuration before any mutating adapter call. */\nexport async function validateInfraAdaptersAsync(\n context: InfraExecutionContext,\n adapters: ResolvedInfraAdapters,\n): Promise<InfraResult<null>> {\n const diagnostics: InfraDiagnostic[] = [];\n const compute = await adapters.compute.validateAsync(context, context.desired.deployment.compute);\n if (!compute.ok) return compute;\n diagnostics.push(...compute.diagnostics);\n for (const service of adapters.services) {\n const validation = await service.validateAsync(context);\n if (!validation.ok) return appendInfraFailure(diagnostics, validation);\n diagnostics.push(...validation.diagnostics);\n }\n return { ok: true, value: null, diagnostics };\n}\n"]}
|
package/dist/features/environment-lifecycle/application/use-cases/validateInfraEnvironmentAsync.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { InfraOperationRequest, InfraOrchestrationDependencies, InfraValidateOperationResult } from '../../../../types/infraOrchestration.js';
|
|
2
|
+
/*** Validate one environment and every selected adapter without mutating infrastructure. */
|
|
3
|
+
export declare function validateInfraEnvironmentAsync(request: InfraOperationRequest, dependencies: InfraOrchestrationDependencies): Promise<InfraValidateOperationResult>;
|
|
4
|
+
//# sourceMappingURL=validateInfraEnvironmentAsync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateInfraEnvironmentAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/environment-lifecycle/application/use-cases/validateInfraEnvironmentAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,8BAA8B,EAC9B,4BAA4B,EAC7B,MAAM,yCAAyC,CAAC;AAGjD,4FAA4F;AAC5F,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,qBAAqB,EAC9B,YAAY,EAAE,8BAA8B,GAC3C,OAAO,CAAC,4BAA4B,CAAC,CASvC"}
|
package/dist/features/environment-lifecycle/application/use-cases/validateInfraEnvironmentAsync.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { prepareInfraOperationAsync } from './prepareInfraOperationAsync.js';
|
|
2
|
+
/*** Validate one environment and every selected adapter without mutating infrastructure. */
|
|
3
|
+
export async function validateInfraEnvironmentAsync(request, dependencies) {
|
|
4
|
+
const prepared = await prepareInfraOperationAsync(request, 'validate', dependencies);
|
|
5
|
+
return prepared.ok
|
|
6
|
+
? {
|
|
7
|
+
ok: true,
|
|
8
|
+
value: { environment: prepared.value.environment.id },
|
|
9
|
+
diagnostics: prepared.diagnostics,
|
|
10
|
+
}
|
|
11
|
+
: prepared;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=validateInfraEnvironmentAsync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateInfraEnvironmentAsync.js","sourceRoot":"","sources":["../../../../../src/features/environment-lifecycle/application/use-cases/validateInfraEnvironmentAsync.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAA8B,EAC9B,YAA4C;IAE5C,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IACrF,OAAO,QAAQ,CAAC,EAAE;QAChB,CAAC,CAAC;YACE,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE;YACrD,WAAW,EAAE,QAAQ,CAAC,WAAW;SAClC;QACH,CAAC,CAAC,QAAQ,CAAC;AACf,CAAC","sourcesContent":["import type {\n InfraOperationRequest,\n InfraOrchestrationDependencies,\n InfraValidateOperationResult,\n} from '../../../../types/infraOrchestration.js';\nimport { prepareInfraOperationAsync } from './prepareInfraOperationAsync.js';\n\n/*** Validate one environment and every selected adapter without mutating infrastructure. */\nexport async function validateInfraEnvironmentAsync(\n request: InfraOperationRequest,\n dependencies: InfraOrchestrationDependencies,\n): Promise<InfraValidateOperationResult> {\n const prepared = await prepareInfraOperationAsync(request, 'validate', dependencies);\n return prepared.ok\n ? {\n ok: true,\n value: { environment: prepared.value.environment.id },\n diagnostics: prepared.diagnostics,\n }\n : prepared;\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { InfraCommandServices } from '../../../types/infraCli.js';
|
|
2
|
+
/*** Compose command use cases with filesystem, environment-value and package-resolver adapters. */
|
|
3
|
+
export declare function createInfraCommandServices(overrides?: Partial<InfraCommandServices>): InfraCommandServices;
|
|
4
|
+
//# sourceMappingURL=createInfraCommandServices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createInfraCommandServices.d.ts","sourceRoot":"","sources":["../../../../src/features/environment-lifecycle/composition/createInfraCommandServices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAkBvE,mGAAmG;AACnG,wBAAgB,0BAA0B,CACxC,SAAS,GAAE,OAAO,CAAC,oBAAoB,CAAM,GAC5C,oBAAoB,CAyBtB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { createEnvironmentInfraCredentialPort } from '../adapters/outbound/createEnvironmentInfraCredentialPort.js';
|
|
2
|
+
import { createEnvironmentInfraSecretPort } from '../adapters/outbound/createEnvironmentInfraSecretPort.js';
|
|
3
|
+
import { createNodeInfraAdapterPackageResolver } from '../adapters/outbound/createNodeInfraAdapterPackageResolver.js';
|
|
4
|
+
import { readStoredInfraStateAsync } from '../adapters/outbound/readStoredInfraStateAsync.js';
|
|
5
|
+
import { removeStoredInfraStateAsync } from '../adapters/outbound/removeStoredInfraStateAsync.js';
|
|
6
|
+
import { resolveInfraProjectAsync } from '../adapters/outbound/resolveInfraProjectAsync.js';
|
|
7
|
+
import { writeInfraGeneratedArtifactsAsync } from '../adapters/outbound/writeInfraGeneratedArtifactsAsync.js';
|
|
8
|
+
import { writeStoredInfraStateAsync } from '../adapters/outbound/writeStoredInfraStateAsync.js';
|
|
9
|
+
import { destroyInfraEnvironmentAsync } from '../application/use-cases/destroyInfraEnvironmentAsync.js';
|
|
10
|
+
import { downInfraEnvironmentAsync } from '../application/use-cases/downInfraEnvironmentAsync.js';
|
|
11
|
+
import { generateInfraEnvironmentAsync } from '../application/use-cases/generateInfraEnvironmentAsync.js';
|
|
12
|
+
import { getInfraEnvironmentOutputs } from '../application/use-cases/getInfraEnvironmentOutputs.js';
|
|
13
|
+
import { planInfraEnvironmentAsync } from '../application/use-cases/planInfraEnvironmentAsync.js';
|
|
14
|
+
import { statusInfraEnvironmentAsync } from '../application/use-cases/statusInfraEnvironmentAsync.js';
|
|
15
|
+
import { upInfraEnvironmentAsync } from '../application/use-cases/upInfraEnvironmentAsync.js';
|
|
16
|
+
import { validateInfraEnvironmentAsync } from '../application/use-cases/validateInfraEnvironmentAsync.js';
|
|
17
|
+
/*** Compose command use cases with filesystem, environment-value and package-resolver adapters. */
|
|
18
|
+
export function createInfraCommandServices(overrides = {}) {
|
|
19
|
+
return {
|
|
20
|
+
resolveProject: overrides.resolveProject ?? resolveInfraProjectAsync,
|
|
21
|
+
readState: overrides.readState ?? readStoredInfraStateAsync,
|
|
22
|
+
writeState: overrides.writeState ?? writeStoredInfraStateAsync,
|
|
23
|
+
removeState: overrides.removeState ?? removeStoredInfraStateAsync,
|
|
24
|
+
writeArtifacts: overrides.writeArtifacts ?? writeInfraGeneratedArtifactsAsync,
|
|
25
|
+
operations: overrides.operations ?? {
|
|
26
|
+
validate: validateInfraEnvironmentAsync,
|
|
27
|
+
plan: planInfraEnvironmentAsync,
|
|
28
|
+
generate: generateInfraEnvironmentAsync,
|
|
29
|
+
up: upInfraEnvironmentAsync,
|
|
30
|
+
status: statusInfraEnvironmentAsync,
|
|
31
|
+
outputs: getInfraEnvironmentOutputs,
|
|
32
|
+
down: downInfraEnvironmentAsync,
|
|
33
|
+
destroy: destroyInfraEnvironmentAsync,
|
|
34
|
+
},
|
|
35
|
+
createDependencies: overrides.createDependencies ??
|
|
36
|
+
((context) => ({
|
|
37
|
+
adapterResolver: createNodeInfraAdapterPackageResolver(),
|
|
38
|
+
credentials: createEnvironmentInfraCredentialPort(context.env),
|
|
39
|
+
secrets: createEnvironmentInfraSecretPort(context.env),
|
|
40
|
+
})),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=createInfraCommandServices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createInfraCommandServices.js","sourceRoot":"","sources":["../../../../src/features/environment-lifecycle/composition/createInfraCommandServices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oCAAoC,EAAE,MAAM,8DAA8D,CAAC;AACpH,OAAO,EAAE,gCAAgC,EAAE,MAAM,0DAA0D,CAAC;AAC5G,OAAO,EAAE,qCAAqC,EAAE,MAAM,+DAA+D,CAAC;AACtH,OAAO,EAAE,yBAAyB,EAAE,MAAM,mDAAmD,CAAC;AAC9F,OAAO,EAAE,2BAA2B,EAAE,MAAM,qDAAqD,CAAC;AAClG,OAAO,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AAC5F,OAAO,EAAE,iCAAiC,EAAE,MAAM,2DAA2D,CAAC;AAC9G,OAAO,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAC;AAChG,OAAO,EAAE,4BAA4B,EAAE,MAAM,0DAA0D,CAAC;AACxG,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAClG,OAAO,EAAE,6BAA6B,EAAE,MAAM,2DAA2D,CAAC;AAC1G,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAC;AACpG,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAClG,OAAO,EAAE,2BAA2B,EAAE,MAAM,yDAAyD,CAAC;AACtG,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAC9F,OAAO,EAAE,6BAA6B,EAAE,MAAM,2DAA2D,CAAC;AAE1G,mGAAmG;AACnG,MAAM,UAAU,0BAA0B,CACxC,YAA2C,EAAE;IAE7C,OAAO;QACL,cAAc,EAAE,SAAS,CAAC,cAAc,IAAI,wBAAwB;QACpE,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,yBAAyB;QAC3D,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,0BAA0B;QAC9D,WAAW,EAAE,SAAS,CAAC,WAAW,IAAI,2BAA2B;QACjE,cAAc,EAAE,SAAS,CAAC,cAAc,IAAI,iCAAiC;QAC7E,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI;YAClC,QAAQ,EAAE,6BAA6B;YACvC,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,6BAA6B;YACvC,EAAE,EAAE,uBAAuB;YAC3B,MAAM,EAAE,2BAA2B;YACnC,OAAO,EAAE,0BAA0B;YACnC,IAAI,EAAE,yBAAyB;YAC/B,OAAO,EAAE,4BAA4B;SACtC;QACD,kBAAkB,EAChB,SAAS,CAAC,kBAAkB;YAC5B,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACb,eAAe,EAAE,qCAAqC,EAAE;gBACxD,WAAW,EAAE,oCAAoC,CAAC,OAAO,CAAC,GAAG,CAAC;gBAC9D,OAAO,EAAE,gCAAgC,CAAC,OAAO,CAAC,GAAG,CAAC;aACvD,CAAC,CAAC;KACN,CAAC;AACJ,CAAC","sourcesContent":["import type { InfraCommandServices } from '../../../types/infraCli.js';\nimport { createEnvironmentInfraCredentialPort } from '../adapters/outbound/createEnvironmentInfraCredentialPort.js';\nimport { createEnvironmentInfraSecretPort } from '../adapters/outbound/createEnvironmentInfraSecretPort.js';\nimport { createNodeInfraAdapterPackageResolver } from '../adapters/outbound/createNodeInfraAdapterPackageResolver.js';\nimport { readStoredInfraStateAsync } from '../adapters/outbound/readStoredInfraStateAsync.js';\nimport { removeStoredInfraStateAsync } from '../adapters/outbound/removeStoredInfraStateAsync.js';\nimport { resolveInfraProjectAsync } from '../adapters/outbound/resolveInfraProjectAsync.js';\nimport { writeInfraGeneratedArtifactsAsync } from '../adapters/outbound/writeInfraGeneratedArtifactsAsync.js';\nimport { writeStoredInfraStateAsync } from '../adapters/outbound/writeStoredInfraStateAsync.js';\nimport { destroyInfraEnvironmentAsync } from '../application/use-cases/destroyInfraEnvironmentAsync.js';\nimport { downInfraEnvironmentAsync } from '../application/use-cases/downInfraEnvironmentAsync.js';\nimport { generateInfraEnvironmentAsync } from '../application/use-cases/generateInfraEnvironmentAsync.js';\nimport { getInfraEnvironmentOutputs } from '../application/use-cases/getInfraEnvironmentOutputs.js';\nimport { planInfraEnvironmentAsync } from '../application/use-cases/planInfraEnvironmentAsync.js';\nimport { statusInfraEnvironmentAsync } from '../application/use-cases/statusInfraEnvironmentAsync.js';\nimport { upInfraEnvironmentAsync } from '../application/use-cases/upInfraEnvironmentAsync.js';\nimport { validateInfraEnvironmentAsync } from '../application/use-cases/validateInfraEnvironmentAsync.js';\n\n/*** Compose command use cases with filesystem, environment-value and package-resolver adapters. */\nexport function createInfraCommandServices(\n overrides: Partial<InfraCommandServices> = {},\n): InfraCommandServices {\n return {\n resolveProject: overrides.resolveProject ?? resolveInfraProjectAsync,\n readState: overrides.readState ?? readStoredInfraStateAsync,\n writeState: overrides.writeState ?? writeStoredInfraStateAsync,\n removeState: overrides.removeState ?? removeStoredInfraStateAsync,\n writeArtifacts: overrides.writeArtifacts ?? writeInfraGeneratedArtifactsAsync,\n operations: overrides.operations ?? {\n validate: validateInfraEnvironmentAsync,\n plan: planInfraEnvironmentAsync,\n generate: generateInfraEnvironmentAsync,\n up: upInfraEnvironmentAsync,\n status: statusInfraEnvironmentAsync,\n outputs: getInfraEnvironmentOutputs,\n down: downInfraEnvironmentAsync,\n destroy: destroyInfraEnvironmentAsync,\n },\n createDependencies:\n overrides.createDependencies ??\n ((context) => ({\n adapterResolver: createNodeInfraAdapterPackageResolver(),\n credentials: createEnvironmentInfraCredentialPort(context.env),\n secrets: createEnvironmentInfraSecretPort(context.env),\n })),\n };\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { InfraPlanAction, InfraResult } from '@ankhorage/contracts/infra';
|
|
2
|
+
/*** Order plan actions dependency-first and reject duplicate owners or dependency cycles. */
|
|
3
|
+
export declare function orderInfraPlanActions(actions: readonly InfraPlanAction[]): InfraResult<readonly InfraPlanAction[]>;
|
|
4
|
+
//# sourceMappingURL=orderInfraPlanActions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orderInfraPlanActions.d.ts","sourceRoot":"","sources":["../../../../src/features/environment-lifecycle/domain/orderInfraPlanActions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEf,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAEpC,6FAA6F;AAC7F,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,eAAe,EAAE,GAClC,WAAW,CAAC,SAAS,eAAe,EAAE,CAAC,CAWzC"}
|