{"id":15118,"library":"has-async-hooks","title":"Node.js async_hooks API Availability Check","description":"This package, `has-async-hooks`, provides a lightweight utility function to programmatically determine if the `async_hooks` API is available in the current Node.js runtime environment. Currently at version 1.0.0, it is a stable, single-purpose library. Its primary differentiator is its simplicity and explicit focus on feature detection for `async_hooks`, which became stable in Node.js 8.0.0. This utility is particularly useful for conditional code execution or polyfilling in environments where compatibility with various Node.js versions (especially older ones) is a concern. The library has a very stable release cadence, with its initial 1.0.0 release being its sole version to date, indicating its 'fire and forget' nature once the feature detection logic is established.","status":"maintenance","version":"1.0.0","language":"javascript","source_language":"en","source_url":"https://github.com/goto-bus-stop/has-async-hooks","tags":["javascript","async_hooks","check","detect","node"],"install":[{"cmd":"npm install has-async-hooks","lang":"bash","label":"npm"},{"cmd":"yarn add has-async-hooks","lang":"bash","label":"yarn"},{"cmd":"pnpm add has-async-hooks","lang":"bash","label":"pnpm"}],"dependencies":[],"imports":[{"note":"The package exports a default function. For ES Modules, use a default import.","wrong":"import { hasAsyncHooks } from 'has-async-hooks'","symbol":"hasAsyncHooks","correct":"import hasAsyncHooks from 'has-async-hooks'"},{"note":"This is the standard CommonJS import pattern. The module exports the function directly.","symbol":"hasAsyncHooks (CommonJS)","correct":"const hasAsyncHooks = require('has-async-hooks')"}],"quickstart":{"code":"const hasAsyncHooks = require('has-async-hooks');\n\nif (hasAsyncHooks()) {\n  console.log('async_hooks API is available in this Node.js version.');\n  // Example usage: You might conditionally load async_hooks dependent code\n  const async_hooks = require('async_hooks');\n  const asyncId = async_hooks.executionAsyncId();\n  console.log(`Current async ID: ${asyncId}`);\n} else {\n  console.log('async_hooks API is NOT available in this Node.js version.');\n  console.log('This typically means you are running an older Node.js version (pre-8.x).');\n}\n\n// To demonstrate: This script will output 'true' on Node.js >= 8, 'false' on older versions.\n// You can test by running with different Node.js versions.","lang":"javascript","description":"Demonstrates how to import and use the has-async-hooks function to check for async_hooks API availability, providing conditional logic for feature-dependent code."},"warnings":[{"fix":"Implement conditional loading or alternative logic based on the `hasAsyncHooks()` return value in your application code.","message":"This utility only detects the presence of the `async_hooks` API; it does not polyfill or provide an alternative implementation for environments where it's absent. Developers must implement their own fallback logic.","severity":"gotcha","affected_versions":"*"},{"fix":"Be aware of Node.js version compatibility; if your application requires `async_hooks`, ensure a minimum Node.js 8.x environment.","message":"If `hasAsyncHooks()` returns `false`, it indicates that the current Node.js runtime is likely older than version 8.0.0, as `async_hooks` became a stable API in Node.js 8.x. The module does not explicitly check the Node.js version, only the API availability.","severity":"gotcha","affected_versions":"*"}],"env_vars":null,"last_verified":"2026-04-21T00:00:00.000Z","next_check":"2026-07-20T00:00:00.000Z","problems":[{"fix":"Ensure you are importing the default function correctly: `const hasAsyncHooks = require('has-async-hooks')` for CommonJS or `import hasAsyncHooks from 'has-async-hooks'` for ES Modules.","cause":"Incorrect import syntax or attempting to access a named export that does not exist. The package exports a single default function.","error":"TypeError: hasAsyncHooks is not a function"},{"fix":"If your project is an ES Module (e.g., `\"type\": \"module\"` in package.json), use `import hasAsyncHooks from 'has-async-hooks'` instead of `require('has-async-hooks')`.","cause":"Attempting to use `require()` in an ES Module context without proper configuration for CommonJS interop.","error":"ERR_REQUIRE_ESM"}],"ecosystem":"npm"}