@dxtmisha/wiki 0.39.8 → 0.57.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 (128) hide show
  1. package/dist/{defineProperty-Bjg6wMoX.js → defineProperty-149Ahniv.js} +4 -4
  2. package/dist/library.js +1 -1
  3. package/dist/media/descriptions/wikiDescriptionsArea.d.ts +7 -0
  4. package/dist/media/descriptions/wikiDescriptionsClientOnly.d.ts +7 -0
  5. package/dist/media/descriptions/wikiDescriptionsContainer.d.ts +7 -0
  6. package/dist/media/descriptions/wikiDescriptionsHeader.d.ts +7 -0
  7. package/dist/media/descriptions/wikiDescriptionsPageArea.d.ts +7 -0
  8. package/dist/media/mdx/Area/wikiMdxArea.d.ts +7 -0
  9. package/dist/media/mdx/ClientOnly/wikiMdxClientOnly.d.ts +7 -0
  10. package/dist/media/mdx/Container/wikiMdxContainer.d.ts +7 -0
  11. package/dist/media/mdx/Header/wikiMdxHeader.d.ts +7 -0
  12. package/dist/media/mdx/PageArea/wikiMdxPageArea.d.ts +7 -0
  13. package/dist/media.d.ts +1 -1
  14. package/dist/media.js +115 -68
  15. package/dist/storybook.js +2707 -1841
  16. package/dist/{wikiDescriptions-Cv4WzSNL.js → wikiDescriptions-7XaHU3Yk.js} +182 -0
  17. package/package.json +1 -1
  18. package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.en.mdx +43 -0
  19. package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.ru.mdx +43 -0
  20. package/src/media/functional/functional/composables/useApiAsyncRef/useApiAsyncRef.vi.mdx +41 -0
  21. package/src/media/functional/functional/composables/useApiRef/useApiRef.en.mdx +20 -4
  22. package/src/media/functional/functional/composables/useApiRef/useApiRef.ru.mdx +21 -3
  23. package/src/media/functional/functional/composables/useApiRef/useApiRef.vi.mdx +20 -2
  24. package/src/media/functional/functional/functions/computedAsync/computedAsync.en.mdx +8 -0
  25. package/src/media/functional/functional/functions/computedAsync/computedAsync.ru.mdx +8 -0
  26. package/src/media/functional/functional/functions/computedAsync/computedAsync.vi.mdx +8 -0
  27. package/src/media/functional/functional/functions/computedEternity/computedEternity.en.mdx +8 -0
  28. package/src/media/functional/functional/functions/computedEternity/computedEternity.ru.mdx +8 -0
  29. package/src/media/functional/functional/functions/computedEternity/computedEternity.vi.mdx +8 -0
  30. package/src/media/functional/functional-basic/classes/Api/Api.en.mdx +3 -0
  31. package/src/media/functional/functional-basic/classes/Api/Api.ru.mdx +3 -0
  32. package/src/media/functional/functional-basic/classes/Api/Api.vi.mdx +3 -0
  33. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.en.mdx +5 -2
  34. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.ru.mdx +6 -3
  35. package/src/media/functional/functional-basic/classes/ApiInstance/ApiInstance.vi.mdx +5 -2
  36. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.en.mdx +9 -0
  37. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.ru.mdx +9 -0
  38. package/src/media/functional/functional-basic/classes/ApiResponse/ApiResponse.vi.mdx +9 -0
  39. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.en.mdx +31 -6
  40. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.ru.mdx +31 -6
  41. package/src/media/functional/functional-basic/classes/CookieStorage/CookieStorage.vi.mdx +31 -6
  42. package/src/media/functional/functional-basic/classes/Meta/Meta.en.mdx +16 -0
  43. package/src/media/functional/functional-basic/classes/Meta/Meta.ru.mdx +16 -0
  44. package/src/media/functional/functional-basic/classes/Meta/Meta.vi.mdx +17 -1
  45. package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.en.mdx +9 -0
  46. package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.ru.mdx +9 -0
  47. package/src/media/functional/functional-basic/classes/MetaManager/MetaManager.vi.mdx +9 -0
  48. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.en.mdx +2 -1
  49. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.ru.mdx +2 -1
  50. package/src/media/functional/functional-basic/classes/MetaStatic/MetaStatic.vi.mdx +3 -2
  51. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.en.mdx +2 -2
  52. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.ru.mdx +2 -2
  53. package/src/media/functional/functional-basic/classes/ServerStorage/ServerStorage.vi.mdx +2 -2
  54. package/src/media/functional/functional-basic/icons/icons.en.mdx +3 -0
  55. package/src/media/functional/functional-basic/icons/icons.ru.mdx +3 -0
  56. package/src/media/functional/functional-basic/icons/icons.vi.mdx +3 -0
  57. package/src/media/functional/nitro-basic/about/about.en.mdx +52 -0
  58. package/src/media/functional/nitro-basic/about/about.ru.mdx +52 -0
  59. package/src/media/functional/nitro-basic/about/about.vi.mdx +52 -0
  60. package/src/media/functional/nitro-basic/composables/useHeaders/useHeaders.en.mdx +29 -0
  61. package/src/media/functional/nitro-basic/composables/useHeaders/useHeaders.ru.mdx +29 -0
  62. package/src/media/functional/nitro-basic/composables/useHeaders/useHeaders.vi.mdx +29 -0
  63. package/src/media/functional/nitro-basic/functions/getRequestOrigin/getRequestOrigin.en.mdx +24 -0
  64. package/src/media/functional/nitro-basic/functions/getRequestOrigin/getRequestOrigin.ru.mdx +24 -0
  65. package/src/media/functional/nitro-basic/functions/getRequestOrigin/getRequestOrigin.vi.mdx +24 -0
  66. package/src/media/functional/nitro-basic/functions/getRequestUrl/getRequestUrl.en.mdx +24 -0
  67. package/src/media/functional/nitro-basic/functions/getRequestUrl/getRequestUrl.ru.mdx +24 -0
  68. package/src/media/functional/nitro-basic/functions/getRequestUrl/getRequestUrl.vi.mdx +24 -0
  69. package/src/media/functional/nitro-basic/functions/initApi/initApi.en.mdx +23 -0
  70. package/src/media/functional/nitro-basic/functions/initApi/initApi.ru.mdx +23 -0
  71. package/src/media/functional/nitro-basic/functions/initApi/initApi.vi.mdx +23 -0
  72. package/src/media/functional/nitro-basic/functions/initClientRouter/initClientRouter.en.mdx +21 -0
  73. package/src/media/functional/nitro-basic/functions/initClientRouter/initClientRouter.ru.mdx +21 -0
  74. package/src/media/functional/nitro-basic/functions/initClientRouter/initClientRouter.vi.mdx +21 -0
  75. package/src/media/functional/nitro-basic/functions/initCookieStorage/initCookieStorage.en.mdx +18 -0
  76. package/src/media/functional/nitro-basic/functions/initCookieStorage/initCookieStorage.ru.mdx +18 -0
  77. package/src/media/functional/nitro-basic/functions/initCookieStorage/initCookieStorage.vi.mdx +18 -0
  78. package/src/media/functional/nitro-basic/functions/initHeaders/initHeaders.en.mdx +16 -0
  79. package/src/media/functional/nitro-basic/functions/initHeaders/initHeaders.ru.mdx +16 -0
  80. package/src/media/functional/nitro-basic/functions/initHeaders/initHeaders.vi.mdx +16 -0
  81. package/src/media/functional/nitro-basic/functions/initPluginApiCache/initPluginApiCache.en.mdx +17 -0
  82. package/src/media/functional/nitro-basic/functions/initPluginApiCache/initPluginApiCache.ru.mdx +17 -0
  83. package/src/media/functional/nitro-basic/functions/initPluginApiCache/initPluginApiCache.vi.mdx +17 -0
  84. package/src/media/functional/nitro-basic/functions/initPluginBasic/initPluginBasic.en.mdx +34 -0
  85. package/src/media/functional/nitro-basic/functions/initPluginBasic/initPluginBasic.ru.mdx +34 -0
  86. package/src/media/functional/nitro-basic/functions/initPluginBasic/initPluginBasic.vi.mdx +34 -0
  87. package/src/media/functional/nitro-basic/functions/initScriptsJson/initScriptsJson.en.mdx +17 -0
  88. package/src/media/functional/nitro-basic/functions/initScriptsJson/initScriptsJson.ru.mdx +17 -0
  89. package/src/media/functional/nitro-basic/functions/initScriptsJson/initScriptsJson.vi.mdx +17 -0
  90. package/src/media/functional/nitro-basic/functions/initServerRouter/initServerRouter.en.mdx +20 -0
  91. package/src/media/functional/nitro-basic/functions/initServerRouter/initServerRouter.ru.mdx +20 -0
  92. package/src/media/functional/nitro-basic/functions/initServerRouter/initServerRouter.vi.mdx +20 -0
  93. package/src/media/functional/nitro-basic/functions/initServerStorage/initServerStorage.en.mdx +16 -0
  94. package/src/media/functional/nitro-basic/functions/initServerStorage/initServerStorage.ru.mdx +16 -0
  95. package/src/media/functional/nitro-basic/functions/initServerStorage/initServerStorage.vi.mdx +16 -0
  96. package/src/media/functional/nitro-basic/functions/initSsrApp/initSsrApp.en.mdx +20 -0
  97. package/src/media/functional/nitro-basic/functions/initSsrApp/initSsrApp.ru.mdx +20 -0
  98. package/src/media/functional/nitro-basic/functions/initSsrApp/initSsrApp.vi.mdx +20 -0
  99. package/src/media/functional/nitro-basic/functions/uiBootstrapClient/uiBootstrapClient.en.mdx +14 -0
  100. package/src/media/functional/nitro-basic/functions/uiBootstrapClient/uiBootstrapClient.ru.mdx +14 -0
  101. package/src/media/functional/nitro-basic/functions/uiBootstrapClient/uiBootstrapClient.vi.mdx +14 -0
  102. package/src/media/functional/nitro-basic/functions/uiBootstrapServer/uiBootstrapServer.en.mdx +19 -0
  103. package/src/media/functional/nitro-basic/functions/uiBootstrapServer/uiBootstrapServer.ru.mdx +19 -0
  104. package/src/media/functional/nitro-basic/functions/uiBootstrapServer/uiBootstrapServer.vi.mdx +19 -0
  105. package/src/media/functional/nitro-basic/functions/uiCookieStorage/uiCookieStorage.en.mdx +13 -0
  106. package/src/media/functional/nitro-basic/functions/uiCookieStorage/uiCookieStorage.ru.mdx +13 -0
  107. package/src/media/functional/nitro-basic/functions/uiCookieStorage/uiCookieStorage.vi.mdx +13 -0
  108. package/src/media/functional/nitro-basic/functions/uiCreateApp/uiCreateApp.en.mdx +43 -0
  109. package/src/media/functional/nitro-basic/functions/uiCreateApp/uiCreateApp.ru.mdx +43 -0
  110. package/src/media/functional/nitro-basic/functions/uiCreateApp/uiCreateApp.vi.mdx +43 -0
  111. package/src/media/functional/nitro-basic/functions/uiCreateClientApp/uiCreateClientApp.en.mdx +31 -0
  112. package/src/media/functional/nitro-basic/functions/uiCreateClientApp/uiCreateClientApp.ru.mdx +31 -0
  113. package/src/media/functional/nitro-basic/functions/uiCreateClientApp/uiCreateClientApp.vi.mdx +31 -0
  114. package/src/media/functional/nitro-basic/functions/uiCreateServerApp/uiCreateServerApp.en.mdx +34 -0
  115. package/src/media/functional/nitro-basic/functions/uiCreateServerApp/uiCreateServerApp.ru.mdx +34 -0
  116. package/src/media/functional/nitro-basic/functions/uiCreateServerApp/uiCreateServerApp.vi.mdx +34 -0
  117. package/src/media/functional/nitro-basic/functions/uiCreateSsrRouter/uiCreateSsrRouter.en.mdx +17 -0
  118. package/src/media/functional/nitro-basic/functions/uiCreateSsrRouter/uiCreateSsrRouter.ru.mdx +17 -0
  119. package/src/media/functional/nitro-basic/functions/uiCreateSsrRouter/uiCreateSsrRouter.vi.mdx +17 -0
  120. package/src/media/functional/nitro-basic/functions/uiId/uiId.en.mdx +13 -0
  121. package/src/media/functional/nitro-basic/functions/uiId/uiId.ru.mdx +13 -0
  122. package/src/media/functional/nitro-basic/functions/uiId/uiId.vi.mdx +13 -0
  123. package/src/media/functional/nitro-basic/functions/uiServerStorage/uiServerStorage.en.mdx +13 -0
  124. package/src/media/functional/nitro-basic/functions/uiServerStorage/uiServerStorage.ru.mdx +13 -0
  125. package/src/media/functional/nitro-basic/functions/uiServerStorage/uiServerStorage.vi.mdx +13 -0
  126. package/src/media/functional/nitro-basic/setup/setup.en.mdx +133 -0
  127. package/src/media/functional/nitro-basic/setup/setup.ru.mdx +133 -0
  128. package/src/media/functional/nitro-basic/setup/setup.vi.mdx +133 -0
