@@ -224,8 +224,14 @@ import {
224224 getObservedComposedResources ,
225225 getInput ,
226226 getContextKey ,
227+ getRequiredResource ,
227228 getRequiredResources ,
229+ getRequiredSchema ,
230+ getRequiredSchemas ,
228231 getCredentials ,
232+ advertiseCapabilities ,
233+ hasCapability ,
234+ Capability ,
229235} from " @crossplane-org/function-sdk-typescript" ;
230236
231237// Get the observed composite resource (XR)
@@ -246,11 +252,28 @@ const input = getInput(req);
246252// Get context value from previous function
247253const [value, exists] = getContextKey (req , " my-key" );
248254
249- // Get required resources
255+ // Get a specific required resource by name
256+ const [resources, resolved] = getRequiredResource (req , " app-config" );
257+
258+ // Get all required resources
250259const required = getRequiredResources (req );
251260
261+ // Get a specific required schema by name
262+ const [schema, resolved] = getRequiredSchema (req , " xr-schema" );
263+
264+ // Get all required schemas
265+ const schemas = getRequiredSchemas (req );
266+
252267// Get credentials
253268const creds = getCredentials (req , " aws-creds" );
269+
270+ // Check if Crossplane advertises capabilities (v2.2+)
271+ if (advertiseCapabilities (req )) {
272+ // Check for specific capability support
273+ if (hasCapability (req , Capability .CAPABILITY_REQUIRED_RESOURCES )) {
274+ // Use required resources feature
275+ }
276+ }
254277```
255278
256279#### Response Helpers
@@ -268,7 +291,8 @@ import {
268291 normal ,
269292 fatal ,
270293 warning ,
271- update ,
294+ requireResource ,
295+ requireSchema ,
272296 DEFAULT_TTL ,
273297} from " @crossplane-org/function-sdk-typescript" ;
274298
@@ -295,8 +319,16 @@ normal(rsp, "Success message");
295319warning (rsp , " Warning message" );
296320fatal (rsp , " Fatal error message" );
297321
298- // Update a resource by merging
299- const updated = update (sourceResource , targetResource );
322+ // Request Crossplane fetch a resource (available in next invocation)
323+ rsp = requireResource (rsp , " app-config" , {
324+ apiVersion: " v1" ,
325+ kind: " ConfigMap" ,
326+ matchName: " my-config" ,
327+ namespace: " default"
328+ });
329+
330+ // Request Crossplane fetch a schema (available in next invocation)
331+ rsp = requireSchema (rsp , " xr-schema" , " example.org/v1" , " MyResource" );
300332```
301333
302334#### Resource Helpers
@@ -311,6 +343,8 @@ import {
311343 fromObject ,
312344 toObject ,
313345 newDesiredComposed ,
346+ update ,
347+ getCondition ,
314348} from " @crossplane-org/function-sdk-typescript" ;
315349
316350// Create a Resource from a plain object
@@ -329,6 +363,35 @@ const plainObj = asObject(struct);
329363
330364// Create a new empty DesiredComposed resource
331365const desired = newDesiredComposed ();
366+
367+ // Deep merge updates into a resource (arrays replaced by default)
368+ update (resource , {
369+ resource: {
370+ spec: {
371+ forProvider: {
372+ region: " us-west-2" ,
373+ tags: [" env:prod" ] // Replaces existing tags
374+ }
375+ }
376+ }
377+ });
378+
379+ // Or merge with array concatenation
380+ update (resource , {
381+ resource: {
382+ spec: {
383+ forProvider: {
384+ tags: [" new-tag" ] // Appended to existing tags
385+ }
386+ }
387+ }
388+ }, { mergeArrays: true });
389+
390+ // Get a status condition from a resource
391+ const readyCondition = getCondition (resource .resource , " Ready" );
392+ if (readyCondition .status === " True" ) {
393+ console .log (" Resource is ready" );
394+ }
332395```
333396
334397### Error Handling
@@ -519,6 +582,10 @@ import {
519582 ObservedComposed,
520583 DesiredComposed,
521584 ConnectionDetails,
585+ MergeOptions,
586+
587+ // Status condition types
588+ Condition as ResourceCondition,
522589
523590 // Protocol buffer types
524591 Severity,
@@ -531,6 +598,11 @@ import {
531598 Resources,
532599 Credentials,
533600 CredentialData,
601+ Requirements,
602+ ResourceSelector,
603+ SchemaSelector,
604+ Schema,
605+ Capability,
534606
535607 // Runtime types
536608 ServerOptions,
@@ -539,21 +611,43 @@ import {
539611
540612# ## Core Functions
541613
614+ # ### Response Functions
615+
542616- **`to(req, ttl?)`** - Initialize a response from a request
543617- **`normal(rsp, message)`** - Add a normal (info) result
544618- **`warning(rsp, message)`** - Add a warning result
545619- **`fatal(rsp, message)`** - Add a fatal error result
620+ - **`setDesiredComposedResources(rsp, resources)`** - Set desired composed resources
621+ - **`setDesiredCompositeStatus({rsp, status})`** - Update XR status
622+ - **`setContextKey(rsp, key, value)`** - Set context for next function
623+ - **`setOutput(rsp, output)`** - Set function output
624+ - **`requireResource(rsp, name, selector)`** - Request Crossplane fetch resources
625+ - **`requireSchema(rsp, name, apiVersion, kind)`** - Request Crossplane fetch schemas
626+
627+ # ### Request Functions
628+
546629- **`getObservedCompositeResource(req)`** - Get the observed XR
547630- **`getDesiredCompositeResource(req)`** - Get the desired XR
548631- **`getDesiredComposedResources(req)`** - Get desired composed resources
549632- **`getObservedComposedResources(req)`** - Get observed composed resources
550- - **`setDesiredComposedResources(rsp, resources)`** - Set desired composed resources
551- - **`setDesiredCompositeStatus({rsp, status})`** - Update XR status
552- - **`setContextKey(rsp, key, value)`** - Set context for next function
553633- **`getContextKey(req, key)`** - Get context from previous function
554634- **`getInput(req)`** - Get function input configuration
555- - **`getRequiredResources(req)`** - Get required resources
635+ - **`getRequiredResource(req, name)`** - Get a required resource by name
636+ - **`getRequiredResources(req)`** - Get all required resources
637+ - **`getRequiredSchema(req, name)`** - Get a required schema by name
638+ - **`getRequiredSchemas(req)`** - Get all required schemas
556639- **`getCredentials(req, name)`** - Get credentials by name (throws error if not found)
640+ - **`advertiseCapabilities(req)`** - Check if Crossplane advertises capabilities
641+ - **`hasCapability(req, capability)`** - Check for a specific capability
642+
643+ # ### Resource Functions
644+
645+ - **`fromObject(obj, connectionDetails?, ready?)`** - Create Resource from plain object
646+ - **`fromModel(model, connectionDetails?, ready?)`** - Create Resource from kubernetes-models
647+ - **`toObject(resource)`** - Extract plain object from Resource
648+ - **`update(resource, source, options?)`** - Deep merge data into a Resource
649+ - **`getCondition(resource, type)`** - Extract a status condition by type
650+ - **`newDesiredComposed()`** - Create an empty DesiredComposed resource
557651
558652See [USAGE.md](USAGE.md) for detailed API documentation and examples.
559653
0 commit comments