Skip to content

Commit b21b062

Browse files
committed
fix: skip segments
1 parent f037d08 commit b21b062

File tree

3 files changed

+109
-4
lines changed

3 files changed

+109
-4
lines changed

src/assembler_hooks/index_entities.ts

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,25 @@ import { outputTransformerDataObjects } from '../utils.ts'
4747
*/
4848
export function indexEntities(entities: IndexEntitiesConfig = {}) {
4949
const events = Object.assign(
50-
{ enabled: true, source: 'app/events', importAlias: '#events' },
50+
{ enabled: true, source: 'app/events', importAlias: '#events', skipSegments: ['events'] },
5151
entities.events
5252
)
5353
const listeners = Object.assign(
54-
{ enabled: true, source: 'app/listeners', importAlias: '#listeners' },
54+
{
55+
enabled: true,
56+
source: 'app/listeners',
57+
importAlias: '#listeners',
58+
skipSegments: ['listeners'],
59+
},
5560
entities.listeners
5661
)
5762
const controllers = Object.assign(
58-
{ enabled: true, source: 'app/controllers', importAlias: '#controllers' },
63+
{
64+
enabled: true,
65+
source: 'app/controllers',
66+
importAlias: '#controllers',
67+
skipSegments: ['controllers'],
68+
},
5969
entities.controllers
6070
)
6171
const transformers = Object.assign(
@@ -64,6 +74,7 @@ export function indexEntities(entities: IndexEntitiesConfig = {}) {
6474
source: 'app/transformers',
6575
importAlias: '#transformers',
6676
withSharedProps: false,
77+
skipSegments: ['transformers'],
6778
},
6879
entities.transformers
6980
)
@@ -78,6 +89,7 @@ export function indexEntities(entities: IndexEntitiesConfig = {}) {
7889
as: 'barrelFile',
7990
exportName: 'events',
8091
importAlias: events.importAlias,
92+
skipSegments: events.skipSegments,
8193
output: '.adonisjs/server/events.ts',
8294
})
8395
}
@@ -89,6 +101,7 @@ export function indexEntities(entities: IndexEntitiesConfig = {}) {
89101
as: 'barrelFile',
90102
exportName: 'listeners',
91103
importAlias: listeners.importAlias,
104+
skipSegments: listeners.skipSegments,
92105
output: '.adonisjs/server/listeners.ts',
93106
})
94107
}
@@ -100,6 +113,7 @@ export function indexEntities(entities: IndexEntitiesConfig = {}) {
100113
as: 'barrelFile',
101114
exportName: 'controllers',
102115
importAlias: controllers.importAlias,
116+
skipSegments: controllers.skipSegments,
103117
removeSuffix: 'controller',
104118
output: '.adonisjs/server/controllers.ts',
105119
})
@@ -112,8 +126,13 @@ export function indexEntities(entities: IndexEntitiesConfig = {}) {
112126
as(vfs, buffer, __, helpers) {
113127
const transformersList = vfs.asTree({
114128
transformKey(key) {
115-
const segments = key.split('/')
129+
let segments = key.split('/')
116130
const baseName = segments.pop()!
131+
132+
if (transformers.skipSegments?.length) {
133+
segments = segments.filter((s) => !transformers.skipSegments!.includes(s))
134+
}
135+
117136
return [
118137
...segments.map((segment) => stringHelpers.pascalCase(segment)),
119138
stringHelpers.create(baseName).removeSuffix('transformer').pascalCase(),

src/types.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,8 @@ export type IndexEntitiesConfig = {
380380
importAlias?: string
381381
/** Glob patterns for matching controller files */
382382
glob?: string[]
383+
/** Path segments to skip from generated keys. Defaults to ['controllers'] */
384+
skipSegments?: string[]
383385
}
384386
/** Configuration for listeners indexing */
385387
listeners?: {
@@ -391,6 +393,8 @@ export type IndexEntitiesConfig = {
391393
importAlias?: string
392394
/** Glob patterns for matching listener files */
393395
glob?: string[]
396+
/** Path segments to skip from generated keys. Defaults to ['listeners'] */
397+
skipSegments?: string[]
394398
}
395399
/** Configuration for events indexing */
396400
events?: {
@@ -402,12 +406,16 @@ export type IndexEntitiesConfig = {
402406
importAlias?: string
403407
/** Glob patterns for matching event files */
404408
glob?: string[]
409+
/** Path segments to skip from generated keys. Defaults to ['events'] */
410+
skipSegments?: string[]
405411
}
406412
transformers?: {
407413
enabled?: boolean
408414
withSharedProps?: boolean
409415
source?: string
410416
importAlias?: string
411417
glob?: string[]
418+
/** Path segments to skip from generated keys. Defaults to ['transformers'] */
419+
skipSegments?: string[]
412420
}
413421
}

tests/index_generator.spec.ts

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,4 +291,82 @@ test.group('Index generator', () => {
291291
"
292292
`)
293293
})
294+
295+
test('skip segments from controllers index with module-based folder structure', async ({
296+
assert,
297+
fs,
298+
}) => {
299+
const cliUi = Kernel.create().ui
300+
cliUi.switchMode('raw')
301+
302+
await fs.create('app/identity/controllers/auth_controller.ts', '')
303+
await fs.create('app/identity/controllers/users_controller.ts', '')
304+
await fs.create('app/billing/controllers/invoices_controller.ts', '')
305+
306+
const generator = new IndexGenerator(stringHelpers.toUnixSlash(fs.basePath), cliUi.logger)
307+
const indexer = indexEntities({
308+
controllers: {
309+
enabled: true,
310+
source: 'app',
311+
glob: ['**/controllers/*_controller.ts'],
312+
importAlias: '#app',
313+
},
314+
events: {
315+
enabled: false,
316+
},
317+
listeners: {
318+
enabled: false,
319+
},
320+
transformers: {
321+
enabled: false,
322+
},
323+
})
324+
325+
indexer.run({} as any, generator)
326+
await generator.generate()
327+
328+
await assert.fileExists('.adonisjs/server/controllers.ts')
329+
assert.snapshot(await fs.contents('.adonisjs/server/controllers.ts')).matchInline(`
330+
// TO REGENERATE
331+
`)
332+
await assert.fileNotContains('.adonisjs/server/controllers.ts', [`controllers: {`])
333+
})
334+
335+
test('skip segments from transformers index with module-based folder structure', async ({
336+
assert,
337+
fs,
338+
}) => {
339+
const cliUi = Kernel.create().ui
340+
cliUi.switchMode('raw')
341+
342+
await fs.create('app/identity/transformers/user_transformer.ts', '')
343+
await fs.create('app/billing/transformers/invoice_transformer.ts', '')
344+
345+
const generator = new IndexGenerator(stringHelpers.toUnixSlash(fs.basePath), cliUi.logger)
346+
const indexer = indexEntities({
347+
controllers: {
348+
enabled: false,
349+
},
350+
events: {
351+
enabled: false,
352+
},
353+
listeners: {
354+
enabled: false,
355+
},
356+
transformers: {
357+
enabled: true,
358+
source: 'app',
359+
glob: ['**/transformers/*_transformer.ts'],
360+
importAlias: '#app',
361+
},
362+
})
363+
364+
indexer.run({} as any, generator)
365+
await generator.generate()
366+
367+
await assert.fileExists('.adonisjs/client/data.d.ts')
368+
assert.snapshot(await fs.contents('.adonisjs/client/data.d.ts')).matchInline(`
369+
// TO REGENERATE
370+
`)
371+
})
294372
})

0 commit comments

Comments
 (0)