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.
Files changed (75) 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/deployment/direct-factory.d.ts.map +1 -1
  43. package/dist/core/deployment/direct-factory.js +53 -26
  44. package/dist/core/deployment/direct-factory.js.map +1 -1
  45. package/dist/core/deployment/kro-factory.d.ts.map +1 -1
  46. package/dist/core/deployment/kro-factory.js +22 -19
  47. package/dist/core/deployment/kro-factory.js.map +1 -1
  48. package/dist/core/metadata/resource-metadata.d.ts +3 -0
  49. package/dist/core/metadata/resource-metadata.d.ts.map +1 -1
  50. package/dist/core/metadata/resource-metadata.js.map +1 -1
  51. package/dist/core/proxy/create-resource.d.ts.map +1 -1
  52. package/dist/core/proxy/create-resource.js +23 -0
  53. package/dist/core/proxy/create-resource.js.map +1 -1
  54. package/dist/core/serialization/core.d.ts.map +1 -1
  55. package/dist/core/serialization/core.js +50 -16
  56. package/dist/core/serialization/core.js.map +1 -1
  57. package/dist/core/types/deployment.d.ts +3 -3
  58. package/dist/core/types/deployment.d.ts.map +1 -1
  59. package/dist/core/types/resource-graph.d.ts +1 -0
  60. package/dist/core/types/resource-graph.d.ts.map +1 -1
  61. package/dist/factories/simple/index.d.ts +3 -3
  62. package/dist/factories/simple/index.d.ts.map +1 -1
  63. package/dist/factories/simple/workloads/deployment.d.ts +4 -1
  64. package/dist/factories/simple/workloads/deployment.d.ts.map +1 -1
  65. package/dist/factories/simple/workloads/deployment.js +6 -2
  66. package/dist/factories/simple/workloads/deployment.js.map +1 -1
  67. package/dist/factories/simple/workloads/stateful-set.d.ts +4 -1
  68. package/dist/factories/simple/workloads/stateful-set.d.ts.map +1 -1
  69. package/dist/factories/simple/workloads/stateful-set.js +6 -2
  70. package/dist/factories/simple/workloads/stateful-set.js.map +1 -1
  71. package/dist/index.d.ts +5 -3
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +3 -1
  74. package/dist/index.js.map +1 -1
  75. package/package.json +5 -1
