/tiny-shortener

A new Tiny URL package with promise/async support.

Primary LanguageTypeScriptMIT LicenseMIT

tiny-shortener



English README Portuguese README

npm npm Maintainability Build Status Dependencies codecov

A new Tiny URL package for Node.js with promise/async and alias support.

About

The idea behind this package is for a Open Source class taken at college. The professor wanted us to make a contribution to an OSS project.

Since the TinyURL package is a great option after Google has shut down it's shortener service. But the TinyURL has no Promise support, making it difficult to use with any new ECMA standards. As there is a Pull Request(PR) opened supporting this in the project and still isn't merged, the idea behind tiny-shortener is to make a new package that supports this and goes a step further supporting alias, letting the user personalize the shortened URL.

obs: in case that that the alias isn't available the request still works but falls back to an default shortened link.

Installing

Requirements

Since this package uses only Node packages as support, Node will be needed as npm installed.

npm

npm install tiny-shortener --save

Using it

tiny(url, [alias])

  • url - Link to be shortened;
  • alias - Wanted personalization link;
  • Returns <Promise> - Shortened link or rejects an error.

Examples

TypeScript

With async/await support but works with Promises as well:

import { tiny } from 'tiny-shortener';

const asyncRequest = async (): Promise<void> => {
    const shortened = <string> await tiny('www.microsoft.com');
    const aliased = <string> await tiny('www.typescriptlang.org/', 'tslang');

    console.log(`Without alias is: ${shortened}\nWith alias: ${aliased}`);
};

JavaScript

With Promises support but works with async/await as well:

const tiny = require('tiny-shortener').tiny;

tiny('www.microsoft.com')
    .then(console.log)
    .catch(console.error);

// with alias
tiny('www.typescriptlang.org/', 'tslang')
    .then(console.log)
    .catch(console.error);
});

CLI

tiny-shortener --url www.example.com

Or even with alias support:

tiny-shortener --url www.foo.com --personalization bar

See more

See more in the examples folder.

Why TypeScript?

TS users suffer from having to make the typings for a large part of little projects. We've decide to make this as a TS project to allow a painless interoperability.

Style code

Using the Microsoft style code.

Testing

With Test Driven Development(TDD) in mind, we've used the Facebook's Jest test runner through the ts-jest package to run with the need to compiling the code. See more in ci folder;

Versioning

Versioning is made through npm versioning system. You can see what version is in the badge at the top of this README.

Build with

Contributing

We're opened to PRs as long you open an issue before explaining what you will be pushing and we will see if fits.

TODO

  • Write some more examples

Authors

License

See LICENSE for more about it.

Acknowledges

  • Mocklab - System of mocking API request for testing;
  • Stormpath - This express tutorial for writing examples;
  • Object Calisthenics - This post helped to understand a new concept thanks to @vinicius73 feedback on a Node.js Telegram group.