@aws-cdk/core
Version:
AWS Cloud Development Kit Core Library
78 lines • 8.42 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.LogicalIDs = void 0;
/**
* Class that keeps track of the logical IDs that are assigned to resources
*
* Supports renaming the generated IDs.
*/
class LogicalIDs {
constructor() {
/**
* The rename table (old to new)
*/
this.renames = {};
/**
* All assigned names (new to old, may be identical)
*
* This is used to ensure that:
*
* - No 2 resources end up with the same final logical ID, unless they were the same to begin with.
* - All renames have been used at the end of renaming.
*/
this.reverse = {};
}
/**
* Rename a logical ID from an old ID to a new ID
*/
addRename(oldId, newId) {
if (oldId in this.renames) {
throw new Error(`A rename has already been registered for '${oldId}'`);
}
this.renames[oldId] = newId;
}
/**
* Return the renamed version of an ID or the original ID.
*/
applyRename(oldId) {
let newId = oldId;
if (oldId in this.renames) {
newId = this.renames[oldId];
}
// If this newId has already been used, it must have been with the same oldId
if (newId in this.reverse && this.reverse[newId] !== oldId) {
// eslint-disable-next-line max-len
throw new Error(`Two objects have been assigned the same Logical ID: '${this.reverse[newId]}' and '${oldId}' are now both named '${newId}'.`);
}
this.reverse[newId] = oldId;
validateLogicalId(newId);
return newId;
}
/**
* Throw an error if not all renames have been used
*
* This is to assure that users didn't make typoes when registering renames.
*/
assertAllRenamesApplied() {
const keys = new Set();
Object.keys(this.renames).forEach(keys.add.bind(keys));
Object.keys(this.reverse).map(newId => {
keys.delete(this.reverse[newId]);
});
if (keys.size !== 0) {
const unusedRenames = Array.from(keys.values());
throw new Error(`The following Logical IDs were attempted to be renamed, but not found: ${unusedRenames.join(', ')}`);
}
}
}
exports.LogicalIDs = LogicalIDs;
const VALID_LOGICALID_REGEX = /^[A-Za-z][A-Za-z0-9]{1,254}$/;
/**
* Validate logical ID is valid for CloudFormation
*/
function validateLogicalId(logicalId) {
if (!VALID_LOGICALID_REGEX.test(logicalId)) {
throw new Error(`Logical ID must adhere to the regular expression: ${VALID_LOGICALID_REGEX.toString()}, got '${logicalId}'`);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naWNhbC1pZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxvZ2ljYWwtaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7R0FJRztBQUNILE1BQWEsVUFBVTtJQUF2QjtRQUNFOztXQUVHO1FBQ2MsWUFBTyxHQUE0QixFQUFFLENBQUM7UUFFdkQ7Ozs7Ozs7V0FPRztRQUNjLFlBQU8sR0FBMkIsRUFBRSxDQUFDO0lBa0R4RCxDQUFDO0lBaERDOztPQUVHO0lBQ0ksU0FBUyxDQUFDLEtBQWEsRUFBRSxLQUFhO1FBQzNDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUN4RTtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO0tBQzdCO0lBRUQ7O09BRUc7SUFDSSxXQUFXLENBQUMsS0FBYTtRQUM5QixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUN6QixLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3QjtRQUVELDZFQUE2RTtRQUM3RSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQzFELG1DQUFtQztZQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUsseUJBQXlCLEtBQUssSUFBSSxDQUFDLENBQUM7U0FDL0k7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUU1QixpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQ7Ozs7T0FJRztJQUNJLHVCQUF1QjtRQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXZELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDbkIsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLDBFQUEwRSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN2SDtLQUNGO0NBQ0Y7QUFoRUQsZ0NBZ0VDO0FBRUQsTUFBTSxxQkFBcUIsR0FBRyw4QkFBOEIsQ0FBQztBQUU3RDs7R0FFRztBQUNILFNBQVMsaUJBQWlCLENBQUMsU0FBaUI7SUFDMUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0tBQzlIO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xhc3MgdGhhdCBrZWVwcyB0cmFjayBvZiB0aGUgbG9naWNhbCBJRHMgdGhhdCBhcmUgYXNzaWduZWQgdG8gcmVzb3VyY2VzXG4gKlxuICogU3VwcG9ydHMgcmVuYW1pbmcgdGhlIGdlbmVyYXRlZCBJRHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dpY2FsSURzIHtcbiAgLyoqXG4gICAqIFRoZSByZW5hbWUgdGFibGUgKG9sZCB0byBuZXcpXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbmFtZXM6IHtbb2xkOiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG5cbiAgLyoqXG4gICAqIEFsbCBhc3NpZ25lZCBuYW1lcyAobmV3IHRvIG9sZCwgbWF5IGJlIGlkZW50aWNhbClcbiAgICpcbiAgICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0OlxuICAgKlxuICAgKiAtIE5vIDIgcmVzb3VyY2VzIGVuZCB1cCB3aXRoIHRoZSBzYW1lIGZpbmFsIGxvZ2ljYWwgSUQsIHVubGVzcyB0aGV5IHdlcmUgdGhlIHNhbWUgdG8gYmVnaW4gd2l0aC5cbiAgICogLSBBbGwgcmVuYW1lcyBoYXZlIGJlZW4gdXNlZCBhdCB0aGUgZW5kIG9mIHJlbmFtaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZXZlcnNlOiB7W2lkOiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG5cbiAgLyoqXG4gICAqIFJlbmFtZSBhIGxvZ2ljYWwgSUQgZnJvbSBhbiBvbGQgSUQgdG8gYSBuZXcgSURcbiAgICovXG4gIHB1YmxpYyBhZGRSZW5hbWUob2xkSWQ6IHN0cmluZywgbmV3SWQ6IHN0cmluZykge1xuICAgIGlmIChvbGRJZCBpbiB0aGlzLnJlbmFtZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQSByZW5hbWUgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIGZvciAnJHtvbGRJZH0nYCk7XG4gICAgfVxuICAgIHRoaXMucmVuYW1lc1tvbGRJZF0gPSBuZXdJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHJlbmFtZWQgdmVyc2lvbiBvZiBhbiBJRCBvciB0aGUgb3JpZ2luYWwgSUQuXG4gICAqL1xuICBwdWJsaWMgYXBwbHlSZW5hbWUob2xkSWQ6IHN0cmluZykge1xuICAgIGxldCBuZXdJZCA9IG9sZElkO1xuICAgIGlmIChvbGRJZCBpbiB0aGlzLnJlbmFtZXMpIHtcbiAgICAgIG5ld0lkID0gdGhpcy5yZW5hbWVzW29sZElkXTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIG5ld0lkIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCwgaXQgbXVzdCBoYXZlIGJlZW4gd2l0aCB0aGUgc2FtZSBvbGRJZFxuICAgIGlmIChuZXdJZCBpbiB0aGlzLnJldmVyc2UgJiYgdGhpcy5yZXZlcnNlW25ld0lkXSAhPT0gb2xkSWQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFR3byBvYmplY3RzIGhhdmUgYmVlbiBhc3NpZ25lZCB0aGUgc2FtZSBMb2dpY2FsIElEOiAnJHt0aGlzLnJldmVyc2VbbmV3SWRdfScgYW5kICcke29sZElkfScgYXJlIG5vdyBib3RoIG5hbWVkICcke25ld0lkfScuYCk7XG4gICAgfVxuICAgIHRoaXMucmV2ZXJzZVtuZXdJZF0gPSBvbGRJZDtcblxuICAgIHZhbGlkYXRlTG9naWNhbElkKG5ld0lkKTtcbiAgICByZXR1cm4gbmV3SWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3cgYW4gZXJyb3IgaWYgbm90IGFsbCByZW5hbWVzIGhhdmUgYmVlbiB1c2VkXG4gICAqXG4gICAqIFRoaXMgaXMgdG8gYXNzdXJlIHRoYXQgdXNlcnMgZGlkbid0IG1ha2UgdHlwb2VzIHdoZW4gcmVnaXN0ZXJpbmcgcmVuYW1lcy5cbiAgICovXG4gIHB1YmxpYyBhc3NlcnRBbGxSZW5hbWVzQXBwbGllZCgpIHtcbiAgICBjb25zdCBrZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgT2JqZWN0LmtleXModGhpcy5yZW5hbWVzKS5mb3JFYWNoKGtleXMuYWRkLmJpbmQoa2V5cykpO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5yZXZlcnNlKS5tYXAobmV3SWQgPT4ge1xuICAgICAga2V5cy5kZWxldGUodGhpcy5yZXZlcnNlW25ld0lkXSk7XG4gICAgfSk7XG5cbiAgICBpZiAoa2V5cy5zaXplICE9PSAwKSB7XG4gICAgICBjb25zdCB1bnVzZWRSZW5hbWVzID0gQXJyYXkuZnJvbShrZXlzLnZhbHVlcygpKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGZvbGxvd2luZyBMb2dpY2FsIElEcyB3ZXJlIGF0dGVtcHRlZCB0byBiZSByZW5hbWVkLCBidXQgbm90IGZvdW5kOiAke3VudXNlZFJlbmFtZXMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgVkFMSURfTE9HSUNBTElEX1JFR0VYID0gL15bQS1aYS16XVtBLVphLXowLTldezEsMjU0fSQvO1xuXG4vKipcbiAqIFZhbGlkYXRlIGxvZ2ljYWwgSUQgaXMgdmFsaWQgZm9yIENsb3VkRm9ybWF0aW9uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTG9naWNhbElkKGxvZ2ljYWxJZDogc3RyaW5nKSB7XG4gIGlmICghVkFMSURfTE9HSUNBTElEX1JFR0VYLnRlc3QobG9naWNhbElkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTG9naWNhbCBJRCBtdXN0IGFkaGVyZSB0byB0aGUgcmVndWxhciBleHByZXNzaW9uOiAke1ZBTElEX0xPR0lDQUxJRF9SRUdFWC50b1N0cmluZygpfSwgZ290ICcke2xvZ2ljYWxJZH0nYCk7XG4gIH1cbn1cbiJdfQ==
;