@application-kit/nestjs-vite 0.1.0

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.
Files changed (77) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +42 -0
  4. package/dist/cjs/html-loader/html-loader-with-vite.d.ts +7 -0
  5. package/dist/cjs/html-loader/html-loader-with-vite.js +33 -0
  6. package/dist/cjs/html-loader/html-loader.d.ts +5 -0
  7. package/dist/cjs/html-loader/html-loader.interface.d.ts +4 -0
  8. package/dist/cjs/html-loader/html-loader.interface.js +4 -0
  9. package/dist/cjs/html-loader/html-loader.js +35 -0
  10. package/dist/cjs/html-loader/index.d.ts +3 -0
  11. package/dist/cjs/html-loader/index.js +19 -0
  12. package/dist/cjs/index.d.ts +6 -0
  13. package/dist/cjs/index.js +22 -0
  14. package/dist/cjs/package.json +3 -0
  15. package/dist/cjs/ssr-entry/exceptions/index.d.ts +1 -0
  16. package/dist/cjs/ssr-entry/exceptions/index.js +17 -0
  17. package/dist/cjs/ssr-entry/exceptions/plugin-render.error.d.ts +3 -0
  18. package/dist/cjs/ssr-entry/exceptions/plugin-render.error.js +10 -0
  19. package/dist/cjs/ssr-entry/index.d.ts +3 -0
  20. package/dist/cjs/ssr-entry/index.js +19 -0
  21. package/dist/cjs/ssr-entry/ssr-entry-with-vite.d.ts +8 -0
  22. package/dist/cjs/ssr-entry/ssr-entry-with-vite.js +44 -0
  23. package/dist/cjs/ssr-entry/ssr-entry.interface.d.ts +9 -0
  24. package/dist/cjs/ssr-entry/ssr-entry.interface.js +4 -0
  25. package/dist/cjs/vite-application-renderer.interface.d.ts +11 -0
  26. package/dist/cjs/vite-application-renderer.interface.js +4 -0
  27. package/dist/cjs/vite-plugin/create-middleware.d.ts +7 -0
  28. package/dist/cjs/vite-plugin/create-middleware.js +50 -0
  29. package/dist/cjs/vite-plugin/index.d.ts +4 -0
  30. package/dist/cjs/vite-plugin/index.js +20 -0
  31. package/dist/cjs/vite-plugin/nest-handler.d.ts +13 -0
  32. package/dist/cjs/vite-plugin/nest-handler.js +9 -0
  33. package/dist/cjs/vite-plugin/plugin-config.interface.d.ts +3 -0
  34. package/dist/cjs/vite-plugin/plugin-config.interface.js +2 -0
  35. package/dist/cjs/vite-plugin/vite-plugin-node.d.ts +3 -0
  36. package/dist/cjs/vite-plugin/vite-plugin-node.js +24 -0
  37. package/dist/cjs/vite.constants.d.ts +1 -0
  38. package/dist/cjs/vite.constants.js +4 -0
  39. package/dist/cjs/vite.module.d.ts +2 -0
  40. package/dist/cjs/vite.module.js +27 -0
  41. package/dist/esm/html-loader/html-loader-with-vite.d.ts +7 -0
  42. package/dist/esm/html-loader/html-loader-with-vite.js +30 -0
  43. package/dist/esm/html-loader/html-loader.d.ts +5 -0
  44. package/dist/esm/html-loader/html-loader.interface.d.ts +4 -0
  45. package/dist/esm/html-loader/html-loader.interface.js +1 -0
  46. package/dist/esm/html-loader/html-loader.js +28 -0
  47. package/dist/esm/html-loader/index.d.ts +3 -0
  48. package/dist/esm/html-loader/index.js +3 -0
  49. package/dist/esm/index.d.ts +6 -0
  50. package/dist/esm/index.js +6 -0
  51. package/dist/esm/ssr-entry/exceptions/index.d.ts +1 -0
  52. package/dist/esm/ssr-entry/exceptions/index.js +1 -0
  53. package/dist/esm/ssr-entry/exceptions/plugin-render.error.d.ts +3 -0
  54. package/dist/esm/ssr-entry/exceptions/plugin-render.error.js +6 -0
  55. package/dist/esm/ssr-entry/index.d.ts +3 -0
  56. package/dist/esm/ssr-entry/index.js +3 -0
  57. package/dist/esm/ssr-entry/ssr-entry-with-vite.d.ts +8 -0
  58. package/dist/esm/ssr-entry/ssr-entry-with-vite.js +41 -0
  59. package/dist/esm/ssr-entry/ssr-entry.interface.d.ts +9 -0
  60. package/dist/esm/ssr-entry/ssr-entry.interface.js +1 -0
  61. package/dist/esm/vite-application-renderer.interface.d.ts +11 -0
  62. package/dist/esm/vite-application-renderer.interface.js +1 -0
  63. package/dist/esm/vite-plugin/create-middleware.d.ts +7 -0
  64. package/dist/esm/vite-plugin/create-middleware.js +46 -0
  65. package/dist/esm/vite-plugin/index.d.ts +4 -0
  66. package/dist/esm/vite-plugin/index.js +4 -0
  67. package/dist/esm/vite-plugin/nest-handler.d.ts +13 -0
  68. package/dist/esm/vite-plugin/nest-handler.js +5 -0
  69. package/dist/esm/vite-plugin/plugin-config.interface.d.ts +3 -0
  70. package/dist/esm/vite-plugin/plugin-config.interface.js +1 -0
  71. package/dist/esm/vite-plugin/vite-plugin-node.d.ts +3 -0
  72. package/dist/esm/vite-plugin/vite-plugin-node.js +20 -0
  73. package/dist/esm/vite.constants.d.ts +1 -0
  74. package/dist/esm/vite.constants.js +1 -0
  75. package/dist/esm/vite.module.d.ts +2 -0
  76. package/dist/esm/vite.module.js +24 -0
  77. package/package.json +84 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # @application-kit/nestjs-vite
