@adonisjs/vite 3.0.0-2 → 3.0.0-4

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.
@@ -1,4 +1,4 @@
1
- // src/middlewares/vite_middleware.ts
1
+ // src/middleware/vite_middleware.ts
2
2
  var ViteMiddleware = class {
3
3
  constructor(vite) {
4
4
  this.vite = vite;
@@ -17,4 +17,4 @@ var ViteMiddleware = class {
17
17
  export {
18
18
  ViteMiddleware
19
19
  };
20
- //# sourceMappingURL=chunk-YCD5RGKQ.js.map
20
+ //# sourceMappingURL=chunk-MQRASPMO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/middleware/vite_middleware.ts"],"sourcesContent":["/*\n * @adonisjs/vite\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport type { ViteDevServer } from 'vite'\nimport type { HttpContext } from '@adonisjs/core/http'\nimport type { NextFn } from '@adonisjs/core/types/http'\n\nimport type { Vite } from '../vite.js'\n\n/**\n * Since Vite dev server is integrated within the AdonisJS process, this\n * middleware is used to proxy the requests to it.\n *\n * Some of the requests are directly handled by the Vite dev server,\n * like the one for the assets, while others are passed down to the\n * AdonisJS server.\n */\nexport default class ViteMiddleware {\n #devServer: ViteDevServer\n\n constructor(protected vite: Vite) {\n this.#devServer = this.vite.getDevServer()!\n }\n\n async handle({ request, response }: HttpContext, next: NextFn) {\n return await new Promise((resolve) => {\n this.#devServer.middlewares.handle(request.request, response.response, () => {\n return resolve(next())\n })\n })\n }\n}\n"],"mappings":";AAuBA,IAAqB,iBAArB,MAAoC;AAAA,EAGlC,YAAsB,MAAY;AAAZ;AACpB,SAAK,aAAa,KAAK,KAAK,aAAa;AAAA,EAC3C;AAAA,EAJA;AAAA,EAMA,MAAM,OAAO,EAAE,SAAS,SAAS,GAAgB,MAAc;AAC7D,WAAO,MAAM,IAAI,QAAQ,CAAC,YAAY;AACpC,WAAK,WAAW,YAAY,OAAO,QAAQ,SAAS,SAAS,UAAU,MAAM;AAC3E,eAAO,QAAQ,KAAK,CAAC;AAAA,MACvB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -6,8 +6,8 @@ import {
6
6
  // src/vite.ts
7
7
  import { readFileSync } from "node:fs";
8
8
  var Vite = class {
9
- constructor(inDev, options) {
10
- this.inDev = inDev;
9
+ constructor(isViteRunning, options) {
10
+ this.isViteRunning = isViteRunning;
11
11
  this.#options = options;
12
12
  this.#options.assetsUrl = (this.#options.assetsUrl || "/").replace(/\/$/, "");
13
13
  }
@@ -91,15 +91,21 @@ var Vite = class {
91
91
  children: []
92
92
  });
93
93
  }
94
+ /**
95
+ * Generate an asset URL for a given asset path
96
+ */
97
+ #generateAssetUrl(path) {
98
+ return `${this.#options.assetsUrl}/${path}`;
99
+ }
94
100
  /**
95
101
  * Generate a HTML tag for the given asset
96
102
  */
97
103
  #generateTag(asset, attributes) {
98
104
  let url = "";
99
- if (this.inDev) {
105
+ if (this.isViteRunning) {
100
106
  url = `/${asset}`;
101
107
  } else {
102
- url = `${this.#options.assetsUrl}/${asset}`;
108
+ url = this.#generateAssetUrl(asset);
103
109
  }
104
110
  if (this.#isCssPath(asset)) {
105
111
  return this.#makeStyleTag(asset, url, attributes);
@@ -110,7 +116,7 @@ var Vite = class {
110
116
  * Generate style and script tags for the given entrypoints
111
117
  * Also adds the @vite/client script
112
118
  */
113
- #generateEntryPointsTagsForHotMode(entryPoints, attributes) {
119
+ #generateEntryPointsTagsForDevMode(entryPoints, attributes) {
114
120
  const viteHmr = this.#getViteHmrScript(attributes);
115
121
  const tags = entryPoints.map((entrypoint) => this.#generateTag(entrypoint, attributes));
116
122
  const result = viteHmr ? [viteHmr].concat(tags) : tags;
@@ -119,13 +125,26 @@ var Vite = class {
119
125
  /**
120
126
  * Get a chunk from the manifest file for a given file name
121
127
  */
122
- #chunk(manifest, fileName) {
123
- const chunk = manifest[fileName];
128
+ #chunk(manifest, entrypoint) {
129
+ const chunk = manifest[entrypoint];
124
130
  if (!chunk) {
125
- throw new Error(`Cannot find "${fileName}" chunk in the manifest file`);
131
+ throw new Error(`Cannot find "${entrypoint}" chunk in the manifest file`);
126
132
  }
127
133
  return chunk;
128
134
  }
135
+ /**
136
+ * Get a list of chunks for a given filename
137
+ */
138
+ #chunksByFile(manifest, file) {
139
+ return Object.entries(manifest).filter(([, chunk]) => chunk.file === file).map(([_, chunk]) => chunk);
140
+ }
141
+ /**
142
+ * Generate preload tag for a given url
143
+ */
144
+ #makePreloadTagForUrl(url) {
145
+ const attributes = this.#isCssPath(url) ? { rel: "preload", as: "style", href: url } : { rel: "modulepreload", href: url };
146
+ return this.#generateElement({ tag: "link", attributes });
147
+ }
129
148
  /**
130
149
  * Generate style and script tags for the given entrypoints
131
150
  * using the manifest file
@@ -133,47 +152,61 @@ var Vite = class {
133
152
  #generateEntryPointsTagsWithManifest(entryPoints, attributes) {
134
153
  const manifest = this.manifest();
135
154
  const tags = [];
155
+ const preloads = [];
136
156
  for (const entryPoint of entryPoints) {
137
157
  const chunk = this.#chunk(manifest, entryPoint);
158
+ preloads.push({ path: this.#generateAssetUrl(chunk.file) });
138
159
  tags.push({
139
160
  path: chunk.file,
140
161
  tag: this.#generateTag(chunk.file, { ...attributes, integrity: chunk.integrity })
141
162
  });
142
163
  for (const css of chunk.css || []) {
164
+ preloads.push({ path: this.#generateAssetUrl(css) });
143
165
  tags.push({ path: css, tag: this.#generateTag(css) });
144
166
  }
167
+ for (const importNode of chunk.imports || []) {
168
+ preloads.push({ path: this.#generateAssetUrl(manifest[importNode].file) });
169
+ for (const css of manifest[importNode].css || []) {
170
+ const subChunk = this.#chunksByFile(manifest, css);
171
+ preloads.push({ path: this.#generateAssetUrl(css) });
172
+ tags.push({
173
+ path: this.#generateAssetUrl(css),
174
+ tag: this.#generateTag(css, {
175
+ ...attributes,
176
+ integrity: subChunk[0]?.integrity
177
+ })
178
+ });
179
+ }
180
+ }
145
181
  }
146
- return uniqBy(tags, "path").sort((a) => a.path.endsWith(".css") ? -1 : 1).map((tag) => tag.tag);
182
+ const preloadsElements = uniqBy(preloads, "path").sort((preload) => this.#isCssPath(preload.path) ? -1 : 1).map((preload) => this.#makePreloadTagForUrl(preload.path));
183
+ return preloadsElements.concat(tags.map(({ tag }) => tag));
147
184
  }
148
185
  /**
149
186
  * Generate tags for the entry points
150
187
  */
151
188
  generateEntryPointsTags(entryPoints, attributes) {
152
189
  entryPoints = Array.isArray(entryPoints) ? entryPoints : [entryPoints];
153
- if (this.inDev) {
154
- return this.#generateEntryPointsTagsForHotMode(entryPoints, attributes);
190
+ if (this.isViteRunning) {
191
+ return this.#generateEntryPointsTagsForDevMode(entryPoints, attributes);
155
192
  }
156
193
  return this.#generateEntryPointsTagsWithManifest(entryPoints, attributes);
157
194
  }
158
195
  /**
159
- * Returns the dev server URL when running in hot
160
- * mode, otherwise returns the explicitly configured
161
- * "assets" URL
196
+ * Returns the explicitly configured assetsUrl
162
197
  */
163
198
  assetsUrl() {
164
- if (this.inDev)
165
- return this.#devServer.config.server.host;
166
199
  return this.#options.assetsUrl;
167
200
  }
168
201
  /**
169
- * Returns path to a given asset file
202
+ * Returns path to a given asset file using the manifest file
170
203
  */
171
204
  assetPath(asset) {
172
- if (this.inDev) {
205
+ if (this.isViteRunning) {
173
206
  return `/${asset}`;
174
207
  }
175
208
  const chunk = this.#chunk(this.manifest(), asset);
176
- return `${this.#options.assetsUrl}/${chunk.file}`;
209
+ return this.#generateAssetUrl(chunk.file);
177
210
  }
178
211
  /**
179
212
  * Returns the manifest file contents
@@ -181,7 +214,7 @@ var Vite = class {
181
214
  * @throws Will throw an exception when running in dev
182
215
  */
183
216
  manifest() {
184
- if (this.inDev) {
217
+ if (this.isViteRunning) {
185
218
  throw new Error("Cannot read the manifest file when running in dev mode");
186
219
  }
187
220
  if (!this.#manifestCache) {
@@ -227,7 +260,7 @@ var Vite = class {
227
260
  * Returns the script needed for the HMR working with React
228
261
  */
229
262
  getReactHmrScript(attributes) {
230
- if (!this.inDev) {
263
+ if (!this.isViteRunning) {
231
264
  return null;
232
265
  }
233
266
  return this.#generateElement({
@@ -252,4 +285,4 @@ var Vite = class {
252
285
  export {
253
286
  Vite
254
287
  };
255
- //# sourceMappingURL=chunk-J6JUW6YH.js.map
288
+ //# sourceMappingURL=chunk-QD2I7FQO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/vite.ts"],"sourcesContent":["/*\n * @adonisjs/vite\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { readFileSync } from 'node:fs'\nimport type { ViteRuntime } from 'vite/runtime'\nimport type { Manifest, ViteDevServer } from 'vite'\n\nimport { makeAttributes, uniqBy } from './utils.js'\nimport type { AdonisViteElement, SetAttributes, ViteOptions } from './types.js'\n\n/**\n * Vite class exposes the APIs to generate tags and URLs for\n * assets processed using vite.\n */\nexport class Vite {\n /**\n * We cache the manifest file content in production\n * to avoid reading the file multiple times\n */\n #manifestCache?: Manifest\n #options: ViteOptions\n #runtime?: ViteRuntime\n #devServer?: ViteDevServer\n\n constructor(\n protected isViteRunning: boolean,\n options: ViteOptions\n ) {\n this.#options = options\n this.#options.assetsUrl = (this.#options.assetsUrl || '/').replace(/\\/$/, '')\n }\n\n /**\n * Reads the file contents as JSON\n */\n #readFileAsJSON(filePath: string) {\n return JSON.parse(readFileSync(filePath, 'utf-8'))\n }\n\n /**\n * Generates a JSON element with a custom toString implementation\n */\n #generateElement(element: AdonisViteElement) {\n return {\n ...element,\n toString() {\n const attributes = `${makeAttributes(element.attributes)}`\n if (element.tag === 'link') {\n return `<${element.tag} ${attributes}/>`\n }\n\n return `<${element.tag} ${attributes}>${element.children.join('\\n')}</${element.tag}>`\n },\n }\n }\n\n /**\n * Returns the script needed for the HMR working with Vite\n */\n #getViteHmrScript(attributes?: Record<string, any>): AdonisViteElement | null {\n return this.#generateElement({\n tag: 'script',\n attributes: {\n type: 'module',\n src: '/@vite/client',\n ...attributes,\n },\n children: [],\n })\n }\n\n /**\n * Check if the given path is a CSS path\n */\n #isCssPath(path: string) {\n return path.match(/\\.(css|less|sass|scss|styl|stylus|pcss|postcss)$/) !== null\n }\n\n /**\n * Unwrap attributes from the user defined function or return\n * the attributes as it is\n */\n #unwrapAttributes(src: string, url: string, attributes?: SetAttributes) {\n if (typeof attributes === 'function') {\n return attributes({ src, url })\n }\n\n return attributes\n }\n\n /**\n * Create a style tag for the given path\n */\n #makeStyleTag(src: string, url: string, attributes?: Record<string, any>): AdonisViteElement {\n const customAttributes = this.#unwrapAttributes(src, url, this.#options?.styleAttributes)\n return this.#generateElement({\n tag: 'link',\n attributes: { rel: 'stylesheet', ...customAttributes, ...attributes, href: url },\n })\n }\n\n /**\n * Create a script tag for the given path\n */\n #makeScriptTag(src: string, url: string, attributes?: Record<string, any>): AdonisViteElement {\n const customAttributes = this.#unwrapAttributes(src, url, this.#options?.scriptAttributes)\n return this.#generateElement({\n tag: 'script',\n attributes: { type: 'module', ...customAttributes, ...attributes, src: url },\n children: [],\n })\n }\n\n /**\n * Generate an asset URL for a given asset path\n */\n #generateAssetUrl(path: string): string {\n return `${this.#options.assetsUrl}/${path}`\n }\n\n /**\n * Generate a HTML tag for the given asset\n */\n #generateTag(asset: string, attributes?: Record<string, any>): AdonisViteElement {\n let url = ''\n if (this.isViteRunning) {\n url = `/${asset}`\n } else {\n url = this.#generateAssetUrl(asset)\n }\n\n if (this.#isCssPath(asset)) {\n return this.#makeStyleTag(asset, url, attributes)\n }\n\n return this.#makeScriptTag(asset, url, attributes)\n }\n\n /**\n * Generate style and script tags for the given entrypoints\n * Also adds the @vite/client script\n */\n #generateEntryPointsTagsForDevMode(\n entryPoints: string[],\n attributes?: Record<string, any>\n ): AdonisViteElement[] {\n const viteHmr = this.#getViteHmrScript(attributes)\n const tags = entryPoints.map((entrypoint) => this.#generateTag(entrypoint, attributes))\n\n const result = viteHmr ? [viteHmr].concat(tags) : tags\n\n return result\n }\n\n /**\n * Get a chunk from the manifest file for a given file name\n */\n #chunk(manifest: Manifest, entrypoint: string) {\n const chunk = manifest[entrypoint]\n\n if (!chunk) {\n throw new Error(`Cannot find \"${entrypoint}\" chunk in the manifest file`)\n }\n\n return chunk\n }\n\n /**\n * Get a list of chunks for a given filename\n */\n #chunksByFile(manifest: Manifest, file: string) {\n return Object.entries(manifest)\n .filter(([, chunk]) => chunk.file === file)\n .map(([_, chunk]) => chunk)\n }\n\n /**\n * Generate preload tag for a given url\n */\n #makePreloadTagForUrl(url: string) {\n const attributes = this.#isCssPath(url)\n ? { rel: 'preload', as: 'style', href: url }\n : { rel: 'modulepreload', href: url }\n\n return this.#generateElement({ tag: 'link', attributes })\n }\n\n /**\n * Generate style and script tags for the given entrypoints\n * using the manifest file\n */\n #generateEntryPointsTagsWithManifest(\n entryPoints: string[],\n attributes?: Record<string, any>\n ): AdonisViteElement[] {\n const manifest = this.manifest()\n const tags: { path: string; tag: AdonisViteElement }[] = []\n const preloads: Array<{ path: string }> = []\n\n for (const entryPoint of entryPoints) {\n /**\n * 1. We generate tags + modulepreload for the entrypoint\n */\n const chunk = this.#chunk(manifest, entryPoint)\n preloads.push({ path: this.#generateAssetUrl(chunk.file) })\n tags.push({\n path: chunk.file,\n tag: this.#generateTag(chunk.file, { ...attributes, integrity: chunk.integrity }),\n })\n\n /**\n * 2. We go through the CSS files that are imported by the entrypoint\n * and generate tags + preload for them\n */\n for (const css of chunk.css || []) {\n preloads.push({ path: this.#generateAssetUrl(css) })\n tags.push({ path: css, tag: this.#generateTag(css) })\n }\n\n /**\n * 3. We go through every import of the entrypoint and generate preload\n */\n for (const importNode of chunk.imports || []) {\n preloads.push({ path: this.#generateAssetUrl(manifest[importNode].file) })\n\n /**\n * 4. Finally, we generate tags + preload for the CSS files imported by the import\n * of the entrypoint\n */\n for (const css of manifest[importNode].css || []) {\n const subChunk = this.#chunksByFile(manifest, css)\n\n preloads.push({ path: this.#generateAssetUrl(css) })\n tags.push({\n path: this.#generateAssetUrl(css),\n tag: this.#generateTag(css, {\n ...attributes,\n integrity: subChunk[0]?.integrity,\n }),\n })\n }\n }\n }\n\n /**\n * We sort the preload to ensure that CSS files are preloaded first\n */\n const preloadsElements = uniqBy(preloads, 'path')\n .sort((preload) => (this.#isCssPath(preload.path) ? -1 : 1))\n .map((preload) => this.#makePreloadTagForUrl(preload.path))\n\n /**\n * And finally, we return the preloads + script and link tags\n */\n return preloadsElements.concat(tags.map(({ tag }) => tag))\n }\n\n /**\n * Generate tags for the entry points\n */\n generateEntryPointsTags(\n entryPoints: string[] | string,\n attributes?: Record<string, any>\n ): AdonisViteElement[] {\n entryPoints = Array.isArray(entryPoints) ? entryPoints : [entryPoints]\n\n if (this.isViteRunning) {\n return this.#generateEntryPointsTagsForDevMode(entryPoints, attributes)\n }\n\n return this.#generateEntryPointsTagsWithManifest(entryPoints, attributes)\n }\n\n /**\n * Returns the explicitly configured assetsUrl\n */\n assetsUrl() {\n return this.#options.assetsUrl\n }\n\n /**\n * Returns path to a given asset file using the manifest file\n */\n assetPath(asset: string): string {\n if (this.isViteRunning) {\n return `/${asset}`\n }\n\n const chunk = this.#chunk(this.manifest(), asset)\n return this.#generateAssetUrl(chunk.file)\n }\n\n /**\n * Returns the manifest file contents\n *\n * @throws Will throw an exception when running in dev\n */\n manifest(): Manifest {\n if (this.isViteRunning) {\n throw new Error('Cannot read the manifest file when running in dev mode')\n }\n\n if (!this.#manifestCache) {\n this.#manifestCache = this.#readFileAsJSON(this.#options.manifestFile)\n }\n\n return this.#manifestCache!\n }\n\n /**\n * Create the Vite Dev Server and runtime\n *\n * We lazy load the APIs to avoid loading it in production\n * since we don't need it\n */\n async createDevServer() {\n const { createViteRuntime, createServer } = await import('vite')\n\n this.#devServer = await createServer({\n server: { middlewareMode: true, hmr: { port: 3001 } },\n appType: 'custom',\n })\n\n this.#runtime = await createViteRuntime(this.#devServer)\n }\n\n /**\n * Stop the Vite Dev server\n */\n async stopDevServer() {\n await this.#devServer?.close()\n }\n\n /**\n * Get the Vite Dev server instance\n * Will not be available when running in production\n */\n getDevServer() {\n return this.#devServer\n }\n\n /**\n * Get the Vite runtime instance\n * Will not be available when running in production\n */\n getRuntime() {\n return this.#runtime\n }\n\n /**\n * Returns the script needed for the HMR working with React\n */\n getReactHmrScript(attributes?: Record<string, any>): AdonisViteElement | null {\n if (!this.isViteRunning) {\n return null\n }\n\n return this.#generateElement({\n tag: 'script',\n attributes: {\n type: 'module',\n ...attributes,\n },\n children: [\n '',\n `import RefreshRuntime from '/@react-refresh'`,\n `RefreshRuntime.injectIntoGlobalHook(window)`,\n `window.$RefreshReg$ = () => {}`,\n `window.$RefreshSig$ = () => (type) => type`,\n `window.__vite_plugin_react_preamble_installed__ = true`,\n '',\n ],\n })\n }\n}\n"],"mappings":"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","names":[]}
package/build/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Vite
3
- } from "./chunk-J6JUW6YH.js";
3
+ } from "./chunk-QD2I7FQO.js";
4
4
  import "./chunk-CFRBPZ4N.js";
5
5
 
6
6
  // stubs/main.ts
@@ -6,13 +6,28 @@ declare module '@adonisjs/core/types' {
6
6
  }
7
7
  }
8
8
  export default class ViteProvider {
9
+ #private;
9
10
  protected app: ApplicationService;
10
11
  constructor(app: ApplicationService);
11
12
  /**
12
13
  * Registers edge plugin when edge is installed
13
14
  */
14
15
  protected registerEdgePlugin(): Promise<void>;
15
- register(): Promise<void>;
16
+ /**
17
+ * Registers CSP keywords when @adonisjs/shield is installed
18
+ */
19
+ protected registerShieldKeywords(): Promise<void>;
20
+ /**
21
+ * Register Vite bindings
22
+ */
23
+ register(): void;
24
+ /**
25
+ * - Register edge tags
26
+ * - Start Vite server when running in development or test
27
+ */
16
28
  boot(): Promise<void>;
29
+ /**
30
+ * Stop Vite server when running in development or test
31
+ */
17
32
  shutdown(): Promise<void>;
18
33
  }
@@ -1,16 +1,19 @@
1
1
  import {
2
2
  Vite
3
- } from "../chunk-J6JUW6YH.js";
3
+ } from "../chunk-QD2I7FQO.js";
4
4
  import "../chunk-CFRBPZ4N.js";
5
5
  import {
6
6
  ViteMiddleware
7
- } from "../chunk-YCD5RGKQ.js";
7
+ } from "../chunk-MQRASPMO.js";
8
8
 
9
9
  // providers/vite_provider.ts
10
10
  var ViteProvider = class {
11
11
  constructor(app) {
12
12
  this.app = app;
13
+ const env = this.app.getEnvironment();
14
+ this.#shouldRunVite = (this.app.inDev || this.app.inTest) && (env === "web" || env === "test");
13
15
  }
16
+ #shouldRunVite;
14
17
  /**
15
18
  * Registers edge plugin when edge is installed
16
19
  */
@@ -18,28 +21,58 @@ var ViteProvider = class {
18
21
  if (this.app.usingEdgeJS) {
19
22
  const edge = await import("edge.js");
20
23
  const vite = await this.app.container.make("vite");
21
- const { edgePluginVite } = await import("../edge-SDXKV2NF.js");
24
+ const { edgePluginVite } = await import("../src/plugins/edge.js");
22
25
  edge.default.use(edgePluginVite(vite));
23
26
  }
24
27
  }
25
- async register() {
28
+ /**
29
+ * Registers CSP keywords when @adonisjs/shield is installed
30
+ */
31
+ async registerShieldKeywords() {
32
+ let cspKeywords = null;
33
+ try {
34
+ const shieldExports = await import("@adonisjs/shield");
35
+ cspKeywords = shieldExports.cspKeywords;
36
+ } catch {
37
+ }
38
+ if (!cspKeywords)
39
+ return;
40
+ const vite = await this.app.container.make("vite");
41
+ cspKeywords.register("@viteUrl", function() {
42
+ const assetsURL = vite.assetsUrl();
43
+ if (!assetsURL || !assetsURL.startsWith("http://") || assetsURL.startsWith("https://")) {
44
+ return "";
45
+ }
46
+ return assetsURL;
47
+ });
48
+ }
49
+ /**
50
+ * Register Vite bindings
51
+ */
52
+ register() {
26
53
  const config = this.app.config.get("vite");
27
- const vite = new Vite(this.app.inDev, config);
54
+ const vite = new Vite(this.#shouldRunVite, config);
28
55
  this.app.container.bind("vite", () => vite);
29
56
  this.app.container.bind(ViteMiddleware, () => new ViteMiddleware(vite));
30
- if (this.app.inDev) {
31
- const server = await this.app.container.make("server");
32
- server.use([() => import("../vite_middleware-HYLIJP2B.js")]);
33
- }
34
57
  }
58
+ /**
59
+ * - Register edge tags
60
+ * - Start Vite server when running in development or test
61
+ */
35
62
  async boot() {
36
- if (!this.app.inDev)
63
+ await this.registerEdgePlugin();
64
+ if (!this.#shouldRunVite)
37
65
  return;
38
66
  const vite = await this.app.container.make("vite");
39
- await Promise.all([vite.createDevServer(), this.registerEdgePlugin()]);
67
+ const server = await this.app.container.make("server");
68
+ await vite.createDevServer();
69
+ server.use([() => import("../vite_middleware-AQXJUYMB.js")]);
40
70
  }
71
+ /**
72
+ * Stop Vite server when running in development or test
73
+ */
41
74
  async shutdown() {
42
- if (!this.app.inDev)
75
+ if (!this.#shouldRunVite)
43
76
  return;
44
77
  const vite = await this.app.container.make("vite");
45
78
  await vite.stopDevServer();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../providers/vite_provider.ts"],"sourcesContent":["/*\n * @adonisjs/vite\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport type { ApplicationService } from '@adonisjs/core/types'\n\nimport { Vite } from '../src/vite.js'\nimport type { ViteOptions } from '../src/types.js'\nimport ViteMiddleware from '../src/middlewares/vite_middleware.js'\n\ndeclare module '@adonisjs/core/types' {\n interface ContainerBindings {\n vite: Vite\n }\n}\n\nexport default class ViteProvider {\n constructor(protected app: ApplicationService) {}\n\n /**\n * Registers edge plugin when edge is installed\n */\n protected async registerEdgePlugin() {\n if (this.app.usingEdgeJS) {\n const edge = await import('edge.js')\n const vite = await this.app.container.make('vite')\n const { edgePluginVite } = await import('../src/plugins/edge.js')\n edge.default.use(edgePluginVite(vite))\n }\n }\n\n async register() {\n const config = this.app.config.get<ViteOptions>('vite')\n\n const vite = new Vite(this.app.inDev, config)\n this.app.container.bind('vite', () => vite)\n this.app.container.bind(ViteMiddleware, () => new ViteMiddleware(vite))\n\n if (this.app.inDev) {\n const server = await this.app.container.make('server')\n server.use([() => import('../src/middlewares/vite_middleware.js')])\n }\n }\n\n async boot() {\n if (!this.app.inDev) return\n\n const vite = await this.app.container.make('vite')\n await Promise.all([vite.createDevServer(), this.registerEdgePlugin()])\n }\n\n async shutdown() {\n if (!this.app.inDev) return\n\n const vite = await this.app.container.make('vite')\n await vite.stopDevServer()\n }\n}\n"],"mappings":";;;;;;;;;AAqBA,IAAqB,eAArB,MAAkC;AAAA,EAChC,YAAsB,KAAyB;AAAzB;AAAA,EAA0B;AAAA;AAAA;AAAA;AAAA,EAKhD,MAAgB,qBAAqB;AACnC,QAAI,KAAK,IAAI,aAAa;AACxB,YAAM,OAAO,MAAM,OAAO,SAAS;AACnC,YAAM,OAAO,MAAM,KAAK,IAAI,UAAU,KAAK,MAAM;AACjD,YAAM,EAAE,eAAe,IAAI,MAAM,OAAO,qBAAwB;AAChE,WAAK,QAAQ,IAAI,eAAe,IAAI,CAAC;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAM,WAAW;AACf,UAAM,SAAS,KAAK,IAAI,OAAO,IAAiB,MAAM;AAEtD,UAAM,OAAO,IAAI,KAAK,KAAK,IAAI,OAAO,MAAM;AAC5C,SAAK,IAAI,UAAU,KAAK,QAAQ,MAAM,IAAI;AAC1C,SAAK,IAAI,UAAU,KAAK,gBAAgB,MAAM,IAAI,eAAe,IAAI,CAAC;AAEtE,QAAI,KAAK,IAAI,OAAO;AAClB,YAAM,SAAS,MAAM,KAAK,IAAI,UAAU,KAAK,QAAQ;AACrD,aAAO,IAAI,CAAC,MAAM,OAAO,gCAAuC,CAAC,CAAC;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,MAAM,OAAO;AACX,QAAI,CAAC,KAAK,IAAI;AAAO;AAErB,UAAM,OAAO,MAAM,KAAK,IAAI,UAAU,KAAK,MAAM;AACjD,UAAM,QAAQ,IAAI,CAAC,KAAK,gBAAgB,GAAG,KAAK,mBAAmB,CAAC,CAAC;AAAA,EACvE;AAAA,EAEA,MAAM,WAAW;AACf,QAAI,CAAC,KAAK,IAAI;AAAO;AAErB,UAAM,OAAO,MAAM,KAAK,IAAI,UAAU,KAAK,MAAM;AACjD,UAAM,KAAK,cAAc;AAAA,EAC3B;AACF;","names":[]}
1
+ {"version":3,"sources":["../../providers/vite_provider.ts"],"sourcesContent":["/*\n * @adonisjs/vite\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport type { ApplicationService } from '@adonisjs/core/types'\nimport type { cspKeywords as ShieldCSPKeywords } from '@adonisjs/shield'\n\nimport { Vite } from '../src/vite.js'\nimport type { ViteOptions } from '../src/types.js'\nimport ViteMiddleware from '../src/middleware/vite_middleware.js'\n\ndeclare module '@adonisjs/core/types' {\n interface ContainerBindings {\n vite: Vite\n }\n}\n\nexport default class ViteProvider {\n #shouldRunVite: boolean\n\n constructor(protected app: ApplicationService) {\n /**\n * We should only run Vite in development and test environments\n */\n const env = this.app.getEnvironment()\n this.#shouldRunVite = (this.app.inDev || this.app.inTest) && (env === 'web' || env === 'test')\n }\n\n /**\n * Registers edge plugin when edge is installed\n */\n protected async registerEdgePlugin() {\n if (this.app.usingEdgeJS) {\n const edge = await import('edge.js')\n const vite = await this.app.container.make('vite')\n const { edgePluginVite } = await import('../src/plugins/edge.js')\n edge.default.use(edgePluginVite(vite))\n }\n }\n\n /**\n * Registers CSP keywords when @adonisjs/shield is installed\n */\n protected async registerShieldKeywords() {\n let cspKeywords: typeof ShieldCSPKeywords | null = null\n try {\n const shieldExports = await import('@adonisjs/shield')\n cspKeywords = shieldExports.cspKeywords\n } catch {}\n\n if (!cspKeywords) return\n\n const vite = await this.app.container.make('vite')\n\n /**\n * Registering the @viteUrl keyword for CSP directives.\n * Returns http URL to the dev or the CDN server, otherwise\n * an empty string\n */\n cspKeywords.register('@viteUrl', function () {\n const assetsURL = vite.assetsUrl()\n if (!assetsURL || !assetsURL.startsWith('http://') || assetsURL.startsWith('https://')) {\n return ''\n }\n\n return assetsURL\n })\n }\n\n /**\n * Register Vite bindings\n */\n register() {\n const config = this.app.config.get<ViteOptions>('vite')\n\n const vite = new Vite(this.#shouldRunVite, config)\n this.app.container.bind('vite', () => vite)\n this.app.container.bind(ViteMiddleware, () => new ViteMiddleware(vite))\n }\n\n /**\n * - Register edge tags\n * - Start Vite server when running in development or test\n */\n async boot() {\n await this.registerEdgePlugin()\n\n if (!this.#shouldRunVite) return\n\n const vite = await this.app.container.make('vite')\n const server = await this.app.container.make('server')\n\n await vite.createDevServer()\n server.use([() => import('../src/middleware/vite_middleware.js')])\n }\n\n /**\n * Stop Vite server when running in development or test\n */\n async shutdown() {\n if (!this.#shouldRunVite) return\n\n const vite = await this.app.container.make('vite')\n await vite.stopDevServer()\n }\n}\n"],"mappings":";;;;;;;;;AAsBA,IAAqB,eAArB,MAAkC;AAAA,EAGhC,YAAsB,KAAyB;AAAzB;AAIpB,UAAM,MAAM,KAAK,IAAI,eAAe;AACpC,SAAK,kBAAkB,KAAK,IAAI,SAAS,KAAK,IAAI,YAAY,QAAQ,SAAS,QAAQ;AAAA,EACzF;AAAA,EARA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAgB,qBAAqB;AACnC,QAAI,KAAK,IAAI,aAAa;AACxB,YAAM,OAAO,MAAM,OAAO,SAAS;AACnC,YAAM,OAAO,MAAM,KAAK,IAAI,UAAU,KAAK,MAAM;AACjD,YAAM,EAAE,eAAe,IAAI,MAAM,OAAO,wBAAwB;AAChE,WAAK,QAAQ,IAAI,eAAe,IAAI,CAAC;AAAA,IACvC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,yBAAyB;AACvC,QAAI,cAA+C;AACnD,QAAI;AACF,YAAM,gBAAgB,MAAM,OAAO,kBAAkB;AACrD,oBAAc,cAAc;AAAA,IAC9B,QAAQ;AAAA,IAAC;AAET,QAAI,CAAC;AAAa;AAElB,UAAM,OAAO,MAAM,KAAK,IAAI,UAAU,KAAK,MAAM;AAOjD,gBAAY,SAAS,YAAY,WAAY;AAC3C,YAAM,YAAY,KAAK,UAAU;AACjC,UAAI,CAAC,aAAa,CAAC,UAAU,WAAW,SAAS,KAAK,UAAU,WAAW,UAAU,GAAG;AACtF,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW;AACT,UAAM,SAAS,KAAK,IAAI,OAAO,IAAiB,MAAM;AAEtD,UAAM,OAAO,IAAI,KAAK,KAAK,gBAAgB,MAAM;AACjD,SAAK,IAAI,UAAU,KAAK,QAAQ,MAAM,IAAI;AAC1C,SAAK,IAAI,UAAU,KAAK,gBAAgB,MAAM,IAAI,eAAe,IAAI,CAAC;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,OAAO;AACX,UAAM,KAAK,mBAAmB;AAE9B,QAAI,CAAC,KAAK;AAAgB;AAE1B,UAAM,OAAO,MAAM,KAAK,IAAI,UAAU,KAAK,MAAM;AACjD,UAAM,SAAS,MAAM,KAAK,IAAI,UAAU,KAAK,QAAQ;AAErD,UAAM,KAAK,gBAAgB;AAC3B,WAAO,IAAI,CAAC,MAAM,OAAO,gCAAsC,CAAC,CAAC;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW;AACf,QAAI,CAAC,KAAK;AAAgB;AAE1B,UAAM,OAAO,MAAM,KAAK,IAAI,UAAU,KAAK,MAAM;AACjD,UAAM,KAAK,cAAc;AAAA,EAC3B;AACF;","names":[]}
@@ -1,4 +1,4 @@
1
- import type { AssemblerHookHandler } from '@adonisjs/application/types';
1
+ import type { AssemblerHookHandler } from '@adonisjs/core/types/app';
2
2
  /**
3
3
  * This is an Assembler hook that should be executed when the application is
4
4
  * builded using the `node ace build` command.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/build_hook.ts"],"sourcesContent":["/*\n * @adonisjs/vite\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { multibuild } from '@vavite/multibuild'\nimport type { AssemblerHookHandler } from '@adonisjs/application/types'\n\n/**\n * This is an Assembler hook that should be executed when the application is\n * builded using the `node ace build` command.\n *\n * The hook is responsible for launching a Vite multi-build process.\n */\nexport default async function viteBuildHook({ logger }: Parameters<AssemblerHookHandler>[0]) {\n logger.info('building assets with vite')\n\n await multibuild(undefined, {\n onStartBuildStep: (step) => {\n if (!step.currentStep.description) return\n\n logger.info(step.currentStep.description)\n },\n })\n}\n"],"mappings":";AASA,SAAS,kBAAkB;AAS3B,eAAO,cAAqC,EAAE,OAAO,GAAwC;AAC3F,SAAO,KAAK,2BAA2B;AAEvC,QAAM,WAAW,QAAW;AAAA,IAC1B,kBAAkB,CAAC,SAAS;AAC1B,UAAI,CAAC,KAAK,YAAY;AAAa;AAEnC,aAAO,KAAK,KAAK,YAAY,WAAW;AAAA,IAC1C;AAAA,EACF,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../../src/hooks/build_hook.ts"],"sourcesContent":["/*\n * @adonisjs/vite\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { multibuild } from '@vavite/multibuild'\nimport type { AssemblerHookHandler } from '@adonisjs/core/types/app'\n\n/**\n * This is an Assembler hook that should be executed when the application is\n * builded using the `node ace build` command.\n *\n * The hook is responsible for launching a Vite multi-build process.\n */\nexport default async function viteBuildHook({ logger }: Parameters<AssemblerHookHandler>[0]) {\n logger.info('building assets with vite')\n\n await multibuild(undefined, {\n onStartBuildStep: (step) => {\n if (!step.currentStep.description) return\n\n logger.info(step.currentStep.description)\n },\n })\n}\n"],"mappings":";AASA,SAAS,kBAAkB;AAS3B,eAAO,cAAqC,EAAE,OAAO,GAAwC;AAC3F,SAAO,KAAK,2BAA2B;AAEvC,QAAM,WAAW,QAAW;AAAA,IAC1B,kBAAkB,CAAC,SAAS;AAC1B,UAAI,CAAC,KAAK,YAAY;AAAa;AAEnC,aAAO,KAAK,KAAK,YAAY,WAAW;AAAA,IAC1C;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -67,4 +67,4 @@ var edgePluginVite = (vite) => {
67
67
  export {
68
68
  edgePluginVite
69
69
  };
70
- //# sourceMappingURL=edge-SDXKV2NF.js.map
70
+ //# sourceMappingURL=edge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/plugins/edge.ts"],"sourcesContent":["/*\n * @adonisjs/vite\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport type { Edge } from 'edge.js'\nimport { EdgeError } from 'edge-error'\nimport type { PluginFn } from 'edge.js/types'\n\nimport type { Vite } from '../vite.js'\n\n/**\n * The edge plugin for vite to share vite service with edge\n * and register custom tags\n */\nexport const edgePluginVite: (vite: Vite) => PluginFn<undefined> = (vite) => {\n const edgeVite = (edge: Edge) => {\n edge.global('vite', vite)\n edge.global('asset', vite.assetPath.bind(vite))\n\n edge.registerTag({\n tagName: 'viteReactRefresh',\n seekable: true,\n block: false,\n compile(parser, buffer, token) {\n let attributes = ''\n if (token.properties.jsArg.trim()) {\n /**\n * Converting a single argument to a SequenceExpression so that we\n * work around the following edge cases.\n *\n * - If someone passes an object literal to the tag, ie { nonce: 'foo' }\n * it will be parsed as a LabeledStatement and not an object.\n * - If we wrap the object literal inside parenthesis, ie ({nonce: 'foo'})\n * then we will end up messing other expressions like a variable reference\n * , or a member expression and so on.\n * - So the best bet is to convert user supplied argument to a sequence expression\n * and hence ignore it during stringification.\n */\n const jsArg = `a,${token.properties.jsArg}`\n\n const parsed = parser.utils.transformAst(\n parser.utils.generateAST(jsArg, token.loc, token.filename),\n token.filename,\n parser\n )\n attributes = parser.utils.stringify(parsed.expressions[1])\n }\n\n /**\n * Get HMR script\n */\n buffer.writeExpression(\n `const __vite_hmr_script = state.vite.getReactHmrScript(${attributes})`,\n token.filename,\n token.loc.start.line\n )\n\n /**\n * Check if the script exists (only in hot mode)\n */\n buffer.writeStatement('if(__vite_hmr_script) {', token.filename, token.loc.start.line)\n\n /**\n * Write output\n */\n buffer.outputExpression(\n `__vite_hmr_script.toString()`,\n token.filename,\n token.loc.start.line,\n false\n )\n\n /**\n * Close if block\n */\n buffer.writeStatement('}', token.filename, token.loc.start.line)\n },\n })\n\n edge.registerTag({\n tagName: 'vite',\n seekable: true,\n block: false,\n compile(parser, buffer, token) {\n /**\n * Ensure an argument is defined\n */\n if (!token.properties.jsArg.trim()) {\n throw new EdgeError('Missing entrypoint name', 'E_RUNTIME_EXCEPTION', {\n filename: token.filename,\n line: token.loc.start.line,\n col: token.loc.start.col,\n })\n }\n\n const parsed = parser.utils.transformAst(\n parser.utils.generateAST(token.properties.jsArg, token.loc, token.filename),\n token.filename,\n parser\n )\n\n const entrypoints = parser.utils.stringify(parsed)\n const methodCall =\n parsed.type === 'SequenceExpression'\n ? `generateEntryPointsTags${entrypoints}`\n : `generateEntryPointsTags(${entrypoints})`\n\n buffer.outputExpression(\n `state.vite.${methodCall}.join('\\\\n')`,\n token.filename,\n token.loc.start.line,\n false\n )\n },\n })\n }\n\n return edgeVite\n}\n"],"mappings":";AAUA,SAAS,iBAAiB;AASnB,IAAM,iBAAsD,CAAC,SAAS;AAC3E,QAAM,WAAW,CAAC,SAAe;AAC/B,SAAK,OAAO,QAAQ,IAAI;AACxB,SAAK,OAAO,SAAS,KAAK,UAAU,KAAK,IAAI,CAAC;AAE9C,SAAK,YAAY;AAAA,MACf,SAAS;AAAA,MACT,UAAU;AAAA,MACV,OAAO;AAAA,MACP,QAAQ,QAAQ,QAAQ,OAAO;AAC7B,YAAI,aAAa;AACjB,YAAI,MAAM,WAAW,MAAM,KAAK,GAAG;AAajC,gBAAM,QAAQ,KAAK,MAAM,WAAW,KAAK;AAEzC,gBAAM,SAAS,OAAO,MAAM;AAAA,YAC1B,OAAO,MAAM,YAAY,OAAO,MAAM,KAAK,MAAM,QAAQ;AAAA,YACzD,MAAM;AAAA,YACN;AAAA,UACF;AACA,uBAAa,OAAO,MAAM,UAAU,OAAO,YAAY,CAAC,CAAC;AAAA,QAC3D;AAKA,eAAO;AAAA,UACL,0DAA0D,UAAU;AAAA,UACpE,MAAM;AAAA,UACN,MAAM,IAAI,MAAM;AAAA,QAClB;AAKA,eAAO,eAAe,2BAA2B,MAAM,UAAU,MAAM,IAAI,MAAM,IAAI;AAKrF,eAAO;AAAA,UACL;AAAA,UACA,MAAM;AAAA,UACN,MAAM,IAAI,MAAM;AAAA,UAChB;AAAA,QACF;AAKA,eAAO,eAAe,KAAK,MAAM,UAAU,MAAM,IAAI,MAAM,IAAI;AAAA,MACjE;AAAA,IACF,CAAC;AAED,SAAK,YAAY;AAAA,MACf,SAAS;AAAA,MACT,UAAU;AAAA,MACV,OAAO;AAAA,MACP,QAAQ,QAAQ,QAAQ,OAAO;AAI7B,YAAI,CAAC,MAAM,WAAW,MAAM,KAAK,GAAG;AAClC,gBAAM,IAAI,UAAU,2BAA2B,uBAAuB;AAAA,YACpE,UAAU,MAAM;AAAA,YAChB,MAAM,MAAM,IAAI,MAAM;AAAA,YACtB,KAAK,MAAM,IAAI,MAAM;AAAA,UACvB,CAAC;AAAA,QACH;AAEA,cAAM,SAAS,OAAO,MAAM;AAAA,UAC1B,OAAO,MAAM,YAAY,MAAM,WAAW,OAAO,MAAM,KAAK,MAAM,QAAQ;AAAA,UAC1E,MAAM;AAAA,UACN;AAAA,QACF;AAEA,cAAM,cAAc,OAAO,MAAM,UAAU,MAAM;AACjD,cAAM,aACJ,OAAO,SAAS,uBACZ,0BAA0B,WAAW,KACrC,2BAA2B,WAAW;AAE5C,eAAO;AAAA,UACL,cAAc,UAAU;AAAA,UACxB,MAAM;AAAA,UACN,MAAM,IAAI,MAAM;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}
@@ -7,20 +7,18 @@ import type { AdonisViteElement, ViteOptions } from './types.js';
7
7
  */
8
8
  export declare class Vite {
9
9
  #private;
10
- protected inDev: boolean;
11
- constructor(inDev: boolean, options: ViteOptions);
10
+ protected isViteRunning: boolean;
11
+ constructor(isViteRunning: boolean, options: ViteOptions);
12
12
  /**
13
13
  * Generate tags for the entry points
14
14
  */
15
15
  generateEntryPointsTags(entryPoints: string[] | string, attributes?: Record<string, any>): AdonisViteElement[];
16
16
  /**
17
- * Returns the dev server URL when running in hot
18
- * mode, otherwise returns the explicitly configured
19
- * "assets" URL
17
+ * Returns the explicitly configured assetsUrl
20
18
  */
21
- assetsUrl(): string | boolean | undefined;
19
+ assetsUrl(): string | undefined;
22
20
  /**
23
- * Returns path to a given asset file
21
+ * Returns path to a given asset file using the manifest file
24
22
  */
25
23
  assetPath(asset: string): string;
26
24
  /**
@@ -0,0 +1,7 @@
1
+ import {
2
+ ViteMiddleware
3
+ } from "./chunk-MQRASPMO.js";
4
+ export {
5
+ ViteMiddleware as default
6
+ };
7
+ //# sourceMappingURL=vite_middleware-AQXJUYMB.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@adonisjs/vite",
3
3
  "description": "Vite plugin for AdonisJS",
4
- "version": "3.0.0-2",
4
+ "version": "3.0.0-4",
5
5
  "engines": {
6
6
  "node": ">=20.6.0"
7
7
  },
@@ -16,10 +16,11 @@
16
16
  "exports": {
17
17
  ".": "./build/index.js",
18
18
  "./vite_provider": "./build/providers/vite_provider.js",
19
+ "./plugins/edge": "./build/src/plugins/edge.js",
20
+ "./build_hook": "./build/src/hooks/build_hook.js",
19
21
  "./services/main": "./build/services/vite.js",
20
- "./types": "./build/src/types.js",
21
22
  "./client": "./build/src/client/main.js",
22
- "./build_hook": "./build/src/hooks/build_hook.js"
23
+ "./types": "./build/src/types.js"
23
24
  },
24
25
  "scripts": {
25
26
  "clean": "del-cli build",
@@ -38,16 +39,17 @@
38
39
  "prepublishOnly": "npm run build"
39
40
  },
40
41
  "devDependencies": {
41
- "@adonisjs/application": "8.1.0",
42
42
  "@adonisjs/assembler": "^7.2.2",
43
43
  "@adonisjs/core": "6.3.1",
44
44
  "@adonisjs/eslint-config": "^1.2.1",
45
45
  "@adonisjs/prettier-config": "^1.2.1",
46
+ "@adonisjs/session": "^7.1.1",
46
47
  "@adonisjs/shield": "^8.1.1",
47
48
  "@adonisjs/tsconfig": "^1.2.1",
48
49
  "@japa/assert": "2.1.0",
49
50
  "@japa/file-system": "^2.2.0",
50
51
  "@japa/runner": "3.1.1",
52
+ "@japa/snapshot": "^2.0.4",
51
53
  "@swc/core": "^1.4.2",
52
54
  "@types/node": "^20.11.20",
53
55
  "c8": "^9.1.0",
@@ -122,12 +124,13 @@
122
124
  },
123
125
  "tsup": {
124
126
  "entry": [
125
- "./index.ts",
127
+ "./src/hooks/build_hook.ts",
126
128
  "./providers/vite_provider.ts",
129
+ "./src/plugins/edge.ts",
130
+ "./src/client/main.ts",
127
131
  "./services/vite.ts",
128
132
  "./src/types.ts",
129
- "./src/client/main.ts",
130
- "./src/hooks/build_hook.ts"
133
+ "./index.ts"
131
134
  ],
132
135
  "outDir": "./build",
133
136
  "clean": true,
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/vite.ts"],"sourcesContent":["/*\n * @adonisjs/vite\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { readFileSync } from 'node:fs'\nimport type { ViteRuntime } from 'vite/runtime'\nimport type { Manifest, ViteDevServer } from 'vite'\n\nimport { makeAttributes, uniqBy } from './utils.js'\nimport type { AdonisViteElement, SetAttributes, ViteOptions } from './types.js'\n\n/**\n * Vite class exposes the APIs to generate tags and URLs for\n * assets processed using vite.\n */\nexport class Vite {\n /**\n * We cache the manifest file content in production\n * to avoid reading the file multiple times\n */\n #manifestCache?: Manifest\n #options: ViteOptions\n #runtime?: ViteRuntime\n #devServer?: ViteDevServer\n\n constructor(\n protected inDev: boolean,\n options: ViteOptions\n ) {\n this.#options = options\n this.#options.assetsUrl = (this.#options.assetsUrl || '/').replace(/\\/$/, '')\n }\n\n /**\n * Reads the file contents as JSON\n */\n #readFileAsJSON(filePath: string) {\n return JSON.parse(readFileSync(filePath, 'utf-8'))\n }\n\n /**\n * Generates a JSON element with a custom toString implementation\n */\n #generateElement(element: AdonisViteElement) {\n return {\n ...element,\n toString() {\n const attributes = `${makeAttributes(element.attributes)}`\n if (element.tag === 'link') {\n return `<${element.tag} ${attributes}/>`\n }\n\n return `<${element.tag} ${attributes}>${element.children.join('\\n')}</${element.tag}>`\n },\n }\n }\n\n /**\n * Returns the script needed for the HMR working with Vite\n */\n #getViteHmrScript(attributes?: Record<string, any>): AdonisViteElement | null {\n return this.#generateElement({\n tag: 'script',\n attributes: {\n type: 'module',\n src: '/@vite/client',\n ...attributes,\n },\n children: [],\n })\n }\n\n /**\n * Check if the given path is a CSS path\n */\n #isCssPath(path: string) {\n return path.match(/\\.(css|less|sass|scss|styl|stylus|pcss|postcss)$/) !== null\n }\n\n /**\n * Unwrap attributes from the user defined function or return\n * the attributes as it is\n */\n #unwrapAttributes(src: string, url: string, attributes?: SetAttributes) {\n if (typeof attributes === 'function') {\n return attributes({ src, url })\n }\n\n return attributes\n }\n\n /**\n * Create a style tag for the given path\n */\n #makeStyleTag(src: string, url: string, attributes?: Record<string, any>): AdonisViteElement {\n const customAttributes = this.#unwrapAttributes(src, url, this.#options?.styleAttributes)\n return this.#generateElement({\n tag: 'link',\n attributes: { rel: 'stylesheet', ...customAttributes, ...attributes, href: url },\n })\n }\n\n /**\n * Create a script tag for the given path\n */\n #makeScriptTag(src: string, url: string, attributes?: Record<string, any>): AdonisViteElement {\n const customAttributes = this.#unwrapAttributes(src, url, this.#options?.scriptAttributes)\n return this.#generateElement({\n tag: 'script',\n attributes: { type: 'module', ...customAttributes, ...attributes, src: url },\n children: [],\n })\n }\n\n /**\n * Generate a HTML tag for the given asset\n */\n #generateTag(asset: string, attributes?: Record<string, any>): AdonisViteElement {\n let url = ''\n if (this.inDev) {\n url = `/${asset}`\n } else {\n url = `${this.#options.assetsUrl}/${asset}`\n }\n\n if (this.#isCssPath(asset)) {\n return this.#makeStyleTag(asset, url, attributes)\n }\n\n return this.#makeScriptTag(asset, url, attributes)\n }\n\n /**\n * Generate style and script tags for the given entrypoints\n * Also adds the @vite/client script\n */\n #generateEntryPointsTagsForHotMode(\n entryPoints: string[],\n attributes?: Record<string, any>\n ): AdonisViteElement[] {\n const viteHmr = this.#getViteHmrScript(attributes)\n const tags = entryPoints.map((entrypoint) => this.#generateTag(entrypoint, attributes))\n\n const result = viteHmr ? [viteHmr].concat(tags) : tags\n\n return result\n }\n\n /**\n * Get a chunk from the manifest file for a given file name\n */\n #chunk(manifest: Manifest, fileName: string) {\n const chunk = manifest[fileName]\n\n if (!chunk) {\n throw new Error(`Cannot find \"${fileName}\" chunk in the manifest file`)\n }\n\n return chunk\n }\n\n /**\n * Generate style and script tags for the given entrypoints\n * using the manifest file\n */\n #generateEntryPointsTagsWithManifest(\n entryPoints: string[],\n attributes?: Record<string, any>\n ): AdonisViteElement[] {\n const manifest = this.manifest()\n const tags: { path: string; tag: AdonisViteElement }[] = []\n\n for (const entryPoint of entryPoints) {\n const chunk = this.#chunk(manifest, entryPoint)\n tags.push({\n path: chunk.file,\n tag: this.#generateTag(chunk.file, { ...attributes, integrity: chunk.integrity }),\n })\n\n for (const css of chunk.css || []) {\n tags.push({ path: css, tag: this.#generateTag(css) })\n }\n }\n\n return uniqBy(tags, 'path')\n .sort((a) => (a.path.endsWith('.css') ? -1 : 1))\n .map((tag) => tag.tag)\n }\n\n /**\n * Generate tags for the entry points\n */\n generateEntryPointsTags(\n entryPoints: string[] | string,\n attributes?: Record<string, any>\n ): AdonisViteElement[] {\n entryPoints = Array.isArray(entryPoints) ? entryPoints : [entryPoints]\n\n if (this.inDev) {\n return this.#generateEntryPointsTagsForHotMode(entryPoints, attributes)\n }\n\n return this.#generateEntryPointsTagsWithManifest(entryPoints, attributes)\n }\n\n /**\n * Returns the dev server URL when running in hot\n * mode, otherwise returns the explicitly configured\n * \"assets\" URL\n */\n assetsUrl() {\n if (this.inDev) return this.#devServer!.config.server.host\n\n return this.#options.assetsUrl\n }\n\n /**\n * Returns path to a given asset file\n */\n assetPath(asset: string): string {\n if (this.inDev) {\n return `/${asset}`\n }\n\n const chunk = this.#chunk(this.manifest(), asset)\n return `${this.#options.assetsUrl}/${chunk.file}`\n }\n\n /**\n * Returns the manifest file contents\n *\n * @throws Will throw an exception when running in dev\n */\n manifest(): Manifest {\n if (this.inDev) {\n throw new Error('Cannot read the manifest file when running in dev mode')\n }\n\n if (!this.#manifestCache) {\n this.#manifestCache = this.#readFileAsJSON(this.#options.manifestFile)\n }\n\n return this.#manifestCache!\n }\n\n /**\n * Create the Vite Dev Server and runtime\n *\n * We lazy load the APIs to avoid loading it in production\n * since we don't need it\n */\n async createDevServer() {\n const { createViteRuntime, createServer } = await import('vite')\n\n this.#devServer = await createServer({\n server: { middlewareMode: true, hmr: { port: 3001 } },\n appType: 'custom',\n })\n\n this.#runtime = await createViteRuntime(this.#devServer)\n }\n\n /**\n * Stop the Vite Dev server\n */\n async stopDevServer() {\n await this.#devServer?.close()\n }\n\n /**\n * Get the Vite Dev server instance\n * Will not be available when running in production\n */\n getDevServer() {\n return this.#devServer\n }\n\n /**\n * Get the Vite runtime instance\n * Will not be available when running in production\n */\n getRuntime() {\n return this.#runtime\n }\n\n /**\n * Returns the script needed for the HMR working with React\n */\n getReactHmrScript(attributes?: Record<string, any>): AdonisViteElement | null {\n if (!this.inDev) {\n return null\n }\n\n return this.#generateElement({\n tag: 'script',\n attributes: {\n type: 'module',\n ...attributes,\n },\n children: [\n '',\n `import RefreshRuntime from '/@react-refresh'`,\n `RefreshRuntime.injectIntoGlobalHook(window)`,\n `window.$RefreshReg$ = () => {}`,\n `window.$RefreshSig$ = () => (type) => type`,\n `window.__vite_plugin_react_preamble_installed__ = true`,\n '',\n ],\n })\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/middlewares/vite_middleware.ts"],"sourcesContent":["/*\n * @adonisjs/vite\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport type { ViteDevServer } from 'vite'\nimport type { HttpContext } from '@adonisjs/core/http'\nimport type { NextFn } from '@adonisjs/core/types/http'\n\nimport type { Vite } from '../vite.js'\n\n/**\n * Since Vite dev server is integrated within the AdonisJS process, this\n * middleware is used to proxy the requests to it.\n *\n * Some of the requests are directly handled by the Vite dev server,\n * like the one for the assets, while others are passed down to the\n * AdonisJS server.\n */\nexport default class ViteMiddleware {\n #devServer: ViteDevServer\n\n constructor(protected vite: Vite) {\n this.#devServer = this.vite.getDevServer()!\n }\n\n async handle({ request, response }: HttpContext, next: NextFn) {\n return await new Promise((resolve) => {\n this.#devServer.middlewares.handle(request.request, response.response, () => {\n return resolve(next())\n })\n })\n }\n}\n"],"mappings":";AAuBA,IAAqB,iBAArB,MAAoC;AAAA,EAGlC,YAAsB,MAAY;AAAZ;AACpB,SAAK,aAAa,KAAK,KAAK,aAAa;AAAA,EAC3C;AAAA,EAJA;AAAA,EAMA,MAAM,OAAO,EAAE,SAAS,SAAS,GAAgB,MAAc;AAC7D,WAAO,MAAM,IAAI,QAAQ,CAAC,YAAY;AACpC,WAAK,WAAW,YAAY,OAAO,QAAQ,SAAS,SAAS,UAAU,MAAM;AAC3E,eAAO,QAAQ,KAAK,CAAC;AAAA,MACvB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/plugins/edge.ts"],"sourcesContent":["/*\n * @adonisjs/vite\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport type { Edge } from 'edge.js'\nimport { EdgeError } from 'edge-error'\nimport type { PluginFn } from 'edge.js/types'\n\nimport type { Vite } from '../vite.js'\n\n/**\n * The edge plugin for vite to share vite service with edge\n * and register custom tags\n */\nexport const edgePluginVite: (vite: Vite) => PluginFn<undefined> = (vite) => {\n const edgeVite = (edge: Edge) => {\n edge.global('vite', vite)\n edge.global('asset', vite.assetPath.bind(vite))\n\n edge.registerTag({\n tagName: 'viteReactRefresh',\n seekable: true,\n block: false,\n compile(parser, buffer, token) {\n let attributes = ''\n if (token.properties.jsArg.trim()) {\n /**\n * Converting a single argument to a SequenceExpression so that we\n * work around the following edge cases.\n *\n * - If someone passes an object literal to the tag, ie { nonce: 'foo' }\n * it will be parsed as a LabeledStatement and not an object.\n * - If we wrap the object literal inside parenthesis, ie ({nonce: 'foo'})\n * then we will end up messing other expressions like a variable reference\n * , or a member expression and so on.\n * - So the best bet is to convert user supplied argument to a sequence expression\n * and hence ignore it during stringification.\n */\n const jsArg = `a,${token.properties.jsArg}`\n\n const parsed = parser.utils.transformAst(\n parser.utils.generateAST(jsArg, token.loc, token.filename),\n token.filename,\n parser\n )\n attributes = parser.utils.stringify(parsed.expressions[1])\n }\n\n /**\n * Get HMR script\n */\n buffer.writeExpression(\n `const __vite_hmr_script = state.vite.getReactHmrScript(${attributes})`,\n token.filename,\n token.loc.start.line\n )\n\n /**\n * Check if the script exists (only in hot mode)\n */\n buffer.writeStatement('if(__vite_hmr_script) {', token.filename, token.loc.start.line)\n\n /**\n * Write output\n */\n buffer.outputExpression(\n `__vite_hmr_script.toString()`,\n token.filename,\n token.loc.start.line,\n false\n )\n\n /**\n * Close if block\n */\n buffer.writeStatement('}', token.filename, token.loc.start.line)\n },\n })\n\n edge.registerTag({\n tagName: 'vite',\n seekable: true,\n block: false,\n compile(parser, buffer, token) {\n /**\n * Ensure an argument is defined\n */\n if (!token.properties.jsArg.trim()) {\n throw new EdgeError('Missing entrypoint name', 'E_RUNTIME_EXCEPTION', {\n filename: token.filename,\n line: token.loc.start.line,\n col: token.loc.start.col,\n })\n }\n\n const parsed = parser.utils.transformAst(\n parser.utils.generateAST(token.properties.jsArg, token.loc, token.filename),\n token.filename,\n parser\n )\n\n const entrypoints = parser.utils.stringify(parsed)\n const methodCall =\n parsed.type === 'SequenceExpression'\n ? `generateEntryPointsTags${entrypoints}`\n : `generateEntryPointsTags(${entrypoints})`\n\n buffer.outputExpression(\n `state.vite.${methodCall}.join('\\\\n')`,\n token.filename,\n token.loc.start.line,\n false\n )\n },\n })\n }\n\n return edgeVite\n}\n"],"mappings":";AAUA,SAAS,iBAAiB;AASnB,IAAM,iBAAsD,CAAC,SAAS;AAC3E,QAAM,WAAW,CAAC,SAAe;AAC/B,SAAK,OAAO,QAAQ,IAAI;AACxB,SAAK,OAAO,SAAS,KAAK,UAAU,KAAK,IAAI,CAAC;AAE9C,SAAK,YAAY;AAAA,MACf,SAAS;AAAA,MACT,UAAU;AAAA,MACV,OAAO;AAAA,MACP,QAAQ,QAAQ,QAAQ,OAAO;AAC7B,YAAI,aAAa;AACjB,YAAI,MAAM,WAAW,MAAM,KAAK,GAAG;AAajC,gBAAM,QAAQ,KAAK,MAAM,WAAW,KAAK;AAEzC,gBAAM,SAAS,OAAO,MAAM;AAAA,YAC1B,OAAO,MAAM,YAAY,OAAO,MAAM,KAAK,MAAM,QAAQ;AAAA,YACzD,MAAM;AAAA,YACN;AAAA,UACF;AACA,uBAAa,OAAO,MAAM,UAAU,OAAO,YAAY,CAAC,CAAC;AAAA,QAC3D;AAKA,eAAO;AAAA,UACL,0DAA0D,UAAU;AAAA,UACpE,MAAM;AAAA,UACN,MAAM,IAAI,MAAM;AAAA,QAClB;AAKA,eAAO,eAAe,2BAA2B,MAAM,UAAU,MAAM,IAAI,MAAM,IAAI;AAKrF,eAAO;AAAA,UACL;AAAA,UACA,MAAM;AAAA,UACN,MAAM,IAAI,MAAM;AAAA,UAChB;AAAA,QACF;AAKA,eAAO,eAAe,KAAK,MAAM,UAAU,MAAM,IAAI,MAAM,IAAI;AAAA,MACjE;AAAA,IACF,CAAC;AAED,SAAK,YAAY;AAAA,MACf,SAAS;AAAA,MACT,UAAU;AAAA,MACV,OAAO;AAAA,MACP,QAAQ,QAAQ,QAAQ,OAAO;AAI7B,YAAI,CAAC,MAAM,WAAW,MAAM,KAAK,GAAG;AAClC,gBAAM,IAAI,UAAU,2BAA2B,uBAAuB;AAAA,YACpE,UAAU,MAAM;AAAA,YAChB,MAAM,MAAM,IAAI,MAAM;AAAA,YACtB,KAAK,MAAM,IAAI,MAAM;AAAA,UACvB,CAAC;AAAA,QACH;AAEA,cAAM,SAAS,OAAO,MAAM;AAAA,UAC1B,OAAO,MAAM,YAAY,MAAM,WAAW,OAAO,MAAM,KAAK,MAAM,QAAQ;AAAA,UAC1E,MAAM;AAAA,UACN;AAAA,QACF;AAEA,cAAM,cAAc,OAAO,MAAM,UAAU,MAAM;AACjD,cAAM,aACJ,OAAO,SAAS,uBACZ,0BAA0B,WAAW,KACrC,2BAA2B,WAAW;AAE5C,eAAO;AAAA,UACL,cAAc,UAAU;AAAA,UACxB,MAAM;AAAA,UACN,MAAM,IAAI,MAAM;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}
@@ -1,7 +0,0 @@
1
- import {
2
- ViteMiddleware
3
- } from "./chunk-YCD5RGKQ.js";
4
- export {
5
- ViteMiddleware as default
6
- };
7
- //# sourceMappingURL=vite_middleware-HYLIJP2B.js.map