UNPKG

projen

Version:

CDK for software projects

38 lines 3.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.recreate = recreate; /** * Re-create an object by re-invoking its own constructor with new arguments. * * The returned value is an instance of the *exact same* (sub)class as * `instance`, because the runtime `constructor` is used rather than a * statically known type. This makes it the building block for a component's * typed `copy()` method: * * ```ts * class Runner extends Component { * constructor(scope: IConstruct, private readonly options: RunnerOptions = {}, id?: string) { * super(scope, id); * } * public copy(overrides: RunnerOptions = {}, id?: string, scope = this.project): Runner { * return recreate(this, scope, { ...this.options, ...overrides }, id); * } * } * ``` * * `recreate` is intentionally a free, generic function and an internal helper * (not part of the public API). jsii cannot express a shared, typed `copy()` * contract (parameter types are invariant on both interface implementations and * class overrides), so copyability is modelled as a convention: each component * declares its own fully-typed `copy()` that calls `recreate`. * * @param instance the object to re-create * @param args the arguments to pass to the constructor * @returns a new instance of the same class as `instance` */ function recreate(instance, ...args) { const ctor = instance .constructor; return new ctor(...args); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjcmVhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9yZWNyZWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTZCQSw0QkFJQztBQWpDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILFNBQWdCLFFBQVEsQ0FBbUIsUUFBVyxFQUFFLEdBQUcsSUFBVztJQUNwRSxNQUFNLElBQUksR0FBSSxRQUF1RDtTQUNsRSxXQUFXLENBQUM7SUFDZixPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmUtY3JlYXRlIGFuIG9iamVjdCBieSByZS1pbnZva2luZyBpdHMgb3duIGNvbnN0cnVjdG9yIHdpdGggbmV3IGFyZ3VtZW50cy5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlICpleGFjdCBzYW1lKiAoc3ViKWNsYXNzIGFzXG4gKiBgaW5zdGFuY2VgLCBiZWNhdXNlIHRoZSBydW50aW1lIGBjb25zdHJ1Y3RvcmAgaXMgdXNlZCByYXRoZXIgdGhhbiBhXG4gKiBzdGF0aWNhbGx5IGtub3duIHR5cGUuIFRoaXMgbWFrZXMgaXQgdGhlIGJ1aWxkaW5nIGJsb2NrIGZvciBhIGNvbXBvbmVudCdzXG4gKiB0eXBlZCBgY29weSgpYCBtZXRob2Q6XG4gKlxuICogYGBgdHNcbiAqIGNsYXNzIFJ1bm5lciBleHRlbmRzIENvbXBvbmVudCB7XG4gKiAgIGNvbnN0cnVjdG9yKHNjb3BlOiBJQ29uc3RydWN0LCBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFJ1bm5lck9wdGlvbnMgPSB7fSwgaWQ/OiBzdHJpbmcpIHtcbiAqICAgICBzdXBlcihzY29wZSwgaWQpO1xuICogICB9XG4gKiAgIHB1YmxpYyBjb3B5KG92ZXJyaWRlczogUnVubmVyT3B0aW9ucyA9IHt9LCBpZD86IHN0cmluZywgc2NvcGUgPSB0aGlzLnByb2plY3QpOiBSdW5uZXIge1xuICogICAgIHJldHVybiByZWNyZWF0ZSh0aGlzLCBzY29wZSwgeyAuLi50aGlzLm9wdGlvbnMsIC4uLm92ZXJyaWRlcyB9LCBpZCk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIGByZWNyZWF0ZWAgaXMgaW50ZW50aW9uYWxseSBhIGZyZWUsIGdlbmVyaWMgZnVuY3Rpb24gYW5kIGFuIGludGVybmFsIGhlbHBlclxuICogKG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJKS4ganNpaSBjYW5ub3QgZXhwcmVzcyBhIHNoYXJlZCwgdHlwZWQgYGNvcHkoKWBcbiAqIGNvbnRyYWN0IChwYXJhbWV0ZXIgdHlwZXMgYXJlIGludmFyaWFudCBvbiBib3RoIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbnMgYW5kXG4gKiBjbGFzcyBvdmVycmlkZXMpLCBzbyBjb3B5YWJpbGl0eSBpcyBtb2RlbGxlZCBhcyBhIGNvbnZlbnRpb246IGVhY2ggY29tcG9uZW50XG4gKiBkZWNsYXJlcyBpdHMgb3duIGZ1bGx5LXR5cGVkIGBjb3B5KClgIHRoYXQgY2FsbHMgYHJlY3JlYXRlYC5cbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2UgdGhlIG9iamVjdCB0byByZS1jcmVhdGVcbiAqIEBwYXJhbSBhcmdzIHRoZSBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3JcbiAqIEByZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBzYW1lIGNsYXNzIGFzIGBpbnN0YW5jZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlY3JlYXRlPFQgZXh0ZW5kcyBvYmplY3Q+KGluc3RhbmNlOiBULCAuLi5hcmdzOiBhbnlbXSk6IFQge1xuICBjb25zdCBjdG9yID0gKGluc3RhbmNlIGFzIHsgY29uc3RydWN0b3I6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQgfSlcbiAgICAuY29uc3RydWN0b3I7XG4gIHJldHVybiBuZXcgY3RvciguLi5hcmdzKTtcbn1cbiJdfQ==