@adonisjs/vite 5.0.1-next.1 → 5.0.1-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/{chunk-JIJQZOYL.js → chunk-MM7OHCLX.js} +113 -17
- package/build/{chunk-FDN2SRQF.js → chunk-TMXIREUT.js} +18 -0
- package/build/index.js +1 -1
- package/build/providers/vite_provider.d.ts +66 -6
- package/build/providers/vite_provider.js +64 -8
- package/build/src/client/config.d.ts +17 -2
- package/build/src/define_config.d.ts +9 -1
- package/build/src/plugins/edge.d.ts +14 -2
- package/build/src/utils.d.ts +23 -3
- package/build/src/vite.d.ts +109 -15
- package/build/src/vite_middleware.d.ts +20 -0
- package/build/src/vite_middleware.js +1 -1
- package/package.json +9 -9
|
@@ -17,7 +17,22 @@ var Vite = class {
|
|
|
17
17
|
#options;
|
|
18
18
|
#devServer;
|
|
19
19
|
#createServerPromise;
|
|
20
|
+
/**
|
|
21
|
+
* Indicates whether the Vite manifest file exists on disk
|
|
22
|
+
*/
|
|
20
23
|
hasManifestFile;
|
|
24
|
+
/**
|
|
25
|
+
* Creates a new Vite instance for managing asset compilation and serving
|
|
26
|
+
*
|
|
27
|
+
* @param options - Configuration options for Vite integration
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* const vite = new Vite({
|
|
31
|
+
* buildDirectory: 'build',
|
|
32
|
+
* assetsUrl: '/assets',
|
|
33
|
+
* manifestFile: 'build/manifest.json'
|
|
34
|
+
* })
|
|
35
|
+
*/
|
|
21
36
|
constructor(options) {
|
|
22
37
|
this.#options = options;
|
|
23
38
|
this.#options.assetsUrl = (this.#options.assetsUrl || "/").replace(/\/$/, "");
|
|
@@ -166,12 +181,14 @@ var Vite = class {
|
|
|
166
181
|
for (const entryPoint of jsEntrypoints) {
|
|
167
182
|
const filePath = join(server.config.root, entryPoint);
|
|
168
183
|
const entryMod = server.moduleGraph.getModuleById(string.toUnixSlash(filePath));
|
|
169
|
-
if (entryMod)
|
|
184
|
+
if (entryMod) {
|
|
185
|
+
this.#collectCss(entryMod, preloadUrls, visitedModules);
|
|
186
|
+
}
|
|
170
187
|
}
|
|
171
188
|
const elements = Array.from(preloadUrls).map(
|
|
172
189
|
(href) => this.#generateElement({
|
|
173
190
|
tag: "link",
|
|
174
|
-
attributes: { rel: "stylesheet",
|
|
191
|
+
attributes: { rel: "stylesheet", href }
|
|
175
192
|
})
|
|
176
193
|
);
|
|
177
194
|
elements.forEach((element) => cssTagsElement.add(element));
|
|
@@ -240,7 +257,24 @@ var Vite = class {
|
|
|
240
257
|
return preloadsElements.concat(tags.map(({ tag }) => tag));
|
|
241
258
|
}
|
|
242
259
|
/**
|
|
243
|
-
* Generate tags for the entry points
|
|
260
|
+
* Generate HTML tags (script and link) for the specified entry points
|
|
261
|
+
*
|
|
262
|
+
* In development mode, includes HMR script and dynamically discovers CSS files.
|
|
263
|
+
* In production mode, uses the manifest file to generate optimized tags with preloading.
|
|
264
|
+
*
|
|
265
|
+
* @param entryPoints - Single entry point or array of entry points to generate tags for
|
|
266
|
+
* @param attributes - Additional HTML attributes to apply to the generated tags
|
|
267
|
+
*
|
|
268
|
+
* @example
|
|
269
|
+
* // Generate tags for a single entry point
|
|
270
|
+
* const tags = await vite.generateEntryPointsTags('app.js')
|
|
271
|
+
*
|
|
272
|
+
* @example
|
|
273
|
+
* // Generate tags for multiple entry points with custom attributes
|
|
274
|
+
* const tags = await vite.generateEntryPointsTags(
|
|
275
|
+
* ['app.js', 'admin.js'],
|
|
276
|
+
* { defer: true }
|
|
277
|
+
* )
|
|
244
278
|
*/
|
|
245
279
|
async generateEntryPointsTags(entryPoints, attributes) {
|
|
246
280
|
entryPoints = Array.isArray(entryPoints) ? entryPoints : [entryPoints];
|
|
@@ -250,13 +284,27 @@ var Vite = class {
|
|
|
250
284
|
return this.#generateEntryPointsTagsWithManifest(entryPoints, attributes);
|
|
251
285
|
}
|
|
252
286
|
/**
|
|
253
|
-
* Returns the
|
|
287
|
+
* Returns the base URL for serving static assets
|
|
288
|
+
*
|
|
289
|
+
* @example
|
|
290
|
+
* const url = vite.assetsUrl()
|
|
291
|
+
* // Returns: '/assets' or '/build' depending on configuration
|
|
254
292
|
*/
|
|
255
293
|
assetsUrl() {
|
|
256
294
|
return this.#options.assetsUrl;
|
|
257
295
|
}
|
|
258
296
|
/**
|
|
259
|
-
* Returns path to a
|
|
297
|
+
* Returns the full URL path to a specific asset file
|
|
298
|
+
*
|
|
299
|
+
* In development mode, returns the asset path with leading slash.
|
|
300
|
+
* In production mode, uses the manifest file to return the versioned/hashed asset URL.
|
|
301
|
+
*
|
|
302
|
+
* @param asset - The relative path to the asset file
|
|
303
|
+
*
|
|
304
|
+
* @example
|
|
305
|
+
* const path = vite.assetPath('images/logo.png')
|
|
306
|
+
* // Dev: '/images/logo.png'
|
|
307
|
+
* // Prod: '/assets/images/logo-abc123.png'
|
|
260
308
|
*/
|
|
261
309
|
assetPath(asset) {
|
|
262
310
|
if (!this.hasManifestFile) {
|
|
@@ -266,9 +314,16 @@ var Vite = class {
|
|
|
266
314
|
return this.#generateAssetUrl(chunk.file);
|
|
267
315
|
}
|
|
268
316
|
/**
|
|
269
|
-
* Returns the manifest file contents
|
|
317
|
+
* Returns the parsed Vite manifest file contents
|
|
270
318
|
*
|
|
271
|
-
*
|
|
319
|
+
* The manifest file contains information about compiled assets including
|
|
320
|
+
* file paths, integrity hashes, and import dependencies.
|
|
321
|
+
*
|
|
322
|
+
* @throws Will throw an exception when running in development mode
|
|
323
|
+
*
|
|
324
|
+
* @example
|
|
325
|
+
* const manifest = vite.manifest()
|
|
326
|
+
* console.log(manifest['app.js'].file) // 'assets/app-abc123.js'
|
|
272
327
|
*/
|
|
273
328
|
manifest() {
|
|
274
329
|
if (!this.hasManifestFile) {
|
|
@@ -280,10 +335,18 @@ var Vite = class {
|
|
|
280
335
|
return this.#manifestCache;
|
|
281
336
|
}
|
|
282
337
|
/**
|
|
283
|
-
*
|
|
338
|
+
* Creates and initializes the Vite development server
|
|
339
|
+
*
|
|
340
|
+
* Lazy loads Vite APIs to avoid importing them in production.
|
|
341
|
+
* The server runs in middleware mode and is configured for custom app integration.
|
|
342
|
+
*
|
|
343
|
+
* @param options - Additional Vite configuration options to merge with defaults
|
|
284
344
|
*
|
|
285
|
-
*
|
|
286
|
-
*
|
|
345
|
+
* @example
|
|
346
|
+
* await vite.createDevServer({
|
|
347
|
+
* root: './src',
|
|
348
|
+
* server: { port: 3000 }
|
|
349
|
+
* })
|
|
287
350
|
*/
|
|
288
351
|
async createDevServer(options) {
|
|
289
352
|
const { createServer } = await import("vite");
|
|
@@ -295,30 +358,63 @@ var Vite = class {
|
|
|
295
358
|
this.#devServer = await this.#createServerPromise;
|
|
296
359
|
}
|
|
297
360
|
/**
|
|
298
|
-
*
|
|
299
|
-
*
|
|
300
|
-
* it
|
|
361
|
+
* Creates a server-side module runner for executing modules in Node.js context
|
|
362
|
+
*
|
|
363
|
+
* Only available in development mode as it requires the Vite dev server.
|
|
364
|
+
* Useful for server-side rendering and module transformation.
|
|
365
|
+
*
|
|
366
|
+
* @param options - Configuration options for the module runner
|
|
367
|
+
*
|
|
368
|
+
* @example
|
|
369
|
+
* const runner = await vite.createModuleRunner({
|
|
370
|
+
* hmr: { port: 24678 }
|
|
371
|
+
* })
|
|
372
|
+
* const mod = await runner.import('./app.js')
|
|
301
373
|
*/
|
|
302
374
|
async createModuleRunner(options = {}) {
|
|
303
375
|
const { createServerModuleRunner } = await import("vite");
|
|
304
376
|
return createServerModuleRunner(this.#devServer.environments.ssr, options);
|
|
305
377
|
}
|
|
306
378
|
/**
|
|
307
|
-
*
|
|
379
|
+
* Gracefully stops the Vite development server
|
|
380
|
+
*
|
|
381
|
+
* Waits for the server creation promise to complete before closing.
|
|
382
|
+
*
|
|
383
|
+
* @example
|
|
384
|
+
* await vite.stopDevServer()
|
|
308
385
|
*/
|
|
309
386
|
async stopDevServer() {
|
|
310
387
|
await this.#createServerPromise;
|
|
311
388
|
await this.#devServer?.close();
|
|
312
389
|
}
|
|
313
390
|
/**
|
|
314
|
-
*
|
|
315
|
-
*
|
|
391
|
+
* Returns the Vite development server instance
|
|
392
|
+
*
|
|
393
|
+
* Only available in development mode after calling createDevServer().
|
|
394
|
+
* Returns undefined in production or if the server hasn't been created yet.
|
|
395
|
+
*
|
|
396
|
+
* @example
|
|
397
|
+
* const server = vite.getDevServer()
|
|
398
|
+
* if (server) {
|
|
399
|
+
* console.log('Dev server is running on', server.config.server.port)
|
|
400
|
+
* }
|
|
316
401
|
*/
|
|
317
402
|
getDevServer() {
|
|
318
403
|
return this.#devServer;
|
|
319
404
|
}
|
|
320
405
|
/**
|
|
321
|
-
*
|
|
406
|
+
* Generates the React Hot Module Replacement (HMR) script for development
|
|
407
|
+
*
|
|
408
|
+
* Only returns a script element in development mode. In production mode,
|
|
409
|
+
* returns null since HMR is not needed.
|
|
410
|
+
*
|
|
411
|
+
* @param attributes - Additional HTML attributes to apply to the script tag
|
|
412
|
+
*
|
|
413
|
+
* @example
|
|
414
|
+
* const hmrScript = vite.getReactHmrScript({ async: true })
|
|
415
|
+
* if (hmrScript) {
|
|
416
|
+
* console.log(hmrScript.toString()) // <script type="module" async>...</script>
|
|
417
|
+
* }
|
|
322
418
|
*/
|
|
323
419
|
getReactHmrScript(attributes) {
|
|
324
420
|
if (this.hasManifestFile) {
|
|
@@ -1,10 +1,28 @@
|
|
|
1
1
|
// src/vite_middleware.ts
|
|
2
2
|
var ViteMiddleware = class {
|
|
3
|
+
/**
|
|
4
|
+
* Creates a new ViteMiddleware instance
|
|
5
|
+
*
|
|
6
|
+
* @param vite - The Vite instance containing the dev server
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* const middleware = new ViteMiddleware(viteInstance)
|
|
10
|
+
*/
|
|
3
11
|
constructor(vite) {
|
|
4
12
|
this.vite = vite;
|
|
5
13
|
this.#devServer = this.vite.getDevServer();
|
|
6
14
|
}
|
|
7
15
|
#devServer;
|
|
16
|
+
/**
|
|
17
|
+
* Handles HTTP requests by proxying them to the Vite dev server when appropriate
|
|
18
|
+
*
|
|
19
|
+
* @param request - The HTTP request object from AdonisJS context
|
|
20
|
+
* @param response - The HTTP response object from AdonisJS context
|
|
21
|
+
* @param next - Function to call the next middleware in the chain
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* await middleware.handle(ctx, next)
|
|
25
|
+
*/
|
|
8
26
|
async handle({ request, response }, next) {
|
|
9
27
|
if (!this.#devServer) {
|
|
10
28
|
return next();
|
package/build/index.js
CHANGED
|
@@ -5,29 +5,89 @@ declare module '@adonisjs/core/types' {
|
|
|
5
5
|
vite: Vite;
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* AdonisJS service provider for integrating Vite build tool and development server
|
|
10
|
+
*
|
|
11
|
+
* Handles lifecycle management of Vite integration including:
|
|
12
|
+
* - Registering Vite service in the container
|
|
13
|
+
* - Setting up Edge.js plugin for template integration
|
|
14
|
+
* - Managing development server startup/shutdown
|
|
15
|
+
* - Configuring CSP keywords for @adonisjs/shield
|
|
16
|
+
*/
|
|
8
17
|
export default class ViteProvider {
|
|
9
18
|
#private;
|
|
10
19
|
protected app: ApplicationService;
|
|
20
|
+
/**
|
|
21
|
+
* Creates a new ViteProvider instance
|
|
22
|
+
*
|
|
23
|
+
* @param app - The AdonisJS application service instance
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* const provider = new ViteProvider(app)
|
|
27
|
+
*/
|
|
11
28
|
constructor(app: ApplicationService);
|
|
12
29
|
/**
|
|
13
|
-
* Registers
|
|
30
|
+
* Registers the Vite Edge.js plugin if Edge.js is available in the application
|
|
31
|
+
*
|
|
32
|
+
* Adds global helpers and custom tags (@vite, @viteReactRefresh) to Edge templates.
|
|
33
|
+
* Only registers the plugin if the application is using Edge.js.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* await provider.registerEdgePlugin()
|
|
37
|
+
* // Enables @vite('app.js') in Edge templates
|
|
14
38
|
*/
|
|
15
39
|
protected registerEdgePlugin(): Promise<void>;
|
|
16
40
|
/**
|
|
17
|
-
* Registers
|
|
41
|
+
* Registers Content Security Policy keywords when @adonisjs/shield is installed
|
|
42
|
+
*
|
|
43
|
+
* Adds the '@viteUrl' keyword for CSP directives that returns the Vite assets URL
|
|
44
|
+
* when it's an HTTP/HTTPS URL, or an empty string otherwise.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* await provider.registerShieldKeywords()
|
|
48
|
+
* // Enables @viteUrl in CSP directives
|
|
18
49
|
*/
|
|
19
50
|
protected registerShieldKeywords(): Promise<void>;
|
|
20
51
|
/**
|
|
21
|
-
*
|
|
52
|
+
* Registers Vite service and middleware bindings in the IoC container
|
|
53
|
+
*
|
|
54
|
+
* Creates a Vite instance using configuration and determines whether
|
|
55
|
+
* the development server should run based on environment and manifest file presence.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* provider.register()
|
|
59
|
+
* // Vite service is now available via container.make('vite')
|
|
22
60
|
*/
|
|
23
61
|
register(): void;
|
|
24
62
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
63
|
+
* Boots the Vite provider by registering plugins and integrations
|
|
64
|
+
*
|
|
65
|
+
* Registers Edge.js plugin and Shield CSP keywords if the respective
|
|
66
|
+
* packages are available in the application.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* await provider.boot()
|
|
27
70
|
*/
|
|
28
71
|
boot(): Promise<void>;
|
|
29
72
|
/**
|
|
30
|
-
*
|
|
73
|
+
* Starts the Vite development server when the application is ready
|
|
74
|
+
*
|
|
75
|
+
* Only starts the server if running in development/test mode and
|
|
76
|
+
* no manifest file exists (indicating development mode).
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* await provider.ready()
|
|
80
|
+
* // Dev server starts on configured port
|
|
81
|
+
*/
|
|
82
|
+
ready(): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Gracefully stops the Vite development server during application shutdown
|
|
85
|
+
*
|
|
86
|
+
* Only attempts to stop the server if it was started during the ready phase.
|
|
87
|
+
* Ensures clean shutdown of the development server and its resources.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* await provider.shutdown()
|
|
31
91
|
*/
|
|
32
92
|
shutdown(): Promise<void>;
|
|
33
93
|
}
|
|
@@ -1,19 +1,38 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Vite
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-MM7OHCLX.js";
|
|
4
4
|
import {
|
|
5
5
|
ViteMiddleware
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-TMXIREUT.js";
|
|
7
7
|
import "../chunk-ZCQTQOMI.js";
|
|
8
8
|
|
|
9
9
|
// providers/vite_provider.ts
|
|
10
10
|
var ViteProvider = class {
|
|
11
|
+
/**
|
|
12
|
+
* Creates a new ViteProvider instance
|
|
13
|
+
*
|
|
14
|
+
* @param app - The AdonisJS application service instance
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const provider = new ViteProvider(app)
|
|
18
|
+
*/
|
|
11
19
|
constructor(app) {
|
|
12
20
|
this.app = app;
|
|
13
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Flag indicating whether the Vite development server should be started
|
|
24
|
+
* Set to true when manifest file doesn't exist and running in web/test environment
|
|
25
|
+
*/
|
|
14
26
|
#shouldRunViteDevServer = false;
|
|
15
27
|
/**
|
|
16
|
-
* Registers
|
|
28
|
+
* Registers the Vite Edge.js plugin if Edge.js is available in the application
|
|
29
|
+
*
|
|
30
|
+
* Adds global helpers and custom tags (@vite, @viteReactRefresh) to Edge templates.
|
|
31
|
+
* Only registers the plugin if the application is using Edge.js.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* await provider.registerEdgePlugin()
|
|
35
|
+
* // Enables @vite('app.js') in Edge templates
|
|
17
36
|
*/
|
|
18
37
|
async registerEdgePlugin() {
|
|
19
38
|
if (this.app.usingEdgeJS) {
|
|
@@ -24,7 +43,14 @@ var ViteProvider = class {
|
|
|
24
43
|
}
|
|
25
44
|
}
|
|
26
45
|
/**
|
|
27
|
-
* Registers
|
|
46
|
+
* Registers Content Security Policy keywords when @adonisjs/shield is installed
|
|
47
|
+
*
|
|
48
|
+
* Adds the '@viteUrl' keyword for CSP directives that returns the Vite assets URL
|
|
49
|
+
* when it's an HTTP/HTTPS URL, or an empty string otherwise.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* await provider.registerShieldKeywords()
|
|
53
|
+
* // Enables @viteUrl in CSP directives
|
|
28
54
|
*/
|
|
29
55
|
async registerShieldKeywords() {
|
|
30
56
|
let cspKeywords = null;
|
|
@@ -46,7 +72,14 @@ var ViteProvider = class {
|
|
|
46
72
|
});
|
|
47
73
|
}
|
|
48
74
|
/**
|
|
49
|
-
*
|
|
75
|
+
* Registers Vite service and middleware bindings in the IoC container
|
|
76
|
+
*
|
|
77
|
+
* Creates a Vite instance using configuration and determines whether
|
|
78
|
+
* the development server should run based on environment and manifest file presence.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* provider.register()
|
|
82
|
+
* // Vite service is now available via container.make('vite')
|
|
50
83
|
*/
|
|
51
84
|
register() {
|
|
52
85
|
const appEnvironment = this.app.getEnvironment();
|
|
@@ -57,12 +90,29 @@ var ViteProvider = class {
|
|
|
57
90
|
this.app.container.singleton(ViteMiddleware, () => new ViteMiddleware(vite));
|
|
58
91
|
}
|
|
59
92
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
93
|
+
* Boots the Vite provider by registering plugins and integrations
|
|
94
|
+
*
|
|
95
|
+
* Registers Edge.js plugin and Shield CSP keywords if the respective
|
|
96
|
+
* packages are available in the application.
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* await provider.boot()
|
|
62
100
|
*/
|
|
63
101
|
async boot() {
|
|
64
102
|
await this.registerEdgePlugin();
|
|
65
103
|
await this.registerShieldKeywords();
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Starts the Vite development server when the application is ready
|
|
107
|
+
*
|
|
108
|
+
* Only starts the server if running in development/test mode and
|
|
109
|
+
* no manifest file exists (indicating development mode).
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* await provider.ready()
|
|
113
|
+
* // Dev server starts on configured port
|
|
114
|
+
*/
|
|
115
|
+
async ready() {
|
|
66
116
|
if (!this.#shouldRunViteDevServer) {
|
|
67
117
|
return;
|
|
68
118
|
}
|
|
@@ -70,7 +120,13 @@ var ViteProvider = class {
|
|
|
70
120
|
await vite.createDevServer();
|
|
71
121
|
}
|
|
72
122
|
/**
|
|
73
|
-
*
|
|
123
|
+
* Gracefully stops the Vite development server during application shutdown
|
|
124
|
+
*
|
|
125
|
+
* Only attempts to stop the server if it was started during the ready phase.
|
|
126
|
+
* Ensures clean shutdown of the development server and its resources.
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* await provider.shutdown()
|
|
74
130
|
*/
|
|
75
131
|
async shutdown() {
|
|
76
132
|
if (!this.#shouldRunViteDevServer) {
|
|
@@ -1,11 +1,26 @@
|
|
|
1
1
|
import type { ConfigEnv, Plugin, UserConfig } from 'vite';
|
|
2
2
|
import type { PluginFullOptions } from './types.ts';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Resolves the base URL for Vite configuration based on command and options
|
|
5
|
+
*
|
|
6
|
+
* @param config - User-provided Vite configuration
|
|
7
|
+
* @param options - Plugin options containing assetsUrl
|
|
8
|
+
* @param command - Vite command being executed ('build' or 'serve')
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* const base = resolveBase(userConfig, { assetsUrl: '/assets' }, 'build')
|
|
12
|
+
* // Returns: '/assets/' for build, '/' for serve
|
|
5
13
|
*/
|
|
6
14
|
export declare function resolveBase(config: UserConfig, options: PluginFullOptions, command: 'build' | 'serve'): string;
|
|
7
15
|
/**
|
|
8
|
-
* Vite
|
|
16
|
+
* Merges user Vite configuration with AdonisJS-specific defaults and requirements
|
|
17
|
+
*
|
|
18
|
+
* @param options - Plugin options containing build directory and entry points
|
|
19
|
+
* @param userConfig - User-provided Vite configuration
|
|
20
|
+
* @param command - Vite environment command
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* const mergedConfig = configHook(pluginOptions, userViteConfig, { command: 'build' })
|
|
9
24
|
*/
|
|
10
25
|
export declare function configHook(options: PluginFullOptions, userConfig: UserConfig, { command }: ConfigEnv): UserConfig;
|
|
11
26
|
/**
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import type { ViteOptions } from './types.ts';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Creates a complete Vite configuration by merging provided options with sensible defaults
|
|
4
|
+
*
|
|
5
|
+
* @param config - Partial Vite configuration options to override defaults
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const viteConfig = defineConfig({
|
|
9
|
+
* assetsUrl: '/static',
|
|
10
|
+
* buildDirectory: 'dist'
|
|
11
|
+
* })
|
|
4
12
|
*/
|
|
5
13
|
export declare function defineConfig(config: Partial<ViteOptions>): ViteOptions;
|
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import type { PluginFn } from 'edge.js/types';
|
|
2
2
|
import type { Vite } from '../vite.ts';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Creates an Edge.js plugin that integrates Vite functionality into templates
|
|
5
|
+
*
|
|
6
|
+
* Registers global helpers and custom tags (@vite, @viteReactRefresh) for use in Edge templates.
|
|
7
|
+
* Provides access to asset paths and HMR functionality within template rendering.
|
|
8
|
+
*
|
|
9
|
+
* @param vite - The Vite instance to integrate with Edge templates
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const plugin = edgePluginVite(viteInstance)
|
|
13
|
+
* edge.use(plugin)
|
|
14
|
+
*
|
|
15
|
+
* // In templates:
|
|
16
|
+
* // @vite('app.js')
|
|
17
|
+
* // @viteReactRefresh({ nonce: 'abc123' })
|
|
6
18
|
*/
|
|
7
19
|
export declare const edgePluginVite: (vite: Vite) => PluginFn<undefined>;
|
package/build/src/utils.d.ts
CHANGED
|
@@ -1,12 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Returns a new array with unique items by the
|
|
2
|
+
* Returns a new array with unique items filtered by the specified key
|
|
3
|
+
*
|
|
4
|
+
* @param array - The array to filter for unique items
|
|
5
|
+
* @param key - The key to use for uniqueness comparison
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const users = [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }, { id: 1, name: 'John' }]
|
|
9
|
+
* const unique = uniqBy(users, 'id')
|
|
10
|
+
* // Returns: [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]
|
|
3
11
|
*/
|
|
4
12
|
export declare function uniqBy<T>(array: T[], key: keyof T): T[];
|
|
5
13
|
/**
|
|
6
|
-
*
|
|
14
|
+
* Converts an object of HTML attributes to a valid HTML attribute string
|
|
15
|
+
*
|
|
16
|
+
* @param attributes - Object containing HTML attributes where values can be strings or booleans
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* const attrs = makeAttributes({ class: 'btn', disabled: true, hidden: false })
|
|
20
|
+
* // Returns: 'class="btn" disabled'
|
|
7
21
|
*/
|
|
8
22
|
export declare function makeAttributes(attributes: Record<string, string | boolean>): string;
|
|
9
23
|
/**
|
|
10
|
-
*
|
|
24
|
+
* Adds a trailing slash to a URL if it doesn't already have one
|
|
25
|
+
*
|
|
26
|
+
* @param url - The URL string to process
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* addTrailingSlash('/api') // Returns: '/api/'
|
|
30
|
+
* addTrailingSlash('/api/') // Returns: '/api/'
|
|
11
31
|
*/
|
|
12
32
|
export declare const addTrailingSlash: (url: string) => string;
|
package/build/src/vite.d.ts
CHANGED
|
@@ -7,50 +7,144 @@ import type { AdonisViteElement, ViteOptions } from './types.ts';
|
|
|
7
7
|
*/
|
|
8
8
|
export declare class Vite {
|
|
9
9
|
#private;
|
|
10
|
+
/**
|
|
11
|
+
* Indicates whether the Vite manifest file exists on disk
|
|
12
|
+
*/
|
|
10
13
|
hasManifestFile: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Creates a new Vite instance for managing asset compilation and serving
|
|
16
|
+
*
|
|
17
|
+
* @param options - Configuration options for Vite integration
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* const vite = new Vite({
|
|
21
|
+
* buildDirectory: 'build',
|
|
22
|
+
* assetsUrl: '/assets',
|
|
23
|
+
* manifestFile: 'build/manifest.json'
|
|
24
|
+
* })
|
|
25
|
+
*/
|
|
11
26
|
constructor(options: ViteOptions);
|
|
12
27
|
/**
|
|
13
|
-
* Generate tags for the entry points
|
|
28
|
+
* Generate HTML tags (script and link) for the specified entry points
|
|
29
|
+
*
|
|
30
|
+
* In development mode, includes HMR script and dynamically discovers CSS files.
|
|
31
|
+
* In production mode, uses the manifest file to generate optimized tags with preloading.
|
|
32
|
+
*
|
|
33
|
+
* @param entryPoints - Single entry point or array of entry points to generate tags for
|
|
34
|
+
* @param attributes - Additional HTML attributes to apply to the generated tags
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* // Generate tags for a single entry point
|
|
38
|
+
* const tags = await vite.generateEntryPointsTags('app.js')
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* // Generate tags for multiple entry points with custom attributes
|
|
42
|
+
* const tags = await vite.generateEntryPointsTags(
|
|
43
|
+
* ['app.js', 'admin.js'],
|
|
44
|
+
* { defer: true }
|
|
45
|
+
* )
|
|
14
46
|
*/
|
|
15
47
|
generateEntryPointsTags(entryPoints: string[] | string, attributes?: Record<string, any>): Promise<AdonisViteElement[]>;
|
|
16
48
|
/**
|
|
17
|
-
* Returns the
|
|
49
|
+
* Returns the base URL for serving static assets
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* const url = vite.assetsUrl()
|
|
53
|
+
* // Returns: '/assets' or '/build' depending on configuration
|
|
18
54
|
*/
|
|
19
55
|
assetsUrl(): string | undefined;
|
|
20
56
|
/**
|
|
21
|
-
* Returns path to a
|
|
57
|
+
* Returns the full URL path to a specific asset file
|
|
58
|
+
*
|
|
59
|
+
* In development mode, returns the asset path with leading slash.
|
|
60
|
+
* In production mode, uses the manifest file to return the versioned/hashed asset URL.
|
|
61
|
+
*
|
|
62
|
+
* @param asset - The relative path to the asset file
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* const path = vite.assetPath('images/logo.png')
|
|
66
|
+
* // Dev: '/images/logo.png'
|
|
67
|
+
* // Prod: '/assets/images/logo-abc123.png'
|
|
22
68
|
*/
|
|
23
69
|
assetPath(asset: string): string;
|
|
24
70
|
/**
|
|
25
|
-
* Returns the manifest file contents
|
|
71
|
+
* Returns the parsed Vite manifest file contents
|
|
26
72
|
*
|
|
27
|
-
*
|
|
73
|
+
* The manifest file contains information about compiled assets including
|
|
74
|
+
* file paths, integrity hashes, and import dependencies.
|
|
75
|
+
*
|
|
76
|
+
* @throws Will throw an exception when running in development mode
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* const manifest = vite.manifest()
|
|
80
|
+
* console.log(manifest['app.js'].file) // 'assets/app-abc123.js'
|
|
28
81
|
*/
|
|
29
82
|
manifest(): Manifest;
|
|
30
83
|
/**
|
|
31
|
-
*
|
|
84
|
+
* Creates and initializes the Vite development server
|
|
85
|
+
*
|
|
86
|
+
* Lazy loads Vite APIs to avoid importing them in production.
|
|
87
|
+
* The server runs in middleware mode and is configured for custom app integration.
|
|
88
|
+
*
|
|
89
|
+
* @param options - Additional Vite configuration options to merge with defaults
|
|
32
90
|
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
91
|
+
* @example
|
|
92
|
+
* await vite.createDevServer({
|
|
93
|
+
* root: './src',
|
|
94
|
+
* server: { port: 3000 }
|
|
95
|
+
* })
|
|
35
96
|
*/
|
|
36
97
|
createDevServer(options?: InlineConfig): Promise<void>;
|
|
37
98
|
/**
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* it
|
|
99
|
+
* Creates a server-side module runner for executing modules in Node.js context
|
|
100
|
+
*
|
|
101
|
+
* Only available in development mode as it requires the Vite dev server.
|
|
102
|
+
* Useful for server-side rendering and module transformation.
|
|
103
|
+
*
|
|
104
|
+
* @param options - Configuration options for the module runner
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* const runner = await vite.createModuleRunner({
|
|
108
|
+
* hmr: { port: 24678 }
|
|
109
|
+
* })
|
|
110
|
+
* const mod = await runner.import('./app.js')
|
|
41
111
|
*/
|
|
42
112
|
createModuleRunner(options?: ServerModuleRunnerOptions): Promise<ModuleRunner>;
|
|
43
113
|
/**
|
|
44
|
-
*
|
|
114
|
+
* Gracefully stops the Vite development server
|
|
115
|
+
*
|
|
116
|
+
* Waits for the server creation promise to complete before closing.
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* await vite.stopDevServer()
|
|
45
120
|
*/
|
|
46
121
|
stopDevServer(): Promise<void>;
|
|
47
122
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
123
|
+
* Returns the Vite development server instance
|
|
124
|
+
*
|
|
125
|
+
* Only available in development mode after calling createDevServer().
|
|
126
|
+
* Returns undefined in production or if the server hasn't been created yet.
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* const server = vite.getDevServer()
|
|
130
|
+
* if (server) {
|
|
131
|
+
* console.log('Dev server is running on', server.config.server.port)
|
|
132
|
+
* }
|
|
50
133
|
*/
|
|
51
134
|
getDevServer(): ViteDevServer | undefined;
|
|
52
135
|
/**
|
|
53
|
-
*
|
|
136
|
+
* Generates the React Hot Module Replacement (HMR) script for development
|
|
137
|
+
*
|
|
138
|
+
* Only returns a script element in development mode. In production mode,
|
|
139
|
+
* returns null since HMR is not needed.
|
|
140
|
+
*
|
|
141
|
+
* @param attributes - Additional HTML attributes to apply to the script tag
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* const hmrScript = vite.getReactHmrScript({ async: true })
|
|
145
|
+
* if (hmrScript) {
|
|
146
|
+
* console.log(hmrScript.toString()) // <script type="module" async>...</script>
|
|
147
|
+
* }
|
|
54
148
|
*/
|
|
55
149
|
getReactHmrScript(attributes?: Record<string, any>): AdonisViteElement | null;
|
|
56
150
|
}
|
|
@@ -2,6 +2,8 @@ import type { HttpContext } from '@adonisjs/core/http';
|
|
|
2
2
|
import type { NextFn } from '@adonisjs/core/types/http';
|
|
3
3
|
import type { Vite } from './vite.ts';
|
|
4
4
|
/**
|
|
5
|
+
* Middleware for proxying requests between AdonisJS and Vite development server
|
|
6
|
+
*
|
|
5
7
|
* Since Vite dev server is integrated within the AdonisJS process, this
|
|
6
8
|
* middleware is used to proxy the requests to it.
|
|
7
9
|
*
|
|
@@ -12,6 +14,24 @@ import type { Vite } from './vite.ts';
|
|
|
12
14
|
export default class ViteMiddleware {
|
|
13
15
|
#private;
|
|
14
16
|
protected vite: Vite;
|
|
17
|
+
/**
|
|
18
|
+
* Creates a new ViteMiddleware instance
|
|
19
|
+
*
|
|
20
|
+
* @param vite - The Vite instance containing the dev server
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* const middleware = new ViteMiddleware(viteInstance)
|
|
24
|
+
*/
|
|
15
25
|
constructor(vite: Vite);
|
|
26
|
+
/**
|
|
27
|
+
* Handles HTTP requests by proxying them to the Vite dev server when appropriate
|
|
28
|
+
*
|
|
29
|
+
* @param request - The HTTP request object from AdonisJS context
|
|
30
|
+
* @param response - The HTTP response object from AdonisJS context
|
|
31
|
+
* @param next - Function to call the next middleware in the chain
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* await middleware.handle(ctx, next)
|
|
35
|
+
*/
|
|
16
36
|
handle({ request, response }: HttpContext, next: NextFn): Promise<any>;
|
|
17
37
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adonisjs/vite",
|
|
3
3
|
"description": "Vite plugin for AdonisJS",
|
|
4
|
-
"version": "5.0.1-next.
|
|
4
|
+
"version": "5.0.1-next.3",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=24.0.0"
|
|
7
7
|
},
|
|
@@ -57,21 +57,21 @@
|
|
|
57
57
|
"@japa/snapshot": "^2.0.9",
|
|
58
58
|
"@poppinss/ts-exec": "^1.4.1",
|
|
59
59
|
"@release-it/conventional-changelog": "^10.0.1",
|
|
60
|
-
"@types/node": "^24.
|
|
60
|
+
"@types/node": "^24.7.2",
|
|
61
61
|
"@types/supertest": "^6.0.3",
|
|
62
62
|
"c8": "^10.1.3",
|
|
63
63
|
"copyfiles": "^2.4.1",
|
|
64
|
-
"cross-env": "^10.
|
|
65
|
-
"del-cli": "^
|
|
64
|
+
"cross-env": "^10.1.0",
|
|
65
|
+
"del-cli": "^7.0.0",
|
|
66
66
|
"edge.js": "^6.3.0",
|
|
67
|
-
"eslint": "^9.
|
|
67
|
+
"eslint": "^9.37.0",
|
|
68
68
|
"prettier": "^3.6.2",
|
|
69
|
-
"release-it": "^19.0.
|
|
69
|
+
"release-it": "^19.0.5",
|
|
70
70
|
"supertest": "^7.1.4",
|
|
71
71
|
"tsup": "^8.5.0",
|
|
72
|
-
"typedoc": "^0.28.
|
|
73
|
-
"typescript": "~5.9.
|
|
74
|
-
"vite": "^7.1.
|
|
72
|
+
"typedoc": "^0.28.14",
|
|
73
|
+
"typescript": "~5.9.3",
|
|
74
|
+
"vite": "^7.1.9"
|
|
75
75
|
},
|
|
76
76
|
"dependencies": {
|
|
77
77
|
"@poppinss/utils": "^7.0.0-next.3",
|