Skip to content

Commit 85aa2ce

Browse files
committed
Refactor process import - improve readability
1 parent dcfb237 commit 85aa2ce

File tree

2 files changed

+31
-56
lines changed

2 files changed

+31
-56
lines changed

lib/process-exports.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ const processExports = (content, exportRegistry) => {
4141
const generateExportStatements = (exportRegistry) => {
4242
if (exportRegistry.size === 0) return '';
4343
const names = Array.from(exportRegistry);
44-
if (names.length === 1) return `export { ${names[0]} };\n`;
4544
const exportsList = names.map((name) => ` ${name}`).join(',\n');
4645
return `export {\n${exportsList},\n};\n`;
4746
};

lib/process-imports.js

Lines changed: 31 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -69,19 +69,6 @@ const parseNamedImports = (bindings) => {
6969
return parts;
7070
};
7171

72-
const ensureImportEntry = (importRegistry, specifier) => {
73-
if (importRegistry.has(specifier)) return importRegistry.get(specifier);
74-
75-
const entry = {
76-
defaultNames: new Set(),
77-
named: new Set(),
78-
isSideEffect: false,
79-
};
80-
importRegistry.set(specifier, entry);
81-
82-
return entry;
83-
};
84-
8572
const isValidSpecifier = (specifier, filename, importStatement) => {
8673
if (specifier.startsWith('node:') || NODE_BUILTINS.has(specifier)) {
8774
console.error(
@@ -106,7 +93,14 @@ const processImports = (content, filename, importRegistry) => {
10693
const { specifier, defaultName, namedImports } = groups;
10794

10895
if (isValidSpecifier(specifier, filename, match)) {
109-
const entry = ensureImportEntry(importRegistry, specifier);
96+
if (!importRegistry.has(specifier)) {
97+
importRegistry.set(specifier, {
98+
defaultNames: new Set(),
99+
named: new Set(),
100+
isSideEffect: false,
101+
});
102+
}
103+
const entry = importRegistry.get(specifier);
110104

111105
if (pattern.type === 'default') {
112106
entry.defaultNames.add(defaultName);
@@ -124,49 +118,31 @@ const processImports = (content, filename, importRegistry) => {
124118
return result;
125119
};
126120

121+
const generateEntryStatements = (
122+
specifier,
123+
{ isSideEffect, defaultNames, named },
124+
) => {
125+
const namedParts = Array.from(named);
126+
const sideEffect = isSideEffect ? [`import '${specifier}';`] : [];
127+
const defaultStmts = Array.from(defaultNames).map(
128+
(name) => `import ${name} from '${specifier}';`,
129+
);
130+
const namedStmt =
131+
namedParts.length > 0
132+
? [`import { ${namedParts.join(', ')} } from '${specifier}';`]
133+
: [];
134+
return [...sideEffect, ...defaultStmts, ...namedStmt];
135+
};
136+
127137
const generateImportStatements = (importRegistry) => {
128138
if (importRegistry.size === 0) return '';
129-
const importStatements = [];
130-
131-
for (const [depName, entry] of importRegistry.entries()) {
132-
const specifier = `./${depName}.js`;
133-
const { isSideEffect, defaultNames, named } = entry;
134-
135-
if (isSideEffect) importStatements.push(`import '${specifier}';`);
136-
137-
const namedParts = Array.from(named);
138-
139-
if (defaultNames.size === 0 && namedParts.length === 0) continue;
140-
141-
// when different files import the same module with different default names
142-
if (defaultNames.size > 1) {
143-
// respect each defaultName to not break concatenated code
144-
for (const defaultName of defaultNames) {
145-
importStatements.push(`import ${defaultName} from '${specifier}';`);
146-
}
147-
if (namedParts.length > 0) {
148-
importStatements.push(
149-
`import { ${namedParts.join(', ')} } from '${specifier}';`,
150-
);
151-
}
152-
continue;
153-
}
154-
155-
const [defaultName] = defaultNames;
156-
let stmt;
157-
if (defaultName && namedParts.length > 0) {
158-
stmt =
159-
`import ${defaultName}, { ${namedParts.join(', ')} } ` +
160-
`from '${specifier}';`;
161-
} else if (defaultName) {
162-
stmt = `import ${defaultName} from '${specifier}';`;
163-
} else {
164-
stmt = `import { ${namedParts.join(', ')} } from '${specifier}';`;
165-
}
166-
importStatements.push(stmt);
167-
}
168-
169-
return importStatements.join('\n') + '\n\n';
139+
return (
140+
Array.from(importRegistry.entries())
141+
.flatMap(([depName, entry]) =>
142+
generateEntryStatements(`./${depName}.js`, entry),
143+
)
144+
.join('\n') + '\n\n'
145+
);
170146
};
171147

172148
module.exports = {

0 commit comments

Comments
 (0)