open-index/open-npm huggingface dataset:
npm package: @lesgensdelatechnique/nuxt-wp-api
Description: Adds [WP-API](https://github.com/WP-API/node-wpapi) to your nuxt application as well as some additional Endpoints.
Author: Les Gens de la Technique
Latest version: 1.5.0

# nuxt-wp-api

## Features

The module adds [WP-API](https://github.com/WP-API/node-wpapi) to your nuxt application as well as some additional Endpoints.

## Installation

`npm install @lesgensdelatechnique/nuxt-wp-api`
`yarn add @lesgensdelatechnique/nuxt-wp-api`

## Setup

Add `@lesgensdelatechnique/nuxt-wp-api` to the `modules` section of `nuxt.config.js`

```js
{
  modules: [
    ['@lesgensdelatechnique/nuxt-wp-api', {
      endpoint: 'https://your.domain/wp-json',
    }],
 ]
}
```

## Usage

You have access to all [WP-API](https://github.com/WP-API/node-wpapi) API Endpoints as well as some others using the injected `app.$wp`. (see examples below)

### Examples

#### Using the [WP-API](https://github.com/WP-API/node-wpapi) API

```js
export default {
  async asyncData ({ app, store, params }) {
    return { articles: await app.$wp.posts().perPage(10) }
  }
}
```

```js
export default {
  async asyncData ({ app, store, params }) {
    return { page: await app.$wp.pages().slug('your-page-slug') }
  }
}
```

#### Using the additional Endpoints

##### Pages template

```
/* Search for pages using the page-contact.php file. */

$wp.pagesTemplate().template('contact')
$wp.pagesTemplate().template('contact').embed()
```

##### Front page

Such as the `$wp.postsPage()` Endpoint, it will return a list of posts if no front-page/posts-page has been defined in your Wordpress settings.

```
$wp.frontPage()
$wp.frontPage().embed()
```

##### Posts page

```
$wp.postsPage()
$wp.postsPage().embed()
```

##### Privacy Policy page

```
$wp.privacyPolicyPage()
$wp.privacyPolicyPage().embed()
```

##### Menus

```
$wp.menus()
$wp.menus().location('the-menu-location')
```

#### Custom post types

The `cpt` function returns similar objects as the `posts()` or `pages()` queries.

```
$wp.cpt('movies')
$wp.cpt('movies').id(9)
```

#### Available languages ( requires the [Polylang](https://polylang.pro/) plugin )

```
$wp.languages()
```

#### Forms ( requires the [Ninja Forms](https://ninjaforms.com/) plugin )

```
$wp.forms()
$wp.forms().id(1)

// Submit a post request to store a submission on Ninja forms dahsboard.

$wp.forms().id(1).create({
    formData: {
        firstName: 'Jean',
        lastName: 'Dupont',
        email: 'dupontjean@mail.test
    },
}).then(function(response) {
    console.log(response)
}).catch(function(error) {
    console.log("Oops, something happened", error)
})
```

## NOTE TO DEVELOPERS

To update the package on npm:

- Change the version of the package

`package.json`
```json
{
  "version": "1.2.3"
}
```

- Commit your changes  `git commit -am "my commit message"`
- Tag your commit `git tag -a v1.2.3 -m "my version 1.2.3"`
- Then run `npm run release`
npm package: @lesgo/memory-mcp
Description: Personal External Brain MCP Server - A stateless MCP server for syncing templates, standards, and knowledge via GitHub
Latest version: 1.2.0

# memory-mcp

Personal External Brain MCP Server - A stateless MCP server for syncing templates, standards, and knowledge via GitHub.

## Features

- **Zero-latency reads**: In-memory cache for instant access to templates and standards
- **Non-blocking writes**: Async GitHub sync with local queue for resilience  
- **Auto-categorization**: Files organized by category (templates, standards, knowledge, etc.)
- **Full-text search**: Search across file paths and content

## Installation

### VS Code / Copilot

Add to your `~/.vscode/mcp.json` or VS Code settings:

```json
{
  "servers": {
    "memory-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "memory-mcp"],
      "env": {
        "MEMORY_MCP_REPO": "your-username/memory-mcp-storage",
        "MEMORY_MCP_TOKEN": "ghp_your_token_here"
      }
    }
  }
}
```

### Claude Desktop

Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "memory-mcp": {
      "command": "npx",
      "args": ["-y", "memory-mcp"],
      "env": {
        "MEMORY_MCP_REPO": "your-username/memory-mcp-storage",
        "MEMORY_MCP_TOKEN": "ghp_your_token_here"
      }
    }
  }
}
```

## Configuration

| Variable | Required | Description |
|----------|----------|-------------|
| `MEMORY_MCP_REPO` | Yes | GitHub repository in `owner/repo` format |
| `MEMORY_MCP_TOKEN` | Yes | GitHub Personal Access Token with `repo` scope |

## Tools

### `list_knowledge`
List all available memory files organized by category.

### `read_memory`
Read the content of a specific memory file.
```json
{ "path": "templates/user-story.md" }
```

### `save_memory`
Create or update a memory file. Category folders are auto-created.
```json
{ "category": "templates", "name": "user-story.md", "content": "..." }
```

### `delete_memory`
Delete a memory file.
```json
{ "path": "templates/old-template.md" }
```

### `search_memory`
Search across all memory files by keyword.
```json
{ "query": "graphql error" }
```

## Storage Repository Structure

Create a private GitHub repository (e.g., `memory-mcp-storage`) with this structure:

```
/
├── index.json             # Auto-generated manifest
├── templates/             # Markdown templates
│   ├── user-story.md
│   └── pull-request.md
├── standards/             # Technical rules (YAML/JSON)
│   ├── typescript.yaml
│   └── graphql.yaml
└── knowledge/             # Long-form context
    └── architecture.md
```

## How It Works

1. **Startup**: Fetches all files from GitHub, populates in-memory cache
2. **Reads**: Cache-first (instant), falls back to GitHub API on miss
3. **Writes**: Updates cache immediately, returns to agent, syncs GitHub async
4. **Failures**: Failed writes queue to `~/.memory-mcp-queue.json` and retry on next operation

## Development

```bash
# Install dependencies
npm install

# Build
npm run build

# Watch mode
npm run dev
```

## License

MIT
npm package: @lesimoes.dev/music-ai
Description: Non-official [Music AI](https://music.ai/docs/getting-started/introduction/) (Before called Moises AI) API wrapper package with Typescript support
Author: Leandro Simões
Latest version: 1.0.7
Deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

# music-ai

Non-official [Music AI](https://music.ai/docs/getting-started/introduction/) (Before called Moises AI) API wrapper package with Typescript support

[![Codacy Badge](https://app.codacy.com/project/badge/Grade/3e0b2e2d5b9d4157a26d7faebe3f5a6f)](https://app.codacy.com/gh/leandrosimoes/moises/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)


## Install

`yarn add @lesimoes.dev/music-ai`

or

`npm i @lesimoes.dev/music-ai`

## How to use it?

```typescript
// importing into your project
import { 
    processFile, 
    processFolder, 
    ProcessStatus, 
    ProcessFileOptions,
    JobStatus,
    DownloadResult
} from '@lesimoes.dev/music-ai'

// types exported by the library
export type ProcessStatus =
    | 'PENDING'
    | 'PROCESSING'
    | 'SUCCEEDED'
    | 'FAILED'
    | 'ABORTED'

export type ProcessFolderOptions = {
    apiKey: string
    workflowId: string
    inputFolder: string
    outputFolder: string
    maxConcurrencyNumber?: number
    abortSignal?: AbortSignal
    jobMonitorInterval?: number
    onProgress?: (
        file: string,
        status: JobStatus | ProcessStatus,
        report: any
    ) => Promise<void>
    onLog?(message: string): Promise<void>
    onError?(message: string): Promise<void>
}

export type ProcessFileOptions = {
    apiKey: string
    workflowId: string
    filePath: string
    outputFolder: string
    jobMonitorInterval?: number
    onProgress?: (
        file: string,
        status: JobStatus | ProcessStatus,
        report: any
    ) => Promise<void>
    onLog?(message: string): Promise<void>
    onError?(message: string): Promise<void>
}

export type JobStatus =
    | 'SUCCEEDED'
    | 'FAILED'
    | 'PENDING'
    | 'PROCESSING'
    | 'DELETED'
    | 'QUEUED'
    | 'CANCELLED'
    | 'STARTED'

export type DownloadResult = {
    [key: string]: string
}

// functions exported by the library
async function processFile({
    apiKey,
    workflowId,
    filePath,
    outputFolder,
    jobMonitorInterval,
    onProgress,
    onLog,
    onError,
}: ProcessFileOptions) : Promise<DownloadResult>

async function processFolder({
    apiKey,
    workflowId,
    inputFolder,
    outputFolder,
    maxConcurrencyNumber = 5,
    abortSignal,
    jobMonitorInterval = 1000,
    onProgress,
    onLog,
    onError,
}: ProcessFolderOptions): Promise<DownloadResult[]>
```
npm package: @lesimoes.dev/open-explorer-cross-platform
Description: A cross platform NodeJs module to open a folder in the native os file system
Author: Leandro Simões
Latest version: 1.0.4

# open-explorer-cross-platform

A cross platform NodeJs module to open a folder in the native os file system.

[![Codacy Badge](https://app.codacy.com/project/badge/Grade/63a5c0855d6d4ee087416016b8c718ae)](https://app.codacy.com/gh/leandrosimoes/open-explorer-cross-platform/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)

## Installation

```bash
npm install @lesimoes.dev/open-explorer-cross-platform
```

or

```bash
yarn add @lesimoes.dev/open-explorer-cross-platform
```

## Usage

```typescript
import openExplorer from '@lesimoes.dev/open-explorer-cross-platform';

await openExplorer('path/to/folder');
```

Or if you want for some reason to force a specific platform:

```typescript
import openExplorer, { Platform } from '@lesimoes.dev/open-explorer-cross-platform';

const platform: Platform = 'linux'; // or 'win32' or 'darwin'

await openExplorer('path/to/folder', platform);
```

## Typings exported

```typescript
export type Platform = 'linux' | 'win32' | 'darwin';
```

## License

[MIT](https://choosealicense.com/licenses/mit/)
npm package: @lesjoursfr/audio-waveform
Description: A library to generate waveform for audio files.
Latest version: 4.0.6

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Faudio-waveform.svg)](https://badge.fury.io/js/@lesjoursfr%2Faudio-waveform)
[![QC Checks](https://github.com/lesjoursfr/audio-waveform/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/audio-waveform/actions/workflows/quality-control.yml)

# @lesjoursfr/audio-waveform

Generate waveform from an audio file with a simple API in Node.js.

# What is this library?

This library use electron to generate waveform files from an audio file.

## Usage

Install the lib and add it as a dependency :

```
npm install @lesjoursfr/audio-waveform
```

Then put this in your code:

```javascript
const { AudioAnalyzer } = require("@lesjoursfr/audio-waveform");

const audioAnalyzer = new AudioAnalyzer(file, options);
audioAnalyzer
	.waveform()
	.then(() => {
		console.log("Waveform Generated Successfully!");
	})
	.catch((err) => {
		console.error("Failed to generate Waveform because of ", err);
	});
```

#### Parameters

- `file`:
  The audio file
- `options`:
  Optional options to use xvfb for the generation
npm package: @lesjoursfr/bin-check
Description: Check if a binary is working
Author: Kevin Mårtensson
Latest version: 8.0.5

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Fbin-check.svg)](https://badge.fury.io/js/@lesjoursfr%2Fbin-check)
[![QC Checks](https://github.com/lesjoursfr/bin-check/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/bin-check/actions/workflows/quality-control.yml)

# bin-check

Check if a binary is working by checking its exit code

## Install

```sh
npm install @lesjoursfr/bin-check
```

## Usage

```js
import binCheck from "@lesjoursfr/bin-check";

binCheck("/bin/sh", ["--version"]).then((works) => {
	console.log(works);
	//=> true
});
```

## API

### binCheck(binary, [arguments])

Returns a `Promise` for a `boolean`.

### binCheck.sync(binary, [arguments])

Returns a `boolean`.

#### binary

Type: `string`

Path to the binary.

#### arguments

- Type: `Array`
- Default: `['--help']`

Arguments to run the binary with.

## License

MIT © [Kevin Mårtensson](https://github.com/kevva)
npm package: @lesjoursfr/bin-version
Description: Get the version of a binary in semver format
Author: Sindre Sorhus
Latest version: 8.0.5

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Fbin-version.svg)](https://badge.fury.io/js/@lesjoursfr%2Fbin-version)
[![QC Checks](https://github.com/lesjoursfr/bin-version/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/bin-version/actions/workflows/quality-control.yml)

# bin-version

Get the version of a binary in [semver](https://github.com/npm/node-semver) format

## Install

```sh
npm install @lesjoursfr/bin-version
```

## Usage

```sh
curl --version
curl 7.30.0 (x86_64-apple-darwin13.0)
```

```js
import binaryVersion from "@lesjoursfr/bin-version";

console.log(await binaryVersion("curl"));
//=> '7.30.0'
```

```sh
openssl version
OpenSSL 1.0.2d 9 Jul 2015
```

```js
import binaryVersion from "@lesjoursfr/bin-version";

console.log(await binaryVersion("openssl"));
//=> '1.0.2'
```

```sh
openssl version
OpenSSL 1.0.2d 9 Jul 2015
```

```js
import binaryVersion from "@lesjoursfr/bin-version";

console.log(await binaryVersion("openssl", { args: ["version"] }));
//=> '1.0.2'
```

## API

### binaryVersion(binary, options?)

Returns a `Promise<string>` with the version of the `binary`.

#### binary

Type: `string`

The name of or path to the binary to get the version from.

#### options

Type: `object`

##### args

Type: `string[]`

The arguments to pass to `binary` so that it will print its version.

If not specified, predefined arguments will be used for known binaries, or `['--version']` and `['version']` arguments will be tried.

## Related

- [find-versions](https://github.com/sindresorhus/find-versions) - Find semver versions in a string
npm package: @lesjoursfr/bin-wrapper
Description: Binary wrapper that makes your programs seamlessly available as local dependencies
Author: Kevin Mårtensson
Latest version: 13.0.7

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Fbin-wrapper.svg)](https://badge.fury.io/js/@lesjoursfr%2Fbin-wrapper)
[![QC Checks](https://github.com/lesjoursfr/bin-wrapper/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/bin-wrapper/actions/workflows/quality-control.yml)

# bin-wrapper

Binary wrapper that makes your programs seamlessly available as local dependencies

## Install

```sh
npm install @lesjoursfr/bin-wrapper
```

## Usage

```js
import path from "path";
import BinWrapper from "@lesjoursfr/bin-wrapper";

const base = "https://github.com/imagemin/gifsicle-bin/raw/main/vendor";
const bin = new BinWrapper()
	.addSrc(`${base}/macos/gifsicle`, "darwin")
	.addSrc(`${base}/linux/x64/gifsicle`, "linux", "x64")
	.addSrc(`${base}/win/x64/gifsicle.exe`, "win32", "x64")
	.setDest(path.join("vendor"))
	.setUse(process.platform === "win32" ? "gifsicle.exe" : "gifsicle")
	.setVersion(">=1.71");

(async () => {
	await bin.run(["--version"]);
	console.log("gifsicle is working");
})();
```

Get the path to your binary with `bin.path()`:

```js
console.log(bin.path());
//=> 'path/to/vendor/gifsicle'
```

## API

### `new BinWrapper(options)`

Creates a new `BinWrapper` instance.

#### options

Type: `Object`

##### skipCheck

- Type: `boolean`
- Default: `false`

Whether to skip the binary check or not.

##### strip

- Type: `number`
- Default: `1`

Strip a number of leading paths from file names on extraction.

### .addSrc(url, [os], [arch])

Adds a source to download.

#### url

Type: `string`

Accepts a URL pointing to a file to download.

#### os

Type: `string`

Tie the source to a specific OS.

#### arch

Type: `string`

Tie the source to a specific arch.

### .setDest(destination)

#### destination

Type: `string`

Accepts a path which the files will be downloaded to.

### .setUse(binary)

#### binary

Type: `string`

Define which file to use as the binary.

### .path

Returns the full path to your binary.

### .setVersion(range)

#### range

Type: `string`

Define a [semver range](https://github.com/npm/node-semver#ranges) to check
the binary against.

### .run([arguments])

Runs the search for the binary. If no binary is found it will download the file
using the URL provided in `.addSrc()`.

#### arguments

- Type: `Array`
- Default: `['--version']`

Command to run the binary with. If it exits with code `0` it means that the
binary is working.

## License

MIT © [Kevin Mårtensson](http://kevinmartensson.com)
npm package: @lesjoursfr/bootstrap-context-menu
Description: Contextual Menu for Bootstrap.
Latest version: 1.0.4

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Fbootstrap-context-menu.svg)](https://badge.fury.io/js/@lesjoursfr%2Fbootstrap-context-menu)
[![QC Checks](https://github.com/lesjoursfr/bootstrap-context-menu/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/bootstrap-context-menu/actions/workflows/quality-control.yml)

# @lesjoursfr/bootstrap-context-menu

Bootstrap 5 context menu library.

## Requirements

To work this library needs :

- [@popperjs/core](https://www.npmjs.com/package/@popperjs/core) **2.x**
- [bootstrap](https://www.npmjs.com/package/bootstrap) **5.x**

## How to use

```javascript
import { BootstrapContextMenu } from "@lesjoursfr/bootstrap-context-menu";

/* Initialize the BootstrapContextMenu */
new BootstrapContextMenu({
	selector: "#bootstrap-context-menu",
	items: {
		// Define your menu items here
	},
	callback: (key, opener) => {
		// Handle menu item click
	},
});
```

## License

The MIT License (MIT).
Please see the [License File](https://github.com/lesjoursfr/bootstrap-context-menu/blob/master/license) for more information.
npm package: @lesjoursfr/browser-tools
Description: Some browser tools for events & DOM manipulation.
Latest version: 3.0.2

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Fbrowser-tools.svg)](https://badge.fury.io/js/@lesjoursfr%2Fbrowser-tools)
[![QC Checks](https://github.com/lesjoursfr/browser-tools/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/browser-tools/actions/workflows/quality-control.yml)

# @lesjoursfr/browser-tools

Some browser tools for events & DOM manipulation.

# Documentation

https://lesjoursfr.github.io/browser-tools/
npm package: @lesjoursfr/colorpicker
Description: Colorpicker is a modular color picker plugin.
Latest version: 7.0.5

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Fcolorpicker.svg)](https://badge.fury.io/js/@lesjoursfr%2Fcolorpicker)
[![QC Checks](https://github.com/lesjoursfr/colorpicker/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/colorpicker/actions/workflows/quality-control.yml)

# @lesjoursfr/colorpicker

Modular color picker

## Requirements

To work this library needs :

- [@popperjs/core](https://www.npmjs.com/package/@popperjs/core) **2.x**

## How to use

```javascript
import { Colorpicker } from "@lesjoursfr/colorpicker";

/* Initialize the Colorpicker */
new Colorpicker(document.querySelector("#colorpicker"), {
	color: "#C83E2C",
	useAlpha: true,
});
```

## License

The MIT License (MIT).
Please see the [License File](https://github.com/lesjoursfr/colorpicker/blob/master/license) for more information.

## Credits

_Based on Javi Aguilar's color picker (2021)._
npm package: @lesjoursfr/date
Description: Dates for humans.
Latest version: 2.0.4

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Fdate.svg)](https://badge.fury.io/js/@lesjoursfr%2Fdate)
[![QC Checks](https://github.com/lesjoursfr/date/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/date/actions/workflows/quality-control.yml)

# @lesjoursfr/date

Date is an english language date parser for Node.js and the browser.

**This is a fork of [@matthewmueller project date.js](https://github.com/matthewmueller/date)**

## Installation

### On the server or in the browser:

```bash
npm install @lesjoursfr/date
```

## Examples

```js
date("10 minutes from now");
date("in 5 hours");
date("at 5pm");
date("at 12:30");
date("at 23:35");
date("in 2 days");
date("tuesday at 9am");
date("monday at 1:00am");
date("last monday at 1:00am");
date("tomorrow at 3pm");
date("yesterday at 12:30am");
date("5pm tonight");
date("tomorrow at noon");
date("next week tuesday");
date("next week tuesday at 4:30pm");
date("2 weeks from wednesday");
date("tomorrow night at 9");
date("tomorrow afternoon");
date("this morning at 9");
date("at 12:30pm");
date("tomorrow at 9 in the morning");
date("2 years from yesterday at 5pm");
date("last month");
date("2nd of January");
date("1st of March");
date("1 st of March");
date("31st of September 4:00am");
date("1st of January 4:00am");
date("9th of December 4:00am");
date("tomorrow afternoon at 4:30pm 1 month from now");
date("10 seconds ago");
date("1 minute ago");
date("2 hours ago");
date("5 weeks ago");
date("2 months ago");
date("1 year ago");
date("an hour later");
date("2w from wednesday");
date("2nd day of January");
date("two hours later");
date("a fortnight from wednesday");
date("a minute ago");
date("at 12:30");
date("at 12.30");
date("tuesday at 9");
date("tomorrow at 15");
```

## API

### date(str, [offset])

Create a `Date` from a `str`. You may also supply an optional `offset` to the starting date. `offset` defaults to the current date and time.

## Tests

To run the tests, you'll need Node.js:

```bash
npm install
npm run test
```
npm package: @lesjoursfr/edith
Description: Simple WYSIWYG editor.
Latest version: 4.0.5

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Fedith.svg)](https://badge.fury.io/js/@lesjoursfr%2Fedith)
[![QC Checks](https://github.com/lesjoursfr/edith/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/edith/actions/workflows/quality-control.yml)

# @lesjoursfr/edith

Edith, simple WYSIWYG editor.

# Requirements

To work this library needs :

- [codemirror](https://www.npmjs.com/package/codemirror) **6.x**
- [@codemirror/lang-html](https://www.npmjs.com/package/@codemirror/lang-html) **6.x**
- [@popperjs/core](https://www.npmjs.com/package/@popperjs/core) **2.x**
- [@fortawesome/fontawesome-free](https://www.npmjs.com/package/@fortawesome/fontawesome-free) **7.x**

# How to use

```javascript
import { Edith } from "@lesjoursfr/edith";

/* Initialize the WYSIWYG Editor */
new Edith(document.querySelector("#editor"), {
	height: 200,
	toolbar: [
		[
			"style",
			[
				"bold",
				"italic",
				"underline",
				"strikethrough",
				"subscript",
				"superscript",
				"nbsp",
				"clear",
			],
		],
		/*** Other toolbar blocs ***/
	],
	buttons: {
		/*** Extra buttons for the toolbar ***/
	},
	initialContent: "Optional initial content",
});
```
npm package: @lesjoursfr/exifr-cli
Description: CLI for the exifr npm module.
Latest version: 3.0.3

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Fexifr-cli.svg)](https://badge.fury.io/js/@lesjoursfr%2Fexifr-cli)
[![QC Checks](https://github.com/lesjoursfr/exifr-cli/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/exifr-cli/actions/workflows/quality-control.yml)

# exifr-cli

A CLI to read EXIF data from images using [exifr](https://www.npmjs.com/package/exifr).
npm package: @lesjoursfr/gcp-tts
Description: Wrapper around the Google Cloud TTS module.
Latest version: 2.0.5

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Fgcp-tts.svg)](https://badge.fury.io/js/@lesjoursfr%2Fgcp-tts)
[![QC Checks](https://github.com/lesjoursfr/gcp-tts/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/gcp-tts/actions/workflows/quality-control.yml)

# gcp-tts

Generate audio files from text file using GCP.

## Presentation

This module convert text to sound using the Google Cloud Text-to-Speech service.

```javascript
import { Languages, synthesizeTextWithGCP, Voices } from "@lesjoursfr/gcp-tts";

let result = await synthesizeTextWithGCP(
	"Alice, assise auprès de sa sœur sur le gazon, …",
	{
		projectId: "gcp-project-id",
		clientOptions: { credentials: credentials },
		bucketId: "gcp-bucket-id",
	},
	{
		language: Languages.fr_FR,
		voice: Voices.fr_FR_Neural2_A,
		audioEncoding: "LINEAR16",
	},
	{ folder: "/an/absolute/path", filename: "filename-without-extension" }
);
```

You can also convert the generated file to WEBA and/or M4A.
**You need to have ffmpeg installed on your system to do that.**

```javascript
import {
	Codecs,
	Languages,
	synthesizeTextWithGCP,
	Voices,
} from "@lesjoursfr/gcp-tts";

let result = await synthesizeTextWithGCP(
	"Alice, assise auprès de sa sœur sur le gazon, …",
	{
		projectId: "gcp-project-id",
		clientOptions: { credentials: credentials },
		bucketId: "gcp-bucket-id",
	},
	{
		language: Languages.fr_FR,
		voice: Voices.fr_FR_Neural2_A,
		audioEncoding: "LINEAR16",
	},
	{ folder: "/an/absolute/path", filename: "filename-without-extension" },
	[{ codec: Codecs.weba }, { codec: Codecs.m4a }]
);
```

The return object is:

```typescript
type SynthesizeResult = {
	sourceFile: string; // File path of the original generated file
	extraEncodes: Array<string>; // Array of file paths converted by ffmpeg
};
```
npm package: @lesjoursfr/gifsicle-wrapper
Description: Wrapper for Gifsicle
Latest version: 5.0.8

[![NPM version](https://badge.fury.io/js/@lesjoursfr%2Fgifsicle-wrapper.svg)](http://badge.fury.io/js/@lesjoursfr%2Fgifsicle-wrapper)
[![QC Checks](https://github.com/lesjoursfr/gifsicle-wrapper/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/gifsicle-wrapper/actions/workflows/quality-control.yml)

# @lesjoursfr/gifsicle-wrapper

[Gifsicle](https://www.lcdf.org/gifsicle/) wrapper

## Usage

Resize a Gif :

```javascript
const Gifsicle = require("@lesjoursfr/gifsicle-wrapper");

(async () => {
	await Gifsicle(path.join(__dirname, "test.gif"))
		.resize(600, 600, {
			kernel: gifsicle.kernel.lanczos3,
			withoutEnlargement: true,
		})
		.toFile(path.join(__dirname, "test-resized.gif"));
})();
```

Change colors to greyscale :

```javascript
const Gifsicle = require("@lesjoursfr/gifsicle-wrapper");

(async () => {
	await Gifsicle(path.join(__dirname, "test.gif"))
		.greyscale(true)
		.toFile(path.join(__dirname, "test-resized.gif"));
})();
```

Optimize the output :

```javascript
const Gifsicle = require("@lesjoursfr/gifsicle-wrapper");

(async () => {
	await Gifsicle(path.join(__dirname, "test.gif"))
		.optimize({ level: gifsicle.level.O2, lossiness: 20 })
		.toFile(path.join(__dirname, "test-optimized.gif"));
})();
```
npm package: @lesjoursfr/html-to-image
Description: A library to generate images from HTML.
Latest version: 2.0.5

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Fhtml-to-image.svg)](https://badge.fury.io/js/@lesjoursfr%2Fhtml-to-image)
[![QC Checks](https://github.com/lesjoursfr/html-to-image/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/html-to-image/actions/workflows/quality-control.yml)

# @lesjoursfr/html-to-image

Generate PNG/JPEG images from HTML with simple API in Node.js.

# What is this library?

This library use electron to generate PNG/JPEG images from HTML.

## Usage

Install the lib and add it as a dependency :

```
    npm install @lesjoursfr/html-to-image
```

Then put this in your code:

```javascript
const { HtmlToImage } = require("@lesjoursfr/html-to-image");

const htmlToImage = new HtmlToImage(target, output, selector, outputType);
htmlToImage
	.render()
	.then(() => {
		console.log("Image Generated Successfully!");
	})
	.catch((err) => {
		console.error("Failed to generate Image because of ", err);
	});
```

#### Parameters

- `target`:
  The URL of the HTML page
- `output`:
  The image file path
- `selector`:
  The CSS selector of the content to capture
- `outputType`:
  The image type ("png" or "jpeg", default to "jpeg")
npm package: @lesjoursfr/html-to-pdf
Description: A library to generate PDF from HTML.
Latest version: 4.0.5

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Fhtml-to-pdf.svg)](https://badge.fury.io/js/@lesjoursfr%2Fhtml-to-pdf)
[![QC Checks](https://github.com/lesjoursfr/html-to-pdf/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/html-to-pdf/actions/workflows/quality-control.yml)

# @lesjoursfr/html-to-pdf

Generate PDF from HTML with simple API in Node.js.

# What is this library?

This library use electron to generate PDF files from HTML.

## Usage

Install the lib and add it as a dependency :

```
    npm install @lesjoursfr/html-to-pdf
```

Then put this in your code:

```javascript
    const { PDF } = require("@lesjoursfr/html-to-pdf");

    const pdf = new PDF(target, output);
    pdf.render()
        .then(() => {
            console.log("PDF Generated Successfully!")
        })
        .catch((err) => {
            console.error("Failed to generate PDF because of ", err)
        });
    );
