@ffsm/requester
Version:
A comprehensive utility library for request handling, timeouts, and various helper functions for Node.js and browser applications
178 lines (124 loc) âĸ 4.54 kB
Markdown
# @ffsm/requester
A comprehensive utility library for request handling, timeouts, and various helper functions for Node.js and browser applications.
[](https://badge.fury.io/js/%40ffsm%2Frequester)
[](https://opensource.org/licenses/MIT)
## Features
- đ **Cross-platform**: Works in both Node.js and browser environments
- ⥠**Performance optimized**: Uses `requestAnimationFrame` when available for better performance
- đĻ **Dual package support**: Provides both CommonJS and ES Module builds
- đ¯ **TypeScript support**: Full TypeScript definitions included
- đ§ **Modular imports**: Import only what you need
- đĒļ **Lightweight**: Minimal dependencies and small bundle size
## Installation
```bash
# npm
npm install @ffsm/requester
# yarn
yarn add @ffsm/requester
# pnpm
pnpm add @ffsm/requester
```
## Usage
### Basic Import
```typescript
// Import everything
import { requestTimeout } from '@ffsm/requester';
// Import specific modules
import { requestTimeout } from '@ffsm/requester/request-timeout';
// Import types
import type { RequestTimeout, RequestTimeoutCallback } from '@ffsm/requester';
```
### requestTimeout
A performance-optimized timeout function that uses `requestAnimationFrame` when available (in browsers) and falls back to `setTimeout` in Node.js environments.
```typescript
import { requestTimeout } from '@ffsm/requester';
// Basic usage with delay
const timeout = requestTimeout(() => {
console.log('Executed after 1 second');
}, 1000);
// Cancel the timeout
timeout.cancel();
// Immediate execution (next animation frame or immediate)
const immediate = requestTimeout(() => {
console.log('Executed immediately');
}, 0);
// Without delay parameter (defaults to 0)
const defaultTimeout = requestTimeout(() => {
console.log('Executed on next tick');
});
```
### API Reference
#### `requestTimeout(callback, delay?)`
**Parameters:**
- `callback: RequestTimeoutCallback` - The function to execute after the delay
- `delay?: number` - The delay in milliseconds (optional, defaults to 0)
**Returns:** `RequestTimeout`
- `ids: RequestTimeoutIds` - Object containing timeout IDs
- `ids.r: number | null` - The requestAnimationFrame ID (browser only)
- `ids.s: Timeout | null` - The setTimeout ID
- `cancel: () => void` - Function to cancel the timeout
**Example:**
```typescript
const timeout = requestTimeout(() => {
console.log('Hello World!');
}, 500);
// Access timeout IDs
console.log('RAF ID:', timeout.ids.r);
console.log('Timeout ID:', timeout.ids.s);
// Cancel if needed
if (someCondition) {
timeout.cancel();
}
```
## Module Exports
The library supports both default and named imports:
```typescript
// Named imports (recommended)
import { requestTimeout } from '@ffsm/requester';
// Specific module imports
import { requestTimeout } from '@ffsm/requester/request-timeout';
// Type-only imports
import type { RequestTimeout, Timeout } from '@ffsm/requester/types';
```
## Browser Support
- Modern browsers with ES2020 support
- Browsers with `requestAnimationFrame` support get performance benefits
- Graceful fallback to `setTimeout` in older environments
## Node.js Support
- Node.js 14+ (ES2020 support required)
- Uses `setTimeout` as `requestAnimationFrame` is not available
## Build Formats
The package provides multiple build formats:
- **CommonJS** (`.js`): For Node.js and older bundlers
- **ES Modules** (`.esm.js`): For modern bundlers and browsers
- **TypeScript Definitions** (`.d.ts`): For TypeScript support
## Development
```bash
# Install dependencies
yarn install
# Build for development (unminified)
yarn build:dev
# Build for production (minified)
yarn build:prod
# Watch mode
yarn watch
# Clean build directory
yarn clean
```
## Contributing
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Changelog
### 1.0.0
- Initial release
- Added `requestTimeout` function with `requestAnimationFrame` optimization
- Full TypeScript support
- Dual package (CommonJS + ESM) support
- Cross-platform compatibility
---
Made with â¤ī¸ by [FFSM](https://github.com/ffsmio)