@uni-helper/vite-plugin-uni-pages 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,94 @@
1
+ # @uni-helper/vite-plugin-uni-pages
2
+
3
+ 在 Vite 驱动的 uni-app 上使用基于文件的路由系统
4
+
5
+ [English](./README.md) | 简体中文
6
+
7
+ ## 安装
8
+
9
+ ```bash
10
+ pnpm i -D @uni-helper/vite-plugin-uni-pages
11
+ ```
12
+
13
+ ## 使用
14
+
15
+ ```ts
16
+ // vite.config.ts
17
+ import { defineConfig } from "vite";
18
+ import Uni from "@dcloudio/vite-plugin-uni";
19
+ import UniPages from "@uni-helper/vite-plugin-uni-pages";
20
+ // It is recommended to put it in front of Uni
21
+ export default defineConfig({
22
+ plugins: [UniPages(), Uni()],
23
+ });
24
+ ```
25
+
26
+ 在 `pages.config.(ts|mts|cts|js|cjs|mjs|json)` 定义全局属性
27
+
28
+ ```ts
29
+ // pages.config.ts
30
+ import { definePages } from "@uni-helper/vite-plugin-uni-pages/config";
31
+
32
+ export default definePages({
33
+ // You can also specify pages, and the content will be merged
34
+ pages: []
35
+ globalStyle: {
36
+ navigationBarTextStyle: "black",
37
+ navigationBarTitleText: "@uni-helper",
38
+ navigationBarBackgroundColor: "#F8F8F8",
39
+ backgroundColor: "#F8F8F8",
40
+ },
41
+ });
42
+ ```
43
+
44
+ 现在所有的 page 都会被自动发现!
45
+
46
+ 你可以在页面中使用 route-block 来指定元数据
47
+
48
+ ```vue
49
+ <!-- index.vue -->
50
+ <!-- use type to set index -->
51
+ <route lang="json" type="home">
52
+ {
53
+ "style": { "navigationBarTitleText": "@uni-helper" }
54
+ }
55
+ </route>
56
+
57
+ <!-- other.vue -->
58
+ <route lang="json">
59
+ {
60
+ "style": { "navigationBarTitleText": "@uni-helper" },
61
+ "any-meta-data": "hello"
62
+ }
63
+ </route>
64
+ ```
65
+
66
+ 导入虚拟模块即可访问所有页面的元数据
67
+
68
+ ```ts
69
+ /// <reference types="@uni-helper/vite-plugin-uni-pages/client" />
70
+ import { pages } from "virtual:uni-pages";
71
+ console.log(pages);
72
+ ```
73
+
74
+ ## 配置
75
+
76
+ 查看 [types.ts](./src/types.ts)
77
+
78
+ ## 钩子
79
+
80
+ 你不能在 `pages.json` 中使用类似 `#ifdef H5`, 但是使用 [hooks](./src/types.ts) 可以改变 pagesMeta.
81
+
82
+ ```ts
83
+ // vite.config.ts
84
+ UniPages({
85
+ onBeforeWriteFile(ctx) {
86
+ ctx.pagesMeta = ctx.pagesMeta?.filter((v) => !v.path.includes("test"));
87
+ },
88
+ });
89
+ ...
90
+ ```
91
+
92
+ 这是条件编译的一个很好的替代方案, 你还可以在 `vite.config.ts` 中使用 `exclude` 来排除部分页面。
93
+
94
+ 怎么做? 打印 `process.env` 然后找到 `UNI_*`, 我相信你已经会了
package/README.md CHANGED
@@ -1,34 +1,36 @@
1
1
  # @uni-helper/vite-plugin-uni-pages
2
2
 
3
- **WIP** 在 Vite 驱动的 uni-app 上使用基于文件的路由系统
3
+ File system-based routing for uni-app applications using Vite
4
4
 
5
- ## 安装
5
+ English | [简体中文](./README.Zh-CN.md)
6
+
7
+ ## Installation
6
8
 
7
9
  ```bash
8
10
  pnpm i -D @uni-helper/vite-plugin-uni-pages
9
11
  ```
10
12
 
11
- ## 使用
13
+ ## Usage
12
14
 
13
15
  ```ts
14
16
  // vite.config.ts
15
17
  import { defineConfig } from "vite";
16
18
  import Uni from "@dcloudio/vite-plugin-uni";
17
19
  import UniPages from "@uni-helper/vite-plugin-uni-pages";
18
- // 推荐放置在 Uni 前面
20
+ // It is recommended to put it in front of Uni
19
21
  export default defineConfig({
20
22
  plugins: [UniPages(), Uni()],
21
23
  });
22
24
  ```
23
25
 
24
- 定义全局属性
26
+ Define global properties in `pages.config.(ts|mts|cts|js|cjs|mjs|json)`
25
27
 
26
28
  ```ts
27
29
  // pages.config.ts
28
30
  import { definePages } from "@uni-helper/vite-plugin-uni-pages/config";
29
31
 
30
32
  export default definePages({
31
- // 你也可以指定 pages,内容将会被合并
33
+ // You can also specify pages, and the content will be merged
32
34
  pages: []
33
35
  globalStyle: {
34
36
  navigationBarTextStyle: "black",
@@ -39,12 +41,13 @@ export default definePages({
39
41
  });
40
42
  ```
41
43
 
42
- 现在所有的 pages 将会被自动发现!
44
+ Now all pages will be found automatically!
43
45
 
44
- 你可以在页面中使用 route block 来指定元数据
46
+ You can use route-block in the page to specify metadata
45
47
 
46
48
  ```vue
47
49
  <!-- index.vue -->
50
+ <!-- use type to set index -->
48
51
  <route lang="json" type="home">
49
52
  {
50
53
  "style": { "navigationBarTitleText": "@uni-helper" }
@@ -60,13 +63,36 @@ export default definePages({
60
63
  </route>
61
64
  ```
62
65
 
63
- 导入虚拟模块即可访问所有页面的 meta-data
66
+ Import the virtual module to access the metadata of all pages
64
67
 
65
68
  ```ts
66
69
  /// <reference types="@uni-helper/vite-plugin-uni-pages/client" />
67
70
  import { pages } from "virtual:uni-pages";
71
+ console.log(pages);
68
72
  ```
69
73
 
74
+ ## Configuration
75
+
76
+ see [types.ts](./src/types.ts)
77
+
78
+ ## Hooks
79
+
80
+ You can not use like `#ifdef H5` in `pages.json`, but use [hooks](./src/types.ts) to change pagesMeta.
81
+
82
+ ```ts
83
+ // vite.config.ts
84
+ UniPages({
85
+ onBeforeWriteFile(ctx) {
86
+ ctx.pagesMeta = ctx.pagesMeta?.filter((v) => !v.path.includes("test"));
87
+ },
88
+ });
89
+ ...
90
+ ```
91
+
92
+ This is a good alternative to conditional compilation, you can also use `exclude` in `vite.config.ts`
93
+
94
+ How? console the `process.env` and found `UNI_*`, you can do this!
95
+
70
96
  ## TODO
71
97
 
72
98
  - [ ] only update the changed page
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config/index.ts"],"sourcesContent":["import { UserPagesConfig } from \"./types\";\nexport * from \"./types\";\nexport function definePages(config: UserPagesConfig) {\n return config;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,YAAY,QAAyB;AACnD,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../src/config/index.ts"],"sourcesContent":["import { UserPagesConfig } from \"./types\";\nexport function definePages(config: UserPagesConfig) {\n return config;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACO,SAAS,YAAY,QAAyB;AACnD,SAAO;AACT;","names":[]}
@@ -1,20 +1,5 @@
1
- interface PagesConfig {
2
- pages: any;
3
- globalStyle: any;
4
- easycom: any;
5
- tabBar: any;
6
- condition: any;
7
- subPackages: any;
8
- preloadRule: any;
9
- workers: any;
10
- leftWindow: any;
11
- topWindow: any;
12
- rightWindow: any;
13
- uniIdRouter: any;
14
- }
15
- interface UserPagesConfig extends Partial<PagesConfig> {
16
- }
1
+ import { U as UserPagesConfig } from '../types-7dcfd17b.js';
17
2
 
