npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@angular-package/property

v1.0.3-alpha

Published

Features to handle object properties.

Downloads

15

Readme

angular-package

The angular-package supports the development process of angular-based applications in varied ways through the thoughtful, reusable, easy-to-use small pieces of code called packages.

angular-package/property

Features to handle properties.

npm version

GitHub issues GitHub forks GitHub stars GitHub license

GitHub sponsors Support me on Patreon

export {
  // Class.
  Property,
  WrapProperty,
} from './lib';

export {
  // Class.
  Descriptor,
  Descriptors,
  // Interface.
  AccessorDescriptor,
  CommonDescriptor,
  DataDescriptor,
  // Type.
  ThisAccessorDescriptor,
} from './descriptor';

export { GetterCallback, SetterCallback } from './type';

Previous README.md

Table of contents

How angular-package understands

Checks

Is to check the provided value to be the same as expected.

Type guard (constrain)

Constrains the parameter type to not let input unexpected value in the code editor.

Guards

Is a combination of both above, constrains the type of the parameter in the code editor, and checks its argument.

Sets

Sets the provided value in the object.

Defines

Returns defined value from the method, instead of storing it in the object.

Skeleton

This package was generated by the skeleton workspace with Angular CLI version 14.2.0.

Copy this package to the packages/property folder of the skeleton workspace then run the commands below.

Code scaffolding

Run 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.

Note: Don't forget to add --project property or else it will be added to the default project in your angular.json file.

Build

Run ng build property to build the project. The build artifacts will be stored in the dist/ directory.

Publishing

After building your library with ng build property, go to the dist folder cd dist/property and run npm publish.

Running unit tests

Run ng test property to execute the unit tests via Karma.

Further help

To get more help on the Angular CLI use ng help or go check out the Angular CLI Overview and Command Reference page.

Installation

Install @angular-package/property package with command:

npm i --save @angular-package/property

Callback

Wrapper for the ResultCallback type function to throw an Error with the specified message on the specified false or true state.

export const errorCallback: ErrorCallback  = (
  message: string,
  on: boolean = false
): ResultCallback => {
  return (result: boolean, value: any): boolean => {
    if (result === on) {
      throw new Error(
        `${message}, got value ${
          typeof value === 'object' ? JSON.stringify(value) : value
        }`
      );
    }
    return result;
  };
};

Package

Descriptor package

Descriptor features to import.

// Class.
export {
  Descriptor,
  Descriptors
} from './lib';

// Interface.
export {
  AccessorDescriptor,
  CommonDescriptor,
  DataDescriptor
} from './interface';

// Type.
export {
  ThisAccessorDescriptor
} from './type';

Descriptor

Handles object property descriptor.

Features:

  • Strictly defines accessor and data descriptor with the defineAccessor() and defineData() static methods.
  • Strictly sets, and stores accessor and data descriptor with the Descriptor instance respectively set.accessor() and set.data() methods of the instance.
  • Get privately stored accessor descriptor defined by the set.accessor() method by using get.accessor property of the instance.
  • Get privately stored data descriptor defined by the set.data() method by using get.data property of the instance.

Strictly means, it guards provided descriptor by checking it against its unique keys and by picking only properties that belong to the appropriate descriptor.

Descriptor<Value, Obj = any> { ... }

Descriptor static methods

Descriptor.defineAccessor()

Returns defined accessor descriptor of a ThisAccessorDescriptor<Value, Obj> type, on get or set property detected.

static defineAccessor<Value, Obj>(
  descriptor: ThisAccessorDescriptor<Value, Obj>,
  callback?: ResultCallback
): ThisAccessorDescriptor<Value, Obj> { ... }

Generic type variables:

| Name | Description | | :------ | :---------- | | Value | Guards the value type of the get() and set() methods of the descriptor object, and in the return type ThisAccessorDescriptor<Value, Obj> | | 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<Value, Obj> |

Parameters:

| Name: type | Description | | :----------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | descriptor: ThisAccessorDescriptor<Value, Obj> | An object of a ThisAccessorDescriptor<Value, Obj> type to define with the default values of the CommonDescriptor | | callback?: ResultCallback | An optional 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() function |

Throws:

Throws an Error if the descriptor is not an object of a ThisAccessorDescriptor<Value, Obj> type, which means it doesn't contain get or set property.

Returns:

The return value is an object of a ThisAccessorDescriptor<Value, Obj> type.

Usage:

// Example usage.
import { Descriptor } from '@angular-package/property';

interface PersonShape {
  firstName: string;
}

class Person implements PersonShape {
  firstName = '';
}

class People {
  firstName!: string;
}

const person: Person = new Person();
const people: People = new People();

const firstNameDescriptor = Descriptor.defineAccessor<string, Person>({
  configurable: false,
  enumerable: false,
  get(): string {
    return people.firstName;
  },
  set(value: string): void {
    people.firstName = value;
  },
});

// Define the property `firstName` in the `person` object to link with the same property in the `people` object.
// Changes to the property `firstName` in the `person` object affect the property `firstName` in the `people` object.
Object.defineProperty(person, 'firstName', firstNameDescriptor);

Descriptor.defineData()

Returns defined data descriptor of a DataDescriptor<Value> interface, on writable or value property detected.

static defineData<Value>(
  descriptor: DataDescriptor<Value>,
  callback: ResultCallback = dataCallback
): DataDescriptor<Value> { ... }

Generic type variables:

| Name | Description | | :------ | :---------- | | Value | Guards the value property from the descriptor object, and the return type of a DataDescriptor<Value> interface |

Parameters:

| Name: type | Description | | :---------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | descriptor: DataDescriptor<Value> | An object of a DataDescriptor<Value> interface to define with the default values of the CommonDescriptor | | callback?: ResultCallback | An optional 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() function |

Throws:

Throws an Error if the descriptor is not an object of a DataDescriptor<Value> type, which means it doesn't contain writable or value property.

Returns:

The return value is an object of a DataDescriptor<Value> interface.

Usage:

// Example usage.
import { Descriptor } from '@angular-package/property';

interface PersonShape {
  firstName: string;
}

class Person implements PersonShape {
  firstName = '';
}

class People {
  firstName!: string;
}

const person: Person = new Person();
const people: People = new People();

const firstNameDescriptor = Descriptor.defineData<string>({
  configurable: false,
  enumerable: false,
  writable: false,
  value: people.firstName
});

// Defines the property `firstName` of a type string in the `person` object with the same value as the property in the `people` object.
Object.defineProperty(person, 'firstName', firstNameDescriptor);

Descriptor.get()

Returns property descriptor from the property of the specified detected object.

public static get<Obj, Name extends keyof Obj>(
  object: Obj,
  name: Name
): PropertyDescriptor | undefined { ... }

Descriptor.getAll()

Returns property descriptors from the specified detected object.

public static getAll<Obj extends object | Function>(
  object: Obj
): ObjectPropertyDescriptors<Obj> { ... }

AccessorDescriptors

Strictly defines, sets, and stores privately property accessor descriptor of a ThisAccessorDescriptor<Value, Obj> type.

Strictly means, methods picks configurable, enumerable, get, set properties from the provided descriptor object.

Features:

  • Guarded process of defining the object descriptor, but properties are not being checked against proper values.
  • Strictly defines property accessor descriptor.
  • Strictly sets, and stores at the same time property accessor descriptor.
  • Accessor descriptor is of a ThisAccessorDescriptor<Value, Obj> type: The return value of the get() function is of a generic Value type. The parameter of the set() function is of a generic Value type. Keyword this refers to an Obj variable in both get() and set() functions.
  • Method set() of the instance and static define() picks configurable, enumerable, get, set properties from the provided data.
  • Get privately stored accessor descriptor defined by the set() method of the instance.
AccessorDescriptors<Value, Obj = any> { ... }

AccessorDescriptors static methods

AccessorDescriptors.define()

Returns defined accessor descriptor of a ThisAccessorDescriptor<Value, Obj> type, on get or set property detected.

static define<Value, Obj>(
  descriptor: ThisAccessorDescriptor<Value, Obj>,
  callback?: ResultCallback
): ThisAccessorDescriptor<Value, Obj> { ... }

Generic type variables:

| Name | Description | | :------ | :---------- | | Value | Guards the value type of the get() and set() functions of the descriptor object, and the return type ThisAccessorDescriptor<Value, Obj> | | 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<Value, Obj> |

Parameters:

| Name: type | Description | | :----------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | descriptor: ThisAccessorDescriptor<Value, Obj> | An object of a ThisAccessorDescriptor<Value, Obj> type to define with the default values of the CommonDescriptor | | callback?: ResultCallback | An optional 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() function |

Throws:

Throws an Error if the descriptor is not an object of a ThisAccessorDescriptor<Value, Obj> type, which means it doesn't contain get or set property.

Returns:

The return value is an object of a ThisAccessorDescriptor<Value, Obj> type.

Usage:

// Example usage.
import { AccessorDescriptors } from '@angular-package/property';

interface PersonShape {
  firstName: string;
}

class Person implements PersonShape {
  firstName = '';
}

class People {
  firstName!: string;
}

const person: Person = new Person();
const people: People = new People();

const firstNameDescriptor = AccessorDescriptors.define<string, Person>({
  get(): string {
    return people.firstName;
  },
  set(value: string): void {
    people.firstName = value;
  },
});

// Define the property `firstName` in the `person` object to link with the same property in the `people` object.
// Changes to the property `firstName` in the `person` object affect the property `firstName` in the `people` object.
Object.defineProperty(person, 'firstName', firstNameDescriptor);

AccessorDescriptors Constructor

AccessorDescriptors()

Creates an instance, and optionally sets an accessor descriptor of a ThisAccessorDescriptor<Value, Obj> type.

AccessorDescriptors<Value, Obj>(descriptor?: ThisAccessorDescriptor<Value, Obj>)

Generic type variables:

| Name | Description | | :------ | :---------- | | Value | Guards the value type of the get() and set() functions of the descriptor object | | 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 |

Parameters:

| Name: type | Description | | :------------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------- | | descriptor?: ThisAccessorDescriptor<Value, Obj> | An optional object of a ThisAccessorDescriptor<Value, Obj> type to initially set accessor descriptor |

Usage:

// Example usage.
import { AccessorDescriptors } from '@angular-package/property';

interface PersonShape {
  firstName: string;
}

class Person implements PersonShape {
  firstName = '';
}

class People {
  firstName!: string;
}

const person: Person = new Person();
const people: People = new People();

const firstNameDescriptor = new AccessorDescriptors<string, Person>({
  get(): string {
    return people.firstName;
  },
  set(value: string): void {
    people.firstName = value;
  },
});

AccessorDescriptors instance methods

AccessorDescriptors.prototype.set()

Strictly sets with the last saved descriptor values, and stores privately accessor descriptor of a ThisAccessorDescriptor<Value, Obj> type.

set(
  descriptor: ThisAccessorDescriptor<Value, Obj>,
  callback?: ResultCallback
): this { ... }

Parameters:

| Name: type | Description | | :----------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------- | | descriptor: ThisAccessorDescriptor<Value, Obj> | An object of a ThisAccessorDescriptor<Value, Obj> interface, to set with the last saved descriptor values | | callback?: ResultCallback | An optional 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() from the static guard() method |

Throws:

Throws an Error if the descriptor is not an object of a ThisAccessorDescriptor<Value, Obj> type, which means doesn't contain get or set property.

Returns:

The return value is the AccessorDescriptors instance for the chaining.

Usage:

// Example usage.
import { AccessorDescriptors } from '@angular-package/property';

interface PersonShape {
  firstName: string;
}

class Person implements PersonShape {
  firstName = '';
}

class People {
  firstName!: string;
}

const person: Person = new Person();
const people: People = new People();

const firstNameDescriptor = new AccessorDescriptors<string, Person>().set({
  configurable: false,
  enumerable: false,
  get(): string {
    return people.firstName;
  },
  set(value: string): void {
    people.firstName = value;
  },
});

AccessorDescriptors instance properties

AccessorDescriptors.prototype.get

Get privately stored accessor descriptor of a ThisAccessorDescriptor<Value, Obj> type defined by the set() method.

get get(): ThisAccessorDescriptor<Value, Obj> { ... }

Usage:

// Example usage.
import { AccessorDescriptors } from '@angular-package/property';

interface PersonShape {
  firstName: string;
}

class Person implements PersonShape {
  firstName = '';
}

class People {
  firstName!: string;
}

const person: Person = new Person();
const people: People = new People();

const firstNameDescriptor = new AccessorDescriptors<string, Person>().set({
  configurable: false,
  enumerable: false,
  get(): string {
    return people.firstName;
  },
  set(value: string): void {
    people.firstName = value;
  },
});

// Define the property `firstName` in the `person` object to link with the same property in the `people` object.
// Changes to the property `firstName` in the `person` object affect the property `firstName` in the `people` object.
Object.defineProperty(person, 'firstName', firstNameDescriptor.get);

DataDescriptors

Strictly defines, sets, and stores privately property data descriptor of a DataDescriptor<Value> interface.

Strictly means, data descriptor of a DataDescriptor<Value> is type guarded and methods picks configurable, enumerable, writable, value properties from the provided descriptor object.

Features:

  • Data descriptor is of a DataDescriptor<Value> interface: The value property is of a generic Value type.
  • Guarded process of defining the object descriptor, but properties are not being checked against proper values.
  • Strictly defines property data descriptor.
  • Strictly sets, and stores at the same time property data descriptor.
  • Method set() of the instance and static define() picks configurable, enumerable, writable, value properties from the provided data.
  • Get privately stored data descriptor defined by the set() method of the instance.
DataDescriptors<Value> { ... }

DataDescriptors static methods

DataDescriptors.define()

Returns strictly defined data descriptor of a DataDescriptor<Value> interface, on writable or value property detected.

static define<Value>(
  descriptor: DataDescriptor<Value>,
  callback?: ResultCallback
): DataDescriptor<Value> { ... }

Generic type variables:

| Name | Description | | :------ | :---------- | | Value | Constrains the value property from the descriptor object, and the return type of a DataDescriptor<Value> interface |

Parameters:

| Name: type | Description | | :---------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | descriptor: DataDescriptor<Value> | An object of a DataDescriptor<Value> interface, to set with the default values of the CommonDescriptor | | callback?: ResultCallback | An optional 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() function from the static guard() method |

Throws:

Throws an Error if the descriptor is not an object of a DataDescriptor<Value> interface, which means it doesn't contain writable or value property.

Returns:

The return value is an object of a DataDescriptor<Value> interface.

Usage:

// Example usage.
import { DataDescriptors } from '@angular-package/property';

interface PersonShape {
  firstName: string;
}

class Person implements PersonShape {
  firstName = '';
}

class People {
  firstName!: string;
}

const person: Person = new Person();
const people: People = new People();

const firstNameDescriptor = DataDescriptor.define<string, Person>({
  get(): string {
    return people.firstName;
  },
  set(value: string): void {
    people.firstName = value;
  },
});

// Define the property `firstName` in the `person` object to link with the same property in the `people` object.
// Changes to the property `firstName` in the `person` object affect the property `firstName` in the `people` object.
Object.defineProperty(person, 'firstName', firstNameDescriptor);

DataDescriptors Constructor

DataDescriptors()

Creates an instance, and optionally sets a data descriptor of a DataDescriptor<Value> interface.

DataDescriptors<Value>(descriptor?: DataDescriptor<Value>)

Generic type variables:

| Name | Description | | :------ | :---------- | | Value | Guards the value property from the descriptor object |

Parameters:

| Name: type | Description | | :----------------------------------- | :------------------------------------------------------------------------------------------------------------------------------ | | descriptor?: DataDescriptor<Value> | An optional object of a DataDescriptor<Value> interface to initially set data descriptor |

Usage:

// Example usage.
import { DataDescriptors } from '@angular-package/property';

interface PersonShape {
  firstName: string;
}

class Person implements PersonShape {
  firstName = '';
}

class People {
  firstName!: string;
}

const person: Person = new Person();
const people: People = new People();

const firstNameDescriptor = new DataDescriptors<string>({ // Initialize
  writable: false,
  value: 'not writable'
});

DataDescriptors instance methods

DataDescriptors.prototype.set()

Strictly sets with the last saved descriptor values, and stores privately data descriptor of a DataDescriptor<Value> interface.

set(
  descriptor: DataDescriptor<Value>,
  callback?: ResultCallback
): this { ... }

Generic type variables:

| Name | Description | | :------ | :------------------------------------------------------- | | Value | Guards the value property from the descriptor object |

Parameters:

| Name: type | Description | | :---------------------------------- | :--------------------------------------------------------------------------------------------------------------------------- | | descriptor: DataDescriptor<Value> | An object of a DataDescriptor<Value> interface, to set with the last saved descriptor | | callback?: ResultCallback | An optional 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() function from the static guard() method |

Throws:

Throws an Error if the descriptor is not an object of a DataDescriptor<Value> type, which means doesn't contain writable or value property.

Returns:

The return value is the DataDescriptors instance for the chaining.

Usage:

// Example usage.
import { DataDescriptors } from '@angular-package/property';

interface PersonShape {
  firstName: string;
}

class Person implements PersonShape {
  firstName = '';
}

class People {
  firstName!: string;
}

const person: Person = new Person();
const people: People = new People();

const firstNameDescriptor = new DataDescriptors<string>()
.set({
  configurable: false,
  enumerable: false,
  writable: false,
  value: people.firstName
});

// Defines the property `firstName` in the `person` object with the same value as the property in the `people` object.
Object.defineProperty(person, 'firstName', firstNameDescriptor.get);

DataDescriptors instance properties

DataDescriptors.prototype.get

Get privately stored data descriptor of a DataDescriptor<Value> interface defined by the instance set() method.

get get(): DataDescriptor<Value> { ... }

Usage:

// Example usage.
import { DataDescriptors } from '@angular-package/property';

interface PersonShape {
  firstName: string;
}

class Person implements PersonShape {
  firstName = '';
}

class People {
  firstName!: string;
}

const person: Person = new Person();
const people: People = new People();

const firstNameDescriptor = new DataDescriptors<string>()
.set({
  configurable: false,
  enumerable: false,
  writable: false,
  value: people.firstName
})
// After set, get the value.
.get;

// Defines the property `firstName` in the `person` object with the same value as the property in the `people` object.
Object.defineProperty(person, 'firstName', firstNameDescriptor);

Descriptor interface

AccessorDescriptor

Descriptor 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<Value, Obj>. More about property descriptors here.

interface AccessorDescriptor<Value> extends CommonDescriptor {
  get?: () => Value;
  set?: (value: Value) => void;
}

CommonDescriptor

Common keys configurable and enumerable of a boolean type for accessor and data descriptor, picked from the default PropertyDescriptor. More about property descriptors here.

interface CommonDescriptor
  extends Pick<PropertyDescriptor, 'configurable' | 'enumerable'> {}

DataDescriptor

Descriptor with its unique optional keys, writable of a boolean type and value of a generic Value type. More about property descriptors here.

interface DataDescriptor<Value> extends CommonDescriptor {
  writable?: boolean;
  value?: Value;
}

Descriptor type

ThisAccessorDescriptor

AccessorDescriptor 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.

type ThisAccessorDescriptor<Value, Obj> = AccessorDescriptor<Value> &
  ThisType<Obj>;

Descriptors

Property descriptors container.

export class Descriptors<
  Obj extends object | Function,
  Keys extends keyof Obj
> { ... }

GIT

Commit

Versioning

Semantic Versioning 2.0.0

Given a version number MAJOR.MINOR.PATCH, increment the:

  • MAJOR version when you make incompatible API changes,
  • MINOR version when you add functionality in a backwards-compatible manner, and
  • PATCH version when you make backwards-compatible bug fixes.

Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.

FAQ How should I deal with revisions in the 0.y.z initial development phase?

The simplest thing to do is start your initial development release at 0.1.0 and then increment the minor version for each subsequent release.

How do I know when to release 1.0.0?

If 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.

License

MIT © angular-package (license)

Packages

Useful and simple to use packages.

| Package | Description | Status | | :------------------------------------------- | :---------------------------------------------------------------- | -----: | | callback | Manages the callback function. | npm version | | change-detection | Improves application performance. | npm version | | component-loader | Handles dynamic loading components. | npm version | | core | Core features. | npm version | | error | Manages an Error. | npm version | | indexeddb | Wrapper to IndexedDB client-side storage. | npm version | | name | The name with prefix and suffix. | inprogress | | preferences | Preferences, settings, options, configuration and setup in steps. | inprogress | | prism | Prism highlighter module. | npm version | | property | Handles object properties. | npm version | | range | The range between a minimum and maximum. | npm version | | reactive | Automatize the process of creating some rxjs features. | npm version | | sass | Extension for sass modules and new modules. | npm version | | sass-list | Modified list Sass module. | npm version | | sass-string | Modified string Sass module. | npm version | | spectre.css | Modified Spectre.css - a lightweight, responsive, and modern CSS framework originally designed by Yan Zhu. | npm version | | storage | The storage of data under allowed names. | inprogress | | tag | Any tag with optional attributes. | inprogress | | testing | Support for testing other packages. | npm version | | text | Text on the template with replaceable tags. | inprogress | | type | Common types, type guards, and type checkers. | npm version | | ui | User interface. | npm version | | wrapper | Wrap the text with the opening and closing chars. | npm version |

Click on the package name to visit the package GitHub README.md