0.0.4 • Published 8 months ago

@trongtindev/nodecore v0.0.4

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

Disclaimer

  • ⚠️ Expect bugs and breaking changes.
  • ⚠️ The project is under very active development.

Features

FeaturesStatus
core RouteWorking
core ControllersWorking
core MiddlewareOK
core Hook
core Static assetsOK
plugin Multipart: Process uploading native file or base64 file.
plugin Uploader: Direct file uploads local, cloud like S3.
plugin Cache: Support file, redis, memcached, using native Cache.redis().Working
plugin Database: Support mysql, mongodb, using native Database.mongodb().Working
plugin AuthenticationWorking
prototypes more native support for Number, String, Array, Object,...OK

Table of contents

About

Usage

See example folder.

Core

Http

https://www.npmjs.com/package/express

Logger

Request

import {Logger, Request} from '@trongtindev/nodecore';

Logger.info('requesting...');
Request.get('http://localhost', {
  timeout: 10000,
})
  .then((res) => Logger.info(res.statusText))
  .catch((error) => Logger.error(error.toString()));

Plugins

Auth

import Application, {Auth, AuthConfig} from '@trongtindev/nodecore';

const accessToken = await Auth.sign({
  aud: 'user id',
  iss: 'local',
  claims: {
    name: 'user name',
    email: 'uer email',
  },
});
const refreshToken = await Auth.sign({
  aud: userId.toString(),
  iss: 'local',
  claims: {
    userAgent: 'user-agent',
  },
}, {
  expiresIn: '30d',
});

Cache

Redis

https://www.npmjs.com/package/redis

import Application, {Cache, CacheConfig} from '@trongtindev/nodecore';

Cache.redis().get('users');
Cache.redis('myredis').get('users');

Database

Mongodb

https://www.npmjs.com/package/mongodb

import Application, {Datababse, DatabaseConfig} from '@trongtindev/nodecore';

Datababse.mongodb().collection('users');
Datababse.mongodb('mymongodb').collection('users');

Uploader

Authentication

Prototypes

✅ No need import anything! Ready to use.

Number

prettyBytes

Convert bytes value to a human-readable string. For options, reference the bytes https://www.npmjs.com/package/bytes.

1024.
prettyBytes(); // 1KB
1024.
prettyBytes({unitSeparator: ' '}); // 1 KB

prettyMs

Convert bytes value to a human-readable string. For options, reference the bytes https://www.npmjs.com/package/bytes.

60000.
prettyMs(); // 1min
60000.
prettyMs({long: true}); // 1 minute
60000.
prettyMs({long: true, locale: 'vi'}); // 1 phút

String

capitalCase

Capitalize a string

'helloWorld'.capitalCase(); // String

camelCase

Convert a string to its camelCase version.

'hello-world'.camelCase(); // helloWorld

snakeCase

Convert a string to its snake_case version.

'helloWorld'.snakeCase(); // hello_world

dashCase

Convert a string to its dash-case version. Optionally, you can also capitalize the first letter of each segment.

'helloWorld'.dashCase(); // hello-world

pascalCase

Convert a string to its PascalCase version.

'helloWorld'.pascalCase(); // HelloWorld

sentenceCase

Convert string to a sentence

'hello-world'.sentenceCase(); // Hello world

noCase

Remove all sorts of casing

'hello-world'.noCase(); // Hello world
'hello-world'.noCase(); // hello world
'hello_world'.noCase(); // hello world
'helloWorld'.noCase(); // hello world

titleCase

Convert a sentence to title case

'Here is a fox'.titleCase(); // Here Is a Fox

decode

  • Default is json
const str: string = '{"key":"value"}';

str.decode();
// {key:"value"}
const str: string = 'eyJrZXkiOiJ2YWx1ZSJ9';

str.decode('base64');
// {"key":"value"}

encode

const str: string = '{"key":"value"}';

str.encode('base64');
// eyJrZXkiOiJ2YWx1ZSJ9

truncate

Truncate a string after a given number of characters

'This is a very long, maybe not that long title'.truncate(12);
// This is a ve...

By default, the string is truncated exactly after the given characters. However, you can instruct the method to wait for the words to complete.

