UNPKG

@aws-cdk/core

Version:

AWS Cloud Development Kit Core Library

354 lines (353 loc) 11.4 kB
import cxapi = require('@aws-cdk/cx-api'); import { IAspect } from './aspect'; import { IDependable } from './dependency'; import { IResolvable } from './resolvable'; /** * Represents a construct. */ export interface IConstruct extends IDependable { /** * The construct node in the tree. */ readonly node: ConstructNode; } /** * Represents the construct node in the scope tree. */ export declare class ConstructNode { private readonly host; /** * Separator used to delimit construct path components. */ static readonly PATH_SEP = "/"; /** * Synthesizes a CloudAssembly from a construct tree. * @param root The root of the construct tree. * @param options Synthesis options. */ static synth(root: ConstructNode, options?: SynthesisOptions): cxapi.CloudAssembly; /** * Invokes "prepare" on all constructs (depth-first, post-order) in the tree under `node`. * @param node The root node */ static prepare(node: ConstructNode): void; /** * Invokes "validate" on all constructs in the tree (depth-first, pre-order) and returns * the list of all errors. An empty list indicates that there are no errors. * * @param node The root node */ static validate(node: ConstructNode): ValidationError[]; /** * Returns the scope in which this construct is defined. * * The value is `undefined` at the root of the construct scope tree. */ readonly scope?: IConstruct; /** * The id of this construct within the current scope. * * This is a a scope-unique id. To obtain an app-unique id for this construct, use `uniqueId`. */ readonly id: string; private _locked; private readonly _aspects; private readonly _children; private readonly _context; private readonly _metadata; private readonly _references; private readonly _dependencies; private readonly invokedAspects; private _defaultChild; constructor(host: Construct, scope: IConstruct, id: string); /** * The full, absolute path of this construct in the tree. * * Components are separated by '/'. */ readonly path: string; /** * A tree-global unique alphanumeric identifier for this construct. * Includes all components of the tree. */ readonly uniqueId: string; /** * Return a direct child by id, or undefined * * @param id Identifier of direct child * @returns the child if found, or undefined */ tryFindChild(id: string): IConstruct | undefined; /** * Return a direct child by id * * Throws an error if the child is not found. * * @param id Identifier of direct child * @returns Child with the given id. */ findChild(id: string): IConstruct; /** * Returns the child construct that has the id `Default` or `Resource"` * @throws if there is more than one child * @returns a construct or undefined if there is no default child */ /** * Override the defaultChild property. * * This should only be used in the cases where the correct * default child is not named 'Resource' or 'Default' as it * should be. * * If you set this to undefined, the default behavior of finding * the child named 'Resource' or 'Default' will be used. */ defaultChild: IConstruct | undefined; /** * All direct children of this construct. */ readonly children: IConstruct[]; /** * Return this construct and all of its children in the given order */ findAll(order?: ConstructOrder): IConstruct[]; /** * This can be used to set contextual values. * Context must be set before any children are added, since children may consult context info during construction. * If the key already exists, it will be overridden. * @param key The context key * @param value The context value */ setContext(key: string, value: any): void; /** * Retrieves a value from tree context. * * Context is usually initialized at the root, but can be overridden at any point in the tree. * * @param key The context key * @returns The context value or `undefined` if there is no context value for thie key. */ tryGetContext(key: string): any; /** * An immutable array of metadata objects associated with this construct. * This can be used, for example, to implement support for deprecation notices, source mapping, etc. */ readonly metadata: cxapi.MetadataEntry[]; /** * Adds a metadata entry to this construct. * Entries are arbitrary values and will also include a stack trace to allow tracing back to * the code location for when the entry was added. It can be used, for example, to include source * mapping in CloudFormation templates to improve diagnostics. * * @param type a string denoting the type of metadata * @param data the value of the metadata (can be a Token). If null/undefined, metadata will not be added. * @param from a function under which to restrict the metadata entry's stack trace (defaults to this.addMetadata) */ addMetadata(type: string, data: any, from?: any): void; /** * Adds a { "aws:cdk:info": <message> } metadata entry to this construct. * The toolkit will display the info message when apps are synthesized. * @param message The info message. */ addInfo(message: string): void; /** * Adds a { warning: <message> } metadata entry to this construct. * The toolkit will display the warning when an app is synthesized, or fail * if run in --strict mode. * @param message The warning message. */ addWarning(message: string): void; /** * Adds an { error: <message> } metadata entry to this construct. * The toolkit will fail synthesis when errors are reported. * @param message The error message. */ addError(message: string): void; /** * Applies the aspect to this Constructs node */ applyAspect(aspect: IAspect): void; /** * All parent scopes of this construct. * * @returns a list of parent scopes. The last element in the list will always * be the current construct and the first element will be the root of the * tree. */ readonly scopes: IConstruct[]; /** * @returns The root of the construct tree. */ readonly root: IConstruct; /** * Returns true if this construct or the scopes in which it is defined are * locked. */ readonly locked: boolean; /** * Record a reference originating from this construct node */ addReference(...refs: IResolvable[]): void; /** * Return all references originating from this node or any of its children */ readonly references: OutgoingReference[]; /** * Add an ordering dependency on another Construct. * * All constructs in the dependency's scope will be deployed before any * construct in this construct's scope. */ addDependency(...dependencies: IDependable[]): void; /** * Return all dependencies registered on this node or any of its children */ readonly dependencies: Dependency[]; /** * Adds a child construct to this node. * * @param child The child construct * @param childName The type name of the child construct. * @returns The resolved path part name of the child */ private addChild; /** * Triggers each aspect to invoke visit */ private invokeAspects; } /** * Represents the building block of the construct graph. * * All constructs besides the root construct must be created within the scope of * another construct. */ export declare class Construct implements IConstruct { /** * Return whether the given object is a Construct */ static isConstruct(x: any): x is Construct; /** * Construct tree node which offers APIs for interacting with the construct tree. */ readonly node: ConstructNode; /** * Creates a new construct node. * * @param scope The scope in which to define this construct * @param id The scoped construct ID. Must be unique amongst siblings. If * the ID includes a path separator (`/`), then it will be replaced by double * dash `--`. */ constructor(scope: Construct, id: string); /** * Returns a string representation of this construct. */ toString(): string; /** * Validate the current construct. * * This method can be implemented by derived constructs in order to perform * validation logic. It is called on all constructs before synthesis. * * @returns An array of validation error messages, or an empty array if there the construct is valid. */ protected validate(): string[]; /** * Perform final modifications before synthesis * * This method can be implemented by derived constructs in order to perform * final changes before synthesis. prepare() will be called after child * constructs have been prepared. * * This is an advanced framework feature. Only use this if you * understand the implications. */ protected prepare(): void; /** * Allows this construct to emit artifacts into the cloud assembly during synthesis. * * This method is usually implemented by framework-level constructs such as `Stack` and `Asset` * as they participate in synthesizing the cloud assembly. * * @param session The synthesis session. */ protected synthesize(session: ISynthesisSession): void; } /** * An error returned during the validation phase. */ export interface ValidationError { /** * The construct which emitted the error. */ readonly source: Construct; /** * The error message. */ readonly message: string; } /** * In what order to return constructs */ export declare enum ConstructOrder { /** * Depth-first, pre-order */ PREORDER = 0, /** * Depth-first, post-order (leaf nodes first) */ POSTORDER = 1 } /** * A single dependency */ export interface Dependency { /** * Source the dependency */ readonly source: IConstruct; /** * Target of the dependency */ readonly target: IConstruct; } /** * Represents a reference that originates from a specific construct. */ export interface OutgoingReference { /** * The originating construct. */ readonly source: IConstruct; /** * The reference. */ readonly reference: Reference; } /** * Represents a single session of synthesis. Passed into `Construct.synthesize()` methods. */ export interface ISynthesisSession { /** * The cloud assembly being synthesized. */ assembly: cxapi.CloudAssemblyBuilder; } /** * Options for synthesis. */ export interface SynthesisOptions extends cxapi.AssemblyBuildOptions { /** * The output directory into which to synthesize the cloud assembly. * @default - creates a temporary directory */ readonly outdir?: string; /** * Whether synthesis should skip the validation phase. * @default false */ readonly skipValidation?: boolean; } import { Reference } from './reference';