Skip to content

Commit 86ecd0a

Browse files
authored
Merge pull request #5 from laravel/default-aliases
Include default aliases
2 parents 84bbc88 + 44e52a3 commit 86ecd0a

File tree

2 files changed

+89
-1
lines changed

2 files changed

+89
-1
lines changed

src/index.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ export default function laravel(config: string|string[]|Partial<PluginConfig>):
5555
let viteDevServerUrl: string
5656
let resolvedConfig: ResolvedConfig
5757

58+
const ziggy = 'vendor/tightenco/ziggy/dist/index.es.js';
59+
const defaultAliases: Record<string, string> = {
60+
...(fs.existsSync(ziggy) ? { ziggy } : undefined),
61+
'@': '/resources/js',
62+
};
63+
5864
return {
5965
name: 'laravel',
6066
enforce: 'post',
@@ -76,6 +82,20 @@ export default function laravel(config: string|string[]|Partial<PluginConfig>):
7682
server: {
7783
origin: '__laravel_vite_placeholder__',
7884
},
85+
resolve: {
86+
alias: Array.isArray(userConfig.resolve?.alias)
87+
? [
88+
...userConfig.resolve?.alias ?? [],
89+
...Object.keys(defaultAliases).map(alias => ({
90+
find: alias,
91+
replacement: defaultAliases[alias]
92+
}))
93+
]
94+
: {
95+
...defaultAliases,
96+
...userConfig.resolve?.alias,
97+
}
98+
}
7999
}
80100
},
81101
configResolved(config) {

tests/index.test.ts

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1-
import { describe, expect, it } from 'vitest'
1+
import { afterEach, beforeEach, describe, expect, it, MockedFunction, vi } from 'vitest'
22
import laravel from '../src'
3+
import fs from 'fs'
34

45
describe('laravel-vite-plugin', () => {
6+
afterEach(() => {
7+
vi.clearAllMocks()
8+
})
9+
510
it('accepts a single input', () => {
611
const plugin = laravel('resources/js/app.js')
712

@@ -128,6 +133,69 @@ describe('laravel-vite-plugin', () => {
128133
expect(ssrConfig.build.outDir).toBe('ssr-output/test')
129134
})
130135

136+
it('provides an @ alias by default', () => {
137+
const plugin = laravel('resources/js/app.js')
138+
139+
const config = plugin.config({}, { command: 'build', mode: 'development' })
140+
141+
expect(config.resolve.alias['@']).toBe('/resources/js')
142+
})
143+
144+
it('respects a users existing @ alias', () => {
145+
const plugin = laravel('resources/js/app.js')
146+
147+
const config = plugin.config({
148+
resolve: {
149+
alias: {
150+
'@': '/somewhere/else'
151+
}
152+
}
153+
}, { command: 'build', mode: 'development' })
154+
155+
expect(config.resolve.alias['@']).toBe('/somewhere/else')
156+
})
157+
158+
it('appends an Alias object when using an alias array', () => {
159+
const plugin = laravel('resources/js/app.js')
160+
161+
const config = plugin.config({
162+
resolve: {
163+
alias: [
164+
{ find: '@', replacement: '/something/else' }
165+
],
166+
}
167+
}, { command: 'build', mode: 'development' })
168+
169+
expect(config.resolve.alias).toEqual([
170+
{ find: '@', replacement: '/something/else' },
171+
{ find: '@', replacement: '/resources/js' },
172+
])
173+
})
174+
175+
it('provides an ziggy alias when installed', () => {
176+
vi.spyOn(fs, 'existsSync').mockReturnValueOnce(true)
177+
178+
const plugin = laravel('resources/js/app.js')
179+
180+
const config = plugin.config({}, { command: 'build', mode: 'development' })
181+
182+
expect(config.resolve.alias['ziggy']).toBe('vendor/tightenco/ziggy/dist/index.es.js')
183+
})
184+
185+
it('provides an ziggy alias when installed and using an alias array', () => {
186+
vi.spyOn(fs, 'existsSync').mockReturnValueOnce(true)
187+
188+
const plugin = laravel('resources/js/app.js')
189+
190+
const config = plugin.config({
191+
resolve: {
192+
alias: [],
193+
}
194+
}, { command: 'build', mode: 'development' })
195+
196+
expect(config.resolve.alias).toContainEqual({ find: 'ziggy', replacement: 'vendor/tightenco/ziggy/dist/index.es.js' })
197+
})
198+
131199
it('prevents empty input', () => {
132200
/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */
133201
/* @ts-ignore */

0 commit comments

Comments
 (0)