@xplane/core 0.9.2 → 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.
@@ -0,0 +1,370 @@
1
+ import { Construct, Construct as Construct$1 } from "constructs";
2
+
3
+ //#region src/tracking/types.d.ts
4
+ /**
5
+ * Symbols used to access tracking metadata on proxy-wrapped values.
6
+ * These are not enumerable and won't leak into serialized output.
7
+ */
8
+ declare const TRACKING_META: unique symbol;
9
+ declare const IS_TRACKED: unique symbol;
10
+ /** Identifies which resource a tracked value belongs to. */
11
+ interface ResourceRef {
12
+ readonly id: string;
13
+ }
14
+ /** A single dependency edge between two resource fields. */
15
+ interface DependencyEdge {
16
+ /** Resource whose field is being read (the dependency). */
17
+ readonly from: ResourceRef;
18
+ /** Dot-separated path on the source resource. */
19
+ readonly fromPath: string;
20
+ /** Resource whose field is being set (the dependent). */
21
+ readonly to: ResourceRef;
22
+ /** Dot-separated path on the target resource. */
23
+ readonly toPath: string;
24
+ }
25
+ /** Metadata attached to every tracked proxy. */
26
+ interface TrackingMeta {
27
+ /** The resource this value belongs to. */
28
+ readonly owner: ResourceRef;
29
+ /** The dot-separated path from root of the resource object. */
30
+ readonly path: string;
31
+ /** Whether this value originates from observed state (read-only). */
32
+ readonly observed: boolean;
33
+ }
34
+ //#endregion
35
+ //#region src/tracking/dependency-graph.d.ts
36
+ /**
37
+ * Directed acyclic graph of resource dependencies.
38
+ * Supports topological sorting to determine resource creation order
39
+ * and cycle detection to surface configuration errors.
40
+ */
41
+ declare class DependencyGraph {
42
+ /** adjacency list: resource id → set of resource ids it depends on */
43
+ private readonly _deps;
44
+ /** all registered resource refs by id */
45
+ private readonly _resources;
46
+ /** raw edges for introspection */
47
+ private readonly _edges;
48
+ /** Register a resource node in the graph. */
49
+ addResource(ref: ResourceRef): void;
50
+ /** Add dependency edges from the collector. */
51
+ addEdges(edges: ReadonlyArray<DependencyEdge>): void;
52
+ /** Add an explicit dependency: `dependent` depends on `dependency`. */
53
+ addExplicitDependency(dependent: ResourceRef, dependency: ResourceRef): void;
54
+ /** Get all resource IDs that `resourceId` directly depends on. */
55
+ getDependencies(resourceId: string): ReadonlySet<string>;
56
+ /** Get all registered resource IDs. */
57
+ get resourceIds(): ReadonlyArray<string>;
58
+ /** Get all raw edges. */
59
+ get edges(): ReadonlyArray<DependencyEdge>;
60
+ /**
61
+ * Returns resource IDs in topological order (dependencies first).
62
+ * Throws if the graph contains cycles.
63
+ */
64
+ topologicalSort(): string[];
65
+ }
66
+ //#endregion
67
+ //#region src/tracking/proxy.d.ts
68
+ /**
69
+ * Registry that collects dependency edges discovered during proxy access.
70
+ * Shared across all tracked values within a single composition run.
71
+ */
72
+ declare class DependencyCollector {
73
+ private readonly _edges;
74
+ addEdge(edge: DependencyEdge): void;
75
+ get edges(): ReadonlyArray<DependencyEdge>;
76
+ clear(): void;
77
+ }
78
+ /** Options for creating a tracked proxy. */
79
+ interface TrackedProxyOptions {
80
+ /** Which resource this value belongs to. */
81
+ owner: ResourceRef;
82
+ /** Dot-path from the resource root (e.g. "spec.forProvider.region"). */
83
+ path: string;
84
+ /** Whether this originates from observed state. */
85
+ observed: boolean;
86
+ /** Shared collector for discovered dependencies. */
87
+ collector: DependencyCollector;
88
+ }
89
+ /**
90
+ * Returns true if `value` is a tracked proxy created by `createTrackedProxy`.
91
+ */
92
+ declare function isTracked(value: unknown): value is object & {
93
+ [TRACKING_META]: TrackingMeta;
94
+ };
95
+ /**
96
+ * Retrieves the tracking metadata from a tracked proxy.
97
+ * Returns undefined if the value is not tracked.
98
+ */
99
+ declare function getTrackingMeta(value: unknown): TrackingMeta | undefined;
100
+ /**
101
+ * Creates a proxy around `target` that:
102
+ * 1. Returns nested proxies for property access (building up dot-paths).
103
+ * 2. On set: if the assigned value is itself a tracked proxy from a *different*
104
+ * resource, records a DependencyEdge in the collector.
105
+ * 3. Stores concrete values normally so the underlying object is populated.
106
+ *
107
+ * For "observed" proxies, property reads on missing keys return a nested
108
+ * tracked proxy (representing an "unknown" value) rather than undefined.
109
+ * This lets `vpc.status.atProvider.vpcId` work even before the VPC exists.
110
+ */
111
+ declare function createTrackedProxy<T extends object>(target: T, opts: TrackedProxyOptions): T;
112
+ /**
113
+ * Sentinel value used when a tracked reference cannot be resolved yet
114
+ * (the source resource hasn't been observed).
115
+ */
116
+ declare const UNRESOLVED: unique symbol;
117
+ //#endregion
118
+ //#region src/core/resource.d.ts
119
+ /**
120
+ * Recursive type that allows arbitrary deep property access without undefined.
121
+ * Uses a known-key mapped type to bypass noUncheckedIndexedAccess.
122
+ * Used as the default for untyped Resource spec/status so that
123
+ * `resource.spec.forProvider.vpcId` compiles without casts.
124
+ */
125
+ type AnyFields = Record<string, any>;
126
+ /** Minimal Kubernetes resource shape. */
127
+ interface KubernetesResource {
128
+ apiVersion: string;
129
+ kind: string;
130
+ metadata?: {
131
+ name?: string;
132
+ namespace?: string;
133
+ labels?: Record<string, string>;
134
+ annotations?: Record<string, string>;
135
+ [key: string]: unknown;
136
+ };
137
+ spec?: Record<string, unknown>;
138
+ status?: Record<string, unknown>;
139
+ [key: string]: unknown;
140
+ }
141
+ /** Props for constructing a Resource. */
142
+ interface ResourceProps {
143
+ apiVersion: string;
144
+ kind: string;
145
+ metadata?: {
146
+ name?: string;
147
+ namespace?: string;
148
+ labels?: Record<string, string>;
149
+ annotations?: Record<string, string>;
150
+ [key: string]: unknown;
151
+ };
152
+ spec?: Record<string, unknown>;
153
+ /** Top-level extra fields for resources that don't use spec (e.g. Secret's data/stringData/type). */
154
+ [key: string]: unknown;
155
+ }
156
+ /** Configuration options for a resource. */
157
+ interface ResourceOptions {
158
+ /** Whether auto-ready detection is enabled for this resource. Default: true. */
159
+ autoReady?: boolean;
160
+ }
161
+ /**
162
+ * A Construct that represents a single Crossplane managed/composed resource.
163
+ *
164
+ * The `spec` and `status` properties are proxy-wrapped for automatic
165
+ * dependency tracking. Assigning a value from another resource's status
166
+ * to this resource's spec automatically records a dependency edge.
167
+ */
168
+ declare class Resource<TSpec extends object = AnyFields, TStatus extends object = AnyFields> extends Construct$1 {
169
+ readonly apiVersion: string;
170
+ readonly kind: string;
171
+ readonly resourceRef: ResourceRef;
172
+ /** Proxy-wrapped desired spec — writes are tracked. */
173
+ readonly spec: TSpec;
174
+ /** Proxy-wrapped observed status — reads create dependency tracking. */
175
+ readonly status: TStatus;
176
+ /** Proxy-wrapped desired metadata. */
177
+ readonly metadata: NonNullable<KubernetesResource["metadata"]>;
178
+ /** Whether auto-ready is enabled for this resource. */
179
+ autoReady: boolean;
180
+ /** Extra top-level fields (e.g. data/stringData for Secret). Not proxy-tracked. */
181
+ private readonly _extra;
182
+ /** Observed state populated by the bridge before construction. */
183
+ private _observed;
184
+ /** Backing object for the status proxy — populated by setObserved(). */
185
+ private readonly _statusTarget;
186
+ /** Backing object for the metadata proxy — populated by setObserved(). */
187
+ private readonly _metaTarget;
188
+ /** Keys the user explicitly declared in constructor metadata props. */
189
+ private readonly _desiredMetaKeys;
190
+ /** Explicit dependency refs. */
191
+ private readonly _explicitDeps;
192
+ /** @internal */
193
+ private readonly _graph;
194
+ constructor(scope: Construct$1, id: string, props: ResourceProps, options?: ResourceOptions);
195
+ /** Fully qualified path in the construct tree. */
196
+ get path(): string;
197
+ /** Add an explicit dependency on another resource. */
198
+ addDependency(other: Resource): void;
199
+ /** Get explicit dependency refs. */
200
+ get explicitDependencies(): ReadonlyArray<ResourceRef>;
201
+ /** Set observed state (called by the bridge before compose). */
202
+ setObserved(observed: KubernetesResource): void;
203
+ /** Get observed state. */
204
+ get observed(): KubernetesResource | undefined;
205
+ /**
206
+ * Compute a unique name for a resource based on its construct node path,
207
+ * similar to `cdk.Names.uniqueResourceName`.
208
+ *
209
+ * The name is structured as:
210
+ * `[namespace-]claimName-PathSegments[-extra]-hash8`
211
+ *
212
+ * - XR namespace (if present) and XR name are always prepended.
213
+ * - Path segments (construct tree, root skipped) are appended next.
214
+ * - An optional `extra` string is appended after the path.
215
+ * - An 8-char hash of the full untruncated string is always appended for uniqueness.
216
+ * - Whitespace in each segment is stripped (CDK convention).
217
+ * - Disallowed characters are replaced by the separator; consecutive separators are collapsed.
218
+ * - The result is truncated to `maxLength` while keeping the hash suffix.
219
+ *
220
+ * @param scope - The construct whose node path is used.
221
+ * @param options - Optional tuning.
222
+ */
223
+ static uniqueName(scope: Construct$1, options?: {
224
+ /** Maximum length of the resulting name. Default: 63. */maxLength?: number; /** Separator inserted between path segments (also replaces disallowed chars). Default: "-". */
225
+ separator?: string; /** Regex of characters to keep. Anything else is replaced by the separator. Default: /[^a-zA-Z0-9]/g */
226
+ allowedPattern?: RegExp; /** Extra string appended after the path segments and before the hash. */
227
+ extra?: string;
228
+ }): string;
229
+ /**
230
+ * Serialize to a plain Kubernetes resource object for the desired state.
231
+ * Strips proxy wrappers, UNRESOLVED sentinels, and server-managed metadata
232
+ * fields (uid, resourceVersion, etc.) that must not appear in desired state.
233
+ */
234
+ toDesired(): KubernetesResource;
235
+ }
236
+ //#endregion
237
+ //#region src/core/composition.d.ts
238
+ /**
239
+ * A Composition is the root Construct for a Crossplane composition function.
240
+ * Like CDK's `App` or cdk8s's `Chart`, it is the root of the construct tree.
241
+ * Resources and constructs are created in the constructor.
242
+ *
243
+ * Usage:
244
+ * ```ts
245
+ * class MyComposition extends Composition {
246
+ * constructor() {
247
+ * super();
248
+ * const vpc = new aws.ec2.VPC(this, 'vpc', { ... });
249
+ * const subnet = new aws.ec2.Subnet(this, 'subnet', {
250
+ * spec: { forProvider: { vpcId: vpc.status.atProvider.vpcId } }
251
+ * });
252
+ * }
253
+ * }
254
+ * ```
255
+ */
256
+ declare class Composition extends Construct$1 {
257
+ /**
258
+ * Pending XR data, set by the framework before instantiation.
259
+ * @internal
260
+ */
261
+ static _pendingXR: Record<string, unknown> | undefined;
262
+ /**
263
+ * Pending environment data, set by the framework before instantiation.
264
+ * Populated from the Crossplane context key `apiextensions.crossplane.io/environment`.
265
+ * @internal
266
+ */
267
+ static _pendingEnvironment: Record<string, unknown> | undefined;
268
+ /** The composite resource (XR) — proxy-wrapped for tracking. */
269
+ readonly xr: AnyFields;
270
+ /** Environment data from function-environment-configs or other pipeline steps. */
271
+ readonly environment: AnyFields;
272
+ /** Raw name from the XR metadata (not proxy-tracked). */
273
+ readonly xrName: string | undefined;
274
+ /** Raw namespace from the XR metadata (not proxy-tracked). */
275
+ readonly xrNamespace: string | undefined;
276
+ /** Dependency collector shared across all resources. */
277
+ readonly collector: DependencyCollector;
278
+ /** Dependency graph built during compose(). */
279
+ readonly graph: DependencyGraph;
280
+ /** Registered status output function. @internal */
281
+ private _statusFn?;
282
+ constructor();
283
+ /**
284
+ * Register a function that computes the desired XR status output.
285
+ *
286
+ * The function is called by the framework **after** observed state has been
287
+ * fed into all resources, so `resource.observed` contains real data.
288
+ *
289
+ * @example
290
+ * ```ts
291
+ * this.setStatusOutput(() => ({
292
+ * config: {
293
+ * projectHostedZoneId: hostedZone.observed?.status?.atProvider?.id,
294
+ * },
295
+ * }));
296
+ * ```
297
+ */
298
+ setStatusOutput(fn: () => Record<string, unknown>): void;
299
+ /**
300
+ * Compute and return the desired status output.
301
+ * Returns an empty object if no status function was registered.
302
+ * @internal
303
+ */
304
+ computeStatusOutput(): Record<string, unknown>;
305
+ /**
306
+ * Walk up the construct tree and return the root Composition.
307
+ * Throws if the scope is not within a Composition.
308
+ */
309
+ static of(scope: Construct$1): Composition;
310
+ /** Get all registered resources keyed by construct path. */
311
+ get resources(): ReadonlyMap<string, Resource>;
312
+ }
313
+ //#endregion
314
+ //#region src/ready/auto-ready.d.ts
315
+ /** Condition from a Kubernetes resource's status.conditions array. */
316
+ interface StatusCondition {
317
+ type: string;
318
+ status: string;
319
+ reason?: string;
320
+ message?: string;
321
+ }
322
+ /**
323
+ * Determines if a Crossplane managed resource is ready based on its
324
+ * observed status conditions.
325
+ *
326
+ * - If the resource has a `Ready: True` condition → ready.
327
+ * - If the resource has a `Ready: False` condition → not ready.
328
+ * - If the resource exists but has no `Ready` condition at all (e.g. Namespace,
329
+ * ProviderConfig) → considered ready (the resource exists and is functional).
330
+ * - If not yet observed → not ready.
331
+ */
332
+ declare function isResourceReady(observed: KubernetesResource | undefined): boolean;
333
+ /**
334
+ * Gets the Ready condition from a resource, if present.
335
+ */
336
+ declare function getReadyCondition(observed: KubernetesResource | undefined): StatusCondition | undefined;
337
+ //#endregion
338
+ //#region src/sequencing/resolver.d.ts
339
+ /** Result of dependency resolution for a single resource. */
340
+ interface ResolutionResult {
341
+ /** The resource. */
342
+ resource: Resource;
343
+ /** Whether all dependencies are satisfied and the resource can be emitted. */
344
+ ready: boolean;
345
+ /** Paths that are still unresolved (waiting on upstream). */
346
+ unresolvedPaths: string[];
347
+ }
348
+ /** Result of resolving all resources in a composition. */
349
+ interface SequencingResult {
350
+ /** Resources in dependency order that are ready to emit. */
351
+ emit: Resource[];
352
+ /** Resources blocked on unresolved dependencies. */
353
+ blocked: Resource[];
354
+ /** Topologically sorted resource IDs. */
355
+ order: string[];
356
+ }
357
+ /**
358
+ * Resolves resource dependencies and determines which resources can be
359
+ * emitted in the current pass.
360
+ *
361
+ * Algorithm:
362
+ * 1. Topologically sort resources using the dependency graph.
363
+ * 2. For each resource (in order), check if upstream dependencies have
364
+ * resolved values in observed state.
365
+ * 3. If all deps resolved → emit. If any dep unresolved → block.
366
+ */
367
+ declare function resolveSequencing(resources: ReadonlyMap<string, Resource>, graph: DependencyGraph, observedResources: ReadonlyMap<string, KubernetesResource>): SequencingResult;
368
+ //#endregion
369
+ export { type AnyFields, Composition, Construct, DependencyCollector, type DependencyEdge, DependencyGraph, IS_TRACKED, type KubernetesResource, type ResolutionResult, Resource, type ResourceOptions, type ResourceProps, type ResourceRef, type SequencingResult, TRACKING_META, type TrackingMeta, UNRESOLVED, createTrackedProxy, getReadyCondition, getTrackingMeta, isResourceReady, isTracked, resolveSequencing };
370
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/tracking/types.ts","../src/tracking/dependency-graph.ts","../src/tracking/proxy.ts","../src/core/resource.ts","../src/core/composition.ts","../src/ready/auto-ready.ts","../src/sequencing/resolver.ts"],"mappings":"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"}