npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

tiinytiny

v0.2.7

Published

This module provides tiiny things to help developers to write less lines...

Downloads

12

Readme

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

| name | type | descriptions | |:-------|:----|:----| | target | Object | |The object where the propoeries are appended to. | | properties | Object | | The object that contains the properties to be appended. | | options | Object | Options {writable, configurable, enumerable} will be applied on all properties | | | Array | Options [writable, configurable, enumerable] will be applied on all properties | | | Boolean | Equals 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

| name | type | descriptions | |:----|:----|:----| | promises | Promise[] | An array of promises to be waited |

return

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

| field | type | descriptions | |:----|:----|:----| | resolved | Boolean | true if the promise is successfully resolved | | seq | Number | The promise's index in the original input promise array | | result | Any | The 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

| name | type | descriptions | |:----|:----|:----| | modulePath | String | The 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

| name | type | descriptions | |:----|:----|:----| | callback | Function | The path of the requied module | | countdown | Integer | The 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);