1.2.9 • Published 15 days ago

@lv00/toolkit v1.2.9

Weekly downloads
-
License
MIT
Repository
-
Last release
15 days ago

🛠️ ToolKit

Publish to NPM Unit Test npm version License: MIT

Versatile JavaScript Toolkit for Everyday Use

Table of Contents

Installation

npm install @lv00/toolkit # or
pnpm install @lv00/toolkit # or
yarn add @lv00/toolkit # or
bun install @lv00/toolkit

Usage

import { ... } from "@lv00/toolkit";

Check

Easily check data type and format.

import { Is } from "@lv00/toolkit";

is.ip('127.0.0.1'); // true
is.ip('1.1.1'); // false

is.email('test@test.local'); // true
is.email('test@test'); // false

... // use intellisense to see more

CSV

Create CSV on the fly.

import { CSV } from '@lv00/toolkit';

const csv = new CSV({ header: ['name', 'age'] });

// Add a line to the CSV
csv.addLine(['John', 20]);

// Add value one by one
csv.addSequentially('Jane & Doe');
csv.addSequentially(21);
csv.addSequentially('Jack');
csv.addSequentially(22);

// Get the CSV as string
csv.toString('|');

// Clear the CSV and keep the header
csv.clear();

// Convert the CSV to a JS object
csv.toObject();
// [
//   { name: 'John', age: 20 },
//   { name: 'Jane & Doe', age: 21 },
//   { name: 'Jack', age: 22 }
// ]

// Read CSV from string
const csv2 = CSV.readString('name,age\r\nJohn,20\r\nJane,21\r\nJack,22', ',');
csv2.toString('|');

Gen

Generate pseudo-random data

random Name

import { Gen } from '@lv00/toolkit';

const newName = Gen.randomName(); // antonelli-xenodochial

random Number

import { Gen } from '@lv00/toolkit';

const newNumber = Gen.randomNumber(0, 100); // 42

Log

Easily log to various outputs.

import { Log } from 'lv00/toolkit';

const { Logger, Console, Level, File, Csv, Json } = Log;

// Define the endpoint of the log (transporter)
const logger = new Logger({
  t: [
    new Console(), // Log all levels to the console
    new File({ l: [Level.INFO], path: 'log.txt' }), // Log only INFO to a text based file
    new Csv({ l: [Level.ERROR], path: 'log.csv' }), // Log only ERROR to a CSV file
    new Json({ l: [Level.DEBUG], path: 'log.json' }), // Log only DEBUG to a JSON file
  ],
});

logger.log('Hello, World!'); // log to all transports registered for the level INFO
logger.log('Hello, World!', Level.ERROR); // log to all transports registered for the level ERROR

logger.info('Hello, World!');
logger.ok('Hello, World!');
logger.warn('Hello, World!');
logger.error('Hello, World!');
logger.debug('Hello, World!');

// Log an error
new Promise((_, reject) => {
  reject(new Error('Promise Error'));
}).catch((e) => logger.catch(e));

Parser

Parse data to object.

Dot

import { Parser } from "@lv00/toolkit";

const data = `battery.charge: 100
battery.charge.low: 20
battery.runtime: 995
battery.type: PbAc
device.mfr: EATON
device.model: Ellipse PRO 650
device.serial: P354M05BE0
device.type: ups
driver.name: usbhid-ups`;

const result = dot(data);
console.log(result);
// Will return the following object
{
  battery: {
    charge: {
      _value: "100",
      low: "20",
    },
    runtime: "995",
    type: "PbAc",
  },
  device: {
    mfr: "EATON",
    model: "Ellipse PRO 650",
    serial: "P354M05BE0",
    type: "ups",
  },
  driver: {
    name: "usbhid-ups",
  },
}

Plugin

Lazy loading of plugins.

import { Plugin } from "@lv00/toolkit";

// defined a plugin to exptend from (src/Plugin/index.ts)
export default class ExamplePlugin extends Plugin {
  name: string;
  constructor(name: string) {
    super();
    this.name = name;
  }
  execute() {
    return `Plugin ${this.name} executed`;
  }
}

// Create all the plugins you need

// Plugin 1 (src/Plugin/ExamplePlugin1.ts)
export default class ExamplePlugin1 extends ExamplePlugin {
  constructor() {
    super("1");
  }
}

// Plugin 2 (src/Plugin/ExamplePlugin2.ts)
export default class ExamplePlugin2 extends ExamplePlugin {
  constructor() {
    super("2");
  }
}

// Import the plugins 
Plugin.import("./src/Plugin/")
.forEach((plugin) => {
  const p = new plugin();
  p.execute();
});
// or
// Load all the plugins
Plugin.load("./src/Plugin/")
.forEach((plugin) => {
  plugin.execute();
});

Scanner

Read folder synchronously without headache

import { Scanner } from '@lv00/toolkit';

const scanner = Scanner.readFolder('./path/to/folder');

// Available properties
scanner.parent;
scanner.files;
scanner.folders;
scanner.path;

// return a array of files
scanner.flat();
// return json and remove circular references
scanner.toJson();

Unit

Convert data to human readable format

import { Unit } from './src';

// By default it will use 1000 as base
// and K, M, G, T, P as units
const size = Unit.sizeToUnitAuto(1000);

size.n; // 1
size.unit; // K
size.toString(); // 1K
size.round(2); // 1.00
size.roundToString(2); // 1.00K

Url

Conveniently build urls with query parameters.

import { Url, Uri } from '@lv00/toolkit';

const url = 'https://lv0.eu/';
const query = {
  p: '2',
  brand: ['sony', 'microsoft', 'nintendo'],
};

const q = Url.buildUrlWithQuery(url, query);
console.log(q.toString()); // https://lv0.eu/?p=2&brand=sony&brand=microsoft&brand=nintendo'

const uri = new Uri(
  url,
  "GET"
  query,
  )
const json = await uri.fetchJson()
1.2.9

15 days ago

1.2.8

20 days ago

1.2.7

20 days ago

1.2.6

20 days ago

1.2.5

2 months ago

1.2.4

2 months ago

1.2.3

2 months ago

1.2.2

2 months ago

1.2.1

2 months ago

1.2.0

7 months ago

1.1.11

8 months ago

1.1.9

8 months ago

1.1.10

8 months ago

1.1.8

9 months ago

1.1.7

9 months ago

1.1.6

11 months ago

1.1.5

11 months ago

1.1.4

11 months ago

1.1.3

11 months ago

1.1.2

12 months ago

1.1.1

12 months ago

1.1.0

12 months ago

1.0.9

12 months ago

1.0.8

12 months ago

1.0.7

12 months ago

1.0.6

12 months ago

1.0.5

12 months ago

1.0.4

12 months ago

1.0.3

12 months ago

1.0.2

12 months ago

1.0.1

12 months ago

1.0.0

12 months ago