diff --git a/src/assembler_hooks/index_entities.ts b/src/assembler_hooks/index_entities.ts
index 169ff559..dde5c315 100644
--- a/src/assembler_hooks/index_entities.ts
+++ b/src/assembler_hooks/index_entities.ts
@@ -31,6 +31,11 @@ import { outputTransformerDataObjects } from '../utils.ts'
* source: 'app/custom-events',
* importAlias: '#custom-events'
* },
+ * assemblers: {
+ * enabled: true,
+ * withSharedProps: true,
+ * inertiaMiddlewareImportPath: '#middleware/inertia_middleware'
+ * },
* controllers: {
* enabled: false
* }
@@ -82,6 +87,7 @@ export function indexEntities(entities: IndexEntitiesConfig = {}) {
source: 'app/transformers',
importAlias: '#transformers',
withSharedProps: false,
+ inertiaMiddlewareImportPath: '#middleware/inertia_middleware',
skipSegments: ['transformers'],
output: '.adonisjs/client/data.d.ts',
},
@@ -166,7 +172,12 @@ export function indexEntities(entities: IndexEntitiesConfig = {}) {
},
transformValue: helpers.toImportPath,
})
- outputTransformerDataObjects(transformersList, buffer, transformers.withSharedProps)
+ outputTransformerDataObjects(
+ transformersList,
+ buffer,
+ transformers.withSharedProps,
+ transformers.inertiaMiddlewareImportPath
+ )
},
importAlias: transformers.importAlias,
output: transformers.output,
diff --git a/src/types.ts b/src/types.ts
index 575cc212..e1e7ae21 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -353,6 +353,7 @@ export type IndexEntitiesConfig = {
enabled?: boolean
/** Whether to include shared props in transformers */
withSharedProps?: boolean
+ inertiaMiddlewareImportPath?: string
/** Source directory for transformers */
source?: string
/** Import alias for transformers */
diff --git a/src/utils.ts b/src/utils.ts
index d95ab44e..65d5e482 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -84,7 +84,8 @@ export async function importTypeScript(
export async function outputTransformerDataObjects(
transformersList: RecursiveFileTree,
buffer: Assembler.FileBuffer,
- withSharedProps: boolean
+ withSharedProps: boolean,
+ inertiaMiddlewareImportPath: string = '#middleware/inertia_middleware'
) {
const importsBuffer = buffer.create()
importsBuffer.write(`/// `)
@@ -128,7 +129,7 @@ export async function outputTransformerDataObjects(
generateNamespaceTree(transformersList, [])
if (withSharedProps) {
- importsBuffer.write(`import type InertiaMiddleware from '#middleware/inertia_middleware'`)
+ importsBuffer.write(`import type InertiaMiddleware from '${inertiaMiddlewareImportPath}'`)
buffer.write('export type SharedProps = InferSharedProps')
}
diff --git a/tests/index_generator.spec.ts b/tests/index_generator.spec.ts
index bcd2a636..2d0c8e04 100644
--- a/tests/index_generator.spec.ts
+++ b/tests/index_generator.spec.ts
@@ -246,6 +246,68 @@ test.group('Index generator', () => {
)
})
+ test('generate transformers index with shared props and custom inertia middleware import path', async ({
+ assert,
+ fs,
+ }) => {
+ const cliUi = Kernel.create().ui
+ cliUi.switchMode('raw')
+
+ await fs.create('app/transformers/user_transformer.ts', '')
+ await fs.create('app/transformers/blog/post_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,
+ withSharedProps: true,
+ inertiaMiddlewareImportPath: '#core/middleware/inertia_middleware',
+ },
+ })
+
+ indexer.run({} as any, {} 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 { InferSharedProps } from '@adonisjs/inertia/types'
+ import type BlogPostTransformer from '#transformers/blog/post_transformer'
+ import type UserTransformer from '#transformers/user_transformer'
+ import type InertiaMiddleware from '#core/middleware/inertia_middleware'
+
+ export namespace Data {
+ export namespace Blog {
+ export type Post = InferData
+ export namespace Post {
+ export type Variants = InferVariants
+ }
+ }
+ export type User = InferData
+ export namespace User {
+ export type Variants = InferVariants
+ }
+ export type SharedProps = InferSharedProps
+ }
+ "
+ `)
+ assert.isDefined(
+ cliUi.logger
+ .getLogs()
+ .find(({ message }) => message.includes('[ blue(info) ] codegen: created'))
+ )
+ })
+
test('generate transformers index with deeply nested directories', async ({ assert, fs }) => {
const cliUi = Kernel.create().ui
cliUi.switchMode('raw')