Skip to content

Commit

Permalink
fix: adapt react package import paths missed during migration (#2589)
Browse files Browse the repository at this point in the history
This PR fixes the remaining mistaken imports in the React package.
  • Loading branch information
kyubisation committed Apr 16, 2024
1 parent 0f2f401 commit 0781c6a
Showing 1 changed file with 42 additions and 30 deletions.
72 changes: 42 additions & 30 deletions tools/manifest/custom-elements-manifest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,16 @@
export default {
litelement: true,
globs: ['src/components/**/*.ts'],
exclude: ['**/*[.-]{stories,spec,e2e,test-utils}.ts', '**/private/*', 'vite.config.ts'],
exclude: [
'**/*[.-]{stories,spec,e2e,test-utils}.ts',
'**/private/*',
'**/private.ts',
'vite.config.ts',
],
outdir: 'dist/components',
dependencies: false,
packagejson: false,
/** @type {import('@custom-elements-manifest/analyzer').Plugin[]} */
plugins: [
{
analyzePhase({ ts, node, moduleDoc }) {
Expand All @@ -26,19 +32,21 @@ export default {
}
},
packageLinkPhase({ customElementsManifest }) {
function fixModulePaths(node) {
function fixModulePaths(node, pathAction) {
for (const [key, value] of Object.entries(node)) {
if (Array.isArray(value)) {
value.forEach(fixModulePaths);
value.forEach((v) => fixModulePaths(v, pathAction));
} else if (typeof value === 'object') {
fixModulePaths(value);
fixModulePaths(value, pathAction);
} else if (key === 'module' || key === 'path') {
node[key] = value.replace(/^\/?src\/components\//, '').replace(/.ts$/, '.js');
node[key] = pathAction(value);
}
}
}
const fixTsPaths = (value) =>
value.replace(/^\/?src\/components\//, '').replace(/.ts$/, '.js');
for (const module of customElementsManifest.modules) {
fixModulePaths(module);
fixModulePaths(module, fixTsPaths);
for (const declaration of module.declarations.filter((d) => d.kind === 'class')) {
if (declaration.name === 'SbbIconBase') {
delete declaration.customElement;
Expand All @@ -54,36 +62,40 @@ export default {
}
}
}
const isInlinedEntryPoint = (entry) => {
const parts = entry.declaration.package?.split(/[./]+/) ?? [];
return (
entry.name === '*' &&
entry.declaration.name === '*' &&
parts.length === 4 &&
parts[0] === '' &&
parts[1] === parts[2] &&
parts[3] === 'js'
);
};
const reexportModules = [];
const moduleMapping = new Map();
for (const moduleEntry of customElementsManifest.modules) {
if (
!moduleEntry.declarations.length &&
moduleEntry.exports.length === 1 &&
isInlinedEntryPoint(moduleEntry.exports[0])
!reexportModules.includes(moduleEntry) &&
moduleEntry.exports?.length &&
moduleEntry.exports.some((e) => e.name !== '*')
) {
const entry = moduleEntry.exports.pop();
const path = `${moduleEntry.path.replace(/\/[\w-]+.js/, '/').replace(/[\w-]+.js$/, '')}${entry.declaration.package.substring(2)}`;
const compiledModule = customElementsManifest.modules.find((m) => m.path === path);
moduleEntry.declarations.push(...compiledModule.declarations);
for (const entry of compiledModule.exports) {
entry.declaration.module = entry.declaration.module.replace(/\/[\w-]+.js/, '.js');
}
moduleEntry.exports.push(...compiledModule.exports);
customElementsManifest.modules = customElementsManifest.modules.filter(
(m) => m !== compiledModule,
const reexportPath = moduleEntry.path.replace(/\/[\w-]+\.js/, '.js');
const reexportModule = customElementsManifest.modules.find(
(m) => m.path === reexportPath,
);
if (reexportModule) {
moduleMapping.set(moduleEntry.path, reexportModule.path);
reexportModules.push(reexportModule);
reexportModule.declarations.push(...moduleEntry.declarations);
for (const entry of moduleEntry.exports) {
entry.declaration.module = reexportModule.path;
}
reexportModule.exports = reexportModule.exports.filter(
(e) =>
e.name !== '*' ||
moduleEntry.path ===
reexportModule.path.replace(/\/[\w-]+\.js/, '') +
e.declaration.package.substring(2),
);
reexportModule.exports.push(...moduleEntry.exports);
customElementsManifest.modules = customElementsManifest.modules.filter(
(m) => m !== moduleEntry,
);
}
}
}
fixModulePaths(customElementsManifest, (value) => moduleMapping.get(value) ?? value);
},
},
],
Expand Down

0 comments on commit 0781c6a

Please sign in to comment.