@@ -0,0 +1,133 @@
1
+ import {Meta} from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/en/nitro-basic/# Project Setup'/>
4
+
5
+ # Project Setup
6
+
7
+ The `@dxtmisha/nitro-basic` library is designed to work in conjunction with Nitro and Vue 3. It ensures a smooth transition between server-side and client-side rendering. Below is a step-by-step guide for integrating the library into your project.
8
+
9
+ ## 1. Install Dependencies
10
+
11
+ Install the necessary packages. In addition to the library itself, you will need Vue 3 and Vue Router:
12
+
13
+ ```bash
14
+ npm install @dxtmisha/nitro-basic vue vue-router
15
+ ```
16
+
17
+ ## 2. Nitro Plugin Initialization
18
+
19
+ For basic server environment setup (e.g., API caching), you need to register a Nitro plugin.
20
+
21
+ Create the `server/plugins/ui.ts` file:
22
+
23
+ ```typescript
24
+ import { definePlugin } from 'nitro'
25
+ import { initPluginBasic } from '@dxtmisha/nitro-basic/plugin'
26
+
27
+ export default definePlugin((nitroApp) => {
28
+ initPluginBasic(nitroApp)
29
+ })
30
+ ```
31
+
32
+ ## 3. Create Application Factory (main.ts)
33
+
34
+ Create a shared file for Vue application initialization that will be used on both server and client.
35
+
36
+ ```typescript
37
+ // src/main.ts
38
+ import { uiCreateApp } from '@dxtmisha/nitro-basic'
39
+ import App from './App.vue'
40
+ import { routes } from './router'
41
+
42
+ export function createApp() {
43
+ return uiCreateApp(App, {
44
+ appRouter: {
45
+ routes
46
+ }
47
+ })
48
+ }
49
+ ```
50
+
51
+ ## 4. Configure Client Entry Point
52
+
53
+ On the client, you need to prepare the identifier generator and mount the application.
54
+
55
+ ```typescript
56
+ // src/entry-client.ts
57
+ import { uiBootstrapClient, uiCreateClientApp } from '@dxtmisha/nitro-basic'
58
+ import { createApp } from './main'
59
+
60
+ const { app, router, options } = createApp()
61
+
62
+ // ID initialization for hydration
63
+ uiBootstrapClient()
64
+
65
+ // Mount the application
66
+ uiCreateClientApp(app, '#app', router, options)
67
+ ```
68
+
69
+ ## 5. Configure Server Entry Point
70
+
71
+ The server entry point is responsible for initializing storages, headers, and HTML rendering.
72
+
73
+ ```typescript
74
+ // src/entry-server.ts
75
+ import { uiBootstrapServer, uiCreateServerApp } from '@dxtmisha/nitro-basic'
76
+ import { createApp } from './main'
77
+ import template from './templates/main.html?raw' // HTML template
78
+
79
+ // Global server initialization
80
+ uiBootstrapServer()
81
+
82
+ export default {
83
+ async fetch(request: Request) {
84
+ const { app, router, options } = createApp()
85
+
86
+ const { headers, body } = await uiCreateServerApp(
87
+ app,
88
+ request,
89
+ router,
90
+ options,
91
+ undefined,
92
+ undefined,
93
+ template
94
+ )
95
+
96
+ return new Response(body, { headers })
97
+ }
98
+ }
99
+ ```
100
+
101
+ ## 6. HTML Template
102
+
103
+ For SSR to work correctly, the library uses a placeholder system in the HTML template. The `uiCreateServerApp` function automatically replaces them with up-to-date data.
104
+
105
+ **Available markers:**
106
+ - `<!--ssr-lang-->` — user language code (e.g., `en`). Used in `<html lang="...">`.
107
+ - `<!--ssr-title-->` — page title from `MetaStatic`. Injected into `<title>`.
108
+ - `<!--ssr-meta-->` — block of meta tags (OG, Twitter, etc.) from `MetaStatic`.
109
+ - `<!--ssr-outlet-->` — rendered HTML of your application. Usually inside `<div id="app">`.
110
+ - `<!--ssr-teleports-->` — content from Vue Teleports.
111
+ - `<!--ssr-scriptsJson-->` — **Critically important marker**. Contains JSON with hydration data (`ServerStorage`, API cache). Must be placed before the closing `</body>`.
112
+
113
+ Example `main.html`:
114
+ ```html
115
+ <!DOCTYPE html>
116
+ <html lang="<!--ssr-lang-->">
117
+ <head>
118
+ <meta charset="UTF-8">
119
+ <!--ssr-meta-->
120
+ <title><!--ssr-title--></title>
121
+ </head>
122
+ <body>
123
+ <div id="app"><!--ssr-outlet--></div>
124
+
125
+ <!--ssr-teleports-->
126
+ <!--ssr-scriptsJson-->
127
+
128
+ <script type="module" src="/src/entry-client.ts"></script>
129
+ </body>
130
+ </html>
131
+ ```
132
+
133
+ > Without the `<!--ssr-scriptsJson-->` marker, data received on the server will not be transferred to the client, leading to hydration errors and redundant API requests.
@@ -0,0 +1,133 @@
1
+ import {Meta} from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/ru/nitro-basic/# Подготовка проекта'/>
4
+
5
+ # Подготовка проекта
6
+
7
+ Библиотека `@dxtmisha/nitro-basic` спроектирована для работы в связке с Nitro и Vue 3. Она обеспечивает плавный переход между серверным и клиентским рендерингом. Ниже приведено пошаговое руководство по интеграции библиотеки в ваш проект.
8
+
9
+ ## 1. Установка зависимостей
10
+
11
+ Установите необходимые пакеты. Помимо самой библиотеки, вам потребуются Vue 3 и Vue Router:
12
+
13
+ ```bash
14
+ npm install @dxtmisha/nitro-basic vue vue-router
15
+ ```
16
+
17
+ ## 2. Инициализация плагина Nitro
18
+
19
+ Для базовой настройки серверной среды (например, кэширования API) необходимо зарегистрировать плагин Nitro.
20
+
21
+ Создайте файл `server/plugins/ui.ts`:
22
+
23
+ ```typescript
24
+ import { definePlugin } from 'nitro'
25
+ import { initPluginBasic } from '@dxtmisha/nitro-basic/plugin'
26
+
27
+ export default definePlugin((nitroApp) => {
28
+ initPluginBasic(nitroApp)
29
+ })
30
+ ```
31
+
32
+ ## 3. Создание фабрики приложения (main.ts)
33
+
34
+ Создайте общий файл для инициализации Vue-приложения, который будет использоваться и на сервере, и на клиенте.
35
+
36
+ ```typescript
37
+ // src/main.ts
38
+ import { uiCreateApp } from '@dxtmisha/nitro-basic'
39
+ import App from './App.vue'
40
+ import { routes } from './router'
41
+
42
+ export function createApp() {
43
+ return uiCreateApp(App, {
44
+ appRouter: {
45
+ routes
46
+ }
47
+ })
48
+ }
49
+ ```
50
+
51
+ ## 4. Настройка клиентской точки входа
52
+
53
+ На клиенте необходимо подготовить генератор идентификаторов и примонтировать приложение.
54
+
55
+ ```typescript
56
+ // src/entry-client.ts
57
+ import { uiBootstrapClient, uiCreateClientApp } from '@dxtmisha/nitro-basic'
58
+ import { createApp } from './main'
59
+
60
+ const { app, router, options } = createApp()
61
+
62
+ // Инициализация ID для гидратации
63
+ uiBootstrapClient()
64
+
65
+ // Монтирование приложения
66
+ uiCreateClientApp(app, '#app', router, options)
67
+ ```
68
+
69
+ ## 5. Настройка серверной точки входа
70
+
71
+ Серверная точка входа отвечает за инициализацию хранилищ, заголовков и рендеринг HTML.
72
+
73
+ ```typescript
74
+ // src/entry-server.ts
75
+ import { uiBootstrapServer, uiCreateServerApp } from '@dxtmisha/nitro-basic'
76
+ import { createApp } from './main'
77
+ import template from './templates/main.html?raw' // HTML шаблон
78
+
79
+ // Глобальная инициализация сервера
80
+ uiBootstrapServer()
81
+
82
+ export default {
83
+ async fetch(request: Request) {
84
+ const { app, router, options } = createApp()
85
+
86
+ const { headers, body } = await uiCreateServerApp(
87
+ app,
88
+ request,
89
+ router,
90
+ options,
91
+ undefined,
92
+ undefined,
93
+ template
94
+ )
95
+
96
+ return new Response(body, { headers })
97
+ }
98
+ }
99
+ ```
100
+
101
+ ## 6. HTML Шаблон
102
+
103
+ Для корректной работы SSR библиотека использует систему плейсхолдеров в HTML-шаблоне. Функция `uiCreateServerApp` автоматически заменяет их актуальными данными.
104
+
105
+ **Доступные метки:**
106
+ - `<!--ssr-lang-->` — языковой код пользователя (например, `ru`). Используется в `<html lang="...">`.
107
+ - `<!--ssr-title-->` — заголовок страницы из `MetaStatic`. Подставляется в `<title>`.
108
+ - `<!--ssr-meta-->` — блок мета-тегов (OG, Twitter и др.) из `MetaStatic`.
109
+ - `<!--ssr-outlet-->` — отрендеренный HTML вашего приложения. Обычно внутри `<div id="app">`.
110
+ - `<!--ssr-teleports-->` — содержимое Vue Teleports.
111
+ - `<!--ssr-scriptsJson-->` — **Критически важная метка**. Содержит JSON с данными для гидратации (`ServerStorage`, кэш API). Должна быть размещена перед закрывающим `</body>`.
112
+
113
+ Пример `main.html`:
114
+ ```html
115
+ <!DOCTYPE html>
116
+ <html lang="<!--ssr-lang-->">
117
+ <head>
118
+ <meta charset="UTF-8">
119
+ <!--ssr-meta-->
120
+ <title><!--ssr-title--></title>
121
+ </head>
122
+ <body>
123
+ <div id="app"><!--ssr-outlet--></div>
124
+
125
+ <!--ssr-teleports-->
126
+ <!--ssr-scriptsJson-->
127
+
128
+ <script type="module" src="/src/entry-client.ts"></script>
129
+ </body>
130
+ </html>
131
+ ```
132
+
133
+ > Без метки `<!--ssr-scriptsJson-->` данные, полученные на сервере, не будут переданы на клиент, что приведет к ошибкам гидратации и повторным запросам к API.
@@ -0,0 +1,133 @@
1
+ import {Meta} from '@storybook/addon-docs/blocks'
2
+
3
+ <Meta title='@dxtmisha/vi/nitro-basic/# Chuẩn bị dự án'/>
4
+
5
+ # Chuẩn bị dự án
6
+
7
+ Thư viện `@dxtmisha/nitro-basic` được thiết kế để hoạt động kết hợp với Nitro và Vue 3. Nó đảm bảo sự chuyển đổi mượt mà giữa quá trình render phía server và phía client. Dưới đây là hướng dẫn từng bước để tích hợp thư viện vào dự án của bạn.
8
+
9
+ ## 1. Cài đặt các phần phụ thuộc
10
+
11
+ Cài đặt các gói cần thiết. Ngoài bản thân thư viện, bạn sẽ cần Vue 3 và Vue Router:
12
+
13
+ ```bash
14
+ npm install @dxtmisha/nitro-basic vue vue-router
15
+ ```
16
+
17
+ ## 2. Khởi tạo Plugin Nitro
18
+
19
+ Để thiết lập môi trường server cơ bản (ví dụ: lưu đệm API), bạn cần đăng ký một plugin Nitro.
20
+
21
+ Tạo tệp `server/plugins/ui.ts`:
22
+
23
+ ```typescript
24
+ import { definePlugin } from 'nitro'
25
+ import { initPluginBasic } from '@dxtmisha/nitro-basic/plugin'
26
+
27
+ export default definePlugin((nitroApp) => {
28
+ initPluginBasic(nitroApp)
29
+ })
30
+ ```
31
+
32
+ ## 3. Tạo Factory ứng dụng (main.ts)
33
+
34
+ Tạo một tệp dùng chung để khởi tạo ứng dụng Vue sẽ được sử dụng trên cả server và client.
35
+
36
+ ```typescript
37
+ // src/main.ts
38
+ import { uiCreateApp } from '@dxtmisha/nitro-basic'
39
+ import App from './App.vue'
40
+ import { routes } from './router'
41
+
42
+ export function createApp() {
43
+ return uiCreateApp(App, {
44
+ appRouter: {
45
+ routes
46
+ }
47
+ })
48
+ }
49
+ ```
50
+
51
+ ## 4. Cấu hình điểm đầu vào Client
52
+
53
+ Trên client, bạn cần chuẩn bị trình tạo định danh và mount ứng dụng.
54
+
55
+ ```typescript
56
+ // src/entry-client.ts
57
+ import { uiBootstrapClient, uiCreateClientApp } from '@dxtmisha/nitro-basic'
58
+ import { createApp } from './main'
59
+
60
+ const { app, router, options } = createApp()
61
+
62
+ // Khởi tạo ID để hydrat hóa
63
+ uiBootstrapClient()
64
+
65
+ // Mount ứng dụng
66
+ uiCreateClientApp(app, '#app', router, options)
67
+ ```
68
+
69
+ ## 5. Cấu hình điểm đầu vào Server
70
+
71
+ Điểm đầu vào server chịu trách nhiệm khởi tạo bộ lưu trữ, header và render HTML.
72
+
73
+ ```typescript
74
+ // src/entry-server.ts
75
+ import { uiBootstrapServer, uiCreateServerApp } from '@dxtmisha/nitro-basic'
76
+ import { createApp } from './main'
77
+ import template from './templates/main.html?raw' // HTML template
78
+
79
+ // Khởi tạo server toàn cục
80
+ uiBootstrapServer()
81
+
82
+ export default {
83
+ async fetch(request: Request) {
84
+ const { app, router, options } = createApp()
85
+
86
+ const { headers, body } = await uiCreateServerApp(
87
+ app,
88
+ request,
89
+ router,
90
+ options,
91
+ undefined,
92
+ undefined,
93
+ template
94
+ )
95
+
96
+ return new Response(body, { headers })
97
+ }
98
+ }
99
+ ```
100
+
101
+ ## 6. Template HTML
102
+
103
+ Để SSR hoạt động chính xác, thư viện sử dụng một hệ thống nhãn (placeholder) trong template HTML. Hàm `uiCreateServerApp` sẽ tự động thay thế chúng bằng dữ liệu thực tế.
104
+
105
+ **Các nhãn khả dụng:**
106
+ - `<!--ssr-lang-->` — mã ngôn ngữ của người dùng (ví dụ: `vi`). Được sử dụng trong `<html lang="...">`.
107
+ - `<!--ssr-title-->` — tiêu đề trang từ `MetaStatic`. Được chèn vào `<title>`.
108
+ - `<!--ssr-meta-->` — khối các thẻ meta (OG, Twitter, v.v.) từ `MetaStatic`.
109
+ - `<!--ssr-outlet-->` — chuỗi HTML đã được render của ứng dụng. Thường nằm bên trong `<div id="app">`.
110
+ - `<!--ssr-teleports-->` — nội dung từ Vue Teleports.
111
+ - `<!--ssr-scriptsJson-->` — **Nhãn cực kỳ quan trọng**. Chứa JSON với dữ liệu hydrat hóa (`ServerStorage`, bộ nhớ đệm API). Phải được đặt trước thẻ đóng `</body>`.
112
+
113
+ Ví dụ `main.html`:
114
+ ```html
115
+ <!DOCTYPE html>
116
+ <html lang="<!--ssr-lang-->">
117
+ <head>
118
+ <meta charset="UTF-8">
119
+ <!--ssr-meta-->
120
+ <title><!--ssr-title--></title>
121
+ </head>
122
+ <body>
123
+ <div id="app"><!--ssr-outlet--></div>
124
+
125
+ <!--ssr-teleports-->
126
+ <!--ssr-scriptsJson-->
127
+
128
+ <script type="module" src="/src/entry-client.ts"></script>
129
+ </body>
130
+ </html>
131
+ ```
132
+
133
+ > Nếu không có nhãn `<!--ssr-scriptsJson-->`, dữ liệu nhận được trên server sẽ không được chuyển sang client, dẫn đến lỗi hydrat hóa và các yêu cầu API bị lặp lại.