@ffsm/requester
v1.0.1
Published
A comprehensive utility library for request handling, timeouts, and various helper functions for Node.js and browser applications
Maintainers
Readme
@ffsm/requester
A comprehensive utility library for request handling, timeouts, and various helper functions for Node.js and browser applications.
Features
- 🚀 Cross-platform: Works in both Node.js and browser environments
- ⚡ Performance optimized: Uses
requestAnimationFramewhen 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
# npm
npm install @ffsm/requester
# yarn
yarn add @ffsm/requester
# pnpm
pnpm add @ffsm/requesterUsage
Basic Import
// 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.
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 delaydelay?: number- The delay in milliseconds (optional, defaults to 0)
Returns: RequestTimeout
ids: RequestTimeoutIds- Object containing timeout IDsids.r: number | null- The requestAnimationFrame ID (browser only)ids.s: Timeout | null- The setTimeout ID
cancel: () => void- Function to cancel the timeout
Example:
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:
// 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
requestAnimationFramesupport get performance benefits - Graceful fallback to
setTimeoutin older environments
Node.js Support
- Node.js 14+ (ES2020 support required)
- Uses
setTimeoutasrequestAnimationFrameis 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
# 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 cleanContributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Changelog
1.0.0
- Initial release
- Added
requestTimeoutfunction withrequestAnimationFrameoptimization - Full TypeScript support
- Dual package (CommonJS + ESM) support
- Cross-platform compatibility
Made with ❤️ by FFSM
