typekro 0.9.0 → 0.10.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/aspects.d.ts +3 -0
- package/dist/aspects.d.ts.map +1 -0
- package/dist/aspects.js +2 -0
- package/dist/aspects.js.map +1 -0
- package/dist/core/aspects/apply.d.ts +30 -0
- package/dist/core/aspects/apply.d.ts.map +1 -0
- package/dist/core/aspects/apply.js +369 -0
- package/dist/core/aspects/apply.js.map +1 -0
- package/dist/core/aspects/dev-aspects.d.ts +14 -0
- package/dist/core/aspects/dev-aspects.d.ts.map +1 -0
- package/dist/core/aspects/dev-aspects.js +70 -0
- package/dist/core/aspects/dev-aspects.js.map +1 -0
- package/dist/core/aspects/index.d.ts +31 -0
- package/dist/core/aspects/index.d.ts.map +1 -0
- package/dist/core/aspects/index.js +30 -0
- package/dist/core/aspects/index.js.map +1 -0
- package/dist/core/aspects/metadata-aspects.d.ts +12 -0
- package/dist/core/aspects/metadata-aspects.d.ts.map +1 -0
- package/dist/core/aspects/metadata-aspects.js +24 -0
- package/dist/core/aspects/metadata-aspects.js.map +1 -0
- package/dist/core/aspects/metadata.d.ts +16 -0
- package/dist/core/aspects/metadata.d.ts.map +1 -0
- package/dist/core/aspects/metadata.js +24 -0
- package/dist/core/aspects/metadata.js.map +1 -0
- package/dist/core/aspects/primitives.d.ts +23 -0
- package/dist/core/aspects/primitives.d.ts.map +1 -0
- package/dist/core/aspects/primitives.js +258 -0
- package/dist/core/aspects/primitives.js.map +1 -0
- package/dist/core/aspects/targets.d.ts +9 -0
- package/dist/core/aspects/targets.d.ts.map +1 -0
- package/dist/core/aspects/targets.js +23 -0
- package/dist/core/aspects/targets.js.map +1 -0
- package/dist/core/aspects/types.d.ts +361 -0
- package/dist/core/aspects/types.d.ts.map +1 -0
- package/dist/core/aspects/types.js +16 -0
- package/dist/core/aspects/types.js.map +1 -0
- package/dist/core/aspects/workload-aspects.d.ts +17 -0
- package/dist/core/aspects/workload-aspects.d.ts.map +1 -0
- package/dist/core/aspects/workload-aspects.js +40 -0
- package/dist/core/aspects/workload-aspects.js.map +1 -0
- package/dist/core/deployment/direct-factory.d.ts.map +1 -1
- package/dist/core/deployment/direct-factory.js +53 -26
- package/dist/core/deployment/direct-factory.js.map +1 -1
- package/dist/core/deployment/kro-factory.d.ts.map +1 -1
- package/dist/core/deployment/kro-factory.js +22 -19
- package/dist/core/deployment/kro-factory.js.map +1 -1
- package/dist/core/metadata/resource-metadata.d.ts +3 -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 +23 -0
- package/dist/core/proxy/create-resource.js.map +1 -1
- package/dist/core/serialization/core.d.ts.map +1 -1
- package/dist/core/serialization/core.js +50 -16
- package/dist/core/serialization/core.js.map +1 -1
- package/dist/core/types/deployment.d.ts +3 -3
- package/dist/core/types/deployment.d.ts.map +1 -1
- package/dist/core/types/resource-graph.d.ts +1 -0
- package/dist/core/types/resource-graph.d.ts.map +1 -1
- package/dist/factories/simple/index.d.ts +3 -3
- package/dist/factories/simple/index.d.ts.map +1 -1
- package/dist/factories/simple/workloads/deployment.d.ts +4 -1
- package/dist/factories/simple/workloads/deployment.d.ts.map +1 -1
- package/dist/factories/simple/workloads/deployment.js +6 -2
- package/dist/factories/simple/workloads/deployment.js.map +1 -1
- package/dist/factories/simple/workloads/stateful-set.d.ts +4 -1
- package/dist/factories/simple/workloads/stateful-set.d.ts.map +1 -1
- package/dist/factories/simple/workloads/stateful-set.js +6 -2
- package/dist/factories/simple/workloads/stateful-set.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { AspectApplicationError, AspectDefinitionError, allResources, append, aspect, hotReload, merge, metadata, override, replace, resources, slot, withAnnotations, withEnvFrom, withEnvVars, withHotReload, withImagePullPolicy, withLabels, withLocalWorkspace, withMetadata, withReplicas, withResourceDefaults, withServiceAccount, workloads, } from './core/aspects/index.js';
|
|
2
|
+
export type * from './core/aspects/types.js';
|
|
3
|
+
//# sourceMappingURL=aspects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aspects.d.ts","sourceRoot":"","sources":["../src/aspects.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,EACZ,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,SAAS,EACT,IAAI,EACJ,eAAe,EACf,WAAW,EACX,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,GACV,MAAM,yBAAyB,CAAC;AAEjC,mBAAmB,yBAAyB,CAAC"}
|
package/dist/aspects.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { AspectApplicationError, AspectDefinitionError, allResources, append, aspect, hotReload, merge, metadata, override, replace, resources, slot, withAnnotations, withEnvFrom, withEnvVars, withHotReload, withImagePullPolicy, withLabels, withLocalWorkspace, withMetadata, withReplicas, withResourceDefaults, withServiceAccount, workloads, } from './core/aspects/index.js';
|
|
2
|
+
//# sourceMappingURL=aspects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aspects.js","sourceRoot":"","sources":["../src/aspects.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,EACZ,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,SAAS,EACT,IAAI,EACJ,eAAe,EACf,WAAW,EACX,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,GACV,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { TypeKroError } from '../errors.js';
|
|
2
|
+
import type { KubernetesResource } from '../types/kubernetes.js';
|
|
3
|
+
import type { ApplyAspectsOptions, AspectOperationKind, AspectSelector } from './types.js';
|
|
4
|
+
export declare class AspectApplicationError extends TypeKroError {
|
|
5
|
+
readonly aspectIndex: number;
|
|
6
|
+
readonly target: string;
|
|
7
|
+
readonly mode: 'direct' | 'kro';
|
|
8
|
+
readonly reason: string;
|
|
9
|
+
readonly name = "AspectApplicationError";
|
|
10
|
+
readonly selector?: AspectSelector;
|
|
11
|
+
readonly matchCount?: number;
|
|
12
|
+
readonly resourceId?: string;
|
|
13
|
+
readonly resourceKind?: string;
|
|
14
|
+
readonly resourceName?: string;
|
|
15
|
+
readonly surface?: 'metadata' | 'override';
|
|
16
|
+
readonly operation?: AspectOperationKind;
|
|
17
|
+
readonly fieldPath?: string;
|
|
18
|
+
constructor(message: string, aspectIndex: number, target: string, mode: 'direct' | 'kro', reason: string, options?: {
|
|
19
|
+
selector?: AspectSelector;
|
|
20
|
+
matchCount?: number;
|
|
21
|
+
resourceId?: string;
|
|
22
|
+
resourceKind?: string;
|
|
23
|
+
resourceName?: string;
|
|
24
|
+
surface?: 'metadata' | 'override';
|
|
25
|
+
operation?: AspectOperationKind;
|
|
26
|
+
fieldPath?: string;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
export declare function applyAspects<TResources extends Record<string, KubernetesResource>>(resources: TResources, options: ApplyAspectsOptions): TResources;
|
|
30
|
+
//# sourceMappingURL=apply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/core/aspects/apply.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAMjE,OAAO,KAAK,EAEV,mBAAmB,EAEnB,mBAAmB,EACnB,cAAc,EAOf,MAAM,YAAY,CAAC;AASpB,qBAAa,sBAAuB,SAAQ,YAAY;IAqBpD,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,KAAK;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM;IAvBzB,QAAQ,CAAC,IAAI,4BAA4B;IAEzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAEnC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IAE3C,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAEzC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAG1B,OAAO,EAAE,MAAM,EACN,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,GAAG,KAAK,EACtB,MAAM,EAAE,MAAM,EACvB,OAAO,GAAE;QACP,QAAQ,CAAC,EAAE,cAAc,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;QAClC,SAAS,CAAC,EAAE,mBAAmB,CAAC;QAChC,SAAS,CAAC,EAAE,MAAM,CAAC;KACf;CAWT;AAkcD,wBAAgB,YAAY,CAAC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAChF,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,mBAAmB,GAC3B,UAAU,CAsEZ"}
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import { containsCelExpressions, containsKubernetesRefs, isCelExpression, isKubernetesRef, isMixedTemplate, isResourceReference, } from '../../utils/type-guards.js';
|
|
2
|
+
import { TypeKroError } from '../errors.js';
|
|
3
|
+
import { copyResourceMetadata } from '../metadata/resource-metadata.js';
|
|
4
|
+
import { getAspectMetadata, setAspectMetadata } from './metadata.js';
|
|
5
|
+
import { resolveFactoryTargetId } from './targets.js';
|
|
6
|
+
import { AspectDefinitionError } from './types.js';
|
|
7
|
+
export class AspectApplicationError extends TypeKroError {
|
|
8
|
+
aspectIndex;
|
|
9
|
+
target;
|
|
10
|
+
mode;
|
|
11
|
+
reason;
|
|
12
|
+
name = 'AspectApplicationError';
|
|
13
|
+
selector;
|
|
14
|
+
matchCount;
|
|
15
|
+
resourceId;
|
|
16
|
+
resourceKind;
|
|
17
|
+
resourceName;
|
|
18
|
+
surface;
|
|
19
|
+
operation;
|
|
20
|
+
fieldPath;
|
|
21
|
+
constructor(message, aspectIndex, target, mode, reason, options = {}) {
|
|
22
|
+
super(message, 'ASPECT_APPLICATION_ERROR', {
|
|
23
|
+
aspectIndex,
|
|
24
|
+
target,
|
|
25
|
+
mode,
|
|
26
|
+
reason,
|
|
27
|
+
...options,
|
|
28
|
+
});
|
|
29
|
+
this.aspectIndex = aspectIndex;
|
|
30
|
+
this.target = target;
|
|
31
|
+
this.mode = mode;
|
|
32
|
+
this.reason = reason;
|
|
33
|
+
Object.assign(this, options);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function cloneValue(value) {
|
|
37
|
+
if (isKubernetesRef(value) ||
|
|
38
|
+
isCelExpression(value) ||
|
|
39
|
+
isMixedTemplate(value) ||
|
|
40
|
+
isResourceReference(value)) {
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
if (Array.isArray(value))
|
|
44
|
+
return value.map((item) => cloneValue(item));
|
|
45
|
+
if (value && typeof value === 'object') {
|
|
46
|
+
const clone = {};
|
|
47
|
+
for (const [key, child] of Object.entries(value)) {
|
|
48
|
+
clone[key] = cloneValue(child);
|
|
49
|
+
}
|
|
50
|
+
return clone;
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
function cloneResources(resources) {
|
|
55
|
+
const cloned = {};
|
|
56
|
+
for (const [key, resource] of Object.entries(resources)) {
|
|
57
|
+
const clone = cloneValue(resource);
|
|
58
|
+
copyResourceMetadata(resource, clone);
|
|
59
|
+
cloned[key] = clone;
|
|
60
|
+
}
|
|
61
|
+
return cloned;
|
|
62
|
+
}
|
|
63
|
+
function isTargetGroup(target) {
|
|
64
|
+
return (!!target && typeof target === 'object' && 'kind' in target && target.kind === 'target-group');
|
|
65
|
+
}
|
|
66
|
+
function targetLabel(target) {
|
|
67
|
+
if (Array.isArray(target)) {
|
|
68
|
+
return target.map((child) => targetLabel(child)).join(',');
|
|
69
|
+
}
|
|
70
|
+
if (typeof target === 'function') {
|
|
71
|
+
return String(Reflect.get(target, '__typekroAspectTargetId') ?? target.name);
|
|
72
|
+
}
|
|
73
|
+
if (isTargetGroup(target))
|
|
74
|
+
return target.id;
|
|
75
|
+
return 'unknown';
|
|
76
|
+
}
|
|
77
|
+
function normalizedTargetId(value) {
|
|
78
|
+
return String(value).toLowerCase();
|
|
79
|
+
}
|
|
80
|
+
function hasStructuredSpec(resource) {
|
|
81
|
+
return !!resource.spec && typeof resource.spec === 'object' && !Array.isArray(resource.spec);
|
|
82
|
+
}
|
|
83
|
+
function matchesTarget(resource, aspectDefinition) {
|
|
84
|
+
const metadata = getAspectMetadata(resource);
|
|
85
|
+
const targets = Array.isArray(aspectDefinition.target)
|
|
86
|
+
? aspectDefinition.target
|
|
87
|
+
: [aspectDefinition.target];
|
|
88
|
+
return targets.some((target) => {
|
|
89
|
+
if (typeof target === 'function') {
|
|
90
|
+
const targetId = resolveFactoryTargetId(target);
|
|
91
|
+
if (targetId === undefined)
|
|
92
|
+
return false;
|
|
93
|
+
// Factory targets are kind-level identities, so custom factories that
|
|
94
|
+
// produce the same Kubernetes kind intentionally share the same target.
|
|
95
|
+
return (normalizedTargetId(metadata?.factoryTarget) === normalizedTargetId(targetId) ||
|
|
96
|
+
normalizedTargetId(resource.kind) === normalizedTargetId(targetId));
|
|
97
|
+
}
|
|
98
|
+
if (isTargetGroup(target)) {
|
|
99
|
+
if (target.id === 'allResources')
|
|
100
|
+
return true;
|
|
101
|
+
if (target.id === 'resources') {
|
|
102
|
+
return metadata?.overrideSchema !== undefined || hasStructuredSpec(resource);
|
|
103
|
+
}
|
|
104
|
+
return metadata?.targetGroups?.includes(target.id) ?? false;
|
|
105
|
+
}
|
|
106
|
+
return false;
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function matchesSelector(resource, selector) {
|
|
110
|
+
if (!selector)
|
|
111
|
+
return true;
|
|
112
|
+
const metadata = getAspectMetadata(resource);
|
|
113
|
+
if (selector.slot !== undefined && metadata?.slot !== selector.slot)
|
|
114
|
+
return false;
|
|
115
|
+
if (selector.id !== undefined && metadata?.id !== selector.id)
|
|
116
|
+
return false;
|
|
117
|
+
if (selector.name !== undefined &&
|
|
118
|
+
(metadata?.name ?? resource.metadata?.name) !== selector.name) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
if (selector.namespace !== undefined &&
|
|
122
|
+
(metadata?.namespace ?? resource.metadata?.namespace) !== selector.namespace) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
if (selector.kind !== undefined && (metadata?.kind ?? resource.kind) !== selector.kind)
|
|
126
|
+
return false;
|
|
127
|
+
if (selector.labels) {
|
|
128
|
+
const labels = resource.metadata?.labels ?? metadata?.labels ?? {};
|
|
129
|
+
for (const [key, value] of Object.entries(selector.labels)) {
|
|
130
|
+
if (labels[key] !== value)
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
function setLabelsFromResource(resource) {
|
|
137
|
+
const metadata = getAspectMetadata(resource);
|
|
138
|
+
if (!metadata)
|
|
139
|
+
return;
|
|
140
|
+
const labels = resource.metadata?.labels ?? metadata.labels;
|
|
141
|
+
if (labels !== undefined) {
|
|
142
|
+
setAspectMetadata(resource, { labels });
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function applyMetadataSurface(resource, surface) {
|
|
146
|
+
resource.metadata ??= {};
|
|
147
|
+
if (surface.labels) {
|
|
148
|
+
resource.metadata.labels = applyMapOperation(resource.metadata.labels ?? {}, surface.labels);
|
|
149
|
+
}
|
|
150
|
+
if (surface.annotations) {
|
|
151
|
+
resource.metadata.annotations = applyMapOperation(resource.metadata.annotations ?? {}, surface.annotations);
|
|
152
|
+
}
|
|
153
|
+
setLabelsFromResource(resource);
|
|
154
|
+
}
|
|
155
|
+
function applyMapOperation(current, operation) {
|
|
156
|
+
return operation.kind === 'replace'
|
|
157
|
+
? Object.fromEntries(Object.entries(operation.value).filter((entry) => entry[1] !== undefined))
|
|
158
|
+
: Object.fromEntries(Object.entries({ ...current, ...operation.value }).filter((entry) => entry[1] !== undefined));
|
|
159
|
+
}
|
|
160
|
+
function isOperation(value) {
|
|
161
|
+
return (!!value &&
|
|
162
|
+
typeof value === 'object' &&
|
|
163
|
+
'kind' in value &&
|
|
164
|
+
(value.kind === 'replace' ||
|
|
165
|
+
value.kind === 'merge' ||
|
|
166
|
+
value.kind === 'append' ||
|
|
167
|
+
value.kind === 'patchEach' ||
|
|
168
|
+
value.kind === 'mergeByName'));
|
|
169
|
+
}
|
|
170
|
+
function applyOverrideSurface(resource, surface, context) {
|
|
171
|
+
validateOverridePatch(resource, surface.patch, context);
|
|
172
|
+
applyPatch(resource, surface.patch, [], context);
|
|
173
|
+
}
|
|
174
|
+
function operationPlacementIsAllowed(fieldKind, operation) {
|
|
175
|
+
if (operation.kind === 'replace')
|
|
176
|
+
return true;
|
|
177
|
+
if (operation.kind === 'merge')
|
|
178
|
+
return fieldKind === 'object';
|
|
179
|
+
return fieldKind === 'array';
|
|
180
|
+
}
|
|
181
|
+
function validateOverridePatchNode(node, patch, path, context) {
|
|
182
|
+
if (!patch || typeof patch !== 'object')
|
|
183
|
+
return;
|
|
184
|
+
if (isOperation(patch)) {
|
|
185
|
+
if (!operationPlacementIsAllowed(node.kind, patch)) {
|
|
186
|
+
const fieldPath = path.join('.');
|
|
187
|
+
throw new AspectApplicationError(`Aspect ${patch.kind} operation is not valid for ${node.kind} field ${fieldPath}`, context.aspectIndex, context.target, context.mode, 'operation is not allowed for the advertised writable aspect field type', { ...context, operation: patch.kind, fieldPath });
|
|
188
|
+
}
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
if (node.kind !== 'object' || !node.children) {
|
|
192
|
+
const fieldPath = path.join('.');
|
|
193
|
+
throw new AspectApplicationError(`Aspect override field ${fieldPath} must use replace(...)`, context.aspectIndex, context.target, context.mode, 'nested patch is not valid for this advertised writable aspect field', { ...context, fieldPath });
|
|
194
|
+
}
|
|
195
|
+
for (const [key, childPatch] of Object.entries(patch)) {
|
|
196
|
+
const childNode = node.children[key];
|
|
197
|
+
const childPath = [...path, key];
|
|
198
|
+
if (!childNode) {
|
|
199
|
+
const fieldPath = childPath.join('.');
|
|
200
|
+
throw new AspectApplicationError(`Aspect override field ${fieldPath} is not advertised for this resource`, context.aspectIndex, context.target, context.mode, 'field is not in the advertised writable aspect schema', { ...context, fieldPath });
|
|
201
|
+
}
|
|
202
|
+
validateOverridePatchNode(childNode, childPatch, childPath, context);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
function validateOverridePatch(resource, patch, context) {
|
|
206
|
+
const schema = getAspectMetadata(resource)?.overrideSchema;
|
|
207
|
+
// Generic factory targets derive their deep writable shape from TypeScript.
|
|
208
|
+
// At runtime we still enforce root/spec boundaries and concrete operation
|
|
209
|
+
// compatibility against existing fields during applyPatch/applyOperation, but
|
|
210
|
+
// TypeScript remains authoritative for optional Kubernetes fields that are not
|
|
211
|
+
// present in the initial manifest.
|
|
212
|
+
if (!schema)
|
|
213
|
+
return;
|
|
214
|
+
validateOverridePatchNode(schema, patch, [], context);
|
|
215
|
+
}
|
|
216
|
+
function applyPatch(target, patch, path, context) {
|
|
217
|
+
if (!patch || typeof patch !== 'object')
|
|
218
|
+
return;
|
|
219
|
+
for (const [key, value] of Object.entries(patch)) {
|
|
220
|
+
const nextPath = [...path, key];
|
|
221
|
+
if (isOperation(value)) {
|
|
222
|
+
applyOperation(target, key, value, nextPath, context);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
const child = target[key];
|
|
226
|
+
if (child !== undefined && (typeof child !== 'object' || Array.isArray(child))) {
|
|
227
|
+
const fieldPath = nextPath.join('.');
|
|
228
|
+
throw new AspectApplicationError(`Aspect nested patch requires an object field at ${fieldPath}`, context.aspectIndex, context.target, context.mode, 'nested patch target is not an object', { ...context, fieldPath });
|
|
229
|
+
}
|
|
230
|
+
if (!child)
|
|
231
|
+
target[key] = {};
|
|
232
|
+
applyPatch(target[key], value, nextPath, context);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
function applyOperation(target, key, operation, path, context) {
|
|
237
|
+
const current = target[key];
|
|
238
|
+
const fieldPath = path.join('.');
|
|
239
|
+
if (operation.kind === 'merge' && Object.keys(operation.value).length === 0)
|
|
240
|
+
return;
|
|
241
|
+
if (operation.kind === 'append' && operation.value.length === 0)
|
|
242
|
+
return;
|
|
243
|
+
if (operation.kind === 'mergeByName' && operation.value.length === 0)
|
|
244
|
+
return;
|
|
245
|
+
const operationValueContainsReferences = 'patch' in operation
|
|
246
|
+
? containsKubernetesRefs(operation.patch) || containsCelExpressions(operation.patch)
|
|
247
|
+
: containsKubernetesRefs(operation.value) || containsCelExpressions(operation.value);
|
|
248
|
+
const currentValueContainsReferences = containsKubernetesRefs(current) || containsCelExpressions(current);
|
|
249
|
+
if (context.mode === 'kro' &&
|
|
250
|
+
(operation.kind === 'merge' || operation.kind === 'append') &&
|
|
251
|
+
(currentValueContainsReferences || operationValueContainsReferences)) {
|
|
252
|
+
throw new AspectApplicationError(`Aspect ${operation.kind} is not safe for reference-backed Kro field ${fieldPath}`, context.aspectIndex, context.target, context.mode, 'reference-backed composite or payload cannot be merged or appended in Kro mode', { ...context, operation: operation.kind, fieldPath });
|
|
253
|
+
}
|
|
254
|
+
if (context.mode === 'kro' && operation.kind === 'mergeByName' && operationValueContainsReferences) {
|
|
255
|
+
throw new AspectApplicationError(`Aspect ${operation.kind} payload is not safe for Kro field ${fieldPath}`, context.aspectIndex, context.target, context.mode, 'reference-backed payload cannot be merged by name in Kro mode', { ...context, operation: operation.kind, fieldPath });
|
|
256
|
+
}
|
|
257
|
+
if (operation.kind === 'replace') {
|
|
258
|
+
target[key] = cloneValue(operation.value);
|
|
259
|
+
}
|
|
260
|
+
else if (operation.kind === 'merge') {
|
|
261
|
+
if (!current || typeof current !== 'object' || Array.isArray(current)) {
|
|
262
|
+
throw new AspectApplicationError(`Aspect merge operation requires an object field at ${fieldPath}`, context.aspectIndex, context.target, context.mode, 'merge operation target is not an object', { ...context, operation: operation.kind, fieldPath });
|
|
263
|
+
}
|
|
264
|
+
target[key] = { ...current, ...operation.value };
|
|
265
|
+
}
|
|
266
|
+
else if (operation.kind === 'append') {
|
|
267
|
+
if (current === undefined) {
|
|
268
|
+
target[key] = cloneValue(operation.value);
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
if (!Array.isArray(current)) {
|
|
272
|
+
throw new AspectApplicationError(`Aspect append operation requires an array field at ${fieldPath}`, context.aspectIndex, context.target, context.mode, 'append operation target is not an array', { ...context, operation: operation.kind, fieldPath });
|
|
273
|
+
}
|
|
274
|
+
target[key] = [...current, ...operation.value];
|
|
275
|
+
}
|
|
276
|
+
else if (operation.kind === 'patchEach') {
|
|
277
|
+
if (!Array.isArray(current)) {
|
|
278
|
+
throw new AspectApplicationError(`Aspect patchEach operation requires an array field at ${fieldPath}`, context.aspectIndex, context.target, context.mode, 'patchEach operation target is not an array', { ...context, operation: operation.kind, fieldPath });
|
|
279
|
+
}
|
|
280
|
+
for (const [index, entry] of current.entries()) {
|
|
281
|
+
if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {
|
|
282
|
+
throw new AspectApplicationError(`Aspect patchEach operation requires object entries at ${fieldPath}`, context.aspectIndex, context.target, context.mode, 'patchEach operation entry is not an object', { ...context, operation: operation.kind, fieldPath: `${fieldPath}[${index}]` });
|
|
283
|
+
}
|
|
284
|
+
applyPatch(entry, operation.patch, [`${fieldPath}[${index}]`], context);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
if (current === undefined) {
|
|
289
|
+
target[key] = cloneValue(operation.value);
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
if (!Array.isArray(current)) {
|
|
293
|
+
throw new AspectApplicationError(`Aspect mergeByName operation requires an array field at ${fieldPath}`, context.aspectIndex, context.target, context.mode, 'mergeByName operation target is not an array', { ...context, operation: operation.kind, fieldPath });
|
|
294
|
+
}
|
|
295
|
+
const merged = current.map((entry) => cloneValue(entry));
|
|
296
|
+
for (const value of operation.value) {
|
|
297
|
+
const existingIndex = merged.findIndex((entry) => !!entry &&
|
|
298
|
+
typeof entry === 'object' &&
|
|
299
|
+
!Array.isArray(entry) &&
|
|
300
|
+
entry.name === value.name);
|
|
301
|
+
if (existingIndex >= 0) {
|
|
302
|
+
merged[existingIndex] = {
|
|
303
|
+
...merged[existingIndex],
|
|
304
|
+
...cloneValue(value),
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
merged.push(cloneValue(value));
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
target[key] = merged;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
export function applyAspects(resources, options) {
|
|
315
|
+
if (options.aspects.length === 0)
|
|
316
|
+
return resources;
|
|
317
|
+
const cloned = cloneResources(resources);
|
|
318
|
+
const resourceList = Object.values(cloned);
|
|
319
|
+
options.aspects.forEach((definition, index) => {
|
|
320
|
+
const typedDefinition = definition;
|
|
321
|
+
const target = targetLabel(typedDefinition.target);
|
|
322
|
+
const matches = resourceList.filter((resource) => matchesTarget(resource, typedDefinition) &&
|
|
323
|
+
matchesSelector(resource, typedDefinition.selector));
|
|
324
|
+
if (typedDefinition.cardinality === 'exactly-one' && matches.length !== 1) {
|
|
325
|
+
throw new AspectApplicationError(`Aspect expected one ${target} match but found ${matches.length}`, index, target, options.mode, 'selector cardinality mismatch', {
|
|
326
|
+
...(typedDefinition.selector !== undefined ? { selector: typedDefinition.selector } : {}),
|
|
327
|
+
matchCount: matches.length,
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
if (typedDefinition.cardinality === 'one-or-more' && matches.length === 0) {
|
|
331
|
+
throw new AspectApplicationError(`Aspect selector matched no resources for ${target}`, index, target, options.mode, 'no resources matched selector', {
|
|
332
|
+
...(typedDefinition.selector !== undefined ? { selector: typedDefinition.selector } : {}),
|
|
333
|
+
matchCount: 0,
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
for (const resource of matches) {
|
|
337
|
+
const metadata = getAspectMetadata(resource);
|
|
338
|
+
if (typedDefinition.surface.kind === 'metadata') {
|
|
339
|
+
applyMetadataSurface(resource, typedDefinition.surface);
|
|
340
|
+
}
|
|
341
|
+
else if (typedDefinition.surface.kind === 'override') {
|
|
342
|
+
try {
|
|
343
|
+
applyOverrideSurface(resource, typedDefinition.surface, {
|
|
344
|
+
mode: options.mode,
|
|
345
|
+
aspectIndex: index,
|
|
346
|
+
target,
|
|
347
|
+
...(typedDefinition.selector !== undefined
|
|
348
|
+
? { selector: typedDefinition.selector }
|
|
349
|
+
: {}),
|
|
350
|
+
matchCount: matches.length,
|
|
351
|
+
...(metadata?.id !== undefined ? { resourceId: metadata.id } : {}),
|
|
352
|
+
resourceKind: resource.kind,
|
|
353
|
+
...(resource.metadata?.name !== undefined
|
|
354
|
+
? { resourceName: String(resource.metadata.name) }
|
|
355
|
+
: {}),
|
|
356
|
+
surface: 'override',
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
if (error instanceof AspectApplicationError)
|
|
361
|
+
throw error;
|
|
362
|
+
throw new AspectDefinitionError('override', String(error));
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
return cloned;
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/core/aspects/apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { workloads } from './primitives.js';
|
|
2
|
+
import type { AspectDefinition, HotReloadAspectOptions, HotReloadAspectSchema, LocalWorkspaceAspectOptions, OverrideAspectSurface, WorkloadPodTemplateAspectSchema } from './types.js';
|
|
3
|
+
/** Creates a workload aspect that mounts a local host workspace into every container. */
|
|
4
|
+
export declare function withLocalWorkspace(options: LocalWorkspaceAspectOptions): AspectDefinition<typeof workloads, OverrideAspectSurface<WorkloadPodTemplateAspectSchema>>;
|
|
5
|
+
/**
|
|
6
|
+
* Creates a dev-mode hot reload override surface for workload pod templates.
|
|
7
|
+
*
|
|
8
|
+
* The helper intentionally returns only the override surface. Callers still pick
|
|
9
|
+
* the target and selector with `aspect.on(...)`, keeping dev behavior explicit.
|
|
10
|
+
*/
|
|
11
|
+
export declare function hotReload(options: HotReloadAspectOptions): OverrideAspectSurface<HotReloadAspectSchema>;
|
|
12
|
+
/** Creates a workload-targeted dev-mode hot reload aspect. */
|
|
13
|
+
export declare function withHotReload(options: HotReloadAspectOptions): AspectDefinition<typeof workloads, OverrideAspectSurface<HotReloadAspectSchema>>;
|
|
14
|
+
//# sourceMappingURL=dev-aspects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-aspects.d.ts","sourceRoot":"","sources":["../../../src/core/aspects/dev-aspects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG9G,OAAO,KAAK,EACV,gBAAgB,EAEhB,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,EAC3B,qBAAqB,EAErB,+BAA+B,EAChC,MAAM,YAAY,CAAC;AAWpB,yFAAyF;AACzF,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,2BAA2B,GACnC,gBAAgB,CAAC,OAAO,SAAS,EAAE,qBAAqB,CAAC,+BAA+B,CAAC,CAAC,CAsB5F;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,CAAC,qBAAqB,CAAC,CA+BvG;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAC3B,OAAO,EAAE,sBAAsB,GAC9B,gBAAgB,CAAC,OAAO,SAAS,EAAE,qBAAqB,CAAC,qBAAqB,CAAC,CAAC,CAKlF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { aspect, isPlainObject, mergeByName, override, patchEach, replace, workloads } from './primitives.js';
|
|
2
|
+
import { workloadOverride } from './workload-aspects.js';
|
|
3
|
+
import { AspectDefinitionError } from './types.js';
|
|
4
|
+
function createDefinitionError(functionName, reason) {
|
|
5
|
+
return new AspectDefinitionError(functionName, reason);
|
|
6
|
+
}
|
|
7
|
+
/** Creates a workload aspect that mounts a local host workspace into every container. */
|
|
8
|
+
export function withLocalWorkspace(options) {
|
|
9
|
+
if (!isPlainObject(options)) {
|
|
10
|
+
throw createDefinitionError('override', 'withLocalWorkspace(...) options must be an object');
|
|
11
|
+
}
|
|
12
|
+
const volumeName = options.volumeName ?? 'workspace';
|
|
13
|
+
const mountPath = options.mountPath ?? '/workspace';
|
|
14
|
+
const volumeMount = { name: volumeName, mountPath };
|
|
15
|
+
const volume = {
|
|
16
|
+
name: volumeName,
|
|
17
|
+
hostPath: { path: options.workspacePath, type: options.hostPathType ?? 'Directory' },
|
|
18
|
+
};
|
|
19
|
+
return workloadOverride({
|
|
20
|
+
spec: {
|
|
21
|
+
template: {
|
|
22
|
+
spec: {
|
|
23
|
+
containers: patchEach({ volumeMounts: mergeByName([volumeMount]) }),
|
|
24
|
+
volumes: mergeByName([volume]),
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Creates a dev-mode hot reload override surface for workload pod templates.
|
|
32
|
+
*
|
|
33
|
+
* The helper intentionally returns only the override surface. Callers still pick
|
|
34
|
+
* the target and selector with `aspect.on(...)`, keeping dev behavior explicit.
|
|
35
|
+
*/
|
|
36
|
+
export function hotReload(options) {
|
|
37
|
+
if (!isPlainObject(options)) {
|
|
38
|
+
throw createDefinitionError('hotReload', 'hotReload(...) options must be an object');
|
|
39
|
+
}
|
|
40
|
+
if (!Array.isArray(options.containers) || options.containers.length === 0) {
|
|
41
|
+
throw createDefinitionError('hotReload', 'hotReload(...) containers must be a non-empty array');
|
|
42
|
+
}
|
|
43
|
+
if (options.volumes !== undefined && !Array.isArray(options.volumes)) {
|
|
44
|
+
throw createDefinitionError('hotReload', 'hotReload(...) volumes must be an array');
|
|
45
|
+
}
|
|
46
|
+
if (options.labels !== undefined && !isPlainObject(options.labels)) {
|
|
47
|
+
throw createDefinitionError('hotReload', 'hotReload(...) labels must be an object');
|
|
48
|
+
}
|
|
49
|
+
const labelPatch = {};
|
|
50
|
+
for (const [key, value] of Object.entries(options.labels ?? {})) {
|
|
51
|
+
labelPatch[key] = replace(value);
|
|
52
|
+
}
|
|
53
|
+
return override({
|
|
54
|
+
spec: {
|
|
55
|
+
...(options.replicas !== undefined && { replicas: replace(options.replicas) }),
|
|
56
|
+
template: {
|
|
57
|
+
...(options.labels !== undefined && { metadata: { labels: labelPatch } }),
|
|
58
|
+
spec: {
|
|
59
|
+
containers: replace(options.containers),
|
|
60
|
+
...(options.volumes !== undefined && { volumes: replace(options.volumes) }),
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/** Creates a workload-targeted dev-mode hot reload aspect. */
|
|
67
|
+
export function withHotReload(options) {
|
|
68
|
+
return aspect.on(workloads, hotReload(options));
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=dev-aspects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-aspects.js","sourceRoot":"","sources":["../../../src/core/aspects/dev-aspects.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed resource aspects for applying validated metadata and spec overrides to
|
|
3
|
+
* TypeKro resources at render/factory time.
|
|
4
|
+
*
|
|
5
|
+
* Target groups: `allResources` accepts `metadata(...)` for every rendered
|
|
6
|
+
* resource. `resources` accepts `override(...)` for every rendered resource with
|
|
7
|
+
* a structured `spec`. Factory functions such as `simple.Deployment` are used as
|
|
8
|
+
* kind/capability tokens, not strict provenance tokens: a Deployment target can
|
|
9
|
+
* match Deployment-producing factories that advertise compatible aspect
|
|
10
|
+
* metadata. Use `slot(...)` and `.where(...)` for exact semantic targeting.
|
|
11
|
+
* Runtime validation remains best-effort for optional fields absent from the
|
|
12
|
+
* initial manifest.
|
|
13
|
+
*
|
|
14
|
+
* Selectors use AND semantics across `slot`, `id`, `name`, `namespace`, `kind`,
|
|
15
|
+
* and `labels`. By default an aspect requires one-or-more matches; `.optional()`
|
|
16
|
+
* allows zero matches and `.expectOne()` requires exactly one match.
|
|
17
|
+
*
|
|
18
|
+
* Operation legality is schema-derived: `replace(...)` is valid for advertised
|
|
19
|
+
* scalar, object, and array fields; `merge(...)` is valid for advertised object
|
|
20
|
+
* fields; `append(...)` is valid for advertised array fields. Kro mode rejects
|
|
21
|
+
* `merge(...)` and `append(...)` when either the current composite field or the
|
|
22
|
+
* operation payload contains Kubernetes refs or CEL expressions.
|
|
23
|
+
*/
|
|
24
|
+
export { AspectApplicationError, applyAspects } from './apply.js';
|
|
25
|
+
export { hotReload, withHotReload, withLocalWorkspace } from './dev-aspects.js';
|
|
26
|
+
export { withAnnotations, withLabels, withMetadata } from './metadata-aspects.js';
|
|
27
|
+
export { allResources, append, aspect, merge, metadata, override, replace, resources, slot, workloads, } from './primitives.js';
|
|
28
|
+
export { AspectDefinitionError } from './types.js';
|
|
29
|
+
export type * from './types.js';
|
|
30
|
+
export { withEnvFrom, withEnvVars, withImagePullPolicy, withReplicas, withResourceDefaults, withServiceAccount, } from './workload-aspects.js';
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/aspects/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EACL,YAAY,EACZ,MAAM,EACN,MAAM,EACN,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,SAAS,EACT,IAAI,EACJ,SAAS,GACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,mBAAmB,YAAY,CAAC;AAChC,OAAO,EACL,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed resource aspects for applying validated metadata and spec overrides to
|
|
3
|
+
* TypeKro resources at render/factory time.
|
|
4
|
+
*
|
|
5
|
+
* Target groups: `allResources` accepts `metadata(...)` for every rendered
|
|
6
|
+
* resource. `resources` accepts `override(...)` for every rendered resource with
|
|
7
|
+
* a structured `spec`. Factory functions such as `simple.Deployment` are used as
|
|
8
|
+
* kind/capability tokens, not strict provenance tokens: a Deployment target can
|
|
9
|
+
* match Deployment-producing factories that advertise compatible aspect
|
|
10
|
+
* metadata. Use `slot(...)` and `.where(...)` for exact semantic targeting.
|
|
11
|
+
* Runtime validation remains best-effort for optional fields absent from the
|
|
12
|
+
* initial manifest.
|
|
13
|
+
*
|
|
14
|
+
* Selectors use AND semantics across `slot`, `id`, `name`, `namespace`, `kind`,
|
|
15
|
+
* and `labels`. By default an aspect requires one-or-more matches; `.optional()`
|
|
16
|
+
* allows zero matches and `.expectOne()` requires exactly one match.
|
|
17
|
+
*
|
|
18
|
+
* Operation legality is schema-derived: `replace(...)` is valid for advertised
|
|
19
|
+
* scalar, object, and array fields; `merge(...)` is valid for advertised object
|
|
20
|
+
* fields; `append(...)` is valid for advertised array fields. Kro mode rejects
|
|
21
|
+
* `merge(...)` and `append(...)` when either the current composite field or the
|
|
22
|
+
* operation payload contains Kubernetes refs or CEL expressions.
|
|
23
|
+
*/
|
|
24
|
+
export { AspectApplicationError, applyAspects } from './apply.js';
|
|
25
|
+
export { hotReload, withHotReload, withLocalWorkspace } from './dev-aspects.js';
|
|
26
|
+
export { withAnnotations, withLabels, withMetadata } from './metadata-aspects.js';
|
|
27
|
+
export { allResources, append, aspect, merge, metadata, override, replace, resources, slot, workloads, } from './primitives.js';
|
|
28
|
+
export { AspectDefinitionError } from './types.js';
|
|
29
|
+
export { withEnvFrom, withEnvVars, withImagePullPolicy, withReplicas, withResourceDefaults, withServiceAccount, } from './workload-aspects.js';
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/aspects/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EACL,YAAY,EACZ,MAAM,EACN,MAAM,EACN,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,SAAS,EACT,IAAI,EACJ,SAAS,GACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EACL,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { allResources } from './primitives.js';
|
|
2
|
+
import type { AnnotationMap, AspectDefinition, LabelMap, MetadataAspectSurface } from './types.js';
|
|
3
|
+
/** Creates a cross-cutting resource metadata label aspect. */
|
|
4
|
+
export declare function withLabels(labels: LabelMap): AspectDefinition<typeof allResources, MetadataAspectSurface>;
|
|
5
|
+
/** Creates a cross-cutting resource metadata annotation aspect. */
|
|
6
|
+
export declare function withAnnotations(annotations: AnnotationMap): AspectDefinition<typeof allResources, MetadataAspectSurface>;
|
|
7
|
+
/** Creates a cross-cutting resource metadata aspect. */
|
|
8
|
+
export declare function withMetadata(options: {
|
|
9
|
+
readonly labels?: LabelMap;
|
|
10
|
+
readonly annotations?: AnnotationMap;
|
|
11
|
+
}): AspectDefinition<typeof allResources, MetadataAspectSurface>;
|
|
12
|
+
//# sourceMappingURL=metadata-aspects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-aspects.d.ts","sourceRoot":"","sources":["../../../src/core/aspects/metadata-aspects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA0C,MAAM,iBAAiB,CAAC;AAEvF,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAEhB,QAAQ,EACR,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAUpB,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG,gBAAgB,CAAC,OAAO,YAAY,EAAE,qBAAqB,CAAC,CAEzG;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAC7B,WAAW,EAAE,aAAa,GACzB,gBAAgB,CAAC,OAAO,YAAY,EAAE,qBAAqB,CAAC,CAE9D;AAED,wDAAwD;AACxD,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC;CACtC,GAAG,gBAAgB,CAAC,OAAO,YAAY,EAAE,qBAAqB,CAAC,CAW/D"}
|