index.mjs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // ESM entry point for module-alias
  2. // Provides programmatic API with auto-registered hooks
  3. import { registerHooks } from 'node:module'
  4. import { addAlias as _addAlias, addAliases as _addAliases, addPath as _addPath, reset as _reset, resolveAlias } from './esm-loader.mjs'
  5. let hooksRegistered = false
  6. function ensureHooks() {
  7. if (hooksRegistered) return
  8. const [major, minor] = process.versions.node.split('.').map(Number)
  9. const hasRegisterHooks = major > 22 || (major === 22 && minor >= 15)
  10. if (!hasRegisterHooks) {
  11. console.warn('[module-alias] Programmatic ESM usage requires Node 22.15+. For older versions, use module-alias/register with _moduleAliases in package.json.')
  12. return
  13. }
  14. registerHooks({
  15. resolve(specifier, context, nextResolve) {
  16. const resolved = resolveAlias(specifier, context.parentURL)
  17. if (resolved) {
  18. return nextResolve(resolved, context)
  19. }
  20. return nextResolve(specifier, context)
  21. }
  22. })
  23. hooksRegistered = true
  24. }
  25. export function addAlias(alias, target) {
  26. ensureHooks()
  27. _addAlias(alias, target)
  28. }
  29. export function addAliases(aliases) {
  30. ensureHooks()
  31. _addAliases(aliases)
  32. }
  33. export function addPath(path) {
  34. ensureHooks()
  35. _addPath(path)
  36. }
  37. export function reset() {
  38. _reset()
  39. hooksRegistered = false
  40. }
  41. // Default export for compatibility with: import moduleAlias from 'module-alias'
  42. import { init } from './esm-loader.mjs'
  43. function moduleAlias(options) {
  44. ensureHooks()
  45. init(options)
  46. }
  47. moduleAlias.addAlias = addAlias
  48. moduleAlias.addAliases = addAliases
  49. moduleAlias.addPath = addPath
  50. moduleAlias.reset = reset
  51. export default moduleAlias