diff --git a/npm/ng-packs/packages/schematics/src/utils/barrel.ts b/npm/ng-packs/packages/schematics/src/utils/barrel.ts new file mode 100644 index 0000000000..299876f875 --- /dev/null +++ b/npm/ng-packs/packages/schematics/src/utils/barrel.ts @@ -0,0 +1,43 @@ +import { strings } from '@angular-devkit/core'; +import { Tree } from '@angular-devkit/schematics'; +import { PROXY_PATH } from '../constants'; +import { createFileSaver } from './file'; + +export function createProxyIndexGenerator(targetPath: string) { + return createBarrelsGenerator(targetPath + PROXY_PATH); +} + +export function createBarrelsGenerator(rootPath: string) { + return (tree: Tree) => { + generateBarrelFromPath(tree, rootPath); + return tree; + }; +} + +export function generateBarrelFromPath(tree: Tree, indexPath: string) { + const saveFile = createFileSaver(tree); + const dir = tree.getDir(indexPath); + + let _exports = ''; + + dir.subfiles.forEach(fragment => { + if (!fragment.endsWith('.ts')) return; + + _exports += `export * from './${fragment.replace(/\.ts$/, '')}'; +`; + }); + + dir.subdirs.forEach(fragment => { + const subDirPath = indexPath + '/' + fragment; + const subDir = tree.getDir(subDirPath); + let hasFiles = false; + subDir.visit(() => (hasFiles = true)); + if (!hasFiles) return; + + _exports += `export * as ${strings.classify(fragment)} from './${fragment}'; +`; + generateBarrelFromPath(tree, subDirPath); + }); + + if (_exports) saveFile(indexPath + '/index.ts', _exports); +} diff --git a/npm/ng-packs/packages/schematics/src/utils/index.ts b/npm/ng-packs/packages/schematics/src/utils/index.ts index ea6bbad964..178920dccc 100644 --- a/npm/ng-packs/packages/schematics/src/utils/index.ts +++ b/npm/ng-packs/packages/schematics/src/utils/index.ts @@ -1,6 +1,7 @@ export * from './angular'; export * from './api'; export * from './ast'; +export * from './barrel'; export * from './common'; export * from './enum'; export * from './file';