```

#### Parameters

- `target`:
  The URL of the HTML page
- `output`:
  The PDF file path
npm package: @lesjoursfr/human-interval
Description: Human readable time measurements
Latest version: 2.0.4

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Fhuman-interval.svg)](https://badge.fury.io/js/@lesjoursfr%2Fhuman-interval)
[![QC Checks](https://github.com/lesjoursfr/human-interval/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/human-interval/actions/workflows/quality-control.yml)

# @lesjoursfr/human-interval

Human-readable interval parser for Javascript.
Converts words written in English to numbers by using [node-numbered](https://github.com/blakeembrey/node-numbered).

**This is a fork of [@rschmukler project human-interval](https://github.com/agenda/human-interval)**

## Installation

### On the server or in the browser:

```bash
npm install @lesjoursfr/human-interval
```

## Example usage

```js
humanInterval("three minutes");
```

## More sophisticated examples

Human Interval understands all of the following examples:

```js
humanInterval("minute");
humanInterval("one minute");
humanInterval("1.5 minutes");
humanInterval("3 days and 4 hours");
humanInterval("3 days, 4 hours and 36 seconds");
humanInterval("4 months, 3 days, 5 hours and forty-five seconds");
```

## The full list

### Units

Supports the following units in the plural and singular forms:

- `seconds`
- `minutes`
- `hours`
- `days`
- `weeks`
- `months` — assumes 30 days
- `years` — assumes 365 days

### Wordy numbers

Supports numbers being written out in English words.

```js
humanInterval("five minutes");
```

### Hyphenated numbers

Supports hyphenated numbers.

```js
humanInterval("twenty-five seconds");
```

### Negative numbers

Supports negative numbers if the time starts with a `-` symbol immediately followed by a number.

```js
humanInterval("-2 minutes");
```

## API

### humanInterval(str)

Return the `number` of milliseconds from a `str` interval.

## Tests

To run the tests, you'll need Node.js:

```bash
npm install
npm run test
```
npm package: @lesjoursfr/mastodon-share-button
Description: Simple module to share content to Mastodon.
Latest version: 3.0.3

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Fmastodon-share-button.svg)](https://badge.fury.io/js/@lesjoursfr%2Fmastodon-share-button)
[![QC Checks](https://github.com/lesjoursfr/mastodon-share-button/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/mastodon-share-button/actions/workflows/quality-control.yml)

# @lesjoursfr/mastodon-share-button

Simple module to share content to Mastodon.

# How to use

```javascript
import MastodonShareButtons from "@lesjoursfr/mastodon-share-button";
import mastodonShareButtonsFr from "@lesjoursfr/mastodon-share-button/src/lang/fr";

