open-index/open-npm huggingface dataset:
npm package: @fullstackhouse/agentloop
Description: AI agent that monitors chat platforms and responds using Claude Code
Latest version: 0.7.5

# AgentLoop

AI agent that monitors chat platforms and responds using Claude Code subprocess.

## How It Works

AgentLoop connects to chat platforms (Slack first) and listens for bot mentions. When mentioned, it spawns Claude Code with the workspace directory set, giving Claude access to CLAUDE.md context, filesystem, and git. Claude responds — using built-in tools and MCP servers — and the reply is posted as a thread.

Emoji reactions (👀 → ✅) track processing state, surviving restarts without a database.

## Quick Start

```bash
cp .env.example .env
cp config.example.json config.json
npm install
npm run dev
```

## CLI Usage

```bash
agentloop serve [options]

Options:
  --workspace, -w <path>   Workspace directory (default: cwd)
  --config, -c <path>      Config file path (default: config.json)
  --model, -m <model>      Claude model (overrides config)
  --channel <name>         Slack channel filter (can repeat)
  --help, -h               Show help

Examples:
  agentloop serve --workspace /app/monorepo
  agentloop serve -w ./my-project --channel "#dev"
```

## Configuration

### Environment Variables

| Variable            | Description                             |
| ------------------- | --------------------------------------- |
| `ANTHROPIC_API_KEY` | Anthropic API key (used by Claude Code) |
| `SLACK_XOXC`        | Slack user token (browser session)      |
| `SLACK_XOXD`        | Slack session token (browser session)   |

### config.json

```json
{
  "claude": { "model": "claude-sonnet-4-20250514" },
  "platforms": ["slack"],
  "slackChannels": ["#agentloop-test"],
  "slackUsers": ["Jacek Tomaszewski"],
  "workspaceDir": "/path/to/your/project",
  "mcpServers": {
    "slack": {
      "command": "npx",
      "args": ["slack-mcp-server@latest"],
      "env": {
        "SLACK_MCP_XOXC_TOKEN": "${SLACK_XOXC}",
        "SLACK_MCP_XOXD_TOKEN": "${SLACK_XOXD}",
        "SLACK_MCP_ADD_MESSAGE_TOOL": "true"
      }
    }
  }
}
```

## Docker

```bash
docker-compose up
```

Mount your workspace directory in `docker-compose.yml`:

```yaml
volumes:
  - /path/to/your/repo:/workspace:ro
command: ["--workspace", "/workspace"]
```

## Testing

```bash
npm run test:e2e
```

## Architecture

See [SPEC.md](SPEC.md) for full specification.
npm package: @fullstackhouse/nestjs-betterauth-logger
Description: NestJS logger plugin for Better Auth - structured HTTP request logging
Author: FullStackHouse
Latest version: 0.1.0

# @fullstackhouse/nestjs-betterauth-logger

NestJS logger plugin for Better Auth - structured HTTP request logging with automatic log level selection.

## Features

- 🔍 Structured logging of all Better Auth HTTP requests
- ⚡ Request timing (response time in milliseconds)
- 🎯 Automatic log level selection (error for 5xx, warn for 4xx, info for 2xx/3xx)
- 🌐 Client IP and User-Agent tracking
- 🧪 Easy to disable for testing environments
- 🔧 Custom NestJS logger support

## Installation

```bash
npm install @fullstackhouse/nestjs-betterauth-logger
```

## Usage

### Basic Usage

```typescript
import { Logger } from '@nestjs/common';
import { betterAuth } from 'better-auth';
import { authLoggerPlugin } from '@fullstackhouse/nestjs-betterauth-logger';

export const auth = betterAuth({
  // ... other config
  plugins: [
    authLoggerPlugin(), // Uses default Logger('BetterAuth')
  ],
});
```

### With Custom Logger

```typescript
const customLogger = new Logger('CustomAuth');

export const auth = betterAuth({
  plugins: [
    authLoggerPlugin({ logger: customLogger }),
  ],
});
```

### Disable in Tests

