typekro 0.13.0 → 0.15.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.
Files changed (85) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/alchemy/deployers.d.ts +2 -2
  3. package/dist/alchemy/deployers.d.ts.map +1 -1
  4. package/dist/alchemy/deployers.js +12 -5
  5. package/dist/alchemy/deployers.js.map +1 -1
  6. package/dist/alchemy/index.d.ts +4 -2
  7. package/dist/alchemy/index.d.ts.map +1 -1
  8. package/dist/alchemy/index.js +4 -3
  9. package/dist/alchemy/index.js.map +1 -1
  10. package/dist/alchemy/resource-registration.d.ts +81 -19
  11. package/dist/alchemy/resource-registration.d.ts.map +1 -1
  12. package/dist/alchemy/resource-registration.js +296 -147
  13. package/dist/alchemy/resource-registration.js.map +1 -1
  14. package/dist/alchemy/types.d.ts +76 -8
  15. package/dist/alchemy/types.d.ts.map +1 -1
  16. package/dist/alchemy/wrapper.d.ts +0 -9
  17. package/dist/alchemy/wrapper.d.ts.map +1 -1
  18. package/dist/alchemy/wrapper.js +0 -15
  19. package/dist/alchemy/wrapper.js.map +1 -1
  20. package/dist/core/constants/brands.d.ts +1 -1
  21. package/dist/core/constants/brands.d.ts.map +1 -1
  22. package/dist/core/constants/brands.js +1 -1
  23. package/dist/core/constants/brands.js.map +1 -1
  24. package/dist/core/containers/image.d.ts +40 -43
  25. package/dist/core/containers/image.d.ts.map +1 -1
  26. package/dist/core/containers/image.js +52 -34
  27. package/dist/core/containers/image.js.map +1 -1
  28. package/dist/core/containers/index.d.ts +8 -12
  29. package/dist/core/containers/index.d.ts.map +1 -1
  30. package/dist/core/containers/index.js +8 -12
  31. package/dist/core/containers/index.js.map +1 -1
  32. package/dist/core/deployment/direct-factory.d.ts +14 -2
  33. package/dist/core/deployment/direct-factory.d.ts.map +1 -1
  34. package/dist/core/deployment/direct-factory.js +117 -21
  35. package/dist/core/deployment/direct-factory.js.map +1 -1
  36. package/dist/core/deployment/engine.d.ts +8 -5
  37. package/dist/core/deployment/engine.d.ts.map +1 -1
  38. package/dist/core/deployment/engine.js +36 -12
  39. package/dist/core/deployment/engine.js.map +1 -1
  40. package/dist/core/deployment/kro-factory.d.ts +33 -14
  41. package/dist/core/deployment/kro-factory.d.ts.map +1 -1
  42. package/dist/core/deployment/kro-factory.js +130 -164
  43. package/dist/core/deployment/kro-factory.js.map +1 -1
  44. package/dist/core/deployment/shared-utilities.d.ts +15 -4
  45. package/dist/core/deployment/shared-utilities.d.ts.map +1 -1
  46. package/dist/core/deployment/shared-utilities.js +47 -14
  47. package/dist/core/deployment/shared-utilities.js.map +1 -1
  48. package/dist/core/deployment/strategies/direct-strategy.d.ts.map +1 -1
  49. package/dist/core/deployment/strategies/direct-strategy.js +1 -2
  50. package/dist/core/deployment/strategies/direct-strategy.js.map +1 -1
  51. package/dist/core/deployment/strategies/index.d.ts +0 -1
  52. package/dist/core/deployment/strategies/index.d.ts.map +1 -1
  53. package/dist/core/deployment/strategies/index.js +0 -1
  54. package/dist/core/deployment/strategies/index.js.map +1 -1
  55. package/dist/core/types/deployment.d.ts +28 -42
  56. package/dist/core/types/deployment.d.ts.map +1 -1
  57. package/dist/core/types/resource-graph.d.ts +2 -6
  58. package/dist/core/types/resource-graph.d.ts.map +1 -1
  59. package/dist/core/types/schema.d.ts +0 -1
  60. package/dist/core/types/schema.d.ts.map +1 -1
  61. package/dist/core/types/serialization.d.ts +3 -7
  62. package/dist/core/types/serialization.d.ts.map +1 -1
  63. package/dist/factories/kubernetes/yaml/yaml-directory.d.ts.map +1 -1
  64. package/dist/factories/kubernetes/yaml/yaml-directory.js +2 -13
  65. package/dist/factories/kubernetes/yaml/yaml-directory.js.map +1 -1
  66. package/dist/factories/kubernetes/yaml/yaml-file.d.ts.map +1 -1
  67. package/dist/factories/kubernetes/yaml/yaml-file.js +2 -18
  68. package/dist/factories/kubernetes/yaml/yaml-file.js.map +1 -1
  69. package/dist/shared/brands.d.ts +0 -9
  70. package/dist/shared/brands.d.ts.map +1 -1
  71. package/dist/shared/brands.js +0 -9
  72. package/dist/shared/brands.js.map +1 -1
  73. package/package.json +6 -3
  74. package/dist/alchemy/deployment.d.ts +0 -12
  75. package/dist/alchemy/deployment.d.ts.map +0 -1
  76. package/dist/alchemy/deployment.js +0 -12
  77. package/dist/alchemy/deployment.js.map +0 -1
  78. package/dist/core/containers/resolve.d.ts +0 -14
  79. package/dist/core/containers/resolve.d.ts.map +0 -1
  80. package/dist/core/containers/resolve.js +0 -88
  81. package/dist/core/containers/resolve.js.map +0 -1
  82. package/dist/core/deployment/strategies/alchemy-strategy.d.ts +0 -109
  83. package/dist/core/deployment/strategies/alchemy-strategy.d.ts.map +0 -1
  84. package/dist/core/deployment/strategies/alchemy-strategy.js +0 -556
  85. package/dist/core/deployment/strategies/alchemy-strategy.js.map +0 -1