/* Initialize the module */
new MastodonShareButtons({
	lang: mastodonShareButtonsFr,
	saveInstance: true,
});
```

```html
<!-- Create a button -->
<button
	mastodon-sharing-text="Mastodon sharing button! https://github.com/lesjoursfr/mastodon-share-button"
>
	Share on Mastodon
</button>
```
npm package: @lesjoursfr/media-converter
Description: CLI for the fluent-ffmpeg npm module.
Latest version: 3.0.3

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Fmedia-converter.svg)](https://badge.fury.io/js/@lesjoursfr%2Fmedia-converter)
[![QC Checks](https://github.com/lesjoursfr/media-converter/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/media-converter/actions/workflows/quality-control.yml)

# media-converter

An audio/video converter using [fluent-ffmpeg](https://www.npmjs.com/package/fluent-ffmpeg).

## Audio

The audio converter output 2 files :

- An m4a file with ACC @ 256kbps
- A weba file with Opus @ 256kbps

Usage

```bash
ljconverter audio sound.wav
```

To change the audio bitrate you can pass the target bitrate in kbps to the `audiobitrate` parameter.

```bash
ljconverter audio sound.wav --audiobitrate 128
```

## Video

The video converter output 2 files :

- An mp4 file with ACC @ 256kbps & H.264 @ 4000kbps
- A webm file with Opus @ 256kbps & VP9 @ 4000kbps

Usage

```bash
ljconverter video video.mts
```

To change the audio and video bitrates you can pass the targets bitrates in kbps to `audiobitrate` & `videobitrate` parameters.

```bash
ljconverter video video.mts --audiobitrate 128 --videobitrate 2000
```

You can also resize the video with the `resize` parameter (see the [fluent-ffmpeg frame size options](https://github.com/fluent-ffmpeg/node-fluent-ffmpeg#sizesize-set-output-frame-size) for all available formats)

```bash
ljconverter video video.mts --resize 720x?
```

You can also change the framerate of the video with the `framerate` parameter

```bash
ljconverter video video.mts --framerate 30
```
npm package: @lesjoursfr/postcss-extract-css-variables
Description: PostCSS plugin to extract rules with CSS variables
Latest version: 3.0.3

[![npm version](https://badge.fury.io/js/@lesjoursfr%2Fpostcss-extract-css-variables.svg)](https://badge.fury.io/js/@lesjoursfr%2Fpostcss-extract-css-variables)
[![QC Checks](https://github.com/lesjoursfr/postcss-extract-css-variables/actions/workflows/quality-control.yml/badge.svg)](https://github.com/lesjoursfr/postcss-extract-css-variables/actions/workflows/quality-control.yml)

# postcss-extract-css-variables

[PostCSS] plugin to extract rules with CSS variables.

[postcss]: https://github.com/postcss/postcss

```css
/* Input example */
.lj-color-35 {
	--lj-color-main: #fda92a;
	--lj-color-alpha: rgba(253, 169, 42, 0.75);
	--lj-color-light: #fdde2a;
	--lj-color-mixed: #fdc42a;
}

