What is @hapi/hoek?
The @hapi/hoek package is a utility module for the hapi ecosystem, providing a set of common function helpers that are used across multiple hapi modules. It includes functions for manipulating objects, arrays, and other types, as well as utility functions for assertions, cloning, merging, and more.
What are @hapi/hoek's main functionalities?
Object Cloning
Creates a deep clone of an object, ensuring that nested objects are also cloned rather than just copying their references.
const Hoek = require('@hapi/hoek');
const obj = { a: 1, b: { c: 2 } };
const clone = Hoek.clone(obj);
Object Merging
Merges all the properties of the source object into the target object. This is a deep merge operation.
const Hoek = require('@hapi/hoek');
const target = { a: 1 };
const source = { b: 2 };
Hoek.merge(target, source);
Assertion
Throws an error if the condition is not true. Useful for adding assertions in your code to ensure that certain conditions are met.
const Hoek = require('@hapi/hoek');
Hoek.assert(1 === 1, 'This will not throw.');
Hoek.assert(1 === 2, 'This will throw an error.');
Reach
Allows you to access a nested property within an object using a string path.
const Hoek = require('@hapi/hoek');
const obj = { a: { b: { c: 1 } } };
const value = Hoek.reach(obj, 'a.b.c');
Apply To Defaults
Applies a set of default keys and values to an object, only adding values if they are not already present in the object.
const Hoek = require('@hapi/hoek');
const defaults = { a: 1, b: 2 };
const options = { b: 3, c: 4 };
const result = Hoek.applyToDefaults(defaults, options);
Other packages similar to @hapi/hoek
lodash
Lodash is a comprehensive utility library offering a wide range of functions for tasks such as object manipulation, array manipulation, string manipulation, and more. It is similar to @hapi/hoek but has a broader scope and a larger API surface.
underscore
Underscore.js is another utility library that provides functional programming helpers for JavaScript. It is similar to @hapi/hoek in providing utilities for working with objects and arrays but is not tailored specifically to the hapi ecosystem.
ramda
Ramda is a functional programming library that focuses on immutability and pure functions. While it provides many utilities similar to those in @hapi/hoek, Ramda emphasizes a functional programming paradigm.
@hapi/hoek
Utility methods for the hapi ecosystem.
hoek is part of the hapi ecosystem and was designed to work seamlessly with the hapi web framework and its other components (but works great on its own or with other frameworks). If you are using a different web framework and find this module useful, check out hapi – they work even better together.
This module is not intended to solve every problem for everyone, but rather as a central place to store hapi-specific methods. If you're looking for a general purpose utility module, check out lodash.
Visit the hapi.dev Developer Portal for tutorials, documentation, and support
Useful resources