vite-plugin-config-helper 0.2.0 → 0.2.1

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/README.md CHANGED
@@ -1,10 +1,59 @@
1
1
  # vite-plugin-config-helper
2
2
 
3
- 一个用于更改默认 vite.config.ts 文件,将配置逻辑分离到 build 目录文件的插件。
3
+ 简化 vite.config.ts 文件配置,快速集成基于 element-plus UI 的项目。
4
4
 
5
- 如果项目存在 build 目录,且包含 index.ts 或者 plugins.ts 文件, 则插件将不会更改 vite.config.ts 文件。
5
+ ## 安装
6
+
7
+ ```bash
8
+ npm i vite-plugin-config-helper -D
9
+ ```
10
+
11
+ ## 使用
12
+
13
+ 利用 vite 或 create-vue 脚手架创建项目后直接安装该插件,在 <span style="color: darkcyan;">vite.config.ts</span> 进行配置即可。
14
+
15
+ ```ts
16
+ import {fileURLToPath, URL} from 'node:url'
17
+
18
+ import {defineConfig} from 'vite'
19
+ import vue from '@vitejs/plugin-vue'
20
+ import vueJsx from '@vitejs/plugin-vue-jsx'
21
+ import vueDevTools from 'vite-plugin-vue-devtools'
22
+ import {configHelper} from 'vite-plugin-config-helper'
23
+
24
+
25
+ export default defineConfig({
26
+ plugins: [
27
+ vue(),
28
+ vueJsx(),
29
+ vueDevTools(),
30
+ configHelper()
31
+ /** 默认值如下
32
+ * 1. 本插件默认会安装 element-plus 的最新版本(>= 2.11.7)(2.10.5 开始提供了 select 的 options 属性)
33
+ * 2. 配置项 pluginEnvHelper 是用于扩展 .env 功能的,port baseUrl proxyUrl 都能通过 vite-plugin-env-helper 进行管理
34
+ * 3. 配置项 pluginScanRoutes 是自用的,感兴趣可自行查询,实现了 unplugin-vue-router 部分功能:约定式路由。
35
+ * 4. 配置项 proxyUrl 是 vite 开发服务器代理地址
36
+ * 5. 配置项 baseUrl 是 vite 开发服务器代理地址的代理前缀
37
+ * 6. 配置项 template 是使用 vue-i18n tailwindcss 模板的选项
38
+ */
39
+ // configHelper({
40
+ // port: 5173,
41
+ // baseUrl: '/api',
42
+ // proxyUrl: 'http://192.168.0.193:9999',
43
+ // pluginEnvHelper: true,
44
+ // pluginScanRoutes: false,
45
+ // pluginElementPlus: true,
46
+ // template: true,
47
+ // })
48
+ ]
49
+ })
50
+
51
+ ```
52
+
53
+ ## 说明
54
+
55
+ 最初只是想实现 vite.config.ts 配置项的分离功能来提高可读性,但做着做着发现这里要做的事情太多了。最初是将改造的 vite.config.ts 内容以字符串形式硬编码到项目里,但随着字符串越来越多,代码可读性也变差。于是把代码写入文件中,直接从文件里读取提高可读性。
6
56
 
7
- 可以利用这个插件来整合之前写的 <span style="color: darkcyan;">vite-plugin-env-helper</span> 和 <span style="color: darkcyan;">vite-plugin-scan-routes</span> 插件,还可以拓展其他配置,例如 element-plus 组件,来快速搭建项目框架。
8
57
 
9
58
  该插件只在项目初始搭建时起作用,搭建完成后会自动删除自身,所以不需要关注本库的大小及优化!
10
59
 
@@ -15,13 +64,6 @@
15
64
  然后判断是否存在 .env 文件,并在该文件中以 VITE_APP_BASE_URL VITE_APP_PROXY_URL VITE_APP_PORT 这三个键承接插件传入参数 baseUrl proxyUrl port 。
16
65
 
17
66
  在这个插件的开发过程中,不断添加的参数增加了复杂度,先是整合自己的两个插件,然后又想加 element-plus tailwindcss 等,边界的扩大导致了使用的复杂,最后决定整合 element-plus 然后稳定下来,这就已经可以实现比较全面的基础模板了。
18
- ## 安装
19
-
20
- ```bash
21
- npm i -D vite-plugin-config-helper
22
- ```
23
-
24
- ## 使用
25
67
 
26
68
  ### 配置 <span style="color: darkcyan;">__vite.config.ts__</span>
27
69
 
@@ -30,41 +72,15 @@ npm i -D vite-plugin-config-helper
30
72
  2. 检查 package.json 文件,重新安装依赖。
31
73
 
32
74
  3. 经过上面的操作,本插件会帮我们改造 vite.config.ts 配置文件,并将一些插件配置(element-plus)拆分到 /build/config 目录中,不用每次都去官网复制粘贴,能快速初始化一个干净的项目。
33
- ```ts
34
- import vue from '@vitejs/plugin-vue'
35
- import { defineConfig, type UserConfig, type ConfigEnv } from 'vite'
36
- import {configHelper} from 'vite-plugin-config-helper'
37
75
 
38
76
 
39
- export default defineConfig((config: ConfigEnv): UserConfig => {
40
-
41
- return {
42
- plugins: [
43
- vue(),
44
- // 路由插件是自用的,感兴趣可自行查询,实现了 unplugin-vue-router 部分功能:约定式路由。
45
- // element-plus 最好是 2.10.5 以上版本
46
- // configHelper() // 默认值如下
47
- configHelper({
48
- port: 5173,
49
- baseUrl: '/api',
50
- proxyUrl: 'http://192.168.0.193:9999' ,
51
- pluginEnvHelper: true,
52
- pluginScanRoutes: false,
53
- pluginElementPlus: true
54
- })
55
- ]
56
- }
57
- })
58
-
59
- ```
60
-
61
77
  ### 说明
62
78
  插件运行后会更改已有的一些文件并添加一些文件,变动如下:
