{"version":3,"sources":["../src/index.ts"],"names":["path","fs","importingModuleType","virtualId","crypto","isFileURLToPathPattern","resolveDirectoryFromCall","resolveDirArgument","processNodeFile"],"mappings":"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","file":"index.cjs","sourcesContent":["import crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { Plugin } from \"vite\";\n\ninterface NativeFileInfo {\n  /** File content for emission */\n  content: Buffer;\n  /** Hashed filename for output (e.g., addon-a1b2c3d4.node) */\n  hashedFilename: string;\n  /** Absolute path to the original .node file */\n  originalPath: string;\n}\n\ninterface PackageConfig {\n  /** Package name to target (e.g., 'native-package-123') */\n  package: string;\n  /** Additional file names to copy (e.g., ['native-file.node-macos', 'addon.node-linux']) */\n  fileNames: string[];\n}\n\nexport interface NativeFilePluginOptions {\n  /** Enable the plugin. Defaults to true in build mode, false in dev mode */\n  forced?: boolean;\n  /** Additional native file configurations for packages with non-standard file extensions */\n  additionalNativeFiles?: PackageConfig[];\n  /** Format for generated native file names. 'preserve' keeps original name with hash suffix, 'hash-only' uses only the hash. Defaults to 'preserve' */\n  filenameFormat?: \"preserve\" | \"hash-only\";\n}\n\n// ESTree AST Node types\ninterface BaseASTNode {\n  type: string;\n  start?: number;\n  end?: number;\n}\n\ninterface IdentifierNode extends BaseASTNode {\n  type: \"Identifier\";\n  name: string;\n}\n\ninterface LiteralNode extends BaseASTNode {\n  type: \"Literal\";\n  value: string | number | boolean | null;\n  start: number;\n  end: number;\n}\n\ninterface CallExpressionNode extends BaseASTNode {\n  type: \"CallExpression\";\n  callee: BaseASTNode;\n  arguments: BaseASTNode[];\n  start: number;\n  end: number;\n}\n\ninterface MemberExpressionNode extends BaseASTNode {\n  type: \"MemberExpression\";\n  object: BaseASTNode;\n  property: BaseASTNode;\n}\n\ninterface VariableDeclaratorNode extends BaseASTNode {\n  type: \"VariableDeclarator\";\n  id: BaseASTNode;\n  init?: BaseASTNode;\n}\n\ninterface ImportDeclarationNode extends BaseASTNode {\n  type: \"ImportDeclaration\";\n  specifiers: BaseASTNode[];\n  source: LiteralNode;\n}\n\ninterface ImportDefaultSpecifierNode extends BaseASTNode {\n  type: \"ImportDefaultSpecifier\";\n  local: IdentifierNode;\n}\n\ninterface ImportSpecifierNode extends BaseASTNode {\n  type: \"ImportSpecifier\";\n  imported: IdentifierNode;\n  local: IdentifierNode;\n}\n\ninterface MetaPropertyNode extends BaseASTNode {\n  type: \"MetaProperty\";\n  meta: IdentifierNode;\n  property: IdentifierNode;\n}\n\n// Type guard functions\nfunction isCallExpression(node: BaseASTNode): node is CallExpressionNode {\n  return node.type === \"CallExpression\";\n}\n\nfunction isLiteral(node: BaseASTNode): node is LiteralNode {\n  return node.type === \"Literal\";\n}\n\nfunction isIdentifier(node: BaseASTNode): node is IdentifierNode {\n  return node.type === \"Identifier\";\n}\n\nfunction isMemberExpression(node: BaseASTNode): node is MemberExpressionNode {\n  return node.type === \"MemberExpression\";\n}\n\nfunction isVariableDeclarator(\n  node: BaseASTNode\n): node is VariableDeclaratorNode {\n  return node.type === \"VariableDeclarator\";\n}\n\nfunction isImportDeclaration(node: BaseASTNode): node is ImportDeclarationNode {\n  return node.type === \"ImportDeclaration\";\n}\n\nfunction isImportDefaultSpecifier(\n  node: BaseASTNode\n): node is ImportDefaultSpecifierNode {\n  return node.type === \"ImportDefaultSpecifier\";\n}\n\nfunction isImportSpecifier(node: BaseASTNode): node is ImportSpecifierNode {\n  return node.type === \"ImportSpecifier\";\n}\n\nexport default function nativeFilePlugin(\n  options: NativeFilePluginOptions = {}\n): Plugin {\n  const name = \"plugin-native-modules\";\n  const nativeFiles = new Map<string, NativeFileInfo>();\n  // Reverse mapping from hashed filename to original file path\n  // Used to resolve transformed bindings/node-gyp-build calls\n  const hashedFilenameToPath = new Map<string, string>();\n  // Track module type (ES module vs CommonJS) for virtual modules\n  // Maps virtual module ID to whether it's an ES module\n  const virtualModuleTypes = new Map<string, boolean>();\n  let command: \"build\" | \"serve\" = \"build\";\n\n  // Helper function to detect if a file is an ES module based on extension and content\n  function detectModuleType(fileId: string, code?: string): boolean {\n    // Check file extension - .mjs is always ES module, .cjs is always CommonJS\n    if (fileId.endsWith(\".mjs\") || fileId.endsWith(\".mts\")) {\n      return true;\n    }\n    if (fileId.endsWith(\".cjs\") || fileId.endsWith(\".cts\")) {\n      return false;\n    }\n\n    // If we have code, check for import/export statements\n    if (code) {\n      // Quick check for ES module indicators\n      if (\n        code.includes(\"import \") ||\n        code.includes(\"export \") ||\n        code.includes(\"import.meta\")\n      ) {\n        return true;\n      }\n      // CommonJS indicators\n      if (\n        code.includes(\"require(\") ||\n        code.includes(\"module.exports\") ||\n        code.includes(\"exports.\")\n      ) {\n        return false;\n      }\n    }\n\n    // Check for package.json with \"type\": \"module\" in the directory hierarchy\n    try {\n      let dir = path.dirname(fileId);\n      const root = path.parse(fileId).root;\n\n      // Walk up the directory tree looking for package.json\n      while (dir !== root && dir !== path.dirname(dir)) {\n        const packageJsonPath = path.join(dir, \"package.json\");\n        if (fs.existsSync(packageJsonPath)) {\n          try {\n            const packageJson = JSON.parse(\n              fs.readFileSync(packageJsonPath, \"utf-8\")\n            );\n            if (packageJson.type === \"module\") {\n              return true;\n            }\n            if (packageJson.type === \"commonjs\") {\n              return false;\n            }\n          } catch {\n            // Ignore JSON parse errors\n          }\n        }\n        dir = path.dirname(dir);\n      }\n    } catch {\n      // Ignore errors when checking package.json\n    }\n\n    // Default: assume CommonJS for .js files (Node.js default)\n    return false;\n  }\n\n  // Helper function to check if a file path should be processed based on package configs\n  function shouldProcessFile(filePath: string, currentFileId: string): boolean {\n    // Always process .node files\n    if (filePath.endsWith(\".node\")) return true;\n\n    // Check additional native file configurations\n    if (options.additionalNativeFiles) {\n      for (const pkgConfig of options.additionalNativeFiles) {\n        // Check if current file is within this package's node_modules\n        const pkgPath = `node_modules/${pkgConfig.package}`;\n        if (currentFileId.includes(pkgPath)) {\n          // Check if this file matches any of the configured file names\n          for (const fileName of pkgConfig.fileNames) {\n            if (\n              filePath.endsWith(fileName) ||\n              filePath.includes(`/${fileName}`)\n            ) {\n              return true;\n            }\n          }\n        }\n      }\n    }\n\n    return false;\n  }\n\n  // Helper function to resolve node-gyp-build style native module loading\n  // Mimics node-gyp-build's behavior: check prebuilds/ first, then build/Release/\n  function resolveNodeGypBuild(directory: string): string | null {\n    const platform = process.platform;\n    const arch = process.arch;\n\n    // Try prebuilds directory first\n    const prebuildsDir = path.join(\n      directory,\n      \"prebuilds\",\n      `${platform}-${arch}`\n    );\n\n    if (fs.existsSync(prebuildsDir)) {\n      try {\n        const files = fs.readdirSync(prebuildsDir);\n        const nodeFiles = files.filter((f) => f.endsWith(\".node\"));\n\n        if (nodeFiles.length > 0) {\n          // If multiple .node files exist, prefer napi over abi-specific\n          const napiFile = nodeFiles.find((f) => f.includes(\"napi\"));\n          const selectedFile = napiFile || nodeFiles[0];\n          const fullPath = path.join(prebuildsDir, selectedFile);\n\n          if (fs.existsSync(fullPath)) {\n            return fullPath;\n          }\n        }\n      } catch {\n        // Continue to fallback\n      }\n    }\n\n    // Fallback to build/Release directory\n    const buildDir = path.join(directory, \"build\", \"Release\");\n\n    if (fs.existsSync(buildDir)) {\n      try {\n        const files = fs.readdirSync(buildDir);\n        const nodeFiles = files.filter((f) => f.endsWith(\".node\"));\n\n        if (nodeFiles.length > 0) {\n          const fullPath = path.join(buildDir, nodeFiles[0]);\n\n          if (fs.existsSync(fullPath)) {\n            return fullPath;\n          }\n        }\n      } catch {\n        // Continue\n      }\n    }\n\n    return null;\n  }\n\n  // Helper function to find package root by walking up directories\n  // Looks for package.json or node_modules directory\n  function findPackageRoot(startDir: string): string {\n    let dir = startDir;\n    let prev: string | undefined;\n\n    while (true) {\n      // Check if package.json or node_modules exists in this directory\n      if (\n        fs.existsSync(path.join(dir, \"package.json\")) ||\n        fs.existsSync(path.join(dir, \"node_modules\"))\n      ) {\n        return dir;\n      }\n\n      // Move up one directory\n      prev = dir;\n      dir = path.dirname(dir);\n\n      // Stop if we've reached the root or can't go up anymore\n      if (dir === prev || dir === \".\" || dir === \"/\") {\n        return startDir; // Fall back to original directory\n      }\n    }\n  }\n\n  // Helper function to resolve bindings-style native module loading\n  // Mimics bindings package behavior: searches common build directories\n  function resolveBindings(\n    directory: string,\n    moduleName: string\n  ): string | null {\n    // Ensure moduleName has .node extension\n    const nodeFileName = moduleName.endsWith(\".node\")\n      ? moduleName\n      : `${moduleName}.node`;\n\n    // Find the package root (where build/ directory typically lives)\n    const packageRoot = findPackageRoot(directory);\n\n    // Common build paths to check (in priority order)\n    const searchPaths = [\n      path.join(packageRoot, \"build\", \"Release\", nodeFileName),\n      path.join(packageRoot, \"build\", \"Debug\", nodeFileName),\n      path.join(packageRoot, \"out\", \"Release\", nodeFileName),\n      path.join(packageRoot, \"out\", \"Debug\", nodeFileName),\n      path.join(packageRoot, \"build\", \"default\", nodeFileName),\n      path.join(packageRoot, \"compiled\", nodeFileName),\n      // Also check direct path (sometimes used in development)\n      path.join(packageRoot, nodeFileName),\n    ];\n\n    // Return the first path that exists\n    for (const searchPath of searchPaths) {\n      if (fs.existsSync(searchPath)) {\n        return searchPath;\n      }\n    }\n\n    return null;\n  }\n\n  // Helper function to generate hashed filename based on format option\n  function generateHashedFilename(\n    originalFilename: string,\n    hash: string\n  ): string {\n    const lastDotIndex = originalFilename.lastIndexOf(\".\");\n    const extension =\n      lastDotIndex > 0 ? originalFilename.slice(lastDotIndex) : \"\";\n\n    if (options.filenameFormat === \"hash-only\") {\n      // Hash-only format: HASH.node\n      return `${hash.toUpperCase()}${extension}`;\n    } else {\n      // Preserve format (default): filename-HASH.node\n      return lastDotIndex > 0\n        ? `${originalFilename.slice(\n            0,\n            lastDotIndex\n          )}-${hash.toUpperCase()}${extension}`\n        : `${originalFilename}-${hash.toUpperCase()}`;\n    }\n  }\n\n  return {\n    configResolved(config) {\n      command = config.command;\n    },\n\n    generateBundle() {\n      // Emit each .node file as an asset\n      nativeFiles.forEach((info) => {\n        this.emitFile({\n          fileName: info.hashedFilename,\n          source: info.content,\n          type: \"asset\",\n        });\n      });\n    },\n\n    load(id) {\n      if (!id.startsWith(\"\\0native:\")) return null;\n\n      const originalPath = id.slice(\"\\0native:\".length);\n      const info = nativeFiles.get(originalPath);\n\n      if (!info) return null;\n\n      // Check if this virtual module is being loaded in an ES module context\n      // Try to get the tracked module type first\n      let isESModule = virtualModuleTypes.get(id);\n\n      // If not tracked, try to detect from the original path or use getModuleInfo if available\n      if (isESModule === undefined) {\n        // Try to detect from file extension as fallback\n        isESModule = detectModuleType(originalPath);\n\n        // If getModuleInfo is available, try to use it (though it may not work for virtual modules)\n        try {\n          if (typeof this.getModuleInfo === \"function\") {\n            const moduleInfo = this.getModuleInfo(id);\n            const format = (moduleInfo as { format?: string }).format;\n            if (moduleInfo && format) {\n              isESModule = format === \"es\";\n            }\n          }\n        } catch {\n          // Ignore errors, use fallback detection\n        }\n\n        // If still undefined, default to CommonJS (safer than ES module)\n        // This prevents mixing require() with import.meta.url\n        if (isESModule === undefined) {\n          isESModule = false;\n        }\n      }\n\n      // Return proxy code that requires the hashed file\n      // The hashed file will be in the same directory as the output bundle\n      if (isESModule) {\n        // ES module syntax\n        return `\n          import { createRequire } from 'node:module';\n          const createRequireLocal = createRequire(import.meta.url);\n          export default createRequireLocal('./${info.hashedFilename}');\n        `;\n      } else {\n        // CommonJS syntax - use require directly since we're in CommonJS context\n        return `\n          module.exports = require('./${info.hashedFilename}');\n        `;\n      }\n    },\n\n    name,\n\n    async resolveId(source, importer) {\n      // Check if enabled\n      const enabled = options.forced ?? command === \"build\";\n\n      if (!enabled) return null;\n      if (!importer) return null;\n\n      // Check if this is a hashed filename generated by our transformations\n      // Handle both relative paths (./filename-HASH.node) and bare filenames (filename-HASH.node)\n      // Also handle Vite query parameters like ?commonjs-external\n      const sourceWithoutQuery = source.split(\"?\")[0];\n      const normalizedSource = sourceWithoutQuery.startsWith(\"./\")\n        ? sourceWithoutQuery.slice(2)\n        : sourceWithoutQuery;\n      const basename = path.basename(normalizedSource);\n\n      // Check if this matches a hashed filename we've generated\n      if (hashedFilenameToPath.has(basename)) {\n        const originalPath = hashedFilenameToPath.get(basename)!;\n        // Detect module type of the importing file using Rollup's getModuleInfo if available\n        let importingModuleType = false;\n        try {\n          if (typeof this.getModuleInfo === \"function\" && importer) {\n            const moduleInfo = this.getModuleInfo(importer);\n            // ModuleInfo may have format property at runtime even if TypeScript types don't include it\n            const format = (moduleInfo as { format?: string }).format;\n            if (moduleInfo && format) {\n              importingModuleType = format === \"es\";\n            } else {\n              // Fallback to detectModuleType if format is not available\n              importingModuleType = detectModuleType(importer);\n            }\n          } else {\n            // Fallback to detectModuleType if getModuleInfo is not available\n            importingModuleType = detectModuleType(importer);\n          }\n        } catch {\n          // Fallback to detectModuleType if getModuleInfo throws\n          importingModuleType = detectModuleType(importer);\n        }\n        const virtualId = `\\0native:${originalPath}`;\n        // Always track module type for this virtual module (even if false/CommonJS)\n        virtualModuleTypes.set(virtualId, importingModuleType);\n        // Return virtual module ID so load hook can handle it\n        return virtualId;\n      }\n\n      // Check if this file should be processed\n      if (!shouldProcessFile(source, importer)) return null;\n\n      // Resolve the path\n      const resolved = path.resolve(path.dirname(importer), source);\n\n      // Check if file exists\n      if (!fs.existsSync(resolved)) return null;\n\n      // Generate hash from file content\n      const content = fs.readFileSync(resolved);\n      const hash = crypto\n        .createHash(\"md5\")\n        .update(content)\n        .digest(\"hex\")\n        .slice(0, 8);\n\n      // Generate hashed filename\n      const filename = path.basename(source);\n      const hashedFilename = generateHashedFilename(filename, hash);\n\n      // Store the mapping\n      nativeFiles.set(resolved, {\n        content,\n        hashedFilename,\n        originalPath: resolved,\n      });\n      // Track reverse mapping for resolveId hook\n      hashedFilenameToPath.set(hashedFilename, resolved);\n\n      // Detect module type of the importing file using Rollup's getModuleInfo if available\n      let importingModuleType = false;\n      try {\n        if (typeof this.getModuleInfo === \"function\" && importer) {\n          const moduleInfo = this.getModuleInfo(importer);\n          // ModuleInfo may have format property at runtime even if TypeScript types don't include it\n          const format = (moduleInfo as { format?: string }).format;\n          if (moduleInfo && format) {\n            importingModuleType = format === \"es\";\n          } else {\n            // Fallback to detectModuleType if format is not available\n            importingModuleType = detectModuleType(importer);\n          }\n        } else {\n          // Fallback to detectModuleType if getModuleInfo is not available\n          importingModuleType = detectModuleType(importer);\n        }\n      } catch {\n        // Fallback to detectModuleType if getModuleInfo throws\n        importingModuleType = detectModuleType(importer);\n      }\n      const virtualId = `\\0native:${resolved}`;\n      // Always track module type for this virtual module (even if false/CommonJS)\n      virtualModuleTypes.set(virtualId, importingModuleType);\n\n      // Return a virtual module ID\n      return virtualId;\n    },\n\n    transform(code, id) {\n      // Check if enabled\n      const enabled = options.forced ?? command === \"build\";\n\n      if (!enabled) return null;\n\n      // Only process files that mention .node, node-gyp-build, or bindings\n      // For bindings, we check for the exact package name patterns to avoid false positives\n      const hasBindingsPackage =\n        code.includes(\"require('bindings')\") ||\n        code.includes('require(\"bindings\")') ||\n        code.includes(\"from 'bindings'\") ||\n        code.includes('from \"bindings\"');\n\n      if (\n        !code.includes(\".node\") &&\n        !code.includes(\"node-gyp-build\") &&\n        !hasBindingsPackage\n      )\n        return null;\n\n      let modified = false;\n      const replacements: Array<{ start: number; end: number; value: string }> =\n        [];\n\n      try {\n        // Parse the code using Rollup's built-in parser\n        // In tests, this.parse may not be available, so we check first\n\n        const ast = this.parse(code);\n\n        // Track variables for the createRequire pattern\n        let createRequireLocalName: string | null = null; // The actual local name of createRequire import (e.g., \"createRequire\" or \"createRequire$1\")\n        const customRequireVars = new Set<string>(); // Variables that are custom require functions\n        const nodeGypBuildVars = new Set<string>(); // Variables that hold node-gyp-build\n\n        // Track node-gyp-build import/require statements for potential removal\n        const nodeGypBuildImportNodes: BaseASTNode[] = []; // ImportDeclaration or VariableDeclarator nodes to remove if unused\n        let nodeGypBuildUsageCount = 0; // Count of node-gyp-build calls we've replaced\n\n        // Track bindings package variables and imports\n        const bindingsVars = new Set<string>(); // Variables that hold the bindings function\n        const bindingsImportNodes: BaseASTNode[] = []; // ImportDeclaration or VariableDeclarator nodes to remove if unused\n        let bindingsUsageCount = 0; // Count of bindings calls we've replaced\n\n        // Track variables that hold directory paths\n        const directoryVars = new Map<string, string>(); // varName -> resolved directory path\n\n        // Track module aliases for path and url modules\n        const pathModuleVars = new Set<string>(); // Variables that reference 'path' module\n        const fileURLToPathVars = new Set<string>(); // Variables that reference 'fileURLToPath'\n\n        // Detect if this is an ES6 module (vs CommonJS)\n        // Try to use Rollup's built-in module info first (most reliable)\n        let isESModule = false;\n        let hasCreateRequireImport = false;\n\n        // Use Rollup's getModuleInfo if available (most reliable)\n        // getModuleInfo returns module metadata including format\n        try {\n          if (typeof this.getModuleInfo === \"function\") {\n            const moduleInfo = this.getModuleInfo(id);\n            // ModuleInfo may have format property at runtime even if TypeScript types don't include it\n            const format = (moduleInfo as { format?: string }).format;\n            if (moduleInfo && format) {\n              // format indicates the module format: 'es' = ES module, 'cjs' = CommonJS\n              isESModule = format === \"es\";\n            } else {\n              // Fallback to our detection if format is not available\n              isESModule = detectModuleType(id, code);\n            }\n          } else {\n            // Fallback to our detection if getModuleInfo is not available\n            isESModule = detectModuleType(id, code);\n          }\n        } catch {\n          // Fallback to our detection if getModuleInfo throws\n          isESModule = detectModuleType(id, code);\n        }\n\n        // Also check AST for ImportDeclaration/ExportDeclaration nodes (most reliable)\n        // This will override other detection if we find import/export statements\n\n        // Helper to check if a node is fileURLToPath(import.meta.url)\n        function isFileURLToPathPattern(node: BaseASTNode): boolean {\n          if (!isCallExpression(node)) return false;\n\n          const callee = node.callee;\n          if (!isIdentifier(callee)) return false;\n          if (!fileURLToPathVars.has(callee.name)) return false;\n\n          // Check if argument is import.meta.url\n          if (node.arguments.length !== 1) return false;\n          const arg = node.arguments[0];\n\n          if (isMemberExpression(arg)) {\n            const metaExpr = arg as MemberExpressionNode;\n\n            // Check if this is import.meta.url\n            // import.meta is represented as a MetaProperty node, not a MemberExpression\n            if (\n              metaExpr.object.type === \"MetaProperty\" &&\n              isIdentifier(metaExpr.property) &&\n              (metaExpr.property as IdentifierNode).name === \"url\"\n            ) {\n              const metaProp = metaExpr.object as MetaPropertyNode;\n              if (\n                metaProp.meta.name === \"import\" &&\n                metaProp.property.name === \"meta\"\n              ) {\n                return true;\n              }\n            }\n\n            // Fallback: Check legacy structure (MemberExpression)\n            if (\n              isMemberExpression(metaExpr.object) &&\n              isIdentifier((metaExpr.object as MemberExpressionNode).object) &&\n              (\n                (metaExpr.object as MemberExpressionNode)\n                  .object as IdentifierNode\n              ).name === \"import\" &&\n              isIdentifier(\n                (metaExpr.object as MemberExpressionNode).property\n              ) &&\n              (\n                (metaExpr.object as MemberExpressionNode)\n                  .property as IdentifierNode\n              ).name === \"meta\" &&\n              isIdentifier(metaExpr.property) &&\n              (metaExpr.property as IdentifierNode).name === \"url\"\n            ) {\n              return true;\n            }\n          }\n\n          return false;\n        }\n\n        // Helper to resolve directory from a CallExpression (path.dirname, path.resolve, etc.)\n        function resolveDirectoryFromCall(\n          callNode: CallExpressionNode,\n          currentFileId: string\n        ): string | null {\n          const callee = callNode.callee;\n\n          // Check for path.dirname() or pathAlias.dirname()\n          if (isMemberExpression(callee)) {\n            const memberExpr = callee as MemberExpressionNode;\n            if (\n              isIdentifier(memberExpr.object) &&\n              (pathModuleVars.has(memberExpr.object.name) ||\n                memberExpr.object.name === \"path\") &&\n              isIdentifier(memberExpr.property)\n            ) {\n              const methodName = memberExpr.property.name;\n\n              // path.dirname(fileURLToPath(import.meta.url))\n              if (methodName === \"dirname\") {\n                if (callNode.arguments.length === 1) {\n                  const arg = callNode.arguments[0];\n                  if (isFileURLToPathPattern(arg)) {\n                    // This is equivalent to __dirname\n                    return path.dirname(currentFileId);\n                  }\n                  // path.dirname(someVar) where someVar is a known directory\n                  if (isIdentifier(arg) && directoryVars.has(arg.name)) {\n                    const baseDir = directoryVars.get(arg.name)!;\n                    return path.dirname(baseDir);\n                  }\n                }\n              }\n\n              // path.resolve() or path.join()\n              if (methodName === \"resolve\" || methodName === \"join\") {\n                if (callNode.arguments.length === 0) return null;\n\n                // Determine the base directory from the first argument\n                let baseDir: string | null = null;\n                let startIndex = 0;\n\n                const firstArg = callNode.arguments[0];\n                if (isIdentifier(firstArg)) {\n                  if (firstArg.name === \"__dirname\") {\n                    baseDir = path.dirname(currentFileId);\n                    startIndex = 1;\n                  } else if (directoryVars.has(firstArg.name)) {\n                    baseDir = directoryVars.get(firstArg.name)!;\n                    startIndex = 1;\n                  } else {\n                    // Unknown variable\n                    return null;\n                  }\n                } else if (\n                  isLiteral(firstArg) &&\n                  typeof firstArg.value === \"string\"\n                ) {\n                  // Absolute or relative path\n                  baseDir = path.dirname(currentFileId);\n                  startIndex = 0;\n                } else {\n                  // Complex expression\n                  return null;\n                }\n\n                const parts: string[] = [baseDir];\n\n                // Process remaining arguments\n                for (let i = startIndex; i < callNode.arguments.length; i++) {\n                  const arg = callNode.arguments[i];\n                  if (isLiteral(arg) && typeof arg.value === \"string\") {\n                    parts.push(arg.value);\n                  } else if (isIdentifier(arg) && directoryVars.has(arg.name)) {\n                    // Another directory variable - use it\n                    parts.push(directoryVars.get(arg.name)!);\n                  } else {\n                    // Can't resolve\n                    return null;\n                  }\n                }\n\n                return path.join(...parts);\n              }\n            }\n          }\n\n          return null;\n        }\n\n        // Walk the AST to find CallExpression nodes\n        const walk = (node: BaseASTNode): void => {\n          // Track import declarations for createRequire from 'module'\n          if (isImportDeclaration(node)) {\n            // Any ImportDeclaration means this is an ES6 module\n            isESModule = true;\n          }\n          // Also check for export declarations (more robust ES module detection)\n          else if (\n            node.type === \"ExportDefaultDeclaration\" ||\n            node.type === \"ExportNamedDeclaration\" ||\n            node.type === \"ExportAllDeclaration\"\n          ) {\n            // Any export declaration means this is an ES6 module\n            isESModule = true;\n          }\n\n          if (isImportDeclaration(node)) {\n            const source = node.source.value;\n\n            // Track createRequire imports\n            if (source === \"module\" || source === \"node:module\") {\n              for (const specifier of node.specifiers) {\n                if (isImportSpecifier(specifier)) {\n                  if (\n                    isIdentifier(specifier.imported) &&\n                    specifier.imported.name === \"createRequire\" &&\n                    isIdentifier(specifier.local)\n                  ) {\n                    // Store the actual local name (could be renamed like createRequire$1)\n                    createRequireLocalName = specifier.local.name;\n                    hasCreateRequireImport = true;\n                  }\n                }\n              }\n            }\n\n            // Track path module imports\n            if (source === \"path\" || source === \"node:path\") {\n              for (const specifier of node.specifiers) {\n                if (\n                  isImportDefaultSpecifier(specifier) &&\n                  isIdentifier(specifier.local)\n                ) {\n                  pathModuleVars.add(specifier.local.name);\n                }\n              }\n            }\n\n            // Track fileURLToPath imports from url\n            if (source === \"url\" || source === \"node:url\") {\n              for (const specifier of node.specifiers) {\n                if (isImportSpecifier(specifier)) {\n                  if (\n                    isIdentifier(specifier.imported) &&\n                    specifier.imported.name === \"fileURLToPath\" &&\n                    isIdentifier(specifier.local)\n                  ) {\n                    fileURLToPathVars.add(specifier.local.name);\n                  }\n                }\n              }\n            }\n\n            // Track node-gyp-build imports\n            if (source === \"node-gyp-build\") {\n              // Track the import statement node for potential removal\n              nodeGypBuildImportNodes.push(node);\n              for (const specifier of node.specifiers) {\n                if (\n                  isImportDefaultSpecifier(specifier) &&\n                  isIdentifier(specifier.local)\n                ) {\n                  nodeGypBuildVars.add(specifier.local.name);\n                }\n              }\n            }\n\n            // Track bindings imports\n            if (source === \"bindings\") {\n              // Track the import statement node for potential removal\n              bindingsImportNodes.push(node);\n              for (const specifier of node.specifiers) {\n                if (\n                  isImportDefaultSpecifier(specifier) &&\n                  isIdentifier(specifier.local)\n                ) {\n                  bindingsVars.add(specifier.local.name);\n                }\n              }\n            }\n          }\n\n          // Track variable declarations\n          if (isVariableDeclarator(node)) {\n            if (isIdentifier(node.id) && node.init) {\n              const varName = node.id.name;\n\n              // Track directory variable assignments\n              // Pattern 1: var t = __dirname\n              if (isIdentifier(node.init) && node.init.name === \"__dirname\") {\n                directoryVars.set(varName, path.dirname(id));\n              }\n              // Pattern 2: var t = otherDirVar (copy directory from another variable)\n              else if (\n                isIdentifier(node.init) &&\n                directoryVars.has(node.init.name)\n              ) {\n                directoryVars.set(varName, directoryVars.get(node.init.name)!);\n              }\n              // Pattern 3: var t = path.dirname(fileURLToPath(import.meta.url)) or path.resolve/join\n              else if (isCallExpression(node.init)) {\n                const resolvedDir = resolveDirectoryFromCall(node.init, id);\n                if (resolvedDir) {\n                  directoryVars.set(varName, resolvedDir);\n                }\n\n                // Also track createRequire and node-gyp-build assignments\n                const calleeNode = node.init.callee;\n\n                // Check if it's a call to createRequire\n                if (\n                  isIdentifier(calleeNode) &&\n                  createRequireLocalName &&\n                  calleeNode.name === createRequireLocalName\n                ) {\n                  customRequireVars.add(varName);\n                }\n                // Check if it's require('node-gyp-build') or customRequire('node-gyp-build')\n                else if (\n                  isIdentifier(calleeNode) &&\n                  (calleeNode.name === \"require\" ||\n                    customRequireVars.has(calleeNode.name)) &&\n                  node.init.arguments.length === 1 &&\n                  isLiteral(node.init.arguments[0]) &&\n                  node.init.arguments[0].value === \"node-gyp-build\"\n                ) {\n                  // Track the variable declarator node for potential removal\n                  nodeGypBuildImportNodes.push(node);\n                  nodeGypBuildVars.add(varName);\n                }\n                // Check if it's require('bindings') or customRequire('bindings')\n                else if (\n                  isIdentifier(calleeNode) &&\n                  (calleeNode.name === \"require\" ||\n                    customRequireVars.has(calleeNode.name)) &&\n                  node.init.arguments.length === 1 &&\n                  isLiteral(node.init.arguments[0]) &&\n                  node.init.arguments[0].value === \"bindings\"\n                ) {\n                  // Track the variable declarator node for potential removal\n                  bindingsImportNodes.push(node);\n                  bindingsVars.add(varName);\n                }\n              }\n            }\n          }\n\n          if (isCallExpression(node)) {\n            const calleeNode = node.callee;\n\n            // Pattern 1: Direct call require('node-gyp-build')(__dirname) or customRequire('node-gyp-build')(__dirname)\n            if (\n              isCallExpression(calleeNode) &&\n              isIdentifier(calleeNode.callee) &&\n              (calleeNode.callee.name === \"require\" ||\n                customRequireVars.has(calleeNode.callee.name)) &&\n              calleeNode.arguments.length === 1 &&\n              isLiteral(calleeNode.arguments[0]) &&\n              calleeNode.arguments[0].value === \"node-gyp-build\"\n            ) {\n              // This is require('node-gyp-build')(...) or customRequire('node-gyp-build')(...)\n              const dirArg = node.arguments[0];\n              const directory = resolveDirArgument(dirArg, id);\n\n              if (directory) {\n                const nodeFilePath = resolveNodeGypBuild(directory);\n                if (nodeFilePath) {\n                  processNodeFile(nodeFilePath, node);\n                }\n              }\n            }\n            // Pattern 2: Variable call nodeGypBuildVar(__dirname)\n            else if (\n              isIdentifier(calleeNode) &&\n              nodeGypBuildVars.has(calleeNode.name)\n            ) {\n              const dirArg = node.arguments[0];\n              const directory = resolveDirArgument(dirArg, id);\n\n              if (directory) {\n                const nodeFilePath = resolveNodeGypBuild(directory);\n                if (nodeFilePath) {\n                  processNodeFile(nodeFilePath, node);\n                }\n              }\n            }\n            // Pattern 3: bindings package - direct call require('bindings')('addon')\n            else if (\n              isCallExpression(calleeNode) &&\n              isIdentifier(calleeNode.callee) &&\n              (calleeNode.callee.name === \"require\" ||\n                customRequireVars.has(calleeNode.callee.name)) &&\n              calleeNode.arguments.length === 1 &&\n              isLiteral(calleeNode.arguments[0]) &&\n              calleeNode.arguments[0].value === \"bindings\" &&\n              node.arguments.length === 1\n            ) {\n              // This is require('bindings')('addon') or require('bindings')({ bindings: 'addon' })\n              const arg = node.arguments[0];\n              let moduleName: string | null = null;\n\n              // Check if argument is a string literal\n              if (isLiteral(arg) && typeof arg.value === \"string\") {\n                moduleName = arg.value;\n              }\n              // Check if argument is an object with bindings property\n              else if (arg.type === \"ObjectExpression\" && \"properties\" in arg) {\n                const properties = arg.properties as Array<{\n                  type: string;\n                  key?: { name: string };\n                  value: BaseASTNode;\n                }>;\n                const bindingsProp = properties.find(\n                  (prop) =>\n                    prop.type === \"Property\" &&\n                    prop.key?.name === \"bindings\" &&\n                    isLiteral(prop.value)\n                );\n                if (bindingsProp && isLiteral(bindingsProp.value)) {\n                  moduleName = bindingsProp.value.value as string;\n                }\n              }\n\n              if (moduleName) {\n                const directory = path.dirname(id);\n                const nodeFilePath = resolveBindings(directory, moduleName);\n                if (nodeFilePath) {\n                  processNodeFile(nodeFilePath, node);\n                  bindingsUsageCount++;\n                }\n              }\n            }\n            // Pattern 4: bindings package - variable call bindingsVar('addon')\n            else if (\n              isIdentifier(calleeNode) &&\n              bindingsVars.has(calleeNode.name) &&\n              node.arguments.length === 1\n            ) {\n              const arg = node.arguments[0];\n              let moduleName: string | null = null;\n\n              // Check if argument is a string literal\n              if (isLiteral(arg) && typeof arg.value === \"string\") {\n                moduleName = arg.value;\n              }\n              // Check if argument is an object with bindings property\n              else if (arg.type === \"ObjectExpression\" && \"properties\" in arg) {\n                const properties = arg.properties as Array<{\n                  type: string;\n                  key?: { name: string };\n                  value: BaseASTNode;\n                }>;\n                const bindingsProp = properties.find(\n                  (prop) =>\n                    prop.type === \"Property\" &&\n                    prop.key?.name === \"bindings\" &&\n                    isLiteral(prop.value)\n                );\n                if (bindingsProp && isLiteral(bindingsProp.value)) {\n                  moduleName = bindingsProp.value.value as string;\n                }\n              }\n\n              if (moduleName) {\n                const directory = path.dirname(id);\n                const nodeFilePath = resolveBindings(directory, moduleName);\n                if (nodeFilePath) {\n                  processNodeFile(nodeFilePath, node);\n                  bindingsUsageCount++;\n                }\n              }\n            }\n            // Pattern 5: Regular require('./addon.node') calls\n            else if (\n              node.arguments.length === 1 &&\n              isLiteral(node.arguments[0]) &&\n              typeof node.arguments[0].value === \"string\"\n            ) {\n              const literalNode = node.arguments[0];\n              const relativePath = literalNode.value as string;\n\n              // Check if this file should be processed (either .node or package-specific)\n              if (!shouldProcessFile(relativePath, id)) return;\n\n              // Resolve the actual path\n              const absolutePath = path.resolve(path.dirname(id), relativePath);\n\n              if (!fs.existsSync(absolutePath)) return;\n\n              // Check if we already processed this file\n              let info = nativeFiles.get(absolutePath);\n\n              if (!info) {\n                // Generate hash and store\n                const content = fs.readFileSync(absolutePath);\n                const hash = crypto\n                  .createHash(\"md5\")\n                  .update(content)\n                  .digest(\"hex\")\n                  .slice(0, 8);\n\n                // Generate hashed filename\n                // e.g., addon.node -> addon-HASH.node (or HASH.node if hash-only)\n                //       native-file.node-macos -> native-file-HASH.node-macos (or HASH.node-macos if hash-only)\n                const filename = path.basename(relativePath);\n                const hashedFilename = generateHashedFilename(filename, hash);\n\n                info = {\n                  content,\n                  hashedFilename,\n                  originalPath: absolutePath,\n                };\n                nativeFiles.set(absolutePath, info);\n                // Track reverse mapping for resolveId hook\n                hashedFilenameToPath.set(hashedFilename, absolutePath);\n              }\n\n              // Record the replacement\n              replacements.push({\n                start: literalNode.start,\n                end: literalNode.end,\n                value: `\"./${info.hashedFilename}\"`,\n              });\n              modified = true;\n            }\n          }\n\n          // Recursively walk child nodes\n          for (const key in node) {\n            if (key === \"type\" || key === \"start\" || key === \"end\") continue;\n            const child = (node as unknown as Record<string, unknown>)[key];\n            if (child && typeof child === \"object\") {\n              if (Array.isArray(child)) {\n                child.forEach((c) => {\n                  if (c && typeof c === \"object\" && \"type\" in c) {\n                    walk(c as BaseASTNode);\n                  }\n                });\n              } else if (\"type\" in child) {\n                walk(child as BaseASTNode);\n              }\n            }\n          }\n        };\n\n        // Helper to resolve directory argument (__dirname, path.join, etc.)\n        function resolveDirArgument(\n          arg: BaseASTNode | undefined,\n          currentFileId: string\n        ): string | null {\n          if (!arg) return null;\n\n          // Case 1: __dirname\n          if (isIdentifier(arg) && arg.name === \"__dirname\") {\n            return path.dirname(currentFileId);\n          }\n\n          // Case 2: Variable that holds a directory path\n          if (isIdentifier(arg) && directoryVars.has(arg.name)) {\n            return directoryVars.get(arg.name)!;\n          }\n\n          // Case 3: String literal\n          if (isLiteral(arg) && typeof arg.value === \"string\") {\n            return path.resolve(path.dirname(currentFileId), arg.value);\n          }\n\n          // Case 4: require.resolve(\"./\") - resolves to current directory\n          if (isCallExpression(arg)) {\n            const callee = arg.callee;\n\n            // Check for require.resolve(\"./\") pattern\n            if (\n              isMemberExpression(callee) &&\n              isIdentifier(callee.object) &&\n              callee.object.name === \"require\" &&\n              isIdentifier(callee.property) &&\n              callee.property.name === \"resolve\" &&\n              arg.arguments.length === 1 &&\n              isLiteral(arg.arguments[0]) &&\n              arg.arguments[0].value === \"./\"\n            ) {\n              return path.dirname(currentFileId);\n            }\n\n            // Check for path.join, path.resolve, etc. (with any path module alias)\n            if (\n              isMemberExpression(callee) &&\n              isIdentifier(callee.object) &&\n              (pathModuleVars.has(callee.object.name) ||\n                callee.object.name === \"path\") &&\n              isIdentifier(callee.property)\n            ) {\n              const methodName = callee.property.name;\n              if (methodName === \"join\" || methodName === \"resolve\") {\n                if (arg.arguments.length === 0) return null;\n\n                // Determine the base directory from the first argument\n                let baseDir: string | null = null;\n                let startIndex = 0;\n\n                const firstArg = arg.arguments[0];\n                if (isIdentifier(firstArg)) {\n                  if (firstArg.name === \"__dirname\") {\n                    baseDir = path.dirname(currentFileId);\n                    startIndex = 1;\n                  } else if (directoryVars.has(firstArg.name)) {\n                    baseDir = directoryVars.get(firstArg.name)!;\n                    startIndex = 1;\n                  } else {\n                    // Unknown variable\n                    return null;\n                  }\n                } else if (\n                  isLiteral(firstArg) &&\n                  typeof firstArg.value === \"string\"\n                ) {\n                  // Absolute or relative path\n                  baseDir = path.dirname(currentFileId);\n                  startIndex = 0;\n                } else {\n                  // Complex expression\n                  return null;\n                }\n\n                const parts: string[] = [baseDir];\n\n                // Process remaining arguments\n                for (let i = startIndex; i < arg.arguments.length; i++) {\n                  const pathArg = arg.arguments[i];\n                  if (isLiteral(pathArg) && typeof pathArg.value === \"string\") {\n                    parts.push(pathArg.value);\n                  } else if (\n                    isIdentifier(pathArg) &&\n                    directoryVars.has(pathArg.name)\n                  ) {\n                    // Another directory variable\n                    parts.push(directoryVars.get(pathArg.name)!);\n                  } else {\n                    // Can't resolve\n                    return null;\n                  }\n                }\n\n                return path.join(...parts);\n              }\n            }\n          }\n\n          return null;\n        }\n\n        // Helper to process a found .node file and replace the call expression\n        function processNodeFile(\n          nodeFilePath: string,\n          callNode: CallExpressionNode\n        ): void {\n          // Check if we already processed this file\n          let info = nativeFiles.get(nodeFilePath);\n\n          if (!info) {\n            // Generate hash and store\n            const content = fs.readFileSync(nodeFilePath);\n            const hash = crypto\n              .createHash(\"md5\")\n              .update(content)\n              .digest(\"hex\")\n              .slice(0, 8);\n\n            const filename = path.basename(nodeFilePath);\n            const hashedFilename = generateHashedFilename(filename, hash);\n\n            info = {\n              content,\n              hashedFilename,\n              originalPath: nodeFilePath,\n            };\n            nativeFiles.set(nodeFilePath, info);\n            // Track reverse mapping for resolveId hook\n            hashedFilenameToPath.set(hashedFilename, nodeFilePath);\n          }\n\n          // Determine how to generate the replacement code\n          let replacementCode: string;\n\n          if (isESModule) {\n            // For ES6 modules, use inline createRequire(import.meta.url)() call\n            // Use the tracked local name if available, otherwise use 'createRequire'\n            const funcName = createRequireLocalName || \"createRequire\";\n            replacementCode = `${funcName}(import.meta.url)(\"./${info.hashedFilename}\")`;\n          } else {\n            // For CommonJS, use require()\n            replacementCode = `require(\"./${info.hashedFilename}\")`;\n          }\n\n          // Replace the entire call expression\n          replacements.push({\n            start: callNode.start,\n            end: callNode.end,\n            value: replacementCode,\n          });\n          modified = true;\n\n          // Track that we replaced a node-gyp-build usage\n          nodeGypBuildUsageCount++;\n        }\n\n        walk(ast);\n\n        // Remove unused node-gyp-build imports if we replaced all usages\n        if (nodeGypBuildUsageCount > 0 && nodeGypBuildImportNodes.length > 0) {\n          // Remove the tracked import/require statements\n          for (const importNode of nodeGypBuildImportNodes) {\n            if (\n              importNode.start !== undefined &&\n              importNode.end !== undefined\n            ) {\n              // For ImportDeclaration, remove the entire statement including newline\n              if (importNode.type === \"ImportDeclaration\") {\n                replacements.push({\n                  start: importNode.start,\n                  end: importNode.end,\n                  value: \"\",\n                });\n                modified = true;\n              }\n              // For VariableDeclarator (require), remove just the declarator\n              // We'll leave the const/let/var keyword if there are other declarators\n              else if (importNode.type === \"VariableDeclarator\") {\n                replacements.push({\n                  start: importNode.start,\n                  end: importNode.end,\n                  value: \"\",\n                });\n                modified = true;\n              }\n            }\n          }\n        }\n\n        // Remove unused bindings imports if we replaced all usages\n        if (bindingsUsageCount > 0 && bindingsImportNodes.length > 0) {\n          // Remove the tracked import/require statements\n          for (const importNode of bindingsImportNodes) {\n            if (\n              importNode.start !== undefined &&\n              importNode.end !== undefined\n            ) {\n              // For ImportDeclaration, remove the entire statement\n              if (importNode.type === \"ImportDeclaration\") {\n                replacements.push({\n                  start: importNode.start,\n                  end: importNode.end,\n                  value: \"\",\n                });\n                modified = true;\n              }\n              // For VariableDeclarator (require), remove just the declarator\n              else if (importNode.type === \"VariableDeclarator\") {\n                replacements.push({\n                  start: importNode.start,\n                  end: importNode.end,\n                  value: \"\",\n                });\n                modified = true;\n              }\n            }\n          }\n        }\n\n        // Apply replacements in reverse order to maintain correct positions\n        if (modified) {\n          let newCode = code;\n\n          // For ES6 modules, we need to inject createRequire if not already present\n          let createRequireInjection = \"\";\n\n          // Only inject createRequire infrastructure if we actually modified something (replaced node-gyp-build)\n          if (isESModule && modified && !hasCreateRequireImport) {\n            createRequireInjection =\n              \"import { createRequire } from 'module';\\n\";\n            // Set the local name since we're creating the import\n            createRequireLocalName = \"createRequire\";\n          }\n\n          // Apply replacements and injections in correct order\n          // Strategy: Build up the injections to prepend, then apply replacements\n\n          let codePrefix = \"\";\n\n          // Add createRequire import if needed\n          if (createRequireInjection) {\n            codePrefix += createRequireInjection;\n          }\n\n          // Apply replacements to the code (in reverse order to maintain positions)\n          replacements\n            .sort((a, b) => b.start - a.start)\n            .forEach((replacement) => {\n              newCode =\n                newCode.slice(0, replacement.start) +\n                replacement.value +\n                newCode.slice(replacement.end);\n            });\n\n          // If we have injections, we need to insert them after existing imports\n          if (codePrefix) {\n            // Find the position after the last import in the (potentially modified) code\n            // We'll look for the last \"import\" statement and insert after it\n            const importRegex = /^import\\s+.*?;?\\s*$/gm;\n            let lastImportMatch;\n            let match;\n            while ((match = importRegex.exec(newCode)) !== null) {\n              lastImportMatch = match;\n            }\n\n            if (lastImportMatch) {\n              // Insert after the last import\n              const insertPos =\n                lastImportMatch.index + lastImportMatch[0].length;\n              newCode =\n                newCode.slice(0, insertPos) +\n                \"\\n\" +\n                codePrefix +\n                newCode.slice(insertPos);\n            } else {\n              // No imports found, prepend to the file\n              newCode = codePrefix + \"\\n\" + newCode;\n            }\n          }\n\n          return { code: newCode, map: null };\n        }\n      } catch (error) {\n        // If parsing fails, log and skip transformation\n        console.warn(\n          `Failed to parse ${id} for native module transformation:`,\n          error\n        );\n        return null;\n      }\n\n      return null;\n    },\n  };\n}\n"]}