https://github.com/openinf/openinf-util-object
Common JavaScript object type-related utilities
https://github.com/openinf/openinf-util-object
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
Last synced: 10 months ago
JSON representation
Common JavaScript object type-related utilities
- Host: GitHub
- URL: https://github.com/openinf/openinf-util-object
- Owner: OpenINF
- License: other
- Created: 2021-01-17T04:06:55.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2025-04-21T19:36:46.000Z (10 months ago)
- Last Synced: 2025-04-21T20:40:31.963Z (10 months ago)
- Topics: 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
- Language: JavaScript
- Homepage: https://github.com/OpenINF/openinf-util-object#readme
- Size: 527 KB
- Stars: 3
- Watchers: 3
- Forks: 3
- Open Issues: 31
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
- Security: SECURITY.md
- Authors: AUTHORS
Awesome Lists containing this project
README
## `@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](#contributing) if you notice any omissions or errors.
Thanks!
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](#installation)
- [Usage](#usage)
- [API](#api)
- [Contributing](#contributing)
- [License](#license)
---
Installation
`@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
```ts
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_initialis 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
- [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)
- [MIT license](https://opensource.org/licenses/MIT)
at your option.
The [SPDX](https://spdx.dev) 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.
[conventional-commits-badge]: https://img.shields.io/badge/commit%20style-Conventional-%23fa6673?logoColor=white&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMCAzMCI+PHBhdGggc3R5bGU9ImZpbGw6ICNGRkYiIGQ9Ik0xNSwyQTEzLDEzLDAsMSwxLDIsMTUsMTMsMTMsMCwwLDEsMTUsMm0wLTJBMTUsMTUsMCwxLDAsMzAsMTUsMTUsMTUsMCwwLDAsMTUsMFoiLz48L3N2Zz4K 'Commit Style: Conventional Commits'
[conventional-commits-url]: https://www.conventionalcommits.org 'Commit Style: Conventional Commits'
[give it a star ⭐️]: https://github.com/OpenINF/openinf-util-object/stargazers
[license-badge--shields]: https://img.shields.io/badge/license-MIT%2FApache--2.0-blue.svg?logo=github 'License: MIT/Apache 2.0'
[license-badge-url]: #license 'License: MIT/Apache 2.0'
[matrix-badge--shields]: https://img.shields.io/badge/matrix-join%20chat-%2346BC99?logo=matrix 'Chat on Matrix'
[matrix-url]: https://matrix.to/#/#openinf-space:matrix.org 'You're invited to talk on Matrix'
[npm-badge--shields]: https://img.shields.io/npm/v/@openinf/util-object/latest.svg?logo=npm&color=fe7d37 'View on npm'
[npm-badge-url]: https://www.npmjs.com/package/@openinf/util-object#top 'View on npm'
[open an issue]: https://github.com/OpenINF/openinf-util-object/issues
[prettier-badge]: https://img.shields.io/badge/code_style-Prettier-ff69b4.svg?logo=prettier 'Code Style: Prettier'
[prettier-url]: https://prettier.io/playground 'Code Style: Prettier'
[project-status-badge]: https://img.shields.io/badge/project%20status-under%20construction-orange 'Project Status: Under construction badge'