'This is a very long, maybe not that long title'.truncate(12, {
  completeWords: true,
});
// This is a very...

Also, it is possible to customize the suffix.

'This is a very long, maybe not that long title'.truncate(12, {
  completeWords: true,
  suffix: ' <a href="/1"> Read more </a>',
});
// This is a very <a href="/1"> Read more </a>

excerpt

The method is the same as the method. However, it strips the HTML from the String.truncate

'<p>This is a <strong>very long</strong>, maybe not that long title</p>'.excerpt(
  12,
  {
    completeWords: true,
  }
);
// This is a very...

condenseWhitespace

Condense whitespaces from a given string. The method removes the whitespace from the , , and multiple whitespaces between the words. left and right

' hello  world '.condenseWhitespace();
// "hello  world"

escapeHTML

Escape HTML from the string

'<p> foo © bar </p>'.escapeHTML();
// &lt;p&gt; foo © bar &lt;/p&gt;

toSlugCase

Convert string to slug

'this is title'.toSlugCase();
// this-is-title

Additionally, you can also encode non-ASCII symbols.

'<p> foo © bar </p>'.escapeHTML({
  encodeSymbols: true,
});
// &lt;p&gt; foo &#xA9; bar &lt;/p&gt;

encodeSymbols

Encode symbols. Checkout he for available options

'foo © bar'.encodeSymbols();
// foo &#xA9; bar

toBytes

Convert human-readable string to bytes. This method is the opposite of the method Number.prettyBytes

'1KB'.toBytes();
// 1024

toMs

Convert human-readable string to milliseconds. This method is the opposite of the method Number.prettyMs

'1min'.toMs();
// 60000
'1 minute'.toMs({long: true});
// 60000
'1 phút'.toMs({long: true, locale: 'vi'});
// 60000

generateRandom

  • Generate a cryptographically strong random string.
  • @length default is 10
const str: string = 'abcd';

str.generateRandom();
// bdccadcbaa
str.generateRandom(10);
// abdaaadbaadacccbcdcb

isEmpty

Find if a value is empty. Also checks for empty strings with all whitespace

''.isEmpty(10);
// true
'      '.generateRandom(10);
//true

isCuid

Validation a collision-resistant ID. This method is the opposite of the method String.cuid

'not a cuid'.isCuid();
// false
'tz4a98xxat96iws9zmbrgj3a'.isCuid();
// true

isObjectId

'not a object id'.isObjectId();
// false
'64cfba9e73e3aaae57e53069'.isObjectId();
// true

Array

const arr = ['a', 'b', 'c'];

arr.contains('a');
// true
arr.contains(['a', 'd']);
// true
arr.contains(['a', 'd'], {condition: 'AND'});
// false
const arr = ['a', 'b', 'c'];

arr.first();
// a
arr.firstOrNull();
// a | null
const arr = ['a', 'b', 'c'];

arr.last();
// c
arr.lastOrNull();
// c | null
const arr = ['a', 'b', 'c'];

arr.remove('a');
// arr or return [b, c]
arr.remove(['a', 'b']);
// arr or return [c]
arr.removeAt(0);
// arr or return [b, c]
arr.removeAt([1, 2]);
// arr or return [c]

Object

Object encode

  • Default is json
const obj: object = {key: 'value'};

obj.encode();
// {"key":"value"}
obj.encode('base64');
// eyJrZXkiOiJ2YWx1ZSJ9

Global

✅ No need import anything! Ready to use.

cuid

Generate a collision-resistant ID https://github.com/paralleldrive/cuid2

cuid();
// tz4a98xxat96iws9zmbrgj3a
cuid({length: 10});
// wjfazn7qnd
cuid({
  // A custom random function with the same API as Math.random.
  // You can use this to pass a cryptographically secure random function.
  random: Math.random,
  // the length of the id
  length: 10,
  // A custom fingerprint for the host environment. This is used to help
  // prevent collisions when generating ids in a distributed system.
  fingerprint: 'a-custom-host-fingerprint',
});
// wjfazn7qnd

generateRandom

  • Generate a cryptographically strong random string.
  • Like String.generateRandom but with system characters.
generateRandom();
// lMzPhsu4CF
generateRandom(10);
// cV2AE8sXsacAAf4qUqUO