@bobfrankston/importgen 0.1.22 → 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 -9
  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,13 +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 HTML dir using actual resolved location
119
120
  const entryFile = entryPoint.startsWith('./') ? entryPoint.slice(2) : entryPoint;
120
- const absoluteEntryPath = path.join(depPath, entryFile);
121
- let relativePath = './' + path.relative(htmlDir, absoluteEntryPath).replace(/\\/g, '/');
122
- dependencies.set(depName, relativePath);
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}`;
127
+ }
128
+ else {
129
+ depPrefix = `${nodeModulesPrefix}/${depName}`;
130
+ }
131
+ dependencies.set(depName, `${depPrefix}/${entryFile}`);
123
132
  // Recursively process this dependency's dependencies
124
- collectDependencies(depPackageJsonPath, visited, dependencies, htmlDir, warnings, depPaths);
133
+ collectDependencies(depPackageJsonPath, visited, dependencies, htmlDir, `${depPrefix}/node_modules`, warnings, depPaths);
125
134
  }
126
135
  }
127
136
  catch (e) {
@@ -137,7 +146,7 @@ function generateImportMap(packageJsonPath, htmlFilePath) {
137
146
  const depPaths = new Set();
138
147
  const warnings = [];
139
148
  // Recursively collect all dependencies
140
- collectDependencies(packageJsonPath, visited, dependencies, htmlDir, warnings, depPaths);
149
+ collectDependencies(packageJsonPath, visited, dependencies, htmlDir, './node_modules', warnings, depPaths);
141
150
  result.depDirs = Array.from(depPaths);
142
151
  // Convert Map to plain object for JSON
143
152
  const imports = {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bobfrankston/importgen",
3
- "version": "0.1.22",
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": {