{"version":3,"file":"typescript-package-controlled-descriptor.mjs","sources":["../../../package/controlled-descriptor/src/lib/controlled-descriptor-core.abstract.ts","../../../package/controlled-descriptor/src/lib/controlled-descriptor-base.abstract.ts","../../../package/controlled-descriptor/src/lib/controlled-descriptor.class.ts","../../../package/controlled-descriptor/src/public-api.ts","../../../package/controlled-descriptor/src/typescript-package-controlled-descriptor.ts"],"sourcesContent":["// Abstract.\nimport { WrappedDescriptorCore } from \"@typescript-package/wrapped-descriptor\";\n// Interface.\nimport { ControlledPropertyDescriptor } from \"@typedly/controlled-descriptor\";\nimport { WrappedPropertyDescriptorController } from \"@typedly/controller\";\n// Type.\nimport { GetterCallback, SetterCallback } from '@typedly/callback';\n/**\n * @description The core abstraction class for controlled descriptors.\n * @export\n * @abstract\n * @class ControlledDescriptorCore\n * @template [O=any] The type of the object.\n * @template {keyof O} [K=keyof O] The type of the key.\n * @template {K extends keyof O ? O[K] : any} [V=K extends keyof O ? O[K] : any] The type of the value.\n * @template {boolean} [A=boolean] The type of the active.\n * @template {boolean} [N=boolean] The type of the enabled.\n * @template {boolean} [C=boolean] The type of the configurable.\n * @template {boolean} [E=boolean] The type of the enumerable.\n * @template {ControlledPropertyDescriptor<O, K, V, A, N, C, E, D> | PropertyDescriptor} [D=ControlledPropertyDescriptor<O, K, V, A, N, C, E, any>] The type of the previous descriptor.\n * @extends {WrappedDescriptorCore<O, K, V, A, N, C, E, D>}\n * @implements {ControlledPropertyDescriptor<O, K, V, A, N, C, E, D>}\n */\nexport abstract class ControlledDescriptorCore<\n  // Object.\n  O = any,\n  // Key.\n  K extends keyof O = keyof O,\n  // Value.\n  V extends K extends keyof O ? O[K] : any = K extends keyof O ? O[K] : any,\n  // Active.\n  A extends boolean = boolean,\n  // Enabled.\n  N extends boolean = boolean,\n  // Configurable.\n  C extends boolean = boolean,\n  // Enumerable.\n  E extends boolean = boolean,\n  // The type of the previous descriptor.\n  D extends ControlledPropertyDescriptor<O, K, V, A, N, C, E, D> | PropertyDescriptor = ControlledPropertyDescriptor<O, K, V, A, N, C, E, any>,\n> extends WrappedDescriptorCore<O, K, V, A, N, C, E, D>\n  implements ControlledPropertyDescriptor<O, K, V, A, N, C, E, D> {\n  /**\n   * @inheritdoc\n   * @abstract\n   * @readonly\n   * @type {(A | { onGet?: boolean; onSet?: boolean })}\n   */\n  abstract override get active(): A | { onGet?: boolean; onSet?: boolean };\n\n  /**\n   * @description The `controller` for the descriptor.\n   * @public\n   * @readonly\n   * @type {WrappedPropertyDescriptorController<O, K, V, A, N, C, E, D>}\n   */\n  abstract get controller(): WrappedPropertyDescriptorController<O, K, V, A, N, C, E, D>;\n\n  /**\n   * @inheritdoc\n   * @abstract\n   * @readonly\n   * @type {N}\n   */\n  abstract override get enabled(): N;\n\n  /**\n   * @inheritdoc\n   * @abstract\n   * @readonly\n   * @type {(number | undefined)}\n   */\n  abstract override get index(): number | undefined;\n\n  /**\n   * @inheritdoc\n   * @abstract\n   * @readonly\n   * @type {K}\n   */\n  abstract override get key(): K;\n\n  /**\n   * @description\n   * @abstract\n   * @readonly\n   * @type {D}\n   */\n  abstract get previous(): D | undefined;\n\n  /**\n   * @inheritdoc\n   * @abstract\n   * @readonly\n   * @type {PropertyKey}\n   */\n  abstract override get privateKey(): PropertyKey;\n\n  /**\n   * @inheritdoc\n   * @abstract\n   * @readonly\n   * @type {(this: O, descriptor?: D) => V}\n   */\n  abstract override get get(): (this: O, descriptor?: D) => V;\n\n  /**\n   * @inheritdoc\n   * @abstract\n   * @readonly\n   * @type {(GetterCallback<O, K> | undefined)}\n   */\n  abstract override get onGet(): GetterCallback<O, K> | undefined;\n\n  /**\n   * @inheritdoc\n   * @abstract\n   * @readonly\n   * @type {(SetterCallback<O, K> | undefined)}\n   */\n  abstract override get onSet(): SetterCallback<O, K> | undefined;\n\n  /**\n   * @inheritdoc\n   * @abstract\n   * @readonly\n   * @type {(this: O, value: V, descriptor?: D) => void}\n   */\n  abstract override get set(): (this: O, value: V, descriptor?: D) => void;\n}\n","// Abstract.\nimport { ControlledDescriptorCore } from './controlled-descriptor-core.abstract';\n// Interface.\nimport { ControlledPropertyDescriptor } from '@typedly/controlled-descriptor';\nimport { WrappedPropertyDescriptor } from '@typedly/descriptor';\nimport { WrappedPropertyDescriptorController } from '@typedly/controller';\n/**\n * @description The base abstraction class for controlled descriptors.\n * @export\n * @abstract\n * @class ControlledDescriptorBase\n * @template [O=any] The type of object.\n * @template {keyof O} [K=keyof O] The type of the key.\n * @template {K extends keyof O ? O[K] : any} [V=K extends keyof O ? O[K] : any] The type of the value.\n * @template {boolean} [A=boolean] The type of active.\n * @template {boolean} [N=boolean] The type of enabled.\n * @template {boolean} [C=boolean] The type of configurable.\n * @template {boolean} [E=boolean] The type of enumerable.\n * @template {ControlledPropertyDescriptor<O, K, V, A, N, C, E, D> | PropertyDescriptor} [D=ControlledPropertyDescriptor<O, K, V, A, N, C, E, any>] The type of previous and `get`, `set` descriptor.\n * @extends {ControlledDescriptorCore<O, K, V, A, N, C, E, D>}\n */\nexport abstract class ControlledDescriptorBase<\n  // Object.\n  O = any,\n  // Key.\n  K extends keyof O = keyof O,\n  // Value.\n  V extends K extends keyof O ? O[K] : any = K extends keyof O ? O[K] : any,\n  // Active.\n  A extends boolean = boolean,\n  // Enabled.\n  N extends boolean = boolean,\n  // Configurable.\n  C extends boolean = boolean,\n  // Enumerable.\n  E extends boolean = boolean,\n  // The type of the previous descriptor.\n  D extends ControlledPropertyDescriptor<O, K, V, A, N, C, E, D> | PropertyDescriptor = ControlledPropertyDescriptor<O, K, V, A, N, C, E, any>,\n> extends ControlledDescriptorCore<O, K, V, A, N, C, E, D> {\n  /**\n   * @inheritdoc\n   */\n  public override get active() {\n    return this.controller.active;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public override get controller() {\n    return this.#controller;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public override get enabled() {\n    return this.controller.enabled;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public override get index() {\n    return this.controller.index;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public override get key() {\n    return this.controller.key;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public override get onGet() {\n    return this.controller.onGet;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public override get onSet() {\n    return this.controller.onSet;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public get previous() {\n    return this.controller.previous;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public override get previousDescriptor() {\n    return this.controller.previousDescriptor;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public override get privateKey() {\n    return this.controller.privateKey;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public get get() {\n    return this.controller.get!;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public get set() {\n    return this.controller.set!;\n  }\n\n  /**\n   * @description Privately stored controller.\n   * @type {WrappedPropertyDescriptorController<O, K, V, A, N, C, E, D>}\n   */\n  #controller: WrappedPropertyDescriptorController<O, K, V, A, N, C, E, D>;\n  \n  /**\n   * Creates an instance of `WrappedDescriptorBase` child class.\n   * @constructor\n   * @param {O} object The object to define the descriptor on.\n   * @param {K} key The key of the object to define the descriptor on.\n   * @param {Partial<WrappedPropertyDescriptor<O, K, V, A, N, C, E, D>>} attributes The property descriptor to wrap.\n   * @param {new (\n   *       object: O,\n   *       key: K,\n   *       attributes: Partial<WrappedPropertyDescriptor<O, K, V, A, N, C, E, D>>,\n   *     ) => WrappedPropertyDescriptorController<O, K, V, A, N, C, E, D>} controller The controller to control behavior.\n   */\n  constructor(\n    object: O,\n    key: K,\n    attributes: Partial<WrappedPropertyDescriptor<O, K, V, A, N, C, E, D>>,\n    controller: new (\n      object: O,\n      key: K,\n      attributes: Partial<WrappedPropertyDescriptor<O, K, V, A, N, C, E, D>>,\n    ) => WrappedPropertyDescriptorController<O, K, V, A, N, C, E, D>\n  ) {\n    super({ configurable: attributes.configurable, enumerable: attributes.enumerable });\n    // Set the controller.\n    this.#controller = new controller(\n      object,\n      key, { \n        ...attributes,\n        ...super.wrap({\n          get: attributes.get,\n          set: attributes.set\n        })\n      }\n    );\n  }\n}\n","// Abstract.\nimport { ControlledDescriptorBase } from './controlled-descriptor-base.abstract';\n// Class.\nimport { ControlledDescriptorController } from '@typescript-package/controller';\n// Interface.\nimport { ControlledPropertyDescriptor } from '@typedly/controlled-descriptor';\nimport { WrappedPropertyDescriptor } from '@typedly/descriptor';\nimport { WrappedPropertyDescriptorController } from '@typedly/controller';\n/**\n * @description The concrete implementation controlled descriptor class with controller to control its behavior.\n * @export\n * @class ControlledDescriptor\n * @template [O=any] The type of object.\n * @template {keyof O} [K=keyof O] The type of the key.\n * @template {K extends keyof O ? O[K] : any} [V=K extends keyof O ? O[K] : any] The type of the value.\n * @template {boolean} [A=boolean] The type of the active.\n * @template {boolean} [N=boolean] The type of the enabled.\n * @template {boolean} [C=boolean] The type of the configurable.\n * @template {boolean} [E=boolean] The type of the enumerable.\n * @template {ControlledPropertyDescriptor<O, K, V, A, N, C, E, D> | PropertyDescriptor} [D=ControlledPropertyDescriptor<O, K, V, A, N, C, E, any>] The type of previous and `get`, `set` descriptor.\n * @extends {ControlledDescriptorBase<O, K, V, A, N, C, E, D>}\n */\nexport class ControlledDescriptor<\n  // Object.\n  O = any,\n  // Key.\n  K extends keyof O = keyof O,\n  // Value.\n  V extends K extends keyof O ? O[K] : any = K extends keyof O ? O[K] : any,\n  // Active.\n  A extends boolean = boolean,\n  // Enabled.\n  N extends boolean = boolean,\n  // Configurable.\n  C extends boolean = boolean,\n  // Enumerable.\n  E extends boolean = boolean,\n  // Descriptor.\n  D extends ControlledPropertyDescriptor<O, K, V, A, N, C, E, D> | PropertyDescriptor = ControlledPropertyDescriptor<O, K, V, A, N, C, E, any>,\n> extends ControlledDescriptorBase<O, K, V, A, N, C, E, D> {\n  /**\n   * @description The string tag for the descriptor.\n   * @public\n   * @readonly\n   * @type {string}\n   */\n  public get [Symbol.toStringTag](): string {\n    return 'ControlledDescriptor';\n  }\n\n  /**\n   * Creates an instance of `ControlledDescriptor`.\n   * @constructor\n   * @param {O} object The object of the key.\n   * @param {K} key The object key.\n   * @param {Partial<WrappedPropertyDescriptor<O, K, V, A, N, C, E, D>>} [attributes={}] The attributes of the descriptor.\n   * @param {new (\n   *       object: O,\n   *       key: K,\n   *       descriptor: Partial<WrappedPropertyDescriptor<O, K, V, A, N, C, E, D>>,\n   *     ) => WrappedPropertyDescriptorController<O, K, V, A, N, C, E, D>} [controller=ControlledDescriptorController] The controller to control accessors.\n   */\n  constructor(\n    object: O,\n    key: K,\n    attributes: Partial<WrappedPropertyDescriptor<O, K, V, A, N, C, E, D>> = {},\n    controller: new (\n      object: O,\n      key: K,\n      descriptor: Partial<WrappedPropertyDescriptor<O, K, V, A, N, C, E, D>>,\n    ) => WrappedPropertyDescriptorController<O, K, V, A, N, C, E, D> = ControlledDescriptorController<O, K, V, A, N, C, E, D>\n  ) {\n    super(object, key, attributes, controller);\n  }\n}\n","/*\n * Public API Surface of controllable-descriptor\n */\n\nexport {\n  ControlledDescriptor,\n  ControlledDescriptorBase,\n  ControlledDescriptorCore,\n} from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AAAA;AAOA;;;;;;;;;;;;;;;AAeG;AACG,MAAgB,wBAiBpB,SAAQ,qBAA6C,CAAA;AAyFtD;;ACjID;AAMA;;;;;;;;;;;;;;AAcG;AACG,MAAgB,wBAiBpB,SAAQ,wBAAgD,CAAA;AACxD;;AAEG;AACH,IAAA,IAAoB,MAAM,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM;;AAG/B;;AAEG;AACH,IAAA,IAAoB,UAAU,GAAA;QAC5B,OAAO,IAAI,CAAC,WAAW;;AAGzB;;AAEG;AACH,IAAA,IAAoB,OAAO,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO;;AAGhC;;AAEG;AACH,IAAA,IAAoB,KAAK,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK;;AAG9B;;AAEG;AACH,IAAA,IAAoB,GAAG,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG;;AAG5B;;AAEG;AACH,IAAA,IAAoB,KAAK,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK;;AAG9B;;AAEG;AACH,IAAA,IAAoB,KAAK,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK;;AAG9B;;AAEG;AACH,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ;;AAGjC;;AAEG;AACH,IAAA,IAAoB,kBAAkB,GAAA;AACpC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,kBAAkB;;AAG3C;;AAEG;AACH,IAAA,IAAoB,UAAU,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU;;AAGnC;;AAEG;AACH,IAAA,IAAW,GAAG,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAI;;AAG7B;;AAEG;AACH,IAAA,IAAW,GAAG,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAI;;AAG7B;;;AAGG;AACH,IAAA,WAAW;AAEX;;;;;;;;;;;AAWG;AACH,IAAA,WAAA,CACE,MAAS,EACT,GAAM,EACN,UAAsE,EACtE,UAIgE,EAAA;AAEhE,QAAA,KAAK,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC;;QAEnF,IAAI,CAAC,WAAW,GAAG,IAAI,UAAU,CAC/B,MAAM,EACN,GAAG,EAAE;AACH,YAAA,GAAG,UAAU;YACb,GAAG,KAAK,CAAC,IAAI,CAAC;gBACZ,GAAG,EAAE,UAAU,CAAC,GAAG;gBACnB,GAAG,EAAE,UAAU,CAAC;aACjB;AACF,SAAA,CACF;;AAEJ;;ACpKD;AAQA;;;;;;;;;;;;;AAaG;AACG,MAAO,oBAiBX,SAAQ,wBAAgD,CAAA;AACxD;;;;;AAKG;AACH,IAAA,KAAY,MAAM,CAAC,WAAW,CAAC,GAAA;AAC7B,QAAA,OAAO,sBAAsB;;AAG/B;;;;;;;;;;;AAWG;IACH,WACE,CAAA,MAAS,EACT,GAAM,EACN,UAAA,GAAyE,EAAE,EAC3E,UAAA,IAImE,8BAAsD,CAAA,EAAA;QAEzH,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,CAAC;;AAE7C;;AC1ED;;AAEG;;ACFH;;AAEG;;;;"}