Skip to content

Commit

Permalink
feat: Support reexport with custom output pattern
Browse files Browse the repository at this point in the history
  • Loading branch information
sallomendo committed Mar 26, 2022
1 parent 6ea6bad commit 2786894
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 4 deletions.
43 changes: 39 additions & 4 deletions src/handlers/re-export.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,42 @@ function beforeGenerateFiles(args: EventArguments) {
const rootDirectory = project.getDirectoryOrThrow(output);

if ([ReExport.Directories, ReExport.All].includes(config.reExport)) {
for (const directory of rootDirectory.getDirectories()) {
for (const directory of rootDirectory.getDescendantDirectories()) {
let indexSourceFile: SourceFile | undefined;

const exportDeclarations: ExportDeclarationStructure[] = directory
.getSourceFiles()
.filter(sourceFile => {
return sourceFile.getBaseName() !== 'index.ts';
})
.map(sourcesFile => getExportDeclaration(directory, sourcesFile));
directory.createSourceFile(
'index.ts',

if (exportDeclarations.length > 0) {
indexSourceFile = directory.createSourceFile(
'index.ts',
{
statements: exportDeclarations,
},
{
overwrite: true,
},
);
}

if (indexSourceFile) {
continue;
}

const namespaceExportDeclarations: ExportDeclarationStructure[] = directory
.getDirectories()
.map(sourceDirectory =>
getNamespaceExportDeclaration(directory, sourceDirectory),
);

project.createSourceFile(
`${directory.getPath()}/index.ts`,
{
statements: exportDeclarations,
statements: namespaceExportDeclarations,
},
{
overwrite: true,
Expand Down Expand Up @@ -87,3 +112,13 @@ function getExportDeclaration(
moduleSpecifier: directory.getRelativePathAsModuleSpecifierTo(sourceFile),
};
}

function getNamespaceExportDeclaration(
directory: Directory,
sourceDirectory: Directory,
): ExportDeclarationStructure {
return {
kind: StructureKind.ExportDeclaration,
moduleSpecifier: directory.getRelativePathAsModuleSpecifierTo(sourceDirectory),
};
}
31 changes: 31 additions & 0 deletions src/test/generate.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1548,6 +1548,37 @@ describe('reexport option', () => {
});
});

describe('reexport directories with output file pattern', () => {
before(async () => {
({ project, sourceFiles } = await testGenerate({
schema: `
model User {
id Int @id
}`,
options: [
'reExport = Directories',
`outputFilePattern = "{model}/{plural.type}/{name}.{type}.ts"`,
],
}));
});

it('user should export plural types', () => {
sourceFile = project.getSourceFile(s =>
s.getFilePath().endsWith('/user/index.ts'),
)!;

for (const exp of [
`export * from './args';`,
`export * from './enums';`,
`export * from './inputs';`,
`export * from './models';`,
`export * from './outputs';`,
]) {
expect(sourceFile.getText()).toContain(exp);
}
});
});

describe('reexport single', () => {
before(async () => {
({ project, sourceFiles } = await testGenerate({
Expand Down

0 comments on commit 2786894

Please sign in to comment.