Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

all-of-just

Package Overview
Dependencies
Maintainers
0
Versions
47
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

all-of-just

A single collection of all of Just utility functions in one single library

  • 3.0.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
34
decreased by-22.73%
Maintainers
0
Weekly downloads
 
Created
Source

all-of-just

A single library containing all of the Just library's functions.

Features:

  • 🤏 Tiny - Including everything from this library is just 7.4KB min+gzip
  • 🌳 Tree Shakeable - Library is fully tree-shakeable, meaning you may just never hit the 7.4KB mentioned above. If you're using only 3-4 functions from this library, chances are high you'll barely reach just 1KB
  • 🗃️ Pre-bundled - This package doesn't install any of the just- packages. Everything is pre-bundled in it, hence even downloading this package is fast and light on your storage.

Install

pnpm add all-of-just

# npm
npm install all-of-just

# yarn
bun add all-of-just

Usage

just library is divided in many separate modules. There are 7 modules at the moment:

  1. Collection
  2. Objects
  3. Arrays
  4. Statistics
  5. Strings
  6. Numbers
  7. Functions

So, to you use a function in one of these modules, all you got to do is import the function prefixed by the module name. Example

// just-clone
// A part of `Collection` module
import { collectionsClone } from 'all-of-just';

Again, we want the equivalent of just-clone here. clone method is part of Collection module, so we import collectionsClone.

Here's all the functions below 👇

import {
  // `Collections` module
  collectionsClone,
  collectionsCompare,
  collectionsDiff,
  collectionsDiffApply,
  collectionsFlush,
  collectionsPluck,

  // `Objects` module
  objectsEntries,
  objectsExtend,
  objectsFilterObject,
  objectsFlipObject,
  objectsIsCircular,
  objectsIsEmpty,
  objectsIsPrimitive,
  objectsMapKeys,
  objectsMapObject,
  objectsMapValues,
  objectsMerge,
  objectsOmit,
  objectsPick,
  objectsReduceObject,
  objectsSafeGet,
  objectsSafeSet,
  objectsTypeof,
  objectsValues,
  objectsDeepMapValues,
  objectsHas,

  // Arrays Module
  arraysCartesianProduct,
  arraysCompact,
  arraysFlattenIt,
  arraysGroupBy,
  arraysIndex,
  arraysInsert,
  arraysIntersect,
  arraysLast,
  arraysPartition,
  arraysPermutations,
  arraysRandom,
  arraysRange,
  arraysRemove,
  arraysShuffle,
  arraysSortBy,
  arraysSplit,
  arraysSplitAt,
  arraysTail,
  arraysUnion,
  arraysUnique,
  arraysZip,
  arraysOrderBy,

  // Statistics module
  statisticsMean,
  statisticsMedian,
  statisticsMode,
  statisticsPercentile,
  statisticsSkewness,
  statisticsStandardDeviation,
  statisticsVariance,

  // Strings module
  stringsCamelCase,
  stringsCapitalize,
  stringsLeftPad,
  stringsPrune,
  stringsPascalCase,
  stringsKebabCase,
  stringsReplaceAll,
  stringsRightPad,
  stringsSnakeCase,
  stringsSquash,
  stringsTemplate,
  stringsTruncate,

  // Numbers module
  numbersClamp,
  numbersModulo,
  numbersIsPrime,
  numbersRandomInteger,

  // Functions modules
  functionsCompose,
  functionsCurry,
  functionsDebounce,
  functionsDemethodize,
  functionsFlip,
  functionsMemoize,
  functionsMemoizeLast,
  functionsOnce,
  functionsPartial,
  functionsRandom,
  functionsThrottle,
  functionsPipe,
} from 'all-of-just';

If you find these confusing, head over to the official Docs and understand the hierarchy. You'll get the flow soon enough 😁

Using submodules

The convention of [module][Function] may not be preferable. In that case, you can use the function directly from the submodules.

import { clone } from 'all-of-just/collections';

This is equivalent to

import { collectionsClone } from 'all-of-just';

You don't have to type the module name before the actual function.

Available modules:

import { 
  clone, 
  compare, 
  diff, 
  diffApply, 
  flush, 
  pluck
} from 'all-of-just/collections';

