open-index/open-npm huggingface dataset:
npm package: @festicket/react-aria-tooltip
Description: ReactJS ARIA tooltip component
Author: Erik Goens
Latest version: 1.3.1

# react-aria-tooltip
Simple ReactJS component that adds the appropriate role, identification structure, and aria-hidden attribute for a tooltip.

## Installation
`npm install react-aria-tooltip`


## Usage
```js
import ReactARIAToolTip from 'react-aria-tooltip'

return (
    <ReactARIAToolTip message="Your custom message">
        <SomeTagOrComponent>Some content</SomeTagOrComponent>
    </ReactARIAToolTip>
)
```

## Options
1. `message` string that will display in the tooltip (required)
1. `eventType` this can either be 'click' or 'hover' (default 'click')
1. `direction` the placement of the tooltip. Can be one of four options 'top', 'bottom', 'right', 'left'  (default 'top')
1. `duration` this is only applicable to the click `eventType`. This value defines the amount of time the tooltip is present after the user clicks the target element  (default 2000)
1. `bgcolor` controls the background color of the tooltip.  (default '#000')

**Note:** Please use a color contrast checker such as http://webaim.org/resources/contrastchecker/ to make sure the font color, defaulted to white/#fff, works with your bgcolor value)

## Examples
```html
<ReactARIAToolTip message="Tooltip text" eventType="hover" direction="bottom" bgcolor="#333">
    <span>Some text</span>
</ReactARIAToolTip>
```

```html
<ReactARIAToolTip message="Something fancy" eventType="click" duration="500" bgcolor="red">
    <img src="../path/to/some/image" alt="" title="" />
</ReactARIAToolTip>
```

## Styling
All styles are handled inline but each element contains a CSS class so you can override what's necessary to override locally. Below is the basic structure for reference:

```html
<div class="ra-tooltip-wrapper">
    <div class="ra-tooltip">
        <div class="ra-tooltip-message">
            <p>Tooltip text</p>
        </div>
    </div>
</div>
```

## MIT Licensed
npm package: @festivo-io/festivo-sdk
Description: Official JavaScript/TypeScript SDK for Festivo Public Holidays API - Access 250+ countries' holiday data with UTC dates
Author: Festivo
Latest version: 0.2.1

# Festivo JavaScript/TypeScript SDK

