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) {
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 (!fragment.endsWith('.ts') || fragment === 'index.ts') return;
if (asterisk.exports.length + named.exports.length)
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 => {
const subDirPath = indexPath + '/' + fragment;
@ -33,18 +58,42 @@ export function generateBarrelFromPath(tree: Tree, indexPath: string) {
subDir.visit(() => (hasFiles = true));
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);
});
_exports.sort();
barrel.imports.sort();
barrel.exports.sort();
if (_exports.length)
saveFile(
indexPath + '/index.ts',
_exports.join(`
`) +
`
`,
);
return barrel;
}
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