@@ -1,14 +0,0 @@
1
- import { type ContainerImageRef } from './image.js';
2
- /**
3
- * Build + substitute every container image referenced by `resources`. Returns the resolved
4
- * `containerId → imageUri` map (also useful for logging/diagnostics). Mutates the resources in place.
5
- *
6
- * `build` defaults to the real {@link buildContainer}; it is injectable purely so tests can resolve
7
- * without a Docker daemon (avoids globally mocking the build module, which would leak across files).
8
- */
9
- export declare function resolveContainerImages(resources: readonly unknown[], build?: (options: ContainerImageRef['buildOptions']) => Promise<{
10
- imageUri: string;
11
- }>): Promise<Map<string, string>>;
12
- /** Whether any resource in the set references a container image (cheap pre-check to skip resolution). */
13
- export declare function hasContainerImageRefs(resources: readonly unknown[]): boolean;
14
- //# sourceMappingURL=resolve.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/core/containers/resolve.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,iBAAiB,EAAuB,MAAM,YAAY,CAAC;AAgCzE;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,SAAS,OAAO,EAAE,EAC7B,KAAK,GAAE,CACL,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,KACvC,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAkB,GAClD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA+B9B;AAED,yGAAyG;AACzG,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAS5E"}
@@ -1,88 +0,0 @@
1
- /**
2
- * Container Image Resolution
3
- *
4
- * Resolves every {@link ContainerImageRef} reachable from a set of resources to its literal image URI,
5
- * building each distinct container ONCE by delegating to the existing {@link buildContainer} (this
6
- * module adds NO build/push logic of its own). The refs are replaced in place with the URI string.
7
- *
8
- * Runs CLIENT-SIDE before apply (direct mode) / RGD serialization (kro mode), so a container image is
9
- * never a CEL expression and Kro only ever sees a literal image string.
10
- */
11
- import { getComponentLogger } from '../logging/index.js';
12
- import { buildContainer } from './build.js';
13
- import { isContainerImageRef } from './image.js';
14
- const logger = getComponentLogger('container-resolve');
15
- /** Deep-walk a value, invoking `onRef` for every ContainerImageRef found (cycle-safe). */
16
- function walk(value, seen, onRef, parent, key) {
17
- if (isContainerImageRef(value)) {
18
- if (parent !== undefined && key !== undefined)
19
- onRef(value, parent, key);
20
- return; // never descend into a ref's internals
21
- }
22
- if (value === null || typeof value !== 'object')
23
- return;
24
- if (seen.has(value))
25
- return;
26
- seen.add(value);
27
- if (Array.isArray(value)) {
28
- value.forEach((item, i) => walk(item, seen, onRef, value, i));
29
- }
30
- else {
31
- for (const k of Object.keys(value)) {
32
- walk(value[k], seen, onRef, value, k);
33
- }
34
- }
35
- }
36
- /**
37
- * Build + substitute every container image referenced by `resources`. Returns the resolved
38
- * `containerId → imageUri` map (also useful for logging/diagnostics). Mutates the resources in place.
39
- *
40
- * `build` defaults to the real {@link buildContainer}; it is injectable purely so tests can resolve
41
- * without a Docker daemon (avoids globally mocking the build module, which would leak across files).
42
- */
43
- export async function resolveContainerImages(resources, build = buildContainer) {
44
- // 1. Collect the distinct containers referenced anywhere in the resource set.
45
- const byId = new Map();
46
- for (const resource of resources) {
47
- walk(resource, new Set(), (ref) => {
48
- if (!byId.has(ref.containerId))
49
- byId.set(ref.containerId, ref);
50
- });
51
- }
52
- if (byId.size === 0)
53
- return new Map();
54
- // 2. Build each distinct container ONCE (delegating to buildContainer — the existing push mechanics).
55
- const uriByContainer = new Map();
56
- for (const [containerId, ref] of byId) {
57
- logger.info('Building container image for reference', {
58
- containerId,
59
- imageName: ref.buildOptions.imageName,
60
- });
61
- const { imageUri } = await build(ref.buildOptions);
62
- uriByContainer.set(containerId, imageUri);
63
- logger.info('Resolved container image', { containerId, imageUri });
64
- }
65
- // 3. Substitute every ref with its resolved literal URI, in place.
66
- for (const resource of resources) {
67
- walk(resource, new Set(), (ref, parent, key) => {
68
- const uri = uriByContainer.get(ref.containerId);
69
- if (uri === undefined)
70
- return;
71
- parent[key] = uri;
72
- });
73
- }
74
- return uriByContainer;
75
- }
76
- /** Whether any resource in the set references a container image (cheap pre-check to skip resolution). */
77
- export function hasContainerImageRefs(resources) {
78
- let found = false;
79
- for (const resource of resources) {
80
- walk(resource, new Set(), () => {
81
- found = true;
82
- });
83
- if (found)
84
- break;
85
- }
86
- return found;
87
- }
88
- //# sourceMappingURL=resolve.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/core/containers/resolve.ts"],"names":[],"mappings":"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"}
@@ -1,109 +0,0 @@
1
- /**
2
- * Alchemy Deployment Strategy
3
- *
4
- * This module provides the alchemy deployment strategy that wraps deployments
5
- * in alchemy resources with individual resource registration.
6
- */
7
- import type { DeploymentResult, FactoryOptions } from '../../types/deployment.js';
8
- import type { KubernetesResource } from '../../types/kubernetes.js';
9
- import type { KroCompatibleType, SchemaDefinition, Scope, StatusBuilder } from '../../types/serialization.js';
10
- import { BaseDeploymentStrategy, type DeploymentStrategy } from './base-strategy.js';
11
- /**
12
- * Alchemy deployment strategy - wraps deployments in alchemy resources with individual resource registration
13
- *
14
- * This strategy implements individual resource registration for Direct mode Alchemy integration.
15
- * Unlike Kro mode which registers RGDs and instances, Direct mode registers each individual
16
- * Kubernetes resource (Deployment, Service, ConfigMap, etc.) as separate Alchemy resource types.
17
- *
18
- * ## Resource Registration Pattern
19
- *
20
- * **Direct Mode (this strategy):**
21
- * - Each individual Kubernetes resource gets its own Alchemy resource type registration
22
- * - Resource types are named using the pattern `kubernetes::{Kind}` (e.g., `kubernetes::Deployment`)
23
- * - Each instance of each resource gets a separate Alchemy resource registered
24
- * - Example: A webapp with Deployment + Service creates 2 Alchemy resource types and 2 resource instances
25
- *
26
- * **Kro Mode (for comparison):**
27
- * - Each RGD gets one Alchemy resource type registered (`kro::ResourceGraphDefinition`)
28
- * - Each instance of each RGD gets a separate Alchemy resource registered (`kro::{Kind}`)
29
- * - Example: A webapp RGD creates 1 RGD type + 1 instance type = 2 Alchemy resources total
30
- *
31
- * ## Error Handling
32
- *
33
- * The strategy implements robust error handling for individual resource failures:
34
- * - Continues processing remaining resources when individual resources fail
35
- * - Collects all errors and includes them in the final DeploymentResult
36
- * - Sets deployment status to 'partial' when some resources succeed and others fail
37
- * - Provides resource-specific error context including kind, name, namespace, and Alchemy resource type
38
- *
39
- * ## Integration with DirectTypeKroDeployer
40
- *
41
- * This strategy integrates with DirectTypeKroDeployer for actual resource deployment:
42
- * - Extracts DirectDeploymentEngine from the base DirectDeploymentStrategy
43
- * - Creates DirectTypeKroDeployer instance for individual resource deployments
44
- * - Passes deployer to each Alchemy resource provider for deployment execution
45
- *
46
- * @template TSpec - The specification type for the resource
47
- * @template TStatus - The status type for the resource
48
- */
49
- export declare class AlchemyDeploymentStrategy<TSpec extends KroCompatibleType, TStatus extends KroCompatibleType> extends BaseDeploymentStrategy<TSpec, TStatus> {
50
- private alchemyScope;
51
- private baseStrategy;
52
- protected readonly alchemyLogger: import("../../logging/types.js").TypeKroLogger;
53
- constructor(factoryName: string, namespace: string, schemaDefinition: SchemaDefinition<TSpec, TStatus>, statusBuilder: StatusBuilder<TSpec, TStatus, any> | undefined, resourceKeys: Record<string, KubernetesResource> | undefined, factoryOptions: FactoryOptions, alchemyScope: Scope, baseStrategy: DeploymentStrategy<TSpec, TStatus>);
54
- /**
55
- * Execute deployment with individual resource registration for Alchemy integration
56
- *
57
- * This method implements the core logic for Direct mode Alchemy integration:
58
- *
59
- * ## Process Overview
60
- * 1. **Validation**: Validates the Alchemy scope is available and properly configured
61
- * 2. **Resource Graph Creation**: Gets the resource graph from the base strategy using createResourceGraphForInstance
62
- * 3. **Deployer Setup**: Creates DirectTypeKroDeployer instance using DirectDeploymentEngine from base strategy
63
- * 4. **Individual Registration**: Processes each resource in the resource graph individually for Alchemy registration
64
- * 5. **Error Collection**: Continues processing remaining resources when individual resources fail
65
- * 6. **Result Creation**: Creates comprehensive DeploymentResult with individual resource tracking
66
- *
67
- * ## Individual Resource Processing
68
- *
69
- * For each resource in the resource graph:
70
- * - **Type Inference**: Infers Alchemy resource type from Kubernetes kind (e.g., `kubernetes::Deployment`)
71
- * - **Type Registration**: Calls ensureResourceTypeRegistered to register the resource type (shared across instances)
72
- * - **ID Generation**: Creates unique resource ID using createAlchemyResourceId with namespace and resource info
73
- * - **Deployment**: Deploys the resource through Alchemy using the resource provider and DirectTypeKroDeployer
74
- * - **Tracking**: Tracks deployed resource with Alchemy metadata (resource ID, type, etc.)
75
- *
76
- * ## Error Handling Strategy
77
- *
78
- * The method implements robust error handling:
79
- * - **Continue on Failure**: Individual resource failures don't stop processing of remaining resources
80
- * - **Error Collection**: All errors are collected with detailed context about which resource failed
81
- * - **Resource Context**: Error messages include resource kind, name, namespace, and Alchemy resource type
82
- * - **Partial Status**: Deployment status is set to 'partial' when some resources succeed and others fail
83
- *
84
- * ## Resource Type Naming
85
- *
86
- * Resource types follow consistent naming patterns:
87
- * - **Kubernetes Resources**: `kubernetes::{Kind}` (e.g., `kubernetes::Deployment`, `kubernetes::Service`)
88
- * - **Shared Types**: Multiple instances of the same resource type share the same Alchemy resource type registration
89
- * - **Unique IDs**: Each resource instance gets a unique Alchemy resource ID for individual tracking
90
- *
91
- * @param spec - The resource specification to deploy
92
- * @param instanceName - The name of this specific instance
93
- * @returns Promise<DeploymentResult> - Comprehensive deployment result with individual resource tracking
94
- * @throws Error - If Alchemy scope validation fails or critical deployment errors occur
95
- */
96
- protected executeDeployment(spec: TSpec, instanceName: string, opts?: import('./base-strategy.js').DeployStrategyOptions): Promise<DeploymentResult>;
97
- private executeBaseDirectDeployment;
98
- private rollbackBaseDirectDeployment;
99
- protected getStrategyMode(): 'direct' | 'kro';
100
- /**
101
- * Create resource graph for instance using base strategy logic
102
- */
103
- private createResourceGraphForInstance;
104
- /**
105
- * Extract serializable kubeConfig options from factory options
106
- */
107
- private extractKubeConfigOptions;
108
- }
109
- //# sourceMappingURL=alchemy-strategy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"alchemy-strategy.d.ts","sourceRoot":"","sources":["../../../../src/core/deployment/strategies/alchemy-strategy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAGV,gBAAgB,EAChB,cAAc,EACf,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,EACL,aAAa,EACd,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,sBAAsB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGrF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,qBAAa,yBAAyB,CACpC,KAAK,SAAS,iBAAiB,EAC/B,OAAO,SAAS,iBAAiB,CACjC,SAAQ,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC;IAW5C,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IAXtB,SAAS,CAAC,QAAQ,CAAC,aAAa,iDAAqD;gBAGnF,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,EAElD,aAAa,EAAE,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,SAAS,EAC7D,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,SAAS,EAC5D,cAAc,EAAE,cAAc,EACtB,YAAY,EAAE,KAAK,EACnB,YAAY,EAAE,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;IAK1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;cACa,iBAAiB,CAC/B,IAAI,EAAE,KAAK,EACX,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,OAAO,oBAAoB,EAAE,qBAAqB,GACxD,OAAO,CAAC,gBAAgB,CAAC;YA0Pd,2BAA2B;YAoB3B,4BAA4B;IA+B1C,SAAS,CAAC,eAAe,IAAI,QAAQ,GAAG,KAAK;IAI7C;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAuDtC;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAwKjC"}