```typescript
export const auth = betterAuth({
  plugins: [
    authLoggerPlugin({
      disabled: process.env.NODE_ENV === 'test'
    }),
  ],
});
```

## Log Format

Logs are formatted as:

```
-> {METHOD} {PATH} {STATUS_CODE} {RESPONSE_TIME}ms [{IP}] "{USER_AGENT}"
```

### Example Output

```
-> POST /auth/sign-in 200 45ms [192.168.1.1] "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0"
-> POST /auth/sign-up 400 23ms [192.168.1.2] "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"
-> GET /auth/session 500 102ms [192.168.1.3] "PostmanRuntime/7.32.0"
```

## API

### `authLoggerPlugin(options?)`

Creates a Better Auth plugin that logs HTTP requests using NestJS Logger.

#### Options

```typescript
interface LoggerPluginOptions {
  /**
   * Custom NestJS logger instance
   * @default new Logger('BetterAuth')
   */
  logger?: Logger;

  /**
   * Disable logging completely
   * Useful for test environments
   * @default false
   */
  disabled?: boolean;
}
```

## Log Levels

The plugin automatically selects appropriate log levels based on HTTP status codes:

- **Error** (5xx): Server errors
- **Warn** (4xx): Client errors
- **Info** (2xx, 3xx): Successful requests and redirects

## License

MIT

## Repository

https://github.com/fullstackhouse/nestjs-betterauth-logger
npm package: @fullstackhouse/nestjs-outbox-typeorm-driver
Description: This package provides a driver for the NestJS Outbox library that uses TypeORM to interact with the database.
Author: axotion
Latest version: 4.1.2

# NestJS Outbox TypeORM Driver

