Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fazendaaa/tiny-shortener
A new Tiny URL package with promise/async support.
https://github.com/fazendaaa/tiny-shortener
async-support nodejs-modules npm promise tinyurl typescript
Last synced: about 2 hours ago
JSON representation
A new Tiny URL package with promise/async support.
- Host: GitHub
- URL: https://github.com/fazendaaa/tiny-shortener
- Owner: Fazendaaa
- License: mit
- Created: 2018-04-18T13:34:08.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-08-19T12:08:48.000Z (over 2 years ago)
- Last Synced: 2025-01-12T12:13:14.201Z (about 15 hours ago)
- Topics: async-support, nodejs-modules, npm, promise, tinyurl, typescript
- Language: TypeScript
- Homepage: https://fazendaaa.github.io/tiny-shortener/
- Size: 414 KB
- Stars: 5
- Watchers: 4
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.PT.md
- License: LICENSE
Awesome Lists containing this project
README
# tiny-shortener
[![English README](https://img.shields.io/badge/Language-EN-blue.svg?longCache=true&style=for-the-badge)](./README.md)
[![Portuguese README](https://img.shields.io/badge/Linguagem-PT-green.svg?longCache=true&style=for-the-badge)](./README.PT.md)[![npm](https://img.shields.io/npm/v/tiny-shortener.svg?style=flat-square)](https://www.npmjs.com/package/tiny-shortener)
[![npm](https://img.shields.io/npm/dt/tiny-shortener.svg?style=flat-square)](https://www.npmjs.com/package/tiny-shortener)
[![Maintainability](https://api.codeclimate.com/v1/badges/04c334bbe522d8a0823f/maintainability)](https://codeclimate.com/github/Fazendaaa/tiny-shortener/maintainability)
[![Build Status](https://travis-ci.org/Fazendaaa/tiny-shortener.svg?branch=master)](https://travis-ci.org/Fazendaaa/tiny-shortener)
[![Dependencies](https://david-dm.org/Fazendaaa/tiny-shortener.svg?style=flat-square)](https://github.com/Fazendaaa/tiny-shortener/blob/master/package.json)
[![codecov](https://img.shields.io/codecov/c/github/Fazendaaa/endeavor.svg?style=flat-square)](https://codecov.io/gh/Fazendaaa/tiny-shortener)> Um novo pacote para Tiny URL em Node.js com suporte a promise/async e alias.
## Sobre
A ideia por trás desse pacto é para uma atividade na aula de Open Source da faculdade. O professor passou uma atividade para contrubirmos em um projeto OSS.Como o pacote [TinyURL](https://www.npmjs.com/package/tinyurl) se tornou uma grande opção após o [Google](https://www.theverge.com/2018/3/31/17184164/google-alphabet-url-shortening-service-closed) desligar o seu serviço. Porém o TinyURL não possui suporte a Promise, tornando díficil o uso com os mais recentes padrões [ECMA](https://www.w3schools.com/js/js_versions.asp). Há um Pull Request(PR) aberto no projeto que dá suporte a isso mas não foi adicionado ao código, a ideia por trás do __tiny-shortener__ é fazer um novo pacote que suporte isso e dar um passo além, suportando alias para as URLs, deixando o usuário personalizar ainda mais.
obs: em casos nos quais o alias não se encontra disponível o sistema retorna um link encurtado sem a personalização apenas.
## Instalando
### Requerimentos
Como esse pacote apenas usa os padrões de [Node](https://nodejs.org/), ele será necessário como o [npm](https://www.npmjs.com/) instalado na máquina.### npm
```
npm install tiny-shortener --save
```## Usando
### tiny(url, [alias])
* url - Link a ser encurtado;
* alias - Opção de personalização;
* Retorna > - Link encurtado ou erro.### Exemplos
#### TypeScript
Com suporte a async/await porém funciona com Promises também:
```typescript
import { tiny } from 'tiny-shortener';const asyncRequest = async (): Promise => {
const shortened = await tiny('www.microsoft.com');
const aliased = await tiny('www.typescriptlang.org/', 'tslang');console.log(`Without alias is: ${shortened}\nWith alias: ${aliased}`);
};
```#### JavaScript
Com suporte a Promises porém funciona com async/await também:
```javascript
const tiny = require('tiny-shortener').tiny;tiny('www.microsoft.com')
.then(console.log)
.catch(console.error);// com alias
tiny('www.typescriptlang.org/', 'tslang')
.then(console.log)
.catch(console.error);
```#### CLI
```shell
tiny-shortener --url www.example.com
```Ou até mesmo com suporte para alias:
```shell
tiny-shortener --url www.foo.com --personalization bar
```#### Veja mais
Veja os exemplos na pasta [examples](./examples).## Por que TypeScript?
Usuários de TS sofrem ao ter que fazerem typings para uma boa parte de projetos que usam, sejam eles grandes ou pequenos. Nós decidimos fazer esse projeto dessa maneira justamente para suprir essa necessidade e permitir a intereoperabilidade.### Estilo de Código
Foi utilizado o padrão de código [Microsoft](https://github.com/Microsoft/tslint-microsoft-contrib).## Testes
Através do [Test Driven Development(TDD)](https://en.wikipedia.org/wiki/Test-driven_development), foi utilizado a ferramenta do Facebook chamada [Jest](https://facebook.github.io/jest/) como test runner através do pacote de supporte para TS chamado [ts-jest](https://www.npmjs.com/package/ts-jest), que permite rodar o código sem a necessidade de compilar ele. Veja mais dos testes na pasta [ci](./ci).## Versionamento
O versionamento é gerenciado através do npm mesmo. Você pode ver a versão desse pacote no selo no começo deste README.## Construído com
* [commander](https://github.com/tj/commander.js).## Contribuindo
Nós estamos abertos para PR com tanto que explicite bem a necessidade através de uma issue.## TODO
* Escrever mais exemplos## Autores
* [Fazendaaa](https://github.com/Fazendaaa) - O primeiro e único;
* [pit00](https://github.com/pit00) - Du Hast.## Licença
Veja [LICENSE](./LICENSE) para mais informações.## Agradecimentos
* [Mocklab](app.mocklab.io) - Pelo sistema de teste de API.
* Stormpath - [Este](https://stormpath.com/blog/how-to-write-middleware-for-express-apps) tutorial express tutorial na hora de escrever exemplos;
* Object Calisthenics - [Este](https://medium.com/web-engineering-vox/improving-code-quality-with-object-calisthenics-aa4ad67a61f1) post ajudou a entender um novo conceito graça ao feedback do [@vinicius73](https://t.me/vinicius73) no grupo de [Node.js](https://t.me/NodejsBR) no Telegram.