typekro 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +185 -0
- package/README.md +1137 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/alchemy/deployers.d.ts +39 -0
- package/dist/alchemy/deployers.d.ts.map +1 -0
- package/dist/alchemy/deployers.js +194 -0
- package/dist/alchemy/deployers.js.map +1 -0
- package/dist/alchemy/deployment.d.ts +12 -0
- package/dist/alchemy/deployment.d.ts.map +1 -0
- package/dist/alchemy/deployment.js +12 -0
- package/dist/alchemy/deployment.js.map +1 -0
- package/dist/alchemy/index.d.ts +17 -0
- package/dist/alchemy/index.d.ts.map +1 -0
- package/dist/alchemy/index.js +20 -0
- package/dist/alchemy/index.js.map +1 -0
- package/dist/alchemy/resolver.d.ts +127 -0
- package/dist/alchemy/resolver.d.ts.map +1 -0
- package/dist/alchemy/resolver.js +341 -0
- package/dist/alchemy/resolver.js.map +1 -0
- package/dist/alchemy/resource-registration.d.ts +22 -0
- package/dist/alchemy/resource-registration.d.ts.map +1 -0
- package/dist/alchemy/resource-registration.js +218 -0
- package/dist/alchemy/resource-registration.js.map +1 -0
- package/dist/alchemy/type-inference.d.ts +13 -0
- package/dist/alchemy/type-inference.d.ts.map +1 -0
- package/dist/alchemy/type-inference.js +67 -0
- package/dist/alchemy/type-inference.js.map +1 -0
- package/dist/alchemy/types.d.ts +92 -0
- package/dist/alchemy/types.d.ts.map +1 -0
- package/dist/alchemy/types.js +8 -0
- package/dist/alchemy/types.js.map +1 -0
- package/dist/alchemy/utilities.d.ts +12 -0
- package/dist/alchemy/utilities.d.ts.map +1 -0
- package/dist/alchemy/utilities.js +16 -0
- package/dist/alchemy/utilities.js.map +1 -0
- package/dist/alchemy/wrapper.d.ts +16 -0
- package/dist/alchemy/wrapper.d.ts.map +1 -0
- package/dist/alchemy/wrapper.js +23 -0
- package/dist/alchemy/wrapper.js.map +1 -0
- package/dist/core/composition/composition.d.ts +94 -0
- package/dist/core/composition/composition.d.ts.map +1 -0
- package/dist/core/composition/composition.js +230 -0
- package/dist/core/composition/composition.js.map +1 -0
- package/dist/core/composition/index.d.ts +12 -0
- package/dist/core/composition/index.d.ts.map +1 -0
- package/dist/core/composition/index.js +12 -0
- package/dist/core/composition/index.js.map +1 -0
- package/dist/core/composition/typekro-runtime/index.d.ts +3 -0
- package/dist/core/composition/typekro-runtime/index.d.ts.map +1 -0
- package/dist/core/composition/typekro-runtime/index.js +2 -0
- package/dist/core/composition/typekro-runtime/index.js.map +1 -0
- package/dist/core/composition/typekro-runtime/typekro-runtime.d.ts +39 -0
- package/dist/core/composition/typekro-runtime/typekro-runtime.d.ts.map +1 -0
- package/dist/core/composition/typekro-runtime/typekro-runtime.js +100 -0
- package/dist/core/composition/typekro-runtime/typekro-runtime.js.map +1 -0
- package/dist/core/composition/typekro-runtime/types.d.ts +16 -0
- package/dist/core/composition/typekro-runtime/types.d.ts.map +1 -0
- package/dist/core/composition/typekro-runtime/types.js +12 -0
- package/dist/core/composition/typekro-runtime/types.js.map +1 -0
- package/dist/core/composition/types.d.ts +264 -0
- package/dist/core/composition/types.d.ts.map +1 -0
- package/dist/core/composition/types.js +2 -0
- package/dist/core/composition/types.js.map +1 -0
- package/dist/core/constants/brands.d.ts +42 -0
- package/dist/core/constants/brands.d.ts.map +1 -0
- package/dist/core/constants/brands.js +51 -0
- package/dist/core/constants/brands.js.map +1 -0
- package/dist/core/dependencies/graph.d.ts +67 -0
- package/dist/core/dependencies/graph.d.ts.map +1 -0
- package/dist/core/dependencies/graph.js +220 -0
- package/dist/core/dependencies/graph.js.map +1 -0
- package/dist/core/dependencies/index.d.ts +7 -0
- package/dist/core/dependencies/index.d.ts.map +1 -0
- package/dist/core/dependencies/index.js +8 -0
- package/dist/core/dependencies/index.js.map +1 -0
- package/dist/core/dependencies/resolver.d.ts +53 -0
- package/dist/core/dependencies/resolver.d.ts.map +1 -0
- package/dist/core/dependencies/resolver.js +167 -0
- package/dist/core/dependencies/resolver.js.map +1 -0
- package/dist/core/dependencies/type-guards.d.ts +17 -0
- package/dist/core/dependencies/type-guards.d.ts.map +1 -0
- package/dist/core/dependencies/type-guards.js +35 -0
- package/dist/core/dependencies/type-guards.js.map +1 -0
- package/dist/core/deployment/deployment-strategies.d.ts +12 -0
- package/dist/core/deployment/deployment-strategies.d.ts.map +1 -0
- package/dist/core/deployment/deployment-strategies.js +11 -0
- package/dist/core/deployment/deployment-strategies.js.map +1 -0
- package/dist/core/deployment/direct-factory.d.ts +111 -0
- package/dist/core/deployment/direct-factory.d.ts.map +1 -0
- package/dist/core/deployment/direct-factory.js +627 -0
- package/dist/core/deployment/direct-factory.js.map +1 -0
- package/dist/core/deployment/engine.d.ts +128 -0
- package/dist/core/deployment/engine.d.ts.map +1 -0
- package/dist/core/deployment/engine.js +1408 -0
- package/dist/core/deployment/engine.js.map +1 -0
- package/dist/core/deployment/index.d.ts +14 -0
- package/dist/core/deployment/index.d.ts.map +1 -0
- package/dist/core/deployment/index.js +14 -0
- package/dist/core/deployment/index.js.map +1 -0
- package/dist/core/deployment/kro-factory.d.ts +143 -0
- package/dist/core/deployment/kro-factory.d.ts.map +1 -0
- package/dist/core/deployment/kro-factory.js +837 -0
- package/dist/core/deployment/kro-factory.js.map +1 -0
- package/dist/core/deployment/readiness.d.ts +54 -0
- package/dist/core/deployment/readiness.d.ts.map +1 -0
- package/dist/core/deployment/readiness.js +175 -0
- package/dist/core/deployment/readiness.js.map +1 -0
- package/dist/core/deployment/rollback-manager.d.ts +63 -0
- package/dist/core/deployment/rollback-manager.d.ts.map +1 -0
- package/dist/core/deployment/rollback-manager.js +225 -0
- package/dist/core/deployment/rollback-manager.js.map +1 -0
- package/dist/core/deployment/shared-utilities.d.ts +41 -0
- package/dist/core/deployment/shared-utilities.d.ts.map +1 -0
- package/dist/core/deployment/shared-utilities.js +100 -0
- package/dist/core/deployment/shared-utilities.js.map +1 -0
- package/dist/core/deployment/status-hydrator.d.ts +86 -0
- package/dist/core/deployment/status-hydrator.d.ts.map +1 -0
- package/dist/core/deployment/status-hydrator.js +262 -0
- package/dist/core/deployment/status-hydrator.js.map +1 -0
- package/dist/core/deployment/strategies/alchemy-strategy.d.ts +107 -0
- package/dist/core/deployment/strategies/alchemy-strategy.d.ts.map +1 -0
- package/dist/core/deployment/strategies/alchemy-strategy.js +446 -0
- package/dist/core/deployment/strategies/alchemy-strategy.js.map +1 -0
- package/dist/core/deployment/strategies/base-strategy.d.ts +50 -0
- package/dist/core/deployment/strategies/base-strategy.d.ts.map +1 -0
- package/dist/core/deployment/strategies/base-strategy.js +82 -0
- package/dist/core/deployment/strategies/base-strategy.js.map +1 -0
- package/dist/core/deployment/strategies/direct-strategy.d.ts +29 -0
- package/dist/core/deployment/strategies/direct-strategy.d.ts.map +1 -0
- package/dist/core/deployment/strategies/direct-strategy.js +80 -0
- package/dist/core/deployment/strategies/direct-strategy.js.map +1 -0
- package/dist/core/deployment/strategies/index.d.ts +12 -0
- package/dist/core/deployment/strategies/index.d.ts.map +1 -0
- package/dist/core/deployment/strategies/index.js +12 -0
- package/dist/core/deployment/strategies/index.js.map +1 -0
- package/dist/core/deployment/strategies/kro-strategy.d.ts +41 -0
- package/dist/core/deployment/strategies/kro-strategy.d.ts.map +1 -0
- package/dist/core/deployment/strategies/kro-strategy.js +270 -0
- package/dist/core/deployment/strategies/kro-strategy.js.map +1 -0
- package/dist/core/direct-deployment.d.ts +8 -0
- package/dist/core/direct-deployment.d.ts.map +1 -0
- package/dist/core/direct-deployment.js +9 -0
- package/dist/core/direct-deployment.js.map +1 -0
- package/dist/core/errors.d.ts +73 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +250 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/evaluation/cel-optimizer.d.ts +48 -0
- package/dist/core/evaluation/cel-optimizer.d.ts.map +1 -0
- package/dist/core/evaluation/cel-optimizer.js +176 -0
- package/dist/core/evaluation/cel-optimizer.js.map +1 -0
- package/dist/core/factory.d.ts +12 -0
- package/dist/core/factory.d.ts.map +1 -0
- package/dist/core/factory.js +13 -0
- package/dist/core/factory.js.map +1 -0
- package/dist/core/kubernetes/api.d.ts +43 -0
- package/dist/core/kubernetes/api.d.ts.map +1 -0
- package/dist/core/kubernetes/api.js +209 -0
- package/dist/core/kubernetes/api.js.map +1 -0
- package/dist/core/kubernetes/client-provider.d.ts +204 -0
- package/dist/core/kubernetes/client-provider.d.ts.map +1 -0
- package/dist/core/kubernetes/client-provider.js +421 -0
- package/dist/core/kubernetes/client-provider.js.map +1 -0
- package/dist/core/logging/config.d.ts +14 -0
- package/dist/core/logging/config.d.ts.map +1 -0
- package/dist/core/logging/config.js +57 -0
- package/dist/core/logging/config.js.map +1 -0
- package/dist/core/logging/index.d.ts +4 -0
- package/dist/core/logging/index.d.ts.map +1 -0
- package/dist/core/logging/index.js +4 -0
- package/dist/core/logging/index.js.map +1 -0
- package/dist/core/logging/logger.d.ts +26 -0
- package/dist/core/logging/logger.d.ts.map +1 -0
- package/dist/core/logging/logger.js +114 -0
- package/dist/core/logging/logger.js.map +1 -0
- package/dist/core/logging/types.d.ts +93 -0
- package/dist/core/logging/types.d.ts.map +1 -0
- package/dist/core/logging/types.js +2 -0
- package/dist/core/logging/types.js.map +1 -0
- package/dist/core/readiness/cluster-state.d.ts +229 -0
- package/dist/core/readiness/cluster-state.d.ts.map +1 -0
- package/dist/core/readiness/cluster-state.js +360 -0
- package/dist/core/readiness/cluster-state.js.map +1 -0
- package/dist/core/readiness/index.d.ts +5 -0
- package/dist/core/readiness/index.d.ts.map +1 -0
- package/dist/core/readiness/index.js +5 -0
- package/dist/core/readiness/index.js.map +1 -0
- package/dist/core/readiness/registry.d.ts +45 -0
- package/dist/core/readiness/registry.d.ts.map +1 -0
- package/dist/core/readiness/registry.js +62 -0
- package/dist/core/readiness/registry.js.map +1 -0
- package/dist/core/references/cel-evaluator.d.ts +102 -0
- package/dist/core/references/cel-evaluator.d.ts.map +1 -0
- package/dist/core/references/cel-evaluator.js +288 -0
- package/dist/core/references/cel-evaluator.js.map +1 -0
- package/dist/core/references/cel.d.ts +75 -0
- package/dist/core/references/cel.d.ts.map +1 -0
- package/dist/core/references/cel.js +213 -0
- package/dist/core/references/cel.js.map +1 -0
- package/dist/core/references/external-refs.d.ts +37 -0
- package/dist/core/references/external-refs.d.ts.map +1 -0
- package/dist/core/references/external-refs.js +53 -0
- package/dist/core/references/external-refs.js.map +1 -0
- package/dist/core/references/index.d.ts +15 -0
- package/dist/core/references/index.d.ts.map +1 -0
- package/dist/core/references/index.js +19 -0
- package/dist/core/references/index.js.map +1 -0
- package/dist/core/references/resolver.d.ts +117 -0
- package/dist/core/references/resolver.d.ts.map +1 -0
- package/dist/core/references/resolver.js +554 -0
- package/dist/core/references/resolver.js.map +1 -0
- package/dist/core/references/schema-proxy.d.ts +38 -0
- package/dist/core/references/schema-proxy.d.ts.map +1 -0
- package/dist/core/references/schema-proxy.js +163 -0
- package/dist/core/references/schema-proxy.js.map +1 -0
- package/dist/core/serialization/core.d.ts +15 -0
- package/dist/core/serialization/core.d.ts.map +1 -0
- package/dist/core/serialization/core.js +169 -0
- package/dist/core/serialization/core.js.map +1 -0
- package/dist/core/serialization/index.d.ts +9 -0
- package/dist/core/serialization/index.d.ts.map +1 -0
- package/dist/core/serialization/index.js +12 -0
- package/dist/core/serialization/index.js.map +1 -0
- package/dist/core/serialization/schema.d.ts +14 -0
- package/dist/core/serialization/schema.d.ts.map +1 -0
- package/dist/core/serialization/schema.js +33 -0
- package/dist/core/serialization/schema.js.map +1 -0
- package/dist/core/serialization/validation.d.ts +18 -0
- package/dist/core/serialization/validation.d.ts.map +1 -0
- package/dist/core/serialization/validation.js +165 -0
- package/dist/core/serialization/validation.js.map +1 -0
- package/dist/core/serialization/yaml.d.ts +10 -0
- package/dist/core/serialization/yaml.d.ts.map +1 -0
- package/dist/core/serialization/yaml.js +63 -0
- package/dist/core/serialization/yaml.js.map +1 -0
- package/dist/core/types/common.d.ts +41 -0
- package/dist/core/types/common.d.ts.map +1 -0
- package/dist/core/types/common.js +9 -0
- package/dist/core/types/common.js.map +1 -0
- package/dist/core/types/dependencies.d.ts +14 -0
- package/dist/core/types/dependencies.d.ts.map +1 -0
- package/dist/core/types/dependencies.js +5 -0
- package/dist/core/types/dependencies.js.map +1 -0
- package/dist/core/types/deployment.d.ts +265 -0
- package/dist/core/types/deployment.d.ts.map +1 -0
- package/dist/core/types/deployment.js +20 -0
- package/dist/core/types/deployment.js.map +1 -0
- package/dist/core/types/index.d.ts +19 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/index.js +15 -0
- package/dist/core/types/index.js.map +1 -0
- package/dist/core/types/kubernetes.d.ts +352 -0
- package/dist/core/types/kubernetes.d.ts.map +1 -0
- package/dist/core/types/kubernetes.js +5 -0
- package/dist/core/types/kubernetes.js.map +1 -0
- package/dist/core/types/references.d.ts +54 -0
- package/dist/core/types/references.d.ts.map +1 -0
- package/dist/core/types/references.js +14 -0
- package/dist/core/types/references.js.map +1 -0
- package/dist/core/types/resource-graph.d.ts +93 -0
- package/dist/core/types/resource-graph.d.ts.map +1 -0
- package/dist/core/types/resource-graph.js +8 -0
- package/dist/core/types/resource-graph.js.map +1 -0
- package/dist/core/types/serialization.d.ts +210 -0
- package/dist/core/types/serialization.d.ts.map +1 -0
- package/dist/core/types/serialization.js +5 -0
- package/dist/core/types/serialization.js.map +1 -0
- package/dist/core/types/yaml.d.ts +92 -0
- package/dist/core/types/yaml.d.ts.map +1 -0
- package/dist/core/types/yaml.js +2 -0
- package/dist/core/types/yaml.js.map +1 -0
- package/dist/core/types.d.ts +8 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +9 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/validation/cel-validator.d.ts +47 -0
- package/dist/core/validation/cel-validator.d.ts.map +1 -0
- package/dist/core/validation/cel-validator.js +200 -0
- package/dist/core/validation/cel-validator.js.map +1 -0
- package/dist/core/yaml/index.d.ts +5 -0
- package/dist/core/yaml/index.d.ts.map +1 -0
- package/dist/core/yaml/index.js +5 -0
- package/dist/core/yaml/index.js.map +1 -0
- package/dist/core/yaml/path-resolver.d.ts +122 -0
- package/dist/core/yaml/path-resolver.d.ts.map +1 -0
- package/dist/core/yaml/path-resolver.js +556 -0
- package/dist/core/yaml/path-resolver.js.map +1 -0
- package/dist/core.d.ts +30 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +59 -0
- package/dist/core.js.map +1 -0
- package/dist/factories/flux/git-repository.d.ts +62 -0
- package/dist/factories/flux/git-repository.d.ts.map +1 -0
- package/dist/factories/flux/git-repository.js +34 -0
- package/dist/factories/flux/git-repository.js.map +1 -0
- package/dist/factories/flux/index.d.ts +10 -0
- package/dist/factories/flux/index.d.ts.map +1 -0
- package/dist/factories/flux/index.js +11 -0
- package/dist/factories/flux/index.js.map +1 -0
- package/dist/factories/flux/kustomize/index.d.ts +4 -0
- package/dist/factories/flux/kustomize/index.d.ts.map +1 -0
- package/dist/factories/flux/kustomize/index.js +3 -0
- package/dist/factories/flux/kustomize/index.js.map +1 -0
- package/dist/factories/flux/kustomize/kustomization.d.ts +178 -0
- package/dist/factories/flux/kustomize/kustomization.d.ts.map +1 -0
- package/dist/factories/flux/kustomize/kustomization.js +108 -0
- package/dist/factories/flux/kustomize/kustomization.js.map +1 -0
- package/dist/factories/flux/kustomize/readiness-evaluators.d.ts +9 -0
- package/dist/factories/flux/kustomize/readiness-evaluators.d.ts.map +1 -0
- package/dist/factories/flux/kustomize/readiness-evaluators.js +71 -0
- package/dist/factories/flux/kustomize/readiness-evaluators.js.map +1 -0
- package/dist/factories/flux/kustomize/types.d.ts +2 -0
- package/dist/factories/flux/kustomize/types.d.ts.map +1 -0
- package/dist/factories/flux/kustomize/types.js +2 -0
- package/dist/factories/flux/kustomize/types.js.map +1 -0
- package/dist/factories/helm/helm-release.d.ts +139 -0
- package/dist/factories/helm/helm-release.d.ts.map +1 -0
- package/dist/factories/helm/helm-release.js +180 -0
- package/dist/factories/helm/helm-release.js.map +1 -0
- package/dist/factories/helm/helm-repository.d.ts +24 -0
- package/dist/factories/helm/helm-repository.d.ts.map +1 -0
- package/dist/factories/helm/helm-repository.js +57 -0
- package/dist/factories/helm/helm-repository.js.map +1 -0
- package/dist/factories/helm/index.d.ts +8 -0
- package/dist/factories/helm/index.d.ts.map +1 -0
- package/dist/factories/helm/index.js +8 -0
- package/dist/factories/helm/index.js.map +1 -0
- package/dist/factories/helm/readiness-evaluators.d.ts +55 -0
- package/dist/factories/helm/readiness-evaluators.d.ts.map +1 -0
- package/dist/factories/helm/readiness-evaluators.js +295 -0
- package/dist/factories/helm/readiness-evaluators.js.map +1 -0
- package/dist/factories/helm/types.d.ts +21 -0
- package/dist/factories/helm/types.d.ts.map +1 -0
- package/dist/factories/helm/types.js +2 -0
- package/dist/factories/helm/types.js.map +1 -0
- package/dist/factories/index.d.ts +12 -0
- package/dist/factories/index.d.ts.map +1 -0
- package/dist/factories/index.js +31 -0
- package/dist/factories/index.js.map +1 -0
- package/dist/factories/kro/index.d.ts +11 -0
- package/dist/factories/kro/index.d.ts.map +1 -0
- package/dist/factories/kro/index.js +10 -0
- package/dist/factories/kro/index.js.map +1 -0
- package/dist/factories/kro/kro-crd.d.ts +14 -0
- package/dist/factories/kro/kro-crd.d.ts.map +1 -0
- package/dist/factories/kro/kro-crd.js +51 -0
- package/dist/factories/kro/kro-crd.js.map +1 -0
- package/dist/factories/kro/kro-custom-resource.d.ts +23 -0
- package/dist/factories/kro/kro-custom-resource.d.ts.map +1 -0
- package/dist/factories/kro/kro-custom-resource.js +153 -0
- package/dist/factories/kro/kro-custom-resource.js.map +1 -0
- package/dist/factories/kro/resource-graph-definition.d.ts +12 -0
- package/dist/factories/kro/resource-graph-definition.d.ts.map +1 -0
- package/dist/factories/kro/resource-graph-definition.js +94 -0
- package/dist/factories/kro/resource-graph-definition.js.map +1 -0
- package/dist/factories/kubernetes/admission/index.d.ts +9 -0
- package/dist/factories/kubernetes/admission/index.d.ts.map +1 -0
- package/dist/factories/kubernetes/admission/index.js +9 -0
- package/dist/factories/kubernetes/admission/index.js.map +1 -0
- package/dist/factories/kubernetes/admission/mutating-webhook-configuration.d.ts +5 -0
- package/dist/factories/kubernetes/admission/mutating-webhook-configuration.d.ts.map +1 -0
- package/dist/factories/kubernetes/admission/mutating-webhook-configuration.js +10 -0
- package/dist/factories/kubernetes/admission/mutating-webhook-configuration.js.map +1 -0
- package/dist/factories/kubernetes/admission/validating-webhook-configuration.d.ts +5 -0
- package/dist/factories/kubernetes/admission/validating-webhook-configuration.d.ts.map +1 -0
- package/dist/factories/kubernetes/admission/validating-webhook-configuration.js +10 -0
- package/dist/factories/kubernetes/admission/validating-webhook-configuration.js.map +1 -0
- package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.d.ts +6 -0
- package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.d.ts.map +1 -0
- package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.js +35 -0
- package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.js.map +1 -0
- package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.d.ts +6 -0
- package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.d.ts.map +1 -0
- package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.js +31 -0
- package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.js.map +1 -0
- package/dist/factories/kubernetes/autoscaling/index.d.ts +9 -0
- package/dist/factories/kubernetes/autoscaling/index.d.ts.map +1 -0
- package/dist/factories/kubernetes/autoscaling/index.js +9 -0
- package/dist/factories/kubernetes/autoscaling/index.js.map +1 -0
- package/dist/factories/kubernetes/certificates/certificate-signing-request.d.ts +6 -0
- package/dist/factories/kubernetes/certificates/certificate-signing-request.d.ts.map +1 -0
- package/dist/factories/kubernetes/certificates/certificate-signing-request.js +48 -0
- package/dist/factories/kubernetes/certificates/certificate-signing-request.js.map +1 -0
- package/dist/factories/kubernetes/certificates/index.d.ts +8 -0
- package/dist/factories/kubernetes/certificates/index.d.ts.map +1 -0
- package/dist/factories/kubernetes/certificates/index.js +8 -0
- package/dist/factories/kubernetes/certificates/index.js.map +1 -0
- package/dist/factories/kubernetes/config/config-map.d.ts +5 -0
- package/dist/factories/kubernetes/config/config-map.d.ts.map +1 -0
- package/dist/factories/kubernetes/config/config-map.js +16 -0
- package/dist/factories/kubernetes/config/config-map.js.map +1 -0
- package/dist/factories/kubernetes/config/index.d.ts +9 -0
- package/dist/factories/kubernetes/config/index.d.ts.map +1 -0
- package/dist/factories/kubernetes/config/index.js +9 -0
- package/dist/factories/kubernetes/config/index.js.map +1 -0
- package/dist/factories/kubernetes/config/secret.d.ts +5 -0
- package/dist/factories/kubernetes/config/secret.d.ts.map +1 -0
- package/dist/factories/kubernetes/config/secret.js +16 -0
- package/dist/factories/kubernetes/config/secret.js.map +1 -0
- package/dist/factories/kubernetes/coordination/index.d.ts +8 -0
- package/dist/factories/kubernetes/coordination/index.d.ts.map +1 -0
- package/dist/factories/kubernetes/coordination/index.js +8 -0
- package/dist/factories/kubernetes/coordination/index.js.map +1 -0
- package/dist/factories/kubernetes/coordination/lease.d.ts +5 -0
- package/dist/factories/kubernetes/coordination/lease.d.ts.map +1 -0
- package/dist/factories/kubernetes/coordination/lease.js +10 -0
- package/dist/factories/kubernetes/coordination/lease.js.map +1 -0
- package/dist/factories/kubernetes/core/component-status.d.ts +4 -0
- package/dist/factories/kubernetes/core/component-status.d.ts.map +1 -0
- package/dist/factories/kubernetes/core/component-status.js +25 -0
- package/dist/factories/kubernetes/core/component-status.js.map +1 -0
- package/dist/factories/kubernetes/core/index.d.ts +11 -0
- package/dist/factories/kubernetes/core/index.d.ts.map +1 -0
- package/dist/factories/kubernetes/core/index.js +11 -0
- package/dist/factories/kubernetes/core/index.js.map +1 -0
- package/dist/factories/kubernetes/core/namespace.d.ts +9 -0
- package/dist/factories/kubernetes/core/namespace.d.ts.map +1 -0
- package/dist/factories/kubernetes/core/namespace.js +48 -0
- package/dist/factories/kubernetes/core/namespace.js.map +1 -0
- package/dist/factories/kubernetes/core/node.d.ts +6 -0
- package/dist/factories/kubernetes/core/node.d.ts.map +1 -0
- package/dist/factories/kubernetes/core/node.js +34 -0
- package/dist/factories/kubernetes/core/node.js.map +1 -0
- package/dist/factories/kubernetes/core/pod.d.ts +6 -0
- package/dist/factories/kubernetes/core/pod.d.ts.map +1 -0
- package/dist/factories/kubernetes/core/pod.js +44 -0
- package/dist/factories/kubernetes/core/pod.js.map +1 -0
- package/dist/factories/kubernetes/extensions/custom-resource-definition.d.ts +6 -0
- package/dist/factories/kubernetes/extensions/custom-resource-definition.d.ts.map +1 -0
- package/dist/factories/kubernetes/extensions/custom-resource-definition.js +45 -0
- package/dist/factories/kubernetes/extensions/custom-resource-definition.js.map +1 -0
- package/dist/factories/kubernetes/extensions/custom-resource.d.ts +12 -0
- package/dist/factories/kubernetes/extensions/custom-resource.d.ts.map +1 -0
- package/dist/factories/kubernetes/extensions/custom-resource.js +17 -0
- package/dist/factories/kubernetes/extensions/custom-resource.js.map +1 -0
- package/dist/factories/kubernetes/extensions/index.d.ts +9 -0
- package/dist/factories/kubernetes/extensions/index.d.ts.map +1 -0
- package/dist/factories/kubernetes/extensions/index.js +9 -0
- package/dist/factories/kubernetes/extensions/index.js.map +1 -0
- package/dist/factories/kubernetes/index.d.ts +24 -0
- package/dist/factories/kubernetes/index.d.ts.map +1 -0
- package/dist/factories/kubernetes/index.js +75 -0
- package/dist/factories/kubernetes/index.js.map +1 -0
- package/dist/factories/kubernetes/networking/endpoint-slice.d.ts +4 -0
- package/dist/factories/kubernetes/networking/endpoint-slice.d.ts.map +1 -0
- package/dist/factories/kubernetes/networking/endpoint-slice.js +10 -0
- package/dist/factories/kubernetes/networking/endpoint-slice.js.map +1 -0
- package/dist/factories/kubernetes/networking/endpoints.d.ts +4 -0
- package/dist/factories/kubernetes/networking/endpoints.d.ts.map +1 -0
- package/dist/factories/kubernetes/networking/endpoints.js +39 -0
- package/dist/factories/kubernetes/networking/endpoints.js.map +1 -0
- package/dist/factories/kubernetes/networking/index.d.ts +13 -0
- package/dist/factories/kubernetes/networking/index.d.ts.map +1 -0
- package/dist/factories/kubernetes/networking/index.js +13 -0
- package/dist/factories/kubernetes/networking/index.js.map +1 -0
- package/dist/factories/kubernetes/networking/ingress-class.d.ts +5 -0
- package/dist/factories/kubernetes/networking/ingress-class.d.ts.map +1 -0
- package/dist/factories/kubernetes/networking/ingress-class.js +16 -0
- package/dist/factories/kubernetes/networking/ingress-class.js.map +1 -0
- package/dist/factories/kubernetes/networking/ingress.d.ts +5 -0
- package/dist/factories/kubernetes/networking/ingress.d.ts.map +1 -0
- package/dist/factories/kubernetes/networking/ingress.js +33 -0
- package/dist/factories/kubernetes/networking/ingress.js.map +1 -0
- package/dist/factories/kubernetes/networking/network-policy.d.ts +5 -0
- package/dist/factories/kubernetes/networking/network-policy.d.ts.map +1 -0
- package/dist/factories/kubernetes/networking/network-policy.js +17 -0
- package/dist/factories/kubernetes/networking/network-policy.js.map +1 -0
- package/dist/factories/kubernetes/networking/service.d.ts +5 -0
- package/dist/factories/kubernetes/networking/service.d.ts.map +1 -0
- package/dist/factories/kubernetes/networking/service.js +64 -0
- package/dist/factories/kubernetes/networking/service.js.map +1 -0
- package/dist/factories/kubernetes/policy/index.d.ts +10 -0
- package/dist/factories/kubernetes/policy/index.d.ts.map +1 -0
- package/dist/factories/kubernetes/policy/index.js +10 -0
- package/dist/factories/kubernetes/policy/index.js.map +1 -0
- package/dist/factories/kubernetes/policy/limit-range.d.ts +5 -0
- package/dist/factories/kubernetes/policy/limit-range.d.ts.map +1 -0
- package/dist/factories/kubernetes/policy/limit-range.js +17 -0
- package/dist/factories/kubernetes/policy/limit-range.js.map +1 -0
- package/dist/factories/kubernetes/policy/pod-disruption-budget.d.ts +6 -0
- package/dist/factories/kubernetes/policy/pod-disruption-budget.d.ts.map +1 -0
- package/dist/factories/kubernetes/policy/pod-disruption-budget.js +55 -0
- package/dist/factories/kubernetes/policy/pod-disruption-budget.js.map +1 -0
- package/dist/factories/kubernetes/policy/resource-quota.d.ts +6 -0
- package/dist/factories/kubernetes/policy/resource-quota.d.ts.map +1 -0
- package/dist/factories/kubernetes/policy/resource-quota.js +43 -0
- package/dist/factories/kubernetes/policy/resource-quota.js.map +1 -0
- package/dist/factories/kubernetes/rbac/cluster-role-binding.d.ts +4 -0
- package/dist/factories/kubernetes/rbac/cluster-role-binding.d.ts.map +1 -0
- package/dist/factories/kubernetes/rbac/cluster-role-binding.js +17 -0
- package/dist/factories/kubernetes/rbac/cluster-role-binding.js.map +1 -0
- package/dist/factories/kubernetes/rbac/cluster-role.d.ts +4 -0
- package/dist/factories/kubernetes/rbac/cluster-role.d.ts.map +1 -0
- package/dist/factories/kubernetes/rbac/cluster-role.js +17 -0
- package/dist/factories/kubernetes/rbac/cluster-role.js.map +1 -0
- package/dist/factories/kubernetes/rbac/index.d.ts +12 -0
- package/dist/factories/kubernetes/rbac/index.d.ts.map +1 -0
- package/dist/factories/kubernetes/rbac/index.js +12 -0
- package/dist/factories/kubernetes/rbac/index.js.map +1 -0
- package/dist/factories/kubernetes/rbac/role-binding.d.ts +4 -0
- package/dist/factories/kubernetes/rbac/role-binding.d.ts.map +1 -0
- package/dist/factories/kubernetes/rbac/role-binding.js +17 -0
- package/dist/factories/kubernetes/rbac/role-binding.js.map +1 -0
- package/dist/factories/kubernetes/rbac/role.d.ts +4 -0
- package/dist/factories/kubernetes/rbac/role.d.ts.map +1 -0
- package/dist/factories/kubernetes/rbac/role.js +17 -0
- package/dist/factories/kubernetes/rbac/role.js.map +1 -0
- package/dist/factories/kubernetes/rbac/service-account.d.ts +4 -0
- package/dist/factories/kubernetes/rbac/service-account.d.ts.map +1 -0
- package/dist/factories/kubernetes/rbac/service-account.js +17 -0
- package/dist/factories/kubernetes/rbac/service-account.js.map +1 -0
- package/dist/factories/kubernetes/scheduling/index.d.ts +9 -0
- package/dist/factories/kubernetes/scheduling/index.d.ts.map +1 -0
- package/dist/factories/kubernetes/scheduling/index.js +9 -0
- package/dist/factories/kubernetes/scheduling/index.js.map +1 -0
- package/dist/factories/kubernetes/scheduling/priority-class.d.ts +4 -0
- package/dist/factories/kubernetes/scheduling/priority-class.d.ts.map +1 -0
- package/dist/factories/kubernetes/scheduling/priority-class.js +16 -0
- package/dist/factories/kubernetes/scheduling/priority-class.js.map +1 -0
- package/dist/factories/kubernetes/scheduling/runtime-class.d.ts +5 -0
- package/dist/factories/kubernetes/scheduling/runtime-class.d.ts.map +1 -0
- package/dist/factories/kubernetes/scheduling/runtime-class.js +10 -0
- package/dist/factories/kubernetes/scheduling/runtime-class.js.map +1 -0
- package/dist/factories/kubernetes/storage/csi-driver.d.ts +5 -0
- package/dist/factories/kubernetes/storage/csi-driver.d.ts.map +1 -0
- package/dist/factories/kubernetes/storage/csi-driver.js +16 -0
- package/dist/factories/kubernetes/storage/csi-driver.js.map +1 -0
- package/dist/factories/kubernetes/storage/csi-node.d.ts +5 -0
- package/dist/factories/kubernetes/storage/csi-node.d.ts.map +1 -0
- package/dist/factories/kubernetes/storage/csi-node.js +10 -0
- package/dist/factories/kubernetes/storage/csi-node.js.map +1 -0
- package/dist/factories/kubernetes/storage/index.d.ts +13 -0
- package/dist/factories/kubernetes/storage/index.d.ts.map +1 -0
- package/dist/factories/kubernetes/storage/index.js +13 -0
- package/dist/factories/kubernetes/storage/index.js.map +1 -0
- package/dist/factories/kubernetes/storage/persistent-volume-claim.d.ts +6 -0
- package/dist/factories/kubernetes/storage/persistent-volume-claim.d.ts.map +1 -0
- package/dist/factories/kubernetes/storage/persistent-volume-claim.js +30 -0
- package/dist/factories/kubernetes/storage/persistent-volume-claim.js.map +1 -0
- package/dist/factories/kubernetes/storage/persistent-volume.d.ts +6 -0
- package/dist/factories/kubernetes/storage/persistent-volume.d.ts.map +1 -0
- package/dist/factories/kubernetes/storage/persistent-volume.js +47 -0
- package/dist/factories/kubernetes/storage/persistent-volume.js.map +1 -0
- package/dist/factories/kubernetes/storage/storage-class.d.ts +4 -0
- package/dist/factories/kubernetes/storage/storage-class.d.ts.map +1 -0
- package/dist/factories/kubernetes/storage/storage-class.js +17 -0
- package/dist/factories/kubernetes/storage/storage-class.js.map +1 -0
- package/dist/factories/kubernetes/storage/volume-attachment.d.ts +6 -0
- package/dist/factories/kubernetes/storage/volume-attachment.d.ts.map +1 -0
- package/dist/factories/kubernetes/storage/volume-attachment.js +10 -0
- package/dist/factories/kubernetes/storage/volume-attachment.js.map +1 -0
- package/dist/factories/kubernetes/types.d.ts +8 -0
- package/dist/factories/kubernetes/types.d.ts.map +1 -0
- package/dist/factories/kubernetes/types.js +8 -0
- package/dist/factories/kubernetes/types.js.map +1 -0
- package/dist/factories/kubernetes/workloads/cron-job.d.ts +6 -0
- package/dist/factories/kubernetes/workloads/cron-job.d.ts.map +1 -0
- package/dist/factories/kubernetes/workloads/cron-job.js +53 -0
- package/dist/factories/kubernetes/workloads/cron-job.js.map +1 -0
- package/dist/factories/kubernetes/workloads/daemon-set.d.ts +6 -0
- package/dist/factories/kubernetes/workloads/daemon-set.d.ts.map +1 -0
- package/dist/factories/kubernetes/workloads/daemon-set.js +32 -0
- package/dist/factories/kubernetes/workloads/daemon-set.js.map +1 -0
- package/dist/factories/kubernetes/workloads/deployment.d.ts +5 -0
- package/dist/factories/kubernetes/workloads/deployment.d.ts.map +1 -0
- package/dist/factories/kubernetes/workloads/deployment.js +59 -0
- package/dist/factories/kubernetes/workloads/deployment.js.map +1 -0
- package/dist/factories/kubernetes/workloads/index.d.ts +14 -0
- package/dist/factories/kubernetes/workloads/index.d.ts.map +1 -0
- package/dist/factories/kubernetes/workloads/index.js +14 -0
- package/dist/factories/kubernetes/workloads/index.js.map +1 -0
- package/dist/factories/kubernetes/workloads/job.d.ts +6 -0
- package/dist/factories/kubernetes/workloads/job.d.ts.map +1 -0
- package/dist/factories/kubernetes/workloads/job.js +105 -0
- package/dist/factories/kubernetes/workloads/job.js.map +1 -0
- package/dist/factories/kubernetes/workloads/replica-set.d.ts +6 -0
- package/dist/factories/kubernetes/workloads/replica-set.d.ts.map +1 -0
- package/dist/factories/kubernetes/workloads/replica-set.js +33 -0
- package/dist/factories/kubernetes/workloads/replica-set.js.map +1 -0
- package/dist/factories/kubernetes/workloads/replication-controller.d.ts +6 -0
- package/dist/factories/kubernetes/workloads/replication-controller.d.ts.map +1 -0
- package/dist/factories/kubernetes/workloads/replication-controller.js +56 -0
- package/dist/factories/kubernetes/workloads/replication-controller.js.map +1 -0
- package/dist/factories/kubernetes/workloads/stateful-set.d.ts +6 -0
- package/dist/factories/kubernetes/workloads/stateful-set.d.ts.map +1 -0
- package/dist/factories/kubernetes/workloads/stateful-set.js +81 -0
- package/dist/factories/kubernetes/workloads/stateful-set.js.map +1 -0
- package/dist/factories/kubernetes/yaml/index.d.ts +6 -0
- package/dist/factories/kubernetes/yaml/index.d.ts.map +1 -0
- package/dist/factories/kubernetes/yaml/index.js +6 -0
- package/dist/factories/kubernetes/yaml/index.js.map +1 -0
- package/dist/factories/kubernetes/yaml/yaml-directory.d.ts +54 -0
- package/dist/factories/kubernetes/yaml/yaml-directory.d.ts.map +1 -0
- package/dist/factories/kubernetes/yaml/yaml-directory.js +178 -0
- package/dist/factories/kubernetes/yaml/yaml-directory.js.map +1 -0
- package/dist/factories/kubernetes/yaml/yaml-file.d.ts +54 -0
- package/dist/factories/kubernetes/yaml/yaml-file.d.ts.map +1 -0
- package/dist/factories/kubernetes/yaml/yaml-file.js +181 -0
- package/dist/factories/kubernetes/yaml/yaml-file.js.map +1 -0
- package/dist/factories/shared.d.ts +11 -0
- package/dist/factories/shared.d.ts.map +1 -0
- package/dist/factories/shared.js +364 -0
- package/dist/factories/shared.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/helpers.d.ts +69 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +405 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +11 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/type-guards.d.ts +34 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +66 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/package.json +109 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema Proxy Factory for Kro Factory Pattern
|
|
3
|
+
*
|
|
4
|
+
* This module provides functionality to create schema proxies that return
|
|
5
|
+
* KubernetesRef objects for field access, specifically marked as schema references.
|
|
6
|
+
*/
|
|
7
|
+
import { KUBERNETES_REF_BRAND } from '../constants/brands.js';
|
|
8
|
+
/**
|
|
9
|
+
* Creates a KubernetesRef object specifically for schema references
|
|
10
|
+
* These are distinguished from external references by using a special resource ID prefix
|
|
11
|
+
*/
|
|
12
|
+
function createSchemaRefFactory(fieldPath) {
|
|
13
|
+
const proxyTarget = () => {
|
|
14
|
+
// Empty function used as proxy target
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(proxyTarget, KUBERNETES_REF_BRAND, { value: true, enumerable: false });
|
|
17
|
+
Object.defineProperty(proxyTarget, 'resourceId', { value: '__schema__', enumerable: false });
|
|
18
|
+
Object.defineProperty(proxyTarget, 'fieldPath', { value: fieldPath, enumerable: false });
|
|
19
|
+
return new Proxy(proxyTarget, {
|
|
20
|
+
get(target, prop) {
|
|
21
|
+
// Check for our defined properties first
|
|
22
|
+
if (prop === KUBERNETES_REF_BRAND || prop === 'resourceId' || prop === 'fieldPath') {
|
|
23
|
+
return target[prop];
|
|
24
|
+
}
|
|
25
|
+
// Only preserve essential function properties, not 'name' or other properties
|
|
26
|
+
// that might conflict with field names
|
|
27
|
+
if (prop === 'toString' ||
|
|
28
|
+
prop === 'valueOf' ||
|
|
29
|
+
prop === 'call' ||
|
|
30
|
+
prop === 'apply' ||
|
|
31
|
+
prop === 'bind') {
|
|
32
|
+
return target[prop];
|
|
33
|
+
}
|
|
34
|
+
// Only preserve essential function properties, not 'name' or other properties
|
|
35
|
+
// that might conflict with field names
|
|
36
|
+
if (prop === 'call' ||
|
|
37
|
+
prop === 'apply' ||
|
|
38
|
+
prop === 'bind') {
|
|
39
|
+
return target[prop];
|
|
40
|
+
}
|
|
41
|
+
// For any other property, create a new nested reference
|
|
42
|
+
return createSchemaRefFactory(`${fieldPath}.${String(prop)}`);
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Creates a MagicProxy for a specific schema section (spec or status)
|
|
48
|
+
* that returns KubernetesRef objects for any accessed property
|
|
49
|
+
*/
|
|
50
|
+
function createSchemaMagicProxy(basePath) {
|
|
51
|
+
// Create an empty target object that will serve as the proxy base
|
|
52
|
+
const target = {};
|
|
53
|
+
return new Proxy(target, {
|
|
54
|
+
get: (obj, prop) => {
|
|
55
|
+
if (typeof prop !== 'string') {
|
|
56
|
+
return obj[prop];
|
|
57
|
+
}
|
|
58
|
+
// Always return a schema reference for any string property access
|
|
59
|
+
return createSchemaRefFactory(`${basePath}.${prop}`);
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Creates a schema proxy that provides type-safe access to spec and status fields
|
|
65
|
+
*
|
|
66
|
+
* @returns SchemaProxy with spec and status MagicProxy objects
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* interface MySpec { name: string; replicas: number; }
|
|
71
|
+
* interface MyStatus { ready: boolean; url: string; }
|
|
72
|
+
*
|
|
73
|
+
* const schema = createSchemaProxy<MySpec, MyStatus>();
|
|
74
|
+
*
|
|
75
|
+
* // These return KubernetesRef objects with schema marking
|
|
76
|
+
* const nameRef = schema.spec.name; // KubernetesRef with fieldPath: "spec.name"
|
|
77
|
+
* const readyRef = schema.status.ready; // KubernetesRef with fieldPath: "status.ready"
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export function createSchemaProxy() {
|
|
81
|
+
return {
|
|
82
|
+
spec: createSchemaMagicProxy('spec'),
|
|
83
|
+
status: createSchemaMagicProxy('status'),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Utility function to check if a KubernetesRef is a schema reference
|
|
88
|
+
*
|
|
89
|
+
* @param ref - The KubernetesRef to check
|
|
90
|
+
* @returns true if the reference is a schema reference, false otherwise
|
|
91
|
+
*/
|
|
92
|
+
export function isSchemaReference(ref) {
|
|
93
|
+
return ref.resourceId === '__schema__';
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Create a magic proxy for resources in StatusBuilder
|
|
97
|
+
* This allows accessing resource.status.field as KubernetesRef objects while preserving types
|
|
98
|
+
*/
|
|
99
|
+
export function createResourcesProxy(resources) {
|
|
100
|
+
const proxiedResources = {};
|
|
101
|
+
for (const [resourceKey, resource] of Object.entries(resources)) {
|
|
102
|
+
// Create a proxy that preserves the Enhanced resource structure
|
|
103
|
+
// but converts field access to resource references instead of schema references
|
|
104
|
+
proxiedResources[resourceKey] = new Proxy(resource, {
|
|
105
|
+
get(target, prop) {
|
|
106
|
+
if (prop === 'metadata') {
|
|
107
|
+
return resource.metadata;
|
|
108
|
+
}
|
|
109
|
+
if (prop === 'kind') {
|
|
110
|
+
return resource.kind;
|
|
111
|
+
}
|
|
112
|
+
if (prop === 'apiVersion') {
|
|
113
|
+
return resource.apiVersion;
|
|
114
|
+
}
|
|
115
|
+
if (prop === 'spec' || prop === 'status') {
|
|
116
|
+
// Return a proxy that converts the MagicProxy field access to resource references
|
|
117
|
+
return createResourceMagicProxy(resourceKey, prop, target[prop]);
|
|
118
|
+
}
|
|
119
|
+
// For all other properties, return the original value
|
|
120
|
+
return target[prop];
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
return proxiedResources;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Create a magic proxy that converts Enhanced MagicProxy field access to resource references
|
|
128
|
+
* Uses recursive proxy creation similar to createSchemaRefFactory for deep nesting support
|
|
129
|
+
*/
|
|
130
|
+
function createResourceMagicProxy(resourceId, fieldType, _originalProxy) {
|
|
131
|
+
return createResourceRefFactory(resourceId, fieldType);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Creates a KubernetesRef object for resource references with recursive nesting support
|
|
135
|
+
* Similar to createSchemaRefFactory but for resource references instead of schema references
|
|
136
|
+
*/
|
|
137
|
+
function createResourceRefFactory(resourceId, fieldPath) {
|
|
138
|
+
const proxyTarget = () => {
|
|
139
|
+
// Empty function used as proxy target
|
|
140
|
+
};
|
|
141
|
+
Object.defineProperty(proxyTarget, KUBERNETES_REF_BRAND, { value: true, enumerable: false });
|
|
142
|
+
Object.defineProperty(proxyTarget, 'resourceId', { value: resourceId, enumerable: false });
|
|
143
|
+
Object.defineProperty(proxyTarget, 'fieldPath', { value: fieldPath, enumerable: false });
|
|
144
|
+
return new Proxy(proxyTarget, {
|
|
145
|
+
get(target, prop) {
|
|
146
|
+
// Check for our defined properties first
|
|
147
|
+
if (prop === KUBERNETES_REF_BRAND || prop === 'resourceId' || prop === 'fieldPath') {
|
|
148
|
+
return target[prop];
|
|
149
|
+
}
|
|
150
|
+
// Preserve essential function properties
|
|
151
|
+
if (prop === 'toString' ||
|
|
152
|
+
prop === 'valueOf' ||
|
|
153
|
+
prop === 'call' ||
|
|
154
|
+
prop === 'apply' ||
|
|
155
|
+
prop === 'bind') {
|
|
156
|
+
return target[prop];
|
|
157
|
+
}
|
|
158
|
+
// For any other property, create a new nested reference
|
|
159
|
+
return createResourceRefFactory(resourceId, `${fieldPath}.${String(prop)}`);
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=schema-proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-proxy.js","sourceRoot":"","sources":["../../../src/core/references/schema-proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core serialization functionality for TypeKro
|
|
3
|
+
*
|
|
4
|
+
* This module provides the main serialization functions to convert
|
|
5
|
+
* TypeScript resource definitions to Kro ResourceGraphDefinition YAML manifests.
|
|
6
|
+
*/
|
|
7
|
+
import type { TypedResourceGraph, DeploymentClosure } from '../types/deployment.js';
|
|
8
|
+
import type { MagicAssignableShape, ResourceGraphDefinition, SchemaProxy, SerializationOptions } from '../types/serialization.js';
|
|
9
|
+
import type { Enhanced, KroCompatibleType } from '../types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Create a new typed resource graph with factory pattern support
|
|
12
|
+
* This is the new API with definition-first parameter and separate builder functions
|
|
13
|
+
*/
|
|
14
|
+
export declare function toResourceGraph<TSpec extends KroCompatibleType, TStatus extends KroCompatibleType, TResources extends Record<string, Enhanced<any, any> | DeploymentClosure>>(definition: ResourceGraphDefinition<TSpec, TStatus>, resourceBuilder: (schema: SchemaProxy<TSpec, TStatus>) => TResources, statusBuilder: (schema: SchemaProxy<TSpec, TStatus>, resources: TResources) => MagicAssignableShape<TStatus>, options?: SerializationOptions): TypedResourceGraph<TSpec, TStatus>;
|
|
15
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/core/serialization/core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAKV,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EAEvB,WAAW,EACX,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAEV,QAAQ,EACR,iBAAiB,EAElB,MAAM,aAAa,CAAC;AA+DrB;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,SAAS,iBAAiB,EAC/B,OAAO,SAAS,iBAAiB,EAEjC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,iBAAiB,CAAC,EAEzE,UAAU,EAAE,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,EAEnD,eAAe,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,UAAU,EAEpE,aAAa,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,UAAU,KAAK,oBAAoB,CAAC,OAAO,CAAC,EAC5G,OAAO,CAAC,EAAE,oBAAoB,GAC7B,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAGpC"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core serialization functionality for TypeKro
|
|
3
|
+
*
|
|
4
|
+
* This module provides the main serialization functions to convert
|
|
5
|
+
* TypeScript resource definitions to Kro ResourceGraphDefinition YAML manifests.
|
|
6
|
+
*/
|
|
7
|
+
import { DependencyResolver } from '../dependencies/index.js';
|
|
8
|
+
import { createDirectResourceFactory } from '../deployment/direct-factory.js';
|
|
9
|
+
import { createKroResourceFactory } from '../deployment/kro-factory.js';
|
|
10
|
+
import { getComponentLogger } from '../logging/index.js';
|
|
11
|
+
import { createSchemaProxy } from '../references/index.js';
|
|
12
|
+
import { generateKroSchemaFromArktype } from './schema.js';
|
|
13
|
+
import { serializeResourceGraphToYaml } from './yaml.js';
|
|
14
|
+
import { validateResourceGraphDefinition } from '../validation/cel-validator.js';
|
|
15
|
+
import { optimizeStatusMappings } from '../evaluation/cel-optimizer.js';
|
|
16
|
+
/**
|
|
17
|
+
* Separate Enhanced<> resources from deployment closures in the builder result
|
|
18
|
+
*/
|
|
19
|
+
function separateResourcesAndClosures(builderResult) {
|
|
20
|
+
const resources = {};
|
|
21
|
+
const closures = {};
|
|
22
|
+
for (const [key, value] of Object.entries(builderResult)) {
|
|
23
|
+
if (typeof value === 'function') {
|
|
24
|
+
// This is a deployment closure
|
|
25
|
+
closures[key] = value;
|
|
26
|
+
}
|
|
27
|
+
else if (value && typeof value === 'object' && 'kind' in value && 'apiVersion' in value) {
|
|
28
|
+
// This is an Enhanced<> resource
|
|
29
|
+
resources[key] = value;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// Unknown type, treat as resource for backward compatibility
|
|
33
|
+
resources[key] = value;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return { resources, closures };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Create a ResourceGraph from resources for deployment
|
|
40
|
+
*/
|
|
41
|
+
function _createResourceGraph(name, resources) {
|
|
42
|
+
const dependencyResolver = new DependencyResolver();
|
|
43
|
+
const resourceArray = Object.values(resources).map(resource => ({
|
|
44
|
+
...resource,
|
|
45
|
+
id: resource.id || resource.metadata?.name || 'unknown',
|
|
46
|
+
}));
|
|
47
|
+
// Type assertion needed because we're converting KubernetesResource to DeployableK8sResource
|
|
48
|
+
// This is safe because the deployment engine handles the conversion internally
|
|
49
|
+
const deployableResources = resourceArray;
|
|
50
|
+
const dependencyGraph = dependencyResolver.buildDependencyGraph(deployableResources);
|
|
51
|
+
// Convert to ResourceGraphResource format
|
|
52
|
+
const resourceGraphResources = deployableResources.map(resource => ({
|
|
53
|
+
id: resource.id,
|
|
54
|
+
manifest: resource,
|
|
55
|
+
}));
|
|
56
|
+
return {
|
|
57
|
+
name,
|
|
58
|
+
resources: resourceGraphResources,
|
|
59
|
+
dependencyGraph,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
// =============================================================================
|
|
63
|
+
// NEW FACTORY PATTERN API
|
|
64
|
+
// =============================================================================
|
|
65
|
+
/**
|
|
66
|
+
* Create a new typed resource graph with factory pattern support
|
|
67
|
+
* This is the new API with definition-first parameter and separate builder functions
|
|
68
|
+
*/
|
|
69
|
+
export function toResourceGraph(definition,
|
|
70
|
+
// The resourceBuilder is now defined as returning that specific shape
|
|
71
|
+
resourceBuilder,
|
|
72
|
+
// The statusBuilder is now defined as ACCEPTING that specific shape
|
|
73
|
+
statusBuilder, options) {
|
|
74
|
+
// The implementation in createTypedResourceGraph must also be updated to match this signature.
|
|
75
|
+
return createTypedResourceGraph(definition, resourceBuilder, statusBuilder, options);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Create a typed resource graph implementation
|
|
79
|
+
*/
|
|
80
|
+
function createTypedResourceGraph(definition, resourceBuilder, statusBuilder, options) {
|
|
81
|
+
const serializationLogger = getComponentLogger('resource-graph-serialization').child({
|
|
82
|
+
name: definition.name
|
|
83
|
+
});
|
|
84
|
+
// Validate resource graph name early
|
|
85
|
+
if (!definition.name || typeof definition.name !== 'string') {
|
|
86
|
+
throw new Error(`Invalid resource graph name: ${JSON.stringify(definition.name)}. Resource graph name must be a non-empty string.`);
|
|
87
|
+
}
|
|
88
|
+
const trimmedName = definition.name.trim();
|
|
89
|
+
if (trimmedName.length === 0) {
|
|
90
|
+
throw new Error(`Invalid resource graph name: Resource graph name cannot be empty or whitespace-only.`);
|
|
91
|
+
}
|
|
92
|
+
// Validate that the name will convert to a valid Kubernetes resource name
|
|
93
|
+
const kubernetesName = trimmedName
|
|
94
|
+
.replace(/([a-z])([A-Z])/g, '$1-$2')
|
|
95
|
+
.toLowerCase();
|
|
96
|
+
if (!/^[a-z0-9]([-a-z0-9]*[a-z0-9])?$/.test(kubernetesName)) {
|
|
97
|
+
throw new Error(`Invalid resource graph name: "${definition.name}" converts to "${kubernetesName}" which is not a valid Kubernetes resource name. Names must consist of lowercase alphanumeric characters or '-', and must start and end with an alphanumeric character.`);
|
|
98
|
+
}
|
|
99
|
+
if (kubernetesName.length > 253) {
|
|
100
|
+
throw new Error(`Invalid resource graph name: "${definition.name}" converts to "${kubernetesName}" which exceeds the 253 character limit for Kubernetes resource names.`);
|
|
101
|
+
}
|
|
102
|
+
// Apply default apiVersion if not specified
|
|
103
|
+
// Note: This should be just the version part (e.g., 'v1alpha1'), not the full API version
|
|
104
|
+
// The full API version (kro.run/v1alpha1) is constructed when creating instances
|
|
105
|
+
const schemaDefinition = {
|
|
106
|
+
apiVersion: definition.apiVersion || 'v1alpha1',
|
|
107
|
+
kind: definition.kind,
|
|
108
|
+
spec: definition.spec,
|
|
109
|
+
status: definition.status,
|
|
110
|
+
};
|
|
111
|
+
const schema = createSchemaProxy();
|
|
112
|
+
const builderResult = resourceBuilder(schema);
|
|
113
|
+
// Separate Enhanced<> resources from deployment closures
|
|
114
|
+
const { resources: resourcesWithKeys, closures } = separateResourcesAndClosures(builderResult);
|
|
115
|
+
// Pass Enhanced resources directly to StatusBuilder - they already have proper MagicProxy types
|
|
116
|
+
const statusMappings = statusBuilder(schema, resourcesWithKeys);
|
|
117
|
+
// Validate resource IDs and CEL expressions
|
|
118
|
+
const validation = validateResourceGraphDefinition(resourcesWithKeys, statusMappings);
|
|
119
|
+
if (!validation.isValid) {
|
|
120
|
+
const errorMessages = validation.errors.map(err => `${err.field}: ${err.error}`).join('\n');
|
|
121
|
+
throw new Error(`ResourceGraphDefinition validation failed:\n${errorMessages}`);
|
|
122
|
+
}
|
|
123
|
+
// Log warnings if any
|
|
124
|
+
if (validation.warnings.length > 0) {
|
|
125
|
+
serializationLogger.warn('ResourceGraphDefinition validation warnings', {
|
|
126
|
+
warnings: validation.warnings.map(w => ({
|
|
127
|
+
field: w.field,
|
|
128
|
+
error: w.error,
|
|
129
|
+
suggestion: w.suggestion
|
|
130
|
+
}))
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
// Evaluate and optimize CEL expressions
|
|
134
|
+
const evaluationContext = { resources: resourcesWithKeys, schema };
|
|
135
|
+
const { mappings: optimizedStatusMappings, optimizations } = optimizeStatusMappings(statusMappings, evaluationContext);
|
|
136
|
+
// Log optimizations if any
|
|
137
|
+
if (optimizations.length > 0) {
|
|
138
|
+
serializationLogger.info('CEL expression optimizations applied', { optimizations });
|
|
139
|
+
}
|
|
140
|
+
// schemaDefinition is already created above with default apiVersion handling
|
|
141
|
+
return {
|
|
142
|
+
name: definition.name,
|
|
143
|
+
resources: Object.values(resourcesWithKeys),
|
|
144
|
+
schema,
|
|
145
|
+
// Store closures for access during factory creation
|
|
146
|
+
closures,
|
|
147
|
+
async factory(mode, factoryOptions) {
|
|
148
|
+
if (mode === 'direct') {
|
|
149
|
+
const directFactory = createDirectResourceFactory(definition.name, resourcesWithKeys, schemaDefinition, { ...factoryOptions, closures } // Pass closures to factory
|
|
150
|
+
);
|
|
151
|
+
return directFactory;
|
|
152
|
+
}
|
|
153
|
+
else if (mode === 'kro') {
|
|
154
|
+
const kroFactory = createKroResourceFactory(definition.name, resourcesWithKeys, schemaDefinition, statusMappings, { ...factoryOptions, closures } // Pass closures to Kro factory for validation and execution
|
|
155
|
+
);
|
|
156
|
+
return kroFactory;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
throw new Error(`Unsupported factory mode: ${mode}`);
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
toYaml() {
|
|
163
|
+
// Generate ResourceGraphDefinition YAML with user-defined status mappings
|
|
164
|
+
const kroSchema = generateKroSchemaFromArktype(definition.name, schemaDefinition, resourcesWithKeys, optimizedStatusMappings);
|
|
165
|
+
return serializeResourceGraphToYaml(definition.name, resourcesWithKeys, options, kroSchema);
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/core/serialization/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialization module exports
|
|
3
|
+
*/
|
|
4
|
+
export type { ResourceBuilder, ResourceDependency, SchemaDefinition, SerializationContext, SerializationOptions, ValidationResult, } from '../types/serialization.js';
|
|
5
|
+
export { toResourceGraph } from './core.js';
|
|
6
|
+
export { generateKroSchema, generateKroSchemaFromArktype } from './schema.js';
|
|
7
|
+
export { getDependencyOrder, validateResourceGraph, visualizeDependencies, } from './validation.js';
|
|
8
|
+
export { serializeResourceGraphToYaml } from './yaml.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/serialization/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAG9E,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,4BAA4B,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialization module exports
|
|
3
|
+
*/
|
|
4
|
+
// Core serialization functions
|
|
5
|
+
export { toResourceGraph } from './core.js';
|
|
6
|
+
// Schema generation
|
|
7
|
+
export { generateKroSchema, generateKroSchemaFromArktype } from './schema.js';
|
|
8
|
+
// Validation and dependency analysis
|
|
9
|
+
export { getDependencyOrder, validateResourceGraph, visualizeDependencies, } from './validation.js';
|
|
10
|
+
// YAML generation
|
|
11
|
+
export { serializeResourceGraphToYaml } from './yaml.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/serialization/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,+BAA+B;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,oBAAoB;AACpB,OAAO,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAE9E,qCAAqC;AACrC,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,kBAAkB;AAClB,OAAO,EAAE,4BAA4B,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema generation functionality for Kro ResourceGraphDefinitions
|
|
3
|
+
*/
|
|
4
|
+
import type { SchemaDefinition } from '../types/serialization.js';
|
|
5
|
+
import type { KroCompatibleType, KroSimpleSchema, KubernetesResource } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Generate Kro schema from resources
|
|
8
|
+
*/
|
|
9
|
+
export declare function generateKroSchema(name: string, _resources: Record<string, KubernetesResource>): KroSimpleSchema;
|
|
10
|
+
/**
|
|
11
|
+
* Generate Kro schema from Arktype definition
|
|
12
|
+
*/
|
|
13
|
+
export declare function generateKroSchemaFromArktype<TSpec extends KroCompatibleType, TStatus extends KroCompatibleType>(name: string, schemaDefinition: SchemaDefinition<TSpec, TStatus>, resources?: Record<string, KubernetesResource>, statusMappings?: any): KroSimpleSchema;
|
|
14
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/core/serialization/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE1F;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAC7C,eAAe,CAoBjB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,SAAS,iBAAiB,EAC/B,OAAO,SAAS,iBAAiB,EAEjC,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,EAClD,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC9C,cAAc,CAAC,EAAE,GAAG,GACnB,eAAe,CAEjB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema generation functionality for Kro ResourceGraphDefinitions
|
|
3
|
+
*/
|
|
4
|
+
import { arktypeToKroSchema, pascalCase } from '../../utils/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Generate Kro schema from resources
|
|
7
|
+
*/
|
|
8
|
+
export function generateKroSchema(name, _resources) {
|
|
9
|
+
const pascalName = pascalCase(name);
|
|
10
|
+
// Generate spec fields based on resource names
|
|
11
|
+
// For now, we'll create a simple schema that doesn't require input parameters
|
|
12
|
+
// since our resources are fully defined in the ResourceGraphDefinition
|
|
13
|
+
const spec = {
|
|
14
|
+
// Add a simple name field that can be used for identification
|
|
15
|
+
name: `string | default="${name}"`,
|
|
16
|
+
};
|
|
17
|
+
return {
|
|
18
|
+
apiVersion: `v1alpha1`,
|
|
19
|
+
kind: pascalName,
|
|
20
|
+
spec,
|
|
21
|
+
status: {
|
|
22
|
+
// Empty status - Kro will automatically inject default fields
|
|
23
|
+
// (phase, message, observedGeneration, conditions, state)
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Generate Kro schema from Arktype definition
|
|
29
|
+
*/
|
|
30
|
+
export function generateKroSchemaFromArktype(name, schemaDefinition, resources, statusMappings) {
|
|
31
|
+
return arktypeToKroSchema(name, schemaDefinition, resources, statusMappings);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/core/serialization/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAItE;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,UAA8C;IAE9C,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAEpC,+CAA+C;IAC/C,8EAA8E;IAC9E,uEAAuE;IACvE,MAAM,IAAI,GAA2B;QACnC,8DAA8D;QAC9D,IAAI,EAAE,qBAAqB,IAAI,GAAG;KACnC,CAAC;IAEF,OAAO;QACL,UAAU,EAAE,UAAU;QACtB,IAAI,EAAE,UAAU;QAChB,IAAI;QACJ,MAAM,EAAE;QACN,8DAA8D;QAC9D,0DAA0D;SAC3D;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAI1C,IAAY,EACZ,gBAAkD,EAClD,SAA8C,EAC9C,cAAoB;IAEpB,OAAO,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource graph validation and dependency analysis
|
|
3
|
+
*/
|
|
4
|
+
import type { ValidationResult } from '../types/serialization.js';
|
|
5
|
+
import type { KubernetesResource } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Validate resource graph for cycles and missing dependencies
|
|
8
|
+
*/
|
|
9
|
+
export declare function validateResourceGraph(resources: Record<string, KubernetesResource>): ValidationResult;
|
|
10
|
+
/**
|
|
11
|
+
* Get dependency order for resources (topological sort)
|
|
12
|
+
*/
|
|
13
|
+
export declare function getDependencyOrder(resources: Record<string, KubernetesResource>): string[];
|
|
14
|
+
/**
|
|
15
|
+
* Debug utility to visualize resource dependencies
|
|
16
|
+
*/
|
|
17
|
+
export declare function visualizeDependencies(resources: Record<string, KubernetesResource>): string;
|
|
18
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/core/serialization/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAC5C,gBAAgB,CA8ElB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,MAAM,EAAE,CA8E1F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,MAAM,CA2B3F"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource graph validation and dependency analysis
|
|
3
|
+
*/
|
|
4
|
+
import { extractResourceReferences, generateDeterministicResourceId } from '../../utils/index.js';
|
|
5
|
+
import { formatReferenceError } from '../errors.js';
|
|
6
|
+
/**
|
|
7
|
+
* Validate resource graph for cycles and missing dependencies
|
|
8
|
+
*/
|
|
9
|
+
export function validateResourceGraph(resources) {
|
|
10
|
+
const errors = [];
|
|
11
|
+
// Extract all references and check for missing targets
|
|
12
|
+
const resourceIds = new Set();
|
|
13
|
+
const allReferences = [];
|
|
14
|
+
for (const [resourceName, resource] of Object.entries(resources)) {
|
|
15
|
+
// Use the embedded resource ID if available, otherwise generate deterministic one
|
|
16
|
+
const resourceId = resource.__resourceId ||
|
|
17
|
+
generateDeterministicResourceId(resource.kind, resource.metadata?.name || resourceName, resource.metadata?.namespace);
|
|
18
|
+
resourceIds.add(resourceId);
|
|
19
|
+
const refs = extractResourceReferences(resource);
|
|
20
|
+
for (const ref of refs) {
|
|
21
|
+
allReferences.push({
|
|
22
|
+
from: resourceId,
|
|
23
|
+
to: ref.resourceId,
|
|
24
|
+
field: ref.fieldPath,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Check for missing dependencies with enhanced error messages
|
|
29
|
+
for (const ref of allReferences) {
|
|
30
|
+
if (!resourceIds.has(ref.to)) {
|
|
31
|
+
const availableResources = Array.from(resourceIds);
|
|
32
|
+
const referenceError = formatReferenceError(ref.from, ref.to, ref.field, availableResources);
|
|
33
|
+
errors.push(referenceError.message);
|
|
34
|
+
if (referenceError.suggestions) {
|
|
35
|
+
errors.push(...referenceError.suggestions.map((s) => ` Suggestion: ${s}`));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Check for cycles using DFS
|
|
40
|
+
const visited = new Set();
|
|
41
|
+
const recursionStack = new Set();
|
|
42
|
+
function hasCycle(nodeId) {
|
|
43
|
+
if (recursionStack.has(nodeId)) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
if (visited.has(nodeId)) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
visited.add(nodeId);
|
|
50
|
+
recursionStack.add(nodeId);
|
|
51
|
+
// Find all dependencies of this node
|
|
52
|
+
const dependencies = allReferences.filter((ref) => ref.from === nodeId);
|
|
53
|
+
for (const dep of dependencies) {
|
|
54
|
+
if (hasCycle(dep.to)) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
recursionStack.delete(nodeId);
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
for (const resourceId of resourceIds) {
|
|
62
|
+
if (!visited.has(resourceId) && hasCycle(resourceId)) {
|
|
63
|
+
errors.push(`Circular dependency detected involving resource '${resourceId}'`);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
valid: errors.length === 0,
|
|
69
|
+
errors,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get dependency order for resources (topological sort)
|
|
74
|
+
*/
|
|
75
|
+
export function getDependencyOrder(resources) {
|
|
76
|
+
const resourceIds = new Map();
|
|
77
|
+
const dependencies = [];
|
|
78
|
+
// Build dependency graph
|
|
79
|
+
for (const [resourceName, resource] of Object.entries(resources)) {
|
|
80
|
+
// Use the embedded resource ID if available, otherwise generate deterministic one
|
|
81
|
+
const resourceId = resource.__resourceId ||
|
|
82
|
+
generateDeterministicResourceId(resource.kind, resource.metadata?.name || resourceName, resource.metadata?.namespace);
|
|
83
|
+
resourceIds.set(resourceName, resourceId);
|
|
84
|
+
const refs = extractResourceReferences(resource);
|
|
85
|
+
for (const ref of refs) {
|
|
86
|
+
dependencies.push({
|
|
87
|
+
from: resourceId,
|
|
88
|
+
to: ref.resourceId,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Topological sort using Kahn's algorithm
|
|
93
|
+
const inDegree = new Map();
|
|
94
|
+
const adjList = new Map();
|
|
95
|
+
// Initialize
|
|
96
|
+
for (const [resourceName] of Object.entries(resources)) {
|
|
97
|
+
const resourceId = resourceIds.get(resourceName);
|
|
98
|
+
if (resourceId) {
|
|
99
|
+
inDegree.set(resourceId, 0);
|
|
100
|
+
adjList.set(resourceId, []);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Build adjacency list and calculate in-degrees
|
|
104
|
+
for (const dep of dependencies) {
|
|
105
|
+
adjList.get(dep.from)?.push(dep.to);
|
|
106
|
+
inDegree.set(dep.to, (inDegree.get(dep.to) || 0) + 1);
|
|
107
|
+
}
|
|
108
|
+
// Process nodes with no incoming edges
|
|
109
|
+
const queue = [];
|
|
110
|
+
const result = [];
|
|
111
|
+
for (const [resourceId, degree] of inDegree.entries()) {
|
|
112
|
+
if (degree === 0) {
|
|
113
|
+
queue.push(resourceId);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
while (queue.length > 0) {
|
|
117
|
+
const current = queue.shift();
|
|
118
|
+
if (current) {
|
|
119
|
+
result.push(current);
|
|
120
|
+
const neighbors = adjList.get(current) || [];
|
|
121
|
+
for (const neighbor of neighbors) {
|
|
122
|
+
const newDegree = (inDegree.get(neighbor) || 0) - 1;
|
|
123
|
+
inDegree.set(neighbor, newDegree);
|
|
124
|
+
if (newDegree === 0) {
|
|
125
|
+
queue.push(neighbor);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Convert back to resource names
|
|
131
|
+
const idToName = new Map();
|
|
132
|
+
for (const [name, id] of resourceIds.entries()) {
|
|
133
|
+
idToName.set(id, name);
|
|
134
|
+
}
|
|
135
|
+
return result.map((id) => idToName.get(id)).filter((name) => name !== undefined);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Debug utility to visualize resource dependencies
|
|
139
|
+
*/
|
|
140
|
+
export function visualizeDependencies(resources) {
|
|
141
|
+
const lines = [];
|
|
142
|
+
lines.push('Resource Dependency Graph:');
|
|
143
|
+
lines.push('========================');
|
|
144
|
+
for (const [resourceName, resource] of Object.entries(resources)) {
|
|
145
|
+
const refs = extractResourceReferences(resource);
|
|
146
|
+
if (refs.length === 0) {
|
|
147
|
+
lines.push(`${resourceName} (no dependencies)`);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
lines.push(`${resourceName} depends on:`);
|
|
151
|
+
for (const ref of refs) {
|
|
152
|
+
lines.push(` - ${ref.resourceId}.${ref.fieldPath}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
lines.push('');
|
|
156
|
+
}
|
|
157
|
+
const order = getDependencyOrder(resources);
|
|
158
|
+
lines.push('Deployment Order:');
|
|
159
|
+
lines.push('-----------------');
|
|
160
|
+
order.forEach((name, index) => {
|
|
161
|
+
lines.push(`${index + 1}. ${name}`);
|
|
162
|
+
});
|
|
163
|
+
return lines.join('\n');
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=validation.js.map
|