Browse Source

fix: use named imports and exports

pull/6317/head
Arman Ozak 6 years ago
parent
commit
9560bd57ed
  1. 81
      npm/ng-packs/packages/schematics/src/utils/barrel.ts

81
npm/ng-packs/packages/schematics/src/utils/barrel.ts

@ -16,15 +16,40 @@ export function createBarrelsGenerator(rootPath: string) {
export function generateBarrelFromPath(tree: Tree, indexPath: string) { export function generateBarrelFromPath(tree: Tree, indexPath: string) {
const saveFile = createFileSaver(tree); const saveFile = createFileSaver(tree);
const dir = tree.getDir(indexPath);
const _exports: string[] = []; const asterisk = collectAsteriskBarrel(tree, indexPath);
const named = collectNamedBarrel(tree, indexPath);
dir.subfiles.forEach(fragment => { if (asterisk.exports.length + named.exports.length)
if (!fragment.endsWith('.ts') || fragment === 'index.ts') return; saveFile(indexPath + '/index.ts', generateBarrelContent(asterisk, named));
}
_exports.push(`export * from './${fragment.replace(/\.ts$/, '')}';`); function generateBarrelContent(asterisk: AsteriskBarrel, named: NamedBarrel): string {
}); const namedImports = !named.imports.length
? ''
: named.imports.join(`
`) +
`
`;
const namedExports = !named.exports.length
? ''
: `export { ${named.exports.join(', ')} };
`;
const asteriskExports = !asterisk.exports.length
? ''
: asterisk.exports.join(`
`) +
`
`;
return namedImports + asteriskExports + namedExports;
}
function collectNamedBarrel(tree: Tree, indexPath: string) {
const dir = tree.getDir(indexPath);
const barrel = new NamedBarrel();
dir.subdirs.forEach(fragment => { dir.subdirs.forEach(fragment => {
const subDirPath = indexPath + '/' + fragment; const subDirPath = indexPath + '/' + fragment;
@ -33,18 +58,42 @@ export function generateBarrelFromPath(tree: Tree, indexPath: string) {
subDir.visit(() => (hasFiles = true)); subDir.visit(() => (hasFiles = true));
if (!hasFiles) return; if (!hasFiles) return;
_exports.push(`export * as ${strings.classify(fragment)} from './${fragment}';`); const namespaceFragment = strings.classify(fragment);
barrel.imports.push(`import * as ${namespaceFragment} from './${fragment}';`);
barrel.exports.push(namespaceFragment);
generateBarrelFromPath(tree, subDirPath); generateBarrelFromPath(tree, subDirPath);
}); });
_exports.sort(); barrel.imports.sort();
barrel.exports.sort();
if (_exports.length) return barrel;
saveFile( }
indexPath + '/index.ts',
_exports.join(` function collectAsteriskBarrel(tree: Tree, indexPath: string) {
`) + const dir = tree.getDir(indexPath);
` const barrel = new AsteriskBarrel();
`,
); dir.subfiles.forEach(fragment => {
if (!fragment.endsWith('.ts') || fragment === 'index.ts') return;
barrel.exports.push(`export * from './${fragment.replace(/\.ts$/, '')}';`);
});
barrel.exports.sort();
return barrel;
}
abstract class Barrel {
imports: string[] = [];
exports: string[] = [];
}
class AsteriskBarrel extends Barrel {
type = 'Asterisk' as const;
}
class NamedBarrel extends Barrel {
type = 'Named' as const;
} }

Loading…
Cancel
Save