@aws-cdk/toolkit-lib 0.1.3 → 0.1.4

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 (60) hide show
  1. package/CODE_REGISTRY.md +12 -9
  2. package/build-info.json +2 -2
  3. package/db.json.gz +0 -0
  4. package/lib/actions/bootstrap/index.d.ts +174 -0
  5. package/lib/actions/bootstrap/index.js +94 -0
  6. package/lib/actions/bootstrap/private/helpers.d.ts +5 -0
  7. package/lib/actions/bootstrap/private/helpers.js +23 -0
  8. package/lib/actions/bootstrap/private/index.d.ts +1 -0
  9. package/lib/actions/bootstrap/private/index.js +18 -0
  10. package/lib/actions/destroy/index.d.ts +1 -1
  11. package/lib/actions/destroy/index.js +1 -1
  12. package/lib/actions/index.d.ts +1 -0
  13. package/lib/actions/index.js +2 -1
  14. package/lib/actions/list/index.d.ts +4 -0
  15. package/lib/actions/list/index.js +1 -1
  16. package/lib/api/aws-cdk.d.ts +3 -6
  17. package/lib/api/aws-cdk.js +710 -252
  18. package/lib/api/aws-cdk.js.map +4 -4
  19. package/lib/api/bootstrap/bootstrap-template.yaml +707 -0
  20. package/lib/api/cloud-assembly/context.d.ts +9 -0
  21. package/lib/api/cloud-assembly/context.js +3 -0
  22. package/lib/api/cloud-assembly/private/context-aware-source.js +3 -3
  23. package/lib/api/cloud-assembly/private/prepare-source.d.ts +1 -1
  24. package/lib/api/cloud-assembly/private/prepare-source.js +4 -3
  25. package/lib/api/cloud-assembly/private/source-builder.js +3 -3
  26. package/lib/api/io/index.d.ts +1 -2
  27. package/lib/api/io/index.js +1 -17
  28. package/lib/api/io/private/codes.d.ts +39 -59
  29. package/lib/api/io/private/codes.js +55 -67
  30. package/lib/api/io/private/index.d.ts +0 -1
  31. package/lib/api/io/private/index.js +1 -2
  32. package/lib/api/io/private/level-priority.d.ts +1 -1
  33. package/lib/api/io/private/level-priority.js +1 -1
  34. package/lib/api/io/private/logger.d.ts +3 -12
  35. package/lib/api/io/private/logger.js +1 -22
  36. package/lib/api/io/private/messages.d.ts +7 -3
  37. package/lib/api/io/private/messages.js +1 -2
  38. package/lib/api/io/private/timer.d.ts +2 -2
  39. package/lib/api/io/private/timer.js +13 -13
  40. package/lib/api/shared-private.d.ts +1 -0
  41. package/lib/api/shared-private.js +82 -0
  42. package/lib/api/shared-private.js.map +7 -0
  43. package/lib/api/shared-public.d.ts +130 -1
  44. package/lib/api/shared-public.js.map +1 -1
  45. package/lib/private/util.d.ts +1 -0
  46. package/lib/private/util.js +715 -0
  47. package/lib/private/util.js.map +7 -0
  48. package/lib/toolkit/private/index.d.ts +10 -1
  49. package/lib/toolkit/private/index.js +18 -1
  50. package/lib/toolkit/toolkit.d.ts +7 -11
  51. package/lib/toolkit/toolkit.js +126 -99
  52. package/lib/util/concurrency.d.ts +5 -0
  53. package/lib/util/concurrency.js +11 -0
  54. package/package.json +11 -11
  55. package/lib/api/io/io-host.d.ts +0 -15
  56. package/lib/api/io/io-host.js +0 -3
  57. package/lib/api/io/io-message.d.ts +0 -59
  58. package/lib/api/io/io-message.js +0 -3
  59. package/lib/api/io/private/types.d.ts +0 -25
  60. package/lib/api/io/private/types.js +0 -3
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["util.ts", "../../../tmp-toolkit-helpers/src/util/archive.ts", "../../../tmp-toolkit-helpers/src/util/format-error.ts", "../../../tmp-toolkit-helpers/src/util/arrays.ts", "../../../tmp-toolkit-helpers/src/util/bool.ts", "../../../tmp-toolkit-helpers/src/util/bytes.ts", "../../../tmp-toolkit-helpers/src/util/cloudformation.ts", "../../../tmp-toolkit-helpers/src/util/content-hash.ts", "../../../tmp-toolkit-helpers/src/util/directories.ts", "../../../tmp-toolkit-helpers/src/api/toolkit-error.ts", "../../../tmp-toolkit-helpers/src/util/json.ts", "../../../tmp-toolkit-helpers/src/util/types.ts", "../../../tmp-toolkit-helpers/src/util/objects.ts", "../../../tmp-toolkit-helpers/src/util/parallel.ts", "../../../tmp-toolkit-helpers/src/util/serialize.ts", "../../../tmp-toolkit-helpers/src/util/yaml-cfn.ts", "../../../tmp-toolkit-helpers/src/util/string-manipulation.ts", "../../../tmp-toolkit-helpers/src/util/type-brands.ts", "../../../tmp-toolkit-helpers/src/util/version-range.ts"],
4
+ "sourcesContent": ["/* eslint-disable import/no-restricted-paths */\n\nexport * from '../../../tmp-toolkit-helpers/src/util';\n", "import { error } from 'console';\nimport { createWriteStream, promises as fs } from 'fs';\nimport * as path from 'path';\nimport * as glob from 'glob';\nimport { formatErrorMessage } from './format-error';\n\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nconst archiver = require('archiver');\n\n// Adapted from cdk-assets\nexport async function zipDirectory(directory: string, outputFile: string): Promise<void> {\n // We write to a temporary file and rename at the last moment. This is so that if we are\n // interrupted during this process, we don't leave a half-finished file in the target location.\n const temporaryOutputFile = `${outputFile}.${randomString()}._tmp`;\n await writeZipFile(directory, temporaryOutputFile);\n await moveIntoPlace(temporaryOutputFile, outputFile);\n}\n\nfunction writeZipFile(directory: string, outputFile: string): Promise<void> {\n return new Promise(async (ok, fail) => {\n // The below options are needed to support following symlinks when building zip files:\n // - nodir: This will prevent symlinks themselves from being copied into the zip.\n // - follow: This will follow symlinks and copy the files within.\n const globOptions = {\n dot: true,\n nodir: true,\n follow: true,\n cwd: directory,\n };\n const files = glob.sync('**', globOptions); // The output here is already sorted\n\n const output = createWriteStream(outputFile);\n\n const archive = archiver('zip');\n archive.on('warning', fail);\n archive.on('error', fail);\n\n // archive has been finalized and the output file descriptor has closed, resolve promise\n // this has to be done before calling `finalize` since the events may fire immediately after.\n // see https://www.npmjs.com/package/archiver\n output.once('close', ok);\n\n archive.pipe(output);\n\n // Append files serially to ensure file order\n for (const file of files) {\n const fullPath = path.resolve(directory, file);\n // Exactly 2 promises\n // eslint-disable-next-line @cdklabs/promiseall-no-unbounded-parallelism\n const [data, stat] = await Promise.all([fs.readFile(fullPath), fs.stat(fullPath)]);\n archive.append(data, {\n name: file,\n mode: stat.mode,\n });\n }\n\n await archive.finalize();\n });\n}\n\n/**\n * Rename the file to the target location, taking into account:\n *\n * - That we may see EPERM on Windows while an Antivirus scanner still has the\n * file open, so retry a couple of times.\n * - This same function may be called in parallel and be interrupted at any point.\n */\nasync function moveIntoPlace(source: string, target: string) {\n let delay = 100;\n let attempts = 5;\n while (true) {\n try {\n // 'rename' is guaranteed to overwrite an existing target, as long as it is a file (not a directory)\n await fs.rename(source, target);\n return;\n } catch (e: any) {\n if (e.code !== 'EPERM' || attempts-- <= 0) {\n throw e;\n }\n error(formatErrorMessage(e));\n await sleep(Math.floor(Math.random() * delay));\n delay *= 2;\n }\n }\n}\n\nfunction sleep(ms: number) {\n return new Promise(ok => setTimeout(ok, ms));\n}\n\nfunction randomString() {\n return Math.random().toString(36).replace(/[^a-z0-9]+/g, '');\n}\n", "/**\n * Takes in an error and returns a correctly formatted string of its error message.\n * If it is an AggregateError, it will return a string with all the inner errors\n * formatted and separated by a newline.\n *\n * @param error The error to format\n * @returns A string with the error message(s) of the error\n */\nexport function formatErrorMessage(error: any): string {\n if (error && Array.isArray(error.errors)) {\n const innerMessages = error.errors\n .map((innerError: { message: any; toString: () => any }) => (innerError?.message || innerError?.toString()))\n .join('\\n');\n return `AggregateError: ${innerMessages}`;\n }\n\n // Fallback for regular Error or other types\n return error?.message || error?.toString() || 'Unknown error';\n}\n", "/**\n * Map a function over an array and concatenate the results\n */\nexport function flatMap<T, U>(xs: T[], fn: ((x: T, i: number) => U[])): U[] {\n return flatten(xs.map(fn));\n}\n\n/**\n * Flatten a list of lists into a list of elements\n */\nexport function flatten<T>(xs: T[][]): T[] {\n return Array.prototype.concat.apply([], xs);\n}\n\n/**\n * Partition a collection by removing and returning all elements that match a predicate\n *\n * Note: the input collection is modified in-place!\n */\nexport function partition<T>(collection: T[], pred: (x: T) => boolean): T[] {\n const ret: T[] = [];\n let i = 0;\n while (i < collection.length) {\n if (pred(collection[i])) {\n ret.push(collection.splice(i, 1)[0]);\n } else {\n i++;\n }\n }\n return ret;\n}\n", "/**\n * Converts a boolean into a number.\n *\n * @param bool input boolean\n * @returns 1 if bool is true, and 0 if false\n */\nexport function numberFromBool(bool: boolean): number {\n return +bool;\n}\n", "/**\n * Format bytes as a human readable string\n *\n * @param bytes Number of bytes to format\n * @param decimals Number of decimal places to show (default 2)\n * @returns Formatted string with appropriate unit suffix\n */\nexport function formatBytes(bytes: number, decimals: number = 2): string {\n decimals = decimals < 0 ? 0 : decimals;\n\n if (bytes === 0) {\n return '0 Bytes';\n }\n\n const k = 1024;\n const sizes = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(decimals))} ${sizes[i]}`;\n}\n", "/**\n * Validate SNS topic arn\n */\nexport function validateSnsTopicArn(arn: string): boolean {\n return /^arn:aws:sns:[a-z0-9\\-]+:[0-9]+:[a-z0-9\\-\\_]+$/i.test(arn);\n}\n\n/**\n * Does a Stack Event have an error message based on the status.\n */\nexport function stackEventHasErrorMessage(status: string): boolean {\n return status.endsWith('_FAILED') || status === 'ROLLBACK_IN_PROGRESS' || status === 'UPDATE_ROLLBACK_IN_PROGRESS';\n}\n\n/**\n * Calculate the maximal length of all resource types for a given template.\n *\n * @param template the stack template to analyze\n * @param startWidth the initial width to start with. Defaults to the length of 'AWS::CloudFormation::Stack'.\n * @returns the determined width\n */\nexport function maxResourceTypeLength(template: any, startWidth = 'AWS::CloudFormation::Stack'.length): number {\n const resources = (template && template.Resources) || {};\n let maxWidth = startWidth;\n for (const id of Object.keys(resources)) {\n const type = resources[id].Type || '';\n if (type.length > maxWidth) {\n maxWidth = type.length;\n }\n }\n return maxWidth;\n}\n", "import * as crypto from 'crypto';\n\nexport function contentHash(data: string | Buffer | DataView) {\n return crypto.createHash('sha256').update(data).digest('hex');\n}\n\n/**\n * A stably sorted hash of an arbitrary JS object\n */\nexport function contentHashAny(value: unknown) {\n const ret = crypto.createHash('sha256');\n recurse(value);\n return ret.digest('hex');\n\n function recurse(x: unknown) {\n if (typeof x === 'string') {\n ret.update(x);\n return;\n }\n\n if (Array.isArray(x)) {\n ret.update('[');\n for (const e of x) {\n recurse(e);\n ret.update('||');\n }\n ret.update(']');\n return;\n }\n\n if (x && typeof x === 'object') {\n ret.update('{');\n for (const key of Object.keys(x).sort()) {\n ret.update(key);\n ret.update(':');\n recurse((x as any)[key]);\n }\n ret.update('}');\n return;\n }\n\n ret.update(`${x}${typeof x}`); // typeof to make sure hash('123') !== hash(123)\n }\n}\n", "import * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { ToolkitError } from '../api/toolkit-error';\n\n/**\n * Return a location that will be used as the CDK home directory.\n * Currently the only thing that is placed here is the cache.\n *\n * First try to use the users home directory (i.e. /home/someuser/),\n * but if that directory does not exist for some reason create a tmp directory.\n *\n * Typically it wouldn't make sense to create a one time use tmp directory for\n * the purpose of creating a cache, but since this only applies to users that do\n * not have a home directory (some CI systems?) this should be fine.\n */\nexport function cdkHomeDir() {\n const tmpDir = fs.realpathSync(os.tmpdir());\n let home;\n try {\n let userInfoHome: string | undefined = os.userInfo().homedir;\n // Node returns this if the user doesn't have a home directory\n /* istanbul ignore if: will not happen in normal setups */\n if (userInfoHome == '/var/empty') {\n userInfoHome = undefined;\n }\n home = path.join((userInfoHome ?? os.homedir()).trim(), '.cdk');\n } catch {\n }\n return process.env.CDK_HOME\n ? path.resolve(process.env.CDK_HOME)\n : home || fs.mkdtempSync(path.join(tmpDir, '.cdk')).trim();\n}\n\nexport function cdkCacheDir() {\n return path.join(cdkHomeDir(), 'cache');\n}\n\n/**\n * From the start location, find the directory that contains the bundled package's package.json\n *\n * You must assume the caller of this function will be bundled and the package root dir\n * is not going to be the same as the package the caller currently lives in.\n */\nexport function bundledPackageRootDir(start: string): string;\nexport function bundledPackageRootDir(start: string, fail: true): string;\nexport function bundledPackageRootDir(start: string, fail: false): string | undefined;\nexport function bundledPackageRootDir(start: string, fail?: boolean) {\n function _rootDir(dirname: string): string | undefined {\n const manifestPath = path.join(dirname, 'package.json');\n if (fs.existsSync(manifestPath)) {\n return dirname;\n }\n if (path.dirname(dirname) === dirname) {\n if (fail ?? true) {\n throw new ToolkitError('Unable to find package manifest');\n }\n return undefined;\n }\n return _rootDir(path.dirname(dirname));\n }\n\n return _rootDir(start);\n}\n", "const TOOLKIT_ERROR_SYMBOL = Symbol.for('@aws-cdk/toolkit.ToolkitError');\nconst AUTHENTICATION_ERROR_SYMBOL = Symbol.for('@aws-cdk/toolkit.AuthenticationError');\nconst ASSEMBLY_ERROR_SYMBOL = Symbol.for('@aws-cdk/toolkit.AssemblyError');\nconst CONTEXT_PROVIDER_ERROR_SYMBOL = Symbol.for('@aws-cdk/toolkit.ContextProviderError');\n\n/**\n * Represents a general toolkit error in the AWS CDK Toolkit.\n */\nexport class ToolkitError extends Error {\n /**\n * Determines if a given error is an instance of ToolkitError.\n */\n public static isToolkitError(x: any): x is ToolkitError {\n return x !== null && typeof(x) === 'object' && TOOLKIT_ERROR_SYMBOL in x;\n }\n\n /**\n * Determines if a given error is an instance of AuthenticationError.\n */\n public static isAuthenticationError(x: any): x is AuthenticationError {\n return this.isToolkitError(x) && AUTHENTICATION_ERROR_SYMBOL in x;\n }\n\n /**\n * Determines if a given error is an instance of AssemblyError.\n */\n public static isAssemblyError(x: any): x is AssemblyError {\n return this.isToolkitError(x) && ASSEMBLY_ERROR_SYMBOL in x;\n }\n\n /**\n * Determines if a given error is an instance of AssemblyError.\n */\n public static isContextProviderError(x: any): x is ContextProviderError {\n return this.isToolkitError(x) && CONTEXT_PROVIDER_ERROR_SYMBOL in x;\n }\n\n /**\n * The type of the error, defaults to \"toolkit\".\n */\n public readonly type: string;\n\n constructor(message: string, type: string = 'toolkit') {\n super(message);\n Object.setPrototypeOf(this, ToolkitError.prototype);\n Object.defineProperty(this, TOOLKIT_ERROR_SYMBOL, { value: true });\n this.name = new.target.name;\n this.type = type;\n }\n}\n\n/**\n * Represents an authentication-specific error in the AWS CDK Toolkit.\n */\nexport class AuthenticationError extends ToolkitError {\n constructor(message: string) {\n super(message, 'authentication');\n Object.setPrototypeOf(this, AuthenticationError.prototype);\n Object.defineProperty(this, AUTHENTICATION_ERROR_SYMBOL, { value: true });\n }\n}\n\n/**\n * Represents an authentication-specific error in the AWS CDK Toolkit.\n */\nexport class AssemblyError extends ToolkitError {\n constructor(message: string) {\n super(message, 'assembly');\n Object.setPrototypeOf(this, AssemblyError.prototype);\n Object.defineProperty(this, ASSEMBLY_ERROR_SYMBOL, { value: true });\n }\n}\n\n/**\n * Represents an error originating from a Context Provider\n */\nexport class ContextProviderError extends ToolkitError {\n constructor(message: string) {\n super(message, 'context-provider');\n Object.setPrototypeOf(this, ContextProviderError.prototype);\n Object.defineProperty(this, CONTEXT_PROVIDER_ERROR_SYMBOL, { value: true });\n }\n}\n", "/**\n * This gets the values of the jsonObject at the paths specified in propertiesToReturn.\n *\n * For example, jsonObject = {\n * key1: 'abc',\n * key2: {\n * foo: 'qwerty',\n * bar: 'data',\n * }\n * }\n *\n * propertiesToReturn = ['key1', 'key2.foo'];\n *\n * The returned object is:\n *\n * ```\n * {\n * key1: 'abc',\n * 'key2.foo': 'qwerty',\n * Identifier: identifier\n * }\n * ```\n */\nexport function getResultObj(jsonObject: any, identifier: string, propertiesToReturn: string[]): {[key: string]: any} {\n const propsObj = {};\n propertiesToReturn.forEach((propName) => {\n Object.assign(propsObj, { [propName]: findJsonValue(jsonObject, propName) });\n });\n Object.assign(propsObj, { ['Identifier']: identifier });\n return propsObj;\n}\n\n/**\n * This finds the value of the jsonObject at the path. Path is delimited by '.'.\n *\n * For example, jsonObject = {\n * key1: 'abc',\n * key2: {\n * foo: 'qwerty',\n * bar: 'data',\n * }\n * }\n *\n * If path is 'key1', then it will return 'abc'.\n * If path is 'key2.foo', then it will return 'qwerty'.\n * If path is 'key2', then it will return the object:\n * {\n * foo: 'qwerty',\n * bar: 'data',\n * }\n *\n * If the path is not found, an Error will be thrown stating which token is missing.\n */\nexport function findJsonValue(jsonObject: any, path: string): any {\n const paths = path.split('.');\n let obj = jsonObject;\n paths.forEach(p => {\n obj = obj[p];\n if (obj === undefined) {\n throw new TypeError(`Cannot read field ${path}. ${p} is not found.`);\n }\n });\n return obj;\n}\n", "/**\n * Type of a map mapping strings to some arbitrary type\n *\n * Name is not ideal, but:\n *\n * - Cannot call it Object, that already means something.\n * - Cannot call it Dict or Dictionary, since in other languages\n * those also allow specifying the key type.\n */\nexport type Obj<T> = {[key: string]: T};\n\n/**\n * Return whether the given value is an object\n *\n * Even though arrays technically are objects, we usually want to treat them differently,\n * so we return false in those cases.\n */\nexport function isObject(x: any): x is Obj<any> {\n return x !== null && typeof x === 'object' && !isArray(x);\n}\n\n/**\n * Return whether the given value is an array\n */\nexport const isArray = Array.isArray;\n\n/**\n * Return the value of the first argument if it's not undefined, otherwise the default\n */\nexport function ifDefined<T>(x: T | undefined, def: T): T {\n return typeof x !== 'undefined' ? x : def;\n}\n", "import { isArray, isObject, Obj } from './types';\nimport { ToolkitError } from '../api/toolkit-error';\n\n/**\n * Return a new object by adding missing keys into another object\n */\nexport function applyDefaults(hash: any, defaults: any) {\n const result: any = { };\n\n Object.keys(hash).forEach(k => result[k] = hash[k]);\n\n Object.keys(defaults)\n .filter(k => !(k in result))\n .forEach(k => result[k] = defaults[k]);\n\n return result;\n}\n\n/**\n * Return whether the given parameter is an empty object or empty list.\n */\nexport function isEmpty(x: any) {\n if (x == null) {\n return false;\n }\n if (isArray(x)) {\n return x.length === 0;\n }\n return Object.keys(x).length === 0;\n}\n\n/**\n * Deep clone a tree of objects, lists or scalars\n *\n * Does not support cycles.\n */\nexport function deepClone(x: any): any {\n if (typeof x === 'undefined') {\n return undefined;\n }\n if (x === null) {\n return null;\n }\n if (isArray(x)) {\n return x.map(deepClone);\n }\n if (isObject(x)) {\n return makeObject(mapObject(x, (k, v) => [k, deepClone(v)] as [string, any]));\n }\n return x;\n}\n\n/**\n * Map over an object, treating it as a dictionary\n */\nexport function mapObject<T, U>(x: Obj<T>, fn: (key: string, value: T) => U): U[] {\n const ret: U[] = [];\n Object.keys(x).forEach(key => {\n ret.push(fn(key, x[key]));\n });\n return ret;\n}\n\n/**\n * Construct an object from a list of (k, v) pairs\n */\nexport function makeObject<T>(pairs: Array<[string, T]>): Obj<T> {\n const ret: Obj<T> = {};\n for (const pair of pairs) {\n ret[pair[0]] = pair[1];\n }\n return ret;\n}\n\n/**\n * Deep get a value from a tree of nested objects\n *\n * Returns undefined if any part of the path was unset or\n * not an object.\n */\nexport function deepGet(x: any, path: string[]): any {\n path = path.slice();\n\n while (path.length > 0 && isObject(x)) {\n const key = path.shift()!;\n x = x[key];\n }\n return path.length === 0 ? x : undefined;\n}\n\n/**\n * Deep set a value in a tree of nested objects\n *\n * Throws an error if any part of the path is not an object.\n */\nexport function deepSet(x: any, path: string[], value: any) {\n path = path.slice();\n\n if (path.length === 0) {\n throw new ToolkitError('Path may not be empty');\n }\n\n while (path.length > 1 && isObject(x)) {\n const key = path.shift()!;\n if (!(key in x)) {\n x[key] = {};\n }\n x = x[key];\n }\n\n if (!isObject(x)) {\n throw new ToolkitError(`Expected an object, got '${x}'`);\n }\n\n if (value !== undefined) {\n x[path[0]] = value;\n } else {\n delete x[path[0]];\n }\n}\n\n/**\n * Recursively merge objects together\n *\n * The leftmost object is mutated and returned. Arrays are not merged\n * but overwritten just like scalars.\n *\n * If an object is merged into a non-object, the non-object is lost.\n */\nexport function deepMerge(...objects: Array<Obj<any> | undefined>) {\n function mergeOne(target: Obj<any>, source: Obj<any>) {\n for (const key of Object.keys(source)) {\n if (key === '__proto__' || key === 'constructor') {\n continue;\n }\n\n const value = source[key];\n\n if (isObject(value)) {\n if (!isObject(target[key])) {\n target[key] = {};\n } // Overwrite on purpose\n mergeOne(target[key], value);\n } else if (typeof value !== 'undefined') {\n target[key] = value;\n }\n }\n }\n\n const others = objects.filter(x => x != null) as Array<Obj<any>>;\n\n if (others.length === 0) {\n return {};\n }\n const into = others.splice(0, 1)[0];\n\n others.forEach(other => mergeOne(into, other));\n return into;\n}\n\n/**\n * Splits the given object into two, such that:\n *\n * 1. The size of the first object (after stringified in UTF-8) is less than or equal to the provided size limit.\n * 2. Merging the two objects results in the original one.\n */\nexport function splitBySize(data: any, maxSizeBytes: number): [any, any] {\n if (maxSizeBytes < 2) {\n // It's impossible to fit anything in the first object\n return [undefined, data];\n }\n const entries = Object.entries(data);\n return recurse(0, 0);\n\n function recurse(index: number, runningTotalSize: number): [any, any] {\n if (index >= entries.length) {\n // Everything fits in the first object\n return [data, undefined];\n }\n\n const size = runningTotalSize + entrySize(entries[index]);\n return (size > maxSizeBytes) ? cutAt(index) : recurse(index + 1, size);\n }\n\n function entrySize(entry: [string, unknown]) {\n return Buffer.byteLength(JSON.stringify(Object.fromEntries([entry])));\n }\n\n function cutAt(index: number): [any, any] {\n return [\n Object.fromEntries(entries.slice(0, index)),\n Object.fromEntries(entries.slice(index)),\n ];\n }\n}\n", "/**\n * Run a number of promise generators with max parallelism\n *\n * Order is not maintained between the input and output.\n */\nexport async function parallelPromises<A>(n: number, promises: Array<() => Promise<A>>): Promise<Array<A>> {\n const ret = new Array<A>();\n let count = 0;\n let error: Error | undefined;\n const queue = [...promises];\n\n return new Promise((ok, ko) => {\n tick();\n\n function tick() {\n if (count === 0 && error) {\n ko(error);\n return;\n }\n if (count === 0 && queue.length === 0) {\n ok(ret);\n return;\n }\n\n while (count < n && queue.length > 0 && !error) {\n const next = queue.shift();\n if (next !== undefined) {\n start(next);\n }\n }\n }\n\n function start(fn: () => Promise<A>) {\n count += 1;\n fn()\n .then((result) => {\n ret.push(result);\n })\n .catch((e) => {\n error = e;\n })\n .finally(() => {\n count -= 1;\n tick();\n });\n }\n });\n}\n", "import * as fs from 'fs/promises';\nimport { formatBytes } from './bytes';\nimport * as yaml_cfn from './yaml-cfn';\n\n/**\n * Stringify to YAML\n */\nexport function toYAML(obj: any): string {\n return yaml_cfn.serialize(obj);\n}\n\n/**\n * Parse either YAML or JSON\n */\nexport function deserializeStructure(str: string): any {\n return yaml_cfn.deserialize(str);\n}\n\n/**\n * Serialize to either YAML or JSON\n */\nexport function serializeStructure(object: any, json: boolean) {\n if (json) {\n return JSON.stringify(object, undefined, 2);\n } else {\n return toYAML(object);\n }\n}\n\n/**\n * Load a YAML or JSON file from disk\n */\nexport async function loadStructuredFile(fileName: string) {\n const contents = await fs.readFile(fileName, { encoding: 'utf-8' });\n return deserializeStructure(contents);\n}\n\n/**\n * Remove any template elements that we don't want to show users.\n */\nexport function obscureTemplate(template: any = {}) {\n if (template.Rules) {\n // see https://github.com/aws/aws-cdk/issues/17942\n if (template.Rules.CheckBootstrapVersion) {\n if (Object.keys(template.Rules).length > 1) {\n delete template.Rules.CheckBootstrapVersion;\n } else {\n delete template.Rules;\n }\n }\n }\n\n return template;\n}\n\n/**\n * Detects a buffer that has been converted to a JSON-like object\n * In Node, `Buffer`s have `toJSON()` method that converts the buffer\n * into a JS object that can be JSON stringified.\n * Unfortunately this conversion happens before the replacer is called,\n * so normal means of detecting a `Buffer` objet don't work anymore.\n * @see https://github.com/nodejs/node-v0.x-archive/issues/5110\n */\nfunction isJsonBuffer(value: any): value is {\n type: 'Buffer';\n data: number[];\n} {\n return typeof value === 'object'\n && 'type' in value\n && value.type === 'Buffer'\n && 'data' in value\n && Array.isArray(value.data);\n}\n\n/**\n * A JSON.stringify() replacer that converts Buffers into a string with information\n * Use this if you plan to print out JSON stringified objects that may contain a Buffer.\n * Without this, large buffers (think: Megabytes) will completely fill up the output\n * and even crash the system.\n */\nexport function replacerBufferWithInfo(_key: any, value: any): any {\n if (isJsonBuffer(value)) {\n return `<Buffer: ${formatBytes(value.data.length)}>`;\n }\n return value;\n}\n", "import * as yaml from 'yaml';\nimport * as yaml_cst from 'yaml/parse-cst';\nimport * as yaml_types from 'yaml/types';\n\n/**\n * Serializes the given data structure into valid YAML.\n *\n * @param obj the data structure to serialize\n * @returns a string containing the YAML representation of {@param obj}\n */\nexport function serialize(obj: any): string {\n const oldFold = yaml_types.strOptions.fold.lineWidth;\n try {\n yaml_types.strOptions.fold.lineWidth = 0;\n return yaml.stringify(obj, { schema: 'yaml-1.1' });\n } finally {\n yaml_types.strOptions.fold.lineWidth = oldFold;\n }\n}\n\n/**\n * Deserialize the YAML into the appropriate data structure.\n *\n * @param str the string containing YAML\n * @returns the data structure the YAML represents\n * (most often in case of CloudFormation, an object)\n */\nexport function deserialize(str: string): any {\n return parseYamlStrWithCfnTags(str);\n}\n\nfunction makeTagForCfnIntrinsic(intrinsicName: string, addFnPrefix: boolean): yaml_types.Schema.CustomTag {\n return {\n identify(value: any) {\n return typeof value === 'string';\n },\n tag: `!${intrinsicName}`,\n resolve: (_doc: yaml.Document, cstNode: yaml_cst.CST.Node) => {\n const ret: any = {};\n ret[addFnPrefix ? `Fn::${intrinsicName}` : intrinsicName] =\n // the +1 is to account for the ! the short form begins with\n parseYamlStrWithCfnTags(cstNode.toString().substring(intrinsicName.length + 1));\n return ret;\n },\n };\n}\n\nconst shortForms: yaml_types.Schema.CustomTag[] = [\n 'Base64', 'Cidr', 'FindInMap', 'GetAZs', 'ImportValue', 'Join', 'Sub',\n 'Select', 'Split', 'Transform', 'And', 'Equals', 'If', 'Not', 'Or', 'GetAtt',\n].map(name => makeTagForCfnIntrinsic(name, true)).concat(\n makeTagForCfnIntrinsic('Ref', false),\n makeTagForCfnIntrinsic('Condition', false),\n);\n\nfunction parseYamlStrWithCfnTags(text: string): any {\n return yaml.parse(text, {\n customTags: shortForms,\n schema: 'core',\n });\n}\n", "/**\n * Pad 's' on the left with 'char' until it is n characters wide\n */\nexport function padLeft(n: number, x: string, char: string = ' '): string {\n return char.repeat(Math.max(0, n - x.length)) + x;\n}\n\n/**\n * Pad 's' on the right with 'char' until it is n characters wide\n */\nexport function padRight(n: number, x: string, char: string = ' '): string {\n return x + char.repeat(Math.max(0, n - x.length));\n}\n\n/**\n * Formats time in milliseconds (which we get from 'Date.getTime()')\n * to a human-readable time; returns time in seconds rounded to 2\n * decimal places.\n */\nexport function formatTime(num: number): number {\n return roundPercentage(millisecondsToSeconds(num));\n}\n\n/**\n * Rounds a decimal number to two decimal points.\n * The function is useful for fractions that need to be outputted as percentages.\n */\nfunction roundPercentage(num: number): number {\n return Math.round(100 * num) / 100;\n}\n\n/**\n * Given a time in milliseconds, return an equivalent amount in seconds.\n */\nfunction millisecondsToSeconds(num: number): number {\n return num / 1000;\n}\n", "/**\n * Type branding\n *\n * This allows marking certain types as having gone through particular operations.\n *\n * Branded types can be used anywhere the base type is expected, but the base type\n * cannot be used where a branded type is expected; the values have to go through\n * a type assertion operation to confirm their brand.\n *\n * Usage:\n *\n * ```\n * type ValidatedString = Branded<string, 'PassedMyValidation'>;\n *\n * function validate(x: string): asserts x is ValidatedString {\n * // ... throw an error if not\n * }\n *\n * function isValid(x: string): x is ValidatedString {\n * // ... throw an error if not\n * }\n * ```\n */\n\n// This construct purely happens at type checking time. There is no run-time impact.\n// Hence, we never even have to construct values of this type.\ndeclare const __brand: unique symbol;\n\nexport type Brand<B> = { [__brand]: B };\nexport type Branded<T, B> = T & Brand<B>;\n\n/**\n * Marks a value as being branded a certain way.\n *\n * You should in general avoid calling this, and use validation or\n * asserting functions instead. However, this can be useful to produce\n * values which are branded by construction (really just an elaborate\n * way to write 'as').\n */\n/* c8 ignore next 3 */\nexport function createBranded<A extends Branded<any, any>>(value: TypeUnderlyingBrand<A>): A {\n return value as A;\n}\n\ntype TypeUnderlyingBrand<A> = A extends Branded<infer T, any> ? T : never;\n", "import * as semver from 'semver';\nimport { ToolkitError } from '../api/toolkit-error';\n\n// bracket - https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN401\n// pep - https://www.python.org/dev/peps/pep-0440/#version-specifiers\nexport type RangeType = 'bracket' | 'pep'\n\nexport function rangeFromSemver(ver: string, targetType: RangeType) {\n const re = ver.match(/^([^\\d]*)([\\d.]*)$/);\n if (!re || !semver.valid(re[2])) {\n throw new ToolkitError('not a semver or unsupported range syntax');\n }\n const prefixPart = re[1];\n const verPart = re[2];\n\n switch (targetType) {\n case 'bracket':\n switch (prefixPart) {\n case '':\n // if there's no prefix and the remaining is a valid semver, there's no range specified\n return ver;\n case '^':\n return `[${verPart},${semver.major(verPart)+1}.0.0)`;\n default:\n throw new ToolkitError(`unsupported range syntax - ${prefixPart}`);\n }\n case 'pep':\n switch (prefixPart) {\n case '':\n // if there's no prefix and the remaining is a valid semver, there's no range specified\n return `==${ver}`;\n case '^':\n return `>=${verPart},<${semver.major(verPart)+1}.0.0`;\n default:\n throw new ToolkitError(`unsupported range syntax - ${prefixPart}`);\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["error", "fs", "fs", "path", "dirname", "path", "path", "error", "fs"]
7
+ }
@@ -1,5 +1,7 @@
1
1
  import { SdkProvider } from '../../api/aws-cdk';