import {
  isCircular,
  isEmpty,
  entries,
  extend,
  filterObject,
  flipObject,
  mapKeys,
  mapObject,
  mapValues,
  merge,
  typeOf,
  omit,
  pick,
  isPrimitive,
  reduceObject,
  safeGet,
  safeSet,
  values,
  deepMapValues,
  has
} from 'all-of-just/objects';

import {
  cartesianProduct,
  compact,
  flattenIt,
  groupBy,
  index,
  insert,
  intersect,
  last,
  partition,
  permutations,
  random,
  range,
  remove,
  shuffle,
  sortBy,
  split,
  splitAt,
  tail,
  union,
  unique,
  zip,
  orderBy
} from 'all-of-just/arrays';

import {
  mean,
  median,
  mode,
  percentile,
  skewness,
  standardDeviation,
  variance
} from 'all-of-just/statistics';

import {
  camelCase,
  capitalize,
  kebabCase,
  leftPad,
  pascalCase,
  prune,
  replaceAll,
  rightPad,
  snakeCase,
  squash,
  template,
  truncate
} from 'all-of-just/strings';

import {
  clamp,
  modulo,
  sPrime,
  andomInteger
} from 'all-of-just/numbers';

import {
  compose,
  curry,
  debounce,
  demethodize,
  flip,
  memoize,
  memoizeLast,
  once,
  partial,
  random,
  throttle,
  pipe
} from 'all-of-just/functions';

Motivation

The original library by Angus Croll is really amazing, being very small and modular. But the modular aspect is also its bane in today's world.

Why? The way we use the functions from the original library is by doing an npm install just-[FUNCTION NAME]. Which works just fine. But nowadays, we're more used to libraries like date-fns, which exposes all of it's functions in the root module only. The advantages of this pattern are:

  1. Install only once: Only have to install once, means less trips to terminal, meaning less context switching, and small package.json and lock files.

  2. VSCode Auto import fully supported: In today's world of VSCode auto import, opening terminal, typing npm install just-[FUNCTION NAME], then coming back to code, and manually typing the imports is less than ideal. Auto import, on the other hand, has spoiled us really bad 😁. By having this monolithic pattern, you stay in code editor, you don't even have to go up to type imports, the function is available right there for you 🪄🪄

This library(all-of-just) strives to give a similar experience, at no added cost.

Installation size?

When you install all-of-just, you're not downloading all the just-* packages, which along with their packaged package.json and README.md can be quite big when downloaded all at once. Rather, all-of-just bundles all of them together into a few JS files, along with proper TypeScript types. Your machine downloads no more than 62.5KB while installing this library

Assumptions

  1. You bring your own bundler and minifier - This library is not optimized for direct use in browsers. it is spread over multiple files, and non-minified, and overall not ideal for direct usage in browser. It is recommended to have bundler/minifier toolchain set up to optimize and tree-shake this library.

  2. Using next gen bundler - This one is not as critical for final performance, but it can greatly affect your developer experience

The original library was made in 2016. The scene at that time was very different from what is now. Then, with bundlers like webpack, you couldn't afford to use big libraries, hence why the original library is divided in so many small packages.

Now, we have tools like Vite, Snowpack, WMR, which offer blazing fast compilation and Hot Module Reloading, and overall just super great dev experience. You could throw dependencies in the magnitudes of megabytes and your dev experience will still be blazing fast 🔥🔥.

Because of these modern tools, I can ship this larger library as one single package and your developer experience will still be really fast.

So the gist is: I assume you're using one of these next-gen bundlers, and not something traditional which rebundles every single thing on every reload, like Webpack/Grunt projects without HMR.

Source of truth

all-of-just doesn't have any original code of its own. It export the different just-* packages as it is without adding any logic in between. And I intend to keep it that way. That way, this library is just a proxy to the original just library, which makes sure that just is improved regularly, and by extension, all-of-just too.

TypeScript Support

  1. This package has TypeScript definition for some packages.

  2. To keep all-of-just simple, it doesn't export extra types/functions. You'll need to install that package separately and import from it.

MORE INFO

Contributing

Because this project depends on Just directly, and doesn't add anything of it's own, the only contribution we need is to fix this README file in case of typos/incorrect code example.

However, the best contribution would be to improve the Just library. That will automatically improve all-of-just too 😊

LICENSE

MIT Licensed

© Puru Vijay

Keywords

FAQs

Package last updated on 25 Jun 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc