1.18.1 ā€¢ Published 8 months ago

@thimpat/libutils v1.18.1

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

Test workflow Version workflow

Description

A library containing utility functions working in both ESM and CJS (+ some in the browser when compatible):


Installation

npm install @thimpat/libutils

Usage

CJS

const {...} = require("@thimpat/libutils");

ESM

import {...} from "@thimpat/libutils";

Helpers

normalisePath

  • Convert paths by replacing backward slashes "\" with forward slashes "/"
  • Always keeps the last "/" for directories
normalisePath("C:\\some\\where\\here")      // C:/some/where/here

joinPath

  • Join paths following the conventions above (normalisePath)
joinPath("aaa", "vvv")                      // ./aaa/vvv
joinPath("aaa", "vvv/")                     // ./aaa/vvv/

isConventionalFolder

If source finishes with a "/", it's a folder, otherwise, it's not.
isConventionalFolder("C:\\some\\where\\here\\")      // true

resolvePath

Resolve path
isConventionalFolder("\\where\\here\\")      // /home/user/some/where/here/

getAppDataDir

Returns OS data dir for the application

sleep

Delay code execution for a number of milliseconds
await sleep(5000);                                                      // 5 seconds

convertStringArgumentToArray

Convert a string into an argument list
// ["/Users/me/Chrome SxS/Application/chrome.exe", "--my-errors", "--aa=true"];
convertStringArgumentToArray("'/Users/me/Chrome SxS/Application/chrome.exe' --my-errors --aa=true");

convertToUrl

convertToUrl({protocol, host, port, pathname})

convertToUrl({host: "localhost", port: 8877})                           // http://localhost:8877/
convertToUrl({protocol: "https", host: "localhost", port: 8877})        // https://localhost:8877/
convertToUrl({protocol: "https", host: "somewhere"})                    // https://somewhere/
convertToUrl({protocol: "https", host: "somewhere", pathname: "here"})  // https://somewhere/here

areEquals

Compare two inputs (Objects, Arrays, etc.)
areEquals(15, "d");                                              // false

areEquals([1, 2, 3],[1, 2, 3]);                                  // true
areEquals([1, 2, 3],[1, 3, 2]);                                  // false

areEquals({aa: 1, bb: 2, cc: 3}, {aa: 1, bb: 2, cc: 3});         // true
areEquals({aa: 1, bb: 2, cc: 3}, {cc: 3, bb: 2, aa: 1});         // true
areEquals({aa: 1, bb: 2, cc: 3}, {aa: 0, bb: 2, cc: 3});         // false

// true
areEquals(
    [{ff: 6, ee: [1, 2, 3, "ewe", "dfdf"], dd: 4, cc: [1, 2, 3, "ewe", "dfdf"], bb: 2, aa: 1}, {ff: 6, ee: [1, 2, 3, "ewe", "dfdf"], dd: 4, cc: [1, 2, 3, "ewe", "dfdf"], bb: 2, aa: 1}],
    [{ff: 6, ee: [1, 2, 3, "ewe", "dfdf"], dd: 4, cc: [1, 2, 3, "ewe", "dfdf"], bb: 2, aa: 1}, {ff: 6, ee: [1, 2, 3, "ewe", "dfdf"], dd: 4, cc: [1, 2, 3, "ewe", "dfdf"], bb: 2, aa: 1}],
)

// true
areEquals(
    {ff: 6, ee: [1, 2, 3, "ewe",
                 [{ff: 6, ee: [1, 2, 3, "ewe", "dfdf"], dd: 4, cc: [1, 2, 3, "ewe", "dfdf"], bb: 2, aa: 1}, {ff: 6, ee: [1, 2, 3, "ewe", "dfdf"],
                     dd: 4, cc: [1, 2, 3, "ewe", "dfdf"], bb: 2, aa: 1}]], dd: 4, cc: [1, 2, 3, "ewe", "dfdf"], bb: 2, aa: 1},
    {ff: 6, ee: [1, 2, 3, "ewe",
                 [{ff: 6, ee: [1, 2, 3, "ewe", "dfdf"], dd: 4, cc: [1, 2, 3, "ewe", "dfdf"], bb: 2, aa: 1}, {ff: 6, ee: [1, 2, 3, "ewe", "dfdf"],
                     dd: 4, cc: [1, 2, 3, "ewe", "dfdf"], bb: 2, aa: 1}]], dd: 4, cc: [1, 2, 3, "ewe", "dfdf"], bb: 2, aa: 1},
);

calculateRelativePath

Calculate path to another path from a source

calculateCommon

Returns the longest common directory amongst a list of files and folders
calculateCommon(["/a/b/c/d", "/a/b/c/d/e", "/a/b/c/d/e/g/h/i"]);        // => "/a/b/c/"

getPackageJson

