open-index/open-npm huggingface dataset:
npm package: @rennalabs/tsconfig
Description: Renna Labs' Typescript Config
Author: Renna-Labs
Latest version: 1.1.0

# Renna Labs Typescript Config

[![npm version](https://badge.fury.io/js/@rennalabs%2Ftsconfig.svg)](https://badge.fury.io/js/@rennalabs%2Ftsconfig)

## Install

```sh
npx install-peerdeps --dev @rennalabs/tsconfig
```

## Usage

In your `.eslintrc.js`:

```tsx
module.exports = {
  extends: ['@rennalabs/tsconfig'],
  parserOptions: {
    project: './tsconfig.json'
  }
};
```

In your `tsconfig.json` you can extend our base config

```tsx
{
  "extends": "@rennalabs/tsconfig/tsconfig.json",
}
```

## License

MIT
npm package: @rennehir/gatsby-theme-personal-site
Description: This is a Gatsby theme that I built to participate in [Gatsby Theme Jam](https://themejam.gatsbyjs.org).
Author: Renne Hirsimäki
Latest version: 1.1.1

# Gatsby Theme for your personal site

This is a Gatsby theme that I built to participate in [Gatsby Theme Jam](https://themejam.gatsbyjs.org).

See the [live demo](https://gatsby-theme-personal-site.netlify.com)

## Installation

To use this theme in your Gatsby sites, follow these instructions:

1. Install the theme

```sh
npm install --save @rennehir/gatsby-theme-personal-site
```

2. Add the theme to your `gatsby-config.js`:

```js
module.exports = {
  plugins: ["@rennehir/gatsby-theme-personal-site"],
}
```

3. Add content to the `/content` directory

4. Start your site

```sh
gatsby develop
```

## Adding content to your site

This theme follows a content directory structure like this:

```sh
content
  +- assets
  +- blog
  +- general
      +- footer
          +- index.yml
      +- hero
          +- index.yml
  +- portfolio
  +- references
  +- services
```

Add all your assets to the `assets` directory and you can reference them from other documents.

The `general` directory holds information that is used for example in hero or footer

### `content/general/hero/index.yml`

```yaml
greeting: "Hello, I am"
name: "Name"
subtitle: "– a web developer"
image: "../../assets/{your-image}.svg"
imageAltText: "Web Developer"
```

### `content/general/footer/index.yml`

Add urls to your social media profiles

```yaml
facebook: ""
github: ""
linkedin: ""
twitter: ""
```

### `content/blog/{post}.mdx`

Put `.mdx` files in this directory to turn them into blog posts. Use these fields in the frontmatter:

```yaml
---
title: Hello World
date: 2019-07-23
cover: "../assets/{your-image}.jpg"
---

```

### `content/portfolio/{item}.mdx`

Put `.mdx` files in this directory to turn them into your portfolio items. Use these fields in the frontmatter:

```yaml
---
title: "title"
publishedDate: 2019-02-12
screenshot: "../assets/{your-image}.png"
---

```

### `content/references/{ref}.mdx`

Put `.mdx` files in this directory to turn them into references. Use these fields in the frontmatter:

```yaml
---
name: Company or person name
publishedDate: 2019-06-15
image: "../assets/{your-image}.png"
---

```

### `content/services/{service}.mdx`

Put `.mdx` files in this directory to turn them into services. Use these fields in the frontmatter:

```yaml
---
title: Application Development
illustration: "../assets/undraw_Mobile_application_mr4r.svg"
---

```
npm package: @rennehir/tinder-cli
Description: [![npm version](https://badge.fury.io/js/%40rennehir%2Ftinder-cli.svg)](https://badge.fury.io/js/%40rennehir%2Ftinder-cli)
Latest version: 1.0.2

# tinder-cli

[![npm version](https://badge.fury.io/js/%40rennehir%2Ftinder-cli.svg)](https://badge.fury.io/js/%40rennehir%2Ftinder-cli)

This project is created a a part of StUpiD hAcK 2020 by Junction.

## Why

The goal of StUpiD hAcK 2020 was to create something extremely stupid. We thought that it would be stupid to create a CLI application for something that is normaly used on your mobile phone. Tinder was a great choice for this because it is normally so UI driven.

CLIT (short for commandlineinterfacefortinder) makes dating possible from your terminal so its easier and efficient to do it while youre working at the same time.

## Install

```bash
$ npm install --global @rennehir/tinder-cli
```

## Usage

Login with your phone number and a one-time password and start matching like never before!

## CLI

```bash
$ tinder-cli --help

  Usage
    $ tinder-cli

  Examples
    $ tinder-cli
```

## Built With

- ink - https://github.com/vadimdemedes/ink/
- Tinder API - unofficial docs here: https://github.com/fbessez/Tinder

## Authors

See also the list of [contributors](https://github.com/rennehir/tinder-cli/graphs/contributors) who participated in this project.

## License

This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details

## Acknowledgments

- Thanks to [fbessez](https://github.com/fbessez) for sniffing the Tinder API - https://github.com/fbessez/Tinder
npm package: @renofizaldy/strapi-plugin-maplink
Description: Simple Google Maps lat-long picker for Strapi
Author: Reno Fizaldy
Latest version: 1.0.2

# Strapi plugin Maplink

This custom-fields plugin built on Strapi **v4.5.3** and using **React Google Maps Api v2.17.0**

Add your Google Maps API Key on `STRAPI_ADMIN_GMAPSKEY` in your `.env` if you want Google Maps display without development purpose
```
STRAPI_ADMIN_GMAPSKEY=your_google_maps_api_key
```

Example latitude longitude output (string) on databases or API call
```
"-41.21222018286648, 174.8906183549883"
```

Maplink on Custom-Field 
![enter image description here](https://i.postimg.cc/rFFXKJ3f/Screenshot-2022-12-11-160820.jpg)

Maplink on Content Manager
![enter image description here](https://i.postimg.cc/qMbfnKd4/Screenshot-2022-12-11-161013.jpg)
npm package: @renoirb/conventions-use-bili
Description: Reusable Babel,Rollup configs leveraging https://github.com/egoist/bili
Author: Renoir Boulanger
Latest version: 1.3.2-SNAPSHOT.1

# [@renoirb/conventions-use-bili][url-repo] [![npm][shields-npm]][url-npmjs]

Another wrapper to wrap Rollup's wrapper:
[egoist/bili](https://github.com/egoist/bili)

| Size                                | Dependencies                                                             |
| ----------------------------------- | ------------------------------------------------------------------------ |
| ![Bundle size][shields-bundle-size] | ![Libraries.io dependency status for latest release][shields-dependabot] |

[url-npmjs]: https://www.npmjs.com/package/%40renoirb%2Fconventions-use-bili
[url-repo]:
  https://github.com/renoirb/experiments-201908-rush-typescript-just-bili-monorepo/tree/v1.x-dev/conventions/use-bili
[shields-npm]:
  https://img.shields.io/npm/v/%40renoirb%2Fconventions-use-bili?style=flat-square&logo=appveyor&label=npm&logo=npm
[shields-bundle-size]:
  https://img.shields.io/bundlephobia/min/%40renoirb%2Fconventions-use-bili?style=flat-square
[shields-dependabot]:
  https://img.shields.io/librariesio/release/npm/%40renoirb%2Fconventions-use-bili?style=flat-square&logo=appveyor&logo=dependabot
npm package: @renoirb/conventions-use-eslint
Description: Reusable ESLint configs
Author: Renoir Boulanger
Latest version: 1.3.2-SNAPSHOT.1

# [@renoirb/conventions-use-eslint][url-repo] [![npm][shields-npm]][url-npmjs]

Reusable (_and configuration free_) **ESLint 7** utility.

This package wraps as a one-dependency drop-in ESLint utility, with `use-eslint` CLI.

Alternatively, refer to [**@rushstack/eslint-config**](https://github.com/microsoft/rushstack/tree/%40rushstack/eslint-config_v1.0.2/stack/eslint-config#usage) and setup manually for all packages.

| Size                                | Dependencies                                                             |
| ----------------------------------- | ------------------------------------------------------------------------ |
| ![Bundle size][shields-bundle-size] | ![Libraries.io dependency status for latest release][shields-dependabot] |

[url-npmjs]: https://www.npmjs.com/package/%40renoirb%2Fconventions-use-eslint
[url-repo]: https://github.com/renoirb/experiments-201908-rush-typescript-just-bili-monorepo/tree/v1.x-dev/conventions/use-eslint
[shields-npm]: https://img.shields.io/npm/v/%40renoirb%2Fconventions-use-eslint?style=flat-square&logo=appveyor&label=npm&logo=npm
[shields-bundle-size]: https://img.shields.io/bundlephobia/min/%40renoirb%2Fconventions-use-eslint?style=flat-square
[shields-dependabot]: https://img.shields.io/librariesio/release/npm/%40renoirb%2Fconventions-use-eslint?style=flat-square&logo=appveyor&logo=dependabot

## Bookmarks

- [**@rushstack/eslint-config**](https://www.npmjs.com/package/@rushstack/eslint-config) [GitHub](https://github.com/microsoft/rushstack/tree/%40rushstack/eslint-config_v1.0.2/stack/eslint-config)
- **@rushstack/eslint-plugin** [GitHub](https://github.com/microsoft/rushstack/tree/%40rushstack/eslint-config_v1.0.2/stack/eslint-plugin)
npm package: @renoirb/conventions-use-jest
Description: Reusable Jest configs
Author: Renoir Boulanger
Latest version: 1.3.2-SNAPSHOT.1

# [@renoirb/conventions-use-jest][url-repo] [![npm][shields-npm]][url-npmjs]

Reusable Jest configs

| Size                                | Dependencies                                                             |
| ----------------------------------- | ------------------------------------------------------------------------ |
| ![Bundle size][shields-bundle-size] | ![Libraries.io dependency status for latest release][shields-dependabot] |

[url-npmjs]: https://www.npmjs.com/package/%40renoirb%2Fconventions-use-jest
[url-repo]:
  https://github.com/renoirb/experiments-201908-rush-typescript-just-bili-monorepo/tree/v1.x-dev/conventions/use-jest
[shields-npm]:
  https://img.shields.io/npm/v/%40renoirb%2Fconventions-use-jest?style=flat-square&logo=appveyor&label=npm&logo=npm
[shields-bundle-size]:
  https://img.shields.io/bundlephobia/min/%40renoirb%2Fconventions-use-jest?style=flat-square
[shields-dependabot]:
  https://img.shields.io/librariesio/release/npm/%40renoirb%2Fconventions-use-jest?style=flat-square&logo=appveyor&logo=dependabot
npm package: @renoirb/conventions-use-prettier
Description: Reusable Prettier configs
Author: Renoir Boulanger
Latest version: 1.3.0

# [@renoirb/conventions-use-prettier][url-repo] [![npm][shields-npm]][url-npmjs]

Reusable Prettier config

| Size                                | Dependencies                                                             |
| ----------------------------------- | ------------------------------------------------------------------------ |
| ![Bundle size][shields-bundle-size] | ![Libraries.io dependency status for latest release][shields-dependabot] |

[url-npmjs]: https://www.npmjs.com/package/%40renoirb%2Fconventions-use-prettier
[url-repo]: https://github.com/renoirb/experiments-201908-rush-typescript-just-bili-monorepo/tree/v1.x-dev/conventions/use-prettier
[shields-npm]: https://img.shields.io/npm/v/%40renoirb%2Fconventions-use-prettier?style=flat-square&logo=appveyor&label=npm&logo=npm
[shields-bundle-size]: https://img.shields.io/bundlephobia/min/%40renoirb%2Fconventions-use-prettier?style=flat-square
[shields-dependabot]: https://img.shields.io/librariesio/release/npm/%40renoirb%2Fconventions-use-prettier?style=flat-square&logo=appveyor&logo=dependabot
npm package: @renoirb/conventions-use-typescript-3
Description: Reusable TypeScript 3.x configs
Author: Renoir Boulanger
Latest version: 1.2.1

# [@renoirb/conventions-use-typescript **3.x**][url-repo] [![npm][shields-npm]][url-npmjs]

Reusable TypeScript configs

| Size                                | Dependencies                                                             |
| ----------------------------------- | ------------------------------------------------------------------------ |
| ![Bundle size][shields-bundle-size] | ![Libraries.io dependency status for latest release][shields-dependabot] |

[url-npmjs]:
  https://www.npmjs.com/package/%40renoirb%2Fconventions-use-typescript-3
[url-repo]:
  https://github.com/renoirb/experiments-201908-rush-typescript-just-bili-monorepo/tree/v1.x-dev/conventions/use-typescript-3
[shields-npm]:
  https://img.shields.io/npm/v/%40renoirb%2Fconventions-use-typescript-3?style=flat-square&logo=appveyor&label=npm&logo=npm
[shields-bundle-size]:
  https://img.shields.io/bundlephobia/min/%40renoirb%2Fconventions-use-typescript-3?style=flat-square
[shields-dependabot]:
  https://img.shields.io/librariesio/release/npm/%40renoirb%2Fconventions-use-typescript-3?style=flat-square&logo=appveyor&logo=dependabot
npm package: @renoirb/data-source
Description: Describe HTTP Origins Data Source request configuration factory helpers
Author: Renoir Boulanger
Latest version: 0.3.3

[repo-url]: https://gitlab.com/renoirb/renoirb-particles/-/tree/v1.x/packages/data-source
[npmjs-badge]: https://img.shields.io/npm/v/%40renoirb%2Fdata-source?style=flat-square&logo=appveyor&label=npm&logo=npm 'NPMjs.com Package Badge'
[npmjs-url]: https://www.npmjs.com/package/%40renoirb%2Fdata-source
[size-badge]: https://img.shields.io/bundlephobia/min/%40renoirb%2Fdata-source?style=flat-square
[deps-status]: https://img.shields.io/librariesio/release/npm/%40renoirb%2Fdata-source?style=flat-square&logo=appveyor&logo=dependabot

# [**@renoirb/data-source**][repo-url]

Use JSON or YAML as way of configuring HTTP calls, get an HTTP RequestConfig manager with preconfigured parameters for your Dependency Injection Container stack.

| Version                          | Size                           | Dependencies                                                      |
| -------------------------------- | ------------------------------ | ----------------------------------------------------------------- |
| [![npm][npmjs-badge]][npmjs-url] | ![npm bundle size][size-badge] | ![Libraries.io dependency status for latest release][deps-status] |
npm package: @renoirb/date-epoch
Description: Date internal representation utilities using Numbers of seconds since January 1st 1970 (a.k.a. Epoch)
Author: Renoir Boulanger
Latest version: 1.2.0

# [@renoirb/date-epoch][repo-url]

[repo-url]:
  https://github.com/renoirb/experiments-201908-rush-typescript-just-bili-monorepo/tree/v1.x-dev/packages/date-epoch

Take either a string or number that are seconds since January 1<sup>st</sup>
1970 (a.k.a. UNIX Epoch), transform into an ECMAScript Date object.

| Version                                                                                                                                                                  | Size                                                                                                  | Dependencies                                                                                                                                                                 |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [![npm](https://img.shields.io/npm/v/%40renoirb%2Fdate-epoch?style=flat-square&logo=appveyor&label=npm&logo=npm)](https://www.npmjs.com/package/%40renoirb%2Fdate-epoch) | ![npm bundle size](https://img.shields.io/bundlephobia/min/%40renoirb%2Fdate-epoch?style=flat-square) | ![Libraries.io dependency status for latest release](https://img.shields.io/librariesio/release/npm/%40renoirb%2Fdate-epoch?style=flat-square&logo=appveyor&logo=dependabot) |
npm package: @renoirb/koa-middleware-utils
Description: Koa middleware for authentication and whois querying
Author: Renoir Boulanger
Latest version: 0.1.3

[repo-url]: https://gitlab.com/renoirb/renoirb-particles/-/tree/v1.x/packages/koa-middleware-utils
[npmjs-badge]: https://img.shields.io/npm/v/%40renoirb%2Fkoa-middleware-utils?style=flat-square&logo=appveyor&label=npm&logo=npm 'NPMjs.com Package Badge'
[npmjs-url]: https://www.npmjs.com/package/%40renoirb%2Fkoa-middleware-utils
[size-badge]: https://img.shields.io/bundlephobia/min/%40renoirb%2Fkoa-middleware-utils?style=flat-square
[deps-status]: https://img.shields.io/librariesio/release/npm/%40renoirb%2Fkoa-middleware-utils?style=flat-square&logo=appveyor&logo=dependabot

# [**@renoirb/koa-middleware-utils**][repo-url]

Koa middleware utilities.

| Version                          | Size                           | Dependencies                                                      |
| -------------------------------- | ------------------------------ | ----------------------------------------------------------------- |
| [![npm][npmjs-badge]][npmjs-url] | ![npm bundle size][size-badge] | ![Libraries.io dependency status for latest release][deps-status] |
npm package: @renoirb/package-json-utils
Description: Utilities to help poking at a package.json file
Author: Renoir Boulanger
Latest version: 0.1.1

# [@renoirb/package-json-utils][url-repo] [![npm][shields-npm]][url-npmjs]

Utilities to help poking at a package.json file.

| Size                                | Dependencies                                                             |
| ----------------------------------- | ------------------------------------------------------------------------ |
| ![Bundle size][shields-bundle-size] | ![Libraries.io dependency status for latest release][shields-dependabot] |

[url-npmjs]: https://www.npmjs.com/package/%40renoirb%2Fpackage-json-utils
[url-repo]:
  https://github.com/renoirb/experiments-201908-rush-typescript-just-bili-monorepo/tree/v1.x-dev/conventions/use-bili
[shields-npm]:
  https://img.shields.io/npm/v/%40renoirb%2Fpackage-json-utils?style=flat-square&logo=appveyor&label=npm&logo=npm
[shields-bundle-size]:
  https://img.shields.io/bundlephobia/min/%40renoirb%2Fpackage-json-utils?style=flat-square
[shields-dependabot]:
  https://img.shields.io/librariesio/release/npm/%40renoirb%2Fpackage-json-utils?style=flat-square&logo=appveyor&logo=dependabot
npm package: @renoirb/paginator
Description: For a large collection of objects, break down into N items long, and allow me to retrieve a copy of only items of that page
Author: Renoir Boulanger
Latest version: 0.1.2

[repo-url]: https://gitlab.com/renoirb/renoirb-particles/-/tree/v1.x/packages/paginator
[npmjs-badge]: https://img.shields.io/npm/v/%40renoirb%2Fpaginator?style=flat-square&logo=appveyor&label=npm&logo=npm 'NPMjs.com Package Badge'
[npmjs-url]: https://www.npmjs.com/package/%40renoirb%2Fpaginator
[size-badge]: https://img.shields.io/bundlephobia/min/%40renoirb%2Fpaginator?style=flat-square
[deps-status]: https://img.shields.io/librariesio/release/npm/%40renoirb%2Fpaginator?style=flat-square&logo=appveyor&logo=dependabot

# [**@renoirb/paginator**][repo-url]

For a large collection of objects, break down into N items long, and allow me to retrieve a copy of only items (or the applicable indices).

| Version                          | Size                           | Dependencies                                                      |
| -------------------------------- | ------------------------------ | ----------------------------------------------------------------- |
| [![npm][npmjs-badge]][npmjs-url] | ![npm bundle size][size-badge] | ![Libraries.io dependency status for latest release][deps-status] |
npm package: @renoirb/state-utils-vue
Description: Vue.js 2 Vuex (Redux) state utilities to handle collection of object with the same form.
Author: Renoir Boulanger
Latest version: 0.3.3

[repo-url]: https://gitlab.com/renoirb/renoirb-particles/-/tree/v1.x/packages/state-utils-vue
[npmjs-badge]: https://img.shields.io/npm/v/%40renoirb%2Fstate-utils-vue?style=flat-square&logo=appveyor&label=npm&logo=npm 'NPMjs.com Package Badge'
[npmjs-url]: https://www.npmjs.com/package/%40renoirb%2Fstate-utils-vue
[size-badge]: https://img.shields.io/bundlephobia/min/%40renoirb%2Fstate-utils-vue?style=flat-square
[deps-status]: https://img.shields.io/librariesio/release/npm/%40renoirb%2Fstate-utils-vue?style=flat-square&logo=appveyor&logo=dependabot

# [**@renoirb/state-utils-vue**][repo-url]

Vue.js utilities, (Vuex) store factory, et al.

| Version                          | Size                           | Dependencies                                                      |
| -------------------------------- | ------------------------------ | ----------------------------------------------------------------- |
| [![npm][npmjs-badge]][npmjs-url] | ![npm bundle size][size-badge] | ![Libraries.io dependency status for latest release][deps-status] |
npm package: @renoirb/tools-bundling-helpers
Description: Package bundling helper scripts
Author: Renoir Boulanger
Latest version: 1.2.1

# [@renoirb/tools-bundling-helpers][url-repo] [![npm][shields-npm]][url-npmjs]

Bundling helpers such as CLI utilities and packaging branding utilities

| Size                                | Dependencies                                                             |
| ----------------------------------- | ------------------------------------------------------------------------ |
| ![Bundle size][shields-bundle-size] | ![Libraries.io dependency status for latest release][shields-dependabot] |

[url-npmjs]: https://www.npmjs.com/package/%40renoirb%2Ftools-bundling-helpers
[url-repo]:
  https://github.com/renoirb/experiments-201908-rush-typescript-just-bili-monorepo/tree/v1.x-dev/tools/bundling-helpers
[shields-npm]:
  https://img.shields.io/npm/v/%40renoirb%2Ftools-bundling-helpers?style=flat-square&logo=appveyor&label=npm&logo=npm
[shields-bundle-size]:
  https://img.shields.io/bundlephobia/min/%40renoirb%2Ftools-bundling-helpers?style=flat-square
[shields-dependabot]:
  https://img.shields.io/librariesio/release/npm/%40renoirb%2Ftools-bundling-helpers?style=flat-square&logo=appveyor&logo=dependabot

## Usage

### CommandLineUtilities

Utility we can use in a package's bin script.

```bash
#!/usr/bin/env node
'use strict';

const { CommandLineUtilities } = require('@renoirb/tools-bundling-helpers');

# Example of a way to handle logic by existence of a shell environment variable
const isCI = CommandLineUtilities.hasEnvFlag('CI_SERVER');
if (isCI) {
  process.argv.push('--quiet');
} else {
  process.argv.push('--verbose');
}
```

### createBannerInfo

An utility to help manage a package's top of the file "banner"

```js
// const pkg = require('../package.json')
// Imagine package.json had the lines like below
const pkg = {
  name: 'assimilate',
  version: '436.0.1',
  author: {
    email: '7.9@adjunct.3.unimatrix.1.borg',
    name: 'Seven Of Nine',
  },
}
const branding = {
  firstYear: 1484,
  vendor: 'Borg Collective',
}
const bannerInfo = createBannerInfo(pkg, branding)
console.log(bannerInfo)
```

Would return

```json
{
  "author": "Seven Of Nine <7.9@adjunct.3.unimatrix.1.borg>",
  "copyright": "Copyright (c) 1484-2020 Borg Collective",
  "license": "LicenseRef-LICENSE",
  "name": "assimilate",
  "vendor": "Borg Collective",
  "version": "436.0.1"
}
```

We can pass this to `createBannerFooter` and get a banner and footer string for
bundling tools such as Rollup.

```js
// From example above
const bannerInfo = createBannerInfo(pkg, branding)
const bannerFooter = createBannerFooter(bannerInfo)
console.log(bannerFooter.banner)
```

Would return

```
/**
 * assimilate v436.0.1
 *
 * Maintainer: Seven Of Nine <7.9@adjunct.3.unimatrix.1.borg>
 *
 * LicenseRef-LICENSE
 *
 * © 1484-2020 Borg Collective
 */
```
npm package: @renoirb/tools-normalize-package-json
Description: Copy-Pasta from https://github.com/nuxt/nuxt.js/pull/6373 also a JavaScript sample to work on migrating many projects
Author: Pooya Parsa
Latest version: 1.0.2

# Package Convention Normalizer

Copy-Pasta from [Nuxt.js proposal](https://github.com/nuxt/nuxt.js/pull/6373).
npm package: @renoirb/validatable
Description: Add validation rules to an object, and ability to check if a given string passes the rules
Author: Renoir Boulanger
Latest version: 1.2.0

# Validatable

Curries an object/function with a "validatable" property containing
ValidatableRules and a "validate" function.

CAUTION: This has been written back in 2013 and dearly needs refactoring.

```js
import validatable from './validatable'

// Notice this MUST either be a class, an object, or a Function, it cannot be an arrow function.
class UsernameValidator {
  constructor() {
    validatable(this)
    this.validatable.addRule('size', true, /^[0-9a-zA-z\-_]{8,19}$/)
    this.validatable.addRule(
      'billable_format',
      false,
      /^[ABGKNPQSTWXZ]{1}[0-9]{8}$/,
    )
  }
}

// ... later in the code

const validator = new UsernameValidator()

// With rules above, "jjjjjj" should fail because it has less than 9 characters
const check1 = validator.validate('jjjjjj')
check.hasPassed() // => false
```

---

## Context

In this package, we've migrated ECMAScript from
**@bit/renoirb.curries.curries.validatable**, and copied it here. We could have
had
[written the code here and exported it in isolation to bit](https://docs.bitsrc.io/docs/isolating-and-tracking-components.html).
That could be done. But it isn't, it's also copied over to
[GitHub.com/renoirb/bits **curries/**](https://github.com/renoirb/bits/tree/master/src/curries).
The use-case here was to migrate ECMAScript with modules, managed by TypeScript,
without being converted to it just yet. We also wanted to have Jest test to
work.

## Next Steps

### Migrate to TypeScript?

Assuming we want to rework that package, we could
[migrate it to TypeScript](https://www.typescriptlang.org/docs/handbook/migrating-from-javascript.html)