open-index/open-npm huggingface dataset:
npm package: @siner308/todo-mcp-server
Description: A simple, MCP-compatible todo server with SQLite, priority, type, due date, and npx support.
Author: siner308
Latest version: 1.0.4

# todo-mcp-server

A simple, MCP-compatible todo server with SQLite, supporting priority, type, due date, and npx usage.

## Features
- Add, get, modify, remove todos
- Mark todos as done/undone
- Set priority (low/medium/high) and type (work, study, etc.)
- Set due date, track creation date
- Filter by priority, type, done status

## MCP Server Setup Example
```json
{
  "mcpServers": {
    "todo": {
      "command": "npx",
      "args": [
        "-y",
        "@siner308/todo-mcp-server"
      ]
    }
  }
}
```

## Data Directory (Optional)
By default, data is stored in a temporary directory (e.g., `/tmp/todo-mcp-server`).
To specify a custom data directory, set the `DATA_DIR` environment variable:

### MCP Server Example with env
```json
{
  "mcpServers": {
    "todo": {
      "command": "npx",
      "args": [
        "-y",
        "@siner308/todo-mcp-server"
      ],
      "env": {
        "DATA_DIR": "/your/data/dir"
      }
    }
  }
}
```

## How to Build & Run Locally
```bash
npm i
npm run build
```

## License
MIT
npm package: @sinergiadigital/ormgenerator
Description: A schematics
Latest version: 2.0.3

# Getting Started With Schematics

This repository is a basic Schematic implementation that serves as a starting point to create and publish Schematics to NPM.

### Testing

To test locally, install `@angular-devkit/schematics-cli` globally and use the `schematics` command line tool. That tool acts the same as the `generate` command of the Angular CLI, but also has a debug mode.

Check the documentation with
```bash
schematics --help
```

### Unit Testing

`npm run test` will run the unit tests, using Jasmine as a runner and test framework.

### Publishing

To publish, simply do:

```bash
npm run build
npm publish
```

That's it!
npm package: @sinergiadigital/table-demo
Description: A blank schematics
Latest version: 0.0.0

# Getting Started With Schematics

This repository is a basic Schematic implementation that serves as a starting point to create and publish Schematics to NPM.

### Testing

To test locally, install `@angular-devkit/schematics-cli` globally and use the `schematics` command line tool. That tool acts the same as the `generate` command of the Angular CLI, but also has a debug mode.

Check the documentation with
```bash
schematics --help
```

### Unit Testing

`npm run test` will run the unit tests, using Jasmine as a runner and test framework.

### Publishing

To publish, simply do:

```bash
npm run build
npm publish
```

That's it!
npm package: @sineverba/check-domain
Description: Checks if an email is part of a domain
Author: alessandro.arici@gmail.com
Latest version: 1.0.0

Check Domain
============

| CI / CD | Status |
| ------- | ------ |
| NPM | [![npm version](https://badge.fury.io/js/%40sineverba%2Fcheck%45domain.svg)](https://badge.fury.io/js/%40sineverba%2Fcheck%45domain) |
| Semaphore CI | [![Build Status](https://sineverba.semaphoreci.com/badges/npm-pkg-check-domain/branches/master.svg?style=shields&key=819e4483-6854-48be-91cb-602b609f6b5e)](https://sineverba.semaphoreci.com/projects/npm-pkg-check-domain) |
| Circle CI | [![CircleCI](https://dl.circleci.com/status-badge/img/gh/sineverba/npm-pkg-check-domain/tree/master.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/sineverba/npm-pkg-check-domain/tree/master) |
| Coverall | [![Coverage Status](https://coveralls.io/repos/github/sineverba/npm-pkg-check-domain/badge.svg?branch=master)](https://coveralls.io/github/sineverba/npm-pkg-check-domain?branch=master) |
| SonarCloud | [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=npm-pkg-check-domain&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=npm-pkg-check-domain) |


`Check domain` checks if an email is part of a domain.

### Installation

`npm install @sineverba/check-domain`

### Usage

```js
import {isInDomain} from "@sineverba/check-domain";

console.log(isInDomain("info@example.com", "example.com")); // prints true
console.log(isInDomain("info@example.com", "example.it")); // prints false

```

#### Tests

`npm run test` for simple test

`npm run cover` for coverage
npm package: @sineverba/concatenate
Description: Concatenate two strings
Author: alessandro.arici@gmail.com
Latest version: 1.2.0

Concatenate
===========

| CI / CD | Status |
| ------- | ------ |
| NPM | [![npm version](https://badge.fury.io/js/%40sineverba%2Fconcatenate.svg)](https://badge.fury.io/js/%40sineverba%2Fconcatenate) |
| Semaphore CI | [![Build Status](https://sineverba.semaphoreci.com/badges/npm-pkg-concatenate/branches/master.svg?style=shields&key=39b8f9bd-3213-4836-a1b3-ca116c91a9e9)](https://sineverba.semaphoreci.com/projects/npm-pkg-concatenate) |
| Circle CI | [![CircleCI](https://dl.circleci.com/status-badge/img/gh/sineverba/npm-pkg-concatenate/tree/master.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/sineverba/npm-pkg-concatenate/tree/master) |
| Coverall | [![Coverage Status](https://coveralls.io/repos/github/sineverba/npm-pkg-concatenate/badge.svg?branch=master)](https://coveralls.io/github/sineverba/npm-pkg-concatenate?branch=master) |
| SonarCloud | [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=npm-pkg-years-interval&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=npm-pkg-years-interval) |

`concatenate` returns a single string starting from two strings. If first (or second) string are empty, it returns the other one.

## Why is it useful?

I use it in a name + surname concatenation, if one of them can be empty. E.g. "Alex" + "" doesn't return "Alex " (note the space!) but "Alex".

### Installation
`npm install @sineverba/concatenate`

### Usage

```js
import { concatenate } from "@sineverba/concatenate";

const name = " ";
const surname = "Foo";

const result = concatenate(name, surname);
console.log(result); // prints Foo
```

#### Tests

`npm run test` for simple test

`npm run cover` for coverage
npm package: @sineverba/date-convert
Description: Convert a date from / to ISO format YYYYMMDD to human readable format (DD/MM/YYYY)
Author: alessandro.arici@gmail.com
Latest version: 2.3.0

Date Convert
============

| CI / CD | Status |
| ------- | ------ |
| NPM | [![npm version](https://badge.fury.io/js/%40sineverba%2Fdate-convert.svg)](https://badge.fury.io/js/%40sineverba%2Fdate-convert) |
| Semaphore CI | [![Build Status](https://sineverba.semaphoreci.com/badges/npm-pkg-date-convert/branches/master.svg)](https://sineverba.semaphoreci.com/projects/npm-pkg-date-convert) |
| Circle CI | [![CircleCI](https://circleci.com/gh/sineverba/npm-pkg-date-convert.svg?style=svg)](https://circleci.com/gh/sineverba/npm-pkg-date-convert) |
| Coverall | [![Coverage Status](https://coveralls.io/repos/github/sineverba/npm-pkg-date-convert/badge.svg?branch=master)](https://coveralls.io/github/sineverba/npm-pkg-date-convert?branch=master) |
| SonarCloud | [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=npm-pkg-date-convert&metric=alert_status)](https://sonarcloud.io/dashboard?id=npm-pkg-date-convert) |


`date-convert` converts a ISO format YYYYMMDD string "19820405" to "05/04/1982" (where 05 is day and 04 is April). Use `"/"` as separator in output.

It works also with a date with other format. Simply, call the method `fromIsoToHuman`.

For example

```js
const newDate = fromIsoToHuman("2024-01-31T15:27:42.427438", "DD/MM/YYYY");
console.log(newDate); // It prints 31/01/2024
```

### Accepted INPUT

| Input | Output |
| ----- | -------|
| "20220323" | 23/03/2022 |
| "2022-03-23" | 23/03/2022 |
| "2022-03-09T12:31:16.699904" | 09/03/2022 |


## Installation
`npm install @sineverba/date-convert`

## Usage

```js
// Import module
import { fromHumanToIso, fromIsoToHuman } from "@sineverba/date-convert";
// Or
// var {fromIsoToHuman, fromHumanToIso} = require('@sineverba/date-convert');

const humanDate = fromIsoToHuman("20200102");
console.log(humanDate); // returns 02/01/2020

const humanDateWithFormat = fromIsoToHuman("20200102", "YYYY-MM-DD");
console.log(humanDateWithFormat); // returns 2020-01-02

const isoDate = fromHumanToIso("02/01/2020");
console.log(isoDate); // returns 20200102

const isoDateWithFormat = fromHumanToIso("2020-01-02", "YYYY-MM-DD");
console.log(isoDateWithFormat); // returns 20200102
```

## Tests

`npm run test` for simple test

`npm run coverage` for coverage
npm package: @sineverba/feedback
Description: Renders a simple box with contextual advice to use in React projects
Author: alessandro.arici@gmail.com
Latest version: 2.0.1

Feedback
========

| CI / CD | Status |
| ------- | ------ |
| NPM | [![npm version](https://badge.fury.io/js/%40sineverba%2Ffeedback.svg)](https://badge.fury.io/js/%40sineverba%2Ffeedback) |
| Semaphore CI | [![Build Status](https://sineverba.semaphoreci.com/badges/npm-pkg-feedback/branches/master.svg?style=shields&key=819e4483-6854-48be-91cb-602b609f6b5e)](https://sineverba.semaphoreci.com/projects/npm-pkg-feedback) |
| Circle CI | [![CircleCI](https://dl.circleci.com/status-badge/img/gh/sineverba/npm-pkg-feedback/tree/master.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/sineverba/npm-pkg-feedback/tree/master) |
| Coverall | [![Coverage Status](https://coveralls.io/repos/github/sineverba/npm-pkg-feedback/badge.svg?branch=master)](https://coveralls.io/github/sineverba/npm-pkg-feedback?branch=master) |
| SonarCloud | [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=npm-pkg-feedback&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=npm-pkg-feedback) |


`Feedback` renders a simple box with contextual advice to use in React projects.

Inspired by `react-bootstrap Alert`.

### Installation

`npm install @sineverba/feedback`

### Usage

```js
import {Feedback} from "@sineverba/feedback";

export const App = () => {
  return (
    <Feedback />
    {/* It shows a success message "Operazione eseguita con successo" */}
    <Feedback message="great job!" />
    {/* It shows a success message "great job!" */}
    <Feedback level="error" />
    {/* It shows an error message "Si è verificato un errore" */}
    <Feedback level="error" message="oh no!" />
    {/* It shows an error message "Oh no!" */}
    <Feedback level="warning" />
    {/* It shows a warning message with the default text */}
    <Feedback level="warning" message="Attenzione!" />
    {/* It shows a warning message "Attenzione!" */}
  )
};

export default App;
```

### Props

| Name | Type | Default value |
| ---- | ---- | ------------- |
| message | string | "Operazione eseguita con successo" (if level is `success` or missing (default = success)) or "Si è verificato un errore" (if level is different from `success`) |
| level | string | "success" (possible values: success / warning / error) |

#### Tests

`npm run test` for simple test

`npm run cover` for coverage
npm package: @sineverba/getboolean
Description: Returns a Boolean value, whatever the input value
Author: alessandro.arici@gmail.com
Latest version: 1.0.0

| CI / CD | Status |
| ------- | ------ |
| NPM | [![npm version](https://badge.fury.io/js/getboolean.svg)](https://badge.fury.io/js/getboolean) |
| Semaphore CI | [![Build Status](https://sineverba.semaphoreci.com/badges/npm-pkg-getboolean/branches/master.svg)](https://sineverba.semaphoreci.com/projects/npm-pkg-getboolean) |
| Circle CI | [![CircleCI](https://circleci.com/gh/sineverba/npm-pkg-getboolean.svg?style=svg)](https://circleci.com/gh/sineverba/npm-pkg-getboolean) |
| Coverall | [![Coverage Status](https://coveralls.io/repos/github/sineverba/npm-pkg-getboolean/badge.svg?branch=master)](https://coveralls.io/github/sineverba/npm-pkg-getboolean?branch=master) |
| SonarCloud | [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=npm-pkg-getboolean&metric=alert_status)](https://sonarcloud.io/dashboard?id=npm-pkg-getboolean) |

`getboolean` returns a Boolean value, whatever the input value.


| Input | Output |
| ----- | ------ |
| true | true |
| false | false |
| "true" | true |
| "false" | false |
| "" | false |
| undefined | false |
| "TRUE" | true |
| "FALSE" | false |


## Installation
`npm install @sineverba/getboolean`

## Usage

```js
import { getBoolean } from "getBoolean";

const booleanValue = getBoolean(true); // returns true
const booleanValue = getBoolean("TRUE"); // returns true
```

## Tests

`npm run test` for simple test

`npm run coverage` for coverage
npm package: @sineverba/jwt-decoder
Description: Decodes a JWT Token as an object
Author: alessandro.arici@gmail.com
Latest version: 1.4.2

JWT decoder
===========

| CI / CD | Status |
| ------- | ------ |
| NPM | [![npm version](https://badge.fury.io/js/%40sineverba%2Fjwt-decoder.svg)](https://badge.fury.io/js/%40sineverba%2Fjwt-decoder) |
| Semaphore CI | [![Build Status](https://sineverba.semaphoreci.com/badges/jwt-decoder/branches/master.svg?style=shields&key=8d163508-7b97-4826-86ea-0843b7089483)](https://sineverba.semaphoreci.com/projects/jwt-decoder) |
| Circle CI | [![CircleCI](https://circleci.com/gh/sineverba/jwt-decoder.svg?style=svg)](https://circleci.com/gh/sineverba/jwt-decoder) |
| Coverall | [![Coverage Status](https://coveralls.io/repos/github/sineverba/jwt-decoder/badge.svg?branch=master)](https://coveralls.io/github/sineverba/jwt-decoder?branch=master) |
| SonarCloud | [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=jwt-decoder&metric=alert_status)](https://sonarcloud.io/dashboard?id=jwt-decoder) |


`jwt-decoder` decodes a [JWT Token](https://jwt.io/) as an object.

## Installation
`npm install @sineverba/jwt-decoder`

## Usage

```js
import { parseJwt } from "@sineverba/jwt-decoder";
const token =
    "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";

const parsedToken = parseJwt(token);
console.log(parsedToken); // returns {"sub": "1234567890", "name": "John Doe", "iat": 1516239022};
```

## Tests

`npm run test` for simple test

`npm run cover` for coverage
npm package: @sineverba/loading
Description: Generates a simple loader to use in React projects
Author: alessandro.arici@gmail.com
Latest version: 1.0.0

Loading
=======

| CI / CD | Status |
| ------- | ------ |
| NPM | [![npm version](https://badge.fury.io/js/%40sineverba%2Floading.svg)](https://badge.fury.io/js/%40sineverba%2Floading) |
| Semaphore CI | [![Build Status](https://sineverba.semaphoreci.com/badges/npm-pkg-loading/branches/master.svg?style=shields&key=96116fb6-cff3-4bd6-bf17-35519e01df20)](https://sineverba.semaphoreci.com/projects/npm-pkg-loading) |
| Circle CI | [![CircleCI](https://dl.circleci.com/status-badge/img/gh/sineverba/npm-pkg-loading/tree/master.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/sineverba/npm-pkg-loading/tree/master) |
| Coverall | [![Coverage Status](https://coveralls.io/repos/github/sineverba/npm-pkg-loading/badge.svg?branch=master)](https://coveralls.io/github/sineverba/npm-pkg-loading?branch=master) |
| SonarCloud | [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=npm-pkg-years-interval&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=npm-pkg-years-interval) |


`loading` generates a simple loader to use in React projects.

### Installation
`npm install @sineverba/loading@0.2.0` to install generic React version
`npm install @sineverba/loading@1.0.0` to install Next.js version

### Usage

```js
import {Loading} from "@sineverba/loading";

const Example = () => <Loading />:

export default Example;
```

### Props

| Name | Type | Default value |
| ---- | ---- | ------------- |
| Size | Size Props (string) | 2xl |

#### Tests

`npm run test` for simple test

`npm run cover` for coverage
npm package: @sineverba/mergestrings
Description: It merges multiple strings in one, separate by space
Author: alessandro.arici@gmail.com
Latest version: 1.1.0

| CI / CD | Status |
| ------- | ------ |
| NPM | [![npm version](https://badge.fury.io/js/mergestrings.svg)](https://badge.fury.io/js/mergestrings) |
| Semaphore CI | [![Build Status](https://sineverba.semaphoreci.com/badges/npm-pkg-mergestrings/branches/master.svg)](https://sineverba.semaphoreci.com/projects/npm-pkg-mergestrings) |
| Circle CI | [![CircleCI](https://circleci.com/gh/sineverba/npm-pkg-mergestrings.svg?style=svg)](https://circleci.com/gh/sineverba/npm-pkg-mergestrings) |
| Coverall | [![Coverage Status](https://coveralls.io/repos/github/sineverba/npm-pkg-mergestrings/badge.svg?branch=master)](https://coveralls.io/github/sineverba/npm-pkg-mergestrings?branch=master) |
| SonarCloud | [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=npm-pkg-mergestrings&metric=alert_status)](https://sonarcloud.io/dashboard?id=npm-pkg-mergestrings) |

`mergestrings` merge multiple strings in one string, seaparte by space.

## Installation
`npm install @sineverba/mergestrings`

## Usage

```js
import { mergeStrings } from "@sineverba/mergestrings";

const first = "alfa beta";
const second = "foo bar baz"

const result = mergeStrings(first, second);
console.log(result); // it prints "alfa beta foo bar baz"

```

## Tests

`npm run test` for simple test

`npm run coverage` for coverage
npm package: @sineverba/object-handler
Description: NPM package to handle (manipulate) an array of objects. Useful to transform an API response for a select
Author: alessandro.arici@gmail.com
Latest version: 0.1.0

Object Handler
==============

> NPM package to handle (manipulate) an array of objects. Useful to transform an API response for a select.

| CI / CD | Status |
| ------- | ------ |
| NPM | [![npm version](https://badge.fury.io/js/@sineverba%2fobject-handler.svg)](https://badge.fury.io/js/@sineverba%2fobject-handler) |
| Semaphore CI | [![Build Status](https://sineverba.semaphoreci.com/badges/npm-pkg-object-handler/branches/master.svg)](https://sineverba.semaphoreci.com/projects/npm-pkg-object-handler) |
| Circle CI | [![CircleCI](https://circleci.com/gh/sineverba/npm-pkg-object-handler.svg?style=svg)](https://circleci.com/gh/sineverba/npm-pkg-object-handler) |
| Coverall | [![Coverage Status](https://coveralls.io/repos/github/sineverba/npm-pkg-object-handler/badge.svg?branch=master)](https://coveralls.io/github/sineverba/npm-pkg-object-handler?branch=master) |
| SonarCloud | [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=npm-pkg-object-handler&metric=alert_status)](https://sonarcloud.io/dashboard?id=npm-pkg-object-handler) |


## Installation
`npm install @sineverba/object-handler`

## Usage
1. Import module

```js
import { objectHandler } from "@sineverba/object-handler";

const initialObject = { id: 1, player_name: "foo" };
const mapping = { value: "id", label: "player_name" };

const transformedObject = objectHandler(initialObject, mapping);

console.log(transformedObject); // Output: { value: 1, label: "foo" }
```
npm package: @sineverba/rangedates
Description: rangedates returns an object starting from one or two dates
Author: alessandro.arici@gmail.com
Latest version: 1.2.0

| CI / CD | Status |
| ------- | ------ |
| NPM | [![npm version](https://badge.fury.io/js/rangedates.svg)](https://badge.fury.io/js/rangedates) |
| Semaphore CI | [![Build Status](https://sineverba.semaphoreci.com/badges/npm-pkg-rangedates/branches/master.svg)](https://sineverba.semaphoreci.com/projects/npm-pkg-rangedates) |
| Circle CI | [![CircleCI](https://circleci.com/gh/sineverba/npm-pkg-rangedates.svg?style=svg)](https://circleci.com/gh/sineverba/npm-pkg-rangedates) |
| Coverall | [![Coverage Status](https://coveralls.io/repos/github/sineverba/npm-pkg-rangedates/badge.svg?branch=master)](https://coveralls.io/github/sineverba/npm-pkg-rangedates?branch=master) |
| SonarCloud | [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=npm-pkg-rangedates&metric=alert_status)](https://sonarcloud.io/dashboard?id=npm-pkg-rangedates) |

`rangedates` returns an object starting from one or two dates.

## Installation
`npm install @sineverba/rangedates`

## Usage

| Props | Required | Default |
| ----- | -------- | ------- |
| dateStart | N | today |
| dateEnd | N | today |
| outputFormat | N | "YYYY-MM-DD" |


```js
import { rangedates } from "@sineverba/rangedates";

const dateStart = "01/01/2024";
const dateEnd = "30/01/2024";
const outputFormat = "YYYY-MM-DD";

const result = rangedates(dateStart, dateEnd, outputFormat);
console.log(result);
```

It returns

```
{
  startDate: "2024-01-01",
  endDate: "2024-01-30"
}
```

## Tests

`npm run test` for simple test

`npm run coverage` for coverage
npm package: @sineverba/unique-keys
Description: Generate unique keys for an array
Author: alessandro.arici@gmail.com
Latest version: 1.2.0

Unique Keys
===========

| CI / CD | Status |
| ------- | ------ |
| NPM | [![npm version](https://badge.fury.io/js/%40sineverba%2Funique-keys.svg)](https://badge.fury.io/js/%40sineverba%2Funique-keys) |
| Semaphore CI | [![Build Status](https://sineverba.semaphoreci.com/badges/npm-pkg-unique-keys/branches/master.svg?style=shields&key=e89a0394-c246-40fe-b400-3117134b1be2)](https://sineverba.semaphoreci.com/projects/npm-pkg-unique-keys) |
| Circle CI | [![CircleCI](https://circleci.com/gh/sineverba/npm-pkg-unique-keys.svg?style=svg)](https://circleci.com/gh/sineverba/npm-pkg-unique-keys) |
| Coverall | [![Coverage Status](https://coveralls.io/repos/github/sineverba/npm-pkg-unique-keys/badge.svg?branch=master)](https://coveralls.io/github/sineverba/npm-pkg-unique-keys?branch=master) |
| SonarCloud | [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=npm-pkg-unique-keys&metric=alert_status)](https://sonarcloud.io/dashboard?id=npm-pkg-unique-keys) |

> Generates unique keys for an array.

`uniqueKeys` adds __unique__ ID to an object.

## Why is it useful?

I use it when I need to iterate on an array, to fix the warning "Each Child in a List Should Have a Unique 'key' Prop"

### Installation
`npm install @sineverba/unique-keys`

### Usage

```js
import { uniqueKeys } from "@sineverba/unique-keys";

const data = [
    {
        key: "fooKey",
        value: "fooValue"
    },
    {
        key: "barKey",
        value: "barValue"
    }
];

const newData = uniqueKeys(data);

console.log(newData);

/**
 * It prints
 * 
 * [
    {
        key: "fooKey",
        value: "fooValue",
        uniqueKey: "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"
    },
    {
        key: "barKey",
        value: "barValue",
        uniqueKey: "710b962e-041c-11e1-9234-0123456789ab"
    }
];
 */

```

#### Tests

`npm run test` for simple test

`npm run cover` for coverage
npm package: @sineverba/validate
Description: Validates a string, useful for forms
Author: alessandro.arici@gmail.com
Latest version: 1.2.0

| CI / CD | Status |
| ------- | ------ |
| NPM | [![npm version](https://badge.fury.io/js/validate.svg)](https://badge.fury.io/js/validate) |
| Semaphore CI | [![Build Status](https://sineverba.semaphoreci.com/badges/npm-pkg-validate/branches/master.svg)](https://sineverba.semaphoreci.com/projects/npm-pkg-validate) |
| Circle CI | [![CircleCI](https://circleci.com/gh/sineverba/npm-pkg-validate.svg?style=svg)](https://circleci.com/gh/sineverba/npm-pkg-validate) |
| Coverall | [![Coverage Status](https://coveralls.io/repos/github/sineverba/npm-pkg-validate/badge.svg?branch=master)](https://coveralls.io/github/sineverba/npm-pkg-validate?branch=master) |
| SonarCloud | [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=npm-pkg-validate&metric=alert_status)](https://sonarcloud.io/dashboard?id=npm-pkg-validate) |

`validate` validates a string. If string is valid, return true.

Useful in forms.

It validates an email or against an external regular expression.

You can pass a second parameter as true to use a third parameter as regular expression.

## Installation
`npm install @sineverba/validate`

## Usage

```js
import { validate } from "@sineverba/validate";

console.log(validate("info@example.com")); // It prints true
console.log(validate("infoexample.com")); // It prints false
console.log(validate("qwerty1234_", true, /^[a-zA-Z0-9_]+$/)); // It prints true, accept only alfphanumeric and underscore
```

## Tests

`npm run test` for simple test

`npm run coverage` for coverage
npm package: @sineverba/years-interval
Description: Get an interval of years, useful for copyright notes
Author: alessandro.arici@gmail.com
Latest version: 2.2.0

Years Interval
==============

| CI / CD | Status |
| ------- | ------ |
| NPM | [![npm version](https://badge.fury.io/js/%40sineverba%2Fyears-interval.svg)](https://badge.fury.io/js/%40sineverba%2Fyears-interval)
| Semaphore CI | [![Build Status](https://sineverba.semaphoreci.com/badges/npm-pkg-year-interval/branches/master.svg)](https://sineverba.semaphoreci.com/projects/npm-pkg-year-interval) |
| Circle CI | [![CircleCI](https://circleci.com/gh/sineverba/npm-pkg-year-interval.svg?style=svg)](https://circleci.com/gh/sineverba/npm-pkg-year-interval) |
| Coverall | [![Coverage Status](https://coveralls.io/repos/github/sineverba/npm-pkg-year-interval/badge.svg?branch=master)](https://coveralls.io/github/sineverba/npm-pkg-year-interval?branch=master) |
| SonarCloud | [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=npm-pkg-years-interval&metric=alert_status)](https://sonarcloud.io/dashboard?id=npm-pkg-years-interval) |

`years interval` returns current year or a string made by a year start + current year.

Useful to use in copyright section ("Copyright 2018-2020 by Acme INC").

"2018-2020" in previous example is what you get.

## Installation
`npm install @sineverba/years-interval`

## Usage

(In following examples current year is assumed as 2020)

```js
import { GetYearInterval } from '@sineverba/years-interval';

const yearInterval = GetYearInterval("2020");
console.log(yearInterval); // returns 2020
const newYearInterval = GetYearInterval("2018");
console.log(newYearInterval); // returns 2018-2020
// on next year...
console.log(yearInterval); // returns 2020-2021
console.log(newYearInterval); // returns 2018-2021
```

## Tests

`npm run test` for simple test

`npm run cover` for coverage
npm package: @singah/fetchwrapper
Description: ```bash npm i @singah/fetchWrapper ```
Author: Sigurros Inga Helgadottir
Latest version: 0.1.10

# Fetch wrapper

## Why use this Fetch wrapper?
This fetch wrapper makes it easier to fetch things from an API. 

In this fetch you can use get, post, put or del(stands for delete).

If fetch is unavailable, it will check for an XMLHttpRequest and if neither of those are present it can also use node-fetch.

___

## How to install
To install you open your terminal and write:
```
npm i @singah/fetchwrapper
```

In your html you link to theese two
```html
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="   crossorigin="anonymous"></script>

<script src="https://unpkg.com/@singah/fetchwrapper@0.1.10/umd.js"></script>

```
And when you link to your own js file, it should look something like this
```html
<script type="module" src="example.js"></script>
```

But if you are only going to use the node-fetch you only need to write
```javascript
const myFetch = require("@singah/fetchwrapper");
```

___

## How to use 
When you have written all things needed in your html, the next thing you need to do is write in your javascript file

```javascript
myFetch.init({
    address : "https://theApiAddressHere/",
    key: "1234"
});
```
Then you need to write a function for get, post, put or del(stands for delete), depending on what you are going to use this package for.

### Get example
```javascript
myFetch.get("subpageHere/")
    .then(result => {
        $(".MyClassName").text(result.WhatToGet);
    });
```

___


## Example using a free API
To start the test you need to open the terminal and write
```
npm i @singah/fetchwrapper
```

Then you need an html where you write
```html
<div class="person">

</div>

<!--At the bottom of your body you need-->
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="   crossorigin="anonymous"></script>

<script src="https://unpkg.com/@singah/fetchwrapper@0.1.10/umd.js"></script>

<script type="module" src="example.js"></script>
```
And in your example.js you need
```javascript
myFetch.init({
    address : "https://reqres.in/api/",
    key: "1234"
});
myFetch.get("users/")
    .then(result => {
        result.data.forEach(person => {
            $(".person").append(`<ul class="aperson"><li>${person.first_name + " " + person.last_name}</li><li><img src="${person.avatar}" alt="${person.first_name + " " + person.last_name}"</li><li>${person.email}</li></ul>`);
        });
    });
```
npm package: @singcl/express
Description: A counterfeit Express
Author: singcl
Latest version: 0.0.9

![Express@singcl](./src/img/express.jpg)
## 🐠 Express

[![Travis](https://img.shields.io/travis/singcl/express.svg?style=flat-square)](https://www.travis-ci.org/singcl/express)
[![npm (scoped)](https://img.shields.io/npm/v/@singcl/express.svg?style=flat-square)](https://www.npmjs.com/package/@singcl/express)
[![code style: prettier](https://img.shields.io/badge/code_style-prettier-10de6e.svg?style=flat-square)](https://github.com/prettier/prettier)
![David](https://img.shields.io/david/dev/singcl/express.svg?style=flat-square)
![David](https://img.shields.io/david/singcl/express.svg?style=flat-square)
[![npm](https://img.shields.io/npm/dm/@singcl/express.svg?style=flat-square)](https://www.npmjs.com/package/@singcl/express)

### A counterfeit Express.

### Usage
`npm i @singcl/express -S`

### example
```js
// var opn = require('opn')
var error = require('@singcl/express-error')
var express = require('@singcl/express')
var app = express()

app.use(function(req, res, next) {
    // 告诉客户端以UTF-8的方式解析 设置charset=utf-8解决前端拿到的数据中文乱码
    res.setHeader('Content-Type', 'text/plain;charset=utf-8')
    // next('[全局]-中间件错误捕获：next(err)')
    next()
})

app.get('/example', function(req, res, next) {
    // 告诉客户端以UTF-8的方式解析 设置charset=utf-8解决前端拿到的数据中文乱码
    res.setHeader('Content-Type', 'text/plain;charset=utf-8')
    next('[路由]-中间件错误捕获：next(err)')
})

app.get('/user', function(req, res, next) {
    // 告诉客户端以UTF-8的方式解析 设置charset=utf-8解决前端拿到的数据中文乱码
    res.setHeader('Content-Type', 'text/plain;charset=utf-8')
    res.write('来自星星的你', 'utf8')
    res.end(function() {
        console.log('数据已发送！')
    })
})

app.post('/user', function(req, res, next) {
    // 告诉客户端以UTF-8的方式解析 设置charset=utf-8解决前端拿到的数据中文乱码
    res.setHeader('Content-Type', 'text/plain;charset=utf-8')
    res.write('来自星星的POST', 'utf8')
    res.end(function() {
        console.log('post数据已发送！')
    })
})

// 错误中间件use - 自定义如何处理错误
app.use(error())

// 
app.listen(3000, function() {
    console.log('node server start at port 3000!')
    // opn('http://127.0.0.1:3000')
})
```

## License[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fsingcl%2Fexpress.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fsingcl%2Fexpress?ref=badge_shield)
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fsingcl%2Fexpress.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fsingcl%2Fexpress?ref=badge_large)

*badge: https://img.shields.io/*