@meadmin/midway-vite-view 1.0.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2013 - Now midwayjs
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,121 @@
1
+ # midway-vite-view
2
+
3
+ meadmin 的 midway+vite 服务端渲染和客户端渲染组件,支持Vite2、Vite3,支持多vite项目并存。
4
+
5
+
6
+ ### github
7
+ [https://github.com/yuntian001/midway-vite-view](https://github.com/yuntian001/midway-vite-view)
8
+
9
+ ### 使用示例
10
+ [https://github.com/yuntian001/midway-vite-view/tree/main/example](https://github.com/yuntian001/midway-vite-view/tree/main/example)
11
+
12
+ ## 使用说明
13
+
14
+ midway+vite 依赖于静态文件托管组件:[@midwayjs/static-file@3](https://midwayjs.org/docs/extensions/static_file)
15
+
16
+ 所有静态文件需要按照@midwayjs/static-file@3规则放在对应的文件夹中,@midwayjs/static-file@3默认的静态文件夹为public
17
+
18
+ | web 支持情况| |
19
+ | --- | --- |
20
+ | @midwayjs/koa | ✅ |
21
+ | @midwayjs/faas | ✅ |
22
+ | @midwayjs/web | ✅ |
23
+ | @midwayjs/express | ❌ |
24
+
25
+ ## 代码示例
26
+
27
+ [example/](./example/)
28
+
29
+ ## 快速开始
30
+ - 安装组件扩展包
31
+ ```bash
32
+ $ npm install vite
33
+ $ npm install midway-vite-view
34
+ ```
35
+ - 项目根目录下新建public文件夹
36
+ - view 文件夹下创建放入对应vue项目
37
+ - midway configuration.ts中引入视图文件
38
+ ```
39
+ import * as viteView from 'midway-vite-view';//引入view组件
40
+ @Configuration({
41
+ imports: [
42
+ //其余代码不变
43
+ viteView, //导入view组件
44
+ ],
45
+ })
46
+ //其余代码不变
47
+ ```
48
+
49
+ - midway 中加入配置文件
50
+
51
+ ```
52
+ view: { //midwayjs 视图配置 说明参考 https://midwayjs.org/docs/extensions/render
53
+ defaultViewEngine: 'viteView',
54
+ },
55
+ viteView: { //midway-vite-view 配置配置详细说明见下方
56
+ views:{
57
+ 'index/index.html':'index/src/entry-server.js',
58
+ 'admin/index.html':'admin/src/entry-server.js',
59
+ }
60
+ },
61
+
62
+ ```
63
+
64
+ - vite 配置文件中 按[示例](./example/)进行更改
65
+
66
+ - 控制器中调用
67
+ ```
68
+ //服务端渲染
69
+ return this.ctx.render('admin/index.html', {
70
+ assign:{keyWords:'vite midway'},//html中{{keyWords}}的会被替换为vite midway
71
+ });
72
+
73
+ //客户端渲染
74
+ return this.ctx.render('index/index.html',{
75
+ ssr:false, //false代表强制客户端渲染,默认会根据配置自动匹配
76
+ assign:{keyWords:'vite midway'},//html中{{keyWords}}的会被替换为vite midway
77
+ });
78
+
79
+ ```
80
+
81
+ - package.json中打包命令加入 && vite-view build
82
+ ```
83
+ "build": "midway-bin build -c && vite-view build"
84
+ ```
85
+ ## 配置说明
86
+
87
+ | 配置项 |类型|是否必须 | 说明 |
88
+ | -----------| ----------- | ----------- |----------- |
89
+ | prod | boolean| 否 |是否是发布环境 如果不传用运行环境是否为prod/production以区分|
90
+ | views | `{[key:string]:string\|object}` | 是 | key为index.html路径(相对于view文件夹),value为服务端渲染entry-server路径(相对于view文件夹,如果没有entry-server,填'')|
91
+ | outPrefix | string | 否 | 打包前缀目录,会在static-file文件夹下创建子文件夹进行打包,默认为html |
92
+ | viteConfigFile | string | 否 | vite配置文件地址,默认按vite规则选择vite.config.js/vite.config.ts |
93
+ | staticFileKey | string | 否 | 对应的staticFile.dirs的key 默认为default |
94
+ | root | string | 否 | vite.coinfig的root根目录相对于view文件夹的相对路径 默认为`''`|
95
+
96
+ | views |类型|是否必须 | 说明 |
97
+ | -----------| ----------- | ----------- |----------- |
98
+ | entryServer | string | 否 | 服务端渲染entry-server路径(相对于view文件夹,如果没有entry-server,填'') |
99
+ | viteConfigFile | string | 否 | vite config的文件地址,多vite项目时需要分别设置此参数,默认使用外层配置的viteConfigFile |
100
+ | root | string | 否 | vite.coinfig的root根目录相对于view文件夹的相对路径 默认使用外层配置的`root`|
101
+
102
+ ## 打包命令 vite-view build 参数说明
103
+ 传参方式为 vite-view build --type 1
104
+
105
+ | 参数项 | 默认值 | 说明 |
106
+ | ---------- | ----------- |----------- |
107
+ |type | 1 | 构建方式:1=根据配置文件自动构建,2=自动寻找viewDir文件夹下的index.html和entry-server.js进行构建|
108
+ | config | src/config |midway配置文件夹/配置文件|
109
+ | staticFileKey |viteView.staticFileKey 或 default|使用的staticFile.dirs的key|
110
+ | outDir | staticFile.dirs[staticFileKey].dir 或 public |编译输出目录|
111
+ | viteConfigFile |命令根目录 vite.config.js、vite.config.ts|vite 配置文件 |
112
+ | viewDir | view | 视图文件夹 |
113
+ | prefix | staticFile.dirs[staticFileKey].prefix 或 /public | 静态缓存前缀 |
114
+ | outPrefix | viteView.outPrefix 或 html | 编译输出前缀,会在static-file文件夹下创建子文件夹进行打包 |
115
+
116
+
117
+ ## 规则说明
118
+ - 服务端渲染时`html` 文件中`<!--ssr-no-content-start-->` `<!--ssr-no-content-end-->`间的内容会被清空(客户端渲染时不做任何处理)
119
+ - 服务端渲染时`html` 文件中必须含有`<!--app-html-->`,输出时会替换为解析后的html内容
120
+ - 服务端渲染时`html` 文件中必须含有`<!--preload-links-->`,输出时会替换为资源引用语句
121
+ - vue 服务端渲染时不会触发响应性,建议`vue3`在setup中用顶层`await`获取数据
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+ import '../dist/cli/index.js';
@@ -0,0 +1,29 @@
1
+ import { Command } from 'commander';
2
+ interface LookupFileOptions {
3
+ pathOnly?: boolean;
4
+ rootDir?: string;
5
+ predicate?: (file: string) => boolean;
6
+ }
7
+ export declare function lookupFile(dir: string, formats: string[], options?: LookupFileOptions): string | undefined;
8
+ export declare class Build {
9
+ options: Record<string, any>;
10
+ private pages;
11
+ private env;
12
+ private midwayConfig;
13
+ private viteCofigs;
14
+ private rootDir;
15
+ initEnv(): void;
16
+ getConfig(): Promise<void>;
17
+ getViteFilePath(filePath?: string): string;
18
+ getViteConfig(path?: string): Promise<any>;
19
+ formatOptions(): Promise<void>;
20
+ setFile(): Promise<void>;
21
+ run(): Promise<void>;
22
+ buildClient(input: string[], prefix: string, outDir: string, viteConfigFile: string): Promise<void>;
23
+ buildSSR(entryServers: string[], prefix: string, outDir: string, viteConfigFile: string): Promise<void>;
24
+ setFileByConfig(): Promise<void>;
25
+ setFileByFileName(): Promise<void>;
26
+ private getDiskPath;
27
+ }
28
+ export declare const buildInit: (program: Command) => void;
29
+ export {};
@@ -0,0 +1,318 @@
1
+ import { loadConfigFromFile, build as buildVite } from 'vite';
2
+ import * as fs from 'node:fs';
3
+ import * as path from 'node:path';
4
+ import fsPromises from 'fs/promises';
5
+ import { resolve } from 'path';
6
+ import { normalizePath } from 'vite';
7
+ import extend from 'extend2';
8
+ import { setEnv } from '../../utils/env.js';
9
+ //递归遍历文件并执行callback
10
+ const fileDisplay = async function (filePath, callback) {
11
+ const files = await fsPromises.readdir(filePath);
12
+ for (let i = 0; i < files.length; i++) {
13
+ const filename = files[i];
14
+ //获取当前文件的绝对路径
15
+ const filedir = path.join(filePath, filename);
16
+ //根据文件路径获取文件信息,返回一个fs.Stats对象
17
+ const stats = fs.statSync(filedir);
18
+ if (stats.isFile()) {
19
+ await callback(filename, filedir);
20
+ }
21
+ else if (stats.isDirectory()) {
22
+ await fileDisplay(filedir, callback); //递归,如果是文件夹,就继续遍历该文件夹下面的文件
23
+ }
24
+ }
25
+ };
26
+ export function lookupFile(dir, formats, options) {
27
+ for (const format of formats) {
28
+ const fullPath = path.join(dir, format);
29
+ if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) {
30
+ const result = options?.pathOnly
31
+ ? fullPath
32
+ : fs.readFileSync(fullPath, 'utf-8');
33
+ if (!options?.predicate || options.predicate(result)) {
34
+ return result;
35
+ }
36
+ }
37
+ }
38
+ const parentDir = path.dirname(dir);
39
+ if (parentDir !== dir &&
40
+ (!options?.rootDir || parentDir.startsWith(options?.rootDir))) {
41
+ return lookupFile(parentDir, formats, options);
42
+ }
43
+ }
44
+ export class Build {
45
+ options = {};
46
+ pages = {};
47
+ env = 'prod';
48
+ midwayConfig = {};
49
+ viteCofigs = {};
50
+ rootDir = process.cwd();
51
+ initEnv() {
52
+ if (process.env.MIDWAY_SERVER_ENV) {
53
+ this.env = process.env.MIDWAY_SERVER_ENV;
54
+ }
55
+ else if (process.env.NODE_ENV) {
56
+ this.env = process.env.NODE_ENV;
57
+ }
58
+ }
59
+ async getConfig() {
60
+ this.midwayConfig = {
61
+ view: {
62
+ rootDir: {
63
+ default: path.join(this.rootDir, './view'),
64
+ },
65
+ },
66
+ viteView: {
67
+ views: {},
68
+ outPrefix: 'html',
69
+ staticFileKey: 'default',
70
+ root: '',
71
+ },
72
+ staticFile: {
73
+ dirs: {
74
+ default: {
75
+ prefix: '/public',
76
+ dir: 'public',
77
+ },
78
+ },
79
+ },
80
+ };
81
+ if (+this.options.type === 1) {
82
+ try {
83
+ let configFiles;
84
+ const stat = await fs.statSync(this.options.config);
85
+ if (stat.isFile()) {
86
+ configFiles = [this.options.config];
87
+ }
88
+ else {
89
+ configFiles = [
90
+ this.options.config + '/config.default.ts',
91
+ this.options.config + `/config.${this.env}.ts`,
92
+ ].filter(file => fs.existsSync(file));
93
+ }
94
+ await Promise.all(configFiles.map(file => {
95
+ return (async () => {
96
+ const { config } = await loadConfigFromFile(undefined, file);
97
+ this.midwayConfig = extend(true, this.midwayConfig, config);
98
+ })();
99
+ }));
100
+ }
101
+ catch (e) {
102
+ console.error('解析midway配置失败你可以使用-t 2 用文件名匹配模式进行构建');
103
+ throw e;
104
+ }
105
+ }
106
+ }
107
+ getViteFilePath(filePath) {
108
+ if (filePath) {
109
+ if (!fs.existsSync(filePath)) {
110
+ throw new Error(`vite 配置文件 ${filePath} 不存在`);
111
+ }
112
+ return filePath;
113
+ }
114
+ filePath = this.getDiskPath('vite.config.js');
115
+ if (!fs.existsSync(filePath)) {
116
+ filePath = this.getDiskPath('vite.config.ts');
117
+ }
118
+ if (!fs.existsSync(filePath)) {
119
+ throw new Error(`vite 配置文件 vite.config.js、${filePath} 不存在`);
120
+ }
121
+ return filePath;
122
+ }
123
+ async getViteConfig(path) {
124
+ if (!this.viteCofigs[path ?? 'default']) {
125
+ const { config } = await loadConfigFromFile({ command: 'build', mode: this.env, isSsrBuild: true }, this.getViteFilePath(path ?? this.options.viteConfigFile));
126
+ this.viteCofigs[path ?? 'default'] = config;
127
+ if (config.build &&
128
+ config.build.rollupOptions &&
129
+ config.build.rollupOptions.input) {
130
+ console.warn('[vite view] vite配置文件中指定了rollupOptions.input,打包时将应用此构建,如果不确定配置值是否正确,请删除build.rollupOptions.input配置');
131
+ }
132
+ }
133
+ return this.viteCofigs[path ?? 'default'];
134
+ }
135
+ async formatOptions() {
136
+ this.initEnv();
137
+ if (!this.options.config) {
138
+ this.options.config = 'src/config';
139
+ }
140
+ await this.getConfig();
141
+ this.options.staticFileKey =
142
+ this.options.staticFileKey ?? this.midwayConfig.viteView.staticFileKey;
143
+ this.options.outDir =
144
+ this.options.outDir ??
145
+ this.midwayConfig.staticFile.dirs[this.options.staticFileKey].dir;
146
+ this.options.prefix =
147
+ this.options.prefix ??
148
+ this.midwayConfig.staticFile.dirs[this.options.staticFileKey].prefix;
149
+ this.options.viteConfigFile =
150
+ this.options.viteConfigFile ?? this.midwayConfig.viteView.viteConfigFile;
151
+ this.options.outPrefix =
152
+ this.options.outPrefix ?? this.midwayConfig.viteView.outPrefix;
153
+ if (!this.options.viewDir) {
154
+ this.options.viewDir = 'view';
155
+ }
156
+ this.options.root =
157
+ this.options.root ?? normalizePath(this.midwayConfig.viteView.root);
158
+ // set absolute path
159
+ Object.keys(this.options).forEach(key => {
160
+ if (['config', 'outDir', 'viteConfigFile', 'viewDir'].includes(key)) {
161
+ this.options[key] = this.getDiskPath(this.options[key]);
162
+ }
163
+ });
164
+ this.options.outDir = path.resolve(this.options.outDir, this.options.outPrefix);
165
+ this.options.prefix = normalizePath(this.options.prefix + `/${this.options.outPrefix}/`);
166
+ }
167
+ async setFile() {
168
+ if (+this.options.type === 1) {
169
+ await this.setFileByConfig();
170
+ }
171
+ else {
172
+ await this.setFileByFileName();
173
+ }
174
+ }
175
+ async run() {
176
+ for (const [, info] of Object.entries(this.pages)) {
177
+ console.log('[vite view] build ' + (info.viteConfigFile ?? '') + '\n');
178
+ await this.buildClient(info.clientIndex, normalizePath(this.options.prefix + `/${info.prefix}/`), path.resolve(this.options.outDir, info.prefix), info.viteConfigFile);
179
+ info.entryServers.length &&
180
+ (await this.buildSSR(info.entryServers, normalizePath(this.options.prefix + `/${info.prefix}/`), this.options.outDir, info.viteConfigFile));
181
+ }
182
+ }
183
+ async buildClient(input, prefix, outDir, viteConfigFile) {
184
+ console.log('[vite view] build client\n');
185
+ await buildVite({
186
+ base: prefix,
187
+ configFile: viteConfigFile,
188
+ build: {
189
+ outDir: outDir,
190
+ ssrManifest: 'ssr-manifest.json',
191
+ rollupOptions: { input },
192
+ ssr: false,
193
+ },
194
+ });
195
+ const content = fs.readFileSync(path.resolve(outDir, 'ssr-manifest.json'), 'utf8');
196
+ const viteConfig = await this.getViteConfig(viteConfigFile);
197
+ fs.writeFileSync(path.resolve(outDir, 'ssr-manifest.json'), content.replace(new RegExp('"/' + (viteConfig.build?.assetsDir || 'assets'), 'g'), '"' + prefix + (viteConfig.build?.assetsDir || 'assets')));
198
+ }
199
+ async buildSSR(entryServers, prefix, outDir, viteConfigFile) {
200
+ console.log('[vite view] build ssr\n');
201
+ await Promise.all(entryServers.map((file) => (async () => {
202
+ const viteConfig = await this.getViteConfig(viteConfigFile);
203
+ let packagePath = '';
204
+ let packageStr = '';
205
+ if (viteConfig.ssr && viteConfig.ssr.format === 'cjs') {
206
+ packagePath = lookupFile(viteConfig.root, ['package.json'], {
207
+ pathOnly: true,
208
+ });
209
+ if (packagePath) {
210
+ packageStr = fs.readFileSync(packagePath, 'utf-8');
211
+ const packageInfo = JSON.parse(packageStr);
212
+ if (packageInfo.type && packageInfo.type === 'module') {
213
+ packageInfo.type = 'commonjs';
214
+ fs.writeFileSync(packagePath, JSON.stringify(packageInfo), 'utf-8');
215
+ }
216
+ else {
217
+ packagePath = '';
218
+ }
219
+ }
220
+ }
221
+ await buildVite({
222
+ base: prefix,
223
+ publicDir: false,
224
+ configFile: viteConfigFile,
225
+ build: {
226
+ emptyOutDir: false,
227
+ outDir: path.resolve(outDir, path.relative(this.options.viewDir, file.slice(0, -path.basename(file).length))),
228
+ ssrManifest: false,
229
+ ssr: file,
230
+ },
231
+ });
232
+ packagePath && fs.writeFileSync(packagePath, packageStr, 'utf-8');
233
+ })()));
234
+ }
235
+ async setFileByConfig() {
236
+ for (const [index, ssr] of Object.entries(this.midwayConfig.viteView.views)) {
237
+ if (typeof ssr === 'string') {
238
+ if (!this.pages['default']) {
239
+ this.pages['default'] = {
240
+ clientIndex: [],
241
+ entryServers: [],
242
+ prefix: this.options.root,
243
+ viteConfigFile: this.options.viteConfigFile,
244
+ };
245
+ }
246
+ this.pages['default'].clientIndex.push(path.resolve(this.options.viewDir, index));
247
+ if (ssr) {
248
+ this.pages['default'].entryServers.push(path.resolve(this.options.viewDir, ssr));
249
+ }
250
+ }
251
+ else {
252
+ if (!this.pages[ssr.viteConfigFile ?? 'default']) {
253
+ this.pages[ssr.viteConfigFile ?? 'default'] = {
254
+ clientIndex: [],
255
+ entryServers: [],
256
+ viteConfigFile: ssr.viteConfigFile ?? this.options.viteConfigFile,
257
+ prefix: ssr.root ?? this.options.root,
258
+ };
259
+ }
260
+ this.pages[ssr.viteConfigFile ?? 'default'].clientIndex.push(path.resolve(this.options.viewDir, index));
261
+ if (ssr.entryServer) {
262
+ this.pages[ssr.viteConfigFile ?? 'default'].entryServers.push(path.resolve(this.options.viewDir, ssr.entryServer));
263
+ }
264
+ }
265
+ }
266
+ }
267
+ async setFileByFileName() {
268
+ this.pages['default'] = {
269
+ clientIndex: [],
270
+ entryServers: [],
271
+ viteConfigFile: this.options.viteConfigFile,
272
+ prefix: '',
273
+ };
274
+ await fileDisplay(this.options.viewDir, (fileName, filePath) => {
275
+ if (fileName === 'index.html') {
276
+ this.pages['default'].clientIndex.push(filePath);
277
+ }
278
+ else if (['entry-server.js', 'entry-server.jsx', 'entry-server.tsx'].includes(fileName)) {
279
+ this.pages['default'].entryServers.push(fileName);
280
+ }
281
+ });
282
+ }
283
+ getDiskPath(path) {
284
+ if (typeof path === 'string') {
285
+ if (!path) {
286
+ return this.rootDir;
287
+ }
288
+ return resolve(this.rootDir, path);
289
+ }
290
+ else {
291
+ return path;
292
+ }
293
+ }
294
+ }
295
+ export const buildInit = (program) => {
296
+ program
297
+ .command('build')
298
+ .description('build vite文件')
299
+ .option('-t, --type <char>', '构建方式:1=根据配置文件自动构建,2=自动寻找viewDir文件夹下的index.html和entry-server.js进行构建', '1')
300
+ .option('--config <char>', '配置文件夹/配置文件', 'src/config')
301
+ .option('--outDir <char>', '编译输出目录默认为,默认为staticFile.dirs[staticFileKey].dir或public')
302
+ .option('--viteConfigFile <char>', 'views dir 默认 viteView.viteConfigFile或view')
303
+ .option('--viewDir <char>', 'views dir 默认 view')
304
+ .option('--prefix <char>', '静态缓存前缀 默认为staticFile.dirs[staticFileKey].prefix或/public')
305
+ .option('--outPrefix <char>', '编译输出前缀 默认为viteView.outPrefix或html')
306
+ .option('--staticFileKey <char>', '使用的staticFile.dirs的key 默认为viteView.staticFileKey或default')
307
+ .option('-r --root <char>', 'vite config 的rootdir 必须是相对于viewDir的相对路径')
308
+ .option('-m, --module <char>', 'env环境变量', 'production')
309
+ .action(async (options) => {
310
+ setEnv(options.module);
311
+ const build = new Build();
312
+ build.options = options;
313
+ await build.formatOptions();
314
+ await build.setFile();
315
+ await build.run();
316
+ });
317
+ };
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2NvbW1hbmRlcnMvYnVpbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGtCQUFrQixFQUFFLEtBQUssSUFBSSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFDO0FBRXJDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLG1CQUFtQjtBQUNuQixNQUFNLFdBQVcsR0FBRyxLQUFLLFdBQ3ZCLFFBQWdCLEVBQ2hCLFFBQXFEO0lBRXJELE1BQU0sS0FBSyxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixhQUFhO1FBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUMsNkJBQTZCO1FBQzdCLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUNuQixNQUFNLFFBQVEs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
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const init: (program: Command) => void;
@@ -0,0 +1,5 @@
1
+ import { buildInit } from './build.js';
2
+ export const init = (program) => {
3
+ buildInit(program);
4
+ };
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2NvbW1hbmRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxPQUFlLEVBQUMsRUFBRTtJQUNyQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckIsQ0FBQyxDQUFBIn0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import { Command } from 'commander';
2
+ import { init } from './commanders/index.js';
3
+ import { readFileSync } from 'node:fs';
4
+ const program = new Command();
5
+ const { version } = JSON.parse(readFileSync(import.meta.dirname + '/../../package.json').toString());
6
+ program
7
+ .name('meadmin')
8
+ .description('CLI of MEADMIN')
9
+ .version(version);
10
+ init(program);
11
+ program.parse();
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUM5QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDNUIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLHFCQUFxQixDQUFDLENBQUMsUUFBUSxFQUFFLENBQ3JFLENBQUM7QUFDRixPQUFPO0tBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQztLQUNmLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztLQUM3QixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2QsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDIn0=
@@ -0,0 +1,2 @@
1
+ import { ViteViewConfig } from '../interface.js';
2
+ export declare const viteView: ViteViewConfig;
@@ -0,0 +1,6 @@
1
+ export const viteView = {
2
+ views: {},
3
+ outPrefix: 'html',
4
+ staticFileKey: 'default',
5
+ };
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBbUI7SUFDdEMsS0FBSyxFQUFFLEVBQTZCO0lBQ3BDLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLGFBQWEsRUFBRSxTQUFTO0NBQ3pCLENBQUMifQ==
@@ -0,0 +1,13 @@
1
+ import * as view from '@midwayjs/view';
2
+ import * as koa from '@midwayjs/koa';
3
+ import { ViteViewConfig } from './interface.js';
4
+ import { ViteService } from './service/vite.service.js';
5
+ export declare class MidwayViteViewConfiguration {
6
+ viewManager: view.ViewManager;
7
+ app: koa.Application;
8
+ viteViewConfig: ViteViewConfig;
9
+ viteService: ViteService;
10
+ onReady(): Promise<void>;
11
+ onServerReady(): Promise<void>;
12
+ onStop(): Promise<void>;
13
+ }
@@ -0,0 +1,68 @@
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
+ import { ViteMiddleware } from './middware/vite.middware.js';
11
+ import { Configuration, Inject, App, Config } from '@midwayjs/core';
12
+ import * as DefaultConfig from './config/config.default.js';
13
+ import * as view from '@midwayjs/view';
14
+ import { ViteView } from './lib/view.js';
15
+ import * as koa from '@midwayjs/koa';
16
+ import * as staticFile from '@midwayjs/static-file';
17
+ import { ViteService } from './service/vite.service.js';
18
+ let MidwayViteViewConfiguration = class MidwayViteViewConfiguration {
19
+ viewManager;
20
+ app;
21
+ viteViewConfig;
22
+ viteService;
23
+ async onReady() {
24
+ if (this.viteViewConfig.prod === false ||
25
+ !['prod', 'production'].includes(this.app.getEnv())) {
26
+ this.app.useMiddleware(ViteMiddleware);
27
+ }
28
+ this.viewManager.use('viteView', ViteView);
29
+ }
30
+ async onServerReady() {
31
+ if (this.viteViewConfig.prod === false ||
32
+ !['prod', 'production'].includes(this.app.getEnv())) {
33
+ this.viteService.restoreVite();
34
+ }
35
+ }
36
+ async onStop() {
37
+ this.viteService.catchViteAddress();
38
+ }
39
+ };
40
+ __decorate([
41
+ Inject(),
42
+ __metadata("design:type", view.ViewManager)
43
+ ], MidwayViteViewConfiguration.prototype, "viewManager", void 0);
44
+ __decorate([
45
+ App(),
46
+ __metadata("design:type", Object)
47
+ ], MidwayViteViewConfiguration.prototype, "app", void 0);
48
+ __decorate([
49
+ Config('viteView'),
50
+ __metadata("design:type", Object)
51
+ ], MidwayViteViewConfiguration.prototype, "viteViewConfig", void 0);
52
+ __decorate([
53
+ Inject(),
54
+ __metadata("design:type", ViteService)
55
+ ], MidwayViteViewConfiguration.prototype, "viteService", void 0);
56
+ MidwayViteViewConfiguration = __decorate([
57
+ Configuration({
58
+ namespace: 'viteView',
59
+ imports: [view, staticFile],
60
+ importConfigs: [
61
+ {
62
+ default: DefaultConfig,
63
+ },
64
+ ],
65
+ })
66
+ ], MidwayViteViewConfiguration);
67
+ export { MidwayViteViewConfiguration };
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxLQUFLLGFBQWEsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEtBQUssSUFBSSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxLQUFLLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxLQUFLLFVBQVUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFXakQsSUFBTSwyQkFBMkIsR0FBakMsTUFBTSwyQkFBMkI7SUFFdEMsV0FBVyxDQUFtQjtJQUc5QixHQUFHLENBQWtCO0lBR3JCLGNBQWMsQ0FBaUI7SUFHL0IsV0FBVyxDQUFjO0lBRXpCLEtBQUssQ0FBQyxPQUFPO1FBQ1gsSUFDRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxLQUFLO1lBQ2xDLENBQUMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFDbkQsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELEtBQUssQ0FBQyxhQUFhO1FBQ2pCLElBQ0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssS0FBSztZQUNsQyxDQUFDLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQ25ELENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU07UUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDdEMsQ0FBQztDQUNGLENBQUE7QUFoQ0M7SUFEQyxNQUFNLEVBQUU7OEJBQ0ksSUFBSSxDQUFDLFdBQVc7Z0VBQUM7QUFHOUI7SUFEQyxHQUFHLEVBQUU7O3dEQUNlO0FBR3JCO0lBREMsTUFBTSxDQUFDLFVBQVUsQ0FBQzs7bUVBQ1k7QUFHL0I7SUFEQyxNQUFNLEVBQUU7OEJBQ0ksV0FBVztnRUFBQztBQVhkLDJCQUEyQjtJQVR2QyxhQUFhLENBQUM7UUFDYixTQUFTLEVBQUUsVUFBVTtRQUNyQixPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDO1FBQzNCLGFBQWEsRUFBRTtZQUNiO2dCQUNFLE9BQU8sRUFBRSxhQUFhO2FBQ3ZCO1NBQ0Y7S0FDRixDQUFDO0dBQ1csMkJBQTJCLENBa0N2QyJ9
@@ -0,0 +1,5 @@
1
+ export { MidwayViteViewConfiguration as Configuration } from './configuration.js';
2
+ export { ViteView } from './lib/view.js';
3
+ export { ViteService } from './service/vite.service.js';
4
+ export { ViteViewConfig } from './interface.js';
5
+ export { ViteMiddleware } from './middware/vite.middware.js';
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export { MidwayViteViewConfiguration as Configuration } from './configuration.js';
2
+ export { ViteView } from './lib/view.js';
3
+ export { ViteService } from './service/vite.service.js';
4
+ export { ViteMiddleware } from './middware/vite.middware.js';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDJCQUEyQixJQUFJLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXhELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQyJ9
@@ -0,0 +1,23 @@
1
+ export interface ViteViewConfig {
2
+ prod?: boolean;
3
+ views: Record<string, string | {
4
+ entryServer?: string;
5
+ viteConfigFile?: string;
6
+ root?: string;
7
+ }>;
8
+ outPrefix: string;
9
+ viteConfigFile?: string;
10
+ staticFileKey: string;
11
+ root?: string;
12
+ }
13
+ export interface CommandOptions {
14
+ [x: string]: any;
15
+ type: 1 | 2;
16
+ config: string;
17
+ outDir: string;
18
+ viteConfigFile: string;
19
+ viewDir: string;
20
+ prefix: string;
21
+ outPrefix: string;
22
+ staticFileKey: string;
23
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -0,0 +1,19 @@
1
+ import { ViteService } from '../service/vite.service.js';
2
+ import { StaticFileOptions } from '@midwayjs/static-file';
3
+ import { IViewEngine, RenderOptions } from '@midwayjs/view';
4
+ import { Application, Context } from '@midwayjs/koa';
5
+ import { ViteViewConfig } from '../interface.js';
6
+ export declare class ViteView implements IViewEngine {
7
+ staticFileConfig: StaticFileOptions;
8
+ viteViewConfig: ViteViewConfig;
9
+ app: Application;
10
+ ctx: Context;
11
+ vite: ViteService;
12
+ private prodPath;
13
+ private prod;
14
+ private root;
15
+ getSsrHtml(indexName: string, entryServerUrl: string, url: string, assign: object | undefined, viteConfigFile: string): Promise<any>;
16
+ getClientHtml(indexName: any, assign: object | undefined, url: string, viteConfigFile: string): Promise<string>;
17
+ render(name: string, locals?: Record<string, any>, options?: RenderOptions): Promise<any>;
18
+ renderString(name: string, locals?: Record<string, any>, options?: RenderOptions): Promise<any>;
19
+ }
@@ -0,0 +1,145 @@
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
+ import { ViteService } from '../service/vite.service.js';
11
+ import { Provide, Config, App, Inject } from '@midwayjs/core';
12
+ import * as fs from 'fs';
13
+ import * as path from 'path';
14
+ let ViteView = class ViteView {
15
+ staticFileConfig;
16
+ viteViewConfig;
17
+ app;
18
+ ctx;
19
+ vite;
20
+ prodPath;
21
+ prod;
22
+ root = '';
23
+ async getSsrHtml(indexName, entryServerUrl, url, assign, viteConfigFile) {
24
+ const vite = await this.vite.createVite(viteConfigFile);
25
+ try {
26
+ let template, render, manifest = {};
27
+ template = fs.readFileSync(indexName, 'utf-8');
28
+ if (!this.prod) {
29
+ // always read fresh template in dev
30
+ template = await vite.transformIndexHtml(url, template);
31
+ render = (await vite.ssrLoadModule(entryServerUrl)).render;
32
+ }
33
+ else {
34
+ manifest = require(path.resolve(this.prodPath, this.root, 'ssr-manifest.json'));
35
+ render = require(entryServerUrl).render;
36
+ }
37
+ const context = { cookies: this.ctx.cookies, request: this.ctx.request };
38
+ const [appHtml, preloadLinks, teleports] = await render(url, manifest, context);
39
+ if (context['url']) {
40
+ // Somewhere a `<Redirect>` was rendered
41
+ return this.ctx.redirect(context['url']);
42
+ }
43
+ let html = template
44
+ .replace('<!--preload-links-->', preloadLinks)
45
+ .replace('<!--app-html-->', appHtml)
46
+ .replace(/(\n|\r\n)\s*<!--app-teleports-->/, teleports)
47
+ .replace('<html', '<html data-ssr="true"')
48
+ .replace(/<!--ssr-no-content-start-->((?!((<!--ssr-no-content-start-->)|(<!--ssr-no-content-end-->))).)*<!--ssr-no-content-end-->/g, '');
49
+ if (assign) {
50
+ for (const [key, value] of Object.entries(assign)) {
51
+ html = html.replace(new RegExp(`{{${key}}}`, 'g'), value);
52
+ }
53
+ }
54
+ return html;
55
+ }
56
+ catch (e) {
57
+ vite.ssrFixStacktrace(e);
58
+ this.ctx.logger.error('服务端渲染失败,执行客户端渲染逻辑', e);
59
+ return await this.getClientHtml(indexName, assign, url, viteConfigFile);
60
+ }
61
+ }
62
+ async getClientHtml(indexName, assign, url, viteConfigFile) {
63
+ let html = fs
64
+ .readFileSync(indexName, 'utf-8')
65
+ .replace('<!--preload-links-->', '')
66
+ .replace('<!--app-html-->', '');
67
+ if (assign) {
68
+ for (const [key, value] of Object.entries(assign)) {
69
+ html = html.replace(new RegExp(`{{${key}}}`, 'g'), value);
70
+ }
71
+ }
72
+ return this.prod
73
+ ? html
74
+ : await (await this.vite.createVite(viteConfigFile)).transformIndexHtml(url, html);
75
+ }
76
+ async render(name, locals, options) {
77
+ return (locals.ctx.body = await this.renderString(name, locals, options));
78
+ }
79
+ async renderString(name, locals, options) {
80
+ let tpl = options.name;
81
+ if (this.viteViewConfig.prod !== undefined) {
82
+ this.prod = this.viteViewConfig.prod;
83
+ }
84
+ else {
85
+ this.prod = ['prod', 'production'].includes(this.app.getEnv());
86
+ }
87
+ let entry = '';
88
+ const entryInfo = this.viteViewConfig.views[options.name];
89
+ let viteConfigFile = this.viteViewConfig.viteConfigFile;
90
+ if (typeof entryInfo === 'object') {
91
+ entry = entryInfo.entryServer;
92
+ viteConfigFile = entryInfo.viteConfigFile ?? viteConfigFile;
93
+ this.root = entryInfo.root ?? '';
94
+ }
95
+ else {
96
+ entry = entryInfo;
97
+ }
98
+ if (this.prod) {
99
+ this.prodPath =
100
+ this.staticFileConfig.dirs[this.viteViewConfig.staticFileKey].dir +
101
+ `/${this.viteViewConfig.outPrefix}`;
102
+ tpl = path.resolve(this.prodPath, tpl);
103
+ entry =
104
+ locals.ssr !== false && entry
105
+ ? path
106
+ .resolve(this.prodPath, entry)
107
+ .replace(/(\.[jt]sx)|(\.ts)$/, '.js')
108
+ : '';
109
+ }
110
+ else {
111
+ tpl = path.resolve(options.root, tpl);
112
+ entry =
113
+ locals.ssr !== false && entry ? path.resolve(options.root, entry) : '';
114
+ }
115
+ if (entry) {
116
+ return await this.getSsrHtml(tpl, entry, locals.ctx.originalUrl, locals['assign'], viteConfigFile);
117
+ }
118
+ return await this.getClientHtml(tpl, locals['assign'], locals.ctx.originalUrl, viteConfigFile);
119
+ }
120
+ };
121
+ __decorate([
122
+ Config('staticFile'),
123
+ __metadata("design:type", Object)
124
+ ], ViteView.prototype, "staticFileConfig", void 0);
125
+ __decorate([
126
+ Config('viteView'),
127
+ __metadata("design:type", Object)
128
+ ], ViteView.prototype, "viteViewConfig", void 0);
129
+ __decorate([
130
+ App(),
131
+ __metadata("design:type", Object)
132
+ ], ViteView.prototype, "app", void 0);
133
+ __decorate([
134
+ Inject(),
135
+ __metadata("design:type", Object)
136
+ ], ViteView.prototype, "ctx", void 0);
137
+ __decorate([
138
+ Inject(),
139
+ __metadata("design:type", ViteService)
140
+ ], ViteView.prototype, "vite", void 0);
141
+ ViteView = __decorate([
142
+ Provide()
143
+ ], ViteView);
144
+ export { ViteView };
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzlELE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBS3RCLElBQU0sUUFBUSxHQUFkLE1BQU0sUUFBUTtJQUVuQixnQkFBZ0IsQ0FBb0I7SUFHcEMsY0FBYyxDQUFpQjtJQUcvQixHQUFHLENBQWM7SUFHakIsR0FBRyxDQUFVO0lBR2IsSUFBSSxDQUFjO0lBRVYsUUFBUSxDQUFTO0lBQ2pCLElBQUksQ0FBVTtJQUNkLElBQUksR0FBRyxFQUFFLENBQUM7SUFFbEIsS0FBSyxDQUFDLFVBQVUsQ0FDZCxTQUFpQixFQUNqQixjQUFzQixFQUN0QixHQUFXLEVBQ1gsTUFBMEIsRUFDMUIsY0FBc0I7UUFFdEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUM7WUFDSCxJQUFJLFFBQVEsRUFDVixNQUFNLEVBQ04sUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNoQixRQUFRLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDZixvQ0FBb0M7Z0JBQ3BDLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sR0FBRyxDQUFDLE1BQU0sSUFB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
@@ -0,0 +1,10 @@
1
+ import { IMiddleware } from '@midwayjs/core';
2
+ import { NextFunction, Context } from '@midwayjs/koa';
3
+ import { ViteService } from '../service/vite.service.js';
4
+ export declare class ViteMiddleware implements IMiddleware<Context, NextFunction> {
5
+ viteService: ViteService;
6
+ private viteMiddlewareArr;
7
+ init(): Promise<void>;
8
+ resolve(): (ctx: Context, next: NextFunction) => Promise<any>;
9
+ static getName(): string;
10
+ }
@@ -0,0 +1,49 @@
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
+ import { Middleware, Init, Inject, HttpServerResponse } from '@midwayjs/core';
11
+ import { ViteService } from '../service/vite.service.js';
12
+ let ViteMiddleware = class ViteMiddleware {
13
+ viteService;
14
+ viteMiddlewareArr = [];
15
+ async init() {
16
+ this.viteMiddlewareArr = await this.viteService.getViteMiddlewareArr();
17
+ }
18
+ resolve() {
19
+ return async (ctx, next) => {
20
+ if (ctx.originalUrl === '/.well-known/appspecific/com.chrome.devtools.json') {
21
+ return new HttpServerResponse(ctx).status(404);
22
+ }
23
+ for (let i = 0; i < this.viteMiddlewareArr.length; i++) {
24
+ if (ctx.originalUrl.startsWith(this.viteMiddlewareArr[i].prefix)) {
25
+ return await this.viteMiddlewareArr[i].middleware(ctx, next);
26
+ }
27
+ }
28
+ return await next();
29
+ };
30
+ }
31
+ static getName() {
32
+ return 'viteView';
33
+ }
34
+ };
35
+ __decorate([
36
+ Inject(),
37
+ __metadata("design:type", ViteService)
38
+ ], ViteMiddleware.prototype, "viteService", void 0);
39
+ __decorate([
40
+ Init(),
41
+ __metadata("design:type", Function),
42
+ __metadata("design:paramtypes", []),
43
+ __metadata("design:returntype", Promise)
44
+ ], ViteMiddleware.prototype, "init", null);
45
+ ViteMiddleware = __decorate([
46
+ Middleware()
47
+ ], ViteMiddleware);
48
+ export { ViteMiddleware };
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS5taWRkd2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkd2FyZS92aXRlLm1pZGR3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWUsSUFBSSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNGLE9BQU8sRUFBRSxXQUFXLEVBQWlCLE1BQU0sNEJBQTRCLENBQUM7QUFHakUsSUFBTSxjQUFjLEdBQXBCLE1BQU0sY0FBYztJQUV6QixXQUFXLENBQWM7SUFFakIsaUJBQWlCLEdBQWtCLEVBQUUsQ0FBQztJQUd4QyxBQUFOLEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ3pFLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxLQUFLLEVBQUUsR0FBWSxFQUFFLElBQWtCLEVBQUUsRUFBRTtZQUNoRCxJQUFJLEdBQUcsQ0FBQyxXQUFXLEtBQUssbURBQW1ELEVBQUUsQ0FBQztnQkFDNUUsT0FBUSxJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDdkQsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDakUsT0FBTyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMvRCxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU87UUFDWixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0NBQ0YsQ0FBQTtBQTFCQztJQURDLE1BQU0sRUFBRTs4QkFDSSxXQUFXO21EQUFDO0FBS25CO0lBREwsSUFBSSxFQUFFOzs7OzBDQUdOO0FBVFUsY0FBYztJQUQxQixVQUFVLEVBQUU7R0FDQSxjQUFjLENBNEIxQiJ9
@@ -0,0 +1,21 @@
1
+ import { ViteViewConfig } from '../interface.js';
2
+ import { MidwayConfig } from '@midwayjs/core';
3
+ import { ViteDevServer, HmrOptions } from 'vite';
4
+ import * as koa from '@midwayjs/koa';
5
+ export type MiddlewareArr = {
6
+ middleware: any;
7
+ prefix: string;
8
+ }[];
9
+ export declare class ViteService {
10
+ viteViewConfig: ViteViewConfig;
11
+ viewConfig: MidwayConfig['view'];
12
+ koaApp: koa.Application;
13
+ private vite;
14
+ private middlewareArr;
15
+ createVite(configFile: string, hmr?: HmrOptions | boolean): Promise<ViteDevServer>;
16
+ getMiddlewareIndex(prefix: string): number;
17
+ getViteMiddlewareArr(): Promise<MiddlewareArr>;
18
+ getCatchFile(): string;
19
+ catchViteAddress(): void;
20
+ restoreVite(): void;
21
+ }
@@ -0,0 +1,161 @@
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
+ import { Config, Provide, Scope, ScopeEnum, App, } from '@midwayjs/core';
11
+ import { createServer, normalizePath } from 'vite';
12
+ import { getPort } from '../utils/index.js';
13
+ import c2k from 'koa2-connect';
14
+ import * as path from 'node:path';
15
+ import * as koa from '@midwayjs/koa';
16
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
17
+ let cachePostfix = '';
18
+ const vitePlugin = (viewRoot, appDir) => ({
19
+ name: 'vite-plugin-midway-vite-view',
20
+ async config(config) {
21
+ if (!config.server.hmr) {
22
+ const port = await getPort(24678);
23
+ config.server.hmr = {
24
+ clientPort: port,
25
+ port: port,
26
+ };
27
+ }
28
+ if (!config.cacheDir) {
29
+ config.cacheDir = path.resolve(appDir, `node_modules/.vite${cachePostfix}`);
30
+ cachePostfix = cachePostfix + '_';
31
+ }
32
+ if (!config.base) {
33
+ if (!config.root) {
34
+ throw new Error('vite config 中必须配置正确的base或root参数');
35
+ }
36
+ config.base = normalizePath('/' +
37
+ path.relative(viewRoot, path.resolve(process.cwd(), config.root)) +
38
+ '/');
39
+ }
40
+ },
41
+ });
42
+ let ViteService = class ViteService {
43
+ viteViewConfig;
44
+ viewConfig;
45
+ koaApp;
46
+ vite = {};
47
+ middlewareArr = [];
48
+ //生成vite server
49
+ async createVite(configFile, hmr) {
50
+ if (!this.vite[configFile]) {
51
+ this.vite[configFile] = await createServer({
52
+ configFile,
53
+ appType: 'custom',
54
+ plugins: [
55
+ vitePlugin(this.viewConfig.rootDir.default, this.koaApp.getAppDir()),
56
+ ],
57
+ server: {
58
+ middlewareMode: true,
59
+ watch: {
60
+ // During tests we edit the files too fast and sometimes chokidar
61
+ // misses change events, so enforce polling for consistency
62
+ usePolling: true,
63
+ interval: 100,
64
+ },
65
+ hmr: hmr
66
+ },
67
+ });
68
+ }
69
+ return this.vite[configFile];
70
+ }
71
+ getMiddlewareIndex(prefix) {
72
+ for (let i = 0; i < this.middlewareArr.length; i++) {
73
+ if (this.middlewareArr[i].prefix.length <= prefix.length) {
74
+ return i;
75
+ }
76
+ }
77
+ return 0;
78
+ }
79
+ //获取全部vite中间件数组
80
+ async getViteMiddlewareArr() {
81
+ if (this.middlewareArr.length) {
82
+ return this.middlewareArr;
83
+ }
84
+ const configSet = new Set();
85
+ for (const [, view] of Object.entries(this.viteViewConfig.views)) {
86
+ if (typeof view === 'object' && !configSet.has(view.viteConfigFile)) {
87
+ const viteServer = await this.createVite(view.viteConfigFile);
88
+ this.middlewareArr.splice(this.getMiddlewareIndex(viteServer.config.base), 0, {
89
+ middleware: c2k(viteServer.middlewares),
90
+ prefix: viteServer.config.base,
91
+ });
92
+ configSet.add(view.viteConfigFile);
93
+ }
94
+ else if (!configSet.has(undefined)) {
95
+ const viteServer = await this.createVite(this.viteViewConfig.viteConfigFile);
96
+ this.middlewareArr.splice(this.getMiddlewareIndex(viteServer.config.base), 0, {
97
+ middleware: c2k(viteServer.middlewares),
98
+ prefix: viteServer.config.base,
99
+ });
100
+ configSet.add(undefined);
101
+ }
102
+ }
103
+ return this.middlewareArr;
104
+ }
105
+ //获取catch文件地址
106
+ getCatchFile() {
107
+ let catchPath = path.resolve(process.cwd(), 'node_modules/');
108
+ if (!existsSync(catchPath)) {
109
+ mkdirSync(catchPath);
110
+ }
111
+ catchPath = path.resolve(catchPath, '.meadmin/'); //meadmin缓存文件夹
112
+ if (!existsSync(catchPath)) {
113
+ mkdirSync(catchPath);
114
+ }
115
+ catchPath = path.resolve(catchPath, 'temp/'); //临时缓存关闭后清除
116
+ if (!existsSync(catchPath)) {
117
+ mkdirSync(catchPath);
118
+ }
119
+ return path.resolve(catchPath, 'midway_vite_view_port.json');
120
+ }
121
+ //缓存vite地址
122
+ catchViteAddress() {
123
+ const catchPath = this.getCatchFile();
124
+ const json = {};
125
+ Object.keys(this.vite).forEach(key => {
126
+ json[key] = {
127
+ time: new Date(),
128
+ hmr: this.vite[key].config.server.hmr
129
+ };
130
+ });
131
+ writeFileSync(catchPath, JSON.stringify(json), 'utf8');
132
+ }
133
+ //恢复缓存的vite
134
+ restoreVite() {
135
+ const catchPath = this.getCatchFile();
136
+ if (existsSync(catchPath)) {
137
+ const json = JSON.parse(readFileSync(catchPath, 'utf8'));
138
+ json && Object.keys(json).forEach(key => {
139
+ this.createVite(key, json[key].hmr);
140
+ });
141
+ }
142
+ }
143
+ };
144
+ __decorate([
145
+ Config('viteView'),
146
+ __metadata("design:type", Object)
147
+ ], ViteService.prototype, "viteViewConfig", void 0);
148
+ __decorate([
149
+ Config('view'),
150
+ __metadata("design:type", Object)
151
+ ], ViteService.prototype, "viewConfig", void 0);
152
+ __decorate([
153
+ App(),
154
+ __metadata("design:type", Object)
155
+ ], ViteService.prototype, "koaApp", void 0);
156
+ ViteService = __decorate([
157
+ Provide(),
158
+ Scope(ScopeEnum.Singleton)
159
+ ], ViteService);
160
+ export { ViteService };
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2Uvdml0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBLE9BQU8sRUFDTCxNQUFNLEVBQ04sT0FBTyxFQUNQLEtBQUssRUFDTCxTQUFTLEVBQ1QsR0FBRyxHQUVKLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBaUIsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDL0IsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU3RSxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxRQUFnQixFQUFFLE1BQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RCxJQUFJLEVBQUUsOEJBQThCO0lBQ3BDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBVztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRztnQkFDbEIsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLElBQUksRUFBRSxJQUFJO2FBQ1gsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxRQUFRLEdBQUcs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
@@ -0,0 +1 @@
1
+ export declare const setEnv: (node_env?: string) => void;
@@ -0,0 +1,20 @@
1
+ import dotenv from 'dotenv';
2
+ export const setEnv = (node_env) => {
3
+ if (node_env) {
4
+ process.env.NODE_ENV = node_env;
5
+ }
6
+ // 根据当前环境加载不同的 .env 文件
7
+ if (process.env.NODE_ENV) {
8
+ dotenv.config({
9
+ path: ['.env', `.env.${process.env.NODE_ENV}`],
10
+ override: true,
11
+ });
12
+ }
13
+ else {
14
+ dotenv.config({
15
+ path: ['.env'],
16
+ override: true,
17
+ });
18
+ }
19
+ };
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Vudi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsUUFBZ0IsRUFBQyxFQUFFO0lBQ3hDLElBQUcsUUFBUSxFQUFDLENBQUM7UUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUNELHNCQUFzQjtJQUN0QixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNaLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUMsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUM7SUFDTCxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDWixJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDZCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDLENBQUEifQ==
@@ -0,0 +1,3 @@
1
+ export declare const getCurrentEnvironment: () => string;
2
+ export declare function get(object: any, path: string): any;
3
+ export declare function getPort(port: number): Promise<number>;
@@ -0,0 +1,24 @@
1
+ import * as net from 'net';
2
+ export const getCurrentEnvironment = () => {
3
+ return process.env['MIDWAY_SERVER_ENV'] || process.env['NODE_ENV'] || 'prod';
4
+ };
5
+ export function get(object, path) {
6
+ const keys = path.split('.');
7
+ let result = object;
8
+ keys.forEach(key => {
9
+ result = result[key] ?? '';
10
+ });
11
+ return result;
12
+ }
13
+ //获取可用端口号
14
+ export function getPort(port) {
15
+ return new Promise(resolve => {
16
+ const server = net.createServer().on('error', () => {
17
+ getPort(++port).then(resolve);
18
+ });
19
+ server.listen(port, () => {
20
+ server.close(() => resolve(port));
21
+ });
22
+ });
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEdBQUcsTUFBTSxLQUFLLENBQUM7QUFDM0IsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsR0FBRyxFQUFFO0lBQ3hDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDO0FBQy9FLENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBVyxFQUFFLElBQVk7SUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFFcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNqQixNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTO0FBQ1QsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUFZO0lBQ2xDLE9BQU8sSUFBSSxPQUFPLENBQVMsT0FBTyxDQUFDLEVBQUU7UUFDbkMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ2pELE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtZQUN2QixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIn0=
package/index.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import { ViteViewConfig } from './dist/index';
2
+ export * from './dist/index';
3
+
4
+ declare module '@midwayjs/core/dist/interface' {
5
+ interface MidwayConfig {
6
+ viteView?: PowerPartial<ViteViewConfig>;
7
+ }
8
+ }
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "@meadmin/midway-vite-view",
3
+ "version": "1.0.0",
4
+ "description": "midway vite ssr view vue react, midway 的 vite 服务端渲染和客户端渲染组件,支持vue3 react,服务端渲染失败后会自动执行客户端渲染。 Midway's Vite server rendering and client rendering components support vue3 React, Client rendering is automatically performed when server rendering fails。",
5
+ "main": "dist/index.js",
6
+ "typings": "index.d.ts",
7
+ "type": "module",
8
+ "bin": {
9
+ "vite-view": "bin/vite-view.js"
10
+ },
11
+ "scripts": {
12
+ "build": "mwtsc --cleanOutDir",
13
+ "test": "mwtsc test --ts",
14
+ "cov": "mwtsc cov --ts",
15
+ "lint": "mwts check",
16
+ "lint:fix": "mwts fix",
17
+ "vueBuild": "vite bind"
18
+ },
19
+ "keywords": [
20
+ "midway view",
21
+ "vite",
22
+ "ssr",
23
+ "vue",
24
+ "react",
25
+ "midway ssr"
26
+ ],
27
+ "bugs": {
28
+ "url": "https://github.com/meadmin-cn/meadmin"
29
+ },
30
+ "author": "yuntian001",
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/meadmin-cn/meadmin"
34
+ },
35
+ "files": [
36
+ "dist/*",
37
+ "index.d.ts",
38
+ "README.md"
39
+ ],
40
+ "exports": {
41
+ ".": "./dist/index.js"
42
+ },
43
+ "license": "MIT",
44
+ "dependencies": {
45
+ "@midwayjs/view": "^3.20.17",
46
+ "commander": "^14.0.0",
47
+ "extend2": "^1.0.1",
48
+ "koa2-connect": "^1.0.2"
49
+ },
50
+ "devDependencies": {
51
+ "@midwayjs/mock": "^3.0.0",
52
+ "@types/jest": "^27.4.0",
53
+ "@types/node": "*",
54
+ "compression": "^1.7.4",
55
+ "jest": "^27.5.1",
56
+ "mwts": "^1.3.0",
57
+ "typescript": "^5.9.2"
58
+ },
59
+ "peerDependencies": {
60
+ "@midwayjs/bootstrap": ">=3.20.11 3.x",
61
+ "@midwayjs/core": ">=3.20.11 3.x",
62
+ "@midwayjs/koa": ">=3.20.16 3.x",
63
+ "@midwayjs/static-file": ">=3.20.16 3.x",
64
+ "vite": ">=6.3.6 6.x"
65
+ }
66
+ }