All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.cloudshiftdev.awscdk.ext.core.Extensions.kt Maven / Gradle / Ivy

package io.cloudshiftdev.awscdk.ext.core

import io.cloudshiftdev.awscdk.Arn
import io.cloudshiftdev.awscdk.ArnComponents
import io.cloudshiftdev.awscdk.ArnFormat
import io.cloudshiftdev.awscdk.CfnResource
import io.cloudshiftdev.awscdk.Stack
import io.cloudshiftdev.awscdk.Tags
import io.cloudshiftdev.constructs.Construct
import io.cloudshiftdev.constructs.IConstruct
import kotlin.reflect.KClass

public fun Construct.addTag(key: String, value: String) {
    Tags.of(this).add(key, value)
}

public fun Construct.addComment(comment: String) {
    node().children().filterIsInstance().forEach { it.addComment(comment) }
}

public fun  Construct.addPropertyOverride(
    clazz: KClass,
    property: String,
    value: String
) {
    val resource = node().children().filterIsInstance(clazz.java).first()
    resource.addPropertyOverride(property, value)
}

public fun CfnResource.addComment(comment: String) {
    addMetadata(mapOf("cloudshift:comment" to comment))
}

public fun CfnResource.addMetadata(newMetadata: Map) {
    if (newMetadata.isEmpty()) {
        return
    }
    var metadata = cfnOptions().metadata()
    metadata = metadata?.toMutableMap() ?: mutableMapOf()
    metadata.putAll(newMetadata)
    cfnOptions().metadata(metadata.toMap())
}

public fun IConstruct.allChildren(): List {
    val list = mutableListOf()
    node().children().forEach {
        list.add(it)
        list.addAll(it.allChildren())
    }
    return list.sortedBy { it.node().path() }
}

@JvmName("constructArn")
public fun IConstruct.arn(block: (ArnComponents.Builder).() -> Unit): String = arn(this, block)

public fun arn(scope: IConstruct, block: (ArnComponents.Builder).() -> Unit): String {
    return Arn.format(ArnComponents(block), Stack.of(scope))
}

public fun String.toArnComponents(
    format: ArnFormat = ArnFormat.SLASH_RESOURCE_NAME
): ArnComponents = Arn.split(this, format)

public inline fun  Construct.withSingleton(
    id: String,
    block: (String) -> T
): T {
    return allChildren().filterIsInstance().firstOrNull { it.node().id() == id } ?: block(id)
}

public inline fun  Construct.withSingleton(
    predicate: (T) -> Boolean = { true },
    block: () -> T
): T {
    return allChildren().filterIsInstance().firstOrNull(predicate) ?: block()
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy