OpenINF / openinf-util-object

Common JavaScript object type-related utilities
https://github.com/OpenINF/openinf-util-object#readme
Other
3 stars 3 forks source link
commonjs commonjs-module commonjs-package functional helpers helpers-library javascript javascript-library nodejs nodejs-module npm npm-package object predicate type typescript typescript-library typescript-package utilities

<img src="https://open.inf.is/assets/img/svg/logogram-color.svg" alt="OpenINF logo" title="OpenINF" align="right" height="96" width="96" />

## `@openinf/util-object` > Common JavaScript object type-related utilities
[!['View on npm'][npm-badge--shields]][npm-badge-url] [!['License: MIT/Apache-2.0'][license-badge--shields]][license-badge-url]


The high-level goal of @openinf/util-object is to serve as a Node.js package containing utilities for common JavaScript object type-related operations primarily enabling users to perform comparisons and analyze object contents. We are constantly working to improve this repository, so please feel free to contribute if you notice any omissions or errors.

Thanks!


Platform: Node.js LTS

Supported Node.js Environments

- [ ] v4:Argon (Ar) - [ ] v6:Boron (B) - [ ] v8:Carbon (C) - [ ] v10:Dubnium (Db) - [ ] v12:Erbium (Er) - [x] v14:Fermium (Fm) - [x] v16:Gallium (Ga) - [x] v18:Hydrogen (H)


[![Code Style: Prettier][prettier-badge]][prettier-url] [![Commit Style: Conventional Commits][conventional-commits-badge]][conventional-commits-url] [![Chat on Matrix][matrix-badge--shields]][matrix-url]





Table of Contents





Installation Corepack logo


`@openinf/util-object` runs on [supported versions of Node.js](#platform--node-js-lts) and is available via **`npm`**, **`pnpm`**, or **`yarn`**. **Using the npm CLI** See the [official documentation for this command](https://docs.npmjs.com/cli/commands/npm-install) for more information. ```shell npm i @openinf/util-object ``` **Using the pnpm CLI** See the [official documentation for this command](https://pnpm.io/cli/add) for more information. ```shell pnpm add @openinf/util-object ``` **Using the Yarn 1 CLI (Classic)** See the [official documentation for this command](https://classic.yarnpkg.com/en/docs/cli/add) for more information. ```shell yarn add @openinf/util-object ```

Usage

import { hasOwn } from '@openinf/util-object';

export class GhFileImporter {
  constructor(options: GhFileImporterOptions) {
    if (!hasOwn(options, 'destDir')) {
      throw new MissingOptionError('destDir');
    }
  }
}



API

map([opt_initial])T

Returns a map-like object. If opt_initial is provided, copies its own properties into the newly created object.

hasOwn(obj, key)boolean

Checks if the given key is a property in the map.

ownProperty(obj, key)unknown

Returns obj[key] iff key is obj's own property (is not inherited). Otherwise, returns undefined.

deepMerge(target, source, depth)Object

Deep merges source into target.

omit(o, props)Record<string, (number|RegExp)>
objectsEqualShallow(o1, o2)boolean
memo(obj, prop, factory)R

Takes an object, a property name, and a factory function. If the value of the property is undefined, it generates a value with the factory function, updates the object originally passed, and returns the value that was returned by the factory function.

#### map([opt_initial]) ⇒ T Returns a map-like object. If `opt_initial` is provided, copies its own properties into the newly created object. **Kind**: global function | Param | Type | Description | | ------------- | -------------- | ------------------------------------------- | | [opt_initial] | T | This should typically be an object literal. | #### hasOwn(obj, key) ⇒ boolean Checks if the given key is a property in the map. **Kind**: global function | Param | Type | Description | | ----- | ------------------- | -------------------- | | obj | T | a map like property. | | key | string | | #### ownProperty(obj, key) ⇒ unknown Returns obj[key] iff key is obj's own property (is not inherited). Otherwise, returns undefined. **Kind**: global function | Param | Type | | ----- | ---------------------------------------------------- | | obj | Record<string, (number\|RegExp)> | | key | string | #### deepMerge(target, source, depth) ⇒ Object Deep merges source into target. **Kind**: global function **Throws**: - Error If source contains a circular reference. Note: Only nested objects are deep-merged, primitives and arrays are not. | Param | Type | Default | Description | | ------ | ------------------- | --------------- | ------------------------------------------------------------------------- | | target | Object | | | | source | Object | | | | depth | number | 10 | The maximum merge depth. If exceeded, Object.assign will be used instead. | ##### deepMerge~queue : Array<ITargetSourceDepth> **Kind**: inner constant of [deepMerge](#deepMerge) #### omit(o, props) ⇒ Record<string, (number\|RegExp)> **Kind**: global function **Returns**: Record<string, (number\|RegExp)> - An object with the given properties removed. | Param | Type | Description | | ----- | ---------------------------------------------------- | ----------------------------------------------- | | o | Record<string, (number\|RegExp)> | An object to remove properties from. | | props | Array<string> | A list of properties to remove from the Object. | #### objectsEqualShallow(o1, o2) ⇒ boolean **Kind**: global function | Param | Type | | ----- | ---------------------------------------------------------------------------------------------------- | | o1 | !Record<string, (number\|RegExp)> \| null \| undefined | | o2 | !Record<string, (number\|RegExp)> \| null \| undefined | #### memo(obj, prop, factory) ⇒ R Takes an object, a property name, and a factory function. If the value of the property is undefined, it generates a value with the factory function, updates the object originally passed, and returns the value that was returned by the factory function. **Kind**: global function | Param | Type | | ------- | --------------------- | | obj | T | | prop | string | | factory | function |





Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. If for whatever reason you spot something to fix but cannot patch it yourself, please open an issue.


License

This project is licensed under either of

at your option.

The SPDX license identifier for this project is MIT OR Apache-2.0.





### Show Your Support
If you like the project (or want to bookmark it) —
— [give it a star ⭐️][] — it will greatly encourage us.