18
3
  declare function definePages(config: UserPagesConfig): UserPagesConfig;
19
4
 
20
- export { PagesConfig, UserPagesConfig, definePages };
5
+ export { definePages };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config/index.ts"],"sourcesContent":["import { UserPagesConfig } from \"./types\";\nexport * from \"./types\";\nexport function definePages(config: UserPagesConfig) {\n return config;\n}\n"],"mappings":";AAEO,SAAS,YAAY,QAAyB;AACnD,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../src/config/index.ts"],"sourcesContent":["import { UserPagesConfig } from \"./types\";\nexport function definePages(config: UserPagesConfig) {\n return config;\n}\n"],"mappings":";AACO,SAAS,YAAY,QAAyB;AACnD,SAAO;AACT;","names":[]}
package/dist/index.cjs CHANGED
@@ -27,8 +27,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
27
27
  var src_exports = {};
28
28
  __export(src_exports, {
29
29
  VitePluginUniPages: () => VitePluginUniPages,
30
- default: () => src_default,
31
- definePages: () => definePages
30
+ default: () => src_default
32
31
  });
33
32
  module.exports = __toCommonJS(src_exports);
34
33
  var import_vite3 = require("vite");
@@ -36,11 +35,17 @@ var import_vite3 = require("vite");
36
35
  // src/utils.ts
37
36
  var import_path = require("path");
38
37
  var import_vite = require("vite");
38
+ var import_consola = __toESM(require("consola"), 1);
39
39
  var isPagePath = (path, options) => {
40
40
  const dirPath = (0, import_path.resolve)(process.cwd(), options.pagesDir);
41
- const filter = (0, import_vite.createFilter)(dirPath + "/**/*.(vue|nvue)");
41
+ const filter = (0, import_vite.createFilter)(dirPath + "/**/*.(vue|nvue)", options.exclude);
42
42
  return filter(path);
43
43
  };
44
+ var logger = import_consola.default.create({
45
+ defaults: {
46
+ tag: "vite-plugin-uni-pages"
47
+ }
48
+ });
44
49
 
45
50
  // src/constant.ts
46
51
  var virtualModuleId = "virtual:uni-pages";
@@ -66,17 +71,23 @@ var Context = class {
66
71
  const { config } = await (0, import_unconfig.loadConfig)({
67
72
  sources: [
68
73
  {
69
- files: this.options.entry,
70
- extensions: [this.options.extension]
74
+ files: "pages.config"
71
75
  }
72
76
  ],
73
77
  merge: false
74
78
  });
79
+ if (!config) {
80
+ logger.error(
81
+ "Can't found pages.config, please create pages.config.(ts|mts|cts|js|cjs|mjs|json)"
82
+ );
83
+ process.exit(-1);
84
+ }
85
+ logger.debug("Loaded user pages config", config);
75
86
  this.pagesConfig = config;
76
87
  }
77
88
  async scanPages() {
78
89
  const files = await (0, import_fast_glob.default)("**/*.(vue|nvue)", {
79
- ignore: ["node_modules", ".git", "**/__*__/*"],
90
+ ignore: ["node_modules", ".git", "**/__*__/*", ...this.options.exclude],
80
91
  onlyFiles: true,
81
92
  cwd: (0, import_path2.resolve)(process.cwd(), this.options.pagesDir)
82
93
  });
@@ -92,6 +103,7 @@ var Context = class {
92
103
  )
93
104
  };
94
105
  });
106
+ logger.debug("Scanned pages dir", this.pagesPathInfo);
95
107
  }
