0.2.7 • Published 6 years ago

tiinytiny v0.2.7

Weekly downloads
3
License
WTFPL
Repository
github
Last release
6 years ago

TIINYTINY Supportive Library

This library is aimed to provide some useful functions for developers to make their code shorter!

Installation

Simply type the following command to install this module

npm install tiinytiny

Usage

To use this module, simply requires the module and use the functions attached on the returned object.

let tiiny = require( 'tiinytiny' );

Built-in object extensions

Since that the module is designed to extend the capabilities of the existing built-in objects, the supportive apis will be attached onto the built-in ojbects by default. Developers who don't want to mess with the built-in objects can use the following statement before the first use of tiinytiny module.

require('tiinytiny/safe');

Here's an example for developers who want to use tiinytiny but don't want to mess with their global built-in objects.

require( 'tiinytiny/safe' );
let tiiny = require( 'tiinytiny' );

Note that once the tiinytiny/safe is invoked, there tiinytiny apis will not be attached on the built-in objects anymore!

Package dependent extensions

Tiinytiny is aimed to provide more convenient usages to the both exsisting apis or libraries. So there're still some other extensions dependent on different packages. And these extensions will not be exported by default. Developers have to require them manually. For insance, the mongodb extension must be required in the following way.

require('tiinytiny/ext/mongodb');

Default API List

This section lists the apis defined in the library.

ImprintProperties(target, properties, options)

The api that defines a set of properties using Object.defineProperties on to an arbitrary object. This api provides easier and more intuitive usage which prevent the needs to assign the annoying options - {value, writable, configurable, enumerable} - per property.

params

nametypedescriptions
targetObjectThe object where the propoeries are appended to.
propertiesObjectThe object that contains the properties to be appended.
optionsObjectOptions {writable, configurable, enumerable} will be applied on all properties
ArrayOptions [writable, configurable, enumerable] will be applied on all properties
BooleanEquals to options [value, value, true] of Array input

return

The target object provided in the first argument.

extension point

Object.imprintProperties

example

const tiiny = require('tiinytiny');

// Append two properties, prop1 and prop2, onto an object and return the object instance
// The properties are created with {writable:true, configurable:true, enumerable:true}
let target = tiiny.ImprintProperties({}, {
	prop1: 1, prop2: 2
}, true);

PromiseWaitAll( promises )

The original Promise.all api will only guarantee that all the promises are resolved, it will reject immediately if any promise fails. Hence, developers will never know all other promises' statuses. This api is provided to solve this problem by waiting all the promises to end and return all the promises' results.

params

nametypedescriptions
promisesPromise[]An array of promises to be waited

return

An array of objects (listed in the following table) that decribes the promises' results.

fieldtypedescriptions
resolvedBooleantrue if the promise is successfully resolved
seqNumberThe promise's index in the original input promise array
resultAnyThe execution result returned by the promise

extension point

Promise.wait

example

const tiiny = require('tiinytiny');

let promises = [ Promise.resolve(), Promise.reject(), 1, 2, 3 ];
let results = await tiiny.PromiseWaitAll(promises);
results.forEach((pRes)=>{
    console.log(`${pRes.seq}: ${pRes.resolved?'resolved':'rejected'}`);
    console.log(pRes.result);
});

Include( modulePath )

It's a tiny api that helps the developers to solve the relative path problem without making the node module tree dirty. This api will use the entry module's location as base position to resolve relative paths. So the api will perform module require logic on behave of the entry module.

params

nametypedescriptions
modulePathStringThe path of the requied module

return

The requested module instance if succeeded, an exception will be raised otherwise.

extension point

global.include

example

/**
 **     Project Structure
 **         /entry.js
 **         /c/some.js
 **         /a/b/sub.js
 */

// module /c/some.js
const tiiny = require('tiinytiny');
const fs = tiiny.Include( 'fs' );
const sub = tiiny.Include( './a/b/sub' );

Period(callback(deltaTime), countdown)

A simple timer api allows developers to execute infinitely or a number of times.

params

nametypedescriptions
callbackFunctionThe path of the requied module
countdownIntegerThe times the callback will be executed

return

The Period will return an Object with the following properties that allows developers to control over the execution process.

{
    waitable: @Promise,     // A promise that is resolved when the period is stopped
    isStopped: @bool,       // Whether the period is stopped
    
    stop: @Function,        // Stop the periodic callback
    pause: @Function,       // Pause the periodic callback
    resume: @Function       // Resume the periodic callback
}

Please be noted that the callback will not be executed again if the period instance is being stopped by calling stop() method or the countdown condition is reached!

MongoDB Driver Extension

This extension is aimed to extend the apis provided by MongoDB Driver.

Registration Point

This extension is being registered at following module path

tiinytiny/ext/mongodb

Cursor.prototype.forEach(iteration_cb, end_cb)

This extension allows users to skip the second argument, end_cb of orgiinal forEach api. If end_cb is not passed, a Promise is returned which will be resolved when the whole iteration is done!

example

require('tiinytiny/ext/mongodb');

let collection;     // The mongodb collection to be operated on
let dataSet = [];

// await when the iteration is done!
await collection.find({}).forEach((doc)=>{
    // Do something on the doc
    doc.id = doc._id.toString();
    delete doc._id;
    dataSet.push(doc);
});

// Do something on the collected data
console.log(dataSet);
0.2.7

6 years ago

0.2.6

6 years ago

0.2.5

6 years ago

0.2.4

6 years ago

0.2.3

6 years ago

0.2.2

6 years ago

0.2.1

6 years ago

0.2.0

6 years ago

0.1.4

7 years ago

0.1.3

7 years ago

0.1.2

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago

0.0.3

7 years ago

0.0.2

7 years ago

0.0.1

7 years ago