Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
"index:commands": "node --import=@poppinss/ts-exec toolkit/main.js index build/commands"
},
"devDependencies": {
"@adonisjs/assembler": "^8.0.0-next.19",
"@adonisjs/assembler": "^8.0.0-next.21",
"@adonisjs/eslint-config": "^3.0.0-next.4",
"@adonisjs/prettier-config": "^1.4.5",
"@adonisjs/tsconfig": "^2.0.0-next.3",
Expand Down
27 changes: 23 additions & 4 deletions src/assembler_hooks/index_entities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,25 @@ import { outputTransformerDataObjects } from '../utils.ts'
*/
export function indexEntities(entities: IndexEntitiesConfig = {}) {
const events = Object.assign(
{ enabled: true, source: 'app/events', importAlias: '#events' },
{ enabled: true, source: 'app/events', importAlias: '#events', skipSegments: ['events'] },
entities.events
)
const listeners = Object.assign(
{ enabled: true, source: 'app/listeners', importAlias: '#listeners' },
{
enabled: true,
source: 'app/listeners',
importAlias: '#listeners',
skipSegments: ['listeners'],
},
entities.listeners
)
const controllers = Object.assign(
{ enabled: true, source: 'app/controllers', importAlias: '#controllers' },
{
enabled: true,
source: 'app/controllers',
importAlias: '#controllers',
skipSegments: ['controllers'],
},
entities.controllers
)
const transformers = Object.assign(
Expand All @@ -64,6 +74,7 @@ export function indexEntities(entities: IndexEntitiesConfig = {}) {
source: 'app/transformers',
importAlias: '#transformers',
withSharedProps: false,
skipSegments: ['transformers'],
},
entities.transformers
)
Expand All @@ -78,6 +89,7 @@ export function indexEntities(entities: IndexEntitiesConfig = {}) {
as: 'barrelFile',
exportName: 'events',
importAlias: events.importAlias,
skipSegments: events.skipSegments,
output: '.adonisjs/server/events.ts',
})
}
Expand All @@ -89,6 +101,7 @@ export function indexEntities(entities: IndexEntitiesConfig = {}) {
as: 'barrelFile',
exportName: 'listeners',
importAlias: listeners.importAlias,
skipSegments: listeners.skipSegments,
output: '.adonisjs/server/listeners.ts',
})
}
Expand All @@ -100,6 +113,7 @@ export function indexEntities(entities: IndexEntitiesConfig = {}) {
as: 'barrelFile',
exportName: 'controllers',
importAlias: controllers.importAlias,
skipSegments: controllers.skipSegments,
removeSuffix: 'controller',
output: '.adonisjs/server/controllers.ts',
})
Expand All @@ -112,8 +126,13 @@ export function indexEntities(entities: IndexEntitiesConfig = {}) {
as(vfs, buffer, __, helpers) {
const transformersList = vfs.asTree({
transformKey(key) {
const segments = key.split('/')
let segments = key.split('/')
const baseName = segments.pop()!

if (transformers.skipSegments?.length) {
segments = segments.filter((s) => !transformers.skipSegments!.includes(s))
}

return [
...segments.map((segment) => stringHelpers.pascalCase(segment)),
stringHelpers.create(baseName).removeSuffix('transformer').pascalCase(),
Expand Down
8 changes: 8 additions & 0 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,8 @@ export type IndexEntitiesConfig = {
importAlias?: string
/** Glob patterns for matching controller files */
glob?: string[]
/** Path segments to skip from generated keys. Defaults to ['controllers'] */
skipSegments?: string[]
}
/** Configuration for listeners indexing */
listeners?: {
Expand All @@ -391,6 +393,8 @@ export type IndexEntitiesConfig = {
importAlias?: string
/** Glob patterns for matching listener files */
glob?: string[]
/** Path segments to skip from generated keys. Defaults to ['listeners'] */
skipSegments?: string[]
}
/** Configuration for events indexing */
events?: {
Expand All @@ -402,12 +406,16 @@ export type IndexEntitiesConfig = {
importAlias?: string
/** Glob patterns for matching event files */
glob?: string[]
/** Path segments to skip from generated keys. Defaults to ['events'] */
skipSegments?: string[]
}
transformers?: {
enabled?: boolean
withSharedProps?: boolean
source?: string
importAlias?: string
glob?: string[]
/** Path segments to skip from generated keys. Defaults to ['transformers'] */
skipSegments?: string[]
}
}
105 changes: 105 additions & 0 deletions tests/index_generator.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -291,4 +291,109 @@ test.group('Index generator', () => {
"
`)
})

test('skip segments from controllers index with module-based folder structure', async ({
assert,
fs,
}) => {
const cliUi = Kernel.create().ui
cliUi.switchMode('raw')

await fs.create('app/identity/controllers/auth_controller.ts', '')
await fs.create('app/identity/controllers/users_controller.ts', '')
await fs.create('app/billing/controllers/invoices_controller.ts', '')

const generator = new IndexGenerator(stringHelpers.toUnixSlash(fs.basePath), cliUi.logger)
const indexer = indexEntities({
controllers: {
enabled: true,
source: 'app',
glob: ['**/controllers/*_controller.ts'],
importAlias: '#app',
},
events: {
enabled: false,
},
listeners: {
enabled: false,
},
transformers: {
enabled: false,
},
})

indexer.run({} as any, generator)
await generator.generate()

await assert.fileExists('.adonisjs/server/controllers.ts')
assert.snapshot(await fs.contents('.adonisjs/server/controllers.ts')).matchInline(`
"export const controllers = {
billing: {
Invoices: () => import('#app/billing/controllers/invoices_controller'),
},
identity: {
Auth: () => import('#app/identity/controllers/auth_controller'),
Users: () => import('#app/identity/controllers/users_controller'),
},
}
"
`)
await assert.fileNotContains('.adonisjs/server/controllers.ts', [`controllers: {`])
})

test('skip segments from transformers index with module-based folder structure', async ({
assert,
fs,
}) => {
const cliUi = Kernel.create().ui
cliUi.switchMode('raw')

await fs.create('app/identity/transformers/user_transformer.ts', '')
await fs.create('app/billing/transformers/invoice_transformer.ts', '')

const generator = new IndexGenerator(stringHelpers.toUnixSlash(fs.basePath), cliUi.logger)
const indexer = indexEntities({
controllers: {
enabled: false,
},
events: {
enabled: false,
},
listeners: {
enabled: false,
},
transformers: {
enabled: true,
source: 'app',
glob: ['**/transformers/*_transformer.ts'],
importAlias: '#app',
},
})

indexer.run({} as any, generator)
await generator.generate()

await assert.fileExists('.adonisjs/client/data.d.ts')
assert.snapshot(await fs.contents('.adonisjs/client/data.d.ts')).matchInline(`
"import type { InferData, InferVariants } from '@adonisjs/core/types/transformers'
import type BillingInvoiceTransformer from '#app/billing/transformers/invoice_transformer'
import type IdentityUserTransformer from '#app/identity/transformers/user_transformer'

export namespace Data {
export namespace Billing {
export type Invoice = InferData<BillingInvoiceTransformer>
export namespace Invoice {
export type Variants = InferVariants<BillingInvoiceTransformer>
}
}
export namespace Identity {
export type User = InferData<IdentityUserTransformer>
export namespace User {
export type Variants = InferVariants<IdentityUserTransformer>
}
}
}
"
`)
})
})
Loading