96
108
  async parsePage({ relative: relative2, absolute }) {
97
109
  const code = await import_fs.default.promises.readFile(absolute, {
@@ -135,6 +147,7 @@ var Context = class {
135
147
  const pages = Object.values((0, import_defu.defu)({}, pagesMeta, this.pagesConfig.pages));
136
148
  pages.sort((a) => a.type === "home" ? -1 : 0);
137
149
  this.pagesMeta = pages;
150
+ logger.debug("merged pages", this.pagesMeta);
138
151
  }
139
152
  async createOrUpdatePagesJSON() {
140
153
  const outputName = "pages.json";
@@ -146,67 +159,107 @@ var Context = class {
146
159
  encoding: "utf-8"
147
160
  });
148
161
  }
162
+ this.options.onBeforeLoadUserConfig(this);
149
163
  await this.loadUserPagesConfig();
164
+ this.options.onAfterLoadUserConfig(this);
165
+ this.options.onBeforeScanPages(this);
150
166
  await this.scanPages();
167
+ this.options.onAfterScanPages(this);
168
+ this.options.onBeforeMergePagesMeta(this);
151
169
  await this.mergePagesMeta();
152
- import_fs.default.writeFileSync(
153
- resolvedOutput,
154
- JSON.stringify({
155
- ...this.pagesConfig,
156
- pages: this.pagesMeta
157
- }),
158
- {
159
- encoding: "utf-8"
160
- }
161
- );
170
+ this.options.onAfterMergePagesMeta(this);
171
+ this.options.onBeforeWriteFile(this);
172
+ import_fs.default.writeFileSync(resolvedOutput, this.pagesJson, {
173
+ encoding: "utf-8"
174
+ });
175
+ this.options.onAfterWriteFile(this);
162
176
  }
163
177
  async virtualModule() {
164
178
  return `export const pages = ${JSON.stringify(this.pagesMeta)};`;
165
179
  }
166
- get pagesConfigSourcePath() {
167
- return (0, import_vite2.normalizePath)(
168
- (0, import_path2.resolve)(process.cwd(), `${this.options.entry}.${this.options.extension}`)
169
- );
180
+ async pagesConfigSourcePaths() {
181
+ return await (0, import_fast_glob.default)("pages.config.(ts|mts|cts|js|cjs|mjs|json)", {
182
+ deep: 0,
183
+ onlyFiles: true,
184
+ absolute: true
185
+ });
186
+ }
187
+ get pagesJson() {
188
+ return JSON.stringify({
189
+ ...this.pagesConfig,
190
+ pages: this.pagesMeta
191
+ });
170
192
  }
171
193
  };
172
194
 
173
- // src/config/index.ts
174
- function definePages(config) {
175
- return config;
176
- }
177
-
178
195
  // src/index.ts
179
196
  function resolveOptions(userOptions) {
180
197
  return {
181
198
  pagesDir: "src/pages",
182
199
  outDir: "src",
183
- entry: "pages.config",
184
- extension: "ts",
185
- middlewaresDir: "src/middlewares",
200
+ exclude: [],
201
+ onBeforeLoadUserConfig: () => {
202
+ },
203
+ onAfterLoadUserConfig: () => {
204
+ },
205
+ onBeforeScanPages: () => {
206
+ },
207
+ onAfterScanPages: () => {
208
+ },
209
+ onBeforeMergePagesMeta: () => {
210
+ },
211
+ onAfterMergePagesMeta: () => {
212
+ },
213
+ onBeforeWriteFile: () => {
214
+ },
215
+ onAfterWriteFile: () => {
216
+ },
186
217
  ...userOptions
187
218
  };
188
219
  }
189
220
  var VitePluginUniPages = async (userOptions = {}) => {
190
221
  const options = resolveOptions(userOptions);
222
+ logger.debug("Create uni-pages context with", options);
191
223
  const ctx = new Context(options);
192
224
  return {
193
225
  name: "vite-plugin-uni-pages",
194
226
  enforce: "pre",
195
- configureServer({ watcher }) {
196
- watcher.add(ctx.pagesConfigSourcePath);
227
+ async configureServer({ watcher, moduleGraph, ws }) {
228
+ const pagesConfigSourcePaths = await ctx.pagesConfigSourcePaths();
229
+ logger.debug("Add watcher", pagesConfigSourcePaths);
230
+ watcher.add(pagesConfigSourcePaths);
231
+ const reloadModule = (module2, path = "*") => {
232
+ if (module2) {
233
+ moduleGraph.invalidateModule(module2);
234
+ if (ws) {
235
+ ws.send({
236
+ path,
237
+ type: "full-reload"
238
+ });
239
+ }
240
+ }
241
+ };
242
+ const updateVirtualModule = () => {
243
+ logger.debug("Update virtualModule");
244
+ const module2 = moduleGraph.getModuleById(resolvedVirtualModuleId);
245
+ reloadModule(module2);
246
+ };
197
247
  watcher.on("change", async (path) => {
198
- if ((0, import_vite3.normalizePath)(path) === ctx.pagesConfigSourcePath || isPagePath(path, options)) {
248
+ if (pagesConfigSourcePaths.includes((0, import_vite3.normalizePath)(path)) || isPagePath(path, options)) {
199
249
  await ctx.createOrUpdatePagesJSON();
250
+ updateVirtualModule();
200
251
  }
201
252
  });
202
253
  watcher.on("add", async (path) => {
203
254
  if (isPagePath(path, options)) {
204
255
  await ctx.createOrUpdatePagesJSON();
256
+ updateVirtualModule();
205
257
  }
206
258
  });
207
259
  watcher.on("unlink", async (path) => {
208
260
  if (isPagePath(path, options)) {
209
261
  await ctx.createOrUpdatePagesJSON();
262
+ updateVirtualModule();
210
263
  }
211
264
  });
212
265
  },
@@ -225,7 +278,6 @@ var VitePluginUniPages = async (userOptions = {}) => {
225
278
  var src_default = VitePluginUniPages;
226
279
  // Annotate the CommonJS export names for ESM import in node:
227
280
  0 && (module.exports = {
228
- VitePluginUniPages,
229
- definePages
281
+ VitePluginUniPages
230
282
  });
231
283
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/constant.ts","../src/context/index.ts","../src/config/index.ts"],"sourcesContent":["import { normalizePath, Plugin } from \"vite\";\nimport { ResolvedOptions, UserOptions } from \"./types\";\nimport { isPagePath } from \"./utils\";\nimport { virtualModuleId, resolvedVirtualModuleId } from \"./constant\";\nimport { Context } from \"./context\";\n\nexport * from \"./config\";\n\nfunction resolveOptions(userOptions: UserOptions): ResolvedOptions {\n return {\n pagesDir: \"src/pages\",\n outDir: \"src\",\n entry: \"pages.config\",\n extension: \"ts\",\n middlewaresDir: \"src/middlewares\",\n ...userOptions,\n };\n}\n\nexport const VitePluginUniPages = async (\n userOptions: UserOptions = {}\n): Promise<Plugin> => {\n const options = resolveOptions(userOptions);\n const ctx = new Context(options);\n\n return {\n name: \"vite-plugin-uni-pages\",\n enforce: \"pre\",\n configureServer({ watcher }) {\n watcher.add(ctx.pagesConfigSourcePath);\n watcher.on(\"change\", async (path) => {\n if (\n normalizePath(path) === ctx.pagesConfigSourcePath ||\n isPagePath(path, options)\n ) {\n await ctx.createOrUpdatePagesJSON();\n }\n });\n watcher.on(\"add\", async (path) => {\n if (isPagePath(path, options)) {\n await ctx.createOrUpdatePagesJSON();\n }\n });\n watcher.on(\"unlink\", async (path) => {\n if (isPagePath(path, options)) {\n await ctx.createOrUpdatePagesJSON();\n }\n });\n },\n resolveId(id) {\n if (id === virtualModuleId) {\n return resolvedVirtualModuleId;\n }\n },\n\n load(id) {\n if (id === resolvedVirtualModuleId) {\n return ctx.virtualModule();\n }\n },\n };\n};\n\nexport default VitePluginUniPages;\n","import { resolve } from \"path\";\nimport { ResolvedOptions } from \"./types\";\nimport { createFilter } from \"vite\";\nexport const isPagePath = (path: string, options: ResolvedOptions) => {\n const dirPath = resolve(process.cwd(), options.pagesDir);\n const filter = createFilter(dirPath + \"/**/*.(vue|nvue)\");\n return filter(path);\n // if (path.startsWith(dirPath)) return true;\n // return false;\n};\n","export const virtualModuleId = \"virtual:uni-pages\";\nexport const resolvedVirtualModuleId = \"\\0\" + virtualModuleId;\n","import { extname, join, relative, resolve } from \"path\";\nimport { loadConfig } from \"unconfig\";\nimport { normalizePath } from \"vite\";\nimport { PagesConfig } from \"../config/types\";\nimport { PageMeta, PagePathInfo, ResolvedOptions } from \"../types\";\nimport fg from \"fast-glob\";\nimport { parse as JSONParse } from \"jsonc-parser\";\nimport { parse } from \"@vue/compiler-dom\";\nimport fs from \"fs\";\nimport { defu } from \"defu\";\n\nexport class Context {\n options: ResolvedOptions;\n pagesConfig!: PagesConfig;\n pagesPathInfo: PagePathInfo[] = [];\n pagesMeta: PageMeta[] = [];\n constructor(options: ResolvedOptions) {\n this.options = options;\n this.createOrUpdatePagesJSON();\n }\n\n async loadUserPagesConfig() {\n const { config } = await loadConfig({\n sources: [\n {\n files: this.options.entry,\n extensions: [this.options.extension],\n },\n ],\n merge: false,\n });\n this.pagesConfig = config as PagesConfig;\n }\n\n async scanPages() {\n const files = await fg(\"**/*.(vue|nvue)\", {\n ignore: [\"node_modules\", \".git\", \"**/__*__/*\"],\n onlyFiles: true,\n cwd: resolve(process.cwd(), this.options.pagesDir),\n });\n const basePath = relative(\n resolve(process.cwd(), this.options.outDir),\n this.options.pagesDir\n );\n this.pagesPathInfo = files.map((file) => {\n return {\n relative: normalizePath(join(basePath, file)),\n absolute: normalizePath(\n resolve(process.cwd(), this.options.pagesDir, file)\n ),\n };\n });\n }\n\n async parsePage({ relative, absolute }: PagePathInfo): Promise<PageMeta> {\n const code = await fs.promises.readFile(absolute, {\n encoding: \"utf-8\",\n });\n const t = parse(code);\n const path = relative.replace(extname(relative), \"\");\n let pageMeta: PageMeta = {\n path,\n type: \"page\",\n };\n t?.children.forEach((v) => {\n if (v.type !== 1) {\n return;\n }\n if (v.tag === \"route\") {\n v.props.forEach((prop) => {\n if (prop.type === 6 && prop.name === \"type\") {\n pageMeta.type = prop.value?.content ?? pageMeta.type;\n }\n });\n const astContent = v.children?.[0];\n if (astContent && astContent.type === 2) {\n const _pageMeta = JSONParse(astContent.content);\n Object.keys(_pageMeta).forEach((key) => {\n pageMeta[key] = _pageMeta[key];\n });\n // overwrite path\n pageMeta[\"path\"] = path;\n }\n }\n });\n return pageMeta;\n }\n\n async mergePagesMeta() {\n const pagesMeta = await Promise.all(\n this.pagesPathInfo?.map(async (page) => await this.parsePage(page))\n );\n const pages = Object.values(defu({}, pagesMeta, this.pagesConfig.pages));\n // @ts-ignore\n pages.sort((a) => (a.type === \"home\" ? -1 : 0));\n // @ts-ignore\n this.pagesMeta = pages;\n }\n\n async createOrUpdatePagesJSON() {\n const outputName = \"pages.json\";\n const resolvedOutput = normalizePath(\n resolve(process.cwd(), this.options.outDir, outputName)\n );\n\n // 如果不存在,先输出一个占位文件\n if (!fs.existsSync(resolvedOutput)) {\n fs.writeFileSync(resolvedOutput, `{\"pages\": [{\"path\": \"\"}]}`, {\n encoding: \"utf-8\",\n });\n }\n\n await this.loadUserPagesConfig();\n await this.scanPages();\n await this.mergePagesMeta();\n\n fs.writeFileSync(\n resolvedOutput,\n JSON.stringify({\n ...this.pagesConfig,\n pages: this.pagesMeta,\n }),\n {\n encoding: \"utf-8\",\n }\n );\n }\n\n async virtualModule() {\n return `export const pages = ${JSON.stringify(this.pagesMeta)};`;\n }\n\n get pagesConfigSourcePath() {\n return normalizePath(\n resolve(process.cwd(), `${this.options.entry}.${this.options.extension}`)\n );\n }\n}\n","import { UserPagesConfig } from \"./types\";\nexport * from \"./types\";\nexport function definePages(config: UserPagesConfig) {\n return config;\n}\n"],"mappings":"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","names":["import_vite","import_path","import_vite","fg","relative","fs","_a","JSONParse"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/constant.ts","../src/context/index.ts"],"sourcesContent":["import { ModuleNode, normalizePath, Plugin } from \"vite\";\nimport { ResolvedOptions, UserOptions } from \"./types\";\nimport { isPagePath, logger } from \"./utils\";\nimport { virtualModuleId, resolvedVirtualModuleId } from \"./constant\";\nimport { Context } from \"./context\";\n\nfunction resolveOptions(userOptions: UserOptions): ResolvedOptions {\n return {\n pagesDir: \"src/pages\",\n outDir: \"src\",\n exclude: [],\n onBeforeLoadUserConfig: () => {},\n onAfterLoadUserConfig: () => {},\n onBeforeScanPages: () => {},\n onAfterScanPages: () => {},\n onBeforeMergePagesMeta: () => {},\n onAfterMergePagesMeta: () => {},\n onBeforeWriteFile: () => {},\n onAfterWriteFile: () => {},\n ...userOptions,\n };\n}\n\nexport const VitePluginUniPages = async (\n userOptions: UserOptions = {}\n): Promise<Plugin> => {\n const options = resolveOptions(userOptions);\n logger.debug(\"Create uni-pages context with\", options);\n const ctx = new Context(options);\n return {\n name: \"vite-plugin-uni-pages\",\n enforce: \"pre\",\n async configureServer({ watcher, moduleGraph, ws }) {\n const pagesConfigSourcePaths = await ctx.pagesConfigSourcePaths();\n logger.debug(\"Add watcher\", pagesConfigSourcePaths);\n watcher.add(pagesConfigSourcePaths);\n\n const reloadModule = (module: ModuleNode | undefined, path = \"*\") => {\n if (module) {\n moduleGraph.invalidateModule(module);\n if (ws) {\n ws.send({\n path,\n type: \"full-reload\",\n });\n }\n }\n };\n const updateVirtualModule = () => {\n logger.debug(\"Update virtualModule\");\n const module = moduleGraph.getModuleById(resolvedVirtualModuleId);\n reloadModule(module);\n };\n\n watcher.on(\"change\", async (path) => {\n if (\n pagesConfigSourcePaths.includes(normalizePath(path)) ||\n isPagePath(path, options)\n ) {\n await ctx.createOrUpdatePagesJSON();\n updateVirtualModule();\n }\n });\n watcher.on(\"add\", async (path) => {\n if (isPagePath(path, options)) {\n await ctx.createOrUpdatePagesJSON();\n updateVirtualModule();\n }\n });\n watcher.on(\"unlink\", async (path) => {\n if (isPagePath(path, options)) {\n await ctx.createOrUpdatePagesJSON();\n updateVirtualModule();\n }\n });\n },\n resolveId(id) {\n if (id === virtualModuleId) {\n return resolvedVirtualModuleId;\n }\n },\n\n load(id) {\n if (id === resolvedVirtualModuleId) {\n return ctx.virtualModule();\n }\n },\n };\n};\n\nexport default VitePluginUniPages;\n","import { resolve } from \"path\";\nimport { ResolvedOptions } from \"./types\";\nimport { createFilter } from \"vite\";\nimport consola from \"consola\";\n\nexport const isPagePath = (path: string, options: ResolvedOptions) => {\n const dirPath = resolve(process.cwd(), options.pagesDir);\n const filter = createFilter(dirPath + \"/**/*.(vue|nvue)\", options.exclude);\n return filter(path);\n};\n\nexport const logger = consola.create({\n defaults: {\n tag: \"vite-plugin-uni-pages\",\n },\n});\n","export const virtualModuleId = \"virtual:uni-pages\";\nexport const resolvedVirtualModuleId = \"\\0\" + virtualModuleId;\n","import { extname, join, relative, resolve } from \"path\";\nimport { loadConfig } from \"unconfig\";\nimport { normalizePath } from \"vite\";\nimport { PagesConfig } from \"../config/types\";\nimport { PageMeta, PagePathInfo, ResolvedOptions } from \"../types\";\nimport fg from \"fast-glob\";\nimport { parse as JSONParse } from \"jsonc-parser\";\nimport { parse } from \"@vue/compiler-dom\";\nimport fs from \"fs\";\nimport { defu } from \"defu\";\nimport { logger } from \"../utils\";\nexport class Context {\n options: ResolvedOptions;\n pagesConfig!: PagesConfig;\n pagesPathInfo: PagePathInfo[] = [];\n pagesMeta: PageMeta[] = [];\n constructor(options: ResolvedOptions) {\n this.options = options;\n this.createOrUpdatePagesJSON();\n }\n\n async loadUserPagesConfig() {\n const { config } = await loadConfig({\n sources: [\n {\n files: \"pages.config\",\n },\n ],\n merge: false,\n });\n if (!config) {\n logger.error(\n \"Can't found pages.config, please create pages.config.(ts|mts|cts|js|cjs|mjs|json)\"\n );\n process.exit(-1);\n }\n logger.debug(\"Loaded user pages config\", config);\n this.pagesConfig = config as PagesConfig;\n }\n\n async scanPages() {\n const files = await fg(\"**/*.(vue|nvue)\", {\n ignore: [\"node_modules\", \".git\", \"**/__*__/*\", ...this.options.exclude],\n onlyFiles: true,\n cwd: resolve(process.cwd(), this.options.pagesDir),\n });\n const basePath = relative(\n resolve(process.cwd(), this.options.outDir),\n this.options.pagesDir\n );\n this.pagesPathInfo = files.map((file) => {\n return {\n relative: normalizePath(join(basePath, file)),\n absolute: normalizePath(\n resolve(process.cwd(), this.options.pagesDir, file)\n ),\n };\n });\n logger.debug(\"Scanned pages dir\", this.pagesPathInfo);\n }\n\n async parsePage({ relative, absolute }: PagePathInfo): Promise<PageMeta> {\n const code = await fs.promises.readFile(absolute, {\n encoding: \"utf-8\",\n });\n const t = parse(code);\n const path = relative.replace(extname(relative), \"\");\n let pageMeta: PageMeta = {\n path,\n type: \"page\",\n };\n t?.children.forEach((v) => {\n if (v.type !== 1) {\n return;\n }\n if (v.tag === \"route\") {\n v.props.forEach((prop) => {\n if (prop.type === 6 && prop.name === \"type\") {\n pageMeta.type = prop.value?.content ?? pageMeta.type;\n }\n });\n const astContent = v.children?.[0];\n if (astContent && astContent.type === 2) {\n const _pageMeta = JSONParse(astContent.content);\n Object.keys(_pageMeta).forEach((key) => {\n pageMeta[key] = _pageMeta[key];\n });\n // overwrite path\n pageMeta[\"path\"] = path;\n }\n }\n });\n return pageMeta;\n }\n\n async mergePagesMeta() {\n const pagesMeta = await Promise.all(\n this.pagesPathInfo?.map(async (page) => await this.parsePage(page))\n );\n const pages = Object.values(defu({}, pagesMeta, this.pagesConfig.pages));\n // @ts-ignore\n pages.sort((a) => (a.type === \"home\" ? -1 : 0));\n // @ts-ignore\n this.pagesMeta = pages;\n logger.debug(\"merged pages\", this.pagesMeta);\n }\n\n async createOrUpdatePagesJSON() {\n const outputName = \"pages.json\";\n const resolvedOutput = normalizePath(\n resolve(process.cwd(), this.options.outDir, outputName)\n );\n\n // 如果不存在,先输出一个占位文件\n if (!fs.existsSync(resolvedOutput)) {\n fs.writeFileSync(resolvedOutput, `{\"pages\": [{\"path\": \"\"}]}`, {\n encoding: \"utf-8\",\n });\n }\n\n this.options.onBeforeLoadUserConfig(this);\n await this.loadUserPagesConfig();\n this.options.onAfterLoadUserConfig(this);\n\n this.options.onBeforeScanPages(this);\n await this.scanPages();\n this.options.onAfterScanPages(this);\n\n this.options.onBeforeMergePagesMeta(this);\n await this.mergePagesMeta();\n this.options.onAfterMergePagesMeta(this);\n\n this.options.onBeforeWriteFile(this);\n fs.writeFileSync(resolvedOutput, this.pagesJson, {\n encoding: \"utf-8\",\n });\n this.options.onAfterWriteFile(this);\n }\n\n async virtualModule() {\n return `export const pages = ${JSON.stringify(this.pagesMeta)};`;\n }\n\n async pagesConfigSourcePaths() {\n return await fg(\"pages.config.(ts|mts|cts|js|cjs|mjs|json)\", {\n deep: 0,\n onlyFiles: true,\n absolute: true,\n });\n }\n\n get pagesJson() {\n return JSON.stringify({\n ...this.pagesConfig,\n pages: this.pagesMeta,\n });\n }\n}\n"],"mappings":"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","names":["import_vite","consola","import_path","import_vite","fg","relative","fs","_a","JSONParse","module"]}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,21 @@
1
1
  import { Plugin } from 'vite';
2
- export { PagesConfig, UserPagesConfig, definePages } from './config/index.js';
2
+ import { P as PagesConfig } from './types-7dcfd17b.js';
3
+
4
+ declare class Context {
5
+ options: ResolvedOptions;
6
+ pagesConfig: PagesConfig;
7
+ pagesPathInfo: PagePathInfo[];
8
+ pagesMeta: PageMeta[];
9
+ constructor(options: ResolvedOptions);
10
+ loadUserPagesConfig(): Promise<void>;
11
+ scanPages(): Promise<void>;
12
+ parsePage({ relative, absolute }: PagePathInfo): Promise<PageMeta>;
13
+ mergePagesMeta(): Promise<void>;
14
+ createOrUpdatePagesJSON(): Promise<void>;
15
+ virtualModule(): Promise<string>;
16
+ pagesConfigSourcePaths(): Promise<string[]>;
17
+ get pagesJson(): string;
18
+ }
3
19
 
4
20
  interface Options {
5
21
  /**
@@ -13,23 +29,32 @@ interface Options {
13
29
  */
14
30
  outDir: string;
15
31
  /**
16
- * pages config entry
17
- * @default "pages.config"
32
+ * exclude page
33
+ * @default []
18
34
  */
19
- entry: string;
20
- /**
21
- * pages config extension
22
- * @default "ts"
23
- */
24
- extension: string;
25
- /**
26
- * middlewares dir
27
- * @default "src/middlewares"
28
- */
29
- middlewaresDir: string;
35
+ exclude: string[];
36
+ onBeforeLoadUserConfig: (ctx: Context) => void;
37
+ onAfterLoadUserConfig: (ctx: Context) => void;
38
+ onBeforeScanPages: (ctx: Context) => void;
39
+ onAfterScanPages: (ctx: Context) => void;
40
+ onBeforeMergePagesMeta: (ctx: Context) => void;
41
+ onAfterMergePagesMeta: (ctx: Context) => void;
42
+ onBeforeWriteFile: (ctx: Context) => void;
43
+ onAfterWriteFile: (ctx: Context) => void;
30
44
  }
31
45
  interface UserOptions extends Partial<Options> {
32
46
  }
47
+ interface ResolvedOptions extends Options {
48
+ }
49
+ interface PagePathInfo {
50
+ relative: string;
51
+ absolute: string;
52
+ }
53
+ interface PageMeta {
54
+ path: string;
55
+ type: string;
56
+ [x: string]: any;
57
+ }
33
58
 
34
59
  declare const VitePluginUniPages: (userOptions?: UserOptions) => Promise<Plugin>;
35
60
 
package/dist/index.js CHANGED
@@ -4,11 +4,17 @@ import { normalizePath as normalizePath2 } from "vite";
4
4
  // src/utils.ts
5
5
  import { resolve } from "path";
6
6
  import { createFilter } from "vite";
7
+ import consola from "consola";
7
8
  var isPagePath = (path, options) => {
8
9
  const dirPath = resolve(process.cwd(), options.pagesDir);
9
- const filter = createFilter(dirPath + "/**/*.(vue|nvue)");
10
+ const filter = createFilter(dirPath + "/**/*.(vue|nvue)", options.exclude);
10
11
  return filter(path);
11
12
  };
13
+ var logger = consola.create({
14
+ defaults: {
15
+ tag: "vite-plugin-uni-pages"
16
+ }
17
+ });
12
18
 
13
19
  // src/constant.ts
14
20
  var virtualModuleId = "virtual:uni-pages";
@@ -34,17 +40,23 @@ var Context = class {
34
40
  const { config } = await loadConfig({
35
41
  sources: [
36
42
  {
37
- files: this.options.entry,
38
- extensions: [this.options.extension]
43
+ files: "pages.config"
39
44
  }
40
45
  ],
41
46
  merge: false
42
47
  });
48
+ if (!config) {
49
+ logger.error(
50
+ "Can't found pages.config, please create pages.config.(ts|mts|cts|js|cjs|mjs|json)"
51
+ );
52
+ process.exit(-1);
53
+ }
54
+ logger.debug("Loaded user pages config", config);
43
55
  this.pagesConfig = config;
44
56
  }
45
57
  async scanPages() {
46
58
  const files = await fg("**/*.(vue|nvue)", {
47
- ignore: ["node_modules", ".git", "**/__*__/*"],
59
+ ignore: ["node_modules", ".git", "**/__*__/*", ...this.options.exclude],
48
60
  onlyFiles: true,
49
61
  cwd: resolve2(process.cwd(), this.options.pagesDir)
50
62
  });
@@ -60,6 +72,7 @@ var Context = class {
60
72
  )
61
73
  };
62
74
  });
75
+ logger.debug("Scanned pages dir", this.pagesPathInfo);
63
76
  }
64
77
  async parsePage({ relative: relative2, absolute }) {
65
78
  const code = await fs.promises.readFile(absolute, {
@@ -103,6 +116,7 @@ var Context = class {
103
116
  const pages = Object.values(defu({}, pagesMeta, this.pagesConfig.pages));
104
117
  pages.sort((a) => a.type === "home" ? -1 : 0);
105
118
  this.pagesMeta = pages;
119
+ logger.debug("merged pages", this.pagesMeta);
106
120
  }
107
121
  async createOrUpdatePagesJSON() {
108
122
  const outputName = "pages.json";
@@ -114,67 +128,107 @@ var Context = class {
114
128
  encoding: "utf-8"
115
129
  });
116
130
  }
131
+ this.options.onBeforeLoadUserConfig(this);
117
132
  await this.loadUserPagesConfig();
133
+ this.options.onAfterLoadUserConfig(this);
134
+ this.options.onBeforeScanPages(this);
118
135
  await this.scanPages();
136
+ this.options.onAfterScanPages(this);
137
+ this.options.onBeforeMergePagesMeta(this);
119
138
  await this.mergePagesMeta();
120
- fs.writeFileSync(
121
- resolvedOutput,
122
- JSON.stringify({
123
- ...this.pagesConfig,
124
- pages: this.pagesMeta
125
- }),
126
- {
127
- encoding: "utf-8"
128
- }
129
- );
139
+ this.options.onAfterMergePagesMeta(this);
140
+ this.options.onBeforeWriteFile(this);
141
+ fs.writeFileSync(resolvedOutput, this.pagesJson, {
142
+ encoding: "utf-8"
143
+ });
144
+ this.options.onAfterWriteFile(this);
130
145
  }
131
146
  async virtualModule() {
132
147
  return `export const pages = ${JSON.stringify(this.pagesMeta)};`;
133
148
  }
134
- get pagesConfigSourcePath() {
135
- return normalizePath(
136
- resolve2(process.cwd(), `${this.options.entry}.${this.options.extension}`)
137
- );
149
+ async pagesConfigSourcePaths() {
150
+ return await fg("pages.config.(ts|mts|cts|js|cjs|mjs|json)", {
151
+ deep: 0,
152
+ onlyFiles: true,
153
+ absolute: true
154
+ });
155
+ }
156
+ get pagesJson() {
157
+ return JSON.stringify({
158
+ ...this.pagesConfig,
159
+ pages: this.pagesMeta
160
+ });
138
161
  }
139
162
  };
140
163
 
141
- // src/config/index.ts
142
- function definePages(config) {
143
- return config;
144
- }
145
-
146
164
  // src/index.ts
147
165
  function resolveOptions(userOptions) {
148
166
  return {
149
167
  pagesDir: "src/pages",
150
168
  outDir: "src",
151
- entry: "pages.config",
152
- extension: "ts",
153
- middlewaresDir: "src/middlewares",
169
+ exclude: [],
170
+ onBeforeLoadUserConfig: () => {
171
+ },
172
+ onAfterLoadUserConfig: () => {
173
+ },
174
+ onBeforeScanPages: () => {
175
+ },
176
+ onAfterScanPages: () => {
177
+ },
178
+ onBeforeMergePagesMeta: () => {
179
+ },
180
+ onAfterMergePagesMeta: () => {
181
+ },
182
+ onBeforeWriteFile: () => {
183
+ },
184
+ onAfterWriteFile: () => {
185
+ },
154
186
  ...userOptions
155
187
  };
156
188
  }
157
189
  var VitePluginUniPages = async (userOptions = {}) => {
158
190
  const options = resolveOptions(userOptions);
191
+ logger.debug("Create uni-pages context with", options);
159
192
  const ctx = new Context(options);
160
193
  return {
161
194
  name: "vite-plugin-uni-pages",
162
195
  enforce: "pre",
163
- configureServer({ watcher }) {
164
- watcher.add(ctx.pagesConfigSourcePath);
196
+ async configureServer({ watcher, moduleGraph, ws }) {
197
+ const pagesConfigSourcePaths = await ctx.pagesConfigSourcePaths();
198
+ logger.debug("Add watcher", pagesConfigSourcePaths);
199
+ watcher.add(pagesConfigSourcePaths);
200
+ const reloadModule = (module, path = "*") => {
201
+ if (module) {
202
+ moduleGraph.invalidateModule(module);
203
+ if (ws) {
204
+ ws.send({
205
+ path,
206
+ type: "full-reload"
207
+ });
208
+ }
209
+ }
210
+ };
211
+ const updateVirtualModule = () => {
212
+ logger.debug("Update virtualModule");
213
+ const module = moduleGraph.getModuleById(resolvedVirtualModuleId);
214
+ reloadModule(module);
215
+ };
165
216
  watcher.on("change", async (path) => {
166
- if (normalizePath2(path) === ctx.pagesConfigSourcePath || isPagePath(path, options)) {
217
+ if (pagesConfigSourcePaths.includes(normalizePath2(path)) || isPagePath(path, options)) {
167
218
  await ctx.createOrUpdatePagesJSON();
219
+ updateVirtualModule();
168
220
  }
169
221
  });
170
222
  watcher.on("add", async (path) => {
171
223
  if (isPagePath(path, options)) {
172
224
  await ctx.createOrUpdatePagesJSON();
225
+ updateVirtualModule();
173
226
  }
174
227
  });
175
228
  watcher.on("unlink", async (path) => {
176
229
  if (isPagePath(path, options)) {
177
230
  await ctx.createOrUpdatePagesJSON();
231
+ updateVirtualModule();
178
232
  }
179
233
  });
180
234
  },
@@ -193,7 +247,6 @@ var VitePluginUniPages = async (userOptions = {}) => {
193
247
  var src_default = VitePluginUniPages;
194
248
  export {
195
249
  VitePluginUniPages,
196
- src_default as default,
197
- definePages
250
+ src_default as default
198
251
  };
199
252
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/constant.ts","../src/context/index.ts","../src/config/index.ts"],"sourcesContent":["import { normalizePath, Plugin } from \"vite\";\nimport { ResolvedOptions, UserOptions } from \"./types\";\nimport { isPagePath } from \"./utils\";\nimport { virtualModuleId, resolvedVirtualModuleId } from \"./constant\";\nimport { Context } from \"./context\";\n\nexport * from \"./config\";\n\nfunction resolveOptions(userOptions: UserOptions): ResolvedOptions {\n return {\n pagesDir: \"src/pages\",\n outDir: \"src\",\n entry: \"pages.config\",\n extension: \"ts\",\n middlewaresDir: \"src/middlewares\",\n ...userOptions,\n };\n}\n\nexport const VitePluginUniPages = async (\n userOptions: UserOptions = {}\n): Promise<Plugin> => {\n const options = resolveOptions(userOptions);\n const ctx = new Context(options);\n\n return {\n name: \"vite-plugin-uni-pages\",\n enforce: \"pre\",\n configureServer({ watcher }) {\n watcher.add(ctx.pagesConfigSourcePath);\n watcher.on(\"change\", async (path) => {\n if (\n normalizePath(path) === ctx.pagesConfigSourcePath ||\n isPagePath(path, options)\n ) {\n await ctx.createOrUpdatePagesJSON();\n }\n });\n watcher.on(\"add\", async (path) => {\n if (isPagePath(path, options)) {\n await ctx.createOrUpdatePagesJSON();\n }\n });\n watcher.on(\"unlink\", async (path) => {\n if (isPagePath(path, options)) {\n await ctx.createOrUpdatePagesJSON();\n }\n });\n },\n resolveId(id) {\n if (id === virtualModuleId) {\n return resolvedVirtualModuleId;\n }\n },\n\n load(id) {\n if (id === resolvedVirtualModuleId) {\n return ctx.virtualModule();\n }\n },\n };\n};\n\nexport default VitePluginUniPages;\n","import { resolve } from \"path\";\nimport { ResolvedOptions } from \"./types\";\nimport { createFilter } from \"vite\";\nexport const isPagePath = (path: string, options: ResolvedOptions) => {\n const dirPath = resolve(process.cwd(), options.pagesDir);\n const filter = createFilter(dirPath + \"/**/*.(vue|nvue)\");\n return filter(path);\n // if (path.startsWith(dirPath)) return true;\n // return false;\n};\n","export const virtualModuleId = \"virtual:uni-pages\";\nexport const resolvedVirtualModuleId = \"\\0\" + virtualModuleId;\n","import { extname, join, relative, resolve } from \"path\";\nimport { loadConfig } from \"unconfig\";\nimport { normalizePath } from \"vite\";\nimport { PagesConfig } from \"../config/types\";\nimport { PageMeta, PagePathInfo, ResolvedOptions } from \"../types\";\nimport fg from \"fast-glob\";\nimport { parse as JSONParse } from \"jsonc-parser\";\nimport { parse } from \"@vue/compiler-dom\";\nimport fs from \"fs\";\nimport { defu } from \"defu\";\n\nexport class Context {\n options: ResolvedOptions;\n pagesConfig!: PagesConfig;\n pagesPathInfo: PagePathInfo[] = [];\n pagesMeta: PageMeta[] = [];\n constructor(options: ResolvedOptions) {\n this.options = options;\n this.createOrUpdatePagesJSON();\n }\n\n async loadUserPagesConfig() {\n const { config } = await loadConfig({\n sources: [\n {\n files: this.options.entry,\n extensions: [this.options.extension],\n },\n ],\n merge: false,\n });\n this.pagesConfig = config as PagesConfig;\n }\n\n async scanPages() {\n const files = await fg(\"**/*.(vue|nvue)\", {\n ignore: [\"node_modules\", \".git\", \"**/__*__/*\"],\n onlyFiles: true,\n cwd: resolve(process.cwd(), this.options.pagesDir),\n });\n const basePath = relative(\n resolve(process.cwd(), this.options.outDir),\n this.options.pagesDir\n );\n this.pagesPathInfo = files.map((file) => {\n return {\n relative: normalizePath(join(basePath, file)),\n absolute: normalizePath(\n resolve(process.cwd(), this.options.pagesDir, file)\n ),\n };\n });\n }\n\n async parsePage({ relative, absolute }: PagePathInfo): Promise<PageMeta> {\n const code = await fs.promises.readFile(absolute, {\n encoding: \"utf-8\",\n });\n const t = parse(code);\n const path = relative.replace(extname(relative), \"\");\n let pageMeta: PageMeta = {\n path,\n type: \"page\",\n };\n t?.children.forEach((v) => {\n if (v.type !== 1) {\n return;\n }\n if (v.tag === \"route\") {\n v.props.forEach((prop) => {\n if (prop.type === 6 && prop.name === \"type\") {\n pageMeta.type = prop.value?.content ?? pageMeta.type;\n }\n });\n const astContent = v.children?.[0];\n if (astContent && astContent.type === 2) {\n const _pageMeta = JSONParse(astContent.content);\n Object.keys(_pageMeta).forEach((key) => {\n pageMeta[key] = _pageMeta[key];\n });\n // overwrite path\n pageMeta[\"path\"] = path;\n }\n }\n });\n return pageMeta;\n }\n\n async mergePagesMeta() {\n const pagesMeta = await Promise.all(\n this.pagesPathInfo?.map(async (page) => await this.parsePage(page))\n );\n const pages = Object.values(defu({}, pagesMeta, this.pagesConfig.pages));\n // @ts-ignore\n pages.sort((a) => (a.type === \"home\" ? -1 : 0));\n // @ts-ignore\n this.pagesMeta = pages;\n }\n\n async createOrUpdatePagesJSON() {\n const outputName = \"pages.json\";\n const resolvedOutput = normalizePath(\n resolve(process.cwd(), this.options.outDir, outputName)\n );\n\n // 如果不存在,先输出一个占位文件\n if (!fs.existsSync(resolvedOutput)) {\n fs.writeFileSync(resolvedOutput, `{\"pages\": [{\"path\": \"\"}]}`, {\n encoding: \"utf-8\",\n });\n }\n\n await this.loadUserPagesConfig();\n await this.scanPages();\n await this.mergePagesMeta();\n\n fs.writeFileSync(\n resolvedOutput,\n JSON.stringify({\n ...this.pagesConfig,\n pages: this.pagesMeta,\n }),\n {\n encoding: \"utf-8\",\n }\n );\n }\n\n async virtualModule() {\n return `export const pages = ${JSON.stringify(this.pagesMeta)};`;\n }\n\n get pagesConfigSourcePath() {\n return normalizePath(\n resolve(process.cwd(), `${this.options.entry}.${this.options.extension}`)\n );\n }\n}\n","import { UserPagesConfig } from \"./types\";\nexport * from \"./types\";\nexport function definePages(config: UserPagesConfig) {\n return config;\n}\n"],"mappings":"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","names":["normalizePath","resolve","relative","_a","normalizePath"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/constant.ts","../src/context/index.ts"],"sourcesContent":["import { ModuleNode, normalizePath, Plugin } from \"vite\";\nimport { ResolvedOptions, UserOptions } from \"./types\";\nimport { isPagePath, logger } from \"./utils\";\nimport { virtualModuleId, resolvedVirtualModuleId } from \"./constant\";\nimport { Context } from \"./context\";\n\nfunction resolveOptions(userOptions: UserOptions): ResolvedOptions {\n return {\n pagesDir: \"src/pages\",\n outDir: \"src\",\n exclude: [],\n onBeforeLoadUserConfig: () => {},\n onAfterLoadUserConfig: () => {},\n onBeforeScanPages: () => {},\n onAfterScanPages: () => {},\n onBeforeMergePagesMeta: () => {},\n onAfterMergePagesMeta: () => {},\n onBeforeWriteFile: () => {},\n onAfterWriteFile: () => {},\n ...userOptions,\n };\n}\n\nexport const VitePluginUniPages = async (\n userOptions: UserOptions = {}\n): Promise<Plugin> => {\n const options = resolveOptions(userOptions);\n logger.debug(\"Create uni-pages context with\", options);\n const ctx = new Context(options);\n return {\n name: \"vite-plugin-uni-pages\",\n enforce: \"pre\",\n async configureServer({ watcher, moduleGraph, ws }) {\n const pagesConfigSourcePaths = await ctx.pagesConfigSourcePaths();\n logger.debug(\"Add watcher\", pagesConfigSourcePaths);\n watcher.add(pagesConfigSourcePaths);\n\n const reloadModule = (module: ModuleNode | undefined, path = \"*\") => {\n if (module) {\n moduleGraph.invalidateModule(module);\n if (ws) {\n ws.send({\n path,\n type: \"full-reload\",\n });\n }\n }\n };\n const updateVirtualModule = () => {\n logger.debug(\"Update virtualModule\");\n const module = moduleGraph.getModuleById(resolvedVirtualModuleId);\n reloadModule(module);\n };\n\n watcher.on(\"change\", async (path) => {\n if (\n pagesConfigSourcePaths.includes(normalizePath(path)) ||\n isPagePath(path, options)\n ) {\n await ctx.createOrUpdatePagesJSON();\n updateVirtualModule();\n }\n });\n watcher.on(\"add\", async (path) => {\n if (isPagePath(path, options)) {\n await ctx.createOrUpdatePagesJSON();\n updateVirtualModule();\n }\n });\n watcher.on(\"unlink\", async (path) => {\n if (isPagePath(path, options)) {\n await ctx.createOrUpdatePagesJSON();\n updateVirtualModule();\n }\n });\n },\n resolveId(id) {\n if (id === virtualModuleId) {\n return resolvedVirtualModuleId;\n }\n },\n\n load(id) {\n if (id === resolvedVirtualModuleId) {\n return ctx.virtualModule();\n }\n },\n };\n};\n\nexport default VitePluginUniPages;\n","import { resolve } from \"path\";\nimport { ResolvedOptions } from \"./types\";\nimport { createFilter } from \"vite\";\nimport consola from \"consola\";\n\nexport const isPagePath = (path: string, options: ResolvedOptions) => {\n const dirPath = resolve(process.cwd(), options.pagesDir);\n const filter = createFilter(dirPath + \"/**/*.(vue|nvue)\", options.exclude);\n return filter(path);\n};\n\nexport const logger = consola.create({\n defaults: {\n tag: \"vite-plugin-uni-pages\",\n },\n});\n","export const virtualModuleId = \"virtual:uni-pages\";\nexport const resolvedVirtualModuleId = \"\\0\" + virtualModuleId;\n","import { extname, join, relative, resolve } from \"path\";\nimport { loadConfig } from \"unconfig\";\nimport { normalizePath } from \"vite\";\nimport { PagesConfig } from \"../config/types\";\nimport { PageMeta, PagePathInfo, ResolvedOptions } from \"../types\";\nimport fg from \"fast-glob\";\nimport { parse as JSONParse } from \"jsonc-parser\";\nimport { parse } from \"@vue/compiler-dom\";\nimport fs from \"fs\";\nimport { defu } from \"defu\";\nimport { logger } from \"../utils\";\nexport class Context {\n options: ResolvedOptions;\n pagesConfig!: PagesConfig;\n pagesPathInfo: PagePathInfo[] = [];\n pagesMeta: PageMeta[] = [];\n constructor(options: ResolvedOptions) {\n this.options = options;\n this.createOrUpdatePagesJSON();\n }\n\n async loadUserPagesConfig() {\n const { config } = await loadConfig({\n sources: [\n {\n files: \"pages.config\",\n },\n ],\n merge: false,\n });\n if (!config) {\n logger.error(\n \"Can't found pages.config, please create pages.config.(ts|mts|cts|js|cjs|mjs|json)\"\n );\n process.exit(-1);\n }\n logger.debug(\"Loaded user pages config\", config);\n this.pagesConfig = config as PagesConfig;\n }\n\n async scanPages() {\n const files = await fg(\"**/*.(vue|nvue)\", {\n ignore: [\"node_modules\", \".git\", \"**/__*__/*\", ...this.options.exclude],\n onlyFiles: true,\n cwd: resolve(process.cwd(), this.options.pagesDir),\n });\n const basePath = relative(\n resolve(process.cwd(), this.options.outDir),\n this.options.pagesDir\n );\n this.pagesPathInfo = files.map((file) => {\n return {\n relative: normalizePath(join(basePath, file)),\n absolute: normalizePath(\n resolve(process.cwd(), this.options.pagesDir, file)\n ),\n };\n });\n logger.debug(\"Scanned pages dir\", this.pagesPathInfo);\n }\n\n async parsePage({ relative, absolute }: PagePathInfo): Promise<PageMeta> {\n const code = await fs.promises.readFile(absolute, {\n encoding: \"utf-8\",\n });\n const t = parse(code);\n const path = relative.replace(extname(relative), \"\");\n let pageMeta: PageMeta = {\n path,\n type: \"page\",\n };\n t?.children.forEach((v) => {\n if (v.type !== 1) {\n return;\n }\n if (v.tag === \"route\") {\n v.props.forEach((prop) => {\n if (prop.type === 6 && prop.name === \"type\") {\n pageMeta.type = prop.value?.content ?? pageMeta.type;\n }\n });\n const astContent = v.children?.[0];\n if (astContent && astContent.type === 2) {\n const _pageMeta = JSONParse(astContent.content);\n Object.keys(_pageMeta).forEach((key) => {\n pageMeta[key] = _pageMeta[key];\n });\n // overwrite path\n pageMeta[\"path\"] = path;\n }\n }\n });\n return pageMeta;\n }\n\n async mergePagesMeta() {\n const pagesMeta = await Promise.all(\n this.pagesPathInfo?.map(async (page) => await this.parsePage(page))\n );\n const pages = Object.values(defu({}, pagesMeta, this.pagesConfig.pages));\n // @ts-ignore\n pages.sort((a) => (a.type === \"home\" ? -1 : 0));\n // @ts-ignore\n this.pagesMeta = pages;\n logger.debug(\"merged pages\", this.pagesMeta);\n }\n\n async createOrUpdatePagesJSON() {\n const outputName = \"pages.json\";\n const resolvedOutput = normalizePath(\n resolve(process.cwd(), this.options.outDir, outputName)\n );\n\n // 如果不存在,先输出一个占位文件\n if (!fs.existsSync(resolvedOutput)) {\n fs.writeFileSync(resolvedOutput, `{\"pages\": [{\"path\": \"\"}]}`, {\n encoding: \"utf-8\",\n });\n }\n\n this.options.onBeforeLoadUserConfig(this);\n await this.loadUserPagesConfig();\n this.options.onAfterLoadUserConfig(this);\n\n this.options.onBeforeScanPages(this);\n await this.scanPages();\n this.options.onAfterScanPages(this);\n\n this.options.onBeforeMergePagesMeta(this);\n await this.mergePagesMeta();\n this.options.onAfterMergePagesMeta(this);\n\n this.options.onBeforeWriteFile(this);\n fs.writeFileSync(resolvedOutput, this.pagesJson, {\n encoding: \"utf-8\",\n });\n this.options.onAfterWriteFile(this);\n }\n\n async virtualModule() {\n return `export const pages = ${JSON.stringify(this.pagesMeta)};`;\n }\n\n async pagesConfigSourcePaths() {\n return await fg(\"pages.config.(ts|mts|cts|js|cjs|mjs|json)\", {\n deep: 0,\n onlyFiles: true,\n absolute: true,\n });\n }\n\n get pagesJson() {\n return JSON.stringify({\n ...this.pagesConfig,\n pages: this.pagesMeta,\n });\n }\n}\n"],"mappings":"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","names":["normalizePath","resolve","resolve","relative","_a","normalizePath"]}
@@ -0,0 +1,18 @@
1
+ interface PagesConfig {
2
+ pages: any;
3
+ globalStyle: any;
4
+ easycom: any;
5
+ tabBar: any;
6
+ condition: any;
7
+ subPackages: any;
8
+ preloadRule: any;
9
+ workers: any;
10
+ leftWindow: any;
11
+ topWindow: any;
12
+ rightWindow: any;
13
+ uniIdRouter: any;
14
+ }
15
+ interface UserPagesConfig extends Partial<PagesConfig> {
16
+ }
17
+
18
+ export { PagesConfig as P, UserPagesConfig as U };
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@uni-helper/vite-plugin-uni-pages",
3
3
  "type": "module",
4
- "version": "0.0.2",
5
- "packageManager": "pnpm@7.14.0",
4
+ "version": "0.0.4",
5
+ "packageManager": "pnpm@7.16.0",
6
6
  "description": "File system based routing for uni-app applications using Vite",
7
7
  "author": "KeJun",
8
8
  "license": "MIT",
@@ -32,6 +32,16 @@
32
32
  "main": "./dist/index.mjs",
33
33
  "module": "./dist/index.js",
34
34
  "types": "./dist/index.d.ts",
35
+ "typesVersions": {
36
+ "*": {
37
+ "*": [
38
+ "./dist/index.d.ts"
39
+ ],
40
+ "config": [
41
+ "./dist/config/index.d.ts"
42
+ ]
43
+ }
44
+ },
35
45
  "files": [
36
46
  "dist",
37
47
  "client.d.ts"
@@ -48,12 +58,14 @@
48
58
  "@types/node": "^18.11.9",
49
59
  "bumpp": "^8.2.1",
50
60
  "tsup": "^6.5.0",
51
- "typescript": "^4.8.4",
52
- "vite": "^3.2.3"
61
+ "typescript": "^4.9.3",
62
+ "vite": "^3.2.4"
53
63
  },
54
64
  "dependencies": {
55
65
  "@vue/compiler-dom": "^3.2.45",
56
- "defu": "^6.1.0",
66
+ "colorette": "^2.0.19",
67
+ "consola": "^2.15.3",
68
+ "defu": "^6.1.1",
57
69
  "fast-glob": "^3.2.12",
58
70
  "jsonc-parser": "^3.2.0",
59
71
  "unconfig": "^0.3.7"