@@ -0,0 +1,24 @@
1
+ import { allResources, aspect, isPlainObject, merge, metadata } from './primitives.js';
2
+ import { AspectDefinitionError } from './types.js';
3
+ function createDefinitionError(functionName, reason) {
4
+ return new AspectDefinitionError(functionName, reason);
5
+ }
6
+ /** Creates a cross-cutting resource metadata label aspect. */
7
+ export function withLabels(labels) {
8
+ return aspect.on(allResources, metadata({ labels: merge(labels) }));
9
+ }
10
+ /** Creates a cross-cutting resource metadata annotation aspect. */
11
+ export function withAnnotations(annotations) {
12
+ return aspect.on(allResources, metadata({ annotations: merge(annotations) }));
13
+ }
14
+ /** Creates a cross-cutting resource metadata aspect. */
15
+ export function withMetadata(options) {
16
+ if (!isPlainObject(options)) {
17
+ throw createDefinitionError('metadata', 'withMetadata(...) options must be an object');
18
+ }
19
+ return aspect.on(allResources, metadata({
20
+ ...(options.labels !== undefined && { labels: merge(options.labels) }),
21
+ ...(options.annotations !== undefined && { annotations: merge(options.annotations) }),
22
+ }));
23
+ }
24
+ //# sourceMappingURL=metadata-aspects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata-aspects.js","sourceRoot":"","sources":["../../../src/core/aspects/metadata-aspects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AASvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,SAAS,qBAAqB,CAC5B,YAA0C,EAC1C,MAAc;IAEd,OAAO,IAAI,qBAAqB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,UAAU,CAAC,MAAgB;IACzC,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,eAAe,CAC7B,WAA0B;IAE1B,OAAO,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,YAAY,CAAC,OAG5B;IACC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,qBAAqB,CAAC,UAAU,EAAE,6CAA6C,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,MAAM,CAAC,EAAE,CACd,YAAY,EACZ,QAAQ,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;KACtF,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ResourceAspectMetadata } from './types.js';
2
+ type AspectOverrideFieldKind = 'scalar' | 'object' | 'array';
3
+ /** Factory-owned runtime mirror of a curated writable override schema. */
4
+ export interface AspectOverrideSchemaNode {
5
+ readonly kind: AspectOverrideFieldKind;
6
+ readonly children?: Readonly<Record<string, AspectOverrideSchemaNode>>;
7
+ }
8
+ interface ResourceAspectRuntimeMetadata extends ResourceAspectMetadata {
9
+ readonly overrideSchema?: AspectOverrideSchemaNode;
10
+ }
11
+ /** Merges aspect matching metadata onto a resource object. */
12
+ export declare function setAspectMetadata(resource: WeakKey, metadata: ResourceAspectRuntimeMetadata): void;
13
+ /** Reads aspect matching metadata for a resource object. */
14
+ export declare function getAspectMetadata(resource: WeakKey): ResourceAspectRuntimeMetadata | undefined;
15
+ export {};
16
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/core/aspects/metadata.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,KAAK,uBAAuB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7D,0EAA0E;AAC1E,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC;CACxE;AAED,UAAU,6BAA8B,SAAQ,sBAAsB;IACpE,QAAQ,CAAC,cAAc,CAAC,EAAE,wBAAwB,CAAC;CACpD;AAED,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,6BAA6B,GACtC,IAAI,CAgBN;AAED,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,6BAA6B,GAAG,SAAS,CAE9F"}
@@ -0,0 +1,24 @@
1
+ import { getResourceMetadata, setResourceMetadata } from '../metadata/resource-metadata.js';
2
+ /** Merges aspect matching metadata onto a resource object. */
3
+ export function setAspectMetadata(resource, metadata) {
4
+ const existing = getResourceMetadata(resource)?.aspects ?? {};
5
+ const merged = {
6
+ ...existing,
7
+ ...metadata,
8
+ labels: { ...existing.labels, ...metadata.labels },
9
+ ...(metadata.targetGroups !== undefined || existing.targetGroups !== undefined
10
+ ? { targetGroups: metadata.targetGroups ?? existing.targetGroups }
11
+ : {}),
12
+ ...(metadata.surfaces !== undefined || existing.surfaces !== undefined
13
+ ? { surfaces: metadata.surfaces ?? existing.surfaces }
14
+ : {}),
15
+ };
16
+ setResourceMetadata(resource, {
17
+ aspects: merged,
18
+ });
19
+ }
20
+ /** Reads aspect matching metadata for a resource object. */
21
+ export function getAspectMetadata(resource) {
22
+ return getResourceMetadata(resource)?.aspects;
23
+ }
24
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/core/aspects/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAgB5F,8DAA8D;AAC9D,MAAM,UAAU,iBAAiB,CAC/B,QAAiB,EACjB,QAAuC;IAEvC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;IAC9D,MAAM,MAAM,GAAkC;QAC5C,GAAG,QAAQ;QACX,GAAG,QAAQ;QACX,MAAM,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE;QAClD,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS;YAC5E,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY,EAAE;YAClE,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;YACpE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE;YACtD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,mBAAmB,CAAC,QAAQ,EAAE;QAC5B,OAAO,EAAE,MAAM;KAChB,CAAC,CAAC;AACL,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,iBAAiB,CAAC,QAAiB;IACjD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;AAChD,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { AppendOperation, AspectBuilder, AspectOverridePatch, AspectTargetGroup, MergeByNameOperation, MergeOperation, MetadataAspectSurface, OverrideAspectSurface, PatchEachOperation, ReplaceOperation } from './types.js';
2
+ export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
3
+ export declare const allResources: AspectTargetGroup<'allResources'>;
4
+ export declare const resources: AspectTargetGroup<'resources'>;
5
+ export declare const workloads: AspectTargetGroup<'workloads'>;
6
+ export declare const aspect: AspectBuilder;
7
+ /** Creates a replace operation descriptor. */
8
+ export declare function replace<T>(value: T): ReplaceOperation<T>;
9
+ /** Creates an object merge operation descriptor. */
10
+ export declare function merge<T extends object>(value: Partial<T>): MergeOperation<T>;
11
+ /** Creates an array append operation descriptor. */
12
+ export declare function append<TElement>(value: readonly TElement[]): AppendOperation<TElement>;
13
+ export declare function patchEach<TElement extends object>(patch: AspectOverridePatch<TElement>): PatchEachOperation<TElement>;
14
+ export declare function mergeByName<TElement extends {
15
+ name: string;
16
+ }>(value: readonly TElement[]): MergeByNameOperation<TElement>;
17
+ /** Creates a metadata aspect surface descriptor. */
18
+ export declare function metadata(surface: Omit<MetadataAspectSurface, 'kind'>): MetadataAspectSurface;
19
+ /** Creates a resource override aspect surface descriptor. */
20
+ export declare function override<TSchema extends object>(patch: AspectOverridePatch<TSchema>): OverrideAspectSurface<TSchema>;
21
+ /** Attaches semantic slot metadata to a resource for aspect selector matching. */
22
+ export declare function slot<TResource extends object>(name: string, resource: TResource): TResource;
23
+ //# sourceMappingURL=primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/core/aspects/primitives.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EAGb,mBAAmB,EAKnB,iBAAiB,EAGjB,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9E;AAiND,eAAO,MAAM,YAAY,EAAE,iBAAiB,CAAC,cAAc,CAGzD,CAAC;AAEH,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAGnD,CAAC;AAEH,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAGnD,CAAC;AAkBH,eAAO,MAAM,MAAM,EAAE,aAEnB,CAAC;AAEH,8CAA8C;AAC9C,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAExD;AAED,oDAAoD;AACpD,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAK5E;AAED,oDAAoD;AACpD,wBAAgB,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,CAKtF;AAED,wBAAgB,SAAS,CAAC,QAAQ,SAAS,MAAM,EAC/C,KAAK,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GACnC,kBAAkB,CAAC,QAAQ,CAAC,CAK9B;AAED,wBAAgB,WAAW,CAAC,QAAQ,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAC3D,KAAK,EAAE,SAAS,QAAQ,EAAE,GACzB,oBAAoB,CAAC,QAAQ,CAAC,CAUhC;AAED,oDAAoD;AACpD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAAG,qBAAqB,CAa5F;AAED,6DAA6D;AAC7D,wBAAgB,QAAQ,CAAC,OAAO,SAAS,MAAM,EAC7C,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAClC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAalC,kFAAkF;AAClF,wBAAgB,IAAI,CAAC,SAAS,SAAS,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS,CAU3F"}
@@ -0,0 +1,258 @@
1
+ import { isCelExpression, isKubernetesRef, isMixedTemplate, isResourceReference, } from '../../utils/type-guards.js';
2
+ import { getAspectMetadata, setAspectMetadata } from './metadata.js';
3
+ import { resolveFactoryTargetId } from './targets.js';
4
+ import { AspectDefinitionError } from './types.js';
5
+ export function isPlainObject(value) {
6
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
7
+ }
8
+ function cloneImmutable(value) {
9
+ if (isKubernetesRef(value) ||
10
+ isCelExpression(value) ||
11
+ isMixedTemplate(value) ||
12
+ isResourceReference(value)) {
13
+ return value;
14
+ }
15
+ if (Array.isArray(value)) {
16
+ return Object.freeze(value.map((entry) => cloneImmutable(entry)));
17
+ }
18
+ if (isPlainObject(value)) {
19
+ const cloned = {};
20
+ for (const [key, child] of Object.entries(value)) {
21
+ cloned[key] = cloneImmutable(child);
22
+ }
23
+ return Object.freeze(cloned);
24
+ }
25
+ return value;
26
+ }
27
+ function createDefinitionError(functionName, reason) {
28
+ return new AspectDefinitionError(functionName, reason);
29
+ }
30
+ function assertSelector(selector) {
31
+ if (!isPlainObject(selector)) {
32
+ throw createDefinitionError('aspect.on', 'where(...) selector must be an object');
33
+ }
34
+ const allowedKeys = new Set(['slot', 'id', 'name', 'namespace', 'kind', 'labels']);
35
+ for (const [key, value] of Object.entries(selector)) {
36
+ if (!allowedKeys.has(key)) {
37
+ throw createDefinitionError('aspect.on', `where(...) selector field ${key} is not supported`);
38
+ }
39
+ if (key === 'labels') {
40
+ if (!isPlainObject(value)) {
41
+ throw createDefinitionError('aspect.on', 'where(...) selector labels must be an object');
42
+ }
43
+ for (const [labelKey, labelValue] of Object.entries(value)) {
44
+ if (typeof labelValue !== 'string') {
45
+ throw createDefinitionError('aspect.on', `where(...) selector label ${labelKey} must be a string`);
46
+ }
47
+ }
48
+ }
49
+ else if (typeof value !== 'string') {
50
+ throw createDefinitionError('aspect.on', `where(...) selector ${key} must be a string`);
51
+ }
52
+ }
53
+ }
54
+ function operationKind(value) {
55
+ return isPlainObject(value) && typeof value.kind === 'string' ? value.kind : undefined;
56
+ }
57
+ function assertMetadataOperation(field, value) {
58
+ const kind = operationKind(value);
59
+ if (kind !== 'merge' && kind !== 'replace') {
60
+ throw createDefinitionError('metadata', `metadata.${field} must use merge(...) or replace(...)`);
61
+ }
62
+ }
63
+ function assertOverridePatch(path, value) {
64
+ const kind = operationKind(value);
65
+ if (kind) {
66
+ if (kind === 'merge' && !isPlainObject(value.value)) {
67
+ throw createDefinitionError('override', `${path} merge value must be an object`);
68
+ }
69
+ if (kind === 'append' && !Array.isArray(value.value)) {
70
+ throw createDefinitionError('override', `${path} append value must be an array`);
71
+ }
72
+ if (kind === 'mergeByName' && !Array.isArray(value.value)) {
73
+ throw createDefinitionError('override', `${path} mergeByName value must be an array`);
74
+ }
75
+ if (kind === 'patchEach') {
76
+ const patch = value.patch;
77
+ if (!isPlainObject(patch)) {
78
+ throw createDefinitionError('override', `${path} patchEach patch must be an object`);
79
+ }
80
+ assertOverridePatch(`${path}.patch`, patch);
81
+ return;
82
+ }
83
+ if (kind === 'replace' || kind === 'merge' || kind === 'append' || kind === 'mergeByName') {
84
+ return;
85
+ }
86
+ throw createDefinitionError('override', `${path} uses unsupported operation ${kind}`);
87
+ }
88
+ if (!isPlainObject(value)) {
89
+ throw createDefinitionError('override', `${path} must contain aspect operations`);
90
+ }
91
+ for (const [key, child] of Object.entries(value)) {
92
+ assertOverridePatch(`${path}.${key}`, child);
93
+ }
94
+ }
95
+ function assertOverrideRoot(patch) {
96
+ const keys = Object.keys(patch);
97
+ if (keys.length !== 1 || keys[0] !== 'spec') {
98
+ throw createDefinitionError('override', 'override(...) patch must be rooted at spec');
99
+ }
100
+ if (!isPlainObject(patch.spec)) {
101
+ throw createDefinitionError('override', 'override(...) spec patch must be an object');
102
+ }
103
+ }
104
+ function assertTargetSurfaceCompatibility(targetOrTargets, surface) {
105
+ const targets = Array.isArray(targetOrTargets) ? targetOrTargets : [targetOrTargets];
106
+ for (const target of targets) {
107
+ if (isPlainObject(target) && target.kind === 'target-group') {
108
+ if (target.id === 'allResources' && surface.kind !== 'metadata') {
109
+ throw createDefinitionError('aspect.on', 'allResources supports metadata(...) only');
110
+ }
111
+ if ((target.id === 'resources' || target.id === 'workloads') && surface.kind !== 'override') {
112
+ throw createDefinitionError('aspect.on', `${target.id} supports override(...) aspects only`);
113
+ }
114
+ continue;
115
+ }
116
+ if (typeof target === 'function') {
117
+ const targetId = resolveFactoryTargetId(target);
118
+ if (targetId === undefined) {
119
+ throw createDefinitionError('aspect.on', 'factory target must be a registered TypeKro factory or advertise TypeKro aspect metadata');
120
+ }
121
+ const surfaces = Reflect.get(target, '__typekroAspectSurfaces');
122
+ if (Array.isArray(surfaces) && !surfaces.includes(surface.kind)) {
123
+ throw createDefinitionError('aspect.on', `factory target ${targetId} does not support ${surface.kind}(...) aspects`);
124
+ }
125
+ continue;
126
+ }
127
+ throw createDefinitionError('aspect.on', 'target must be an aspect-capable factory or target group');
128
+ }
129
+ }
130
+ class AspectDefinitionImpl {
131
+ target;
132
+ surface;
133
+ cardinality;
134
+ kind = 'aspect';
135
+ selector;
136
+ constructor(target, surface, cardinality = 'one-or-more', selector) {
137
+ this.target = target;
138
+ this.surface = surface;
139
+ this.cardinality = cardinality;
140
+ if (selector !== undefined) {
141
+ this.selector = cloneImmutable(selector);
142
+ }
143
+ Object.freeze(this);
144
+ }
145
+ where(selector) {
146
+ if (this.selector !== undefined) {
147
+ throw createDefinitionError('aspect.on', 'where(...) cannot be called more than once');
148
+ }
149
+ assertSelector(selector);
150
+ return new AspectDefinitionImpl(this.target, this.surface, this.cardinality, cloneImmutable(selector));
151
+ }
152
+ optional() {
153
+ if (this.cardinality === 'exactly-one') {
154
+ throw createDefinitionError('aspect.on', 'optional() cannot be called after expectOne()');
155
+ }
156
+ return new AspectDefinitionImpl(this.target, this.surface, 'zero-or-more', this.selector);
157
+ }
158
+ expectOne() {
159
+ if (this.cardinality === 'zero-or-more') {
160
+ throw createDefinitionError('aspect.on', 'expectOne() cannot be called after optional()');
161
+ }
162
+ return new AspectDefinitionImpl(this.target, this.surface, 'exactly-one', this.selector);
163
+ }
164
+ }
165
+ export const allResources = Object.freeze({
166
+ kind: 'target-group',
167
+ id: 'allResources',
168
+ });
169
+ export const resources = Object.freeze({
170
+ kind: 'target-group',
171
+ id: 'resources',
172
+ });
173
+ export const workloads = Object.freeze({
174
+ kind: 'target-group',
175
+ id: 'workloads',
176
+ });
177
+ function aspectOn(targetOrTargets, surface) {
178
+ assertTargetSurfaceCompatibility(targetOrTargets, surface);
179
+ return new AspectDefinitionImpl(targetOrTargets, surface);
180
+ }
181
+ export const aspect = Object.freeze({
182
+ on: aspectOn,
183
+ });
184
+ /** Creates a replace operation descriptor. */
185
+ export function replace(value) {
186
+ return Object.freeze({ kind: 'replace', value: cloneImmutable(value) });
187
+ }
188
+ /** Creates an object merge operation descriptor. */
189
+ export function merge(value) {
190
+ if (!isPlainObject(value)) {
191
+ throw createDefinitionError('merge', 'merge(...) value must be a concrete object');
192
+ }
193
+ return Object.freeze({ kind: 'merge', value: cloneImmutable(value) });
194
+ }
195
+ /** Creates an array append operation descriptor. */
196
+ export function append(value) {
197
+ if (!Array.isArray(value)) {
198
+ throw createDefinitionError('append', 'append(...) value must be an array');
199
+ }
200
+ return Object.freeze({ kind: 'append', value: cloneImmutable(value) });
201
+ }
202
+ export function patchEach(patch) {
203
+ if (!isPlainObject(patch)) {
204
+ throw createDefinitionError('override', 'patchEach patch must be an object');
205
+ }
206
+ return Object.freeze({ kind: 'patchEach', patch: cloneImmutable(patch) });
207
+ }
208
+ export function mergeByName(value) {
209
+ if (!Array.isArray(value)) {
210
+ throw createDefinitionError('override', 'mergeByName value must be an array');
211
+ }
212
+ for (const entry of value) {
213
+ if (!isPlainObject(entry) || typeof entry.name !== 'string' || entry.name.length === 0) {
214
+ throw createDefinitionError('override', 'mergeByName entries must have a non-empty name');
215
+ }
216
+ }
217
+ return Object.freeze({ kind: 'mergeByName', value: cloneImmutable(value) });
218
+ }
219
+ /** Creates a metadata aspect surface descriptor. */
220
+ export function metadata(surface) {
221
+ if (!isPlainObject(surface)) {
222
+ throw createDefinitionError('metadata', 'metadata(...) value must be an object');
223
+ }
224
+ for (const key of Object.keys(surface)) {
225
+ if (key !== 'labels' && key !== 'annotations') {
226
+ throw createDefinitionError('metadata', `metadata.${key} is not supported`);
227
+ }
228
+ }
229
+ if (surface.labels !== undefined)
230
+ assertMetadataOperation('labels', surface.labels);
231
+ if (surface.annotations !== undefined)
232
+ assertMetadataOperation('annotations', surface.annotations);
233
+ return Object.freeze({ kind: 'metadata', ...cloneImmutable(surface) });
234
+ }
235
+ export function override(patch) {
236
+ if (!isPlainObject(patch)) {
237
+ throw createDefinitionError('override', 'override(...) patch must be an object');
238
+ }
239
+ assertOverrideRoot(patch);
240
+ assertOverridePatch('patch', patch);
241
+ return Object.freeze({
242
+ kind: 'override',
243
+ patch: cloneImmutable(patch),
244
+ });
245
+ }
246
+ /** Attaches semantic slot metadata to a resource for aspect selector matching. */
247
+ export function slot(name, resource) {
248
+ if (name.length === 0) {
249
+ throw createDefinitionError('slot', 'slot name must not be empty');
250
+ }
251
+ const existingSlot = getAspectMetadata(resource)?.slot;
252
+ if (existingSlot !== undefined && existingSlot !== name) {
253
+ throw createDefinitionError('slot', 'resource already has a different slot assigned');
254
+ }
255
+ setAspectMetadata(resource, { slot: name });
256
+ return resource;
257
+ }
258
+ //# sourceMappingURL=primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../../src/core/aspects/primitives.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Resolves a public aspect factory target to its Kubernetes kind identity.
3
+ *
4
+ * Aspect factory targets are intentionally kind-level, not function-instance
5
+ * identities. This lets simple, base Kubernetes, and custom registered
6
+ * factories that produce the same Kubernetes kind share the same aspect target.
7
+ */
8
+ export declare function resolveFactoryTargetId(target: (...args: never[]) => unknown): string | undefined;
9
+ //# sourceMappingURL=targets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../../src/core/aspects/targets.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,GACpC,MAAM,GAAG,SAAS,CAWpB"}
@@ -0,0 +1,23 @@
1
+ import { getKindInfo } from '../resources/factory-registry.js';
2
+ function pascalCaseFactoryName(name) {
3
+ return name.length === 0 ? name : `${name[0]?.toUpperCase()}${name.slice(1)}`;
4
+ }
5
+ /**
6
+ * Resolves a public aspect factory target to its Kubernetes kind identity.
7
+ *
8
+ * Aspect factory targets are intentionally kind-level, not function-instance
9
+ * identities. This lets simple, base Kubernetes, and custom registered
10
+ * factories that produce the same Kubernetes kind share the same aspect target.
11
+ */
12
+ export function resolveFactoryTargetId(target) {
13
+ const reflectedTargetId = Reflect.get(target, '__typekroAspectTargetId');
14
+ if (typeof reflectedTargetId === 'string' && reflectedTargetId.length > 0) {
15
+ return reflectedTargetId;
16
+ }
17
+ const directRegistration = getKindInfo(target.name);
18
+ if (directRegistration)
19
+ return directRegistration.kind;
20
+ const pascalRegistration = getKindInfo(pascalCaseFactoryName(target.name));
21
+ return pascalRegistration?.kind;
22
+ }
23
+ //# sourceMappingURL=targets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"targets.js","sourceRoot":"","sources":["../../../src/core/aspects/targets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAE/D,SAAS,qBAAqB,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAqC;IAErC,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IACzE,IAAI,OAAO,iBAAiB,KAAK,QAAQ,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,kBAAkB;QAAE,OAAO,kBAAkB,CAAC,IAAI,CAAC;IAEvD,MAAM,kBAAkB,GAAG,WAAW,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,OAAO,kBAAkB,EAAE,IAAI,CAAC;AAClC,CAAC"}