2
+
3
+ ## 0.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - a77104a: Первый выпуск: интеграция Vite в NestJS — dev-обвязка, загрузка HTML, обвязка SSR-entry.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 application-kit
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,42 @@
1
+ # @application-kit/nestjs-vite
2
+
3
+ Интеграция Vite в NestJS: dev-обвязка (Vite dev server отдаёт статику, остальное — в Nest),
4
+ загрузка `index.html` и обвязка SSR-entry — в dev через Vite, в production из собранных файлов.
5
+
6
+ ## Установка
7
+
8
+ ```sh
9
+ yarn add @application-kit/nestjs-vite
10
+ ```
11
+
12
+ Peer-зависимости: `@nestjs/common`, `@nestjs/platform-fastify`, `fastify`, `vite`.
13
+
14
+ ## Dev-сервер
15
+
16
+ ```ts
17
+ // vite.config.mts
18
+ import { vitePluginNode } from '@application-kit/nestjs-vite/vite-plugin'
19
+
20
+ export default defineConfig({
21
+ plugins: [...vitePluginNode({ appPath: './src/web.ts' })],
22
+ })
23
+ ```
24
+
25
+ `appPath` — модуль, чей `default()` возвращает Nest-приложение на Fastify. Запросы со
26
+ статическими расширениями и внутренние пути Vite уходят в Vite, остальные — в Nest; при
27
+ горячем обновлении приложение пересоздаётся.
28
+
29
+ ## Рендер
30
+
31
+ - `ViteModule` — глобальный модуль с Vite dev server под токеном `VITE_DEV_SERVER` (только dev).
32
+ - `HTML_LOADER_INTERFACE` — `HtmlLoaderWithVite` (dev, `transformIndexHtml`) или `HtmlLoader`
33
+ (production, читает `index.html` один раз и кеширует).
34
+ - `SSR_ENTRY_INTERFACE` — SSR-entry приложения; в dev его оборачивает `SsrEntryWithVite`:
35
+ ошибка рендера получает стектрейс по исходникам (`ssrFixStacktrace`) и уходит как `PluginRenderError`.
36
+ - `VITE_APPLICATION_RENDERER` — токен рендерера приложения (`ViteApplicationRendererInterface`),
37
+ реализация остаётся за приложением.
38
+
39
+ ## Формат
40
+
41
+ ESM и CJS. Это две копии с разными классами и токенами — в одном процессе пакет
42
+ подключается одним способом (`import` либо `require`), иначе DI получит два `ViteModule`.
@@ -0,0 +1,7 @@
1
+ import type { ViteDevServer } from 'vite';
2
+ import { HtmlLoaderInterface } from './html-loader.interface.js';
3
+ export declare class HtmlLoaderWithVite implements HtmlLoaderInterface {
4
+ private readonly viteDevelopmentServer;
5
+ constructor(viteDevelopmentServer: ViteDevServer);
6
+ loadHtml(pathPrefix: string, url: string): Promise<string>;
7
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.HtmlLoaderWithVite = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const vite_constants_js_1 = require("../vite.constants.js");
18
+ const html_loader_js_1 = require("./html-loader.js");
19
+ let HtmlLoaderWithVite = class HtmlLoaderWithVite {
20
+ viteDevelopmentServer;
21
+ constructor(viteDevelopmentServer) {
22
+ this.viteDevelopmentServer = viteDevelopmentServer;
23
+ }
24
+ async loadHtml(pathPrefix, url) {
25
+ return this.viteDevelopmentServer.transformIndexHtml(url, (0, html_loader_js_1.readIndexHtml)(pathPrefix));
26
+ }
27
+ };
28
+ exports.HtmlLoaderWithVite = HtmlLoaderWithVite;
29
+ exports.HtmlLoaderWithVite = HtmlLoaderWithVite = __decorate([
30
+ (0, common_1.Injectable)(),
31
+ __param(0, (0, common_1.Inject)(vite_constants_js_1.VITE_DEV_SERVER)),
32
+ __metadata("design:paramtypes", [Object])
33
+ ], HtmlLoaderWithVite);
@@ -0,0 +1,5 @@
1
+ import { HtmlLoaderInterface } from './html-loader.interface.js';
2
+ export declare const readIndexHtml: (pathPrefix: string) => string;
3
+ export declare class HtmlLoader implements HtmlLoaderInterface {
4
+ loadHtml(pathPrefix: string): Promise<string>;
5
+ }
@@ -0,0 +1,4 @@
1
+ export declare const HTML_LOADER_INTERFACE: unique symbol;
2
+ export interface HtmlLoaderInterface {
3
+ loadHtml(pathPrefix: string, url?: string): Promise<string>;
4
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HTML_LOADER_INTERFACE = void 0;
4
+ exports.HTML_LOADER_INTERFACE = Symbol('HTML_LOADER_INTERFACE');
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.HtmlLoader = exports.readIndexHtml = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const node_fs_1 = require("node:fs");
15
+ const node_path_1 = __importDefault(require("node:path"));
16
+ const readIndexHtml = (pathPrefix) => (0, node_fs_1.readFileSync)(node_path_1.default.resolve(`${pathPrefix}/index.html`), {
17
+ encoding: 'utf8',
18
+ });
19
+ exports.readIndexHtml = readIndexHtml;
20
+ const htmlByPathPrefix = new Map();
21
+ let HtmlLoader = class HtmlLoader {
22
+ async loadHtml(pathPrefix) {
23
+ const cached = htmlByPathPrefix.get(pathPrefix);
24
+ if (cached !== undefined) {
25
+ return cached;
26
+ }
27
+ const html = (0, exports.readIndexHtml)(pathPrefix);
28
+ htmlByPathPrefix.set(pathPrefix, html);
29
+ return html;
30
+ }
31
+ };
32
+ exports.HtmlLoader = HtmlLoader;
33
+ exports.HtmlLoader = HtmlLoader = __decorate([
34
+ (0, common_1.Injectable)()
35
+ ], HtmlLoader);
@@ -0,0 +1,3 @@
1
+ export * from './html-loader.js';
2
+ export * from './html-loader-with-vite.js';
3
+ export * from './html-loader.interface.js';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./html-loader.js"), exports);
18
+ __exportStar(require("./html-loader-with-vite.js"), exports);
19
+ __exportStar(require("./html-loader.interface.js"), exports);
@@ -0,0 +1,6 @@
1
+ export * from './html-loader/index.js';
2
+ export * from './ssr-entry/index.js';
3
+ export * from './vite-plugin/index.js';
4
+ export * from './vite-application-renderer.interface.js';
5
+ export * from './vite.constants.js';
6
+ export * from './vite.module.js';
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./html-loader/index.js"), exports);
18
+ __exportStar(require("./ssr-entry/index.js"), exports);
19
+ __exportStar(require("./vite-plugin/index.js"), exports);
20
+ __exportStar(require("./vite-application-renderer.interface.js"), exports);
21
+ __exportStar(require("./vite.constants.js"), exports);
22
+ __exportStar(require("./vite.module.js"), exports);
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
@@ -0,0 +1 @@
1
+ export * from './plugin-render.error.js';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./plugin-render.error.js"), exports);
@@ -0,0 +1,3 @@
1
+ export declare class PluginRenderError extends Error {
2
+ constructor(error: PluginRenderError, options?: ErrorOptions);
3
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PluginRenderError = void 0;
4
+ class PluginRenderError extends Error {
5
+ constructor(error, options) {
6
+ super(`Vite plugin render error: ${error.message}`, options);
7
+ this.name = 'PluginRenderError';
8
+ }
9
+ }
10
+ exports.PluginRenderError = PluginRenderError;
@@ -0,0 +1,3 @@
1
+ export * from './exceptions/index.js';
2
+ export * from './ssr-entry-with-vite.js';
3
+ export * from './ssr-entry.interface.js';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./exceptions/index.js"), exports);
18
+ __exportStar(require("./ssr-entry-with-vite.js"), exports);
19
+ __exportStar(require("./ssr-entry.interface.js"), exports);
@@ -0,0 +1,8 @@
1
+ import type { ViteDevServer } from 'vite';
2
+ import type { SsrEntryInterface, SsrEntryInterfaceRender } from './ssr-entry.interface.js';
3
+ export declare class SsrEntryWithVite implements SsrEntryInterface<unknown> {
4
+ private readonly originSsrEntry;
5
+ private readonly viteDevelopmentServer;
6
+ constructor(originSsrEntry: SsrEntryInterface<unknown>, viteDevelopmentServer: ViteDevServer);
7
+ render(url: string, initialState?: Record<string, unknown>): SsrEntryInterfaceRender<unknown>;
8
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.SsrEntryWithVite = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const vite_constants_js_1 = require("../vite.constants.js");
18
+ const plugin_render_error_js_1 = require("./exceptions/plugin-render.error.js");
19
+ let SsrEntryWithVite = class SsrEntryWithVite {
20
+ originSsrEntry;
21
+ viteDevelopmentServer;
22
+ constructor(originSsrEntry, viteDevelopmentServer) {
23
+ this.originSsrEntry = originSsrEntry;
24
+ this.viteDevelopmentServer = viteDevelopmentServer;
25
+ }
26
+ async render(url, initialState) {
27
+ try {
28
+ return await this.originSsrEntry.render(url, initialState);
29
+ }
30
+ catch (error) {
31
+ if (Error.isError(error)) {
32
+ this.viteDevelopmentServer.ssrFixStacktrace(error);
33
+ throw new plugin_render_error_js_1.PluginRenderError(error);
34
+ }
35
+ throw error;
36
+ }
37
+ }
38
+ };
39
+ exports.SsrEntryWithVite = SsrEntryWithVite;
40
+ exports.SsrEntryWithVite = SsrEntryWithVite = __decorate([
41
+ (0, common_1.Injectable)(),
42
+ __param(1, (0, common_1.Inject)(vite_constants_js_1.VITE_DEV_SERVER)),
43
+ __metadata("design:paramtypes", [Object, Object])
44
+ ], SsrEntryWithVite);
@@ -0,0 +1,9 @@
1
+ export declare const SSR_ENTRY_INTERFACE: unique symbol;
2
+ export interface SsrEntryInterface<SsrContext> {
3
+ render(url: string, initialState?: Record<string, unknown>): SsrEntryInterfaceRender<SsrContext>;
4
+ }
5
+ export type SsrEntryInterfaceRender<T> = Promise<{
6
+ context: T;
7
+ store: string;
8
+ template: string;
9
+ }>;
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SSR_ENTRY_INTERFACE = void 0;
4
+ exports.SSR_ENTRY_INTERFACE = Symbol('SSR_ENTRY_INTERFACE');
@@ -0,0 +1,11 @@
1
+ import type { HttpStatus } from '@nestjs/common';
2
+ import type { FastifyRequest } from 'fastify';
3
+ interface AppInterface {
4
+ html: string;
5
+ statusCode: HttpStatus;
6
+ }
7
+ interface ViteAppRendererInterface {
8
+ renderApplication(request: FastifyRequest, initialState?: Record<string, unknown>): Promise<AppInterface>;
9
+ }
10
+ export type { AppInterface as ApplicationInterface, ViteAppRendererInterface as ViteApplicationRendererInterface };
11
+ export declare const VITE_APPLICATION_RENDERER: unique symbol;
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VITE_APPLICATION_RENDERER = void 0;
4
+ exports.VITE_APPLICATION_RENDERER = Symbol('VITE_APPLICATION_RENDERER');
@@ -0,0 +1,7 @@
1
+ import type { Connect, UserConfig, ViteDevServer } from 'vite';
2
+ import type { PluginConfigInterface } from './plugin-config.interface.js';
3
+ declare const restartApp: () => Promise<void>;
4
+ declare const createMiddleware: (server: ViteDevServer, config: {
5
+ VitePluginNodeConfig: PluginConfigInterface;
6
+ } & UserConfig) => Promise<Connect.HandleFunction>;
7
+ export { createMiddleware, restartApp };
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.restartApp = exports.createMiddleware = void 0;
4
+ const nest_handler_js_1 = require("./nest-handler.js");
5
+ const STATIC_EXTENSIONS = [
6
+ '.css',
7
+ '.ico',
8
+ '.jpg',
9
+ '.js',
10
+ '.mjs',
11
+ '.png',
12
+ '.scss',
13
+ '.svg',
14
+ '.ts',
15
+ '.vue',
16
+ '.woff2',
17
+ ];
18
+ const VITE_INTERNAL_PREFIXES = ['/@fs', '/@id', '/@vite', '/node_modules'];
19
+ const isStaticUrl = (url) => STATIC_EXTENSIONS.some((extension) => url.includes(extension))
20
+ || VITE_INTERNAL_PREFIXES.some((prefix) => url.startsWith(prefix));
21
+ const cache = { app: null };
22
+ const getApp = async (server, appPath) => {
23
+ if (cache.app !== null) {
24
+ return cache.app;
25
+ }
26
+ const appModule = (await server.ssrLoadModule(appPath));
27
+ const appHandler = appModule.default;
28
+ cache.app = await appHandler();
29
+ await cache.app.init();
30
+ return cache.app;
31
+ };
32
+ const restartApp = async () => {
33
+ await cache.app?.close();
34
+ cache.app = null;
35
+ };
36
+ exports.restartApp = restartApp;
37
+ const createMiddleware = async (server, config) => async (request, response, next) => {
38
+ if (request.url !== undefined && isStaticUrl(request.url)) {
39
+ next();
40
+ return;
41
+ }
42
+ await (0, nest_handler_js_1.nestHandler)({
43
+ app: await getApp(server, config.VitePluginNodeConfig.appPath),
44
+ next,
45
+ req: request,
46
+ res: response,
47
+ server,
48
+ });
49
+ };
50
+ exports.createMiddleware = createMiddleware;
@@ -0,0 +1,4 @@
1
+ export * from './create-middleware.js';
2
+ export * from './nest-handler.js';
3
+ export * from './plugin-config.interface.js';
4
+ export * from './vite-plugin-node.js';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./create-middleware.js"), exports);
18
+ __exportStar(require("./nest-handler.js"), exports);
19
+ __exportStar(require("./plugin-config.interface.js"), exports);
20
+ __exportStar(require("./vite-plugin-node.js"), exports);
@@ -0,0 +1,13 @@
1
+ import type { NestFastifyApplication } from '@nestjs/platform-fastify';
2
+ import type http from 'node:http';
3
+ import type { Connect, ViteDevServer } from 'vite';
4
+ declare type RequestAdapter<App = NestFastifyApplication> = (parameters: RequestAdapterParametersInterface<App>) => Promise<void> | void;
5
+ declare interface RequestAdapterParametersInterface<App> {
6
+ app: App;
7
+ next: Connect.NextFunction;
8
+ req: http.IncomingMessage;
9
+ res: http.ServerResponse;
10
+ server: ViteDevServer;
11
+ }
12
+ export type { RequestAdapter };
13
+ export declare const nestHandler: RequestAdapter;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nestHandler = void 0;
4
+ const nestHandler = async ({ app, req, res }) => {
5
+ const instance = app.getHttpAdapter().getInstance();
6
+ await instance.ready();
7
+ instance.routing(req, res);
8
+ };
9
+ exports.nestHandler = nestHandler;
@@ -0,0 +1,3 @@
1
+ export interface PluginConfigInterface {
2
+ appPath: string;
3
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from 'vite';
2
+ import type { PluginConfigInterface } from './plugin-config.interface.js';
3
+ export declare const vitePluginNode: (config_: PluginConfigInterface) => Plugin[];
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.vitePluginNode = void 0;
4
+ const create_middleware_js_1 = require("./create-middleware.js");
5
+ const vitePluginNode = (config_) => {
6
+ const config = {
7
+ appPath: config_.appPath,
8
+ };
9
+ const pluginConfig = {
10
+ VitePluginNodeConfig: config,
11
+ };
12
+ const plugin = {
13
+ config: () => pluginConfig,
14
+ configureServer: async (server) => {
15
+ server.middlewares.use(await (0, create_middleware_js_1.createMiddleware)(server, pluginConfig));
16
+ },
17
+ hotUpdate: async () => {
18
+ await (0, create_middleware_js_1.restartApp)();
19
+ },
20
+ name: 'vite-plugin-node',
21
+ };
22
+ return [plugin];
23
+ };
24
+ exports.vitePluginNode = vitePluginNode;
@@ -0,0 +1 @@
1
+ export declare const VITE_DEV_SERVER: unique symbol;
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VITE_DEV_SERVER = void 0;
4
+ exports.VITE_DEV_SERVER = Symbol('VITE_DEV_SERVER');
@@ -0,0 +1,2 @@
1
+ export declare class ViteModule {
2
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ViteModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const vite_1 = require("vite");
12
+ const vite_constants_js_1 = require("./vite.constants.js");
13
+ let ViteModule = class ViteModule {
14
+ };
15
+ exports.ViteModule = ViteModule;
16
+ exports.ViteModule = ViteModule = __decorate([
17
+ (0, common_1.Global)(),
18
+ (0, common_1.Module)({
19
+ exports: [vite_constants_js_1.VITE_DEV_SERVER],
20
+ providers: [
21
+ {
22
+ provide: vite_constants_js_1.VITE_DEV_SERVER,
23
+ useFactory: async () => (0, vite_1.createServer)(),
24
+ },
25
+ ],
26
+ })
27
+ ], ViteModule);
@@ -0,0 +1,7 @@
1
+ import type { ViteDevServer } from 'vite';
2
+ import { HtmlLoaderInterface } from './html-loader.interface.js';
3
+ export declare class HtmlLoaderWithVite implements HtmlLoaderInterface {
4
+ private readonly viteDevelopmentServer;
5
+ constructor(viteDevelopmentServer: ViteDevServer);
6
+ loadHtml(pathPrefix: string, url: string): Promise<string>;
7
+ }
@@ -0,0 +1,30 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { Inject, Injectable } from '@nestjs/common';
14
+ import { VITE_DEV_SERVER } from '../vite.constants.js';
15
+ import { readIndexHtml } from './html-loader.js';
16
+ let HtmlLoaderWithVite = class HtmlLoaderWithVite {
17
+ viteDevelopmentServer;
18
+ constructor(viteDevelopmentServer) {
19
+ this.viteDevelopmentServer = viteDevelopmentServer;
20
+ }
21
+ async loadHtml(pathPrefix, url) {
22
+ return this.viteDevelopmentServer.transformIndexHtml(url, readIndexHtml(pathPrefix));
23
+ }
24
+ };
25
+ HtmlLoaderWithVite = __decorate([
26
+ Injectable(),
27
+ __param(0, Inject(VITE_DEV_SERVER)),
28
+ __metadata("design:paramtypes", [Object])
29
+ ], HtmlLoaderWithVite);
30
+ export { HtmlLoaderWithVite };
@@ -0,0 +1,5 @@
1
+ import { HtmlLoaderInterface } from './html-loader.interface.js';
2
+ export declare const readIndexHtml: (pathPrefix: string) => string;
3
+ export declare class HtmlLoader implements HtmlLoaderInterface {
4
+ loadHtml(pathPrefix: string): Promise<string>;
5
+ }
@@ -0,0 +1,4 @@
1
+ export declare const HTML_LOADER_INTERFACE: unique symbol;
2
+ export interface HtmlLoaderInterface {
3
+ loadHtml(pathPrefix: string, url?: string): Promise<string>;
4
+ }
@@ -0,0 +1 @@
1
+ export const HTML_LOADER_INTERFACE = Symbol('HTML_LOADER_INTERFACE');
@@ -0,0 +1,28 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Injectable } from '@nestjs/common';
8
+ import { readFileSync } from 'node:fs';
9
+ import path from 'node:path';
10
+ export const readIndexHtml = (pathPrefix) => readFileSync(path.resolve(`${pathPrefix}/index.html`), {
11
+ encoding: 'utf8',
12
+ });
13
+ const htmlByPathPrefix = new Map();
14
+ let HtmlLoader = class HtmlLoader {
15
+ async loadHtml(pathPrefix) {
16
+ const cached = htmlByPathPrefix.get(pathPrefix);
17
+ if (cached !== undefined) {
18
+ return cached;
19
+ }
20
+ const html = readIndexHtml(pathPrefix);
21
+ htmlByPathPrefix.set(pathPrefix, html);
22
+ return html;
23
+ }
24
+ };
25
+ HtmlLoader = __decorate([
26
+ Injectable()
27
+ ], HtmlLoader);
28
+ export { HtmlLoader };
@@ -0,0 +1,3 @@
1
+ export * from './html-loader.js';
2
+ export * from './html-loader-with-vite.js';
3
+ export * from './html-loader.interface.js';
@@ -0,0 +1,3 @@
1
+ export * from './html-loader.js';
2
+ export * from './html-loader-with-vite.js';
3
+ export * from './html-loader.interface.js';
@@ -0,0 +1,6 @@
1
+ export * from './html-loader/index.js';
2
+ export * from './ssr-entry/index.js';
3
+ export * from './vite-plugin/index.js';
4
+ export * from './vite-application-renderer.interface.js';
5
+ export * from './vite.constants.js';
6
+ export * from './vite.module.js';
@@ -0,0 +1,6 @@
1
+ export * from './html-loader/index.js';
2
+ export * from './ssr-entry/index.js';
3
+ export * from './vite-plugin/index.js';
4
+ export * from './vite-application-renderer.interface.js';
5
+ export * from './vite.constants.js';
6
+ export * from './vite.module.js';
@@ -0,0 +1 @@
1
+ export * from './plugin-render.error.js';
@@ -0,0 +1 @@
1
+ export * from './plugin-render.error.js';
@@ -0,0 +1,3 @@
1
+ export declare class PluginRenderError extends Error {
2
+ constructor(error: PluginRenderError, options?: ErrorOptions);
3
+ }
@@ -0,0 +1,6 @@
1
+ export class PluginRenderError extends Error {
2
+ constructor(error, options) {
3
+ super(`Vite plugin render error: ${error.message}`, options);
4
+ this.name = 'PluginRenderError';
5
+ }
6
+ }
@@ -0,0 +1,3 @@
1
+ export * from './exceptions/index.js';
2
+ export * from './ssr-entry-with-vite.js';
3
+ export * from './ssr-entry.interface.js';
@@ -0,0 +1,3 @@
1
+ export * from './exceptions/index.js';
2
+ export * from './ssr-entry-with-vite.js';
3
+ export * from './ssr-entry.interface.js';
@@ -0,0 +1,8 @@
1
+ import type { ViteDevServer } from 'vite';
2
+ import type { SsrEntryInterface, SsrEntryInterfaceRender } from './ssr-entry.interface.js';
3
+ export declare class SsrEntryWithVite implements SsrEntryInterface<unknown> {
4
+ private readonly originSsrEntry;
5
+ private readonly viteDevelopmentServer;
6
+ constructor(originSsrEntry: SsrEntryInterface<unknown>, viteDevelopmentServer: ViteDevServer);
7
+ render(url: string, initialState?: Record<string, unknown>): SsrEntryInterfaceRender<unknown>;
8
+ }
@@ -0,0 +1,41 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { Inject, Injectable } from '@nestjs/common';
14
+ import { VITE_DEV_SERVER } from '../vite.constants.js';
15
+ import { PluginRenderError } from './exceptions/plugin-render.error.js';
16
+ let SsrEntryWithVite = class SsrEntryWithVite {
17
+ originSsrEntry;
18
+ viteDevelopmentServer;
19
+ constructor(originSsrEntry, viteDevelopmentServer) {
20
+ this.originSsrEntry = originSsrEntry;
21
+ this.viteDevelopmentServer = viteDevelopmentServer;
22
+ }
23
+ async render(url, initialState) {
24
+ try {
25
+ return await this.originSsrEntry.render(url, initialState);
26
+ }
27
+ catch (error) {
28
+ if (Error.isError(error)) {
29
+ this.viteDevelopmentServer.ssrFixStacktrace(error);
30
+ throw new PluginRenderError(error);
31
+ }
32
+ throw error;
33
+ }
34
+ }
35
+ };
36
+ SsrEntryWithVite = __decorate([
37
+ Injectable(),
38
+ __param(1, Inject(VITE_DEV_SERVER)),
39
+ __metadata("design:paramtypes", [Object, Object])
40
+ ], SsrEntryWithVite);
41
+ export { SsrEntryWithVite };
@@ -0,0 +1,9 @@
1
+ export declare const SSR_ENTRY_INTERFACE: unique symbol;
2
+ export interface SsrEntryInterface<SsrContext> {
3
+ render(url: string, initialState?: Record<string, unknown>): SsrEntryInterfaceRender<SsrContext>;
4
+ }
5
+ export type SsrEntryInterfaceRender<T> = Promise<{
6
+ context: T;
7
+ store: string;
8
+ template: string;
9
+ }>;
@@ -0,0 +1 @@
1
+ export const SSR_ENTRY_INTERFACE = Symbol('SSR_ENTRY_INTERFACE');
@@ -0,0 +1,11 @@
1
+ import type { HttpStatus } from '@nestjs/common';
2
+ import type { FastifyRequest } from 'fastify';
3
+ interface AppInterface {
4
+ html: string;
5
+ statusCode: HttpStatus;
6
+ }
7
+ interface ViteAppRendererInterface {
8
+ renderApplication(request: FastifyRequest, initialState?: Record<string, unknown>): Promise<AppInterface>;
9
+ }
10
+ export type { AppInterface as ApplicationInterface, ViteAppRendererInterface as ViteApplicationRendererInterface };
11
+ export declare const VITE_APPLICATION_RENDERER: unique symbol;
@@ -0,0 +1 @@
1
+ export const VITE_APPLICATION_RENDERER = Symbol('VITE_APPLICATION_RENDERER');
@@ -0,0 +1,7 @@
1
+ import type { Connect, UserConfig, ViteDevServer } from 'vite';
2
+ import type { PluginConfigInterface } from './plugin-config.interface.js';
3
+ declare const restartApp: () => Promise<void>;
4
+ declare const createMiddleware: (server: ViteDevServer, config: {
5
+ VitePluginNodeConfig: PluginConfigInterface;
6
+ } & UserConfig) => Promise<Connect.HandleFunction>;
7
+ export { createMiddleware, restartApp };
@@ -0,0 +1,46 @@
1
+ import { nestHandler } from './nest-handler.js';
2
+ const STATIC_EXTENSIONS = [
3
+ '.css',
4
+ '.ico',
5
+ '.jpg',
6
+ '.js',
7
+ '.mjs',
8
+ '.png',
9
+ '.scss',
10
+ '.svg',
11
+ '.ts',
12
+ '.vue',
13
+ '.woff2',
14
+ ];
15
+ const VITE_INTERNAL_PREFIXES = ['/@fs', '/@id', '/@vite', '/node_modules'];
16
+ const isStaticUrl = (url) => STATIC_EXTENSIONS.some((extension) => url.includes(extension))
17
+ || VITE_INTERNAL_PREFIXES.some((prefix) => url.startsWith(prefix));
18
+ const cache = { app: null };
19
+ const getApp = async (server, appPath) => {
20
+ if (cache.app !== null) {
21
+ return cache.app;
22
+ }
23
+ const appModule = (await server.ssrLoadModule(appPath));
24
+ const appHandler = appModule.default;
25
+ cache.app = await appHandler();
26
+ await cache.app.init();
27
+ return cache.app;
28
+ };
29
+ const restartApp = async () => {
30
+ await cache.app?.close();
31
+ cache.app = null;
32
+ };
33
+ const createMiddleware = async (server, config) => async (request, response, next) => {
34
+ if (request.url !== undefined && isStaticUrl(request.url)) {
35
+ next();
36
+ return;
37
+ }
38
+ await nestHandler({
39
+ app: await getApp(server, config.VitePluginNodeConfig.appPath),
40
+ next,
41
+ req: request,
42
+ res: response,
43
+ server,
44
+ });
45
+ };
46
+ export { createMiddleware, restartApp };
@@ -0,0 +1,4 @@
1
+ export * from './create-middleware.js';
2
+ export * from './nest-handler.js';
3
+ export * from './plugin-config.interface.js';
4
+ export * from './vite-plugin-node.js';
@@ -0,0 +1,4 @@
1
+ export * from './create-middleware.js';
2
+ export * from './nest-handler.js';
3
+ export * from './plugin-config.interface.js';
4
+ export * from './vite-plugin-node.js';
@@ -0,0 +1,13 @@
1
+ import type { NestFastifyApplication } from '@nestjs/platform-fastify';
2
+ import type http from 'node:http';
3
+ import type { Connect, ViteDevServer } from 'vite';
4
+ declare type RequestAdapter<App = NestFastifyApplication> = (parameters: RequestAdapterParametersInterface<App>) => Promise<void> | void;
5
+ declare interface RequestAdapterParametersInterface<App> {
6
+ app: App;
7
+ next: Connect.NextFunction;
8
+ req: http.IncomingMessage;
9
+ res: http.ServerResponse;
10
+ server: ViteDevServer;
11
+ }
12
+ export type { RequestAdapter };
13
+ export declare const nestHandler: RequestAdapter;
@@ -0,0 +1,5 @@
1
+ export const nestHandler = async ({ app, req, res }) => {
2
+ const instance = app.getHttpAdapter().getInstance();
3
+ await instance.ready();
4
+ instance.routing(req, res);
5
+ };
@@ -0,0 +1,3 @@
1
+ export interface PluginConfigInterface {
2
+ appPath: string;
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from 'vite';
2
+ import type { PluginConfigInterface } from './plugin-config.interface.js';
3
+ export declare const vitePluginNode: (config_: PluginConfigInterface) => Plugin[];
@@ -0,0 +1,20 @@
1
+ import { createMiddleware, restartApp } from './create-middleware.js';
2
+ export const vitePluginNode = (config_) => {
3
+ const config = {
4
+ appPath: config_.appPath,
5
+ };
6
+ const pluginConfig = {
7
+ VitePluginNodeConfig: config,
8
+ };
9
+ const plugin = {
10
+ config: () => pluginConfig,
11
+ configureServer: async (server) => {
12
+ server.middlewares.use(await createMiddleware(server, pluginConfig));
13
+ },
14
+ hotUpdate: async () => {
15
+ await restartApp();
16
+ },
17
+ name: 'vite-plugin-node',
18
+ };
19
+ return [plugin];
20
+ };
@@ -0,0 +1 @@
1
+ export declare const VITE_DEV_SERVER: unique symbol;
@@ -0,0 +1 @@
1
+ export const VITE_DEV_SERVER = Symbol('VITE_DEV_SERVER');
@@ -0,0 +1,2 @@
1
+ export declare class ViteModule {
2
+ }
@@ -0,0 +1,24 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Global, Module } from '@nestjs/common';
8
+ import { createServer } from 'vite';
9
+ import { VITE_DEV_SERVER } from './vite.constants.js';
10
+ let ViteModule = class ViteModule {
11
+ };
12
+ ViteModule = __decorate([
13
+ Global(),
14
+ Module({
15
+ exports: [VITE_DEV_SERVER],
16
+ providers: [
17
+ {
18
+ provide: VITE_DEV_SERVER,
19
+ useFactory: async () => createServer(),
20
+ },
21
+ ],
22
+ })
23
+ ], ViteModule);
24
+ export { ViteModule };
package/package.json ADDED
@@ -0,0 +1,84 @@
1
+ {
2
+ "name": "@application-kit/nestjs-vite",
3
+ "version": "0.1.0",
4
+ "description": "Мост Vite ↔ NestJS для SSR: dev-обвязка, загрузка HTML и ssr-entry",
5
+ "keywords": [
6
+ "nestjs",
7
+ "ssr",
8
+ "vite"
9
+ ],
10
+ "homepage": "https://gitlab.com/application-kit/application-kit/-/tree/main/packages/nestjs-vite",
11
+ "bugs": "https://gitlab.com/application-kit/application-kit/-/issues",
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://gitlab.com/application-kit/application-kit.git",
15
+ "directory": "packages/nestjs-vite"
16
+ },
17
+ "license": "MIT",
18
+ "author": {
19
+ "name": "application-kit"
20
+ },
21
+ "sideEffects": false,
22
+ "type": "module",
23
+ "exports": {
24
+ ".": {
25
+ "import": {
26
+ "types": "./dist/esm/index.d.ts",
27
+ "default": "./dist/esm/index.js"
28
+ },
29
+ "require": {
30
+ "types": "./dist/cjs/index.d.ts",
31
+ "default": "./dist/cjs/index.js"
32
+ }
33
+ },
34
+ "./package.json": "./package.json",
35
+ "./vite-plugin": {
36
+ "import": {
37
+ "types": "./dist/esm/vite-plugin/index.d.ts",
38
+ "default": "./dist/esm/vite-plugin/index.js"
39
+ },
40
+ "require": {
41
+ "types": "./dist/cjs/vite-plugin/index.d.ts",
42
+ "default": "./dist/cjs/vite-plugin/index.js"
43
+ }
44
+ }
45
+ },
46
+ "main": "./dist/cjs/index.js",
47
+ "module": "./dist/esm/index.js",
48
+ "types": "./dist/cjs/index.d.ts",
49
+ "files": [
50
+ "dist"
51
+ ],
52
+ "scripts": {
53
+ "build": "rm -rf ./dist && node ../../scripts/barrels.mjs create ./src && tsc --project tsconfig.build.json && tsc --project tsconfig.build.cjs.json && node ../../scripts/barrels.mjs clean ./src && node ../../scripts/mark-cjs.mjs ./dist/cjs",
54
+ "lint:tsc": "tsc --noEmit --pretty --project .",
55
+ "test:mutation": "stryker run",
56
+ "test:unit": "vitest run"
57
+ },
58
+ "devDependencies": {
59
+ "@nestjs/common": "^11.2.1",
60
+ "@nestjs/core": "^11.2.1",
61
+ "@nestjs/platform-fastify": "^11.2.1",
62
+ "@stryker-mutator/core": "^10.0.0",
63
+ "@stryker-mutator/vitest-runner": "^10.0.0",
64
+ "@types/node": "^26.2.0",
65
+ "fastify": "^5.12.1",
66
+ "reflect-metadata": "^0.2.2",
67
+ "rxjs": "^7.8.2",
68
+ "typescript": "^6.0.3",
69
+ "vite": "^8.2.1",
70
+ "vitest": "^4.1.11"
71
+ },
72
+ "peerDependencies": {
73
+ "@nestjs/common": "^11.0.0",
74
+ "@nestjs/platform-fastify": "^11.0.0",
75
+ "fastify": "^5.0.0",
76
+ "vite": "^8.0.0"
77
+ },
78
+ "engines": {
79
+ "node": ">=24"
80
+ },
81
+ "publishConfig": {
82
+ "access": "public"
83
+ }
84
+ }