typekro 0.9.0 → 0.10.1

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 (78) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/aspects.d.ts +3 -0
  3. package/dist/aspects.d.ts.map +1 -0
  4. package/dist/aspects.js +2 -0
  5. package/dist/aspects.js.map +1 -0
  6. package/dist/core/aspects/apply.d.ts +30 -0
  7. package/dist/core/aspects/apply.d.ts.map +1 -0
  8. package/dist/core/aspects/apply.js +369 -0
  9. package/dist/core/aspects/apply.js.map +1 -0
  10. package/dist/core/aspects/dev-aspects.d.ts +14 -0
  11. package/dist/core/aspects/dev-aspects.d.ts.map +1 -0
  12. package/dist/core/aspects/dev-aspects.js +70 -0
  13. package/dist/core/aspects/dev-aspects.js.map +1 -0
  14. package/dist/core/aspects/index.d.ts +31 -0
  15. package/dist/core/aspects/index.d.ts.map +1 -0
  16. package/dist/core/aspects/index.js +30 -0
  17. package/dist/core/aspects/index.js.map +1 -0
  18. package/dist/core/aspects/metadata-aspects.d.ts +12 -0
  19. package/dist/core/aspects/metadata-aspects.d.ts.map +1 -0
  20. package/dist/core/aspects/metadata-aspects.js +24 -0
  21. package/dist/core/aspects/metadata-aspects.js.map +1 -0
  22. package/dist/core/aspects/metadata.d.ts +16 -0
  23. package/dist/core/aspects/metadata.d.ts.map +1 -0
  24. package/dist/core/aspects/metadata.js +24 -0
  25. package/dist/core/aspects/metadata.js.map +1 -0
  26. package/dist/core/aspects/primitives.d.ts +23 -0
  27. package/dist/core/aspects/primitives.d.ts.map +1 -0
  28. package/dist/core/aspects/primitives.js +258 -0
  29. package/dist/core/aspects/primitives.js.map +1 -0
  30. package/dist/core/aspects/targets.d.ts +9 -0
  31. package/dist/core/aspects/targets.d.ts.map +1 -0
  32. package/dist/core/aspects/targets.js +23 -0
  33. package/dist/core/aspects/targets.js.map +1 -0
  34. package/dist/core/aspects/types.d.ts +361 -0
  35. package/dist/core/aspects/types.d.ts.map +1 -0
  36. package/dist/core/aspects/types.js +16 -0
  37. package/dist/core/aspects/types.js.map +1 -0
  38. package/dist/core/aspects/workload-aspects.d.ts +17 -0
  39. package/dist/core/aspects/workload-aspects.d.ts.map +1 -0
  40. package/dist/core/aspects/workload-aspects.js +40 -0
  41. package/dist/core/aspects/workload-aspects.js.map +1 -0
  42. package/dist/core/composition/imperative.d.ts.map +1 -1
  43. package/dist/core/composition/imperative.js +6 -2
  44. package/dist/core/composition/imperative.js.map +1 -1
  45. package/dist/core/deployment/direct-factory.d.ts.map +1 -1
  46. package/dist/core/deployment/direct-factory.js +53 -26
  47. package/dist/core/deployment/direct-factory.js.map +1 -1
  48. package/dist/core/deployment/kro-factory.d.ts.map +1 -1
  49. package/dist/core/deployment/kro-factory.js +22 -19
  50. package/dist/core/deployment/kro-factory.js.map +1 -1
  51. package/dist/core/metadata/resource-metadata.d.ts +3 -0
  52. package/dist/core/metadata/resource-metadata.d.ts.map +1 -1
  53. package/dist/core/metadata/resource-metadata.js.map +1 -1
  54. package/dist/core/proxy/create-resource.d.ts.map +1 -1
  55. package/dist/core/proxy/create-resource.js +23 -0
  56. package/dist/core/proxy/create-resource.js.map +1 -1
  57. package/dist/core/serialization/core.d.ts.map +1 -1
  58. package/dist/core/serialization/core.js +50 -16
  59. package/dist/core/serialization/core.js.map +1 -1
  60. package/dist/core/types/deployment.d.ts +3 -3
  61. package/dist/core/types/deployment.d.ts.map +1 -1
  62. package/dist/core/types/resource-graph.d.ts +1 -0
  63. package/dist/core/types/resource-graph.d.ts.map +1 -1
  64. package/dist/factories/simple/index.d.ts +3 -3
  65. package/dist/factories/simple/index.d.ts.map +1 -1
  66. package/dist/factories/simple/workloads/deployment.d.ts +4 -1
  67. package/dist/factories/simple/workloads/deployment.d.ts.map +1 -1
  68. package/dist/factories/simple/workloads/deployment.js +6 -2
  69. package/dist/factories/simple/workloads/deployment.js.map +1 -1
  70. package/dist/factories/simple/workloads/stateful-set.d.ts +4 -1
  71. package/dist/factories/simple/workloads/stateful-set.d.ts.map +1 -1
  72. package/dist/factories/simple/workloads/stateful-set.js +6 -2
  73. package/dist/factories/simple/workloads/stateful-set.js.map +1 -1
  74. package/dist/index.d.ts +5 -3
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +3 -1
  77. package/dist/index.js.map +1 -1
  78. 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"}
@@ -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":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAYzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGnD,SAAS,qBAAqB,CAC5B,YAA0C,EAC1C,MAAc;IAEd,OAAO,IAAI,qBAAqB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,kBAAkB,CAChC,OAAoC;IAEpC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,qBAAqB,CAAC,UAAU,EAAE,mDAAmD,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,WAAW,CAAC;IACrD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,YAAY,CAAC;IACpD,MAAM,WAAW,GAAqC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IACtF,MAAM,MAAM,GAAgC;QAC1C,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,IAAI,WAAW,EAAE;KACrF,CAAC;IAEF,OAAO,gBAAgB,CAAC;QACtB,IAAI,EAAE;YACJ,QAAQ,EAAE;gBACR,IAAI,EAAE;oBACJ,UAAU,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;oBACnE,OAAO,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;iBAC/B;aACF;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,OAA+B;IACvD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,qBAAqB,CAAC,WAAW,EAAE,0CAA0C,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1E,MAAM,qBAAqB,CAAC,WAAW,EAAE,qDAAqD,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrE,MAAM,qBAAqB,CAAC,WAAW,EAAE,yCAAyC,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,qBAAqB,CAAC,WAAW,EAAE,yCAAyC,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,UAAU,GAA6C,EAAE,CAAC;IAChE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QAChE,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,QAAQ,CAAwB;QACrC,IAAI,EAAE;YACJ,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9E,QAAQ,EAAE;gBACR,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;gBACzE,IAAI,EAAE;oBACJ,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;oBACvC,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;iBAC5E;aACF;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,aAAa,CAC3B,OAA+B;IAE/B,OAAO,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,CAG7C,CAAC;AACJ,CAAC"}
@@ -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"}