2
- import { ActionAwareIoHost } from '../../api/io/private';
2
+ import { ICloudAssemblySource } from '../../api/cloud-assembly';
3
+ import { StackAssembly } from '../../api/cloud-assembly/private';
4
+ import { ActionAwareIoHost } from '../../api/shared-private';
3
5
  /**
4
6
  * Helper struct to pass internal services around.
5
7
  */
@@ -7,3 +9,10 @@ export interface ToolkitServices {
7
9
  sdkProvider: SdkProvider;
8
10
  ioHost: ActionAwareIoHost;
9
11
  }
12
+ /**
13
+ * Creates a Toolkit internal CloudAssembly from a CloudAssemblySource.
14
+ * @param assemblySource the source for the cloud assembly
15
+ * @param cache if the assembly should be cached, default: `true`
16
+ * @returns the CloudAssembly object
17
+ */
18
+ export declare function assemblyFromSource(assemblySource: ICloudAssemblySource, cache?: boolean): Promise<StackAssembly>;
@@ -1,3 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBTZGtQcm92aWRlciB9IGZyb20gJy4uLy4uL2FwaS9hd3MtY2RrJztcbmltcG9ydCB7IEFjdGlvbkF3YXJlSW9Ib3N0IH0gZnJvbSAnLi4vLi4vYXBpL2lvL3ByaXZhdGUnO1xuXG4vKipcbiAqIEhlbHBlciBzdHJ1Y3QgdG8gcGFzcyBpbnRlcm5hbCBzZXJ2aWNlcyBhcm91bmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbGtpdFNlcnZpY2VzIHtcbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyO1xuICBpb0hvc3Q6IEFjdGlvbkF3YXJlSW9Ib3N0O1xufVxuIl19
3
+ exports.assemblyFromSource = assemblyFromSource;
4
+ const private_1 = require("../../api/cloud-assembly/private");
5
+ /**
6
+ * Creates a Toolkit internal CloudAssembly from a CloudAssemblySource.
7
+ * @param assemblySource the source for the cloud assembly
8
+ * @param cache if the assembly should be cached, default: `true`
9
+ * @returns the CloudAssembly object
10
+ */
11
+ async function assemblyFromSource(assemblySource, cache = true) {
12
+ if (assemblySource instanceof private_1.StackAssembly) {
13
+ return assemblySource;
14
+ }
15
+ if (cache) {
16
+ return new private_1.StackAssembly(await new private_1.CachedCloudAssemblySource(assemblySource).produce());
17
+ }
18
+ return new private_1.StackAssembly(await assemblySource.produce());
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW9CQSxnREFVQztBQTNCRCw4REFBNEY7QUFXNUY7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUsa0JBQWtCLENBQUMsY0FBb0MsRUFBRSxRQUFpQixJQUFJO0lBQ2xHLElBQUksY0FBYyxZQUFZLHVCQUFhLEVBQUUsQ0FBQztRQUM1QyxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLE9BQU8sSUFBSSx1QkFBYSxDQUFDLE1BQU0sSUFBSSxtQ0FBeUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxPQUFPLElBQUksdUJBQWEsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vLi4vYXBpL2F3cy1jZGsnO1xuaW1wb3J0IHsgSUNsb3VkQXNzZW1ibHlTb3VyY2UgfSBmcm9tICcuLi8uLi9hcGkvY2xvdWQtYXNzZW1ibHknO1xuaW1wb3J0IHsgQ2FjaGVkQ2xvdWRBc3NlbWJseVNvdXJjZSwgU3RhY2tBc3NlbWJseSB9IGZyb20gJy4uLy4uL2FwaS9jbG91ZC1hc3NlbWJseS9wcml2YXRlJztcbmltcG9ydCB7IEFjdGlvbkF3YXJlSW9Ib3N0IH0gZnJvbSAnLi4vLi4vYXBpL3NoYXJlZC1wcml2YXRlJztcblxuLyoqXG4gKiBIZWxwZXIgc3RydWN0IHRvIHBhc3MgaW50ZXJuYWwgc2VydmljZXMgYXJvdW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xraXRTZXJ2aWNlcyB7XG4gIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcjtcbiAgaW9Ib3N0OiBBY3Rpb25Bd2FyZUlvSG9zdDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgVG9vbGtpdCBpbnRlcm5hbCBDbG91ZEFzc2VtYmx5IGZyb20gYSBDbG91ZEFzc2VtYmx5U291cmNlLlxuICogQHBhcmFtIGFzc2VtYmx5U291cmNlIHRoZSBzb3VyY2UgZm9yIHRoZSBjbG91ZCBhc3NlbWJseVxuICogQHBhcmFtIGNhY2hlIGlmIHRoZSBhc3NlbWJseSBzaG91bGQgYmUgY2FjaGVkLCBkZWZhdWx0OiBgdHJ1ZWBcbiAqIEByZXR1cm5zIHRoZSBDbG91ZEFzc2VtYmx5IG9iamVjdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZW1ibHlGcm9tU291cmNlKGFzc2VtYmx5U291cmNlOiBJQ2xvdWRBc3NlbWJseVNvdXJjZSwgY2FjaGU6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxTdGFja0Fzc2VtYmx5PiB7XG4gIGlmIChhc3NlbWJseVNvdXJjZSBpbnN0YW5jZW9mIFN0YWNrQXNzZW1ibHkpIHtcbiAgICByZXR1cm4gYXNzZW1ibHlTb3VyY2U7XG4gIH1cblxuICBpZiAoY2FjaGUpIHtcbiAgICByZXR1cm4gbmV3IFN0YWNrQXNzZW1ibHkoYXdhaXQgbmV3IENhY2hlZENsb3VkQXNzZW1ibHlTb3VyY2UoYXNzZW1ibHlTb3VyY2UpLnByb2R1Y2UoKSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFN0YWNrQXNzZW1ibHkoYXdhaXQgYXNzZW1ibHlTb3VyY2UucHJvZHVjZSgpKTtcbn1cbiJdfQ==
@@ -1,4 +1,5 @@
1
1
  import { ToolkitServices } from './private';
2
+ import { BootstrapEnvironments, BootstrapOptions } from '../actions/bootstrap';
2
3
  import { type DeployOptions } from '../actions/deploy';
3
4
  import { type DestroyOptions } from '../actions/destroy';
4
5
  import { type ListOptions } from '../actions/list';
@@ -10,10 +11,6 @@ import { StackDetails } from '../api/aws-cdk';
10
11
  import { ICloudAssemblySource } from '../api/cloud-assembly';
11
12
  import { CloudAssemblySourceBuilder } from '../api/cloud-assembly/private';
12
13
  import { IIoHost } from '../api/io';
13
- /**
14
- * The current action being performed by the CLI. 'none' represents the absence of an action.
15
- */
16
- export type ToolkitAction = 'assembly' | 'bootstrap' | 'synth' | 'list' | 'diff' | 'deploy' | 'rollback' | 'watch' | 'destroy' | 'doctor' | 'gc' | 'import' | 'metadata' | 'init' | 'migrate';
17
14
  export interface ToolkitOptions {
18
15
  /**
19
16
  * The IoHost implementation, handling the inline interactions between the Toolkit and an integration.
@@ -53,6 +50,8 @@ export interface ToolkitOptions {
53
50
  }
54
51
  /**
55
52
  * The AWS CDK Programmatic Toolkit
53
+ *
54
+ * @document ../../CODE_REGISTRY.md
56
55
  */
57
56
  export declare class Toolkit extends CloudAssemblySourceBuilder implements AsyncDisposable {
58
57
  private readonly props;
@@ -76,6 +75,10 @@ export declare class Toolkit extends CloudAssemblySourceBuilder implements Async
76
75
  * Helper to provide the CloudAssemblySourceBuilder with required toolkit services
77
76
  */
78
77
  protected sourceBuilderServices(): Promise<ToolkitServices>;
78
+ /**
79
+ * Bootstrap Action
80
+ */
81
+ bootstrap(environments: BootstrapEnvironments, options: BootstrapOptions): Promise<void>;
79
82
  /**
80
83
  * Synth Action
81
84
  */
@@ -127,13 +130,6 @@ export declare class Toolkit extends CloudAssemblySourceBuilder implements Async
127
130
  * Validate the stacks for errors and warnings according to the CLI's current settings
128
131
  */
129
132
  private validateStacksMetadata;
130
- /**
131
- * Creates a Toolkit internal CloudAssembly from a CloudAssemblySource.
132
- * @param assemblySource the source for the cloud assembly
133
- * @param cache if the assembly should be cached, default: `true`
134
- * @returns the CloudAssembly object
135
- */
136
- private assemblyFromSource;
137
133
  /**
138
134
  * Create a deployments class
139
135
  */