{"id":18705596,"url":"https://github.com/angular-package/property","last_synced_at":"2026-01-27T12:36:30.041Z","repository":{"id":57097725,"uuid":"343551558","full_name":"angular-package/property","owner":"angular-package","description":"Features to handle object properties.","archived":false,"fork":false,"pushed_at":"2024-11-04T06:04:14.000Z","size":1227,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-01T09:13:38.231Z","etag":null,"topics":["accessor-descriptor","angular","data-descriptor","descriptor-interface","javascript","objects","property","property-descriptor","property-descriptors","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/angular-package.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.YML","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["angular-package"],"patreon":"angularpackage","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2021-03-01T20:44:20.000Z","updated_at":"2024-10-06T01:17:11.000Z","dependencies_parsed_at":"2024-11-01T07:23:20.214Z","dependency_job_id":"a18d47fc-9130-4629-b807-282bb40c558b","html_url":"https://github.com/angular-package/property","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/angular-package/property","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-package%2Fproperty","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-package%2Fproperty/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-package%2Fproperty/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-package%2Fproperty/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/angular-package","download_url":"https://codeload.github.com/angular-package/property/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-package%2Fproperty/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28813215,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T12:25:15.069Z","status":"ssl_error","status_checked_at":"2026-01-27T12:25:05.297Z","response_time":168,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["accessor-descriptor","angular","data-descriptor","descriptor-interface","javascript","objects","property","property-descriptor","property-descriptors","typescript"],"created_at":"2024-11-07T12:11:27.192Z","updated_at":"2026-01-27T12:36:30.022Z","avatar_url":"https://github.com/angular-package.png","language":"TypeScript","funding_links":["https://github.com/sponsors/angular-package","https://patreon.com/angularpackage","https://img.shields.io/static/v1?label=Sponsor\u0026message=%E2%9D%A4\u0026logo=GitHub\u0026link=https://github.com/sponsors/angular-package","https://patreon.com/sciborrudnicki"],"categories":[],"sub_categories":[],"readme":"# angular-package\n\n\u003ca href='https://angular-package.dev' target='_blank'\u003e\n  \u003cimg align=\"right\"  width=\"92\" height=\"92\" src=\"https://avatars.githubusercontent.com/u/31412194?s=400\u0026u=c9929aa36826318ccac8f7b84516e1ce3af7e21c\u0026v=4\" /\u003e\n\u003c/a\u003e\n\nThe angular-package supports the development process of [angular](https://angular.io)-based applications in varied ways through the thoughtful, reusable, easy-to-use small pieces of code called packages.\n\n## angular-package/property\n\nFeatures to handle properties.\n\n\u003c!-- npm badge --\u003e\n[![npm version][property-npm-badge-svg]][property-npm-badge]\n\u003c!-- GitHub badges --\u003e\n[![GitHub issues][property-badge-issues]][property-issues]\n[![GitHub forks][property-badge-forks]][property-forks]\n[![GitHub stars][property-badge-stars]][property-stars]\n[![GitHub license][property-badge-license]][property-license]\n\u003c!-- Sponsors badges --\u003e\n[![GitHub sponsors][github-badge-sponsor]][github-sponsor-link]\n[![Support me on Patreon][patreon-badge]][patreon-link]\n\n```typescript\nexport {\n  // Class.\n  Property,\n  WrapProperty,\n} from './lib';\n\nexport {\n  // Class.\n  Descriptor,\n  Descriptors,\n  // Interface.\n  AccessorDescriptor,\n  CommonDescriptor,\n  DataDescriptor,\n  // Type.\n  ThisAccessorDescriptor,\n} from './descriptor';\n\nexport { GetterCallback, SetterCallback } from './type';\n```\n\n[Previous README.md](https://github.com/angular-package/property/blob/44608671696872ea163b8b6cfa704471fafd8ac3/README.md)\n\n## Table of contents\n\n* [Skeleton](#skeleton)\n* [Installation](#installation)\n* [Callback](#callback)\n* [Package](#package)\n  * [Descriptor](#descriptor-package)\n    * Class\n      * [`Descriptor`](#descriptor)\n      * [`AccessorDescriptors`](#accessordescriptors)\n      * [`DataDescriptors`](#datadescriptors)\n    * [Interface](#descriptor-interface)\n    * [Type](#descriptor-type)\n  * [Descriptors](#descriptors)\n* [Git](#git)\n  * [Commit](#commit)\n  * [Versioning](#versioning)\n* [License](#license)\n* [Packages](#packages)\n\n## How angular-package understands\n\nChecks\n\u003e Is to check the provided value to be **the same** as **expected**.\n\nType guard (constrain)\n\u003e Constrains the parameter type to **not let** input **unexpected** value in the **code editor**.\n\nGuards\n\u003e Is a **combination** of both above, **constrains** the type of the parameter in the **code editor**, and checks its argument.\n\nSets\n\u003e Sets the provided value in the `object`.\n\nDefines\n\u003e Returns defined value from the method, instead of storing it in the `object`.\n\n## Skeleton\n\nThis package was generated by the [skeleton workspace][skeleton] with [Angular CLI](https://github.com/angular/angular-cli) version `14.2.0`.\n\nCopy this package to the `packages/property` folder of the [skeleton workspace][skeleton] then run the commands below.\n\n\u003cbr\u003e\n\n## Code scaffolding\n\nRun `ng generate component component-name --project property` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project property`.\n\u003e Note: Don't forget to add `--project property` or else it will be added to the default project in your `angular.json` file.\n\n### Build\n\nRun `ng build property` to build the project. The build artifacts will be stored in the `dist/` directory.\n\n### Publishing\n\nAfter building your library with `ng build property`, go to the dist folder `cd dist/property` and run `npm publish`.\n\n## Running unit tests\n\nRun `ng test property` to execute the unit tests via [Karma](https://karma-runner.github.io).\n\n## Further help\n\nTo get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.\n\n\u003cbr\u003e\n\n## Installation\n\nInstall `@angular-package/property` package with command:\n\n```bash\nnpm i --save @angular-package/property\n```\n\n----\n\n## Callback\n\nWrapper for the [`ResultCallback`][package-type-resultcallback] type function to throw an [`Error`][js-error] with the specified message on the specified `false` or `true` state.\n\n```typescript\nexport const errorCallback: ErrorCallback  = (\n  message: string,\n  on: boolean = false\n): ResultCallback =\u003e {\n  return (result: boolean, value: any): boolean =\u003e {\n    if (result === on) {\n      throw new Error(\n        `${message}, got value ${\n          typeof value === 'object' ? JSON.stringify(value) : value\n        }`\n      );\n    }\n    return result;\n  };\n};\n```\n\n----\n\n## Package\n\n### Descriptor package\n\nDescriptor features to import.\n\n```typescript\n// Class.\nexport {\n  Descriptor,\n  Descriptors\n} from './lib';\n\n// Interface.\nexport {\n  AccessorDescriptor,\n  CommonDescriptor,\n  DataDescriptor\n} from './interface';\n\n// Type.\nexport {\n  ThisAccessorDescriptor\n} from './type';\n\n```\n\n----\n\n### `Descriptor`\n\nHandles object property descriptor.\n\n**Features:**\n\n* Strictly defines accessor and data descriptor with the [`defineAccessor()`][descriptor-defineaccessor] and [`defineData()`][descriptor-definedata] static methods.\n* Strictly sets, and stores accessor and data descriptor with the `Descriptor` instance respectively `set.accessor()` and `set.data()` methods of the instance.\n* Get privately stored accessor descriptor defined by the `set.accessor()` method by using `get.accessor` property of the instance.\n* Get privately stored data descriptor defined by the `set.data()` method by using `get.data` property of the instance.\n\n\u003e Strictly means, it guards provided descriptor by checking it against its unique keys and by picking only properties that belong to the appropriate descriptor.\n\n```typescript\nDescriptor\u003cValue, Obj = any\u003e { ... }\n```\n\n### Descriptor static methods\n\n### `Descriptor.defineAccessor()`\n\nReturns defined accessor descriptor of a [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] type, on `get` or `set` property detected.\n\n```typescript\nstatic defineAccessor\u003cValue, Obj\u003e(\n  descriptor: ThisAccessorDescriptor\u003cValue, Obj\u003e,\n  callback?: ResultCallback\n): ThisAccessorDescriptor\u003cValue, Obj\u003e { ... }\n```\n\n**Generic type variables:**\n\n| Name    | Description |\n| :------ | :---------- |\n| `Value` | Guards the value type of the `get()` and `set()` methods of the `descriptor` object, and in the return type `ThisAccessorDescriptor\u003cValue, Obj\u003e` |\n| `Obj`   | Gives the possibility to use the `this` keyword that refers to the `Obj` variable inside the `get()` and `set()` methods of the `descriptor` object, and in the return type `ThisAccessorDescriptor\u003cValue, Obj\u003e` |\n\n**Parameters:**\n\n| Name: `type`                                     | Description                                                                                                                                                             |\n| :----------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| descriptor: `ThisAccessorDescriptor\u003cValue, Obj\u003e` | An `object` of a [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] type to define with the default values of the [`CommonDescriptor`][common-descriptor] |\n| callback?: `ResultCallback`                      | An optional [`ResultCallback`][package-type-resultcallback] function to handle the result of the check whether or not the `descriptor` is an `object` with `get` or `set` property, by default it uses [`accessorCallback()`][accessordescriptors-accessorcallback] function |\n\n**Throws:**\n\nThrows an [`Error`][js-error] if the `descriptor` is not an `object` of a [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] type, which means it doesn't contain `get` or `set` property.\n\n**Returns:**\n\nThe **return value** is an `object` of a [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] type.\n\n**Usage:**\n\n```typescript\n// Example usage.\nimport { Descriptor } from '@angular-package/property';\n\ninterface PersonShape {\n  firstName: string;\n}\n\nclass Person implements PersonShape {\n  firstName = '';\n}\n\nclass People {\n  firstName!: string;\n}\n\nconst person: Person = new Person();\nconst people: People = new People();\n\nconst firstNameDescriptor = Descriptor.defineAccessor\u003cstring, Person\u003e({\n  configurable: false,\n  enumerable: false,\n  get(): string {\n    return people.firstName;\n  },\n  set(value: string): void {\n    people.firstName = value;\n  },\n});\n\n// Define the property `firstName` in the `person` object to link with the same property in the `people` object.\n// Changes to the property `firstName` in the `person` object affect the property `firstName` in the `people` object.\nObject.defineProperty(person, 'firstName', firstNameDescriptor);\n```\n\n### `Descriptor.defineData()`\n\nReturns defined data descriptor of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] [interface][ts-interface], on `writable` or `value` property detected.\n\n```typescript\nstatic defineData\u003cValue\u003e(\n  descriptor: DataDescriptor\u003cValue\u003e,\n  callback: ResultCallback = dataCallback\n): DataDescriptor\u003cValue\u003e { ... }\n```\n\n**Generic type variables:**\n\n| Name    | Description |\n| :------ | :---------- |\n| `Value` | Guards the `value` property from the `descriptor` object, and the return type of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] [interface][ts-interface] |\n\n**Parameters:**\n\n| Name: `type`                        | Description                                                                                                                                                            |\n| :---------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| descriptor: `DataDescriptor\u003cValue\u003e` | An `object` of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] [interface][ts-interface] to define with the default values of the [`CommonDescriptor`][common-descriptor] |\n| callback?: `ResultCallback`         | An optional [`ResultCallback`][package-type-resultcallback] function to handle the result of the check whether or not the `descriptor` is an `object` with `writable` or `value` property, by default it uses [`dataCallback()`](#datacallback) function |\n\n**Throws:**\n\nThrows an [`Error`][js-error] if the `descriptor` is not an `object` of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] type, which means it doesn't contain `writable` or `value` property.\n\n**Returns:**\n\nThe **return value** is an `object` of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] [interface][ts-interface].\n\n**Usage:**\n\n```typescript\n// Example usage.\nimport { Descriptor } from '@angular-package/property';\n\ninterface PersonShape {\n  firstName: string;\n}\n\nclass Person implements PersonShape {\n  firstName = '';\n}\n\nclass People {\n  firstName!: string;\n}\n\nconst person: Person = new Person();\nconst people: People = new People();\n\nconst firstNameDescriptor = Descriptor.defineData\u003cstring\u003e({\n  configurable: false,\n  enumerable: false,\n  writable: false,\n  value: people.firstName\n});\n\n// Defines the property `firstName` of a type string in the `person` object with the same value as the property in the `people` object.\nObject.defineProperty(person, 'firstName', firstNameDescriptor);\n```\n\n### `Descriptor.get()`\n\nReturns property descriptor from the property of the specified detected object.\n\n```typescript\npublic static get\u003cObj, Name extends keyof Obj\u003e(\n  object: Obj,\n  name: Name\n): PropertyDescriptor | undefined { ... }\n````\n\n### `Descriptor.getAll()`\n\nReturns property descriptors from the specified detected object.\n\n```typescript\npublic static getAll\u003cObj extends object | Function\u003e(\n  object: Obj\n): ObjectPropertyDescriptors\u003cObj\u003e { ... }\n```\n\n----\n\n### `AccessorDescriptors`\n\nStrictly defines, sets, and stores privately property accessor descriptor of a [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] type.\n\n\u003e Strictly means, methods picks `configurable`, `enumerable`, `get`, `set` properties from the provided `descriptor` object.\n\n**Features:**\n\n* Guarded process of defining the object descriptor, but properties are not being checked against proper values.\n* Strictly defines property accessor descriptor.\n* Strictly sets, and stores at the same time property accessor descriptor.\n* Accessor descriptor is of a [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] type:\n The return value of the `get()` function is of a generic `Value` type.\n The parameter of the `set()` function is of a generic `Value` type.\n Keyword `this` refers to an `Obj` variable in both `get()` and `set()` functions.\n* Method [`set()`][accessordescriptors-prototype-set] of the instance and static [`define()`][accessordescriptors-define] picks `configurable`, `enumerable`, `get`, `set` properties from the provided data.\n* Get privately stored accessor descriptor defined by the [`set()`][accessordescriptors-prototype-set] method of the instance.\n\n```typescript\nAccessorDescriptors\u003cValue, Obj = any\u003e { ... }\n```\n\n### `AccessorDescriptors` static methods\n\n### `AccessorDescriptors.define()`\n\nReturns defined accessor descriptor of a [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] type, on `get` or `set` property detected.\n\n```typescript\nstatic define\u003cValue, Obj\u003e(\n  descriptor: ThisAccessorDescriptor\u003cValue, Obj\u003e,\n  callback?: ResultCallback\n): ThisAccessorDescriptor\u003cValue, Obj\u003e { ... }\n```\n\n**Generic type variables:**\n\n| Name    | Description |\n| :------ | :---------- |\n| `Value` | Guards the value type of the `get()` and `set()` functions of the `descriptor` object, and the return type [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] |\n| `Obj`   | Gives the possibility to use the `this` keyword that refers to the `Obj` variable inside the `get()` and `set()` functions of the `descriptor` object, and in the return type [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] |\n\n**Parameters:**\n\n| Name: `type`                                     | Description                                                                                                                                                                                                                                  |\n| :----------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `descriptor: ThisAccessorDescriptor\u003cValue, Obj\u003e` | An `object` of a [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] type to define with the default values of the [`CommonDescriptor`][common-descriptor]                                                                      |\n| `callback?: ResultCallback`                      | An optional [`ResultCallback`][package-type-resultcallback] function to handle the result of the check whether or not the `descriptor` is an `object` with `get` or `set` property, by default it uses [`accessorCallback()`][accessordescriptors-accessorcallback] function |\n\n**Throws:**\n\nThrows an [`Error`][js-error] if the `descriptor` is not an `object` of a [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] type, which means it doesn't contain `get` or `set` property.\n\n**Returns:**\n\nThe **return value** is an `object` of a [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] type.\n\n**Usage:**\n\n```typescript\n// Example usage.\nimport { AccessorDescriptors } from '@angular-package/property';\n\ninterface PersonShape {\n  firstName: string;\n}\n\nclass Person implements PersonShape {\n  firstName = '';\n}\n\nclass People {\n  firstName!: string;\n}\n\nconst person: Person = new Person();\nconst people: People = new People();\n\nconst firstNameDescriptor = AccessorDescriptors.define\u003cstring, Person\u003e({\n  get(): string {\n    return people.firstName;\n  },\n  set(value: string): void {\n    people.firstName = value;\n  },\n});\n\n// Define the property `firstName` in the `person` object to link with the same property in the `people` object.\n// Changes to the property `firstName` in the `person` object affect the property `firstName` in the `people` object.\nObject.defineProperty(person, 'firstName', firstNameDescriptor);\n```\n\n### `AccessorDescriptors` Constructor\n\n### `AccessorDescriptors()`\n\nCreates an instance, and optionally sets an accessor descriptor of a [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] type.\n\n```typescript\nAccessorDescriptors\u003cValue, Obj\u003e(descriptor?: ThisAccessorDescriptor\u003cValue, Obj\u003e)\n```\n\n**Generic type variables:**\n\n| Name    | Description |\n| :------ | :---------- |\n| `Value` | Guards the value type of the `get()` and `set()` functions of the `descriptor` object |\n| `Obj`   | Gives the possibility to use the `this` keyword that refers to the `Obj` variable inside the `get()` and `set()` functions of the `descriptor` object |\n\n**Parameters:**\n\n| Name: `type`                                      | Description                                                                                                                          |\n| :------------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------- |\n| `descriptor?: ThisAccessorDescriptor\u003cValue, Obj\u003e` | An optional `object` of a [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] type to initially set accessor descriptor |\n\n**Usage:**\n\n```typescript\n// Example usage.\nimport { AccessorDescriptors } from '@angular-package/property';\n\ninterface PersonShape {\n  firstName: string;\n}\n\nclass Person implements PersonShape {\n  firstName = '';\n}\n\nclass People {\n  firstName!: string;\n}\n\nconst person: Person = new Person();\nconst people: People = new People();\n\nconst firstNameDescriptor = new AccessorDescriptors\u003cstring, Person\u003e({\n  get(): string {\n    return people.firstName;\n  },\n  set(value: string): void {\n    people.firstName = value;\n  },\n});\n```\n\n### `AccessorDescriptors` instance methods\n\n### `AccessorDescriptors.prototype.set()`\n\n[Strictly][accessordescriptors] sets with the last saved descriptor values, and stores privately accessor descriptor of a [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] type.\n\n```typescript\nset(\n  descriptor: ThisAccessorDescriptor\u003cValue, Obj\u003e,\n  callback?: ResultCallback\n): this { ... }\n```\n\n**Parameters:**\n\n| Name: `type`                                     | Description                                                                                                                                               |\n| :----------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `descriptor: ThisAccessorDescriptor\u003cValue, Obj\u003e` | An `object` of a [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] [interface][ts-interface], to set with the last saved descriptor values |\n| `callback?: ResultCallback`                      | An optional [`ResultCallback`][package-type-resultcallback] function to handle the result of the check whether or not the `descriptor` is an `object` containing the `get` or `set` property, by default it uses [`accessorCallback()`][accessordescriptors-accessorcallback] from the static `guard()` method |\n\n**Throws:**\n\nThrows an [`Error`][js-error] if the `descriptor` is not an `object` of a [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] type, which means doesn't contain `get` or `set` property.\n\n**Returns:**\n\nThe **return value** is the [`AccessorDescriptors`][accessordescriptors] instance for the chaining.\n\n**Usage:**\n\n```typescript\n// Example usage.\nimport { AccessorDescriptors } from '@angular-package/property';\n\ninterface PersonShape {\n  firstName: string;\n}\n\nclass Person implements PersonShape {\n  firstName = '';\n}\n\nclass People {\n  firstName!: string;\n}\n\nconst person: Person = new Person();\nconst people: People = new People();\n\nconst firstNameDescriptor = new AccessorDescriptors\u003cstring, Person\u003e().set({\n  configurable: false,\n  enumerable: false,\n  get(): string {\n    return people.firstName;\n  },\n  set(value: string): void {\n    people.firstName = value;\n  },\n});\n```\n\n### `AccessorDescriptors` instance properties\n\n### `AccessorDescriptors.prototype.get`\n\nGet privately stored accessor descriptor of a [`ThisAccessorDescriptor\u003cValue, Obj\u003e`][this-accessor-descriptor] type defined by the [`set()`][accessordescriptors-prototype-set] method.\n\n```typescript\nget get(): ThisAccessorDescriptor\u003cValue, Obj\u003e { ... }\n```\n\n**Usage:**\n\n```typescript\n// Example usage.\nimport { AccessorDescriptors } from '@angular-package/property';\n\ninterface PersonShape {\n  firstName: string;\n}\n\nclass Person implements PersonShape {\n  firstName = '';\n}\n\nclass People {\n  firstName!: string;\n}\n\nconst person: Person = new Person();\nconst people: People = new People();\n\nconst firstNameDescriptor = new AccessorDescriptors\u003cstring, Person\u003e().set({\n  configurable: false,\n  enumerable: false,\n  get(): string {\n    return people.firstName;\n  },\n  set(value: string): void {\n    people.firstName = value;\n  },\n});\n\n// Define the property `firstName` in the `person` object to link with the same property in the `people` object.\n// Changes to the property `firstName` in the `person` object affect the property `firstName` in the `people` object.\nObject.defineProperty(person, 'firstName', firstNameDescriptor.get);\n```\n\n----\n\n### `DataDescriptors`\n\nStrictly defines, sets, and stores privately property data descriptor of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] interface.\n\n\u003e Strictly means, data descriptor of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] is type guarded and methods picks `configurable`, `enumerable`, `writable`, `value` properties from the provided `descriptor` object.\n\n**Features:**\n\n* Data descriptor is of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] [interface][ts-interface]:\n The `value` property is of a generic `Value` type.\n* Guarded process of defining the object descriptor, but properties are not being checked against proper values.\n* Strictly defines property data descriptor.\n* Strictly sets, and stores at the same time property data descriptor.\n* Method [`set()`][datadescriptors-prototype-set] of the instance and static [`define()`](datadescriptorsdefine) picks `configurable`, `enumerable`, `writable`, `value` properties from the provided data.\n* Get privately stored data descriptor defined by the [`set()`][datadescriptors-prototype-set] method of the instance.\n\n```typescript\nDataDescriptors\u003cValue\u003e { ... }\n```\n\n### `DataDescriptors` static methods\n\n### `DataDescriptors.define()`\n\nReturns [**strictly**][datadescriptors] defined data descriptor of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] [interface][ts-interface], on `writable` or `value` property detected.\n\n```typescript\nstatic define\u003cValue\u003e(\n  descriptor: DataDescriptor\u003cValue\u003e,\n  callback?: ResultCallback\n): DataDescriptor\u003cValue\u003e { ... }\n```\n\n**Generic type variables:**\n\n| Name    | Description |\n| :------ | :---------- |\n| `Value` | Constrains the `value` property from the `descriptor` object, and the return type of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] [interface][ts-interface] |\n\n**Parameters:**\n\n| Name: `type`                        | Description                                                                                                                                                          |\n| :---------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| descriptor: `DataDescriptor\u003cValue\u003e` | An `object` of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] [interface][ts-interface], to set with the default values of the [`CommonDescriptor`][common-descriptor] |\n| callback?: `ResultCallback`         | An optional [`ResultCallback`][package-type-resultcallback] function to handle the result of the check whether or not the `descriptor` is an `object` with `writable` or `value` property, by default it uses [`dataCallback()`][datadescriptors-datacallback] function from the static `guard()` method |\n\n**Throws:**\n\nThrows an [`Error`][js-error] if the `descriptor` is not an `object` of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] [interface][ts-interface], which means it doesn't contain `writable` or `value` property.\n\n**Returns:**\n\nThe **return value** is an `object` of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] [interface][ts-interface].\n\n**Usage:**\n\n```typescript\n// Example usage.\nimport { DataDescriptors } from '@angular-package/property';\n\ninterface PersonShape {\n  firstName: string;\n}\n\nclass Person implements PersonShape {\n  firstName = '';\n}\n\nclass People {\n  firstName!: string;\n}\n\nconst person: Person = new Person();\nconst people: People = new People();\n\nconst firstNameDescriptor = DataDescriptor.define\u003cstring, Person\u003e({\n  get(): string {\n    return people.firstName;\n  },\n  set(value: string): void {\n    people.firstName = value;\n  },\n});\n\n// Define the property `firstName` in the `person` object to link with the same property in the `people` object.\n// Changes to the property `firstName` in the `person` object affect the property `firstName` in the `people` object.\nObject.defineProperty(person, 'firstName', firstNameDescriptor);\n```\n\n### `DataDescriptors` Constructor\n\n### `DataDescriptors()`\n\nCreates an instance, and optionally sets a data descriptor of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] [interface][ts-interface].\n\n```typescript\nDataDescriptors\u003cValue\u003e(descriptor?: DataDescriptor\u003cValue\u003e)\n```\n\n**Generic type variables:**\n\n| Name    | Description |\n| :------ | :---------- |\n| `Value` | Guards the `value` property from the `descriptor` object |\n\n**Parameters:**\n\n| Name: `type`                         | Description                                                                                                                     |\n| :----------------------------------- | :------------------------------------------------------------------------------------------------------------------------------ |\n| `descriptor?: DataDescriptor\u003cValue\u003e` | An optional `object` of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] [interface][ts-interface] to initially set data descriptor |\n\n**Usage:**\n\n```typescript\n// Example usage.\nimport { DataDescriptors } from '@angular-package/property';\n\ninterface PersonShape {\n  firstName: string;\n}\n\nclass Person implements PersonShape {\n  firstName = '';\n}\n\nclass People {\n  firstName!: string;\n}\n\nconst person: Person = new Person();\nconst people: People = new People();\n\nconst firstNameDescriptor = new DataDescriptors\u003cstring\u003e({ // Initialize\n  writable: false,\n  value: 'not writable'\n});\n```\n\n### `DataDescriptors` instance methods\n\n### `DataDescriptors.prototype.set()`\n\n[Strictly][datadescriptors] sets with the last saved descriptor values, and stores privately data descriptor of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] [interface][ts-interface].\n\n```typescript\nset(\n  descriptor: DataDescriptor\u003cValue\u003e,\n  callback?: ResultCallback\n): this { ... }\n```\n\n**Generic type variables:**\n\n| Name    | Description                                              |\n| :------ | :------------------------------------------------------- |\n| `Value` | Guards the `value` property from the `descriptor` object |\n\n**Parameters:**\n\n| Name: `type`                        | Description                                                                                                                  |\n| :---------------------------------- | :--------------------------------------------------------------------------------------------------------------------------- |\n| `descriptor: DataDescriptor\u003cValue\u003e` | An `object` of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] [interface][ts-interface], to set with the last saved descriptor |\n| `callback?: ResultCallback`         | An optional [`ResultCallback`][package-type-resultcallback] function to handle the result of the check whether or not the `descriptor` is an `object` containing the `writable` or `value` property, by default it uses [`dataCallback()`][datadescriptors-datacallback] function from the static `guard()` method |\n\n**Throws:**\n\nThrows an [`Error`][js-error] if the `descriptor` is not an `object` of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] type, which means doesn't contain `writable` or `value` property.\n\n**Returns:**\n\nThe **return value** is the [`DataDescriptors`][datadescriptors] instance for the chaining.\n\n**Usage:**\n\n```typescript\n// Example usage.\nimport { DataDescriptors } from '@angular-package/property';\n\ninterface PersonShape {\n  firstName: string;\n}\n\nclass Person implements PersonShape {\n  firstName = '';\n}\n\nclass People {\n  firstName!: string;\n}\n\nconst person: Person = new Person();\nconst people: People = new People();\n\nconst firstNameDescriptor = new DataDescriptors\u003cstring\u003e()\n.set({\n  configurable: false,\n  enumerable: false,\n  writable: false,\n  value: people.firstName\n});\n\n// Defines the property `firstName` in the `person` object with the same value as the property in the `people` object.\nObject.defineProperty(person, 'firstName', firstNameDescriptor.get);\n```\n\n### `DataDescriptors` instance properties\n\n### `DataDescriptors.prototype.get`\n\nGet privately stored data descriptor of a [`DataDescriptor\u003cValue\u003e`][data-descriptor] [interface][ts-interface] defined by the instance [`set()`][datadescriptors-prototype-set] method.\n\n```typescript\nget get(): DataDescriptor\u003cValue\u003e { ... }\n```\n\n**Usage:**\n\n```typescript\n// Example usage.\nimport { DataDescriptors } from '@angular-package/property';\n\ninterface PersonShape {\n  firstName: string;\n}\n\nclass Person implements PersonShape {\n  firstName = '';\n}\n\nclass People {\n  firstName!: string;\n}\n\nconst person: Person = new Person();\nconst people: People = new People();\n\nconst firstNameDescriptor = new DataDescriptors\u003cstring\u003e()\n.set({\n  configurable: false,\n  enumerable: false,\n  writable: false,\n  value: people.firstName\n})\n// After set, get the value.\n.get;\n\n// Defines the property `firstName` in the `person` object with the same value as the property in the `people` object.\nObject.defineProperty(person, 'firstName', firstNameDescriptor);\n```\n\n----\n\n### Descriptor interface\n\n### AccessorDescriptor\n\nDescriptor with its unique optional `get()` and `set()` functions, of the `Value` type. For the accessor descriptor with also the object type, please use the type [`ThisAccessorDescriptor\u003cValue, Obj\u003e`](#thisaccessordescriptor). More about property descriptors [here][js-object-define-property].\n\n```typescript\ninterface AccessorDescriptor\u003cValue\u003e extends CommonDescriptor {\n  get?: () =\u003e Value;\n  set?: (value: Value) =\u003e void;\n}\n```\n\n### CommonDescriptor\n\nCommon keys `configurable` and `enumerable` of a `boolean` type for [accessor][this-accessor-descriptor] and [data descriptor][data-descriptor], picked from the default `PropertyDescriptor`. More about property descriptors [here][js-object-define-property].\n\n```typescript\ninterface CommonDescriptor\n  extends Pick\u003cPropertyDescriptor, 'configurable' | 'enumerable'\u003e {}\n```\n\n### DataDescriptor\n\nDescriptor with its unique optional keys, `writable` of a `boolean` type and `value` of a generic `Value` type. More about property descriptors [here][js-object-define-property].\n\n```typescript\ninterface DataDescriptor\u003cValue\u003e extends CommonDescriptor {\n  writable?: boolean;\n  value?: Value;\n}\n```\n\n----\n\n### Descriptor type\n\n### ThisAccessorDescriptor\n\n[`AccessorDescriptor`][accessor-descriptor] [interface][ts-interface] as a type cause of ease of use `this` of an `Obj` type in the `get()` and `set()` functions. More about property descriptors [here][js-object-define-property].\n\n```typescript\ntype ThisAccessorDescriptor\u003cValue, Obj\u003e = AccessorDescriptor\u003cValue\u003e \u0026\n  ThisType\u003cObj\u003e;\n```\n\n### Descriptors\n\nProperty descriptors container.\n\n```typescript\nexport class Descriptors\u003c\n  Obj extends object | Function,\n  Keys extends keyof Obj\n\u003e { ... }\n```\n\n## GIT\n\n### Commit\n\n* [AngularJS Git Commit Message Conventions][git-commit-angular]\n* [Karma Git Commit Msg][git-commit-karma]\n* [Conventional Commits][git-commit-conventional]\n\n### Versioning\n\n[Semantic Versioning 2.0.0][git-semver]\n\n**Given a version number MAJOR.MINOR.PATCH, increment the:**\n\n* MAJOR version when you make incompatible API changes,\n* MINOR version when you add functionality in a backwards-compatible manner, and\n* PATCH version when you make backwards-compatible bug fixes.\n\nAdditional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.\n\n**FAQ**\nHow should I deal with revisions in the 0.y.z initial development phase?\n\u003eThe simplest thing to do is start your initial development release at 0.1.0 and then increment the minor version for each subsequent release.\n\nHow do I know when to release 1.0.0?\n\n\u003eIf your software is being used in production, it should probably already be 1.0.0. If you have a stable API on which users have come to depend, you should be 1.0.0. If you’re worrying a lot about backwards compatibility, you should probably already be 1.0.0.\n\n## License\n\nMIT © angular-package ([license][property-license])\n\n## Packages\n\nUseful and simple to use packages.\n\n| Package                                      | Description                                                       | Status |\n| :------------------------------------------- | :---------------------------------------------------------------- | -----: |\n| [callback][callback-github-readme]           | Manages the callback [`function`][js-function].                   | [![npm version][callback-npm-badge-png]][callback-npm-badge] |\n| [change-detection][cd-github-readme]         | Improves application performance.                                 | [![npm version][cd-npm-badge-png]][cd-npm-badge] |\n| [component-loader][cl-github-readme]         | Handles dynamic loading components.                               | [![npm version][cl-npm-badge-png]][cl-npm-badge] |\n| [core][core-github-readme]                   | Core features.                                                    | [![npm version][core-npm-badge-png]][core-npm-badge] |\n| [error][error-github-readme]                 | Manages an [`Error`][js-error].                                   | [![npm version][error-npm-badge-png]][error-npm-badge] |\n| [indexeddb][indexeddb-github-readme]         | Wrapper to IndexedDB client-side storage.                         | [![npm version][indexeddb-npm-badge-png]][indexeddb-npm-badge] |\n| name                                         | The name with prefix and suffix.                                  | ![inprogress] |\n| preferences                                  | Preferences, settings, options, configuration and setup in steps. | ![inprogress] |\n| [prism][prism-github-readme]                 | [`Prism`][prism-js] highlighter module.                           | [![npm version][prism-npm-badge-png]][prism-npm-badge] |\n| [property][property-github-readme]           | Handles object properties.                                        | [![npm version][property-npm-badge-png]][property-npm-badge] |\n| [range][range-github-readme]                 | The range between a minimum and maximum.                          | [![npm version][range-npm-badge-png]][range-npm-badge] |\n| [reactive][reactive-github-readme]           | Automatize the process of creating some rxjs features.            | [![npm version][reactive-npm-badge-png]][reactive-npm-badge] |\n| [sass][sass-github-readme]                   | Extension for sass modules and new modules.                       | [![npm version][sass-npm-badge-png]][sass-npm-badge] |\n| [sass-list][sass-list-github-readme]         | Modified list Sass module.                                        | [![npm version][sass-list-npm-badge-png]][sass-list-npm-badge] |\n| [sass-string][sass-string-github-readme]     | Modified string Sass module.                                      | [![npm version][sass-string-npm-badge-png]][sass-string-npm-badge] |\n| [spectre.css][spectrecss-github-readme]      | Modified Spectre.css - a lightweight, responsive, and modern CSS framework originally designed by Yan Zhu. | [![npm version][spectrecss-npm-badge-png]][spectrecss-npm-badge] |\n| storage                                      | The storage of data under allowed names.                          | ![inprogress] |\n| tag                                          | Any tag with optional attributes.                                 | ![inprogress] |\n| [testing][testing-github-readme]             | Support for testing other packages.                               | [![npm version][testing-npm-badge-png]][testing-npm-badge] |\n| text                                         | Text on the template with replaceable tags.                       | ![inprogress] |\n| [type][type-github-readme]                   | Common types, type guards, and type checkers.                     | [![npm version][type-npm-badge-png]][type-npm-badge] |\n| [ui][ui-github-readme]                       | User interface.                                                   | [![npm version][ui-npm-badge-png]][ui-npm-badge] |\n| [wrapper][wrapper-github-readme]             | Wrap the text with the opening and closing chars.                 | [![npm version][wrapper-npm-badge-png]][wrapper-npm-badge] |\n\n\u003e Click on the package name to visit the package GitHub README.md\n\n\u003c!-- Funding --\u003e\n[github-badge-sponsor]: https://img.shields.io/static/v1?label=Sponsor\u0026message=%E2%9D%A4\u0026logo=GitHub\u0026link=https://github.com/sponsors/angular-package\n[github-sponsor-link]: https://github.com/sponsors/angular-package\n[patreon-badge]: https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dsciborrudnicki%26type%3Dpatrons\u0026style=flat\n[patreon-link]: https://patreon.com/sciborrudnicki\n\n[angulario]: https://angular.io\n[skeleton]: https://github.com/angular-package/skeleton\n\n\u003c!-- Update status --\u003e\n[fix]: https://img.shields.io/badge/-fix-red\n[new]: https://img.shields.io/badge/-new-green\n[update]: https://img.shields.io/badge/-update-red\n[inprogress]: https://img.shields.io/badge/-In%20progress-gray\n\n\u003c!-- GIT --\u003e\n[git-semver]: http://semver.org/\n\n\u003c!-- GIT: commit --\u003e\n[git-commit-angular]: https://gist.github.com/stephenparish/9941e89d80e2bc58a153\n[git-commit-karma]: http://karma-runner.github.io/0.10/dev/git-commit-msg.html\n[git-commit-conventional]: https://www.conventionalcommits.org/en/v1.0.0/\n\n\u003c!-- Package: property  --\u003e\n  \u003c!-- GitHub: badges --\u003e\n  [property-badge-issues]: https://img.shields.io/github/issues/angular-package/property\n  [property-badge-forks]: https://img.shields.io/github/forks/angular-package/property\n  [property-badge-stars]: https://img.shields.io/github/stars/angular-package/property\n  [property-badge-license]: https://img.shields.io/github/license/angular-package/property\n  \u003c!-- GitHub: badges links --\u003e\n  [property-issues]: https://github.com/angular-package/property/issues\n  [property-forks]: https://github.com/angular-package/property/network\n  [property-license]: https://github.com/angular-package/property/blob/master/LICENSE\n  [property-stars]: https://github.com/angular-package/property/stargazers\n\n\u003c!-- Package: callback --\u003e\n  \u003c!-- npm --\u003e\n  [callback-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fcallback.svg\n  [callback-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fcallback.png\n  [callback-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fcallback\n  [callback-npm-readme]: https://www.npmjs.com/package/@angular-package/callback#readme\n\n  \u003c!-- GitHub --\u003e\n  [callback-github-readme]: https://github.com/angular-package/callback#readme\n\n  [package-callback-callbackpayload]: https://github.com/angular-package/callback#callbackpayload\n  [package-callback-resultcallback]: https://github.com/angular-package/callback#resultcallback\n\n\u003c!-- Package: change-detection --\u003e\n  \u003c!-- npm --\u003e\n  [cd-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fchange-detection.svg\n  [cd-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fchange-detection.png\n  [cd-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fchange-detection\n  [cd-npm-readme]: https://www.npmjs.com/package/@angular-package/change-detection#readme\n\n  \u003c!-- GitHub --\u003e\n  [cd-github-readme]: https://github.com/angular-package/change-detection#readme\n\n\u003c!-- Package: component-loader --\u003e\n  \u003c!-- npm --\u003e\n  [cl-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fcomponent-loader.svg\n  [cl-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fcomponent-loader.png\n  [cl-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fcomponent-loader\n  [cl-npm-readme]: https://www.npmjs.com/package/@angular-package/component-loader#readme\n\n  \u003c!-- GitHub --\u003e\n  [cl-github-readme]: https://github.com/angular-package/component-loader#readme\n\n\u003c!-- Package: core --\u003e\n  \u003c!-- npm --\u003e\n  [core-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fcore.svg\n  [core-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fcore.png\n  [core-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fcore\n  [core-npm-readme]: https://www.npmjs.com/package/@angular-package/core#readme\n\n  \u003c!-- GitHub --\u003e\n  [core-github-readme]: https://github.com/angular-package/core#readme\n\n\u003c!-- Package: error --\u003e\n  \u003c!-- npm --\u003e\n  [error-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Ferror.svg\n  [error-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Ferror.png\n  [error-npm-badge]: https://badge.fury.io/js/%40angular-package%2Ferror\n  [error-npm-readme]: https://www.npmjs.com/package/@angular-package/error#readme\n\n  \u003c!-- GitHub --\u003e\n  [error-github-readme]: https://github.com/angular-package/error#readme\n\n\u003c!-- Package: indexeddb --\u003e\n  \u003c!-- npm --\u003e\n  [indexeddb-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Findexeddb.svg\n  [indexeddb-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Findexeddb.png\n  [indexeddb-npm-badge]: https://badge.fury.io/js/%40angular-package%2Findexeddb\n  [indexeddb-npm-readme]: https://www.npmjs.com/package/@angular-package/indexeddb#readme\n\n  \u003c!-- GitHub --\u003e\n  [indexeddb-github-readme]: https://github.com/angular-package/indexeddb#readme\n\n\u003c!-- Package: name --\u003e\n  \u003c!-- npm --\u003e\n  [name-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fname.svg\n  [name-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fname.png\n  [name-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fname\n  [name-npm-readme]: https://www.npmjs.com/package/@angular-package/name#readme\n\n  \u003c!-- GitHub --\u003e\n  [name-github-readme]: https://github.com/angular-package/name#readme\n\n\u003c!-- Package: preferences --\u003e\n  \u003c!-- npm --\u003e\n  [preferences-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fpreferences.svg\n  [preferences-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fpreferences.png\n  [preferences-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fpreferences\n  [preferences-npm-readme]: https://www.npmjs.com/package/@angular-package/preferences#readme\n\n  \u003c!-- GitHub --\u003e\n  [preferences-github-readme]: https://github.com/angular-package/preferences#readme\n\n\u003c!-- Package: prism --\u003e\n  \u003c!-- npm --\u003e\n  [prism-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fprism.svg\n  [prism-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fprism.png\n  [prism-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fprism\n  [prism-npm-readme]: https://www.npmjs.com/package/@angular-package/prism#readme\n\n  \u003c!-- GitHub --\u003e\n  [prism-github-readme]: https://github.com/angular-package/prism#readme\n\n\u003c!-- Package: property --\u003e\n  \u003c!-- npm --\u003e\n  [property-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fproperty.svg\n  [property-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fproperty.png\n  [property-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fproperty\n  [property-npm-readme]: https://www.npmjs.com/package/@angular-package/property#readme\n\n  \u003c!-- GitHub --\u003e\n  [property-github-readme]: https://github.com/angular-package/property#readme\n\n\u003c!-- Package: range --\u003e\n  \u003c!-- npm --\u003e\n  [range-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Frange.svg\n  [range-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Frange.png\n  [range-npm-badge]: https://badge.fury.io/js/%40angular-package%2Frange\n  [range-npm-readme]: https://www.npmjs.com/package/@angular-package/range#readme\n\n  \u003c!-- GitHub --\u003e\n  [range-github-readme]: https://github.com/angular-package/range#readme\n\n\u003c!-- Package: reactive --\u003e\n  \u003c!-- npm --\u003e\n  [reactive-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Freactive.svg\n  [reactive-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Freactive.png\n  [reactive-npm-badge]: https://badge.fury.io/js/%40angular-package%2Freactive\n  [reactive-npm-readme]: https://www.npmjs.com/package/@angular-package/reactive#readme\n\n  \u003c!-- GitHub --\u003e\n  [reactive-github-readme]: https://github.com/angular-package/reactive#readme\n\n\u003c!-- Package: sass --\u003e\n  \u003c!-- npm --\u003e\n  [sass-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fsass.svg\n  [sass-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fsass.png\n  [sass-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fsass\n  [sass-npm-readme]: https://www.npmjs.com/package/@angular-package/sass#readme\n\n  \u003c!-- GitHub --\u003e\n  [sass-github-readme]: https://github.com/angular-package/sass#readme\n\n\u003c!-- Package: sass-list --\u003e\n  \u003c!-- npm --\u003e\n  [sass-list-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fsass-list.svg\n  [sass-list-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fsass-list.png\n  [sass-list-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fsass-list\n  [sass-list-npm-readme]: https://www.npmjs.com/package/@angular-package/sass-list#readme\n\n  \u003c!-- GitHub --\u003e\n  [sass-list-github-readme]: https://github.com/angular-package/sass-string#readme\n\n\u003c!-- Package: sass-string --\u003e\n  \u003c!-- npm --\u003e\n  [sass-string-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fsass-string.svg\n  [sass-string-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fsass-string.png\n  [sass-string-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fsass-string\n  [sass-string-npm-readme]: https://www.npmjs.com/package/@angular-package/sass-string#readme\n\n  \u003c!-- GitHub --\u003e\n  [sass-string-github-readme]: https://github.com/angular-package/sass-string#readme\n\n\u003c!-- Package: spectre.css --\u003e\n  \u003c!-- npm --\u003e\n  [spectrecss-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fspectrecss.svg\n  [spectrecss-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fspectrecss.png\n  [spectrecss-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fspectre.css\n  [spectrecss-npm-readme]: https://www.npmjs.com/package/@angular-package/spectre.css#readme\n\n  \u003c!-- GitHub --\u003e\n  [spectrecss-github-readme]: https://github.com/angular-package/spectre.css#readme\n\n\u003c!-- Package: storage --\u003e\n  \u003c!-- npm --\u003e\n  [storage-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fstorage.svg\n  [storage-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fstorage.png\n  [storage-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fstorage\n  [storage-npm-readme]: https://www.npmjs.com/package/@angular-package/storage#readme\n\n  \u003c!-- GitHub --\u003e\n  [storage-github-readme]: https://github.com/angular-package/storage#readme\n\n\u003c!-- Package: tag --\u003e\n  \u003c!-- npm --\u003e\n  [tag-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Ftag.svg\n  [tag-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Ftag.png\n  [tag-npm-badge]: https://badge.fury.io/js/%40angular-package%2Ftag\n  [tag-npm-readme]: https://www.npmjs.com/package/@angular-package/tag#readme\n\n  \u003c!-- GitHub --\u003e\n  [tag-github-readme]: https://github.com/angular-package/tag#readme\n\n\u003c!-- Package: testing --\u003e\n  \u003c!-- npm --\u003e\n  [testing-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Ftesting.svg\n  [testing-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Ftesting.png\n  [testing-npm-badge]: https://badge.fury.io/js/%40angular-package%2Ftesting\n  [testing-npm-readme]: https://www.npmjs.com/package/@angular-package/testing#readme\n\n  \u003c!-- GitHub --\u003e\n  [testing-github-readme]: https://github.com/angular-package/testing#readme\n\n\u003c!-- Package: text --\u003e\n  \u003c!-- npm --\u003e\n  [text-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Ftext.svg\n  [text-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Ftext.png\n  [text-npm-badge]: https://badge.fury.io/js/%40angular-package%2Ftext\n  [text-npm-readme]: https://www.npmjs.com/package/@angular-package/text#readme\n\n  \u003c!-- GitHub --\u003e\n  [text-github-readme]: https://github.com/angular-package/text#readme\n\n\u003c!-- Package: type --\u003e\n  \u003c!-- npm --\u003e\n  [type-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Ftype.svg\n  [type-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Ftype.png\n  [type-npm-badge]: https://badge.fury.io/js/%40angular-package%2Ftype\n  [type-npm-readme]: https://www.npmjs.com/package/@angular-package/type#readme\n  [package-type-resultcallback]: https://github.com/angular-package/type#resultcallback\n\n  \u003c!-- GitHub --\u003e\n  [type-github-readme]: https://github.com/angular-package/type#readme\n\n\u003c!-- Package: ui --\u003e\n  \u003c!-- npm --\u003e\n  [ui-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fui.svg\n  [ui-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fui.png\n  [ui-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fui\n  [ui-npm-readme]: https://www.npmjs.com/package/@angular-package/ui#readme\n\n  \u003c!-- GitHub --\u003e\n  [ui-github-readme]: https://github.com/angular-package/ui#readme\n\n\u003c!-- Package: wrapper --\u003e\n  \u003c!-- npm --\u003e\n  [wrapper-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fwrapper.png\n  [wrapper-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fwrapper\n  [wrapper-npm-readme]: https://www.npmjs.com/package/@angular-package/wrapper#readme\n\n  \u003c!-- GitHub --\u003e\n  [wrapper-github-readme]: https://github.com/angular-package/wrapper#readme\n\n\u003c!-- Property: type --\u003e\n[accessor-descriptor]: #accessordescriptor\n[common-descriptor]: #commondescriptor\n[data-descriptor]: #datadescriptor\n[this-accessor-descriptor]: #thisaccessordescriptor\n\n[accessordescriptors]: #accessordescriptors\n[accessordescriptors-define]: #accessordescriptorsdefine\n[accessordescriptors-accessorcallback]: https://github.com/angular-package/property/blob/master/src/callback/src/callback.object.ts\n\n[accessordescriptors-prototype-set]: #accessordescriptorsprototypeset\n\n[datadescriptors]: #datadescriptors\n[datadescriptors-datacallback]: https://github.com/angular-package/property/blob/master/src/callback/src/callback.object.ts\n\n[datadescriptors-prototype-set]: #datadescriptorsprototypeset\n\n[descriptor-defineaccessor]: #descriptordefineaccessor\n[descriptor-definedata]: #descriptordefinedata\n\n\u003c!-- Prism --\u003e\n[prism-js]: https://prismjs.com/\n\n\u003c!-- Javascript  --\u003e\n[js-array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array\n[array-every]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every\n[array-some]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some\n\n[classes]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes\n\n[bigint]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt\n[bigintconstructor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt/BigInt\n\n[boolean]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean\n[booleanconstructor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/Boolean\n\n[js-error]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error\n\n[js-function]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions\n[function-rest-parameter]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters\n\n[js-getter]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get\n[js-object-getownpropertydescriptor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor\n[js-object-getOwnpropertydescriptors]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors\n\n[js-setter]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set\n\n[js-hasownproperty]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty\n\n[js-in-operator]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in\n\n[js-number]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number\n[numberconstructor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/Number\n\n[js-object]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object\n[js-object-define-property]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\n\n[primitive]: https://developer.mozilla.org/en-US/docs/Glossary/Primitive\n\n[js-regexp]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n\n[js-string]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String\n[stringconstructor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/String\n\n[js-symbol]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol\n[symbolconstructor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/Symbol\n\n[js-undefined]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined\n\n\u003c!-- Typescript --\u003e\n[ts-classes]: https://www.typescriptlang.org/docs/handbook/2/classes.html\n[ts-function]: https://www.typescriptlang.org/docs/handbook/2/functions.html\n[ts-interface]: https://www.typescriptlang.org/docs/handbook/interfaces.html#our-first-interface\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangular-package%2Fproperty","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fangular-package%2Fproperty","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangular-package%2Fproperty/lists"}