typekro 0.5.0 → 0.8.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/dist/.tsbuildinfo +1 -1
- package/dist/compositions/typekro-runtime/typekro-runtime.d.ts +1 -1
- package/dist/compositions/typekro-runtime/typekro-runtime.d.ts.map +1 -1
- package/dist/compositions/typekro-runtime/typekro-runtime.js +16 -2
- package/dist/compositions/typekro-runtime/typekro-runtime.js.map +1 -1
- package/dist/core/composition/context.d.ts +14 -0
- package/dist/core/composition/context.d.ts.map +1 -1
- package/dist/core/composition/context.js.map +1 -1
- package/dist/core/composition/imperative.d.ts.map +1 -1
- package/dist/core/composition/imperative.js +59 -30
- package/dist/core/composition/imperative.js.map +1 -1
- package/dist/core/composition/nested-status-cel.d.ts +50 -0
- package/dist/core/composition/nested-status-cel.d.ts.map +1 -0
- package/dist/core/composition/nested-status-cel.js +169 -0
- package/dist/core/composition/nested-status-cel.js.map +1 -0
- package/dist/core/constants/brands.d.ts +1 -1
- package/dist/core/constants/brands.d.ts.map +1 -1
- package/dist/core/constants/brands.js +1 -1
- package/dist/core/constants/brands.js.map +1 -1
- package/dist/core/containers/build.d.ts +50 -0
- package/dist/core/containers/build.d.ts.map +1 -0
- package/dist/core/containers/build.js +146 -0
- package/dist/core/containers/build.js.map +1 -0
- package/dist/core/containers/errors.d.ts +14 -0
- package/dist/core/containers/errors.d.ts.map +1 -0
- package/dist/core/containers/errors.js +48 -0
- package/dist/core/containers/errors.js.map +1 -0
- package/dist/core/containers/exec.d.ts +36 -0
- package/dist/core/containers/exec.d.ts.map +1 -0
- package/dist/core/containers/exec.js +110 -0
- package/dist/core/containers/exec.js.map +1 -0
- package/dist/core/containers/index.d.ts +21 -0
- package/dist/core/containers/index.d.ts.map +1 -0
- package/dist/core/containers/index.js +20 -0
- package/dist/core/containers/index.js.map +1 -0
- package/dist/core/containers/registries/ecr.d.ts +22 -0
- package/dist/core/containers/registries/ecr.d.ts.map +1 -0
- package/dist/core/containers/registries/ecr.js +118 -0
- package/dist/core/containers/registries/ecr.js.map +1 -0
- package/dist/core/containers/registries/index.d.ts +9 -0
- package/dist/core/containers/registries/index.d.ts.map +1 -0
- package/dist/core/containers/registries/index.js +23 -0
- package/dist/core/containers/registries/index.js.map +1 -0
- package/dist/core/containers/registries/orbstack.d.ts +14 -0
- package/dist/core/containers/registries/orbstack.d.ts.map +1 -0
- package/dist/core/containers/registries/orbstack.js +24 -0
- package/dist/core/containers/registries/orbstack.js.map +1 -0
- package/dist/core/containers/registries/types.d.ts +94 -0
- package/dist/core/containers/registries/types.d.ts.map +1 -0
- package/dist/core/containers/registries/types.js +11 -0
- package/dist/core/containers/registries/types.js.map +1 -0
- package/dist/core/dependencies/graph.d.ts +4 -0
- package/dist/core/dependencies/graph.d.ts.map +1 -1
- package/dist/core/dependencies/graph.js +6 -0
- package/dist/core/dependencies/graph.js.map +1 -1
- package/dist/core/dependencies/resolver.d.ts +28 -0
- package/dist/core/dependencies/resolver.d.ts.map +1 -1
- package/dist/core/dependencies/resolver.js +138 -5
- package/dist/core/dependencies/resolver.js.map +1 -1
- package/dist/core/deployment/direct-factory.d.ts +13 -0
- package/dist/core/deployment/direct-factory.d.ts.map +1 -1
- package/dist/core/deployment/direct-factory.js +99 -0
- package/dist/core/deployment/direct-factory.js.map +1 -1
- package/dist/core/deployment/engine.d.ts.map +1 -1
- package/dist/core/deployment/engine.js +45 -2
- package/dist/core/deployment/engine.js.map +1 -1
- package/dist/core/deployment/kro-factory.d.ts +28 -0
- package/dist/core/deployment/kro-factory.d.ts.map +1 -1
- package/dist/core/deployment/kro-factory.js +243 -13
- package/dist/core/deployment/kro-factory.js.map +1 -1
- package/dist/core/deployment/kro-readiness.d.ts.map +1 -1
- package/dist/core/deployment/kro-readiness.js +10 -1
- package/dist/core/deployment/kro-readiness.js.map +1 -1
- package/dist/core/deployment/nested-composition-status.d.ts +33 -0
- package/dist/core/deployment/nested-composition-status.d.ts.map +1 -0
- package/dist/core/deployment/nested-composition-status.js +101 -0
- package/dist/core/deployment/nested-composition-status.js.map +1 -0
- package/dist/core/deployment/readiness-waiter.d.ts.map +1 -1
- package/dist/core/deployment/readiness-waiter.js +23 -6
- package/dist/core/deployment/readiness-waiter.js.map +1 -1
- package/dist/core/deployment/rollback-manager.d.ts.map +1 -1
- package/dist/core/deployment/rollback-manager.js +19 -0
- package/dist/core/deployment/rollback-manager.js.map +1 -1
- package/dist/core/deployment/strategies/direct-strategy.d.ts +6 -0
- package/dist/core/deployment/strategies/direct-strategy.d.ts.map +1 -1
- package/dist/core/deployment/strategies/direct-strategy.js +133 -35
- package/dist/core/deployment/strategies/direct-strategy.js.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts +8 -2
- package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-helpers.js +34 -2
- package/dist/core/expressions/composition/composition-analyzer-helpers.js.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-ternary.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-ternary.js +52 -28
- package/dist/core/expressions/composition/composition-analyzer-ternary.js.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-traversal.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-traversal.js +11 -4
- package/dist/core/expressions/composition/composition-analyzer-traversal.js.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-types.d.ts +8 -0
- package/dist/core/expressions/composition/composition-analyzer-types.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer.d.ts +1 -1
- package/dist/core/expressions/composition/composition-analyzer.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer.js +8 -2
- package/dist/core/expressions/composition/composition-analyzer.js.map +1 -1
- package/dist/core/expressions/composition/imperative-analyzer.d.ts +8 -0
- package/dist/core/expressions/composition/imperative-analyzer.d.ts.map +1 -1
- package/dist/core/expressions/composition/imperative-analyzer.js +111 -16
- package/dist/core/expressions/composition/imperative-analyzer.js.map +1 -1
- package/dist/core/metadata/resource-metadata.d.ts +4 -0
- package/dist/core/metadata/resource-metadata.d.ts.map +1 -1
- package/dist/core/metadata/resource-metadata.js.map +1 -1
- package/dist/core/proxy/create-resource.d.ts.map +1 -1
- package/dist/core/proxy/create-resource.js +63 -21
- package/dist/core/proxy/create-resource.js.map +1 -1
- package/dist/core/references/cel.d.ts +48 -0
- package/dist/core/references/cel.d.ts.map +1 -1
- package/dist/core/references/cel.js +82 -0
- package/dist/core/references/cel.js.map +1 -1
- package/dist/core/references/external-refs.d.ts +2 -0
- package/dist/core/references/external-refs.d.ts.map +1 -1
- package/dist/core/references/external-refs.js +3 -0
- package/dist/core/references/external-refs.js.map +1 -1
- package/dist/core/references/resolver.d.ts +12 -4
- package/dist/core/references/resolver.d.ts.map +1 -1
- package/dist/core/references/resolver.js +152 -69
- package/dist/core/references/resolver.js.map +1 -1
- package/dist/core/references/schema-proxy.d.ts.map +1 -1
- package/dist/core/references/schema-proxy.js +5 -4
- package/dist/core/references/schema-proxy.js.map +1 -1
- package/dist/core/serialization/cel-references.d.ts +1 -1
- package/dist/core/serialization/cel-references.d.ts.map +1 -1
- package/dist/core/serialization/cel-references.js +191 -24
- package/dist/core/serialization/cel-references.js.map +1 -1
- package/dist/core/serialization/core.d.ts +8 -1
- package/dist/core/serialization/core.d.ts.map +1 -1
- package/dist/core/serialization/core.js +434 -7
- package/dist/core/serialization/core.js.map +1 -1
- package/dist/core/serialization/kro-post-processing.d.ts +46 -0
- package/dist/core/serialization/kro-post-processing.d.ts.map +1 -0
- package/dist/core/serialization/kro-post-processing.js +103 -0
- package/dist/core/serialization/kro-post-processing.js.map +1 -0
- package/dist/core/serialization/schema.d.ts +61 -3
- package/dist/core/serialization/schema.d.ts.map +1 -1
- package/dist/core/serialization/schema.js +520 -18
- package/dist/core/serialization/schema.js.map +1 -1
- package/dist/core/serialization/status-analysis-pipeline.d.ts +4 -0
- package/dist/core/serialization/status-analysis-pipeline.d.ts.map +1 -1
- package/dist/core/serialization/status-analysis-pipeline.js +127 -10
- package/dist/core/serialization/status-analysis-pipeline.js.map +1 -1
- package/dist/core/serialization/yaml.d.ts.map +1 -1
- package/dist/core/serialization/yaml.js +27 -4
- package/dist/core/serialization/yaml.js.map +1 -1
- package/dist/core/types/composable.d.ts +62 -0
- package/dist/core/types/composable.d.ts.map +1 -0
- package/dist/core/types/composable.js +51 -0
- package/dist/core/types/composable.js.map +1 -0
- package/dist/core/types/deployment.d.ts +2 -1
- package/dist/core/types/deployment.d.ts.map +1 -1
- package/dist/core/types/index.d.ts +1 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js +1 -0
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/types/serialization.d.ts +40 -1
- package/dist/core/types/serialization.d.ts.map +1 -1
- package/dist/core/validation/cel-validator.d.ts.map +1 -1
- package/dist/core/validation/cel-validator.js +55 -31
- package/dist/core/validation/cel-validator.js.map +1 -1
- package/dist/factories/cnpg/compositions/cnpg-bootstrap.d.ts +55 -0
- package/dist/factories/cnpg/compositions/cnpg-bootstrap.d.ts.map +1 -0
- package/dist/factories/cnpg/compositions/cnpg-bootstrap.js +92 -0
- package/dist/factories/cnpg/compositions/cnpg-bootstrap.js.map +1 -0
- package/dist/factories/cnpg/compositions/index.d.ts +2 -0
- package/dist/factories/cnpg/compositions/index.d.ts.map +1 -0
- package/dist/factories/cnpg/compositions/index.js +2 -0
- package/dist/factories/cnpg/compositions/index.js.map +1 -0
- package/dist/factories/cnpg/index.d.ts +42 -0
- package/dist/factories/cnpg/index.d.ts.map +1 -0
- package/dist/factories/cnpg/index.js +42 -0
- package/dist/factories/cnpg/index.js.map +1 -0
- package/dist/factories/cnpg/resources/backup.d.ts +34 -0
- package/dist/factories/cnpg/resources/backup.d.ts.map +1 -0
- package/dist/factories/cnpg/resources/backup.js +87 -0
- package/dist/factories/cnpg/resources/backup.js.map +1 -0
- package/dist/factories/cnpg/resources/cluster.d.ts +55 -0
- package/dist/factories/cnpg/resources/cluster.d.ts.map +1 -0
- package/dist/factories/cnpg/resources/cluster.js +123 -0
- package/dist/factories/cnpg/resources/cluster.js.map +1 -0
- package/dist/factories/cnpg/resources/helm.d.ts +45 -0
- package/dist/factories/cnpg/resources/helm.d.ts.map +1 -0
- package/dist/factories/cnpg/resources/helm.js +78 -0
- package/dist/factories/cnpg/resources/helm.js.map +1 -0
- package/dist/factories/cnpg/resources/index.d.ts +6 -0
- package/dist/factories/cnpg/resources/index.d.ts.map +1 -0
- package/dist/factories/cnpg/resources/index.js +6 -0
- package/dist/factories/cnpg/resources/index.js.map +1 -0
- package/dist/factories/cnpg/resources/pooler.d.ts +38 -0
- package/dist/factories/cnpg/resources/pooler.d.ts.map +1 -0
- package/dist/factories/cnpg/resources/pooler.js +97 -0
- package/dist/factories/cnpg/resources/pooler.js.map +1 -0
- package/dist/factories/cnpg/resources/scheduled-backup.d.ts +35 -0
- package/dist/factories/cnpg/resources/scheduled-backup.d.ts.map +1 -0
- package/dist/factories/cnpg/resources/scheduled-backup.js +68 -0
- package/dist/factories/cnpg/resources/scheduled-backup.js.map +1 -0
- package/dist/factories/cnpg/types.d.ts +507 -0
- package/dist/factories/cnpg/types.d.ts.map +1 -0
- package/dist/factories/cnpg/types.js +398 -0
- package/dist/factories/cnpg/types.js.map +1 -0
- package/dist/factories/cnpg/utils/helm-values-mapper.d.ts +70 -0
- package/dist/factories/cnpg/utils/helm-values-mapper.d.ts.map +1 -0
- package/dist/factories/cnpg/utils/helm-values-mapper.js +79 -0
- package/dist/factories/cnpg/utils/helm-values-mapper.js.map +1 -0
- package/dist/factories/cnpg/utils/index.d.ts +2 -0
- package/dist/factories/cnpg/utils/index.d.ts.map +1 -0
- package/dist/factories/cnpg/utils/index.js +2 -0
- package/dist/factories/cnpg/utils/index.js.map +1 -0
- package/dist/factories/helm/helm-release.d.ts.map +1 -1
- package/dist/factories/helm/helm-release.js +4 -0
- package/dist/factories/helm/helm-release.js.map +1 -1
- package/dist/factories/helm/types.d.ts +2 -0
- package/dist/factories/helm/types.d.ts.map +1 -1
- package/dist/factories/inngest/compositions/index.d.ts +2 -0
- package/dist/factories/inngest/compositions/index.d.ts.map +1 -0
- package/dist/factories/inngest/compositions/index.js +2 -0
- package/dist/factories/inngest/compositions/index.js.map +1 -0
- package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts +150 -0
- package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts.map +1 -0
- package/dist/factories/inngest/compositions/inngest-bootstrap.js +90 -0
- package/dist/factories/inngest/compositions/inngest-bootstrap.js.map +1 -0
- package/dist/factories/inngest/index.d.ts +45 -0
- package/dist/factories/inngest/index.d.ts.map +1 -0
- package/dist/factories/inngest/index.js +45 -0
- package/dist/factories/inngest/index.js.map +1 -0
- package/dist/factories/inngest/resources/helm.d.ts +53 -0
- package/dist/factories/inngest/resources/helm.d.ts.map +1 -0
- package/dist/factories/inngest/resources/helm.js +88 -0
- package/dist/factories/inngest/resources/helm.js.map +1 -0
- package/dist/factories/inngest/resources/index.d.ts +2 -0
- package/dist/factories/inngest/resources/index.d.ts.map +1 -0
- package/dist/factories/inngest/resources/index.js +2 -0
- package/dist/factories/inngest/resources/index.js.map +1 -0
- package/dist/factories/inngest/types.d.ts +177 -0
- package/dist/factories/inngest/types.d.ts.map +1 -0
- package/dist/factories/inngest/types.js +189 -0
- package/dist/factories/inngest/types.js.map +1 -0
- package/dist/factories/inngest/utils/helm-values-mapper.d.ts +127 -0
- package/dist/factories/inngest/utils/helm-values-mapper.d.ts.map +1 -0
- package/dist/factories/inngest/utils/helm-values-mapper.js +116 -0
- package/dist/factories/inngest/utils/helm-values-mapper.js.map +1 -0
- package/dist/factories/inngest/utils/index.d.ts +2 -0
- package/dist/factories/inngest/utils/index.d.ts.map +1 -0
- package/dist/factories/inngest/utils/index.js +2 -0
- package/dist/factories/inngest/utils/index.js.map +1 -0
- package/dist/factories/kubernetes/config/secret.d.ts.map +1 -1
- package/dist/factories/kubernetes/config/secret.js +11 -1
- package/dist/factories/kubernetes/config/secret.js.map +1 -1
- package/dist/factories/kubernetes/core/namespace.d.ts.map +1 -1
- package/dist/factories/kubernetes/core/namespace.js +1 -1
- package/dist/factories/kubernetes/core/namespace.js.map +1 -1
- package/dist/factories/searxng/compositions/index.d.ts +2 -0
- package/dist/factories/searxng/compositions/index.d.ts.map +1 -0
- package/dist/factories/searxng/compositions/index.js +2 -0
- package/dist/factories/searxng/compositions/index.js.map +1 -0
- package/dist/factories/searxng/compositions/searxng-bootstrap.d.ts +65 -0
- package/dist/factories/searxng/compositions/searxng-bootstrap.d.ts.map +1 -0
- package/dist/factories/searxng/compositions/searxng-bootstrap.js +237 -0
- package/dist/factories/searxng/compositions/searxng-bootstrap.js.map +1 -0
- package/dist/factories/searxng/index.d.ts +29 -0
- package/dist/factories/searxng/index.d.ts.map +1 -0
- package/dist/factories/searxng/index.js +27 -0
- package/dist/factories/searxng/index.js.map +1 -0
- package/dist/factories/searxng/resources/index.d.ts +2 -0
- package/dist/factories/searxng/resources/index.d.ts.map +1 -0
- package/dist/factories/searxng/resources/index.js +2 -0
- package/dist/factories/searxng/resources/index.js.map +1 -0
- package/dist/factories/searxng/resources/searxng.d.ts +65 -0
- package/dist/factories/searxng/resources/searxng.d.ts.map +1 -0
- package/dist/factories/searxng/resources/searxng.js +188 -0
- package/dist/factories/searxng/resources/searxng.js.map +1 -0
- package/dist/factories/searxng/types.d.ts +126 -0
- package/dist/factories/searxng/types.d.ts.map +1 -0
- package/dist/factories/searxng/types.js +176 -0
- package/dist/factories/searxng/types.js.map +1 -0
- package/dist/factories/searxng/utils/settings-builder.d.ts +46 -0
- package/dist/factories/searxng/utils/settings-builder.d.ts.map +1 -0
- package/dist/factories/searxng/utils/settings-builder.js +52 -0
- package/dist/factories/searxng/utils/settings-builder.js.map +1 -0
- package/dist/factories/simple/config/secret.d.ts.map +1 -1
- package/dist/factories/simple/config/secret.js +28 -0
- package/dist/factories/simple/config/secret.js.map +1 -1
- package/dist/factories/valkey/compositions/index.d.ts +2 -0
- package/dist/factories/valkey/compositions/index.d.ts.map +1 -0
- package/dist/factories/valkey/compositions/index.js +2 -0
- package/dist/factories/valkey/compositions/index.js.map +1 -0
- package/dist/factories/valkey/compositions/valkey-bootstrap.d.ts +41 -0
- package/dist/factories/valkey/compositions/valkey-bootstrap.d.ts.map +1 -0
- package/dist/factories/valkey/compositions/valkey-bootstrap.js +105 -0
- package/dist/factories/valkey/compositions/valkey-bootstrap.js.map +1 -0
- package/dist/factories/valkey/index.d.ts +50 -0
- package/dist/factories/valkey/index.d.ts.map +1 -0
- package/dist/factories/valkey/index.js +50 -0
- package/dist/factories/valkey/index.js.map +1 -0
- package/dist/factories/valkey/resources/helm.d.ts +53 -0
- package/dist/factories/valkey/resources/helm.d.ts.map +1 -0
- package/dist/factories/valkey/resources/helm.js +82 -0
- package/dist/factories/valkey/resources/helm.js.map +1 -0
- package/dist/factories/valkey/resources/index.d.ts +3 -0
- package/dist/factories/valkey/resources/index.d.ts.map +1 -0
- package/dist/factories/valkey/resources/index.js +3 -0
- package/dist/factories/valkey/resources/index.js.map +1 -0
- package/dist/factories/valkey/resources/valkey.d.ts +46 -0
- package/dist/factories/valkey/resources/valkey.d.ts.map +1 -0
- package/dist/factories/valkey/resources/valkey.js +123 -0
- package/dist/factories/valkey/resources/valkey.js.map +1 -0
- package/dist/factories/valkey/types.d.ts +185 -0
- package/dist/factories/valkey/types.d.ts.map +1 -0
- package/dist/factories/valkey/types.js +204 -0
- package/dist/factories/valkey/types.js.map +1 -0
- package/dist/factories/valkey/utils/helm-values-mapper.d.ts +32 -0
- package/dist/factories/valkey/utils/helm-values-mapper.d.ts.map +1 -0
- package/dist/factories/valkey/utils/helm-values-mapper.js +58 -0
- package/dist/factories/valkey/utils/helm-values-mapper.js.map +1 -0
- package/dist/factories/valkey/utils/index.d.ts +2 -0
- package/dist/factories/valkey/utils/index.d.ts.map +1 -0
- package/dist/factories/valkey/utils/index.js +2 -0
- package/dist/factories/valkey/utils/index.js.map +1 -0
- package/dist/factories/webapp/compositions/index.d.ts +2 -0
- package/dist/factories/webapp/compositions/index.d.ts.map +1 -0
- package/dist/factories/webapp/compositions/index.js +2 -0
- package/dist/factories/webapp/compositions/index.js.map +1 -0
- package/dist/factories/webapp/compositions/web-app-with-processing.d.ts +97 -0
- package/dist/factories/webapp/compositions/web-app-with-processing.d.ts.map +1 -0
- package/dist/factories/webapp/compositions/web-app-with-processing.js +220 -0
- package/dist/factories/webapp/compositions/web-app-with-processing.js.map +1 -0
- package/dist/factories/webapp/index.d.ts +53 -0
- package/dist/factories/webapp/index.d.ts.map +1 -0
- package/dist/factories/webapp/index.js +53 -0
- package/dist/factories/webapp/index.js.map +1 -0
- package/dist/factories/webapp/types.d.ts +69 -0
- package/dist/factories/webapp/types.d.ts.map +1 -0
- package/dist/factories/webapp/types.js +92 -0
- package/dist/factories/webapp/types.js.map +1 -0
- package/dist/shared/brands.d.ts +16 -0
- package/dist/shared/brands.d.ts.map +1 -1
- package/dist/shared/brands.js +16 -0
- package/dist/shared/brands.js.map +1 -1
- package/package.json +29 -1
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Full-Stack Web Application with Background Processing
|
|
3
|
+
*
|
|
4
|
+
* Deploys a complete application stack:
|
|
5
|
+
* 1. **PostgreSQL** (via CNPG) — cluster + PgBouncer pooler
|
|
6
|
+
* 2. **Valkey** cache cluster
|
|
7
|
+
* 3. **Inngest** workflow engine (with external DB/cache, not bundled)
|
|
8
|
+
* 4. **Application** Deployment + Service
|
|
9
|
+
*
|
|
10
|
+
* All connection strings are automatically wired into the app's environment:
|
|
11
|
+
* - `DATABASE_URL` — points to the PgBouncer pooler
|
|
12
|
+
* - `VALKEY_URL` / `REDIS_URL` — points to the Valkey service
|
|
13
|
+
* - `INNGEST_BASE_URL` — points to the Inngest server
|
|
14
|
+
* - `INNGEST_EVENT_KEY` / `INNGEST_SIGNING_KEY` — from config
|
|
15
|
+
*
|
|
16
|
+
* Resource dependencies are expressed through proxy references:
|
|
17
|
+
* - Inngest references `cache.metadata.name` for the redis URI → deploys after Valkey
|
|
18
|
+
* - Inngest references `database.status.writeService` for the postgres URI → deploys after CNPG
|
|
19
|
+
* - App references service names derived from resource names → deploys after all infra
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* import { webAppWithProcessing } from 'typekro/webapp';
|
|
24
|
+
*
|
|
25
|
+
* const factory = webAppWithProcessing.factory('kro', {
|
|
26
|
+
* namespace: 'production',
|
|
27
|
+
* waitForReady: true,
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* await factory.deploy({
|
|
31
|
+
* name: 'my-app',
|
|
32
|
+
* namespace: 'production',
|
|
33
|
+
* app: {
|
|
34
|
+
* image: 'my-app:latest',
|
|
35
|
+
* port: 3000,
|
|
36
|
+
* replicas: 2,
|
|
37
|
+
* env: {
|
|
38
|
+
* NODE_ENV: 'production',
|
|
39
|
+
* },
|
|
40
|
+
* },
|
|
41
|
+
* database: {
|
|
42
|
+
* instances: 3,
|
|
43
|
+
* storageSize: '50Gi',
|
|
44
|
+
* storageClass: 'gp3',
|
|
45
|
+
* database: 'myapp',
|
|
46
|
+
* },
|
|
47
|
+
* cache: { shards: 3, replicas: 1 },
|
|
48
|
+
* processing: {
|
|
49
|
+
* eventKey: 'deadbeef0123456789abcdef01234567',
|
|
50
|
+
* signingKey: 'deadbeef0123456789abcdef0123456789abcdef0123456789abcdef01234567',
|
|
51
|
+
* sdkUrl: ['http://my-app:3000/api/inngest'],
|
|
52
|
+
* },
|
|
53
|
+
* });
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare const webAppWithProcessing: import("../../../index.js").CallableComposition<{
|
|
57
|
+
name: string;
|
|
58
|
+
app: {
|
|
59
|
+
image: string;
|
|
60
|
+
port?: number;
|
|
61
|
+
replicas?: number;
|
|
62
|
+
env?: Record<string, string>;
|
|
63
|
+
};
|
|
64
|
+
database: {
|
|
65
|
+
storageSize: string;
|
|
66
|
+
instances?: number;
|
|
67
|
+
storageClass?: string;
|
|
68
|
+
database?: string;
|
|
69
|
+
owner?: string;
|
|
70
|
+
};
|
|
71
|
+
processing: {
|
|
72
|
+
eventKey: string;
|
|
73
|
+
signingKey: string;
|
|
74
|
+
sdkUrl?: string[];
|
|
75
|
+
replicas?: number;
|
|
76
|
+
};
|
|
77
|
+
namespace?: string;
|
|
78
|
+
cache?: {
|
|
79
|
+
shards?: number;
|
|
80
|
+
replicas?: number;
|
|
81
|
+
volumePermissions?: boolean;
|
|
82
|
+
storageSize?: string;
|
|
83
|
+
};
|
|
84
|
+
}, {
|
|
85
|
+
ready: boolean;
|
|
86
|
+
databaseUrl: string;
|
|
87
|
+
cacheUrl: string;
|
|
88
|
+
inngestUrl: string;
|
|
89
|
+
appUrl: string;
|
|
90
|
+
components: {
|
|
91
|
+
app: boolean;
|
|
92
|
+
database: boolean;
|
|
93
|
+
cache: boolean;
|
|
94
|
+
inngest: boolean;
|
|
95
|
+
};
|
|
96
|
+
}>;
|
|
97
|
+
//# sourceMappingURL=web-app-with-processing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-app-with-processing.d.ts","sourceRoot":"","sources":["../../../../src/factories/webapp/compositions/web-app-with-processing.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgLhC,CAAC"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { kubernetesComposition } from '../../../core/composition/imperative.js';
|
|
2
|
+
import { cluster } from '../../cnpg/resources/cluster.js';
|
|
3
|
+
import { pooler } from '../../cnpg/resources/pooler.js';
|
|
4
|
+
import { inngestBootstrap } from '../../inngest/compositions/inngest-bootstrap.js';
|
|
5
|
+
import { simple } from '../../simple/index.js';
|
|
6
|
+
import { valkey } from '../../valkey/resources/valkey.js';
|
|
7
|
+
import { WebAppWithProcessingConfigSchema, WebAppWithProcessingStatusSchema, } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Full-Stack Web Application with Background Processing
|
|
10
|
+
*
|
|
11
|
+
* Deploys a complete application stack:
|
|
12
|
+
* 1. **PostgreSQL** (via CNPG) — cluster + PgBouncer pooler
|
|
13
|
+
* 2. **Valkey** cache cluster
|
|
14
|
+
* 3. **Inngest** workflow engine (with external DB/cache, not bundled)
|
|
15
|
+
* 4. **Application** Deployment + Service
|
|
16
|
+
*
|
|
17
|
+
* All connection strings are automatically wired into the app's environment:
|
|
18
|
+
* - `DATABASE_URL` — points to the PgBouncer pooler
|
|
19
|
+
* - `VALKEY_URL` / `REDIS_URL` — points to the Valkey service
|
|
20
|
+
* - `INNGEST_BASE_URL` — points to the Inngest server
|
|
21
|
+
* - `INNGEST_EVENT_KEY` / `INNGEST_SIGNING_KEY` — from config
|
|
22
|
+
*
|
|
23
|
+
* Resource dependencies are expressed through proxy references:
|
|
24
|
+
* - Inngest references `cache.metadata.name` for the redis URI → deploys after Valkey
|
|
25
|
+
* - Inngest references `database.status.writeService` for the postgres URI → deploys after CNPG
|
|
26
|
+
* - App references service names derived from resource names → deploys after all infra
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* import { webAppWithProcessing } from 'typekro/webapp';
|
|
31
|
+
*
|
|
32
|
+
* const factory = webAppWithProcessing.factory('kro', {
|
|
33
|
+
* namespace: 'production',
|
|
34
|
+
* waitForReady: true,
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* await factory.deploy({
|
|
38
|
+
* name: 'my-app',
|
|
39
|
+
* namespace: 'production',
|
|
40
|
+
* app: {
|
|
41
|
+
* image: 'my-app:latest',
|
|
42
|
+
* port: 3000,
|
|
43
|
+
* replicas: 2,
|
|
44
|
+
* env: {
|
|
45
|
+
* NODE_ENV: 'production',
|
|
46
|
+
* },
|
|
47
|
+
* },
|
|
48
|
+
* database: {
|
|
49
|
+
* instances: 3,
|
|
50
|
+
* storageSize: '50Gi',
|
|
51
|
+
* storageClass: 'gp3',
|
|
52
|
+
* database: 'myapp',
|
|
53
|
+
* },
|
|
54
|
+
* cache: { shards: 3, replicas: 1 },
|
|
55
|
+
* processing: {
|
|
56
|
+
* eventKey: 'deadbeef0123456789abcdef01234567',
|
|
57
|
+
* signingKey: 'deadbeef0123456789abcdef0123456789abcdef0123456789abcdef01234567',
|
|
58
|
+
* sdkUrl: ['http://my-app:3000/api/inngest'],
|
|
59
|
+
* },
|
|
60
|
+
* });
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export const webAppWithProcessing = kubernetesComposition({
|
|
64
|
+
name: 'web-app-with-processing',
|
|
65
|
+
kind: 'WebAppWithProcessing',
|
|
66
|
+
spec: WebAppWithProcessingConfigSchema,
|
|
67
|
+
status: WebAppWithProcessingStatusSchema,
|
|
68
|
+
}, (spec) => {
|
|
69
|
+
const ns = spec.namespace ?? 'default';
|
|
70
|
+
const appPort = spec.app.port ?? 3000;
|
|
71
|
+
const appReplicas = spec.app.replicas ?? 1;
|
|
72
|
+
const inngestReplicas = spec.processing.replicas ?? 1;
|
|
73
|
+
const dbName = spec.database.database ?? spec.name;
|
|
74
|
+
const dbOwner = spec.database.owner ?? 'app';
|
|
75
|
+
// ── PostgreSQL (CNPG) ──────────────────────────────────────────────
|
|
76
|
+
const database = cluster({
|
|
77
|
+
name: `${spec.name}-db`,
|
|
78
|
+
namespace: ns,
|
|
79
|
+
spec: {
|
|
80
|
+
instances: spec.database.instances,
|
|
81
|
+
storage: {
|
|
82
|
+
size: spec.database.storageSize,
|
|
83
|
+
...(spec.database.storageClass ? { storageClass: spec.database.storageClass } : {}),
|
|
84
|
+
},
|
|
85
|
+
bootstrap: {
|
|
86
|
+
initdb: { database: dbName, owner: dbOwner },
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
id: 'database',
|
|
90
|
+
});
|
|
91
|
+
const dbPooler = pooler({
|
|
92
|
+
name: `${spec.name}-db-pooler`,
|
|
93
|
+
namespace: ns,
|
|
94
|
+
spec: {
|
|
95
|
+
cluster: { name: `${spec.name}-db` },
|
|
96
|
+
type: 'rw',
|
|
97
|
+
pgbouncer: { poolMode: 'transaction' },
|
|
98
|
+
},
|
|
99
|
+
id: 'dbPooler',
|
|
100
|
+
});
|
|
101
|
+
// ── Valkey Cache ────────────────────────────────────────────────────
|
|
102
|
+
const cache = valkey({
|
|
103
|
+
name: `${spec.name}-cache`,
|
|
104
|
+
namespace: ns,
|
|
105
|
+
spec: {
|
|
106
|
+
volumePermissions: spec.cache?.volumePermissions ?? true,
|
|
107
|
+
anonymousAuth: true,
|
|
108
|
+
...(spec.cache?.shards != null ? { shards: spec.cache.shards } : {}),
|
|
109
|
+
...(spec.cache?.replicas != null ? { replicas: spec.cache.replicas } : {}),
|
|
110
|
+
storage: {
|
|
111
|
+
spec: {
|
|
112
|
+
accessModes: ['ReadWriteOnce'],
|
|
113
|
+
resources: { requests: { storage: spec.cache?.storageSize ?? '1Gi' } },
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
id: 'cache',
|
|
118
|
+
});
|
|
119
|
+
// The Valkey operator creates a client Service for each Valkey CR, but KRO's
|
|
120
|
+
// applyset pruning deletes Services it doesn't manage. Declare the cache
|
|
121
|
+
// Service explicitly so KRO includes it in its applyset and doesn't prune it.
|
|
122
|
+
simple.Service({
|
|
123
|
+
name: `${spec.name}-cache`,
|
|
124
|
+
namespace: ns,
|
|
125
|
+
selector: {
|
|
126
|
+
'app.kubernetes.io/name': 'valkey',
|
|
127
|
+
'app.kubernetes.io/instance': `${spec.name}-cache`,
|
|
128
|
+
},
|
|
129
|
+
ports: [{ port: 6379, targetPort: 6379 }],
|
|
130
|
+
id: 'cacheService',
|
|
131
|
+
});
|
|
132
|
+
// ── Database credentials ──────────────────────────────────────────────
|
|
133
|
+
// CNPG auto-generates a Secret named {cluster}-{owner} during bootstrap.
|
|
134
|
+
// Validated against CNPG v1.25 (cloudnative-pg chart 0.23.0).
|
|
135
|
+
// The name is deterministic — no need for an externalRef which would block
|
|
136
|
+
// KRO reconciliation (KRO waits for external refs to exist before creating
|
|
137
|
+
// dependent resources, but the Secret only exists after CNPG bootstraps).
|
|
138
|
+
const dbSecretName = `${spec.name}-db-${dbOwner}`;
|
|
139
|
+
// ── Inngest (with external DB + cache) ──────────────────────────────
|
|
140
|
+
// database.status.writeService creates an implicit deployment dependency:
|
|
141
|
+
// the dependency resolver detects the reference and adds a DAG edge,
|
|
142
|
+
// ensuring the database is ready BEFORE Inngest deploys. The actual
|
|
143
|
+
// postgres credentials are injected via the CNPG Secret (secretKeyRef below).
|
|
144
|
+
const inngest = inngestBootstrap({
|
|
145
|
+
name: `${spec.name}-inngest`,
|
|
146
|
+
namespace: ns,
|
|
147
|
+
inngest: {
|
|
148
|
+
eventKey: spec.processing.eventKey,
|
|
149
|
+
signingKey: spec.processing.signingKey,
|
|
150
|
+
postgres: { uri: `postgresql://${dbOwner}@${database.status.writeService}:5432/${dbName}` },
|
|
151
|
+
redis: { uri: `redis://${cache.metadata.name}:6379` },
|
|
152
|
+
sdkUrl: spec.processing.sdkUrl,
|
|
153
|
+
},
|
|
154
|
+
postgresql: { enabled: false },
|
|
155
|
+
redis: { enabled: false },
|
|
156
|
+
replicaCount: inngestReplicas,
|
|
157
|
+
// Deploy Inngest pods in the same namespace as CNPG (for Secret access)
|
|
158
|
+
// and inject the real postgres URI from the CNPG Secret via secretKeyRef.
|
|
159
|
+
customValues: {
|
|
160
|
+
namespace: { create: false, name: ns },
|
|
161
|
+
inngest: {
|
|
162
|
+
extraEnv: [
|
|
163
|
+
{
|
|
164
|
+
name: 'INNGEST_POSTGRES_URI',
|
|
165
|
+
valueFrom: {
|
|
166
|
+
secretKeyRef: {
|
|
167
|
+
name: dbSecretName,
|
|
168
|
+
key: 'uri',
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
// ── Application ─────────────────────────────────────────────────────
|
|
177
|
+
const appEnv = {
|
|
178
|
+
DATABASE_URL: `postgresql://${dbOwner}@${dbPooler.metadata.name}:5432/${dbName}`,
|
|
179
|
+
VALKEY_URL: `redis://${cache.metadata.name}:6379`,
|
|
180
|
+
REDIS_URL: `redis://${cache.metadata.name}:6379`,
|
|
181
|
+
INNGEST_BASE_URL: `http://${spec.name}-inngest:8288`,
|
|
182
|
+
INNGEST_EVENT_KEY: spec.processing.eventKey,
|
|
183
|
+
INNGEST_SIGNING_KEY: spec.processing.signingKey,
|
|
184
|
+
...spec.app.env,
|
|
185
|
+
};
|
|
186
|
+
const app = simple.Deployment({
|
|
187
|
+
name: spec.name,
|
|
188
|
+
namespace: ns,
|
|
189
|
+
image: spec.app.image,
|
|
190
|
+
replicas: appReplicas,
|
|
191
|
+
ports: [{ containerPort: appPort }],
|
|
192
|
+
env: appEnv,
|
|
193
|
+
id: 'app',
|
|
194
|
+
});
|
|
195
|
+
simple.Service({
|
|
196
|
+
name: spec.name,
|
|
197
|
+
namespace: ns,
|
|
198
|
+
selector: { app: spec.name },
|
|
199
|
+
ports: [{ port: appPort, targetPort: appPort }],
|
|
200
|
+
id: 'appService',
|
|
201
|
+
});
|
|
202
|
+
// ── Status ──────────────────────────────────────────────────────────
|
|
203
|
+
return {
|
|
204
|
+
ready: app.status.readyReplicas >= appReplicas &&
|
|
205
|
+
database.status.readyInstances >= (spec.database.instances ?? 1) &&
|
|
206
|
+
cache.status.ready &&
|
|
207
|
+
inngest.status.ready,
|
|
208
|
+
databaseUrl: `postgresql://${dbOwner}@${dbPooler.metadata.name}:5432/${dbName}`,
|
|
209
|
+
cacheUrl: `redis://${cache.metadata.name}:6379`,
|
|
210
|
+
inngestUrl: `http://${spec.name}-inngest:8288`,
|
|
211
|
+
appUrl: `http://${spec.name}:${appPort}`,
|
|
212
|
+
components: {
|
|
213
|
+
app: app.status.readyReplicas >= appReplicas,
|
|
214
|
+
database: database.status.readyInstances >= (spec.database.instances ?? 1),
|
|
215
|
+
cache: cache.status.ready,
|
|
216
|
+
inngest: inngest.status.ready,
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
});
|
|
220
|
+
//# sourceMappingURL=web-app-with-processing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-app-with-processing.js","sourceRoot":"","sources":["../../../../src/factories/webapp/compositions/web-app-with-processing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web Application Compositions for TypeKro
|
|
3
|
+
*
|
|
4
|
+
* Higher-level compositions that wire together databases, caches,
|
|
5
|
+
* workflow engines, and application deployments with automatic
|
|
6
|
+
* environment variable injection.
|
|
7
|
+
*
|
|
8
|
+
* ## Compositions
|
|
9
|
+
* - `webAppWithProcessing` — Full-stack: App + CNPG PostgreSQL + Valkey + Inngest
|
|
10
|
+
*
|
|
11
|
+
* All connection URLs (DATABASE_URL, VALKEY_URL, INNGEST_BASE_URL) are
|
|
12
|
+
* automatically injected into the application's environment. The status
|
|
13
|
+
* exposes these URLs for debugging or wiring additional services.
|
|
14
|
+
*
|
|
15
|
+
* ## Prerequisites
|
|
16
|
+
* The following operators must be installed in the cluster:
|
|
17
|
+
* - CloudNativePG operator (`typekro/cnpg` bootstrap)
|
|
18
|
+
* - Hyperspike Valkey operator (`typekro/valkey` bootstrap)
|
|
19
|
+
* - Flux CD (for Inngest HelmRelease)
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* import { webAppWithProcessing } from 'typekro/webapp';
|
|
24
|
+
*
|
|
25
|
+
* const factory = webAppWithProcessing.factory('kro', {
|
|
26
|
+
* namespace: 'production',
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* const instance = await factory.deploy({
|
|
30
|
+
* name: 'my-app',
|
|
31
|
+
* namespace: 'production',
|
|
32
|
+
* app: { image: 'my-app:latest', port: 3000 },
|
|
33
|
+
* database: { storageSize: '50Gi', database: 'mydb' },
|
|
34
|
+
* processing: {
|
|
35
|
+
* eventKey: 'deadbeef...',
|
|
36
|
+
* signingKey: 'deadbeef...',
|
|
37
|
+
* },
|
|
38
|
+
* });
|
|
39
|
+
*
|
|
40
|
+
* // Connection details available on status
|
|
41
|
+
* console.log(instance.status.databaseUrl);
|
|
42
|
+
* console.log(instance.status.cacheUrl);
|
|
43
|
+
* console.log(instance.status.inngestUrl);
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @see https://typekro.run/api/cnpg/ — PostgreSQL integration
|
|
47
|
+
* @see https://typekro.run/api/valkey/ — Valkey integration
|
|
48
|
+
* @see https://typekro.run/api/inngest/ — Inngest integration
|
|
49
|
+
* @module
|
|
50
|
+
*/
|
|
51
|
+
export * from './compositions/index.js';
|
|
52
|
+
export * from './types.js';
|
|
53
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/factories/webapp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web Application Compositions for TypeKro
|
|
3
|
+
*
|
|
4
|
+
* Higher-level compositions that wire together databases, caches,
|
|
5
|
+
* workflow engines, and application deployments with automatic
|
|
6
|
+
* environment variable injection.
|
|
7
|
+
*
|
|
8
|
+
* ## Compositions
|
|
9
|
+
* - `webAppWithProcessing` — Full-stack: App + CNPG PostgreSQL + Valkey + Inngest
|
|
10
|
+
*
|
|
11
|
+
* All connection URLs (DATABASE_URL, VALKEY_URL, INNGEST_BASE_URL) are
|
|
12
|
+
* automatically injected into the application's environment. The status
|
|
13
|
+
* exposes these URLs for debugging or wiring additional services.
|
|
14
|
+
*
|
|
15
|
+
* ## Prerequisites
|
|
16
|
+
* The following operators must be installed in the cluster:
|
|
17
|
+
* - CloudNativePG operator (`typekro/cnpg` bootstrap)
|
|
18
|
+
* - Hyperspike Valkey operator (`typekro/valkey` bootstrap)
|
|
19
|
+
* - Flux CD (for Inngest HelmRelease)
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* import { webAppWithProcessing } from 'typekro/webapp';
|
|
24
|
+
*
|
|
25
|
+
* const factory = webAppWithProcessing.factory('kro', {
|
|
26
|
+
* namespace: 'production',
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* const instance = await factory.deploy({
|
|
30
|
+
* name: 'my-app',
|
|
31
|
+
* namespace: 'production',
|
|
32
|
+
* app: { image: 'my-app:latest', port: 3000 },
|
|
33
|
+
* database: { storageSize: '50Gi', database: 'mydb' },
|
|
34
|
+
* processing: {
|
|
35
|
+
* eventKey: 'deadbeef...',
|
|
36
|
+
* signingKey: 'deadbeef...',
|
|
37
|
+
* },
|
|
38
|
+
* });
|
|
39
|
+
*
|
|
40
|
+
* // Connection details available on status
|
|
41
|
+
* console.log(instance.status.databaseUrl);
|
|
42
|
+
* console.log(instance.status.cacheUrl);
|
|
43
|
+
* console.log(instance.status.inngestUrl);
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @see https://typekro.run/api/cnpg/ — PostgreSQL integration
|
|
47
|
+
* @see https://typekro.run/api/valkey/ — Valkey integration
|
|
48
|
+
* @see https://typekro.run/api/inngest/ — Inngest integration
|
|
49
|
+
* @module
|
|
50
|
+
*/
|
|
51
|
+
export * from './compositions/index.js';
|
|
52
|
+
export * from './types.js';
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/factories/webapp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web Application Composition Types
|
|
3
|
+
*
|
|
4
|
+
* Higher-level compositions that wire together CNPG, Valkey, Inngest,
|
|
5
|
+
* and application deployments with automatic environment variable injection.
|
|
6
|
+
*
|
|
7
|
+
* All config types are inferred from ArkType schemas — the schema is the
|
|
8
|
+
* single source of truth. Status types remain as interfaces since they
|
|
9
|
+
* represent k8s API responses, not validated input.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Full-stack web application with background processing.
|
|
15
|
+
*
|
|
16
|
+
* Deploys: App + CNPG PostgreSQL + Valkey cache + Inngest workflow engine.
|
|
17
|
+
* All connection strings are automatically wired into the app's environment.
|
|
18
|
+
*/
|
|
19
|
+
export declare const WebAppWithProcessingConfigSchema: import("arktype/internal/methods/object.ts").ObjectType<{
|
|
20
|
+
name: string;
|
|
21
|
+
app: {
|
|
22
|
+
image: string;
|
|
23
|
+
port?: number;
|
|
24
|
+
replicas?: number;
|
|
25
|
+
env?: Record<string, string>;
|
|
26
|
+
};
|
|
27
|
+
database: {
|
|
28
|
+
storageSize: string;
|
|
29
|
+
instances?: number;
|
|
30
|
+
storageClass?: string;
|
|
31
|
+
database?: string;
|
|
32
|
+
owner?: string;
|
|
33
|
+
};
|
|
34
|
+
processing: {
|
|
35
|
+
eventKey: string;
|
|
36
|
+
signingKey: string;
|
|
37
|
+
sdkUrl?: string[];
|
|
38
|
+
replicas?: number;
|
|
39
|
+
};
|
|
40
|
+
namespace?: string;
|
|
41
|
+
cache?: {
|
|
42
|
+
shards?: number;
|
|
43
|
+
replicas?: number;
|
|
44
|
+
volumePermissions?: boolean;
|
|
45
|
+
storageSize?: string;
|
|
46
|
+
};
|
|
47
|
+
}, {}>;
|
|
48
|
+
/** Inferred config type — no separate interface needed. */
|
|
49
|
+
export type WebAppWithProcessingConfig = typeof WebAppWithProcessingConfigSchema.infer;
|
|
50
|
+
/**
|
|
51
|
+
* Status schema for the full-stack web application deployment.
|
|
52
|
+
* Exposes connection URLs and readiness for each component.
|
|
53
|
+
*/
|
|
54
|
+
export declare const WebAppWithProcessingStatusSchema: import("arktype/internal/methods/object.ts").ObjectType<{
|
|
55
|
+
ready: boolean;
|
|
56
|
+
databaseUrl: string;
|
|
57
|
+
cacheUrl: string;
|
|
58
|
+
inngestUrl: string;
|
|
59
|
+
appUrl: string;
|
|
60
|
+
components: {
|
|
61
|
+
app: boolean;
|
|
62
|
+
database: boolean;
|
|
63
|
+
cache: boolean;
|
|
64
|
+
inngest: boolean;
|
|
65
|
+
};
|
|
66
|
+
}, {}>;
|
|
67
|
+
/** Inferred status type. */
|
|
68
|
+
export type WebAppWithProcessingStatus = typeof WebAppWithProcessingStatusSchema.infer;
|
|
69
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/factories/webapp/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmD3C,CAAC;AAEH,2DAA2D;AAC3D,MAAM,MAAM,0BAA0B,GAAG,OAAO,gCAAgC,CAAC,KAAK,CAAC;AAEvF;;;GAGG;AACH,eAAO,MAAM,gCAAgC;;;;;;;;;;;;MAY3C,CAAC;AAEH,4BAA4B;AAC5B,MAAM,MAAM,0BAA0B,GAAG,OAAO,gCAAgC,CAAC,KAAK,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web Application Composition Types
|
|
3
|
+
*
|
|
4
|
+
* Higher-level compositions that wire together CNPG, Valkey, Inngest,
|
|
5
|
+
* and application deployments with automatic environment variable injection.
|
|
6
|
+
*
|
|
7
|
+
* All config types are inferred from ArkType schemas — the schema is the
|
|
8
|
+
* single source of truth. Status types remain as interfaces since they
|
|
9
|
+
* represent k8s API responses, not validated input.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import { type } from 'arktype';
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Config Schemas (source of truth) + Inferred Types
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Full-stack web application with background processing.
|
|
19
|
+
*
|
|
20
|
+
* Deploys: App + CNPG PostgreSQL + Valkey cache + Inngest workflow engine.
|
|
21
|
+
* All connection strings are automatically wired into the app's environment.
|
|
22
|
+
*/
|
|
23
|
+
export const WebAppWithProcessingConfigSchema = type({
|
|
24
|
+
/** Application name (used as prefix for all resources). */
|
|
25
|
+
name: 'string',
|
|
26
|
+
/** Target namespace. */
|
|
27
|
+
'namespace?': 'string',
|
|
28
|
+
/** Application deployment settings. */
|
|
29
|
+
app: {
|
|
30
|
+
/** Container image (e.g., 'myapp:latest'). */
|
|
31
|
+
image: 'string',
|
|
32
|
+
/** Container port (default: 3000). */
|
|
33
|
+
'port?': 'number',
|
|
34
|
+
/** Number of replicas (default: 1). */
|
|
35
|
+
'replicas?': 'number',
|
|
36
|
+
/** Additional environment variables. */
|
|
37
|
+
'env?': 'Record<string, string>',
|
|
38
|
+
},
|
|
39
|
+
/** PostgreSQL database settings. */
|
|
40
|
+
database: {
|
|
41
|
+
/** Number of PostgreSQL instances (default: 1). */
|
|
42
|
+
'instances?': 'number',
|
|
43
|
+
/** Storage size (e.g., '10Gi', '50Gi'). */
|
|
44
|
+
storageSize: 'string',
|
|
45
|
+
/** Storage class name (e.g. 'gp3', 'local-path'). */
|
|
46
|
+
'storageClass?': 'string',
|
|
47
|
+
/** Database name to create (default: derived from app name). */
|
|
48
|
+
'database?': 'string',
|
|
49
|
+
/** Database owner (default: 'app'). */
|
|
50
|
+
'owner?': 'string',
|
|
51
|
+
},
|
|
52
|
+
/** Valkey cache settings. Always deployed (omitting uses defaults, does not skip cache). */
|
|
53
|
+
'cache?': {
|
|
54
|
+
/** Number of Valkey shards (default: 3). */
|
|
55
|
+
'shards?': 'number',
|
|
56
|
+
/** Replicas per shard (default: 0). */
|
|
57
|
+
'replicas?': 'number',
|
|
58
|
+
/** Enable volume permissions init container. */
|
|
59
|
+
'volumePermissions?': 'boolean',
|
|
60
|
+
/** Storage size per shard (default: '1Gi'). */
|
|
61
|
+
'storageSize?': 'string',
|
|
62
|
+
},
|
|
63
|
+
/** Inngest background processing settings. */
|
|
64
|
+
processing: {
|
|
65
|
+
/** Inngest event authentication key (hex string, required). */
|
|
66
|
+
eventKey: 'string',
|
|
67
|
+
/** Inngest request signing key (hex string, required). */
|
|
68
|
+
signingKey: 'string',
|
|
69
|
+
/** SDK URLs to auto-sync functions from. */
|
|
70
|
+
'sdkUrl?': 'string[]',
|
|
71
|
+
/** Number of Inngest server replicas (default: 1). */
|
|
72
|
+
'replicas?': 'number',
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
/**
|
|
76
|
+
* Status schema for the full-stack web application deployment.
|
|
77
|
+
* Exposes connection URLs and readiness for each component.
|
|
78
|
+
*/
|
|
79
|
+
export const WebAppWithProcessingStatusSchema = type({
|
|
80
|
+
ready: 'boolean',
|
|
81
|
+
databaseUrl: 'string',
|
|
82
|
+
cacheUrl: 'string',
|
|
83
|
+
inngestUrl: 'string',
|
|
84
|
+
appUrl: 'string',
|
|
85
|
+
components: {
|
|
86
|
+
app: 'boolean',
|
|
87
|
+
database: 'boolean',
|
|
88
|
+
cache: 'boolean',
|
|
89
|
+
inngest: 'boolean',
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/factories/webapp/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,+EAA+E;AAC/E,oDAAoD;AACpD,+EAA+E;AAE/E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,IAAI,CAAC;IACnD,2DAA2D;IAC3D,IAAI,EAAE,QAAQ;IACd,wBAAwB;IACxB,YAAY,EAAE,QAAQ;IACtB,uCAAuC;IACvC,GAAG,EAAE;QACH,8CAA8C;QAC9C,KAAK,EAAE,QAAQ;QACf,sCAAsC;QACtC,OAAO,EAAE,QAAQ;QACjB,uCAAuC;QACvC,WAAW,EAAE,QAAQ;QACrB,wCAAwC;QACxC,MAAM,EAAE,wBAAwB;KACjC;IACD,oCAAoC;IACpC,QAAQ,EAAE;QACR,mDAAmD;QACnD,YAAY,EAAE,QAAQ;QACtB,2CAA2C;QAC3C,WAAW,EAAE,QAAQ;QACrB,qDAAqD;QACrD,eAAe,EAAE,QAAQ;QACzB,gEAAgE;QAChE,WAAW,EAAE,QAAQ;QACrB,uCAAuC;QACvC,QAAQ,EAAE,QAAQ;KACnB;IACD,4FAA4F;IAC5F,QAAQ,EAAE;QACR,4CAA4C;QAC5C,SAAS,EAAE,QAAQ;QACnB,uCAAuC;QACvC,WAAW,EAAE,QAAQ;QACrB,gDAAgD;QAChD,oBAAoB,EAAE,SAAS;QAC/B,+CAA+C;QAC/C,cAAc,EAAE,QAAQ;KACzB;IACD,8CAA8C;IAC9C,UAAU,EAAE;QACV,+DAA+D;QAC/D,QAAQ,EAAE,QAAQ;QAClB,0DAA0D;QAC1D,UAAU,EAAE,QAAQ;QACpB,4CAA4C;QAC5C,SAAS,EAAE,UAAU;QACrB,sDAAsD;QACtD,WAAW,EAAE,QAAQ;KACtB;CACF,CAAC,CAAC;AAKH;;;GAGG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,IAAI,CAAC;IACnD,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,QAAQ;IACrB,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,QAAQ;IACpB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE;QACV,GAAG,EAAE,SAAS;QACd,QAAQ,EAAE,SAAS;QACnB,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,SAAS;KACnB;CACF,CAAC,CAAC"}
|
package/dist/shared/brands.d.ts
CHANGED
|
@@ -29,4 +29,20 @@ export declare const NESTED_COMPOSITION_BRAND: unique symbol;
|
|
|
29
29
|
* Brand symbol for CallableComposition objects
|
|
30
30
|
*/
|
|
31
31
|
export declare const CALLABLE_COMPOSITION_BRAND: unique symbol;
|
|
32
|
+
/**
|
|
33
|
+
* Regex pattern for matching __KUBERNETES_REF__ marker strings in values.
|
|
34
|
+
*
|
|
35
|
+
* Format: __KUBERNETES_REF_{resourceId}_{fieldPath}__
|
|
36
|
+
* - resourceId: camelCase with optional hyphens/digits (e.g., 'database', 'inngestBootstrap1')
|
|
37
|
+
* Hyphens are allowed for backward compatibility with older ID formats, though
|
|
38
|
+
* current convention enforces camelCase (toCamelCase in executeNestedCompositionWithSpec).
|
|
39
|
+
* - fieldPath: dot-separated path with optional $ for iteration (e.g., 'status.ready', 'spec.workers.$item.name')
|
|
40
|
+
* - Excludes __schema__ refs via negative lookahead
|
|
41
|
+
*
|
|
42
|
+
* This pattern is the single source of truth — all marker detection/resolution
|
|
43
|
+
* code must use this constant to stay in sync. Callers must create their own
|
|
44
|
+
* RegExp via `new RegExp(KUBERNETES_REF_MARKER_PATTERN.source, 'g')` to avoid
|
|
45
|
+
* stateful lastIndex issues with the global flag.
|
|
46
|
+
*/
|
|
47
|
+
export declare const KUBERNETES_REF_MARKER_PATTERN: RegExp;
|
|
32
48
|
//# sourceMappingURL=brands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brands.d.ts","sourceRoot":"","sources":["../../src/shared/brands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB,eAAsC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,oBAAoB,eAAsC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,oBAAoB,eAAsC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,wBAAwB,eAA0C,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,0BAA0B,eAA4C,CAAC"}
|
|
1
|
+
{"version":3,"file":"brands.d.ts","sourceRoot":"","sources":["../../src/shared/brands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB,eAAsC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,oBAAoB,eAAsC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,oBAAoB,eAAsC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,wBAAwB,eAA0C,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,0BAA0B,eAA4C,CAAC;AAEpF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,6BAA6B,QAAyE,CAAC"}
|
package/dist/shared/brands.js
CHANGED
|
@@ -29,4 +29,20 @@ export const NESTED_COMPOSITION_BRAND = Symbol.for('TypeKro.NestedComposition');
|
|
|
29
29
|
* Brand symbol for CallableComposition objects
|
|
30
30
|
*/
|
|
31
31
|
export const CALLABLE_COMPOSITION_BRAND = Symbol.for('TypeKro.CallableComposition');
|
|
32
|
+
/**
|
|
33
|
+
* Regex pattern for matching __KUBERNETES_REF__ marker strings in values.
|
|
34
|
+
*
|
|
35
|
+
* Format: __KUBERNETES_REF_{resourceId}_{fieldPath}__
|
|
36
|
+
* - resourceId: camelCase with optional hyphens/digits (e.g., 'database', 'inngestBootstrap1')
|
|
37
|
+
* Hyphens are allowed for backward compatibility with older ID formats, though
|
|
38
|
+
* current convention enforces camelCase (toCamelCase in executeNestedCompositionWithSpec).
|
|
39
|
+
* - fieldPath: dot-separated path with optional $ for iteration (e.g., 'status.ready', 'spec.workers.$item.name')
|
|
40
|
+
* - Excludes __schema__ refs via negative lookahead
|
|
41
|
+
*
|
|
42
|
+
* This pattern is the single source of truth — all marker detection/resolution
|
|
43
|
+
* code must use this constant to stay in sync. Callers must create their own
|
|
44
|
+
* RegExp via `new RegExp(KUBERNETES_REF_MARKER_PATTERN.source, 'g')` to avoid
|
|
45
|
+
* stateful lastIndex issues with the global flag.
|
|
46
|
+
*/
|
|
47
|
+
export const KUBERNETES_REF_MARKER_PATTERN = /(?:__KUBERNETES_REF_)(?!_schema__)([a-zA-Z0-9-]+)_([a-zA-Z0-9.$]+)__/;
|
|
32
48
|
//# sourceMappingURL=brands.js.map
|