open-index/open-npm huggingface dataset:
npm package: @roma219/vue-jsonschema-form
Description: Input Form generator based on JSON Schema
Author: Roman Sabirov roma219@yandex.ru
Latest version: 0.1.16

[![Build Status](https://travis-ci.com/roma219/vue-jsonschema-form.svg?branch=master)](https://travis-ci.com/roma219/vue-jsonschema-form) [![Coverage Status](https://coveralls.io/repos/github/roma219/vue-jsonschema-form/badge.svg?branch=master&service=github&kill_cache=1)](https://coveralls.io/github/roma219/vue-jsonschema-form?branch=master&service=github&kill_cache=1) [![dependencies Status](https://david-dm.org/roma219/vue-jsonschema-form/status.svg)](https://david-dm.org/roma219/vue-jsonschema-form) [![Known Vulnerabilities](https://snyk.io/test/github/roma219/vue-jsonschema-form/badge.svg)](https://snyk.io/test/github/roma219/vue-jsonschema-form) [![Language grade: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/roma219/vue-jsonschema-form.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/roma219/vue-jsonschema-form/context:javascript) ![last commit](https://badgen.net/github/last-commit/roma219/vue-jsonschema-form)
&nbsp;

![minified size](https://badgen.net/bundlephobia/min/@roma219/vue-jsonschema-form)
![](https://badgen.net/bundlephobia/minzip/@roma219/vue-jsonschema-form)

# vue-jsonschema-form
JSON Schema based form generator built with Vue.js. Currently Work in Progress.

### Full Guide and Examples
https://roma219.github.io/vue-jsonschema-form/guide/

[![Demo on Codesandbox](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/vue-jsonschema-form-basic-example-ulwwy?fontsize=14&hidenavigation=1&module=%2Fsrc%2FApp.vue&theme=dark)

### Installation
```
npm install @roma219/vue-jsonschema-form
```

### Usage
```
<JsonSchema :schema="schema" v-model="value"/>

schema = {
    type: 'object',
    properties: {
      aaa: { type: 'string', minLength: 1 },
      bbb: { type: 'boolean' },
      ccc: { type: 'string', enum: ['1', '2', '3'] },
      ddd: {
        type: 'object',
        title: '',
        properties: {
          a1: { type: 'string', minLength: 1, maxLength: 5 },
          b2: { type: 'boolean', default: true },
          ddd: {
            type: 'object',
            properties: {
              a1: { type: 'string', default: 'aaa' },
              b2: { type: 'boolean' }
            }
          }
        }
      }
    }
}
```
npm package: @romain-faust/babel-preset-node
Description: Babel preset for Node.js
Author: Romain Faust
Latest version: 2.2.1

# @romain-faust/babel-preset-node

[Babel](https://babeljs.io) preset for [Node.js](https://nodejs.org).

## Installation

_With [NPM](https://npmjs.com)_:

```bash
npm install --save-dev @romain-faust/babel-preset-node
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add --save-dev @romain-faust/babel-preset-node
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add --dev @romain-faust/babel-preset-node
```

### Dependencies

-   [@babel/core](https://npmjs.com/package/@babel/core) (^7.20.12)
-   [@babel/preset-env](https://npmjs.com/package/@babel/preset-env) (^7.20.2)
-   [@babel/preset-typescript](https://npmjs.com/package/@babel/preset-typescript) (^7.18.6)
-   [babel-plugin-tsconfig-paths-module-resolver](https://npmjs.com/package/babel-plugin-tsconfig-paths-module-resolver) (^1.0.3)

## Usage

In your [Babel configuration](https://babeljs.io/docs/en/configuration):

<!-- prettier-ignore -->
```json
{
    "presets": ["@romain-faust/babel-preset-node"]
}
```

## License

[MIT](./license.md)
npm package: @romain-faust/errors
Description: Generic set of errors
Author: Romain Faust
Latest version: 2.0.0

# @romain-faust/errors

Generic set of errors.

## Installation

_With [NPM](https://www.npmjs.com)_:

```bash
npm install @romain-faust/errors
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add @romain-faust/errors
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add @romain-faust/errors
```

## Usage

<!-- prettier-ignore -->
```ts
import { NotFoundError } from '@romain-faust/errors'

throw new NotFoundError('User not found')
```

## License

[MIT](./license.md)
npm package: @romain-faust/eslint-config-base
Description: Shared ESLint configuration
Author: Romain Faust
Latest version: 1.1.0

# @romain-faust/eslint-config-base

Shared [ESLint](https://eslint.org) configuration.

## Installation

_With [NPM](https://npmjs.com)_:

```bash
npm install --save-dev @romain-faust/eslint-config-base
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add --save-dev @romain-faust/eslint-config-base
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add --dev @romain-faust/eslint-config-base
```

### Dependencies

-   [@typescript-eslint/eslint-plugin](https://npmjs.com/package/@typescript-eslint/eslint-plugin) (^5.49.0)
-   [@typescript-eslint/parser](https://npmjs.com/package/@typescript-eslint/parser) (^5.49.0)
-   [eslint](https://npmjs.com/package/eslint) (^8.32.0)
-   [eslint-config-prettier](https://npmjs.com/package/eslint-config-prettier) (^8.6.0)
-   [eslint-import-resolver-typescript](https://npmjs.com/package/eslint-import-resolver-typescript) (^3.5.3)
-   [eslint-plugin-eslint-comments](https://npmjs.com/package/eslint-plugin-eslint-comments) (^3.2.0)
-   [eslint-plugin-import](https://npmjs.com/package/eslint-plugin-import) (^2.27.5)
-   [eslint-plugin-jest](https://npmjs.com/package/eslint-plugin-jest) (^27.2.1)
-   [eslint-plugin-prettier](https://npmjs.com/package/eslint-plugin-prettier) (^4.2.1)
-   [eslint-plugin-promise](https://npmjs.com/package/eslint-plugin-promise) (^6.1.1)
-   [eslint-plugin-unicorn](https://npmjs.com/package/eslint-plugin-unicorn) (^45.0.2)
-   [prettier](https://npmjs.com/package/prettier) (^2.8.3)

## Usage

In your [ESLint configuration](https://eslint.org/docs/user-guide/configuring):

<!-- prettier-ignore -->
```json
{
    "extends": "@romain-faust/base"
}
```

## License

[MIT](./license.md)
npm package: @romain-faust/eslint-config-node
Description: Shared ESLint configuration for Node.js
Author: Romain Faust
Latest version: 1.2.0

# @romain-faust/eslint-config-node

Shared [ESLint](https://eslint.org) configuration for [Node.js](https://nodejs.org).

## Installation

_With [NPM](https://npmjs.com)_:

```bash
npm install --save-dev @romain-faust/eslint-config-node
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add --save-dev @romain-faust/eslint-config-node
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add --dev @romain-faust/eslint-config-node
```

### Dependencies

-   [@romain-faust/eslint-config-base](https://npmjs.com/package/@romain-faust/eslint-config-base) (^1.1.0)
-   [eslint-plugin-node](https://npmjs.com/package/eslint-plugin-node) (^11.1.0)

## Usage

In your [ESLint configuration](https://eslint.org/docs/user-guide/configuring):

<!-- prettier-ignore -->
```json
{
    "extends": "@romain-faust/node"
}
```

## License

[MIT](./license.md)
npm package: @romain-faust/eslint-config-react
Description: Shared ESLint configuration for React.js
Author: Romain Faust
Latest version: 1.2.0

# @romain-faust/eslint-config-react

Shared [ESLint](https://eslint.org) configuration for [React.js](https://reactjs.org).

## Installation

_With [NPM](https://npmjs.com)_:

```bash
npm install --save-dev @romain-faust/eslint-config-react
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add --save-dev @romain-faust/eslint-config-react
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add --dev @romain-faust/eslint-config-react
```

### Dependencies

-   [@romain-faust/eslint-config-base](https://npmjs.com/package/@romain-faust/eslint-config-base) (^1.1.0)
-   [eslint-plugin-react](https://npmjs.com/package/eslint-plugin-react) (^7.32.1)
-   [eslint-plugin-react-hooks](https://npmjs.com/package/eslint-plugin-react-hooks) (^4.6.0)

## Usage

In your [ESLint configuration](https://eslint.org/docs/user-guide/configuring):

<!-- prettier-ignore -->
```json
{
    "extends": "@romain-faust/react"
}
```

## License

[MIT](./license.md)
npm package: @romain-faust/eslint-config-react-native
Description: Shared ESLint configuration for React Native
Author: Romain Faust
Latest version: 1.1.0

# @romain-faust/eslint-config-react-native

Shared [ESLint](https://eslint.org) configuration for [React Native](https://reactnative.dev).

## Installation

_With [NPM](https://npmjs.com)_:

```bash
npm install --save-dev @romain-faust/eslint-config-react-native
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add --save-dev @romain-faust/eslint-config-react-native
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add --dev @romain-faust/eslint-config-react-native
```

### Dependencies

-   [@romain-faust/eslint-config-react](https://npmjs.com/package/@romain-faust/eslint-config-react) (^1.2.0)
-   [eslint-plugin-react-native](https://npmjs.com/package/eslint-plugin-react-native) (^4.0.0)

## Usage

In your [ESLint configuration](https://eslint.org/docs/user-guide/configuring):

<!-- prettier-ignore -->
```json
{
    "extends": "@romain-faust/react-native"
}
```

## License

[MIT](./license.md)
npm package: @romain-faust/ffmpeg
Description: Set of tools for interacting with ffmpeg
Author: Romain Faust
Latest version: 1.0.0

# @romain-faust/ffmpeg

Set of tools for interacting with [ffmpeg](https://www.ffmpeg.org/).

## Installation

_With NPM:_

```bash
npm install @romain-faust/ffmpeg rxjs
```

_With Yarn:_

```bash
yarn add @romain-faust/ffmpeg rxjs
```

## Usage

<!-- prettier-ignore -->
```ts
import { transcode } from '@romain-faust/ffmpeg'

transcode({
    audioFormat: 'aac',
    inputPath: '/path/to/the/input/file',
    outputFormat: 'matroska',
    outputPath: '/path/to/the/output/file',
    subTitleFormat: 'srt',
    videoFormat: 'libx265',
}).subscribe({
    next(event) {
        console.log(`Transcoded ${event.current} ms out of ${event.total}.`)
    },
    error(error) {
        console.error(`An error occurred: ${error.message}.`)
    },
    complete() {
        console.log('Transcode succeed.')
    },
})
```

## License

[MIT](./license.md)
npm package: @romain-faust/node-scripts
Description: Set of scripts for Node.js
Author: Romain Faust
Latest version: 1.2.0

# @romain-faust/node-scripts

Set of scripts for [Node.js](https://nodejs.org).

## Installation

_With [NPM](https://npmjs.com)_:

```bash
npm install --save-dev @romain-faust/node-scripts
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add --save-dev @romain-faust/node-scripts
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add --dev @romain-faust/node-scripts
```

## Usage

In the `scripts` section of your `package.json`:

<!-- prettier-ignore -->
```json
{
    "scripts": {
        "build": "node-scripts build sources",
        "format": "node-scripts format sources",
        "lint": "node-scripts lint sources",
        "start": "node-scripts start sources/index.ts",
        "test": "node-scripts test"
    }
}
```

To have the list of all the available scripts:

```bash
node-scripts --help
```

If you need more information about a specific script:

```bash
node-scripts build --help
```

## License

[MIT](./license.md)
npm package: @romain-faust/prettier-config
Description: Shared Prettier configuration
Author: Romain Faust
Latest version: 2.5.0

# @romain-faust/prettier-config

Shared [Prettier](https://prettier.io) configuration.

## Installation

_With [NPM](https://www.npmjs.com)_:

```bash
npm install --save-dev @romain-faust/prettier-config
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add --save-dev @romain-faust/prettier-config
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add --dev @romain-faust/prettier-config
```

### Dependencies

-   [prettier](https://npmjs.com/package/prettier) (^2.8.1)

## Usage

In your [Prettier configuration](https://prettier.io/docs/en/configuration.html):

```json
"@romain-faust/prettier-config"
```

## License

[MIT](./license.md)
npm package: @romain-faust/provy
Description: Simple and versatile dependency container
Author: Romain Faust
Latest version: 2.0.0

# @romain-faust/provy

Simple and versatile dependency container.

## Installation

_With [NPM](https://npmjs.com)_:

```bash
npm install @romain-faust/provy
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add @romain-faust/provy
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add @romain-faust/provy
```

## Usage

<!-- prettier-ignore -->
```ts
import { buildContainer, buildKey } from '@romain-faust/provy'

const keys = {
    apiService: buildKey<ApiService>('API_SERVICE'),
    apiUrl: buildKey<string>('API_URL'),
}

const container = buildContainer()
container.registerMemoized(keys.apiService, (container) => {
    return buildApiService(container.resolve(keys.apiUrl))
})
container.registerConstant(keys.apiUrl, 'https://api.example.com')

// ...

container.resolve(keys.apiService)
```

### API

<details>
<summary>
    <code>buildContainer(parent?: Container)</code>
</summary>

Builds a new `Container`. The `parent` parameter can be used to specify the `Container` to use to resolve dependencies if they don't exist in the current one.

</details>

<details>
<summary>
    <code>buildKey(name: string)</code>
</summary>

Builds a new `Key`. The `name` parameter is used to identify keys (it is _NOT_ expected to be unique).

</details>

<details>
<summary>
    <code>Container</code>
</summary>

Holds the dependencies registry.

##### `.isRegistered(key)`

Checks if the given `Key` is registered.

#### `.registerAlias(keyA, keyB)`

Registers an alias to another dependency.

#### `.registerConstant(key, value)`

Registers a constant.

#### `.registerDynamic(key, factory)`

Registers a factory function. The result isn't memoized meaning that the `factory` function is called whenever the dependency is requested.

#### `.registerMemoized(key, factory)`

Registers a factory function. The `factory` function is called only once and its result is then memoized and reused on subsequent calls.

#### `.resolve(key)`

Retrieves the dependency associated to the given `key`. If there is no dependency registered an error is thrown.

#### `.unregister(key)`

Unregisters the dependency associated to the given `key`.

</details>

<details>
<summary>
    <code>Key&lt;T&gt;</code>
</summary>

Identifies a dependency within a `Container`. It accepts a generic parameter `T` which is used to type values resolved from `Container`.

</details>

## License

[MIT](./license.md)
npm package: @romain-faust/provy-react
Description: React bindings for Provy
Author: Romain Faust
Latest version: 1.0.0

# @romain-faust/provy-react

React bindings for [Provy](https://www.npmjs.com/package/@romain-faust/provy).

## Installation

_With NPM:_

```bash
npm install @romain-faust/provy-react
```

_With Yarn:_

```bash
yarn add @romain-faust/provy-react
```

## Usage

```tsx
// root.tsx

import { Container } from '@romain-faust/provy'
import { ContainerProvider } from '@romain-faust/provy-react'

const container = new Container()

function Root() {
	return (
		<ContainerProvider container={container}>
			<UsersList />
		</ContainerProvider>
	)
}

// users-list.tsx

import { useContainer, useDependency } from '@romain-faust/provy-react'

function UsersList() {
	const fetchUsers = useDependency(identifiers.fetchUsers)

	// ...
}
```

## API

### `<ContainerProvider />`

Provides a `Container` instance (uses [React Context](https://reactjs.org/docs/context.html) under the hood).

```tsx
import { Container } from '@romain-faust/provy'
import { ContainerProvider } from '@romain-faust/provy-react'

const container = new Container()

function Root() {
	return (
		<ContainerProvider container={container}>
			<UsersList />
		</ContainerProvider>
	)
}
```

#### Props

| Name        | Type        | Description                | Required |
| ----------- | ----------- | -------------------------- | -------- |
| `container` | `Container` | The `Container` to provide | `true`   |

### `useContainer()`

Retrieves the `Container` from the closest `ContainerProvider` ancestor. If no `Container` is found it returns the default `Container`.

#### Example

```tsx
import { useContainer } from '@romain-faust/provy-react'

function UsersList() {
	const container = useContainer()

	// ...
}
```

### `useDependency(identifier)`

Retrieves a dependency from the closest `ContainerProvider` ancestor.

> ⚠️ This hook can throw an error if the requested dependency is not registered.

#### Example

```tsx
import { useDependency } from '@romain-faust/provy-react'

function UsersList() {
	const fetchUsers = useDependency(identifiers.fetchUsers)

	// ...
}
```

#### Parameters

| Name         | Type            | Description                                                 | Required |
| ------------ | --------------- | ----------------------------------------------------------- | -------- |
| `identifier` | `Identifier<T>` | The `Identifier` of the dependency that should be retrieved | `true`   |

## License

[MIT](./license.md)
npm package: @romain-faust/sign-in-with-email-and-password
Description: Generic set of tools related to email and password connection
Author: Romain Faust
Latest version: 1.0.2

# @romain-faust/sign-in-with-email-and-password

Generic set of tools related to email and password connection.

## Installation

_With [NPM](https://www.npmjs.com)_:

```bash
npm install @romain-faust/sign-in-with-email-and-password
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add @romain-faust/sign-in-with-email-and-password
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add @romain-faust/sign-in-with-email-and-password
```

### Dependencies

-   [rxjs](https://npmjs.com/package/rxjs) (^7.5.7)

## Usage

<!-- prettier-ignore -->
```ts
import type { SignInWithEmailAndPassword } from '@romain-faust/sign-in-with-email-and-password'

const SignInWithEmailAndPasswordForm = () => {
    const signInWithEmailAndPassword: SignInWithEmailAndPassword = getSignInWithEmailAndPassword()

    const handleFormSubmit = () => {
        signInWithEmailAndPassword('email@example.com', '••••••').subscribe()
    }

    // ...
}
```

## License

[MIT](./license.md)
npm package: @romain-faust/sign-in-with-email-and-password-firebase
Description: Email and password connection with Firebase
Author: Romain Faust
Latest version: 1.1.1

# @romain-faust/sign-in-with-email-and-password-firebase

Email and password connection with Firebase.

## Installation

_With [NPM](https://npmjs.com)_:

```bash
npm install @romain-faust/sign-in-with-email-and-password-firebase
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add @romain-faust/sign-in-with-email-and-password-firebase
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add @romain-faust/sign-in-with-email-and-password-firebase
```

### Dependencies

-   [@romain-faust/errors](https://npmjs.com/package/@romain-faust/errors) (^2.0.0)
-   [@romain-faust/sign-in-with-email-and-password](https://npmjs.com/package/@romain-faust/sign-in-with-email-and-password) (^1.0.2)
-   [firebase](https://npmjs.com/package/firebase) (^9.12.1)
-   [rxjs](https://npmjs.com/package/rxjs) (^7.5.7)

## Usage

<!-- prettier-ignore -->
```ts
import { SignInWithEmailAndPassword } from '@romain-faust/sign-in-with-email-and-password'
import { buildSignInWithEmailAndPassword } from '@romain-faust/sign-in-with-email-and-password-firebase'

const SignInWithEmailAndPasswordForm = () => {
    const signInWithEmailAndPassword: SignInWithEmailAndPassword = buildSignInWithEmailAndPassword()

    const handleFormSubmit = () => {
        signInWithEmailAndPassword('email@example.com', '••••••').subscribe()
    }

    // ...
}
```

## License

[MIT](./license.md)
npm package: @romain-faust/toolbox
Description: ## Prerequisites
Author: Romain Faust
Latest version: 1.0.1

# @romain-faust/toolbox

## Prerequisites

-   [GitHub CLI](https://github.com/cli/cli#installation)
-   [Node.js](https://nodejs.org/en/download/)
-   [Yarn](https://classic.yarnpkg.com/en/docs/install/)

## Installation

_With [NPM](https://www.npmjs.com/)_:

```bash
npm install --global @romain-faust/toolbox
```

_With [Yarn](https://classic.yarnpkg.com/)_:

```bash
yarn global add @romain-faust/toolbox
```

_With [PNPM](https://pnpm.io/)_:

```bash
pnpm add --global @romain-faust/toolbox
```

## Usage

```bash
toolbox create-expo-app my-app
```

## License

[MIT](./license.md)
npm package: @romain-faust/tsconfig-node
Description: Shared TypeScript configuration for Node.js
Author: Romain Faust
Latest version: 1.0.2

# @romain-faust/tsconfig-node

Shared [TypeScript](https://www.typescriptlang.org/) configuration for [Node.js](https://nodejs.org/).

## Installation

_With NPM:_

```bash
npm install --save-dev @romain-faust/tsconfig-node
```

_With Yarn:_

```bash
yarn add --dev @romain-faust/tsconfig-node
```

## Usage

In your `tsconfig.json`:

<!-- prettier-ignore -->
```json
{
    "extends": "@romain-faust/tsconfig-node"
}
```

## License

[MIT](./license.md)
npm package: @romain-faust/tsconfig-node-16
Description: Shared TypeScript configuration for Node.js 16
Author: Romain Faust
Latest version: 1.4.0

# @romain-faust/tsconfig-node-16

Shared [TypeScript](https://typescriptlang.org) configuration for [Node.js](https://nodejs.org) 16.

## Installation

_With [NPM](https://npmjs.com)_:

```bash
npm install --save-dev @romain-faust/tsconfig-node-16
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add --save-dev @romain-faust/tsconfig-node-16
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add --dev @romain-faust/tsconfig-node-16
```

### Dependencies

-   [@types/node](https://npmjs.com/package/@types/node) (^16.18.11)
-   [typescript](https://npmjs.com/package/typescript) (^4.9.4)

## Usage

In your [TypeScript configuration](https://typescriptlang.org/docs/handbook/tsconfig-json.html):

<!-- prettier-ignore -->
```json
{
    "extends": "@romain-faust/tsconfig-node-16"
}
```

## License

[MIT](./license.md)
npm package: @romain-faust/tsconfig-node-16-esm
Description: Shared TypeScript configuration for Node.js 16 with ES modules
Author: Romain Faust
Latest version: 1.2.0

# @romain-faust/tsconfig-node-16-esm

Shared [TypeScript](https://typescriptlang.org) configuration for [Node.js](https://nodejs.org) 16 with [ES modules](https://nodejs.org/api/esm.html#modules-ecmascript-modules).

## Installation

_With [NPM](https://npmjs.com)_:

```bash
npm install --save-dev @romain-faust/tsconfig-node-16-esm
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add --save-dev @romain-faust/tsconfig-node-16-esm
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add --dev @romain-faust/tsconfig-node-16-esm
```

### Dependencies

-   [@types/node](https://npmjs.com/package/@types/node) (^16.18.11)
-   [typescript](https://npmjs.com/package/typescript) (^4.9.4)

## Usage

In your [TypeScript configuration](https://typescriptlang.org/docs/handbook/tsconfig-json.html):

<!-- prettier-ignore -->
```json
{
    "extends": "@romain-faust/tsconfig-node-16-esm"
}
```

## License

[MIT](./license.md)
npm package: @romain-faust/tsconfig-node-18
Description: Shared TypeScript configuration for Node.js 18
Author: Romain Faust
Latest version: 1.0.0

# @romain-faust/tsconfig-node-18

Shared [TypeScript](https://typescriptlang.org) configuration for [Node.js](https://nodejs.org) 18.

## Installation

_With [NPM](https://npmjs.com)_:

```bash
npm install --save-dev @romain-faust/tsconfig-node-18
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add --save-dev @romain-faust/tsconfig-node-18
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add --dev @romain-faust/tsconfig-node-18
```

### Dependencies

-   [@types/node](https://npmjs.com/package/@types/node) (^18.0.3)
-   [typescript](https://npmjs.com/package/typescript) (^4.7.4)

## Usage

In your [TypeScript configuration](https://typescriptlang.org/docs/handbook/tsconfig-json.html):

<!-- prettier-ignore -->
```json
{
    "extends": "@romain-faust/tsconfig-node-18"
}
```

## License

[MIT](./license.md)
npm package: @romain-faust/upload-file
Description: Generic set of tools related to file upload
Author: Romain Faust
Latest version: 2.0.0

# @romain-faust/upload-file

Generic set of tools related to file upload.

## Installation

_With [NPM](https://www.npmjs.com)_:

```bash
npm install @romain-faust/upload-file
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add @romain-faust/upload-file
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add @romain-faust/upload-file
```

### Dependencies

-   [rxjs](https://npmjs.com/package/rxjs) (^7.5.7)

## Usage

<!-- prettier-ignore -->
```ts
import type { UploadFile } from '@romain-faust/upload-file'

const FileUploadInput = () => {
    const uploadFile: UploadFile = getUploadFile()

    const handleFileInputSubmit = (data: ArrayBuffer) => {
        uploadFile('path/to/the/file', data).subscribe()
    }

    // ...
}
```

## License

[MIT](./license.md)
npm package: @romain-faust/upload-file-firebase
Description: File upload with Firebase
Author: Romain Faust
Latest version: 2.1.1

# @romain-faust/upload-file-firebase

File upload with Firebase.

## Installation

_With [NPM](https://npmjs.com)_:

```bash
npm install @romain-faust/upload-file-firebase
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add @romain-faust/upload-file-firebase
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add @romain-faust/upload-file-firebase
```

### Dependencies

-   [@romain-faust/errors](https://npmjs.com/package/@romain-faust/errors) (^2.0.0)
-   [@romain-faust/upload-file](https://npmjs.com/package/@romain-faust/upload-file) (^2.0.0)
-   [firebase](https://npmjs.com/package/firebase) (^9.12.1)
-   [rxjs](https://npmjs.com/package/rxjs) (^7.5.7)

## Usage

<!-- prettier-ignore -->
```ts
import { buildUploadFile } from '@romain-faust/upload-file-firebase'

const FileUploadInput = () => {
    const uploadFile = buildUploadFile()

    const handleFileInputSubmit = (data: ArrayBuffer) => {
        uploadFile('path/to/the/file', data).subscribe()
    }

    // ...
}
```

## License

[MIT](./license.md)
npm package: @romain-faust/use-singleton
Description: React hook used to create singleton values
Author: Romain Faust
Latest version: 1.0.2

# @romain-faust/use-singleton

React hook used to create singleton values.

## Installation

_With [NPM](https://npmjs.com)_:

```bash
npm install @romain-faust/use-singleton
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add @romain-faust/use-singleton
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add @romain-faust/use-singleton
```

### Dependencies

-   [react](https://npmjs.com/package/react) (>=16.8.6)

## Usage

<!-- prettier-ignore -->
```tsx
import { useSingleton } from '@romain-faust/use-singleton'

const RandomValue = () => {
    const value = useSingleton(() => Math.random())

    return <div>Random value: {value}</div>
}
```

## License

[MIT](./license.md)
npm package: @romain-faust/use-unmount
Description: React hook used to notify component unmount
Author: Romain Faust
Latest version: 1.2.0

# @romain-faust/use-unmount

React hook used to notify component unmount.

## Installation

_With [NPM](https://npmjs.com)_:

```bash
npm install @romain-faust/use-unmount
```

_With [PNPM](https://pnpm.io)_:

```bash
pnpm add @romain-faust/use-unmount
```

_With [Yarn](https://classic.yarnpkg.com)_:

```bash
yarn add @romain-faust/use-unmount
```

### Dependencies

-   [@romain-faust/use-singleton](https://npmjs.com/package/@romain-faust/use-singleton) (^1.0.2)
-   [react](https://npmjs.com/package/react) (>=16.8.6)
-   [rxjs](https://npmjs.com/package/rxjs) (^7.5.7)

## Usage

<!-- prettier-ignore -->
```tsx
import { useUnmount } from '@romain-faust/use-unmount'

const CreateProductForm = () => {
    const unmount$ = useUnmount()

    const handleSubmit = (productInfo: ProductInfo) => {
        getCurrentUser()
            .pipe(map((user) => user.id))
            .pipe(mergeMap((ownerId) => createProduct(productInfo, ownerId)))
            .pipe(takeUntil(unmount$))
            .subscribe((product) => {
                navigateToProductDetails(product.id)
            })
    }

    // ...
}
```

## License

[MIT](./license.md)
npm package: @romain-geffrault-mcp/pdf-generator
Description: Serveur MCP qui génère un PDF multi-pages optimisé pour LinkedIn
Author: Romain Geffrault
Latest version: 0.1.0

# pdf-generator-mcp

Serveur MCP qui genere un PDF multi-pages (1200x1500px) a partir de markdown, optimise pour LinkedIn.

## Emplacement

`/Users/romaingeffrault/Documents/projects/prive/pdf-generator-mcp`

## Installation

```bash
npm install
npx playwright install
```

## Lancer le serveur

```bash
npm start
```

## Configuration MCP (exemple)

```json
{
  "mcpServers": {
    "pdf-generator-mcp": {
      "command": "node",
      "args": [
        "/Users/romaingeffrault/Documents/projects/prive/pdf-generator-mcp/src/index.js"
      ]
    }
  }
}
```

## Outil disponible

- `render_linkedin_pdf`
  - `markdown` (string, requis)
  - `outputDir` (string, requis)
  - `fileName` (string, requis)
  - `title` (string, requis) - Titre affiche sur la premiere page (texte noir sur fond jaune, centre)
  - `body` (string, optionnel) - Texte markdown affiche sous le titre de la premiere page pour illustrer le contenu
  - `assetBaseDir` (string, optionnel; par defaut, `outputDir`)
  - `skipEndPage` (boolean, optionnel; par defaut, `false`)

Retourne le chemin du PDF genere avec une premiere page personnalisee incluant le titre et le body fournis.

## Fonctionnalites

- **Coloration syntaxique** : Les blocs de code markdown sont automatiquement colores avec Shiki (theme github-dark)
- **Premiere page personnalisee** : Image de fond avec titre centre et texte descriptif optionnel
- **Images inline** : Toutes les images sont converties en data URI pour un PDF autonome
- **Mise en page optimisee** : Format 1200x1500px optimise pour LinkedIn

## Consignes markdown

- Separe chaque page avec une ligne `---` seule.
- Chaque page doit contenir exactement 1 image.
- Utilise `#` pour le titre principal (fond jaune, texte noir).
- Utilise `##` ou un blocquote `>` pour le texte secondaire (jaune sur fond noir transparent).
- Les blocs de code (` ```language `) sont automatiquement colores avec Shiki.
- Garde des paragraphes courts (1 a 3 lignes) et des listes concises.
- Les images doivent etre locales (chemins relatifs a `assetBaseDir` ou chemins absolus).
- Ordre recommande: titre, texte secondaire, texte court, code/image.

## Exemple de markdown

````md
# Titre principal impactant

## Sous-titre ou contexte court

Un texte court pour introduire la page.

![cover](./images/cover.png)

---

# Deuxieme page avec code

> Message secondaire en surbrillance.

```typescript
const counter = state(0, {
  increment: (val) => val + 1,
  decrement: (val) => val - 1,
});
```
````

![diagram](./images/diagram.png)

````

## Exemple d'utilisation avec body

Le parametre `body` permet d'afficher un texte descriptif sous le titre de la premiere page :

```json
{
  "title": "Les 5 primitives ng-craft",
  "body": "5 primitives pour simplifier Angular :\n- `state` : etat synchrone\n- `query` : fetch de donnees\n- `mutation` : actions async",
  "markdown": "# Page 1\n\n...\n\n---\n\n# Page 2\n\n...",
  "outputDir": "/path/to/output",
  "fileName": "result.pdf",
  "assetBaseDir": "/path/to/assets"
}
````