@bobfrankston/importgen 0.1.20 → 0.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +18 -13
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -67,9 +67,11 @@ function resolveEntryPoint(pkg, packageDir) {
67
67
  return './index.js';
68
68
  }
69
69
  /**
70
- * Recursively collect all dependencies, avoiding circular references
70
+ * Recursively collect all dependencies, avoiding circular references.
71
+ * nodeModulesPrefix tracks the import map path prefix for nested deps
72
+ * (e.g., './node_modules' for root, './node_modules/@scope/pkg/node_modules' for nested).
71
73
  */
72
- function collectDependencies(packageJsonPath, visited, dependencies, htmlDir, warnings, depPaths) {
74
+ function collectDependencies(packageJsonPath, visited, dependencies, htmlDir, nodeModulesPrefix, warnings, depPaths) {
73
75
  try {
74
76
  const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
75
77
  const packageDir = path.dirname(packageJsonPath);
@@ -84,7 +86,7 @@ function collectDependencies(packageJsonPath, visited, dependencies, htmlDir, wa
84
86
  // Check if .dependencies has an override path for this package
85
87
  const overrideVersion = dotDeps[depName];
86
88
  const versionToUse = overrideVersion || depVersion;
87
- // Resolve dependency path
89
+ // Resolve dependency path (real filesystem location)
88
90
  let depPath = resolveDependencyPath(packageDir, depName, versionToUse);
89
91
  if (!depPath) {
90
92
  const warning = `Could not follow path for ${depName} (${versionToUse})`;
@@ -115,17 +117,20 @@ function collectDependencies(packageJsonPath, visited, dependencies, htmlDir, wa
115
117
  const depPackageJson = JSON.parse(fs.readFileSync(depPackageJsonPath, 'utf-8'));
116
118
  // Resolve entry point
117
119
  const entryPoint = resolveEntryPoint(depPackageJson, depPath);
118
- // Generate path relative to node_modules (peer to index.html)
119
- let relativePath = `./node_modules/${depName}/${entryPoint}`;
120
- // Normalize path separators and clean up
121
- relativePath = relativePath.replace(/\\/g, '/');
122
- // Remove any leading ./ from entryPoint that might cause double slashes
123
- if (entryPoint.startsWith('./')) {
124
- relativePath = `./node_modules/${depName}/${entryPoint.slice(2)}`;
120
+ const entryFile = entryPoint.startsWith('./') ? entryPoint.slice(2) : entryPoint;
121
+ // Generate import map path through node_modules (follows symlinks)
122
+ // Check if hoisted to top-level node_modules first
123
+ const topLevelDir = path.join(htmlDir, 'node_modules', depName);
124
+ let depPrefix;
125
+ if (fs.existsSync(topLevelDir)) {
126
+ depPrefix = `./node_modules/${depName}`;
125
127
  }
126
- dependencies.set(depName, relativePath);
128
+ else {
129
+ depPrefix = `${nodeModulesPrefix}/${depName}`;
130
+ }
131
+ dependencies.set(depName, `${depPrefix}/${entryFile}`);
127
132
  // Recursively process this dependency's dependencies
128
- collectDependencies(depPackageJsonPath, visited, dependencies, htmlDir, warnings, depPaths);
133
+ collectDependencies(depPackageJsonPath, visited, dependencies, htmlDir, `${depPrefix}/node_modules`, warnings, depPaths);
129
134
  }
130
135
  }
131
136
  catch (e) {
@@ -141,7 +146,7 @@ function generateImportMap(packageJsonPath, htmlFilePath) {
141
146
  const depPaths = new Set();
142
147
  const warnings = [];
143
148
  // Recursively collect all dependencies
144
- collectDependencies(packageJsonPath, visited, dependencies, htmlDir, warnings, depPaths);
149
+ collectDependencies(packageJsonPath, visited, dependencies, htmlDir, './node_modules', warnings, depPaths);
145
150
  result.depDirs = Array.from(depPaths);
146
151
  // Convert Map to plain object for JSON
147
152
  const imports = {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bobfrankston/importgen",
3
- "version": "0.1.20",
3
+ "version": "0.1.23",
4
4
  "description": "Generate ES Module import maps from package.json dependencies for native browser module loading",
5
5
  "main": "index.js",
6
6
  "bin": {