[![npm version](https://img.shields.io/npm/v/@festivo-io/festivo-sdk.svg)](https://www.npmjs.com/package/@festivo-io/festivo-sdk)
[![License](https://img.shields.io/npm/l/@festivo-io/festivo-sdk.svg)](https://www.npmjs.com/package/@festivo-io/festivo-sdk)
[![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](https://www.typescriptlang.org/)

Official JavaScript/TypeScript SDK for the [Festivo Public Holidays API](https://getfestivo.com). Access holiday data for 250+ countries with accurate UTC dates, regional variations, and city-level holidays.

## Features

- 🌍 **250+ Countries** - Comprehensive holiday coverage worldwide
- 📅 **UTC Dates** - Accurate timezone handling for global holidays
- 🏙️ **City & Regional** - Support for local holidays (Pro/Builder plans)
- 💪 **TypeScript Native** - Full type definitions included
- ⚡ **Modern ESM** - ES Modules with tree-shaking support
- 🧪 **Well Tested** - Comprehensive test suite with Vitest

## Installation

```bash
npm install @festivo-io/festivo-sdk
```

## Usage

```typescript
import { FestivoClient } from '@festivo-io/festivo-sdk';

// Initialize client
const client = new FestivoClient({ apiKey: process.env.FESTIVO_API_KEY });

// Get all holidays for a country
const { holidays } = await client.getHolidays('US', 2026);
console.log(`Found ${holidays.length} holidays`);

// Get city-level holidays (Pro plan)
const milan = await client.getCityHolidays('IT', 'IT-MILAN', 2026);
console.log(milan.holidays);

// Get regional holidays (Builder plan)
const scotland = await client.getRegionalHolidays('GB', 'GB-SCT', 2026);

// Check if a specific date is a holiday
const check = await client.checkHoliday('US', '2026-12-25');
if (check.is_holiday) {
  console.log(`${check.holiday.name} on ${check.holiday.observed}`);
}
```

## API Methods

- `getHolidays(country, year, options?)` - Get all holidays
- `getCityHolidays(country, cityCode, year, options?)` - Get city-level holidays
- `getRegionalHolidays(country, regionCode, year, options?)` - Get regional holidays
- `checkHoliday(country, date, options?)` - Check if date is a holiday

## Development

```bash
cd festivo-sdk/js
npm install
npm run build
npm test
```

## Links

- [Official Website](https://getfestivo.com)
- [API Documentation](https://docs.getfestivo.com)
- [GitHub Repository](https://github.com/festivo-io/festivo-sdk)
- [npm Package](https://www.npmjs.com/package/@festivo-io/festivo-sdk)

## Support

- Email: support@getfestivo.com
- [Report Issues](https://github.com/festivo-io/festivo-sdk/issues)

## License

MIT License - see [LICENSE](../LICENSE) for details.
npm package: @festo-ax/node-red-contrib-festo-smartenance
Description: Access the Festo Smartenance API
Author: Severin Friede
Latest version: 0.4.0

# Festo AX - Smartenance Node RED flows

This [Node-RED](https://nodered.org/) node allows easy access to the [Festo Smartenance API](https://developers.festo.com/docs/digismartenance-premiumpublicprod/1/overview).
Currently we support triggering of maintenance tasks and reporting incidents.

# Getting Started

Install the node to your [Node-RED](https://nodered.org/) instance and a `Festo Smartenance` group will
appear in the editor that inclues all availabe nodes.

```
  npm install @festo-ax/node-red-contrib-festo-smartenance
```

# Contact

This package was developed and distributed by the [Festo Smartenance](http://smartenance.festo.com/) team.
npm package: @festudio/serial-pin-generator
Description: This library helps you generate unique pairs of serial and pin numbers everytime
Author: Danquah Bernard White
Latest version: 1.0.14

# Serial-PIN-Generator 🔐🔓#️⃣#️⃣#️⃣#️⃣🔑🔒
This library helps you generate unique pairs of serial and pin numbers everytime.


# Installation
```
npm install @festudio/serial-pin-generator
```


# Usage

Import the library

```
import { createCardPins } from "@festudio/serial-pin-generator";
```

## How to use it

```
const pins =  await createCardPins()

//Or

createCardPins()
  .then(results => console.log(results))
  .catch(err => console.error(err))

// Results

pins [
      { pin: 434369572612, serial_num: '759617762160000' },
      { pin: 310161338250, serial_num: '759617762160001' },
      { pin: 497100874356, serial_num: '759617762160002' },
      { pin: 753413670221, serial_num: '759617762160003' },
      { pin: 291810149868, serial_num: '759617762160004' },
      { pin: 449974533800, serial_num: '759617762160005' },
      { pin: 197713261049, serial_num: '759617762160006' },
      { pin: 453078054968, serial_num: '759617762160007' },
      { pin: 972933855118, serial_num: '759617762160008' },
      { pin: 378448476111, serial_num: '759617762160009' },
      { pin: 959478428739, serial_num: '759617762160010' },
      { pin: 989596892191, serial_num: '759617762160011' },
      { pin: 826691133589, serial_num: '759617762160012' },
      { pin: 761082459062, serial_num: '759617762160013' },
      { pin: 221816791487, serial_num: '759617762160014' },
      { pin: 526395861604, serial_num: '759617762160015' },
      { pin: 239003957784, serial_num: '759617762160016' },
      { pin: 899049343577, serial_num: '759617762160017' },
      { pin: 150185652819, serial_num: '759617762160018' },
      { pin: 994340709105, serial_num: '759617762160019' }
    ]
```


## Customize generation
```createCardPins()``` method takes an optional ```options``` argument

This is the default options interface
```
const defaultOptions = {
  pinLength: 12, 
  serialNumLength: 15,
  prefixCharacters: '',
  numberRequired: 20
}

```

So you can do something like this

```
const serialPinPairs = await createCardPins({
  pinLength: 10,
  serialNumLength: 16
  prefixCharacters: 'GH',
  numberRequired: 1
})

console.log(serialPinPairs)

[
   { pin: 1501856528, serial_num: 'GH7596177621600189' },
]
```

<b> Note that the ```createCardPins()``` method is always returns an ```array``` of ```SerialPinPair``` interface</b>
npm package: @feswap/sdk
Description: 🌈 An SDK for building applications on top of feswap.
Latest version: 1.7.3

# Feswap SDK

In-depth documentation on this SDK is available at [uniswap.org](https://uniswap.org/docs/v2/SDK/getting-started/).

This modifies uniswap-sdk's UniswapV2Factory address. The new address for feswap is  `0xFE7a9e76864704A09584E235C3968Ba3D1C6743b`.

## Running tests

To run the tests, follow these steps. You must have at least node v10 and [yarn](https://yarnpkg.com/) installed.

First clone the repository:

```sh
git clone https://github.com/feswap/feswap-sdk.git
```

Move into the feswap-sdk working directory

```sh
cd feswap-sdk/
```

Install dependencies

```sh
yarn install
```

Build project

```sh
yarn build
```
Publish project

```sh
yarn publish --access public
```

Run tests

```sh
yarn test
```

You should see output like the following:

```sh
yarn run v1.22.11
$ tsdx test
 PASS  test/constants.test.ts (48.379s)
 PASS  test/token.test.ts (63.259s)
 PASS  test/route.test.ts (63.343s)
 PASS  test/fraction.test.ts (63.697s)
 PASS  test/pair.test.ts (63.848s)
 PASS  test/miscellaneous.test.ts (63.844s)
 PASS  test/router.test.ts (63.956s)
 PASS  test/entities.test.ts (64.298s)
 PASS  test/trade.test.ts (64.406s)

Test Suites: 1 skipped, 9 passed, 9 of 10 total
Tests:       3 skipped, 126 passed, 129 total
Snapshots:   0 total
Time:        80.668s
Ran all test suites.
Done in 92.46s.
```
npm package: @fet.web/parcel-namer-simple-structure
Description: Plugin tries to retain the existing folder structure of your source files.
Author: fet.web
Latest version: 1.0.1


PLugin tries to retain the existing folder structure of your source files.

## Usage:

Add a `.parcelrc` into your root directory (next to `package.json`):

```json
{
	"extends": "@parcel/config-default",
	"namers": ["@fet.web/parcel-namer-simple-structure", "..."]
}
```
npm package: @fetaoily/xfyun-iat-rtasr-sdk
Description: ## 前置步骤
Latest version: 1.0.3

# 文档

## 前置步骤

1. 将dist目录下`processor.worker.js`、`processor.worklet.js`复制到项目目录中，使其可以通过浏览器地址栏访问，
2. 浏览器录音权限需要在localhost、127.0.0.1或https下

## RecorderManager

浏览器录音管理器

## 方法

### RecorderManager.constructor(processorPath)

构造函数

> `processorPath`是 `processor.worker.js`、`processor.worklet.js`的路径地址，如果访问地址`/a/b/c/processor.worker.js`，则processorPath为`/a/b/c`

### RecorderManager.start(Object object)

开始录音

Object object

| 属性 | 类型 | 默认值 | 必填 | 取值范围 | 说明 |
| ------ | ------ | ------ | ------ | ------ | ------ |
| sampleRate | number | 浏览器默认采样率 | 否 | 8000 ~ 96000 | 采样率 |
| frameSize | number |  -  | 否 | >0 | 指定帧大小，传入 frameSize 后，每录制指定帧大小的内容后，会回调录制的文件内容，不指定则不会回调。ps:在不支持设置采样率的浏览器下，录音分片数据会比此处设置的值大 |
| arrayBufferType | string | - | 否 | "short16" "float32" | 音频数据ArrayBuffer类型 |

### RecorderManager.stop()

停止录音

> 调用stop后，还需要等待浏览器处理完已经录制的音频后才会真正结束，需要在停止录音成功后做的处理请在`.onStop`回调中处理

### RecorderManager.onStart = function listener

监听录音开始事件

### RecorderManager.onStop = function listener

监听录音结束事件

```js
const listener = (audioBuffers: ArrayBuffer[]) => {}
```

| 属性 | 类型 | 说明 |
| ------ | ------ | ------ |
| audioBuffers | ArrayBuffer[] | 录音分片数据数组 |

### RecorderManager.onFrameRecorded = function listener

监听已录制完指定帧大小的文件事件。如果设置了 frameSize，则会回调此事件。

```js
const listener = ({isLastFrame, frameBuffer} : {
  isLastFrame: boolean;
  frameBuffer: ArrayBuffer;
}) => {}
```

| 属性 | 类型 | 说明 |
| ------ | ------ | ------ |
| isLastFrame | boolean | 当前帧是否正常录音结束前的最后一帧 |
| frameSize | ArrayBuffer | 录音分片数据  |

## 示例代码

```js
const recorder = new RecorderManager ("../../dist");

recorder.onFrameRecorded = ({ isLastFrame, frameBuffer }) => {
  console.log(isLastFrame, frameBuffer)
};
recorder.onStop = (audioBuffers) => {
  console.log(audioBuffers)
}


recorder.start({
  sampleRate: 16000,
  frameSize: 1280,
});

setTimeout(() => {
  recorder.stop()
}, 60000)

```

## 听写示例

查看example/iat
将example/iat/index.html下面的值替换成真实的值

```js
  var APPID = "xxx";
  var API_SECRET = "xxx";
  var API_KEY = "xxx";
```

## 实时语音转写

查看example/rtasr
将example/rtasr/index.html下面的值替换成真实的值

```js
  var APPID = "xxx";
  var API_KEY = "xxx";

```

### 运行

1. 安装 `npm install -g http-server`
2. 运行 `http-server .`
3. 浏览器打开听写示例：http://127.0.0.1:xxx/example/iat/index.html
4. 浏览器打开实时语音转写示例：http://127.0.0.1:xxx/example/rtasr/index.html
npm package: @fetcch/id
Description: Wallet ID Protocol will directly be integrated into various wallets and they can start issuing IDs to their users
Author: Satyam Kulkarni
Latest version: 0.1.1

### FetcchX ID Protocol

Wallet ID Protocol will directly be integrated into various wallets and they can start issuing IDs to their users

So, if Steak Wallet integrates WagPay ID Protocol, they can then issue ids like `name@steak` or `name.steak`, and then this ID can transact with other IDs irrespective of wallet or chain.

This will not just solve P2P payments but Choice Fatigue in connecting wallets also.

So right now, there are 100s of options to choose from whenever we are connecting to dApp, but if the dApp has integrated WagPay ID SDK, then it will just have a single button called `Connect Wallet`, where the user will enter their ID and a connection request will be sent to their wallet.

dApps can also request a single time transaction using above mechanism, so dApps would not have connect to wallets but they can just send a **Payment Request** to a respective ID

`- Still user needs to manually swap and execute the call`

This is solved by ID Protocol, where dApp would connect to an ID, send a transaction to wallet, wallet can give user the option to choose with which chains and tokens they want to pay, ID Protocol will take those tokens, swap them and execute transaction (enabled because of our **Fetcch Bridge Design**)
npm package: @fetcch/loyalty
Description: All-in-one loyalty and rewards solution for your application
Author: Fetcch Team
Latest version: 0.0.10

<h1 align="center">Welcome to Plex Loyalty 👋</h1>
<p>
  <img alt="Version" src="https://img.shields.io/badge/version-0.0.1-blue.svg?cacheSeconds=2592000" />
  <a href="https://docs.plex.cash" target="_blank">
    <img alt="Documentation" src="https://img.shields.io/badge/documentation-yes-brightgreen.svg" />
  </a>
  <a href="https://github.com/fetcchx/loyalty-sdk/graphs/commit-activity" target="_blank">
    <img alt="Maintenance" src="https://img.shields.io/badge/Maintained%3F-yes-green.svg" />
  </a>
  <a href="https://github.com/fetcchx/loyalty-sdk/blob/master/LICENSE" target="_blank">
    <img alt="License: MIT" src="https://img.shields.io/github/license/fetcchx/Plex Loyalty" />
  </a>
  <a href="https://twitter.com/fetcchx" target="_blank">
    <img alt="Twitter: fetcchx" src="https://img.shields.io/twitter/follow/fetcchx.svg?style=social" />
  </a>
</p>

> All-in-one loyalty and rewards solution for your application

### 🏠 [Homepage](https://plex.cash)

### ✨ [Demo](https://demo.plex.cash)

## Install

```sh
npm install @fetcch/loyalty

OR

pnpm install @fetcch/loyalty

OR

yarn add @fetcch/loyalty
```

## Author

👤 **Fetcch Team <tech@fetcch.xyz>**

* Website: https://plex.cash
* Twitter: [@fetcchx](https://twitter.com/fetcchx)
* Github: [@fetcchx](https://github.com/fetcchx)

## 🤝 Contributing

Contributions, issues and feature requests are welcome!<br />Feel free to check [issues page](https://github.com/fetcchx/loyalty-sdk/issues). You can also take a look at the [contributing guide](https://github.com/fetcchx/loyalty-sdk/blob/master/CONTRIBUTING.md).

## Show your support

Give a ⭐️ if this project helped you!

## 📝 License

Copyright © 2024 [Fetcch Team <tech@fetcch.xyz>](https://github.com/fetcchx).<br />
This project is [MIT](https://github.com/fetcchx/loyalty-sdk/blob/master/LICENSE) licensed.

***
_This README was generated with ❤️ by [readme-md-generator](https://github.com/kefranabg/readme-md-generator)_
npm package: @fetcch/resolve-names
Description: Resolve various DIDs like `.eth`, `.sol`, `.arb`, `.bnb`, `.apt`, `@kana` and many more using a single SDK
Latest version: 1.0.1


# Fetcch Resolve Names

Resolve various DIDs like `.eth`, `.sol`, `.arb`, `.bnb`, `.apt`, `@kana` and many more using a single SDK



## Installation

Install `@fetcch/resolve-names` with package manager

```bash
  NPM
  npm install @fetcch/resolve-names
  
  YARN
  yarn add @fetcch/resolve-names

  PNPM
  pnpm i @fetcch/resolve-names
```
## Usage

### Resolve Name

```typescript
import { Resolve } from "@fetcch/resolve-names"

const resolver = new Resolve({
  eth: "ETHEREUM_RPC_URL",
  pol: "POLYGON_RPC_URL",
  ...
  sol: "SOLANA_RPC_URL"
})

const id = await resolver.resolve("satyam@kana")

// OR

const id = await resolver.resolve("satyam.eth")
```
## License

[MIT](https://choosealicense.com/licenses/mit/)

## Links

- [Fetcch](https://fetcch.xyz)
- [Docs](https://docs.fetcch.xyz)
npm package: @fetch-frog/nuxt
Description: Nuxt specific implementation of fetch-frog
Latest version: 0.0.2

# Fetch Frog Nuxt

Nuxt specific implementation of [fetch-frog](https://github.com/bendingthemrules/fetch-frog).

### Reactive fetching with SSR sync (Nuxt useFetch)

```ts
// src/composables/apiClients.ts
import { createUseFetchClient } from '@fetch-frog/nuxt';
import type { paths } from '~/types/api/v1'; // generated api types

export const reactiveApiClient = createUseFetchClient<paths>(
	'https://petstore3.swagger.io/api/v3',
	{}
);
```

```ts
// src/pages/index.vue
import { reactiveApiClient } from '~/composables/apiClient';

const { data } = await reactiveApiClient('/pet/{petId}', {
	path: {
		petId: 'frog'
	}
});

console.log(data.value);
```

<!-- TODO: recommend to use the basic client if you only need the data once, for example when posting a form -->

## Composable wrapper

Because of how Nuxt/Vue work, if you want to pass default values from a store or plugin for example, you will need to wrap the create function in a function that returns the create function. You wouldn't have access to other composables / stores such as `useRuntimeConfig` otherwise.

```ts
// src/composables/apiClients.ts

import { createUseFetchClient } from 'fetch-frog';
import type { paths } from '~/types/api/v1';

export function createApiClient() {
	const { user } = useNuxtApp().$auth;
	const baseUrl = `${useRuntimeConfig().public.apiUrl}/api/v1`;

	return createUseFetchClient<paths>(baseUrl, {
		onRequest: async ({ options }) => {
			options.headers = {
				...options.headers,
				Authorization: `Bearer ${user.value?.accessToken}`
			};
		}
	});
}
```

```ts
// src/pages/index.vue

const apiClient = createApiClient();
const { data } = await apiClient('/pet/{petId}', {
	path: {
		petId: 'frog'
	}
});
```
npm package: @fetch-frog/svelte
Description: Svelte specific implementation of fetch-frog.
Latest version: 0.0.2-beta.0

# Fetch Frog Svelte

Svelte specific implementation of fetch-frog.

```ts
import { createFetchClient } from 'fetch-frog';
import type { paths } from '$lib/generated/schema';
import { env } from '$env/dynamic/public';
import { auth } from './auth.svelte';

export function createApiClient() {
	return createFetchClient<paths>(env.PUBLIC_API_URL, {
		onRequest: ({ options }) => {
			const headers = new Headers(options.headers);

			if (auth.accessToken) {
				headers.set('Authorization', `Bearer ${auth.accessToken}`);
			}

			options.headers = headers;
		}
	});
}

export const apiClient = createApiClient();
```

```svelte
<script lang="ts">
	import { onMount } from 'svelte';
	import { apiClient } from '$lib/apiClient';

	let page = $state(1);

	const reactiveApi = createReactiveApi(
		async () =>
			await apiClient('/pet/{petId}', {
				path: {
					petId: 'frog'
				},
				query: {
					page
				}
			})
	);

	onMount(async () => {
		const { data } = await apiClient('/pet/{petId}', {
			path: {
				petId: 1
			}
		});
	});
</script>

<button onclick={() => page++}>Next</button>
```
npm package: @fetch-impl/cross-fetch
Description: User Configurable Fetch Implementation. cross-fetch adapter.
Author: JacobLinCool
Latest version: 1.0.0

# @fetch-impl/cross-fetch

User Configurable Fetch Implementation. cross-fetch adapter.

## Usage

```ts
import { useCrossFetch } from "@fetch-impl/cross-fetch";
import fetch from "@fetch-impl/fetcher";

// configure fetch to use cross-fetch
useCrossFetch();

// use fetch as usual
fetch("https://example.com").then(async (res) => {
    console.log(res.status, await res.text());
});
```
npm package: @fetch-impl/fetcher
Description: User Configurable Fetch Implementation.
Author: JacobLinCool
Latest version: 1.0.0

# User Configurable Fetch Implementation

Can be used as a global fetch implementation or as a local fetch implementation specific to a package.

## Adapters

-   [@fetch-impl/cross-fetch](https://www.npmjs.com/package/@fetch-impl/cross-fetch) - Use [cross-fetch](https://www.npmjs.com/package/cross-fetch) as the fetch implementation.
-   [@fetch-impl/playwright](https://www.npmjs.com/package/@fetch-impl/playwright) - Use [playwright](https://www.npmjs.com/package/playwright) browser as the fetch implementation.

## Usage

The default fetch implementation is `globalThis.fetch`. Which works in almost all modern environments (browsers, Node.js, Deno, Cloudflare Workers, etc).

```ts
import fetch from "@fetch-impl/fetcher";

// use fetch as usual
fetch("https://example.com").then(async (res) => {
    console.log(res.status, await res.text());
});
```

You can replace the default fetch implementation with a custom one using `fetcher.set`:

```ts
import fetch, { fetcher } from "@fetch-impl/fetcher";

// configure fetch to use a custom fetch implementation
fetcher.set(async (...args) => {
    return new Response("Hello, World!", { status: 200 });
});

// use fetch as usual, but it will use the custom fetch implementation and always return "Hello, World!"
fetch("https://example.com").then(async (res) => {
    console.log(res.status, await res.text());
});
```

If you are a package author and want to let your users configure the fetch implementation, you can use `Fetcher` to create a configurable local fetch implementation:

```ts
// add a fetch.ts file like this to your package
import { Fetcher } from "@fetch-impl/fetcher";

export const fetcher = new Fetcher();
export const fetch = (...args) => fetcher.fetch(...args);
export default fetch;
```

```ts
// and use your own fetch implementation like this
import fetch from "./fetch";

// use fetch as usual
export async function makeRequest(url: string): Promise<string> {
    const res = await fetch(url);
    return res.text();
}

// don't forget to re-export the fetcher instance so that your users can configure the fetch implementation
export * from "./fetch";
```

Your users can then configure the fetch implementation like this:

```ts
import { makeRequest, fetcher } from "your-package";
import { useCrossFetch } from "@fetch-impl/cross-fetch";

// user configure fetch to use a custom fetch implementation
useCrossFetch(fetcher);

// user use makeRequest as usual, but it will use the custom fetch implementation
makeRequest("https://example.com").then((text) => {
    console.log(text);
});
```
npm package: @fetch-impl/playwright
Description: User Configurable Fetch Implementation. Playwright adapter, supports fetch in real browser (chromium, firefox, webkit).
Author: JacobLinCool
Latest version: 1.0.0

# @fetch-impl/playwright

User Configurable Fetch Implementation. Playwright adapter, supports fetch in real browser (chromium, firefox, webkit).

## Usage

```ts
import { chromium } from "playwright";
import { usePlaywright } from "@fetch-impl/playwright";
import fetch from "@fetch-impl/fetcher";

// configure fetch to use playwright
usePlaywright(chromium.launch());

// use fetch as usual
fetch("https://example.com").then(async (res) => {
    console.log(res.status, await res.text());
});
```

Note: A new context is automatically created and reused for all fetch requests. The browser will not be closed automatically. You should close it manually when you are done with it.
npm package: @fetch-impl/puppeteer
Description: User Configurable Fetch Implementation. Puppeteer adapter, supports fetch in real browser.
Author: JacobLinCool
Latest version: 1.0.0

# @fetch-impl/puppeteer

User Configurable Fetch Implementation. Puppeteer adapter, supports fetch in real browser.

## Usage

```ts
import puppeteer from "puppeteer";
import { usePuppeteer } from "@fetch-impl/puppeteer";
import fetch from "@fetch-impl/fetcher";

// configure fetch to use puppeteer
usePuppeteer(puppeteer.launch());

// use fetch as usual
fetch("https://example.com").then(async (res) => {
    console.log(res.status, await res.text());
});
```

Note: The browser will not be closed automatically. You should close it manually when you are done with it.
npm package: @fetch-mock/jest
Description: jest wrapper for fetch-mock
Author: Rhys Evans
Latest version: 0.2.20

# @fetch-mock/jest

A wrapper for fetch-mock that improves the developer experience when working with jest. It provides the following:

- Adds methods to fetchMock which wrap its default methods, but align more closely with jest's naming conventions.
- Extends `expect` with convenience methods allowing for expressive tests such as `expect(fetchMock).toHavePosted('http://example.com', {id: 'test-id'})`.
- Can optionally be hooked in to jest's global mock management methods such as `clearAllMocks()`.

## Requirements

@fetch-mock/jest requires either of the following to run:

- [jest](https://jest.dev/guide/)
- The `fetch` API, via one of the following:
  - [Node.js](https://nodejs.org/) 18+ for full feature operation
  - Any modern browser that supports the `fetch` API
  - [node-fetch](https://www.npmjs.com/package/node-fetch) when testing in earlier versions of Node.js (this is untested, but should mostly work)

## Documentation and Usage

See the [project website](https://www.wheresrhys.co.uk/fetch-mock/docs/wrappers/jest/)

## License

@fetch-mock/vitest is licensed under the [MIT](https://github.com/wheresrhys/fetch-mock/blob/master/LICENSE) license.
Copyright © 2024, Rhys Evans