Skip to content

Commit d0d8271

Browse files
committed
Add lit deps to importmap
1 parent aa6f5a0 commit d0d8271

File tree

2 files changed

+94
-15
lines changed

2 files changed

+94
-15
lines changed

scripts/assets/templates/cdn/create-dev-importmap.js.template

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,50 @@ try {
2626
const importmapText = fs.readFileSync(importmapPath, 'utf8');
2727
const importmap = JSON.parse(importmapText);
2828

29-
// Create a development version by modifying paths
30-
const devImportmapText = importmapText
31-
.replace(new RegExp(`/lit/${litVersion}/`, 'g'), `/lit/${litVersion}/development/`)
32-
.replace(new RegExp(`/(@semantic-ui/[^/]+/[^/]+)/([^"]+)`, 'g'), '/$1/development/$2');
33-
34-
// Parse back to object to make sure it's valid JSON
35-
const devImportmap = JSON.parse(devImportmapText);
36-
29+
// Create a development version by modifying paths for all entries
30+
const devImportmap = {
31+
imports: {}
32+
};
33+
34+
// Process each import and replace with development version if available
35+
for (const [key, value] of Object.entries(importmap.imports)) {
36+
// For Lit modules
37+
if (key === 'lit' || value.includes(`/lit/${litVersion}/`)) {
38+
devImportmap.imports[key] = value.replace(`/lit/${litVersion}/`, `/lit/${litVersion}/development/`);
39+
}
40+
// For @semantic-ui packages
41+
else if (key.startsWith('@semantic-ui/')) {
42+
const parts = key.split('/');
43+
const packageName = parts[1];
44+
const packageVersion = value.match(/\/@semantic-ui\/[^\/]+\/([^\/]+)/)[1];
45+
46+
// Update to use development folder if it exists
47+
devImportmap.imports[key] = value.replace(
48+
`/@semantic-ui/${packageName}/${packageVersion}/`,
49+
`/@semantic-ui/${packageName}/${packageVersion}/development/`
50+
);
51+
}
52+
// For Lit dependencies and other packages
53+
else {
54+
// Attempt to add /development/ to path if it's a dependency
55+
const match = value.match(/\/([^\/]+)\/([^\/]+)\/([^\/]+)/);
56+
if (match) {
57+
const [, packageName, packageVersion, entry] = match;
58+
devImportmap.imports[key] = value.replace(
59+
`/${packageName}/${packageVersion}/`,
60+
`/${packageName}/${packageVersion}/development/`
61+
);
62+
} else {
63+
// If we can't determine structure, just copy as-is
64+
devImportmap.imports[key] = value;
65+
}
66+
}
67+
}
68+
3769
// Write the development importmap
3870
fs.writeFileSync(path.join('./cdn', `importmap-${version}-dev.json`), JSON.stringify(devImportmap, null, 2));
3971
console.log(`Created importmap-${version}-dev.json`);
40-
72+
4173
// If this is not a pre-release, also update the latest-dev.json
4274
if (!version.includes('-')) {
4375
fs.writeFileSync(path.join('./cdn', 'importmap-latest-dev.json'), JSON.stringify(devImportmap, null, 2));
@@ -47,6 +79,10 @@ try {
4779
fs.writeFileSync(path.join('./cdn', 'importmap-latest-dev.json'), JSON.stringify(devImportmap, null, 2));
4880
console.log('Created initial importmap-latest-dev.json');
4981
}
82+
83+
// Log the final imports for verification
84+
console.log('Final development importmap imports:');
85+
console.log(JSON.stringify(devImportmap.imports, null, 2));
5086
} catch (err) {
5187
console.error('Error creating development importmap:', err.message);
5288
process.exit(1);

scripts/assets/templates/cdn/generate-importmap.js.template

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import fs from 'fs';
22
import path from 'path';
33
import { fileURLToPath } from 'url';
4-
import { resolveEntry } from './resolve-entry.js';
54

65
// Set up dirname equivalent for ES modules
76
const __filename = fileURLToPath(import.meta.url);
@@ -12,6 +11,9 @@ const coreVersion = process.env.CORE_VERSION;
1211
const version = process.env.VERSION;
1312
const litVersion = process.env.LIT_VERSION || '3.2.1';
1413

14+
// Import the entry resolver
15+
import { resolveEntry } from './resolve-entry.js';
16+
1517
// Create the importmap object
1618
const importmap = {
1719
imports: {
@@ -52,24 +54,61 @@ try {
5254

5355
// Add Lit dependencies to importmap
5456
try {
57+
// Get Lit dependencies directly from node_modules directory contents
58+
const litDepsDirPath = './node_modules/lit/node_modules';
59+
if (fs.existsSync(litDepsDirPath)) {
60+
const potentialDeps = fs.readdirSync(litDepsDirPath)
61+
.filter(dir => fs.statSync(path.join(litDepsDirPath, dir)).isDirectory())
62+
.filter(dir => !dir.startsWith('.'));
63+
64+
console.log(`Found potential direct Lit dependencies: ${potentialDeps.join(', ')}`);
65+
66+
for (const dep of potentialDeps) {
67+
try {
68+
const depPath = path.join(litDepsDirPath, dep, 'package.json');
69+
if (fs.existsSync(depPath)) {
70+
const depPkgText = fs.readFileSync(depPath, 'utf8');
71+
const depPkg = JSON.parse(depPkgText);
72+
73+
const depVersion = depPkg.version;
74+
const depEntry = resolveEntry(depPkg);
75+
76+
importmap.imports[dep] = `https://cdn.semantic-ui.com/${dep}/${depVersion}/${depEntry}`;
77+
console.log(`Added direct Lit dependency: ${dep}@${depVersion} (${depEntry}) to importmap`);
78+
}
79+
} catch (err) {
80+
console.error(`Error processing direct dependency ${dep}:`, err.message);
81+
}
82+
}
83+
} else {
84+
console.log('Lit dependencies not found in node_modules subdirectory, trying package.json');
85+
}
86+
87+
// Also check package.json in case dependencies are hoisted
5588
const litPkgPath = './node_modules/lit/package.json';
5689
if (fs.existsSync(litPkgPath)) {
5790
const litPkgText = fs.readFileSync(litPkgPath, 'utf8');
5891
const litPkg = JSON.parse(litPkgText);
5992

6093
if (litPkg.dependencies) {
94+
console.log(`Found dependencies in lit package.json: ${Object.keys(litPkg.dependencies).join(', ')}`);
95+
6196
for (const [dep, depVersionReq] of Object.entries(litPkg.dependencies)) {
6297
try {
63-
const depPath = path.join('./node_modules', dep, 'package.json');
64-
if (fs.existsSync(depPath)) {
65-
const depPkgText = fs.readFileSync(depPath, 'utf8');
98+
// Try to find at root node_modules first (hoisted dependencies)
99+
const depRootPath = path.join('./node_modules', dep, 'package.json');
100+
if (fs.existsSync(depRootPath)) {
101+
const depPkgText = fs.readFileSync(depRootPath, 'utf8');
66102
const depPkg = JSON.parse(depPkgText);
67103

68104
const depVersion = depPkg.version;
69105
const depEntry = resolveEntry(depPkg);
70106

71-
importmap.imports[dep] = `https://cdn.semantic-ui.com/${dep}/${depVersion}/${depEntry}`;
72-
console.log(`Added Lit dependency: ${dep}@${depVersion} (${depEntry}) to importmap`);
107+
// Only add if not already in importmap
108+
if (!importmap.imports[dep]) {
109+
importmap.imports[dep] = `https://cdn.semantic-ui.com/${dep}/${depVersion}/${depEntry}`;
110+
console.log(`Added hoisted Lit dependency: ${dep}@${depVersion} (${depEntry}) to importmap`);
111+
}
73112
}
74113
} catch (err) {
75114
console.error(`Error processing dependency ${dep}:`, err.message);
@@ -85,6 +124,10 @@ try {
85124
fs.writeFileSync(`cdn/importmap-${version}.json`, JSON.stringify(importmap, null, 2));
86125
console.log(`Created importmap-${version}.json`);
87126

127+
// Log the final imports for verification
128+
console.log('Final importmap imports:');
129+
console.log(JSON.stringify(importmap.imports, null, 2));
130+
88131
// Optionally update the latest importmap if this is a release version (not a test/pre-release)
89132
if (!version.includes('-')) {
90133
console.log('This is a release version, updating latest importmap');

0 commit comments

Comments
 (0)