.selector-1 {
	background-color: var(--lj-color-main);
	content: "";
	display: inline-block;
	height: 5px;
	margin-right: 10px;
	width: 18px;
}
```

```css
/* Output example */
.lj-color-35 .selector-1 {
	background-color: #fda92a;
}
```

## Usage

**Step 1:** Install plugin:

```sh
npm install --save-dev postcss postcss-extract-css-variables
```

**Step 2:** Check you project for existed PostCSS config: `postcss.config.js`
in the project root, `"postcss"` section in `package.json`
or `postcss` in bundle config.

If you do not use PostCSS, add it according to [official docs]
and set this plugin in settings.

**Step 3:** Add the plugin add the end of the plugins list:

```diff
module.exports = {
  plugins: [
    require('autoprefixer'),
+   require('postcss-extract-css-variables')({ output: './output.css' })
  ]
}
```

[official docs]: https://github.com/postcss/postcss#usage
npm package: @leslab/illus
Description: Illustration of LeHotel
Author: Hieu Nguyen
Latest version: 0.0.3

# Leslab

## Roadmap

| component    | description             | status         | estimate time |
| ------------ | ----------------------- | -------------- | ------------- |
| formatNumber | Format number, currency | ` in progress` |               |
| Button       |                         |                |               |
| Avatar       |                         |                |               |
| Badge        |                         |                |               |
| Checkbox     |                         |                |               |
| Dialog       |                         |                |               |
| Form         |                         |                |               |
| Menu         |                         |                |               |
| Tabs         |                         |                |               |
| Tag          |                         |                |               |
| Toast        |                         |                |               |
| Tooltip      |                         |                |               |
| Dropdown     |                         |                |               |
| Panel        |                         |                |               |
npm package: @leslab/preset
Description: A preset of LeHotel base on tailwindcss
Author: LeHotel
Latest version: 0.0.2

# Installation

```sh
yarn add @lehotel/preset
```

# Usage

In your `tailwind.config.js`, add `presets` property:

```js
module.exports = {
  presets: [require("@lehotel/preset")],
}
```
npm package: @lesleh/gpt-prompts
Description: Collection of prompts to use with GPT Chat API
Author: Leslie Hoare
Latest version: 0.3.1

[![Checks](https://github.com/lesleh/gpt-prompts/actions/workflows/checks.yml/badge.svg)](https://github.com/lesleh/gpt-prompts/actions/workflows/checks.yml)


# gpt-prompts

gpt-prompts is a TypeScript project that provides a collection of prompts for use with the ChatGPT API. This project defines variables that will be replaced upon request to customize the text of the prompts. It is a npm package, hosted on Github Package Registry.

## Features

- npm package
- Compatible with ChatGPT API
- Customizable prompt variables

## Prerequisites

- Node 16 or higher

## Installation

To install the project, run one of the following commands:

Using yarn:

```bash
yarn add @lesleh/gpt-prompts
```

Using npm:

```bash
npm install @lesleh/gpt-prompts
```

Using pnpm:

```bash
pnpm add @lesleh/gpt-prompts
```

## Getting Started

(TODO: Fill in information on how to get started with the project, including usage examples and code snippets)

## Contributing

Contributions are welcome! You can contribute by creating a Github issue or submitting a pull request. In particular, help with adding unit tests is appreciated.

## Known Issues and Limitations

There are no known issues or limitations at this time.

## Additional Resources

For more information on the ChatGPT API, please refer to the [official documentation](https://platform.openai.com/docs/guides/chat).

## License

This project is licensed under the [MIT License](LICENSE).