63
79
  ```md
64
80
  ├── build/
65
81
  │ ├── config/ # 插件配置目录
66
82
  │ │ ├── index.ts # 主配置文件
67
- │ │ ├── plugins.ts # vite 默认配置文件
83
+ │ │ ├── plugins-env.ts # vite 默认配置文件
68
84
  │ │ └── ep.ts # ElementPlus 配置文件,包括组件和样式自动导入等
69
85
  ├── src/
70
86
  │ ├── components/ # 组件目录
@@ -0,0 +1,2 @@
1
+ dcc891fc8fc65336cc0512d1aacec8cdbd87f8fe1e74b1f1e9c16264970eab26e3f75c3af536cec952d017962a7a79e364fe23be39ce03f0163d5b5d0d01fedfafc8adb73c14fa28a8522473965577cff5e2f8d58d795b3b320b7e75a403808b50e5cfd3984780a155a00e32b165768a94f86a1cdb0ad24305d24898a8deb407245316267ae8361d16224817c3daf31e2a6558a72bd2250e5ea22b58a0baaf618b291689d98123ffcfba8b8a4779f6ff4e10466711750869fe7bdd770042f9fc34e1434af17e66a07ec5d1bab888fad5231355f8b571d00e0024bfaa4b6663271ec7e790e583d7692169b9f7e1609d2be782c2f4578bf1eca66b1eebb665861667b59d1b2bea028dd9a5e13b6e06eaeb84e721a39786b54329e9ec169e3d2d6318e132b259fb6a8414a822dc4b8f2bab65845e264aba002a49f7e449eaeaa68215048a0d0c9ed94aac6088ca4f00c26f7f05b3d5ab244e10a8e8c420668d4495d5e5826751e95fa92c0bf0d6b45123da6c16d3b9e8df85bfe523f6a55e4c880616d607f569e809e6a080da08eac94e35b3043c4d56eb0e35cd2333c18e1490d4fde061b7abdf45806cd4a46cf77d3ec19c37658da57311a0ca92a96807d14bc6b2acae65cf6fa58e93e3045df9a8dabe8d52216e49ea877b0fad323b25903a8fa0851f4224207e480b95e1181091d2a0969f1c90f1f8cfba413a81c64fb0b5df6dba331a9ec16928c48573363a378e71f6665f4bdfe9f81dc6a8fbe97825f7ce7088ee7269e72fdeccd8fbf3f2f346c4917c0933ac8c97433b59b2bdde6a17e1257af07440c477254684e779629927ef7fabc429d0f880f42c5e34e9f2cd871d6ed69325e6a61a4a783dc4ff747e2021c0ad59cf192c75057fb066c499d857bb6dd9245ecd2cbae41994cb3effa1e7cb50241a807bd335ff2a7da45a202b13d18ec819cde96e8e5141032ed40161e63e0ddb55223775762c54d99e05a8c18126ccba8192c02fd903d670c4bb2d45127a6c927d333b255a94e1649eb70ec3a6b3c61c388286b612b25a4dde5460eb001efb114dfa3a32ef9c5f2d27cc07f630d091e44722b18c757c90a2651550204e6f
2
+ 69b428aa340ea9d302d3f564bf748a9c
@@ -0,0 +1,2 @@
1
+ 177bfe34cb9f264d630ccfda5849ca368ae9a76a1fd5d65043821c350b65dfb5c87e282155b22cff1c1fd1695bf36110b5a070e8e36fd48e6511a55189e6e5669c677583076772ad57d64df0969b3b41249909c28e806889031e01919a8a36197d97ce77ffa28cc496710a3205dcd22a375895c4cc39f76facf7458b942c9a4a21b88630fd634f84f34d8a658ef4c377a3fa39c3d2b9d802ba875fc983b8615b3421ca7b888565a4f980b9d7c340943281653f808bbd44ac33ad89f5570913a68d65c4ba34dcf4d5d0176986bdc80173d159f85e076b225243802224c66d72cc5f310775d8cd24f55f1f97d55b2ff7a0cd9973c6d119b60425d5e341f6e92e1a39dbe5cc5591a552276464ccd6542120143637b3cb0a119ddb9e5cac26deebd8fc6278ae17a725eb8dc855d4a69150850a87d2a8f030dbcbbe45129c32561faa0f67989e77d9bbfe418148e8f6b5d1a4621b518f044201af6cc193b0d40887ad6fc6f2c181b57d9e764a8cfaff28e078ad9720ed2b9c0560e90d9e9cd1a5676e4f83cad992718af22a3f907330cd73d0943b5efc40994a533eb89a5f515f4fee355415554171492498188d34c46f486985d396e2e17a7db0c9e36b07e00b1db5ce5800ef9ab7d4e847ac1381c2f0784d11cce3e41f9ed48d263d27c90a4b59958b065267920f3c842c3d99b1929c3165f69bdd6cdaa823ad1492d4fd1d64cfa605f46eb9ab48246b4b411914c10854816d1220869e835e63e05bb649b955f9e15992883101c483d7696c8f20103d5a91b0ce39376c00e6fea77f44d75a69523e6fcef83e2c7b627aa29495df4181bfd3deeab50662558bbfdf906a82c9c1fb17c0f7af591ed1e4044f8a40d50e742b0f6ab1170d5b415ba856a921cb8847671835e2bd8fefd486bf0ad9074f0133849d5040ea2f2091edf8fb69c93dd56f2e8a1146369907090f68299a896194b75737c4d5c6b04ff9fec68b8589a0ea54b4fcc33247f08e1164f28c2767f1cf470b1dd6ac9eb8a079b8f52f6cb8e4f52bdc00cff7358cd8956e6b2fe107434a44634021e2275e4c9ed49982b694db2fbd4c918cbf2a43c91846346075386ef483b7ac4648fbf99ea2d62213ac0e0cc04adda7f15e1b1aa4308158e431686a2882ee7083b70dcb2064b47233ea240c9507035cc5d685228cc86fde26caf3fa48fc83458eae0c22b08b3518e6fa5000258d2fb969c435c7add5dab30265f95d9680c82804381416443789b812e81443a7ad439cc36a74d8999756a5c59112a22535989b2038b99fa5e3cb8f0a0b6a05f46320b168266898cc382e88442d67d485ac70bb55c98fac1519fedaf18bce5b5a84d42e4724c61ba5895b0b7fcd3f75dc648c456105f5bdb6a79769a4318d17cc5c69a41a9f9c76d99e6a215c386a8c3e873d0c89d3a725c74d8afdd18fdbbdc85ca0a224797ae7dd12d0d2a3515d2a9147aea4829f6c22b8dda1de4dd1a662b3c739026a50ed9721152b3db6f558354db664b9438979e5263aa5e411c7e3e0078c4f9b119938fa720eeeda076d7457fd3093ac2fefaa0e697586e929ec00662886680e43eeb22c18dcd92ec9ad9c284d4a42833ecb0bc26ebf6151a56c1997f6458592d086acd72275874c17c61be32b2f6aca6875a8c37bd94fcc14d3103e6ba9efe070a7712ec8686aed358f9ca813587d6997c2a01f9537ea89ba0d5988ae47c3402d70b19da799ab9b275cbdc6ff5820eb7462a6c7975735cf1c5cc3d136c6292860ffa2025d63af20973a66ece1e834d2391a60f8e2c0edb933d459208f170bebeabfa6ed0b5367b7c68e5df564f42ba50ccec4bf55b7d853825bb50b9961a4142341a1d829e0a1a797624392333fc1012da3ee1a2e25a155683433ad4ae3d0802c6365a8373ed0e78f8b168b4b17fc7e5281553e952340212ffca137fbfecdd0aaf21b5ee5227ebc69d1aa039b5b7816bb42482452bd30191ab951b5db449759
2
+ 6dded9dcaab5a9b95d32d1a048dbdb31
@@ -0,0 +1,2 @@
1
+ d0967f4da849ff5761b0d5eb2c416637cf817ab1a5c65f907f46a68f858961a42440fcf42d6eafc4e4e8d464880bccd206fb497c960fbde2b6d931d623e00078b84aded62bd639ae0cf9ef5488ebb6598b3e26539e9b14affecf478f03dc80ac0a875320dca22b81195ec6640d25ce6fd6269888a7ecd7dcf5bf60d681956bf841fdc1f133df107e24c1f41e05bea6b5301e12b09fb19b2cdee1eba0e66df0a8e611a42337e866f79eadd8cd056dee18d978aeaa82988bcbf2322b08d171f69f1c924292ab7b19a97f8a5d4b9c31fa50adb2a473057e12af45dfa105dae158c4ffc40c3154ccc7220fae876b110532fdc0a22863f2536f18093f8b0cbffa57c6f14ccda4d4656fbd0a54e5f6a283c853ba4b267ec115feea9e1032c1e72813de85052655c73e7ed8543f3c5a5078c854b4aac9487a9b907cb4c3f7e64a005cdd1674f52bfa11d76bd90ca5e3a469fd342853bcf1c9480630d6a7aa93d20814d9cbf67c9fc011910be503c4d97dd534b96e8bcaba69fe5242e09f0ab9d0bc2370d0660172db09945e2537648edf86a5f5de2d047e65fdcb62e27a818e989d2aa50e538497385129dbc315382e1d82cb03ea38afa794b359bed0944c1a929d34195c869e0fd504afcb6f75445033e8407e30f301ee43c834652b2fccfd0ab399d03438e86d74b99940f978e296f7d1df64051850272979f5c02c6106f7331e408a83bcc48db5474d570af57c2b24e36b2a121296eaa961442e3e3bbc7aa6298899212cc11c2791d1998fefec8ac711c07b3654bd15add4eb4ef4840e3ae72cd58885a428440397aa6691f609a9cd5d14022d0c5341e3be8cdba227fc03fb8bcfa838d7071628a943432f39edba69efc7b829183eac76e403f33a31f813b033dd463eb6301bc186e930a4ec5c0e30afb569f3e9ac1c350651e4e3f14d754b0146352df41aa66a4ab2741d0b740ae0b6a0097d95349d6545246a14170b8d8e87d7d68bb5b0e4c532c7a89163fbf01231639fe99af943b3e2254c198d168f4da756d5d8eaa04d8fb32e446f497bb77bc89aa95fe5ed981156e926dc524ac77d7f2c26871a0bfaea34cd965ac3e185da97d208cc3b0fcdc76a130026be5cad5c77db36ad155ae470bfb0c7fc7f73bb0f457abf8055c57c3da9ec9d5440a7435d2c395959f04c7bcf5655c54f78a4ff89ba621dd560425dc49267e02e11dbaa78fc6162b8ade573774d8d40b364b27973bdfa1c05d4719133b9c1c997cd9332f9938b653ca0afbffd02cd0bcb882c0dc9f742c5c2cac36bd2b8549c0cbf7a22666ba0dea48513086c12a770a97fc88dabcc1b26d59b7841bc55212a4e99a5bc3af0e269c54026230014609af53e2f1fdeadb90a707ab1dc8ce7985ae579b7093c67f0345e731fd46cd7c3c4daad5063100b5f97c20e58648941126ad345b90e1c7eb1b78cf5436c1578447934dff23d73f35fc09391201b57043e226125a8d188b2e6708f0f12215ce9cd9556f21cc727a32641d0b5f4f779da2316d376b747b67f1f226d8fe1d00ccde5ec7ef235de5c46f8e60977440a1188d053113f07041b21cdd5e98f67d1a86bc041e4097c0e7dc580525e66b42d89a37c3714d7bde04d323f21f4a3faf5704e054014a0b4f5424b01373ede61c2be3e3e4167dd069a51c5e7dfe48a945c68f32e1cecd0f87c9c83af41b125320cfef0917e54c8050d446245679b2a6773e71b7c2603641b2055588e01c9777179963a88f91f807218a956762a5d024e95ec5e3ea0326cd9470cb2c15ee485ea424d44b9cb54cb582f4987758df6785e4f0a343978884f6060066e0a8fea57984f81cfef46626236da67ff81f3a36050e2c2baba495f516c57613f843d
2
+ a4e66ae5ef327cb7b166430d73db73df
@@ -0,0 +1,2 @@
1
+ fcafb4927a297f7d03c28ee9f192f57991beb3689b82ac745b7ad460a3487dc47b7e5569cf72e2f286e87eac6c59c0ddf38886740729d2c95838f11d3442f8afcc7bbc9936a30f33ca7b101bd7385830b079bdf530680f19ce976fa7043089fded2a10d952e98eb0baa1c82d22a03995612f81eb420ea4b4a79368350e551311d8396cd823f770f6da8f9026d6586771d710a63d64e6d6cce7808ff351b9c0935c03a1a00398b74a4e6b452b40317cde93a16a6e9d71c6f6ef68a577e5759b9bffe0a65389e4ae51ba5822749d7d7936ad91f900d31f1520cbaf279720becb279595b56bacbeba19e78c6e4f240742353b0fe0bdf5d35b2368cfd9ed21003eadcfe83920638d93f74aa263f2efc0bfe5870405e90ae3f6812c93f9766709d1c9195095a06226ef6879e600eef1e8dd09832e1b101693d5787db48907623743dee38d2d081e310308bc9763756f27937fbde0759c0b59e54f1fdc891282112912997ff38edbdb124075f00e404ed5ec530f619eaab5b3b5f0046c5e3a4ff6322e9ea417952b93959612d1d60af92d6cad66534b83df6a355981f39df31f1bcb2d5c9e0892c15bf480b6d871e8b9caee6a
2
+ 7c0c9134bb35b63679b326fc5e2b1019
@@ -0,0 +1,2 @@
1
+ 7695b4e04b2f73ed808a2a86023dd7e66d1abad1a93da4957052baa4e79a0c0d02118d1beb145fbe9ea3a67464f5a0a17f05c56bc182ec73dce1213a11c7bfac2468d999878034a5c6f250a125c25aeaee7106d875a7381e123c96aaa29f37957660f6ac9c6fe30637dd015537de28d36c240f56dad677ea63c780f0ad1d89403cc7677f69467f696de03c61ba3e1b262ccf23d8a7f3059b83964f7a45e84216a3c52a1da77e56b9da548c6de2825e752062c9c53ffff9d089d7fb1a7cb552b7a5c67b72363baf0e8f8a03023e79d7de267a3203e40cf8f3e2b85edb4eeedd6e2422c8213caa005bf16363d8c9369cd619d357d7a7d3a277f62607925e49ca971e0a00f0d6e95b1cfea5d07ee4b1c80fb8de9ef772e0e97fb9e059179b5b5ddc55b56a11db18e82a70608bdcc2849e6ba71a0a35cd1deccbb820ac8eb67d86c2d5ae3ba39fd5a61733695297db8b485efab6de810317b8abfaac6a7ef5bff5a61fe4e9d64d6b6f20cfa35b0354cee0c4
2
+ 60f39ea8f62ab7657e0feb6fac090430
@@ -0,0 +1,2 @@
1
+ a2625c6452aedcc1c7e15d518a04dbffc7f8923a159ef4905d367b6590698e048fe7dc4f51fb21e8fd41bf9bddd71e18e5e7f05f2d0649d2e41ef78a1b001846cd10f205468b9cb5117886f49af6b40b1087b4df202a38dd418c1f82c6e75bbae6e9a40f92cbdc049933a0578fbe128f754dff623ec296922d046cae2dd5c355a29afe4edab58a2b135707714c9269c892791187a3952446629560a2b84b38a8176c37f74821198ec99dcca58c055a95514efe8e94802a5341f125d5667382914625b44e2d9252e3ce69b18050156154923ae7a6cdb25e81ad91ae2b83d3f3852cbe92e15ba3a57c3117089fdbc2154d742e8fb710abbc9308cedbfc867f25e5593b340b8e2d82e6c88ba084dab02652b210850435cb1a81e1211b0b9d32d6e16cd889339077bbeff820b559cc71970f02f70aee820c6b80156ada31b8b0b4d36988407e84c877b8b49bce6756e4a99ab8b8b0c4fda5172511980f3422fd1c8b
2
+ cd57530dc59a335b92888e73b07c97b1
@@ -0,0 +1,2 @@
1
+ f67e39c3901f6b315abee1fa3118624279fc59f2c28fdf5530b151f4ca52c4430325c9827ede27c2b028315c0e772dd6e0485e13e98e448ea961ca873a961f157b003d3d34b345930bff274cbc17f49e1c578b6a160fc9bc14bc8480d16570a94f17abb9d6e47ba8196fc50e10f1e495866c354a2f0d538c448b1c04e443bdb582d246b37b1f74b68cd83c604e0845885cd235a0e695d9511a69549c34cafb2a916abe14726d5b34036903a866ab0dfb72599850c627bf45fac446cac89b0161b9172b5792e3dfe90c02512e8dbdf44007bb5d1be57eea0a6eb84e542182fc449d9da4390671a1ba19452b0cd83ad9e5c1b35182265d36036ef411bf388efdf1c0598a7aad4b83160d25ccff3b2ee61646eabe102999f31ae77066a79ac0e1cc
2
+ e0e880a76297b8af38d4be2ed14a975d
@@ -0,0 +1,2 @@
1
+ 9d3e784d15bd95fe13be9632104e4fe7d51086603fea162e9de424fbbe03a74d9a732ef1c848c653206a9881fcf8bc77f2d31ae0c3eac3c6e5bdfd8f5df8979c393b2d3b9760899cd20183dfb72d8da5323779aa785fe007ac37d5b0dfe60b6945164ddee13817ff7aada3e677f25b6a521a613cde354de1633ec2d8fbb610647f924d38be104e25cc99868f0a4bae687599adcd9fdf96658ee2c78a78d34f111c8e16759524777ad0025b6d71af95fe0f5315f763b1a06a595051de515208f419e5c4fb6aa5b319c9bf5af0b0ef8342a3bb1af2172142911aa11bff55ed1c24d81d45d013a4a3b20e573778f3a8880910d0aed1ac18b2338169c7b31ee074e6ae2f5e72a6c422747baf182c200856f3c8693d296e5cd75f45b4b0c17adef7045560fa2942419f8b4b4195fdfd4fd5a74e093ce9d91aa5d3f7c2124ff6558a30db43c60629ee50935931d38dd83fba3c19b6a455e9928437506f960153758abdaf91c1251eab7a29bef72ce42635fcd6e59bc5db21a1304858f353ed69126725
2
+ 89b4c86ec7d5f026e4b7f59b7293569a
@@ -0,0 +1,2 @@
1
+ 2e24c2e552b08335e6be6e8d10e95e10af69148212f1f84a2441b460ba8f49ffe523c30cc3dff64e4e6aacde07490ef183d075e434460ab6abef1f1fa9864620062bdfe157f770f807eb2adb63e0ad5715a097e06467f553db7bc3a92beea6cc102c944531f9ba504b1a9c3f304849a22db1dd08903138773a915090cc74d5a563aca64e366c5aa9b33fb161d42ca7a9610d0eb48e1f86e97fabb2d766e46cff8eb0707963d97c6e83151283313a6347bad342089c864a89664755949b23581782d0aaf457c66c821aa2c397f2ade1e6f6825777a9a1dc37b25ded93bb7244f56da9b2f41b417506fc0c2bae4b300f2a63021b941742ee3a5d42c5ac0a8a38b91a5b35ecd2521262f9720c46d505d89aba0a2a64e477ec23ba8fb5bd237f6618c6409fc465fae6099644965a14d24babc041f3185bd157025b37ed13e1452a937288da765b791da1b01eb2ca1a2b459a68d7c48f3c54ba9f91de645dc2ce22638549b1211f57691197679e5c5c2bf6ba951b56ca5bfb791ed3f5290a8355242b940bd73e3e5b2a2631927870846a7619c90b584912eb72656ffd588260bfccf2a47104624d2bdb891d66dd463a5a9c65eb9cd3efd709314f2f0fa67af2e61df4c35850013a77184de3b0723364bc74d703ef25a17223c37dc43d9efbea805535d6169a6a0f8f5adfba703cc553a52f03b1571e74303d883ec5062cba4742c86b8a7aa408deacf9d28cb577630f9b9dca20c2fd40fe5939bad4832b4deeff831541882359269e4f98d2fc547283b48680267347546aa94ada0635909c1df2ac649c390b0ade91aed4368512237b5a6c1b617fb1fa6979170807aa65fd2a68d5b440cfcf40843f41e93a06b62d32863e4f56837e1db7b804da0bb9580c67c44c70286dd8ec170cdb9f9ba2a5b00413ec17baa7761042fe7693d7db3879e481512354b00103663e574797df9e2d99896f9a879e9be8d8f7a1e6d69d8571a0a0bee9985cb719b6673d20861ee3e6118c657e8602721264e9b15109935e2365ede537584a3dafc40b0472c0964f46584e2b4594e23f6b1438a065f4dc90bfcd21d101c9edfb80508b728f20292698f0dbf588a204855eecdb4db6cd10ef25310d772f9a4d3a1fc00215bfb9464964cb80bab7b28195f98cc1b9286adf06b7a9cc38253baa1bd0936b9f94c137cfba70a3cdd2cbe14efd9da5d4497a6352db72407a8bdb31186602b573297cbf3bbc5421ee98010df71cd87a1978042fc71f163959df2fc5d6d01b7305da641ed33b675e759eb192fd33fc5095a2924a891b628e7d96b13b13b7f8271b7c62d8f24ef76efae276f7e0eb0676b04fa3e0cc0ba50d62c4ff1a6e1ced1bbff918813a2c0bf92f8d8e5ed5e29cb1da08f1e62226214cbe0cd26a8cbdcc878edb434180d5e96fb4bfc765fbec4d4828c56b1ee3615a28153e3ee89231d0fea062b55dab69ac0da716d7ee11583915c128ceb5fd3a92e30a1ec022c5702aea7f7868f18ad6490e612b3272ecedfb03605b5cec27eea339ec2ad9a7aec8986d23ac4a2f1b9eb07e46b1add27756042ed894306d22cf646f314a23dfe104262e153e285117c3dea5e7a677f39b03548e40d8ce4dda5a00c7712da5b5ee416338f89fd77725817234b9f253567b71810c8fbd6c65162936ac11ccd8fe3822ab8aef1d64f1938feef6cf3767e21237d16b7a77f1a9d9eb8fecb0fd062ccb5b66b8a9381f311408db7c835bdc9196d5e60a4157c245cdc539dcdbaec61a8ed7d56ca20ae29ea6bef2c4cb850b6cbbbb6628db73e65506a758e4eb4fde4720b5c79a4573fa27e7d39a7a71d94e4213a87762d7406ad0b7a24377d323dc309b848bae647849a77e662420def3749661883efe08495e2e85cc9cf47f8c3440c89be6815c632008095d561d95bd7511b79eadd5dc975adbb84b2c044d3d40d2d731d97678ba6517b6ff35793ac10d50d6d0ca6a97b4e821ba4de6fc2284762286f4b66364ad79d9b03286d9eafed0071870f7672da4dd809ad2005d767cc9bf81b9d4e492f6f722bffa6c73786f55338b414debd524104b3f983ae195ac255dd2068eb5b32a187c58821d793dbdf30ee828f3882db73fdb746081a65a0ef5bff740fe435ffdf4cbf595aac46b22007aa40215013419f50f967bba0d26baa569ca16b7f3298aa601d946c438b37e5aaf3af73ee62ec9264af55405d45d0fa792aea3c5ae74df7ac352b11b3c30a1ce1f5f9639f9547c520c93b445f2b3f875a48a60da9dbc41e69c246bc338cd25530616eef29f2043ed8a68798272c214b2530dccd35d4f3cbb9fd6df9e612064d04ca38a605640f1307d2c26aa77b3c2112bf2d86c3d6ea4feebfda7918fa3f8f53d1f5d8b27796af9a8c49e8d67c1dfaa38def312875fdc25b175963707fd43337a54722eb574892b065777bec71bd92eb91727f68cfb83b7e2daab76c9695e28f789de9c7f3c9cdbfe63dd725df5cc2f697b12d179f578d506fd52e0f6eb12e32edb40d8c2c7ccd4838e51e7f7a2f30c583cfdf69f315b701632caa1b81f44e659bf2205c037ca2a810fd16725d34046f55f7cce2a7e24d9be94e190e36e64811f99eaf99055d3e997cd21a37e2b263887fb5f6c087c9512e7e4ee075d7cfd05caff6c0c3361efd3bafcb038062e544c5db484aacce255c79db8186a58b4a532c7bc1701aa69ee61a974d9a3a542194ce7a892c74774da1f4ae5ad3883c68a9e4546d1d708f79d0b77fd9d18f56d546a1d1b3a44466ccd3e02a9028d2c6876e366c97544ce07e17381735822b44292392984ac24460d0f524bf8620ef5fa8f0f18291a086ea856ab24ae907e452f7e86aee6a796e78a73fab855170774cad245d9074ecebaa035bb405faee3d517eeef29546d8c33d64e60b3f11084c0fdefb238ab5e1d787eed39581200f07a815206a7ed64e855175c72e6a3fc6a93daa89de37ed7dd6f470a49dc5eda110eca218e6296111f93228bba9f26f4cc8a1085b51d08f43a996ea7c159260a6a6942aadf08794843c2cdc1b44416450f09028fbacafb66d84a88f323cb8426e35ae55be1b95e1ca737bac5ee9e681722a7c29ed59ea0bf602b05e8a7689cb3f44c9e2db788ec5d82ca7a4bfbc70a26c91ce626e20a04aaa7e97f8ce480eeda57a9e067dabbb453caeadcab14d065c1e44c85c2f9a50c9c23e44bffbb177b1c7828b2cece09d2d71621e7257f5d7ea30ca0fd0e05ac3f3a8dd477018f5879d8a3236079
2
+ 76379095a03cb54e2b4b59fb95d75c2c
@@ -1,2 +1,2 @@
1
- 1d0f1f06351dd5361cd8b56a85f3d28aab87746b13ef4a34db7cb760a1b15a79b5266640ceb844f7de193ca2179bdafdaf64bc9ad538830989fbbf129f1e5022ae88981d95a029225d9f3e9a469741af74788a3a41151888f8e864cb9f2df8d6ca01d84f61f3499489e967a80dcd5f56e606dda0dfd90cbd0993f0ff2eacd669c33b98f11d362f3d422a3537433d581184e8bedb9ee26f1e80566c99e3454aea0d9eddd743099fea0d14d7b61979b56515a9cb7ce53841820755198602015ae71f46f01ab8217783f00684eab69df50a3d8401749d38482fd171e269d25f0fc1828457dde668ea005879fe15b9f971f14ee99c313acb0a42f8d54c5b1f3debdbefda950437c3f2aca324c872a5bcf602cf19a3c1db24275ff6a7f9530a4ccc0cc0cc22e7417c4301f2c5cb9c08145ad73763a62746a16b796ce54538516d1d0791b90fcfd267c58bf4cb5615be7ceedf11cbd131a0f27a0ad1af790e846c11aec5722f6cfd57e13a42012c3fe77426a032f822051e30ad98b20fd2cbc749b20c950dd3649e20da8743063d8230b72358e41fe6bed00df8e95e47fabd4731832a51b10299eb299f99f9cde06cebc513decfdcae365f504ff70722e8b3ae9db0064f286e7555b130d57dc33ccb52e7446aa1995f555b3a8fc1764f92c48d069ea3e8412a93e8f7315959ed5f64798fc396598e2d82f420e4ae836f19bed406cbd3f1476dca526a25534e529dbf1bbe711bbd13ec7abfec907cd321d1dff51efda9c1372fb46246187107e5ddd6ddf8e99b4b354382f5cda98a36d991fc6b9f331158f2d1c8ebe2be0a9555edb6ceffdf7fe996f0ad9b7b62fb6051d2650e0dd3309f1f20dfd560ca65ffe8e0dd4d25f13e5560079982f5667037dbd0a5def34b3c8d612ad5a3a1584fcf7237b07516487314357e5c5b8ae45c0f3b3881874acc90b419149ef0e95d9ad3f5f557c4b5e4906ae6c0246ee8b66ab273d6e83ef347bc9143aa83d91ff63ecdb433b6090c5ae85e4127a4b5533835d763447cd0eb76e355fc2b17c7d52934fde6f8379d34e9dbeae07dbc5c154976e47281df65e499f05aa750aa37b3fa8bf486ee2c694396992efcabd89e72c619122a438ba9c7c0d3523d3ce50dd5f1bafe631fdc554499fe845358fbac79e1cf823d875eb3f395570a65ea7d73f76aa5b6b35f47b87323adaa3d6475684c1b598090f1ec514228091417a06705396eedd3ad116a5fe67e306580ec2976807c702107fca3f1093ff308c96649bb8cee4a053216ce500524da8763cea0b8dcef483dc404f6775445333bc71f49a216527d911725b903fa54e4dda7fb8343bfae3a5ceb9e0d8c8dfc115699f539d10d195a1dfa6c6cce69c399736f21ab3f5c436f848e9710a5172929fd3d705e0db5a093445d45eb5a2b9c9b63f533ac65e717e6dbfe3e42b2299f7d4a21b3d0598967372416fa036b69a0433a8651adf02628068bfbd03034eaceef7bfa13100f6d6c68d5fcc2d65de767377f7fd2c03143fe89aebf2bab7c8463e59a1b337c915e1c285faafaf03fb02ecdd398d3266eef0fc385a1f6e6402246dcc810e475f2d6eacb3db728f50b7e86f5353d2e41a4d28a65922e1c019b7fc4cca2ea7499aac520dccd8a46eb151f56eff2d6b5ab98da9eb6f0dbedad0def6124a35adad65512be2fcae0dfb439064da8684f3b12c7759d11ee07df125e199335db17927ead502f3c5b136cc17e3ad0aa67e332d1544dabf18b585a1c198f0445c873c1713c561a108ff1011b3618734d3401b5b8a7860e82bfc9523035ed2d04d835a6e992a3026c22eeeaa5feefe271a0b25ea6f264fb39fb63e4afd7aa9024e42cbf12b00519f6056c5fb2da2f528b7c9cd4cdbab3310efcc6d6012bfd93a9c979a7742bbd2cc57ed11d4d6f6665db728101c4ea08cfc310dc03ba76625be927b3344c3311deac2b5e20cb8e43ae8add47ac5dc06e32b2e7a348f86301ddf3c027b3df543898ee0805cac69113324440c688d5e7e2a736d9a7c3556b5fc9286dda14441c11f87ae4f297d58a4b70b88686d3231db3cba6fc1e7d0c2f619f2061eb36c528040aa0d702eeb141014d5ab8a1f325fae60acbfbdca404fcc9e89e15dde9fb4fb0586d25bc9068ddfb5fa45e278b589ccf005b53ba49384139d326bae3280677e0a338c006f1d9c3112584d385d3c612c9fb15937685c9e9a9fa0783d1b0d91a63be3e03b6cd1c1708b48305b6dcd2a921936655664b015f630d7ddf13db77b0cabe841b353d98b8eeaf873ab82784eff9c16b0b688337f061d976f21fe4f73835948a52ca37c20a54afe9d7f8d6a6ca06279b194db5d24977c3c1a0ae400192a2386017915ee81bbc9c8d06f2ed096ecd06571016ead421b0228cd3815854e66fd2742f10e8e23a7b2f163d972b045e6d8fe04078e5e0674cfd6354cb3ddd127c4ee7a6a0c6cfe204b7424118be9519058669f3f6429c91acef26047f83f73a251a7c2f5801c43f97fd90782ca6927814de63e24e60137513c7adf211130c0cf05d6f32f6241cc47e6f242801f5aa2dcc7209436996e1cae5cb71dd8eac0518b35a46af6eab19297fc230ce4bc7373a36351c792b8c31404931cd29e22df0f3a6d76f686c9fe5162db4d4d252953caa1e7104d72139aaaeff0a2c9af2a186baafec0bd6cdf8fdf16817cc35cc28a232d740579404062ca40307e2436c62ff501eb9304fe4387949792c5e6860d63cba7dcb976479ebb315fac909559732b1157dbe3735cfa27aba7ba81e5b669762f1e1d80aa68129781b872012
2
- ad45659ed7d2b5b805e7235eb71c9447
1
+ 2bd3f1cade6939e0a293be0f482d162374317ac0b205cb4c589db97ff9a62a455209ba13369c3a9c7eedfd9067f69a06502422ba906ca8a00d6bb5c34378afdc551e11d67f4216e3a74b14ad85ab0b296c08811b745ad3da4ca50d30f692ab017fd8dece198f421ee09d202a63be670b6dcf3409c50751ce89434ce8be315105a720e1fd82094d528b403c762cbc6c77179de38d1730b822d93edbd54684fbc3ce3b188633660c8d5863fc4c8c2f44b52e38e3671746c5e1fe3870b1d0990f5966e5b5bfb7700fb8510f28ed8c09013782871f9e96d22b64bdf11e92adc7169b7db004cbcab011af3680081d3cabd6f4a78e8671ec4c4ae0b766ac2ae10a29f5fb8dd257dac2c535ec2710b98517d000c67f3f9e972934763fba7c7a0926020ab42e6cf70b4029148d6567e1fb5898255ef3bb2b8af0ed0ace668d7747ac8ed18af6ead41c4fd7f40fd4fe678bc671e038253e9065e2dddacaf057502be62b25d6a8587f86ba9752f8b643757f5189ba47ddddb0e5b4f2ef69c41596dc080354abb003f14d98edd478d6eb9cbe12b1c4fc729fdeb0c9d38c31814a7479726957116c0c99b89eff0b42a9a945ba55f990dcea514c4e862774fb985dbd63caaaa96aeb2c91ba26647a5f9e3b7ccd3d3f36fc76e6161154adddc1901472d36b5924d6e4b23554ccf3c20efc6e748de180d60a2b795b031d3cf12b5630191d4a0fba361f196e5ec1388d491acad617960830ea9da10346b4cbe958bae874317b62750856bf9b2e1440b5f6e804f3a0e2b80417ff5b3a71310813847f410549ec5e2ca0ec9b821e437cff65e28d03fd44373bcc47ad7a0d17ce77d12d59d74d2b88c7cb22eac0d79a9a19f6c390a032fd835cea86ace55ec0be090527e1175e5a94000d9d478e83cc249db46146ae96a5ccd9e7148d01f81cf1a0f5e86733de432d888920053faf5041c39180b71d752a878571ba0cc520a31aa877d1be63654166d68a734689e89768d7a359f1cc38b3c1b1494eeec58cf8ecd31c2dfe5955522f2d0db6cc704f53d22d4cd2e41de98619b24c59e96e042ac4bb1e1649fa16641736b06c3eb8a752d68d861b178f251b8e0786708bae051ed19337828cac2e7d6742885aba9a87201a614f4da75aab789cfab3ce2dafd6fcb31491db06410232378e900548c7f5326cf62d104c88485d477839853bfe3c8174c457a9692a892309a5ebe36465620259e7dd7ea31583c78d2ee975e493e87438bc70106c78682ca9be56242f882344d33db2de438396f33e02fecfc57b732a2238e36df927c5a97ee149bfae987c84f47f755be119b7dc5ba05ca5dc547398c806344588e39253a1c4a01ba1fee58e603a4525db7c6437a800db157017bf7772a5a7cbcb14286247f445019bbb458b4b1b410c2049780ea0452ae3b9b9e7e646ce183790a08cd0a2924c87db6856e5c424f86c4f52e641cc4219871862ee1f2f78dfd2b6b2296416e64726f29e0f0100dcf29fd878d67e9e89d1381e0473e01a279153780750585afae59dd0139d32f5a2b4ebc4e7522ac5dc10ab36a2dbf3e1fec199c86e8bed3e57d0b32a1a77e4350aa4f4f9cd8fc1a9469bfc7ae622f94c4cd30620119bb64a82d0b958eb611613f8a8c1fe4787b4dd5f63aec68e686c443633b15f4e39d663a3f7d63a945e13bf0df27931a2f2fba9291523b3948fb7c434093a172611cc7c519d1b8a516e1c3456b4d0a38eaf0ca5875181a97a31b052ec1338d2852470d78ce04e1aafb47b232cba5b846ed22efc7cdefdd7aa36f22e76ad86fc698c845bba5d75fca1ae3bbfe52cb919e904055253a7f5d8bb77597547d2bf33a1d2646c24210a9395651482b827cb6bb094b977df67e279fcc7f54744504272658b690f95933e485f9194f15a556aefdac2ed51d1e28d387b827fd65e0c20901d7d306964718124336a46b03a5f59122e8d2b1ef438072db43718a061411a19b12f8119a45ab26e2087082acd9804cf006c7c6d39041f529841430948a1db9358cd89e6489a7e076730cd8b6864057ce03b7c218844e2fa403ce51dba03fbe9756300851cc55111560ad2ca65cf935804202d785675efc221c140ffa24e462b016e9896aad74974bef32b358cac2924cc4f240658ed10bd308bafa53ed2d838ec472bf9633f6f2d66c7b31a4a293402e2e8540cee2283f9ca16bef4088b077c356791d650f0496936a8102be3ab0e1a93f0d450b2d737e5b447d6301cef28b3408a0ad8c29232bdd0d8311b3494ee43b1b6f55c2bc9ae61f11a9be80250e0b0d45c9858517b61463030ef304abfc55ecc59c8cf2264054de1c0f29052e0bf8b13f56996a8142b96cc5562530177135cd40baf77baf899e11d1f24b70931ea08801837ed078d209fd7d4e030618d926ab72e8ba5e6b3427d6b299a7ff33326dc57e8e831d19f5ce8da3da8c12eb76e469d827d0e15f6237c78e5375cef13ab68dfa54434dcc6d3bbee68af43828c16d821ca64e8187ef51697421fb1f863e2a1b23839a4d9087b4d4c7f0b37576b265c1437411f4dada3567d85efd5356bea5f7e0fbb71f8567c06985fe062572c0fd333c79eac084a01c7f9d20180ff19108a47e1520fe244e331349710a94d4ba9a7a4f10f78bd279fe28caef60f5be2f5d47783433b056d2e16e7ce687e5ea0f345ddee74f97e1fe764040f21e46880674cd5847656765609c7bf31b4148ccd676a9ebc53512688fa559997c47c3663c32b566a5a8a7a20a4d3b5ead147f2dbfa3f30ee51d029eec572163507ddef34d6d480aedf8c67
2
+ f7598e9d7a0b0f2f6ef95a1131565132
@@ -1,2 +1,2 @@
1
- 040ac6a02613580c6476a9de27d20b9f32db8590dd045decd56ef3a89322aaaf3710484bb1f4e54af86ce683da3991d4d176460c0f66888d99f18998b26f1870f5f182bd2acf3bc1c468f4648188b01e6b9c32883f92596ada34ae9a67bf3c968776a5a2c2372755226be2a0f51bde9da9ad2f75cc049fb53dca1c74d48776c5cc80936ad6e5dc190d2cc093e1bdb1b16266ff30c0f036f2857c31daa1a9f545ab108172bce838c86d9118d772ff0cfe4b2003f8cba71014873b6d3b7a4c5cc7e208f1e177a0e62c925bc93d07df42506e97a7fe23fc6f12557e477d32a523991033208c3f2ddd813dc5873280377443c286363fb842fbc1a5bde11f97d6736bb6f60e590b105583307080ea9edc91141fc0140a97eecd87e9e0850170554a324df098b059829287c9facf4c8aa0feef60d5237cac314fe9329d8252e4e23ffdac3e15a8a56817abf267a6786f8b9e21eb319a5607b0a99576e42830aee29b511f52780891d42c39b262e8d8314be2cc1425fe20f3abe381037bf6e431cb6f2db2ee11921c4317558cf4c69bd3e29d46b4d398a239cb2af46be717a8761791ffe3b356b7a91855aea41dd3ed242051e4333ae062607f4d8f74a3dbda4436ae06a4644ea919de2e57a1feb158fb0d4886048378f2fdc3137a3845647097a3acfa5ecfe15b8de724904a7a275c43654b56d1fa75350507e9f596508e07cde93704cddc355578cf067dbf4f774fe6539f6d7acb2ae4ec424a96d6ba274760acd6c23b7856c13d6270c54744b6ee631f3da6
2
- 4fad420c7ffe7cbd9e3261346677a44f
1
+ a1d531b0d1c172bc97931107bd09795ea6170fd411b9e559f998e2eb34a7c39537e94257c69dd81f2cab639b414782e98de6ae57b3e3390e3674da6bbfe80123e3ac15954037dd569a79cb9c19ff5230482ccc4adeeb2ea881589984eb825eac2a644c2393bed3fe02082680af5fe75f3acfeca8959279a500a4a029ff433c55b4d1ffe64ed4f2a46c3bef2fe9aa96031027a881c3333db874c1f53bfd21889379687eb5e35ded821cfaa956da3f60d44f615e77af2d7a687565bda471ef5844413b6021353de7e5cee98fef1181f688d327270eea39239c07246bc685894867d76237e9940b99790ae00fe23fc271e9203eda3083b03c21907d905308d4b4ae7ea4a852e8b95fbe6fe46805fa4fce72794b98cee094cb2259900b5167d4bc5d3fb70688a0b9b867542aa42749c1fb73f6216487fbb4aa759c9ce3df7058255976fc03d0110fdeaefc5e37857f501835fb5f37803b88f04d0f020c1fecdfc2e63632ae1262865d01b0c24df6668999cfcf071e927bfba5dd8513053a72af9ab759b60fb75d61a166e8fbb670f9607738653f308bd6bfa634cfa0102096d4c7f35e4d7b36d0e91e76f8775257b67d787abab43a2fe96642d693fa68eec8f8e8894029e2e18398bd1c0fe13baf93ad3eb392fa5e65b6212e1d1ccae1f6c23e7373de7743047c15f8a0fd0b587da6167ca70a0709eeeb3ef1a314157c56fce568a4880476b55f2b60066bd322896973366468635f32a9eeee9328be8cf1b26a4dbc649d724befc91eec2c66c63cd35d6639
2
+ 4df94e410702abc5c3c68c064fe3b246
@@ -1,2 +1,2 @@
1
- a3d60a75be5bd690f7b26a36d7873c47a354e3c6499ed413267b13fe45d721895c3014d477c481ec561c4af50f162eb75135eed918e143bf55f2a17efee2109f63d9e7f2dfbc8f5c6139de373bf7a7255ddc1886d4bd38ea0493246363cb3accfce7ed26f41fe46548ce04bbb3bf16856ca6737213600787ff69cdf54c44bcdcf1981ae3ea2518aba29a60e20d1670b834bf987f709b6acf9d064c161ea45917de3d33e914aff5461988ec2d2af1fac9975ecf9d37fac2aaf4e3cd7d39b0266503a0f82b98249e7d4a74919bfa5cb2b7574ffd47af3402ca09365fed834125f5e3d00088708be0fdd1cc1189bae2168e009e8fbe52063409efd080158d710dbaec12f84f863c7511a3f09b09a4bbeb965a088f6a8028eecd75b02ad2825023f3d02b52ccfaeb357cbbdbefb438dd8e0e9f712aa5abbef78722c51854c2ed4f894ea867b7ed897db3c664d7855fc00b07fab03c3e90ef1cd52b7d2ba503bf9f63770966b94eb4efb9ee4966d68d6018a14f20c1929750f944fc9c373325fc5d22ede61a2545fff1f238441604f2f0b4a6aa6a8439df438568d16399cca278863e8b4b40337d9c5a1bb0a2acbe3e4fcc3ace04ca62c74fbdc7962c134c81c2952930e12b167363ea340c0443fb6d60814e8e03f0b0528284e6a77c0ed7a2f82477be2bacff9c8f2cee8e2404db9a2213b7998ea841729c7c1eb80ada171a80df0ff36241be83260e542eba4f3592e56dc1cc4fe04036b8d3cfe0780ce7145312d0003663d273878e47f0201cd29829f2035247a482561f4d6144ef646d4a7568e0afedc781bddc6aab61a0c79fdb1a38a58f4497549ff3d25060b53fd9f4d834c6acc59bcdb44cb72c9918416a702d75c7ee93f89ff3283403ac789f806392ca2fb62ffed944af2efbbbcb2cb9a76048aee5ec3b64434b54b28340450499cd04b25275ca6df73d03c92a415f06885ca61da45dad1d42ec985093daedf40bc1437295357c42dda21b534427b4db90ad45b70d848ab0877ab12834f4876fdbb0a0c745a6ab543add2846f620ebb9662694d9fbe28e3b42e2b6fc31df14c7d1ae011d81e32f1873dbcae37c89f568bd5c6bf18f295e0b562d6c4920f3c8a6d44a63ed2ffae320132b247008a84794be2c03cc19f15c3e60294c16686c87458beacf3cb01cf53ebc35817d903be15ab823f50dfd1ec8ea0a6f01e137ede2be5094890ec028c2dd8cfd28f1ffb8bab2794ccf4b1876ba7cb27b968f0154e15d0db6e7fef7f4f1715e966deb5a5514825b04c44974f5859fd2789d8c102c90c491038cae219143cd26767f8520b1fa9d68493aad714cd04aae63d222b73a8a8774d01924def6edb6fdd2db849e1db4c87cc885b551deeee638024c602f17835d54d66d739914386e7757750a195a8e4178899662b116e249bfdcfd39643fc8b4920bec73236e9c92c87ac009f8b7eb1d818a349ebe95df4f0bc44090f65a1376669450e3faa94f04c0413cb147699470ff8be8bcefdb27ed8ac97ac463b9a2094ff1ab2ac8fe20c4a0f86aa92bb2302cf63ef4b1dda29ebcf6e44857866e830ae9479ba4678296c19796a027215877f351c37c949d3f71576c484c6ac5ef45342ea03bfd03e796769516333bd28d123e40a1ff05500b45b4ebc1a71313fc407f9b9bb689bbd915e0e1b83d0a8e765e97d930d4c71fb72ce12273eae8a0fa71b674d94e760e90bfa4e0ce9132e2171a711f77f27add11c1ede7c855f5ca0b645bf9a41c6453b0c62fc599a1a7b3d8401b29c92c61dff9ecf2c185625b5e6271731d60b1df7f801e886f9ecb19dc9036de653a71004582fd596ec2158c6a85331cde2d41183f543048020a2ef0cbcecac200759d0da344eaf9b7a8a714356314b502ee7f6ca161815adeedaaad7bb4365dd14285ac810baa047831d46a5d89650b8e2212f37acc07ca30b8d55e4fe7043ef0de68b342fd73a7243e4dc0c198e00b83ad3994863d6a0ba6b8d42990bd9f88c9f89fa167108af7aed7654eb29cad3722666ec15a9c2e4493b3a3e794db355c39942a6eac2c98c918e1f3ddffe60317ea8e233381af07474f6b28cc095f778599c5a8d23fcce9f94ae385e36ce5fc152066a3fefa19f177cd263eb0d352af078b55ff953906b8a1d10d0645007a50bd20078124bfc5e7fa93c9b54b89df0af156607ac1
2
- 58c024be3154cdae3169ab254676344b
1
+ c7b36321a82ee8ffdfd2b8a51094273f166112d9915703a4accc585c5af5fa5bfd16ab24ddb4daaaa66b72c2d2a8eaa303451d6681c93fe7b7b34135d305415bb8e1c3b3dac08b07149e63f5e7a20cc90b77149a53bd1c90b3ede7dc16b923b517c7c4b049d6b5976f4c8d008b5abebe3b3eef6ada2e3c7a24496e05b18740ef5dc7b3d32c195e1b82d86ee121199e369364c0e78cb9d0bacd3cde242ea1e8a18c2377e7c37f3b16bfd4b4787ce215aa4ffa3475f4fbfb761302cc420a162dbbf0a84ee4fe6994591671866c8d9c351cb50e2934eded9238ce8947cd50799e79f7fd28f0d470b61f165ffe56c703497cf933c6560ed67d432f9144cb030501506d060c4088712215f79d67885865865f1d2598484018c8892c50e8fe8ea8d1c9398c59347bf287a0a100cf021b18f2ecf36f4df774a35518c4880188b3634a6cca55f077cb59aa9914f74525e92f50186b910fc619ffe2e0f7594f9bca33233d06f11a25673dc43902319a193a888ae2f21bc9e9d31170e7853a647aa1fbbac35b95b37f82dbce49640c10be56aa509afc0c2aa96fb291da3e2f3173c037408737809792f7ab20afafff21e09e114590b1fd4fac185eb31e724fce28d70467f3cc32d4505c050a06cfc20c8d6ce69e9289bb681503d5e3fff2052c7ba9fed34d8d12774d0754c803c75693228931a08a5f15cbf2d9bc0f8751bf3d016fa03641f3df31b5face197ae81a269dc45ff3baf3a251222ff55494475195755c48dcefe22e035e82e6835d0261bbfec04c31bb2ebe6973845b24070a01b54967e8527f8975ce57374298d05d72dce1676851f35645f7e131962f42325d5acebab7fbca8ebb45b61af49fc05a015b4bf20c6b0d638806dae39a41c093d627f7a8804e1f2506c17e708b280fa1b019e5b093519252619f827cbfd5103dc051eefbf23caf87e325dc8951422ab1ccbbd791a00c16181e8e37b6bcb32bbda9eb666edf879095540303db6406fac1998dfe5e95f74f5dc8376839aea0fa6161691d57d2d2945feeeb01fb15bc2716921b45ce478bc7f88cba23948aa910116092d6931abd25be94b879f1cb9c5ab5ee07ebc57cf372edd302c92c9d8af59dff28843c48aff52f87580762d69d683197a9e2f14f1f5927d4da5f0f48583aa571298f75848b1fc4db1500b2636684bc2599eca340873652ca2c0fd04ec39070e8050c39e3997e4b6d2850169d4359711154f628d139994ed375c00e099e0f6f53db02d6fd4e5e8654df2ef48d95bfe58e27b24f0a3603c59445343abdcd6272eb3429fa5a56d5992625b998de7aabdc1fd09457fe846ce1f3e05c2a9dd30b490964847e1e97a3cfb3ae6d4c6c6756bdb41195f6bc129e6034ba37ba77695a83d8047f7f4b224190895c49d9f0ec07a166ecf3d18b0cd0d0581c6a9d72d95f9b70196664f9298bdd7eab86229e325e97c879b1c85e5aad4671a8741f20c374f2b3e963ec0fc9ed136010e3c46aca64bf6290c0bc088766e0c7f578b5f708c1fccf950902857c73bffe7c5b9f0ce3f34bd59eb3ad45b9ce1f7b7b151ec78ce5c4c15ca50530677b54c58a9982f26102eb4096b32052b294d0659224d4e238c687819ac6d6aff94de09112d8870c79a215daea67fa1d2ad8504cd17a127a2d576b4a70a7976488cfd3dbb4ee1e3c7f05b2e195bcb8dc756d2f184ba9fe6a66d9349709fae179b54c71f1d2f9e505d07002167b76740af058fcdf8af92ff3a2a727ded2afcb4c01507eaa8a4eb7b4f67867fb3db8068be92806bd274e51a7b42d1eb97ca4434cc09ae747dc62c6bf027c15ee2b505c9ae9cf0542670455655ff6bf8b6a6663062ae5dc5d9e5a58e14727b8d07594f1f62562bf267016d5ecbba3d2488d5900c700e04078cb9d319a7970ea18372d6f1bdfa65eda40b7b4f7f69a5f27f68dfa3f0ab35aeba1f21343a62f703b3c29ea7f91cc97aa30e7ef4873a7d4a57d84f2aff4ad8aaacc6d7317c0caeae1ad1e20b38d5bc5e2b4ede0ff58d1004b022ae8ca7e88ce20c14499efa44501987517d45dba897f68199a2cf379ab7396fc2c0a3eeabc6cb92ce8eb89454d3d51406265eafed9b7751bc88088dc614de6dd6f674bcb343b18bce42581cf0602d55a57b849cf4bb0958b1838c8840c2bbce98a2de815e8f99e377ca92422fd9e8f3c016ad967da
2
+ f8fad64c2a36c68bbee9b2b7b10ed9ec
@@ -0,0 +1,2 @@
1
+ ef61d3782f1f172743023f7514d0a8cf5b7ab91497fa6113f696006ab97ad8319a8a285681dba86663133313e618f44bfb031cb554f859536c39186f9cae9a4ccdb6aa33f71a15c3c28e09f79fe36f196ab9d864e8d737af735a9ed8fb1bd3c00e9883a39d148c97cc6a28217e5530877f5accbcd3c49e26af3014c909dca49006e8f174e3137a5922187041979ecfd49ed3aada0a0acb0504b9479193b87e17307483f88781ab9f68be604b4492cd1a78a91649f37a87b951c6832836cf81a394ba9d993264e2d2d63ea415bc1471f463cd841749acacc2a1864b2168f0083d34fcf66525c6d03a75d490060ecdba8af033e3f71b397b2a4e2b5eb3696c9ba1a365f77fa0c61a212dd50f5295d22306f683e84e45ceaa83a67cb0173f40148deaff3bee34ae9f2d6a746c66952ef51fff4df235f5eac98045a25b14a7117eca47511b26385a5b287cb6bb2f3c75959090426a70d486c7d10e2062ee2cf015c98503b4771d35b45f07a39a0450f5e946b43317db8b914f727bc4edb5da84f89d1eeca0c4746849ca897329f0731f31d49fedf65f4f6e66137b28689eed3eb902b3fef2ad05acd3eea19b05bdd16211ae09bddbc2ef63b4a55b6277f45153d06c7557654249bca05ae16dde4facf5d2e481e2cc1ee0b750de56f3a9041498a687b86eb514282f8ea2d327e4d74c1d3e5f4c54373f7d767e61f8af0ff2d4bb45a6df731b25ad59705841b2f084f5da19a9c249351230eefa788c725e3b129916ba91c99f151a357aa1031393210e57161b0b8641a0b9db9773c458ef5e7bd044d53201ad3764a2acfb10784d97c6c46850f5966679e19b915f3c164fbedc9763c46b95afaa17a2f4706aac659c01ae99a8c9835c948d0e4e985d88243e059b0cccf8a462c4c48ecb3f3855e40d1794f00f37e0bafd514c7be3fc290b68f9cb291518221f58d94bf766f16b3853792b3e47e685729ea2b632201f42b356717c0ca4e24bad06b241fe31aba80e5024377865592543e804700e54552249c4f3d450b37b14555f9b602589e603fdcc18bb4efaa55c3d56a76a1e6f4828853d92695905fd420e76679fd45278041411b7327f642015e25e7613173d972358d35c20c5ea2db351180a48ed657e2561c69fa0978292df9a4518e7cc19ea03feb9435fd24374bdb1f4f45d057f803bb1914e456f25951569ba681d1a336b8f160b985b08f9d72294c1d77da5a0837a50bd66aabddb1374f4557aac7085d7d15cd2d17611752aadc39749dc84a44b2d7dd753610f28f0972bd88ef17c2acf1fac6885a1e4fb811fdcc2d03f423bfc222b79abb936340adeb01ced4a2a43f1211865c3405bdac2915e6e148baf4ddf116aef7c0774e5052ce334eda92bec68b8ff46294159329284882f74a2161d61600e791a274e5a73959d2c7c1e09fa81ce1c52c22eb2a091e245440f631dd3438bc9d68e82e471faaa54f55323d16aaa60b5a1c7b63a8a7f8f5ba265069c7b9f5c4cbcb65513c56df26d167f14ecaab0a5e7eeb81a8edbf93bca41638a38cf4d6500dc9611edf5ad33e8e8561cef8416c461f6d0841ab61a01e7643e080ddede6c889bd1dcd3240f4c5357686775c6716b1f90a7b5174b901be8a94dbb3642ad5341de99b210e62c6e5c1b657336eee7655b0f65e612c483ee426fa508ac184315124fa6ce3ee49c8b3fd5eed16eda1b5248f6271e2a64f3b98fdac7ceac61f64c335f3d68cd802bc64f1eb31088893bcbb9cf681019120aa03a0ee5d30d716bfaf7cd0917340ec9f5fe7c89c0b0421d5e0231716282d414e91602839784f39a38255e9f8f428ed4746376bbc982abb86ad8b492cb9ddf41e0f907627484d5e1319079698f479becf8a6802a0bd1fbc17d108b9ed078ff515990839e65b42e9973e31c9bdb2be7baa0b51d73059b2a36e6ff7505a40ed9e01c42bcb4f9b5124776e844958a82adfc8a08683792679de58947ce29a23c4c497420b199f81adc3936d4e30b51b7c7146d1704de207c9e592b55ab70ce587baa6514f4f9191fa37d4a80703c2b0fe5134ff4ec73c477b6f68ce768184d095ef785be8e98a4c38bf1e73de807f347d3e1c5ae5e4a5c029cb49f877569eb501e55605dcd1ca4a45b9eb159a691cf912d25a387a66f98bf5643fccd93192ecdbc19734fc6d40df99f4516854295b0dd8084ae9a8f35c2148810f5c9c54c3696561297fc54845296294c0f19785a2a57f5bf347a29286c8e2b1d9f8d929d83539497dec9e204989a94b9b18f87c19861c5ee9d7bbabb61cb2e949fce9c2d9a6026ff9c5bedd08b00b3400ed6f362ec8d5a8309be89ecbf7fd113c97eb4d68b820ac4083fb57e2cd3bd4d90a18d7c3a686aa8123c4c39cf491da75124bae4e0b78d03660b6ca64b068512204026c5881736f6df2cb57b9cd310ac4f997f255b7de21cf148570082f0cf843d5b85a93a019f3ede8f6a6035c92cfe6307a9c98de9cdbf5dc26cd31aa662a31fce86f3a9c558110cce2f564aaadd7cfda453f331c9d4a673cbbac7c6cb98dbd1c9a57af557938245c816b3d5cd23edbaf5d80f6573f221041f6d559ebf00fad36aa84116ed139c6d7ab7b068b3d71a816f6ef8d4e79a41879c65a26a00a3d697dd6731e024316e8346717f59ca0510e0dc8ef3d84b7437b9a90cf9d4429226c0a9a283b97143c4327906fdac43b01fb5b73ac595f2ecc5d4dcca734157a0f27e6b2cdcc0181d12f1c519b29e775feecd6a3c3f1c5d8839032174df100ef031e9fc9d4bbd86c7f6b70bafb8ff1e12d36c75144e83d85e43dc559553a77ffcb94fb06ab36e770df960337ac3a3e86f51eeab7e3c39134f2ecf3aa66bc6ccd6e9056831a273bde76b93704dc7aaf19db36d6d08f31c65a87bf2a6a53110e5a56c797b422de12affef544c75a124c08cadd32b80907e7c3a137611eb2c282daf64bf771e55e838e931b1237d2e18796a0098d7d71449060e2fa602828d40e42f77e11946931857da312e5d4c65e7e8defbe746c0e251db839ced6968f086efecb08a818fffb357ebde238c0e5bc75c4a67da407d720ab7847e60f9119bbf36ec5eb5194793092a29d747400e8680672d360df1eb49630775657e1fb054fcdc34ee7e9c3de1d1705a9fddaad388597246645f4b9525604cf9a7868539bfb2d4d9f4dfc9fcfa6975a26b141479dfae5de93192f4a32f5f681f68c8e5a89eb10faa7e6c2fb746cdd0af9cdffb33b6441d60516fdfa687ca0209831cfd39d83e8c616f9dbd70d0e161a206a74ebf61c70ce4ed3e90848258769ce8dc2d85a7a6921c2e5b850c601758af4f2de2127faa1500cf817a49a51309dd53959675fe02fb18c1630062888a262a3fe48399e9e496c64e660aea190f718895815d21c4ae50685b104931547b9ee0
2
+ c834671ccbc9b02f35c8a14e4da33548
@@ -1,2 +1,2 @@
1
- 4b4df5cbfdc28df1a9247594c484d4eba07d05ac322c808323f6bceb665604a702d88709c9ddf38206e5dbd5b4827ff01e7be2c3ffb8a3bc1035ae66ffeb07dc
2
- 2e2f8cb7d8cdeb397d4bc9c67ba9fe6b
1
+ b6d121cb8722c8024dfca7106c0e655f5decd3de74299f5d8b591bc6b9512ac066c6d64308a9f7aecc98581541383c1ef9ebe09b0339b8ded9bd05252a818502
2
+ b64a8a6190c868e3d743e7419992f6fc
package/dist/esm/main.js CHANGED
@@ -1 +1 @@
1
- import*as e from"node:fs";import n from"node:fs";import"node:crypto";import*as o from"node:path";import*as r from"node:os";async function t(e){try{return await n.promises.access(e),!0}catch{return!1}}async function l(e,o){return await new Promise(((o,r)=>{let t="";n.createReadStream(e,{highWaterMark:1048576,encoding:"utf8"}).on("error",(e=>r(e))).on("data",(e=>t+=e)).on("end",(()=>{o(t)}))}))}async function i(e,o,r){return await new Promise(((r,t)=>{n.createWriteStream(e,{encoding:"utf8",highWaterMark:1048576}).on("error",(e=>t(e))).on("finish",(()=>r())).on("open",(function(){this.write(o),this.end()}))}))}function s(n={port:5173,baseUrl:"/api",proxyUrl:"http://192.168.0.193:9999",pluginEnvHelper:!0,pluginScanRoutes:!1,pluginElementPlus:!0,template:!0}){return{name:"vite-plugin-config-helper",async configResolved(s){if(await t(o.resolve(process.cwd(),"./build/config/index.ts")))return;if(await t(o.resolve(process.cwd(),"./build/config/plugins.ts")))return;e.mkdirSync(process.cwd()+"/build/config",{recursive:!0});const p=await t(o.resolve(process.cwd(),"./.env")),c=["VITE_APP_BASE_URL","VITE_APP_PROXY_URL","VITE_APP_PORT"];if(!(c[0]in s.env))if(p){let e=await l(o.resolve(process.cwd(),"./.env"));e+=r.EOL+`VITE_APP_BASE_URL=${n.baseUrl}`,await i(o.resolve(process.cwd(),"./.env"),e)}else await i(o.resolve(process.cwd(),"./.env"),`VITE_APP_BASE_URL=${n.baseUrl}`);if(!(c[1]in s.env))if(await t(o.resolve(process.cwd(),"./.env"))){let e=await l(o.resolve(process.cwd(),"./.env"));e+=r.EOL+`VITE_APP_PROXY_URL=${n.proxyUrl}`,await i(o.resolve(process.cwd(),"./.env"),e)}else await i(o.resolve(process.cwd(),"./.env"),`VITE_APP_PROXY_URL=${n.proxyUrl}`);if(!(c[2]in s.env))if(await t(o.resolve(process.cwd(),"./.env"))){let e=await l(o.resolve(process.cwd(),"./.env"));e+=r.EOL+`VITE_APP_PORT=${n.port}`,await i(o.resolve(process.cwd(),"./.env"),e)}else await i(o.resolve(process.cwd(),"./.env"),`VITE_APP_PORT=${n.port}`);if(!await t(o.resolve(process.cwd(),"./build/config/plugins.ts"))){const e="import type { PluginOption } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport vueJsx from '@vitejs/plugin-vue-jsx'\nimport vueDevTools from 'vite-plugin-vue-devtools'"+r.EOL+(n.pluginScanRoutes?"import scanRoutes from 'vite-plugin-scan-routes'":"")+r.EOL+(n.pluginEnvHelper?"import { envHelper } from 'vite-plugin-env-helper'":"")+r.EOL+r.EOL+r.EOL+"export function createPlugins(): PluginOption[] {\n const vitePlugins: PluginOption[] = [\n vue(),\n vueJsx(),\n vueDevTools()"+(n.pluginScanRoutes?","+r.EOL+" scanRoutes()":"")+(n.pluginEnvHelper?","+r.EOL+" envHelper()"+r.EOL:"")+r.EOL+" ]\n return vitePlugins\n}\n";await i(o.resolve(process.cwd(),"./build/config/plugins.ts"),e)}if(n.pluginElementPlus){if(e.mkdirSync(process.cwd()+"/src/components",{recursive:!0}),e.mkdirSync(process.cwd()+"/src/hooks",{recursive:!0}),e.mkdirSync(process.cwd()+"/src/types",{recursive:!0}),!await t(o.resolve(process.cwd(),"./build/config/ep.ts"))){const e="import type { PluginOption } from 'vite'\nimport AutoImport from 'unplugin-auto-import/vite'\nimport Components from 'unplugin-vue-components/vite'\nimport ElementPlus from 'unplugin-element-plus/vite'\nimport { ElementPlusResolver } from 'unplugin-vue-components/resolvers'"+r.EOL+r.EOL+"export function createElementPlusPlugins(): PluginOption[] {\n const vitePlugins: PluginOption[] = [\n AutoImport({\n dts: 'src/types/auto-imports.d.ts',\n imports: ['vue'],\n resolvers: [\n ElementPlusResolver({\n importStyle: 'css'\n })\n ]\n }),\n Components({\n dts: 'src/types/components.d.ts',\n dirs: [ 'src/components' ],\n resolvers: [\n ElementPlusResolver({\n importStyle: 'css'\n })\n ]\n }),\n ElementPlus({\n useSource: false\n })"+r.EOL+" ]\n return vitePlugins\n}\n";await i(o.resolve(process.cwd(),"./build/config/ep.ts"),e)}const s="import type {\n AutocompleteProps,\n CascaderProps,\n CheckboxGroupProps,\n CheckboxProps,\n ColorPickerProps,\n DatePickerProps,\n InputNumberProps,\n InputProps,\n InputTagProps,\n MentionProps,\n OptionProps,\n RadioButtonProps,\n RadioGroupProps,\n RadioProps,\n RateProps,\n SelectProps,\n SelectV2Props,\n SliderProps,\n SwitchProps,\n TimePickerDefaultProps,\n TimeSelectProps,\n TransferProps,\n TreeProps,\n UploadProps,\n} from 'element-plus'\n\nexport {}\ndeclare global {\n /** ElDialog 主要属性 */\n type EpDialogAttrs = {\n visible: boolean\n title?: string\n width?: string\n height?: string\n center?: boolean\n showClose?: boolean\n closeOnClickModal?: boolean\n closeOnPressEscape?: boolean\n }\n /** ElementPlus 封装的动态表单组件的名称类型 (25个) */\n type FormName =\n | 'ElAutocomplete'\n | 'ElCascader'\n | 'ElCheckboxGroup'\n | 'ElCheckbox'\n | 'ElCheckboxButton'\n | 'ElColorPicker'\n | 'ElDatePicker'\n | 'ElTimePicker'\n | 'ElInput'\n | 'ElInputNumber'\n | 'ElInputTag'\n | 'ElMention'\n | 'ElRadioGroup'\n | 'ElRadio'\n | 'ElRadioButton'\n | 'ElRate'\n | 'ElSelect'\n | 'ElOption'\n | 'ElSelectV2'\n | 'ElSlider'\n | 'ElSwitch'\n | 'ElTimeSelect'\n | 'ElTransfer'\n | 'ElTreeSelect'\n | 'ElUpload'\n /** ElementPlus 封装的动态表单组件的属性类型 (25个) */\n type FormNameProps = {\n ElAutocomplete: AutocompleteProps\n ElCascader: CascaderProps\n ElCheckboxGroup: CheckboxGroupProps\n ElCheckbox: CheckboxProps\n ElCheckboxButton: CheckboxProps\n ElColorPicker: ColorPickerProps\n ElDatePicker: DatePickerProps\n ElTimePicker: TimePickerDefaultProps\n ElInput: InputProps\n ElInputNumber: InputNumberProps\n ElInputTag: InputTagProps\n ElMention: MentionProps\n ElRadioGroup: RadioGroupProps\n ElRadio: RadioProps\n ElRadioButton: RadioButtonProps\n ElRate: RateProps\n ElSelect: SelectProps\n ElOption: OptionProps\n ElSelectV2: SelectV2Props\n ElSlider: SliderProps\n ElSwitch: SwitchProps\n ElTimeSelect: TimeSelectProps\n ElTransfer: TransferProps\n ElTreeSelect: TreeProps & SelectProps\n ElUpload: UploadProps\n }\n /** ElementPlus 封装动态表单组件类型 */\n type FormBuilderItem<T> = {\n type: FormName\n label?: string\n prop?: keyof T\n span?: number\n props?: FormNameProps[FormName]\n value?: string\n }\n}\n";await i(o.resolve(process.cwd(),"./src/types/ep.d.ts"),s),n.template&&await l(o.resolve(process.cwd(),"./.env"));const p='<script lang="ts">\nimport { defineComponent } from \'vue\'\n\nexport type FormBuilderInstance = InstanceType<ReturnType<typeof defineComponent>>\n<\/script>\n<script setup lang="ts" generic="T extends Record<string, unknown>">\nimport {\n ElAutocomplete,\n ElCascader,\n ElCheckboxGroup,\n ElCheckbox,\n ElCheckboxButton,\n ElColorPicker,\n ElDatePicker,\n ElTimePicker,\n ElInput,\n ElInputNumber,\n ElInputTag,\n ElMention,\n ElRadioGroup,\n ElRadio,\n ElRadioButton,\n ElRate,\n ElSelect,\n ElOption,\n ElSelectV2,\n ElSlider,\n ElSwitch,\n ElTimeSelect,\n ElTransfer,\n ElTreeSelect,\n ElUpload,\n type FormInstance,\n type FormRules,\n type FormValidateCallback,\n} from \'element-plus\'\nimport { useTemplateRef } from \'vue\'\n\ndefineProps<{\n items: FormBuilderItem<T>[]\n rules: FormRules<T>\n}>()\n\nconst form = defineModel<T>({\n required: true,\n default: {} as T,\n})\n\nconst instance = useTemplateRef<FormInstance>(\'formRef\')\n\nconst compMaps = {\n ElAutocomplete,\n ElCascader,\n ElCheckboxGroup,\n ElCheckbox,\n ElCheckboxButton,\n ElColorPicker,\n ElDatePicker,\n ElTimePicker,\n ElInput,\n ElInputNumber,\n ElInputTag,\n ElMention,\n ElRadioGroup,\n ElRadio,\n ElRadioButton,\n ElRate,\n ElSelect,\n ElOption,\n ElSelectV2,\n ElSlider,\n ElSwitch,\n ElTimeSelect,\n ElTransfer,\n ElTreeSelect,\n ElUpload,\n}\n\nfunction getComponent(type: unknown) {\n if (typeof type === \'string\') {\n return compMaps[type as FormName]\n }\n return type\n}\n\nfunction validate(callback?: FormValidateCallback) {\n instance.value?.validate(callback)\n}\n\nfunction resetFields() {\n instance.value?.resetFields()\n}\n\ndefineExpose({\n validate,\n resetFields,\n})\n<\/script>\n\n<template>\n <el-form :model="form" :rules="rules" label-width="auto" ref="formRef">\n <el-row>\n <el-col\n :xs="item.span || 24"\n :sm="item.span || 24"\n :md="item.span || 24"\n :lg="item.span || 24"\n :xl="item.span || 24"\n v-for="item in items"\n :key="item.prop"\n >\n <el-form-item style="padding: 0 30px;" :prop="item.prop as string" :label="item.label">\n <component :is="getComponent(item.type)" v-bind="item.props" v-model="form[item.prop!]">\n </component>\n </el-form-item>\n </el-col>\n </el-row>\n </el-form>\n</template>\n\n<style scoped></style>\n';await i(o.resolve(process.cwd(),"./src/components/FormBuilder.vue"),p)}if(!await t(o.resolve(process.cwd(),"./src/hooks/color.ts"))){const e="import { onBeforeMount } from 'vue'\n\nfunction lightColor(colorWithHash: string, percentFrom1To100: number) {\n const rgb = [1, 3, 5].map((diff) => parseInt(colorWithHash.substring(diff, diff + 2), 16))\n const lightRgb = rgb.map((value) =>\n parseInt(String(value + (255 - value) * (percentFrom1To100 / 100))),\n )\n return '#' + lightRgb.map((v) => v.toString(16).padStart(2, '0')).join('')\n}\n\nfunction darkColor(colorWithHash: string, percentFrom1To100: number) {\n const rgb = [1, 3, 5].map((diff) => parseInt(colorWithHash.substring(diff, diff + 2), 16))\n const darkRgb = rgb.map((value) => parseInt(String(value * (1 - percentFrom1To100 / 100))))\n return '#' + darkRgb.map((v) => v.toString(16).padStart(2, '0')).join('')\n}\n\nfunction updateThemeColor(colorWithHash: string = '#409eff') {\n const colorRegex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/\n if (!colorRegex.test(colorWithHash)) {\n console.error('color must be a hex string')\n return\n }\n if (colorWithHash.length === 4) {\n colorWithHash = ['#']\n .concat(\n colorWithHash\n .slice(1)\n .split('')\n .map((item) => item + item),\n )\n .join('')\n }\n const el = document.documentElement\n const colorNames = [\n '--el-color-primary',\n '--el-color-primary-light-3',\n '--el-color-primary-light-5',\n '--el-color-primary-light-7',\n '--el-color-primary-light-8',\n '--el-color-primary-light-9',\n '--el-color-primary-dark-2',\n ]\n for (const item of colorNames) {\n const tail = item.slice(-1)\n if (tail === 'y') {\n el.style.setProperty(item, colorWithHash)\n } else if (tail === '2') {\n el.style.setProperty(item, darkColor(colorWithHash, Number(tail + '0')))\n } else {\n el.style.setProperty(item, lightColor(colorWithHash, Number(tail + '0')))\n }\n }\n}\n\nexport function useElementPlusTheme(colorWithHash?: string) {\n onBeforeMount(() => {\n updateThemeColor(colorWithHash)\n })\n return { updateThemeColor }\n}\n";await i(o.resolve(process.cwd(),"./src/hooks/color.ts"),e)}if(!await t(o.resolve(process.cwd(),"./build/config/index.ts"))){const e="import {"+r.EOL+" defineConfig as defineAppConfig,"+r.EOL+" mergeConfig,"+r.EOL+" loadEnv,"+r.EOL+" type UserConfig,"+r.EOL+" type ConfigEnv,"+r.EOL+" type PluginOption"+r.EOL+"} from 'vite'"+r.EOL+"import { createPlugins } from './plugins'"+(n.pluginElementPlus?r.EOL+"import { createElementPlusPlugins } from './ep'"+r.EOL:r.EOL)+"import { fileURLToPath, URL } from 'node:url'"+r.EOL+r.EOL+"interface ConfigOptions {"+r.EOL+" overrides?: UserConfig"+r.EOL+"}"+r.EOL+r.EOL+"export function defineConfig<T extends ConfigOptions>(options: T) {"+r.EOL+" const { overrides } = options"+r.EOL+" return defineAppConfig("+r.EOL+" (config: ConfigEnv): UserConfig => {"+r.EOL+" const prefixes = ['VITE_']"+r.EOL+" const env = loadEnv(config.mode, process.cwd(), prefixes)"+r.EOL+" const commonConfig: UserConfig = {"+r.EOL+" envPrefix: prefixes,"+r.EOL+" root: process.cwd(),"+r.EOL+" base: '/',"+r.EOL+" publicDir: 'public',"+r.EOL+" server: {"+r.EOL+" host: '0.0.0.0',"+r.EOL+" port: Number(env.VITE_APP_PORT),"+r.EOL+" proxy: {"+r.EOL+" [env.VITE_APP_BASE_URL]: {"+r.EOL+" target: env.VITE_APP_PROXY_URL,"+r.EOL+" changeOrigin: true,"+r.EOL+" rewrite: (path) => path.replace(new RegExp(`^${env.VITE_APP_BASE_URL}`), '')"+r.EOL+" }"+r.EOL+" }"+r.EOL+" },"+r.EOL+" resolve: {"+r.EOL+" alias: {"+r.EOL+" '@': fileURLToPath(new URL('../../src', import.meta.url))"+r.EOL+" }"+r.EOL+" },"+r.EOL+" plugins: ["+r.EOL+" ...createPlugins()"+(n.pluginElementPlus?","+r.EOL+" ...createElementPlusPlugins()"+r.EOL:r.EOL)+" ]"+r.EOL+" }"+r.EOL+" return overrides ? mergeConfig(commonConfig, overrides) : commonConfig"+r.EOL+" }"+r.EOL+" )"+r.EOL+"}"+r.EOL;await i(o.resolve(process.cwd(),"./build/config/index.ts"),e)}const a="import { defineConfig } from './build/config'"+r.EOL+r.EOL+"export default defineConfig({"+r.EOL+" overrides: {"+r.EOL+r.EOL+" }"+r.EOL+"})"+r.EOL;await i(o.resolve(process.cwd(),"./vite.config.ts"),a);const u=await l(o.resolve(process.cwd(),"./package.json"));let m="";n.pluginEnvHelper&&n.pluginScanRoutes?m=`"vite-plugin-env-helper": "^1.1.0",${r.EOL} "vite-plugin-scan-routes": "1.0.2",${r.EOL}`:n.pluginScanRoutes?m=`"vite-plugin-scan-routes": "1.0.2",${r.EOL}`:n.pluginEnvHelper&&(m=`"vite-plugin-env-helper": "^1.1.0",${r.EOL}`),n.pluginElementPlus&&(m+=` "unplugin-auto-import": "^20.2.0",${r.EOL} "unplugin-vue-components": "^29.1.0",${r.EOL} "unplugin-element-plus": "^0.10.0",${r.EOL}`);const E=u.replace(/"vite-plugin-config-helper":\s*"[^"]*"\s*,?\n?/g,m),d=n.pluginElementPlus?E.replace(/"dependencies": \s*\{/g,'"dependencies": {'+r.EOL+' "element-plus": "^2.11.4",'):E;await i(o.resolve(process.cwd(),"./package.json"),d)}}}export{s as configHelper};
1
+ import*as e from"node:fs";import s from"node:fs";import*as o from"node:crypto";import*as i from"node:os";import t from"node:os";import*as r from"node:path";async function n(e){try{return await s.promises.access(e),!0}catch{return!1}}async function c(e,o){return await new Promise(((o,i)=>{let t="";s.createReadStream(e,{highWaterMark:1048576,encoding:"utf8"}).on("error",(e=>i(e))).on("data",(e=>t+=e)).on("end",(()=>{o(t)}))}))}async function l(e,o,i){return await new Promise(((i,t)=>{s.createWriteStream(e,{encoding:"utf8",highWaterMark:1048576}).on("error",(e=>t(e))).on("finish",(()=>i())).on("open",(function(){this.write(o),this.end()}))}))}function p(e){const s=e.split(t.EOL),i={data:s[0],iv:s[1]},{iv:r,data:n}=i,c=o.scryptSync("unique password","Just call me!",32),l=o.createDecipheriv("aes-256-cbc",c,r);let p=l.update(n,"hex","utf8");return p+=l.final("utf8"),p}async function a(e,s,o){if(await n(r.resolve(process.cwd(),"./.env"))){if(!(e in o.env)){let o=await c(r.resolve(process.cwd(),"./.env"));o+=i.EOL+`${e}=${s}`,await l(r.resolve(process.cwd(),"./.env"),o)}}else await l(r.resolve(process.cwd(),"./.env"),`${e}=${s}`)}function d(s={port:5173,baseUrl:"/api",proxyUrl:"http://192.168.0.193:9999",pluginEnvHelper:!0,pluginScanRoutes:!1,pluginElementPlus:!0,template:!0}){return{name:"vite-plugin-config-helper",async configResolved(o){if(await n(r.resolve(process.cwd(),"./build/config/index.ts")))return;if(await n(r.resolve(process.cwd(),"./build/config/plugins.ts")))return;e.mkdirSync(process.cwd()+"/build/config",{recursive:!0});const t=[["VITE_APP_BASE_URL",s.baseUrl],["VITE_APP_PROXY_URL",s.proxyUrl],["VITE_APP_PORT",s.port]];for(const e of t)await a(e[0],e[1],o);const d=await c(r.resolve(process.cwd(),"node_modules/vite-plugin-config-helper/dist/esm/assets/build/plugins.ts")),u=await c(r.resolve(process.cwd(),"node_modules/vite-plugin-config-helper/dist/esm/assets/build/plugins-env.ts")),w=await c(r.resolve(process.cwd(),"node_modules/vite-plugin-config-helper/dist/esm/assets/build/plugins-routes.ts")),v=await c(r.resolve(process.cwd(),"node_modules/vite-plugin-config-helper/dist/esm/assets/build/plugins-env-routes.ts")),g=await c(r.resolve(process.cwd(),"node_modules/vite-plugin-config-helper/dist/esm/assets/build/vite.config.ts")),m=await c(r.resolve(process.cwd(),"node_modules/vite-plugin-config-helper/dist/esm/assets/build/ep.ts")),f=await c(r.resolve(process.cwd(),"node_modules/vite-plugin-config-helper/dist/esm/assets/build/index.ts")),h=await c(r.resolve(process.cwd(),"node_modules/vite-plugin-config-helper/dist/esm/assets/build/index-ep.ts")),E=await c(r.resolve(process.cwd(),"node_modules/vite-plugin-config-helper/dist/esm/assets/types/ep.d.ts")),b=await c(r.resolve(process.cwd(),"node_modules/vite-plugin-config-helper/dist/esm/assets/types/locale.d.ts")),y=await c(r.resolve(process.cwd(),"node_modules/vite-plugin-config-helper/dist/esm/assets/components/FormBuilder.vue")),_=await c(r.resolve(process.cwd(),"node_modules/vite-plugin-config-helper/dist/esm/assets/hooks/color.ts")),L=await c(r.resolve(process.cwd(),"node_modules/vite-plugin-config-helper/dist/esm/assets/hooks/locale.ts")),O=await c(r.resolve(process.cwd(),"node_modules/vite-plugin-config-helper/dist/esm/assets/plugins/i18n.ts"));s.pluginEnvHelper&&s.pluginScanRoutes?await l(r.resolve(process.cwd(),"./build/config/plugins.ts"),p(v)):s.pluginEnvHelper?await l(r.resolve(process.cwd(),"./build/config/plugins.ts"),p(u)):s.pluginScanRoutes?await l(r.resolve(process.cwd(),"./build/config/plugins.ts"),p(w)):await l(r.resolve(process.cwd(),"./build/config/plugins.ts"),p(d)),s.pluginElementPlus?(e.mkdirSync(process.cwd()+"/src/components",{recursive:!0}),e.mkdirSync(process.cwd()+"/src/hooks",{recursive:!0}),e.mkdirSync(process.cwd()+"/src/types",{recursive:!0}),await n(r.resolve(process.cwd(),"./build/config/ep.ts"))||await l(r.resolve(process.cwd(),"./build/config/ep.ts"),p(m)),await n(r.resolve(process.cwd(),"./src/types/ep.d.ts"))||await l(r.resolve(process.cwd(),"./src/types/ep.d.ts"),p(E)),await n(r.resolve(process.cwd(),"./src/types/locale.d.ts"))||await l(r.resolve(process.cwd(),"./src/types/locale.d.ts"),p(b)),await n(r.resolve(process.cwd(),"./src/plugins/i18n.ts"))||await l(r.resolve(process.cwd(),"./src/plugins/i18n.ts"),p(O)),await n(r.resolve(process.cwd(),"./src/components/FormBuilder.vue"))||await l(r.resolve(process.cwd(),"./src/components/FormBuilder.vue"),p(y)),await n(r.resolve(process.cwd(),"./src/hooks/color.ts"))||await l(r.resolve(process.cwd(),"./src/hooks/color.ts"),p(_)),await n(r.resolve(process.cwd(),"./src/hooks/locale.ts"))||await l(r.resolve(process.cwd(),"./src/hooks/locale.ts"),p(L)),await n(r.resolve(process.cwd(),"./build/config/index.ts"))||await l(r.resolve(process.cwd(),"./build/config/index.ts"),p(h))):await n(r.resolve(process.cwd(),"./build/config/index.ts"))||await l(r.resolve(process.cwd(),"./build/config/index.ts"),p(f)),await l(r.resolve(process.cwd(),"./vite.config.ts"),p(g));const k=await c(r.resolve(process.cwd(),"./package.json"));let P="";s.pluginEnvHelper&&s.pluginScanRoutes?P=`"vite-plugin-env-helper": "^1.1.0",${i.EOL} "vite-plugin-scan-routes": "1.0.2",${i.EOL}`:s.pluginScanRoutes?P=`"vite-plugin-scan-routes": "1.0.2",${i.EOL}`:s.pluginEnvHelper&&(P=`"vite-plugin-env-helper": "^1.1.0",${i.EOL}`),s.pluginElementPlus&&(P+=` "vite-svg-loader": "^5.1.0",${i.EOL} "@tailwindcss/vite": "^4.1.17",${i.EOL} "@intlify/unplugin-vue-i18n": "^11.0.1",${i.EOL} "unplugin-auto-import": "^20.2.0",${i.EOL} "unplugin-vue-components": "^30.0.0",${i.EOL} "unplugin-element-plus": "^0.11.1",${i.EOL}`);const $=k.replace(/"vite-plugin-config-helper":\s*"[^"]*"\s*,?\n?/g,P),S=s.pluginElementPlus?$.replace(/"dependencies": \s*\{/g,'"dependencies": {'+i.EOL+' "element-plus": "^2.11.8",'+i.EOL+' "vue-i18n": "^11.1.12",'):$;await l(r.resolve(process.cwd(),"./package.json"),S)}}}export{d as configHelper};
@@ -0,0 +1,2 @@
1
+ import type { PluginOption } from 'vite';
2
+ export declare function createElementPlusPlugins(): PluginOption[];
@@ -0,0 +1,6 @@
1
+ import { type UserConfig } from 'vite';
2
+ interface ConfigOptions {
3
+ overrides?: UserConfig;
4
+ }
5
+ export declare function defineConfig<T extends ConfigOptions>(options: T): import("vite").UserConfigFnObject;
6
+ export {};
@@ -0,0 +1,6 @@
1
+ import { type UserConfig } from 'vite';
2
+ interface ConfigOptions {
3
+ overrides?: UserConfig;
4
+ }
5
+ export declare function defineConfig<T extends ConfigOptions>(options: T): import("vite").UserConfigFnObject;
6
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { PluginOption } from 'vite';
2
+ export declare function createPlugins(): PluginOption[];
@@ -0,0 +1,2 @@
1
+ import type { PluginOption } from 'vite';
2
+ export declare function createPlugins(): PluginOption[];
@@ -0,0 +1,2 @@
1
+ import type { PluginOption } from 'vite';
2
+ export declare function createPlugins(): PluginOption[];
@@ -0,0 +1,2 @@
1
+ import type { PluginOption } from 'vite';
2
+ export declare function createPlugins(): PluginOption[];
@@ -0,0 +1,2 @@
1
+ declare const _default: any;
2
+ export default _default;
@@ -5,4 +5,4 @@ export declare function encrypt(data: string): {
5
5
  iv: Buffer<ArrayBufferLike>;
6
6
  data: string;
7
7
  };
8
- export declare function decrypt(encryptedResult: any): string;
8
+ export declare function decrypt(encryptedResultWithEOL: string): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plugin-config-helper",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "private": false,
5
5
  "description": "把 vite.config.ts 配置进行逻辑拆分,并整合一些常用插件或代码,如 element-plus 自动导入组件样式配置的相关插件",
6
6
  "keywords": [
@@ -16,7 +16,8 @@
16
16
  "files": [
17
17
  "dist/**/*.d.ts",
18
18
  "dist/**/*.js",
19
- "dist/**/*.ts"
19
+ "dist/**/*.ts",
20
+ "dist/**/*.vue"
20
21
  ],
21
22
  "exports": {
22
23
  ".": {