[![npm version](https://badge.fury.io/js/%40fullstackhouse%2Fnestjs-outbox-typeorm-driver.svg)](https://www.npmjs.com/package/@fullstackhouse/nestjs-outbox-typeorm-driver)

TypeORM driver for [@fullstackhouse/nestjs-outbox](../core).

## Features

- **PostgreSQL & MySQL Support**: Works with postgres and mysql drivers

## Installation

```bash
npm install @fullstackhouse/nestjs-outbox-typeorm-driver
```

## Quick Start

```typescript
import { OutboxModule } from '@fullstackhouse/nestjs-outbox';
import {
  OutboxTransportEventMigrations,
  TypeORMDatabaseDriverFactory,
  TypeOrmOutboxTransportEvent,
} from '@fullstackhouse/nestjs-outbox-typeorm-driver';
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { DataSource } from 'typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: 'localhost',
      port: 5432,
      username: 'user',
      password: 'user',
      database: 'outbox',
      entities: [TypeOrmOutboxTransportEvent],
      migrations: [...OutboxTransportEventMigrations],
      migrationsRun: true,
    }),
    OutboxModule.registerAsync({
      imports: [TypeOrmModule.forFeature([TypeOrmOutboxTransportEvent])],
      useFactory: (dataSource: DataSource) => ({
        driverFactory: new TypeORMDatabaseDriverFactory(dataSource),
        events: [
          {
            name: 'OrderCreatedEvent',
            listeners: {
              retentionPeriod: 1000 * 60 * 60 * 24, // 24 hours
              maxExecutionTime: 1000 * 15,          // 15 seconds
              maxRetries: 5,                        // max retry attempts
            },
          },
        ],
        pollingInterval: 30_000,
        maxEventsPerPoll: 10,
      }),
      inject: [DataSource],
    }),
  ],
})
export class AppModule {}
```

## Supported Databases

| Database   | Real-time Support |
|------------|-------------------|
| PostgreSQL | Polling only      |
| MySQL      | Polling only      |

## License

MIT
npm package: @fullstackhouse/opentelemetry-js-decorator
Description: A TypeScript decorator for OpenTelemetry tracing
Author: Full Stack House
Latest version: 0.1.1

# @fullstackhouse/opentelemetry-js-decorator

A TypeScript method decorator for OpenTelemetry tracing. Automatically creates spans for decorated methods with support for sync, async, generator, and async generator functions.

## Installation

```bash
npm install @fullstackhouse/opentelemetry-js-decorator @opentelemetry/api
# or
pnpm add @fullstackhouse/opentelemetry-js-decorator @opentelemetry/api
```

## Usage

```typescript
import { Traced } from '@fullstackhouse/opentelemetry-js-decorator';

class UserService {
  @Traced()
  async getUser(id: string) {
    // Span automatically created: "UserService.getUser"
    return await this.repository.findById(id);
  }

  @Traced('fetch-user-profile')
  async getUserProfile(id: string) {
    // Span with custom name: "fetch-user-profile"
    return await this.fetchProfile(id);
  }

  @Traced({ name: 'db-query', op: 'database' })
  async queryDatabase(query: string) {
    // Span with custom name and operation type
    return await this.db.query(query);
  }
}
```

## Features

- Automatic span creation with `ClassName.methodName` naming
- Custom span names via string argument or options
- Support for sync, async, Promise-returning, generator, and async generator methods
- Automatic error recording and span status setting
- Preserves method metadata (works with other decorators)
- Sets `code.function` and `code.namespace` attributes
- Optional `op` attribute for categorizing operations

## API

### `@Traced()`

Creates a span with auto-generated name (`ClassName.methodName`).

### `@Traced(name: string)`

Creates a span with the specified name.

### `@Traced(options: TracedOptions)`

Creates a span with the specified options.

```typescript
interface TracedOptions extends SpanOptions {
  name?: string;  // Custom span name
  op?: string;    // Operation type (set as `code.op` attribute)
}
```

### `@Traced(name: string, options: TracedOptions)`

Creates a span with the specified name and options.

## Requirements

- `@opentelemetry/api` must be installed as a peer dependency
- TypeScript with `experimentalDecorators` enabled

## License

MIT
npm package: @fullstackhouse/plasmic-utils
Description: Utilities shared across various front-end projects built on Plasmic.
Latest version: 2.10.0

# plasmic-utils

Utilities shared across various front-end projects built on Plasmic.

Demo: https://studio.plasmic.app/projects/p5fDqKf3tE9hZs34jWhG2h .

## Installation

```bash
yarn
```

## Running the server

```bash
yarn start
```

## Plasmic Host

Deployment is automatic. Whenever a commit appears on the `main` branch, new version of the [Plasmic host](https://fullstackhouse.github.io/plasmic-utils/plasmic-host) is automatically deployed.

## Releasing

**Manual.** Create a release through GH UI to trigger deployment of a new npm `@fullstackhouse/plasmic-utils` package version, which will be named after the release name.
npm package: @fullstackhouse/react-compose
Description: Compose React providers and components to avoid deeply nested JSX trees
Author: Full Stack House
Latest version: 0.1.0

# @fullstackhouse/react-compose

Compose React providers and components to avoid deeply nested JSX trees.

## The Problem

```tsx
// Provider hell - deeply nested JSX
function App() {
  return (
    <ThemeProvider>
      <AuthProvider>
        <I18nProvider>
          <RouterProvider>
            <QueryProvider>
              <AppContent />
            </QueryProvider>
          </RouterProvider>
        </I18nProvider>
      </AuthProvider>
    </ThemeProvider>
  );
}
```

## The Solution

```tsx
import { compose } from "@fullstackhouse/react-compose";

const App = compose([
  ThemeProvider,
  AuthProvider,
  I18nProvider,
  RouterProvider,
  QueryProvider,
  AppContent,
]);
```

## Installation

```bash
npm install @fullstackhouse/react-compose
```

## Usage

### Basic Composition

```tsx
import { compose } from "@fullstackhouse/react-compose";

const MyScreen = compose([
  AuthProvider,
  ThemeProvider,
  MyScreenContent,
]);

// Use it like a normal component
<MyScreen />;
```

### Passing Props to Providers

Use tuple syntax `[Component, props]` to pass props to specific providers:

```tsx
const MyScreen = compose([
  [ThemeProvider, { theme: "dark" }],
  [I18nProvider, { locale: "en" }],
  MyScreenContent,
]);
```

### Props Flow to Content Component

Props passed to the composed component are forwarded to the innermost component:

```tsx
interface ContentProps {
  userId: string;
}

function UserProfile({ userId }: ContentProps) {
  return <div>User: {userId}</div>;
}

const Screen = compose<ContentProps>([
  AuthProvider,
  UserProfile,
]);

// Props are passed to UserProfile
<Screen userId="123" />;
```

### Mixing Tuple and Non-Tuple Providers

```tsx
const MyScreen = compose([
  AuthProvider, // No props needed
  [ThemeProvider, { theme: "dark" }], // With props
  [QueryProvider, { staleTime: 5000 }], // With props
  DataProvider, // No props needed
  MyScreenContent,
]);
```

## API

### `compose(providers)`

Composes an array of React components/providers into a single component.

**Parameters:**
- `providers` - Array of components or `[component, props]` tuples

**Returns:**
- A React component that renders all providers nested in order

**Type Parameters:**
- `TProps` - Props type for the composed component (optional, defaults to `object`)

### `Provider<TProps>`

Type for a provider in the composition array:

```tsx
type Provider<TProps> =
  | ComponentType<PropsWithChildren<TProps>>
  | readonly [ComponentType<PropsWithChildren<TProps>>, TProps];
```

## How It Works

Components are nested in order, with the first being the outermost wrapper:

```tsx
compose([A, B, C])
// Renders as:
<A>
  <B>
    <C />
  </B>
</A>
```

## License

MIT
npm package: @fullstackio/docusaurus-theme-newline
Description: Newline theme for Docusaurus
Latest version: 2.4.5

# Docusaurus Theme Classic

The classic theme for Docusaurus.

## Installation

Add `docusaurus/theme-classic` to your package:

```bash
npm i @docusaurus/theme-classic
# or
yarn add @docusaurus/theme-classic
```

Modify your `docusaurus.config.js`:

```diff
module.exports = {
  ...
+ themes: ['@docusaurus/theme-classic'],
  ...
}
```

## Swizzling components

```shell
$ npm swizzle @docusaurus/theme-classic [component name]
```

All components used by this theme can be found [here](https://github.com/facebook/docusaurus/tree/master/packages/docusaurus-theme-classic/src/theme)
npm package: @fullstackio/plugin-content-light-course-page
Description: Light Course Page Plugin for Coursasaurus.
Latest version: 2.3.0

# `@docusaurus/plugin-content-pages`

Pages plugin for Docusaurus.

## Usage

See [plugin-content-pages documentation](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-pages).
npm package: @fullstackio/postgraphile-upsert-plugin
Description: add postgres upsert mutations to postgraphile
Latest version: 1.4.0

# postgraphile-upsert-plugin

add postgres `upsert` mutations to [postgraphile](https://www.graphile.org/postgraphile)

[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) [![Greenkeeper badge](https://badges.greenkeeper.io/cdaringe/postgraphile-upsert.svg)](https://greenkeeper.io/) [![CircleCI](https://circleci.com/gh/cdaringe/postgraphile-upsert.svg?style=svg)](https://circleci.com/gh/cdaringe/postgraphile-upsert)

## Getting Started

### Install

```bash
yarn add @fullstackio/postgraphile-upsert-plugin
```

### CLI

```bash
postgraphile --append-plugins @fullstackio/postgraphile-upsert-plugin:PgMutationUpsertPlugin
```

See [here](https://www.graphile.org/postgraphile/extending/#loading-additional-plugins) for
more information about loading plugins with PostGraphile.

### Library

```js
const express = require("express");
const { postgraphile } = require("postgraphile");
const {
  PgMutationUpsertPlugin
} = require("@fullstackio/postgraphile-upsert-plugin");

const app = express();

app.use(
  postgraphile(pgConfig, schema, {
    appendPlugins: [PgMutationUpsertPlugin]
  })
);

app.listen(5000);
```

## Usage

This plugin creates an addition operation to `upsert<Table>` using a `where` clause, which is any unique constraint on the table.

## Example

```sql
create table bikes (
  id serial PRIMARY KEY,
  "serialNumber" varchar UNIQUE NOT NULL,
  weight real,
  make varchar,
  model varchar
)
```

An upsert would look like this:

```graphql
mutation {
  upsertBike(
    where: { serialNumber: "abc123" }
    input: {
      bike: {
        serialNumber: "abc123"
        weight: 25.6
        make: "kona"
        model: "cool-ie deluxe"
      }
    }
  ) {
    clientMutationId
  }
}
```

## Credits

- This is a fork of the TypeScript [postgraphile-upsert-plugin](https://github.com/cdaringe/postgraphile-upsert)
- Which itself is a fork of [the original upsert plugin](https://github.com/einarjegorov/graphile-upsert-plugin/blob/master/index.js)
npm package: @fullstackio/remark-cq
Description: Import code into markdown with cq
Author: Nate Murray
Latest version: 7.0.1-treesitter.40

# remark-cq

[**remark**][remark] plug-in to import code in markdown using [cq](https://github.com/fullstackio/cq)

Supports exporting [remark-attr](https://github.com/arobase-che/remark-attr)-compatable metadata with code blocks.

## Installation

[npm][npm-install]:

```bash
npm install @fullstackio/remark-cq
```

## Usage

For example:

```javascript
var remark = require("remark");
var cq = require("@fullstackio/remark-cq");
const unified = require("unified");
const reParse = require("remark-parse");
const stringify = require("rehype-stringify");
const remark2rehype = require("remark-rehype");
const remarkStringify = require("remark-stringify");

const render = (text, config) =>
    unified()
        .use(reParse)
        .use(cq, config)
        .use(remark2rehype)
        .use(stringify)
        .process(text);

const markup = `
The code:

{lang=javascript,crop-query=.dogs}  
<<[](test.js)`;

const html = (await render(markup, { root: __dirname })).contents;

console.log(html);
```

Given a file `test.js` containing:

```javascript
// test.js
var a = 1;
const dogs = () => "Like snuggles";
var b = 2;
```

Yields:

```html
<p>The code:</p>
<pre><code class="language-javascript">const dogs = () => "Like snuggles";
</code></pre>
```

Similarly, you can render to markdown like this:

```javascript
const renderMarkdown = (text, config) =>
    unified()
        .use(reParse)
        .use(remarkStringify)
        .use(cq, config)
        .process(text);
```

and then above example would render into:

````md
The code:

```javascript
const dogs = () => "Like snuggles";
```
````

## API

### `remark.use(cq, options)`

## Options

-   `root`: path to look for relative files
-   `undent`: undent the code (default `true`)
-   the rest are passed to `cq`

## Use with Docusaurus

`remark-cq` can be used with [Docusaurus](https://v2.docusaurus.io/) easily. Just add the following to your `docusaurus.config.js`:


```js
  remarkPlugins: [require("@fullstackio/remark-cq")]
```

For example, if you're using `@docusaurus/preset-classic`

```js
presets: [
    "@docusaurus/preset-classic",
    {
       docs: { 
           remarkPlugins: [require("@fullstackio/remark-cq")]
       }
    }
]
```



## License

[MIT][license] © [Nate Murray][author]

<!-- Definitions -->

[npm-install]: https://docs.npmjs.com/cli/install
[license]: LICENSE
[author]: http://fullstack.io
[remark]: https://github.com/wooorm/remark
npm package: @fullstackjosh/eslint-plugin-architected
Description: Enforce layering your code following my personal preferences, based on Jason Taylor's Clean Architecture.
Author: Joshua Hull
Latest version: 0.1.0

# eslint-plugin-architected

Enforce layering your code following my personal preferences, based on [Jason Taylor's Clean Architecture](https://jasontaylor.dev/clean-architecture-getting-started/).

If you'd like a more strict implementation of clean architecture, checkout [eslint-plugin-clean-architecture](./../eslint-plugin-clean-architecture).

## Installation

```
npm i -D @fullstackjosh/eslint-plugin-architected
```

## Usage

```js
// .eslintrc.js

module.exports = {
  extends: ["plugin:@fullstackjosh/architected/clean-ish"],
};
```

You will only be able to import code from layer X to layer Y if layer X depends on layer Y. Any other layer-to-layer import will yield a linting error.

For example:

```js
// 2-application/business-logic.js

import { apiMethod } from "../1-presentation/api";
// error: Do not import 1-presentation code into the 2-application layer
```

## Folder structure

```
layered-code
| 0-presentation
| 1-infrastructure
| 2-application
| 3-domain
| 4-data
```
npm package: @fullstackjosh/web-components
Description: Web components structured in such a way which enables both server side and client side rendering.
Author: Joshua Hull
Latest version: 0.5.1

# web-components

Web components structured in such a way which enables both server side and client side rendering. These components support not only the apps in this repo, but other repos of mine too.

## Warning

This package is in early early access. Don't install it into anything long-lived.

## Storybook

There is a Storybook app for these components [here](./../web-components-storybook-vue/). It wraps each component with a Vue component because that's easier than trying to get Storybook to play nice with web components (afaik). The components do not actually depend on Vue.

## Installation

```sh
npm i @fullstackjosh/web-components
```

## Usage

Import and the client-side version of any component:

```jsx
import { registerXYZComponent } from "@fullstackjosh/web-components/XYZComponent";

registerXYZComponent();

// this is a web component which relies on the shadow dom and therefore cannot be rendered server-side
return <fsj-xyz-component></fsj-xyz-component>;
```

And the equivalent server-side version:

```js
import { getXYZComponentTemplate } from "@fullstackjosh/web-components/XYZComponentTemplate";

const template = getXYZComponentTemplate();

// this is a html string with styles included which you can serve to the user
const html = template({
  ...props,
});
```
npm package: @fullstackjs/create-fullstackjs-app
Description: Simple cli tool for generating fullstack-js-online starter projects
Author: kati frantz
Latest version: 1.0.5

# create-fullstackjs-app :penguin:

> Simple cli tool for generating fullstack-js-online starter projects

## Usage

```bash
yarn global @fullstackjs/create-fullstackjs-app
# or
npm i -g @fullstackjs/create-fullstackjs-app
```

## Full Documentation

To get a full outline of what this package does, [visit the official release website](https://fullstackjs.online).

## License

MIT &copy; [Kati Frantz](github.com/bahdcoder)
npm package: @fullstackjs/mail
Description: Mail provider for elegantly sending emails in node js.
Author: virk
Latest version: 1.0.7

# Friendly Mail 📩

[![Build Status](https://travis-ci.org/fullstack-js-online/mail.svg?branch=master)](https://travis-ci.org/fullstack-js-online/mail)

Elegant mail sender for node js.
npm package: @fullstacksjs/toolbox
Description: a zero-dependency collection of missing JavaScript utilities
Author: ASafaeirad
Latest version: 4.22.0

<div align="center">

<br/>
<br/>

<img src="https://raw.githubusercontent.com/fullstacksjs/toolbox/main/assets/logo.svg" width="200" alt="@fullstacksjs/toolbox logo" />

<br/>
<br/>
<br/>

![download status][download-badge]
![version][version-badge]
![Code Coverage][coverage-badge]
![MIT License][license-badge]
![semantic-release][semantic-badge]


Welcome to Toolbox! A zero-dependency 📦 tree-shakable🌲 collection of missing JavaScript utilities.

</div>



## Table of Contents <!-- omit in toc -->

<!-- cspell:disable -->

- [Installation](#installation)
  - [NodeJS](#nodejs)
  - [Deno](#deno)
  - [Browser](#browser)
- [Contributing](#contributing)
  - [Prerequisite](#prerequisite)
  - [Pull Request](#pull-request)
- [Code of Conduct](#code-of-conduct)
- [Documentation](#documentation)

<!-- cspell:enable -->

## Installation

### NodeJS

```sh
$ npm install --save-dev @fullstacksjs/toolbox
```

### Deno

```typescript
import * as toolbox from 'https://raw.githubusercontent.com/fullstacksjs/toolbox/main/mod.ts'
```

### Browser

```html
<script src='https://www.unpkg.com/@fullstacksjs/toolbox/iife/index.js'></script>
<script>
  console.log(window.Toolbox)
</script>
```

## Contributing

Development of toolbox happens in GitHub, and we appreciate contributions.

### Prerequisite

- [bash][bash]
- Node.JS>=20

### Pull Request

The FullstacksJS team is monitoring for pull requests. We will go ahead and review your pull request as soon as possible.

Before submitting a pull request, please make sure the following is done:

- Fork the repository and create your feature branch from dev.
- Run `npm install` to have all dependencies.
- To start development run `npm run test:watch`.
- Write tests in `src/<scope>/<name>.spec.ts` and implementation in `src/<scope>/<name>.ts`.
- Add JSDoc for you function with signature and examples.
- Add the documentation using [doc template](./docs/DOC-TEMPLATE.mdx) page to the `docs/<scope>/<function>.mdx` and update `docs/<scope>/_meta.json` file.
- Ensure everything is ok `npm run verify`.

## Code of Conduct

[FullstacksJS Rules Page](https://fullstacksjs.com/en/rules)

## Documentation

Please check out the [documentation page](https://toolbox.fullstacksjs.com)

[download-badge]: https://img.shields.io/npm/dm/@fullstacksjs/toolbox?color=EF6969&label=DOWNLOADS&style=flat-square
[version-badge]: https://img.shields.io/npm/v/@fullstacksjs/toolbox?color=098FAA&label=VERSION&style=flat-square
[coverage-badge]: https://raw.githubusercontent.com/fullstacksjs/toolbox/assets/assets/coverage.svg
[license-badge]: https://img.shields.io/npm/l/@fullstacksjs/toolbox?color=EA5F12&label=LICENSE&style=flat-square
[semantic-badge]: https://img.shields.io/badge/semantic-release-e10079.svg?logo=semantic-release&color=7E98F7&label=SEMANTIC&style=flat-square (https://github.com/semantic-release/semantic-release)
[nodejs]: https://nodejs.org/en/
[bash]: https://www.gnu.org/software/bash/
npm package: @fullstacksjs/tsconfig
Description: FullstacksJS community base tsconfig
Author: fullstacksJS
Latest version: 2.0.0

<div align="center">

![logo][logo]

<br/>

![download status][download-badge]
![version][version-badge]
![MIT License][license-badge]

</div>

Shared [TypeScript config][tsconfig] for community projects.

## Installation

### npm :

```sh
$ npm install --save-dev @fullstacksjs/tsconfig typescript
```

## Usage

Add to your tsconfig.json:

* TS Library

```jsonc
{
  "extends": "@fullstacksjs/tsconfig/cjs"
}
```

* ESM

```jsonc
{
  "extends": "@fullstacksjs/tsconfig/esm"
}
```

* CJS

```jsonc
{
  "extends": "@fullstacksjs/tsconfig/cjs"
}
```


* React App:

```jsonc
{
  "extends": "@fullstacksjs/tsconfig/react"
}
```

* React Library:

```jsonc
{
  "extends": "@fullstacksjs/tsconfig/react-lib"
}
```

Feel free to use 💛

[logo]: https://raw.githubusercontent.com/fullstacksjs/tsconfig/master/assets/logo.svg
[download-badge]: https://img.shields.io/npm/dm/@fullstacksjs/tsconfig?color=6464E2&label=DOWNLOADS&style=flat-square
[version-badge]: https://img.shields.io/npm/v/@fullstacksjs/tsconfig?color=6464E2&label=VERSION&style=flat-square
[license-badge]: https://img.shields.io/npm/l/@fullstacksjs/tsconfig?color=6464E2&label=LICENSE&style=flat-square
[tsconfig]: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html