@aws-cdk/core
Version:
AWS Cloud Development Kit Core Library
128 lines • 12.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const intrinsic_1 = require("./private/intrinsic");
const stack_1 = require("./stack");
/**
* Given an object, converts all keys to PascalCase given they are currently in camel case.
* @param obj The object.
*/
function capitalizePropertyNames(construct, obj) {
const stack = stack_1.Stack.of(construct);
obj = stack.resolve(obj);
if (typeof (obj) !== 'object') {
return obj;
}
if (Array.isArray(obj)) {
return obj.map(x => capitalizePropertyNames(construct, x));
}
const newObj = {};
for (const key of Object.keys(obj)) {
const value = obj[key];
const first = key.charAt(0).toUpperCase();
const newKey = first + key.slice(1);
newObj[newKey] = capitalizePropertyNames(construct, value);
}
return newObj;
}
exports.capitalizePropertyNames = capitalizePropertyNames;
/**
* Turns empty arrays/objects to undefined (after evaluating tokens).
*/
function ignoreEmpty(obj) {
return new PostResolveToken(obj, o => {
// undefined/null
if (o == null) {
return o;
}
if (Array.isArray(o) && o.length === 0) {
return undefined;
}
if (typeof (o) === 'object' && Object.keys(o).length === 0) {
return undefined;
}
return o;
});
}
exports.ignoreEmpty = ignoreEmpty;
/**
* Returns a copy of `obj` without `undefined` (or `null`) values in maps or arrays.
*/
function filterUndefined(obj) {
if (Array.isArray(obj)) {
return obj.filter(x => x != null).map(x => filterUndefined(x));
}
if (typeof (obj) === 'object') {
const ret = {};
for (const [key, value] of Object.entries(obj)) {
if (value == null) {
continue;
}
ret[key] = filterUndefined(value);
}
return ret;
}
return obj;
}
exports.filterUndefined = filterUndefined;
/**
* A Token that applies a function AFTER resolve resolution
*/
class PostResolveToken extends intrinsic_1.Intrinsic {
constructor(value, processor) {
super(value);
this.processor = processor;
}
resolve(context) {
context.registerPostProcessor(this);
return super.resolve(context);
}
postProcess(o, _context) {
return this.processor(o);
}
}
exports.PostResolveToken = PostResolveToken;
/**
* @returns the list of stacks that lead from the top-level stack (non-nested) all the way to a nested stack.
*/
function pathToTopLevelStack(s) {
if (s.nestedStackParent) {
return [...pathToTopLevelStack(s.nestedStackParent), s];
}
else {
return [s];
}
}
exports.pathToTopLevelStack = pathToTopLevelStack;
/**
* @returns true if this stack is a direct or indirect parent of the nested
* stack `nested`. If `nested` is a top-level stack, returns false.
*/
function isParentOfNestedStack(parent, child) {
// if "nested" is not a nested stack, then by definition we cannot be its parent
if (!child.nestedStackParent) {
return false;
}
// if this is the direct parent, then we found it
if (parent === child.nestedStackParent) {
return true;
}
// traverse up
return isParentOfNestedStack(parent, child.nestedStackParent);
}
exports.isParentOfNestedStack = isParentOfNestedStack;
/**
* Given two arrays, returns the last common element or `undefined` if there
* isn't (arrays are foriegn).
*/
function findLastCommonElement(path1, path2) {
let i = 0;
while (i < path1.length && i < path2.length) {
if (path1[i] !== path2[i]) {
break;
}
i++;
}
return path1[i - 1];
}
exports.findLastCommonElement = findLastCommonElement;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxtREFBZ0Q7QUFFaEQsbUNBQWdDO0FBRWhDOzs7R0FHRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLFNBQXFCLEVBQUUsR0FBUTtJQUNyRSxNQUFNLEtBQUssR0FBRyxhQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXpCLElBQUksT0FBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsRUFBRTtRQUM1QixPQUFPLEdBQUcsQ0FBQztLQUNaO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3RCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzVEO0lBRUQsTUFBTSxNQUFNLEdBQVEsRUFBRyxDQUFDO0lBQ3hCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNsQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdkIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsdUJBQXVCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzVEO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQXRCRCwwREFzQkM7QUFFRDs7R0FFRztBQUNI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QUFxQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBYkQsc0RBYUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FBSSxLQUFVLEVBQUUsS0FBVTtJQUM3RCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQzNDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN6QixNQUFNO1NBQ1A7UUFFRCxDQUFDLEVBQUUsQ0FBQztLQUNMO0lBRUQsT0FBTyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLENBQUM7QUFYRCxzREFXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiLi9jb25zdHJ1Y3QtY29tcGF0XCI7XG5pbXBvcnQgeyBJbnRyaW5zaWMgfSBmcm9tIFwiLi9wcml2YXRlL2ludHJpbnNpY1wiO1xuaW1wb3J0IHsgSVBvc3RQcm9jZXNzb3IsIElSZXNvbHZlQ29udGV4dCB9IGZyb20gXCIuL3Jlc29sdmFibGVcIjtcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSBcIi4vc3RhY2tcIjtcblxuLyoqXG4gKiBHaXZlbiBhbiBvYmplY3QsIGNvbnZlcnRzIGFsbCBrZXlzIHRvIFBhc2NhbENhc2UgZ2l2ZW4gdGhleSBhcmUgY3VycmVudGx5IGluIGNhbWVsIGNhc2UuXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXBpdGFsaXplUHJvcGVydHlOYW1lcyhjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QsIG9iajogYW55KTogYW55IHtcbiAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihjb25zdHJ1Y3QpO1xuICBvYmogPSBzdGFjay5yZXNvbHZlKG9iaik7XG5cbiAgaWYgKHR5cGVvZihvYmopICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iai5tYXAoeCA9PiBjYXBpdGFsaXplUHJvcGVydHlOYW1lcyhjb25zdHJ1Y3QsIHgpKTtcbiAgfVxuXG4gIGNvbnN0IG5ld09iajogYW55ID0geyB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgIGNvbnN0IGZpcnN0ID0ga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IG5ld0tleSA9IGZpcnN0ICsga2V5LnNsaWNlKDEpO1xuICAgIG5ld09ialtuZXdLZXldID0gY2FwaXRhbGl6ZVByb3BlcnR5TmFtZXMoY29uc3RydWN0LCB2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3T2JqO1xufVxuXG4vKipcbiAqIFR1cm5zIGVtcHR5IGFycmF5cy9vYmplY3RzIHRvIHVuZGVmaW5lZCAoYWZ0ZXIgZXZhbHVhdGluZyB0b2tlbnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaWdub3JlRW1wdHkob2JqOiBhbnkpOiBhbnkge1xuIHJldHVybiBuZXcgUG9zdFJlc29sdmVUb2tlbihvYmosIG8gPT4ge1xuICAgIC8vIHVuZGVmaW5lZC9udWxsXG4gICAgaWYgKG8gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG87XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobykgJiYgby5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZihvKSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMobykubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBvO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY29weSBvZiBgb2JqYCB3aXRob3V0IGB1bmRlZmluZWRgIChvciBgbnVsbGApIHZhbHVlcyBpbiBtYXBzIG9yIGFycmF5cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclVuZGVmaW5lZChvYmo6IGFueSk6IGFueSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLmZpbHRlcih4ID0+IHggIT0gbnVsbCkubWFwKHggPT4gZmlsdGVyVW5kZWZpbmVkKHgpKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Yob2JqKSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCByZXQ6IGFueSA9IHsgfTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJldFtrZXldID0gZmlsdGVyVW5kZWZpbmVkKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogQSBUb2tlbiB0aGF0IGFwcGxpZXMgYSBmdW5jdGlvbiBBRlRFUiByZXNvbHZlIHJlc29sdXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFBvc3RSZXNvbHZlVG9rZW4gZXh0ZW5kcyBJbnRyaW5zaWMgaW1wbGVtZW50cyBJUG9zdFByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBhbnksIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc29yOiAoeDogYW55KSA9PiBhbnkpIHtcbiAgICBzdXBlcih2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgcmVzb2x2ZShjb250ZXh0OiBJUmVzb2x2ZUNvbnRleHQpIHtcbiAgICBjb250ZXh0LnJlZ2lzdGVyUG9zdFByb2Nlc3Nvcih0aGlzKTtcbiAgICByZXR1cm4gc3VwZXIucmVzb2x2ZShjb250ZXh0KTtcbiAgfVxuXG4gIHB1YmxpYyBwb3N0UHJvY2VzcyhvOiBhbnksIF9jb250ZXh0OiBJUmVzb2x2ZUNvbnRleHQpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb2Nlc3NvcihvKTtcbiAgfVxufVxuXG4vKipcbiAqIEByZXR1cm5zIHRoZSBsaXN0IG9mIHN0YWNrcyB0aGF0IGxlYWQgZnJvbSB0aGUgdG9wLWxldmVsIHN0YWNrIChub24tbmVzdGVkKSBhbGwgdGhlIHdheSB0byBhIG5lc3RlZCBzdGFjay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhUb1RvcExldmVsU3RhY2soczogU3RhY2spOiBTdGFja1tdIHtcbiAgaWYgKHMubmVzdGVkU3RhY2tQYXJlbnQpIHtcbiAgICByZXR1cm4gWyAuLi5wYXRoVG9Ub3BMZXZlbFN0YWNrKHMubmVzdGVkU3RhY2tQYXJlbnQpLCBzIF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFsgcyBdO1xuICB9XG59XG5cbi8qKlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGlzIHN0YWNrIGlzIGEgZGlyZWN0IG9yIGluZGlyZWN0IHBhcmVudCBvZiB0aGUgbmVzdGVkXG4gKiBzdGFjayBgbmVzdGVkYC4gSWYgYG5lc3RlZGAgaXMgYSB0b3AtbGV2ZWwgc3RhY2ssIHJldHVybnMgZmFsc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhcmVudE9mTmVzdGVkU3RhY2socGFyZW50OiBTdGFjaywgY2hpbGQ6IFN0YWNrKTogYm9vbGVhbiB7XG4gIC8vIGlmIFwibmVzdGVkXCIgaXMgbm90IGEgbmVzdGVkIHN0YWNrLCB0aGVuIGJ5IGRlZmluaXRpb24gd2UgY2Fubm90IGJlIGl0cyBwYXJlbnRcbiAgaWYgKCFjaGlsZC5uZXN0ZWRTdGFja1BhcmVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGlmIHRoaXMgaXMgdGhlIGRpcmVjdCBwYXJlbnQsIHRoZW4gd2UgZm91bmQgaXRcbiAgaWYgKHBhcmVudCA9PT0gY2hpbGQubmVzdGVkU3RhY2tQYXJlbnQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHRyYXZlcnNlIHVwXG4gIHJldHVybiBpc1BhcmVudE9mTmVzdGVkU3RhY2socGFyZW50LCBjaGlsZC5uZXN0ZWRTdGFja1BhcmVudCk7XG59XG5cbi8qKlxuICogR2l2ZW4gdHdvIGFycmF5cywgcmV0dXJucyB0aGUgbGFzdCBjb21tb24gZWxlbWVudCBvciBgdW5kZWZpbmVkYCBpZiB0aGVyZVxuICogaXNuJ3QgKGFycmF5cyBhcmUgZm9yaWVnbikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTGFzdENvbW1vbkVsZW1lbnQ8VD4ocGF0aDE6IFRbXSwgcGF0aDI6IFRbXSk6IFQgfCB1bmRlZmluZWQge1xuICBsZXQgaSA9IDA7XG4gIHdoaWxlIChpIDwgcGF0aDEubGVuZ3RoICYmIGkgPCBwYXRoMi5sZW5ndGgpIHtcbiAgICBpZiAocGF0aDFbaV0gIT09IHBhdGgyW2ldKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gcGF0aDFbaSAtIDFdO1xufSJdfQ==