NEEDS REVIEW. NOT PRODUCTION READY.

Returns package.json content

// CJS and ESM
const packageJson = getPackageJson()                  
// Take project name into account
const packageJson = getPackageJson({projectname: "myproject"})                  
// Find project root even if the current working directory is within a module
// if  pwd === /home/user/projs/project1/node_modules/some_modules/

const packageJson = getPackageJson({root: true})            // Content of /home/user/projs/project1/package.json      
const packageJson = getPackageJson({root: false})           // Content of /home/user/projs/project1/node_modules/some_modules/package.json      
* Default value for "root" is false

getLocalIp

Try to best guess the machine local IP
getLocalIp()      // 192.168.1.4

simplifyObject

Remove circular references from an object
const obj1 = {a: 1, b: 2};
const obj2 = {};
obj1.c = obj2;
obj2.d = obj1;

const obj = simplifyObject(obj1);       // {a:1, b:2, c: {d: "[circular reference]" }}

Package

šŸ“ package                
ā”‚
ā””ā”€ā”€ā”€šŸ“ lib-utils.cjs             ā‡½ CJS version      - Node (43.7k unminified)
ā””ā”€ā”€ā”€šŸ“ lib-utils.mjs             ā‡½ ESM version      - Node (43.1k unminified)
ā”‚
ā””ā”€ā”€ā”€šŸ“ dist
ā”‚   ā”‚
ā”‚   ā”‚ šŸ“ lib-utils.mjs           ā‡½ ESM version      - Browser (18.6k unminified)
ā”‚   ā”‚ šŸ“ lib-utils.min.mjs       ā‡½ ESM version      - Browser (9.4k minified)

Changelog

current:
  • Add existInJson function
1.17.0:
  • Add functions getAppTempDir() and createAppTempDir()
1.16.0:
  • Add functions isDirectory, isFile and isSymbolicLink
1.15.8:
  • Fix clone function when source is falsy
1.15.6:
  • Fix normaliseFileName function (tested)
1.15.5:
  • Fix normaliseFileName function
1.15.4:
1.15.0:
  • Remove two obsolete functions: convertSessionToArg & convertSessionKeyNameToArg
  • Add function clone
  • Add functions getHashFromText and getHashFromFile
1.14.0:
  • Add function convertStringArgumentToArray
  • Add function convertSingleCommandLineArgumentToArray
1.13.6:
  • Fix areEquals changing the content type for arrays of objects
1.13.5:
  • Remove incompatible functions from browser library
1.13.4:
  • Allow symlinks in normaliseRealPathV2
1.12.2:
  • Fix simplifyObject misnaming
1.12.1:
  • Make simplifyObject immutable (bug)
  • Do not mutate the object passed to simplifyObject
1.12.0:
  • Add the function simplifyObject
1.11.0:
  • Add function convertStringArgumentToArray
1.10.4:
  • Make the function isItemInList() obsolete (The function was meant to be more expressive, but libutils is becoming more generic)
    • Use JavaScript built in [].includes() instead
1.10.0:
  • areEquals() to compare two variables (Objects, Arrays, etc.)
1.9.4:
  • Make non-generic function getGlobalArguments obsolete
1.9.3:
  • Review some minor output for the commonDir function
1.9.2:
  • Fix calculateCommon function

1.18.1

8 months ago

1.18.0

8 months ago

1.17.0

1 year ago

1.14.0

1 year ago

1.16.0

1 year ago

1.15.0

1 year ago

1.15.4

1 year ago

1.13.6

1 year ago

1.15.3

1 year ago

1.13.5

1 year ago

1.15.1

1 year ago

1.15.8

1 year ago

1.15.7

1 year ago

1.15.6

1 year ago

1.15.5

1 year ago

1.13.2

2 years ago

1.13.1

2 years ago

1.12.2

2 years ago

1.13.0

2 years ago

1.12.1

2 years ago

1.12.0

2 years ago

1.13.4

1 year ago

1.13.3

2 years ago

1.11.0

2 years ago

1.10.5

2 years ago

1.10.4

2 years ago

1.10.3

2 years ago

1.10.2

2 years ago

1.10.6

2 years ago

1.9.1

2 years ago

1.9.0

2 years ago

1.8.1

2 years ago

1.8.0

2 years ago

1.7.0

2 years ago

1.6.0

2 years ago

1.9.5

2 years ago

1.9.4

2 years ago

1.9.3

2 years ago

1.9.2

2 years ago

1.10.1

2 years ago

1.10.0

2 years ago

1.2.0

2 years ago

1.5.1

2 years ago

1.4.2

2 years ago

1.5.0

2 years ago

1.4.1

2 years ago

1.3.2

2 years ago

1.4.0

2 years ago

1.3.1

2 years ago

1.3.0

2 years ago

1.1.0

2 years ago

1.0.0

2 years ago