vite-plugin-config-helper 0.1.9 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ 1d0f1f06351dd5361cd8b56a85f3d28aab87746b13ef4a34db7cb760a1b15a79b5266640ceb844f7de193ca2179bdafdaf64bc9ad538830989fbbf129f1e5022ae88981d95a029225d9f3e9a469741af74788a3a41151888f8e864cb9f2df8d6ca01d84f61f3499489e967a80dcd5f56e606dda0dfd90cbd0993f0ff2eacd669c33b98f11d362f3d422a3537433d581184e8bedb9ee26f1e80566c99e3454aea0d9eddd743099fea0d14d7b61979b56515a9cb7ce53841820755198602015ae71f46f01ab8217783f00684eab69df50a3d8401749d38482fd171e269d25f0fc1828457dde668ea005879fe15b9f971f14ee99c313acb0a42f8d54c5b1f3debdbefda950437c3f2aca324c872a5bcf602cf19a3c1db24275ff6a7f9530a4ccc0cc0cc22e7417c4301f2c5cb9c08145ad73763a62746a16b796ce54538516d1d0791b90fcfd267c58bf4cb5615be7ceedf11cbd131a0f27a0ad1af790e846c11aec5722f6cfd57e13a42012c3fe77426a032f822051e30ad98b20fd2cbc749b20c950dd3649e20da8743063d8230b72358e41fe6bed00df8e95e47fabd4731832a51b10299eb299f99f9cde06cebc513decfdcae365f504ff70722e8b3ae9db0064f286e7555b130d57dc33ccb52e7446aa1995f555b3a8fc1764f92c48d069ea3e8412a93e8f7315959ed5f64798fc396598e2d82f420e4ae836f19bed406cbd3f1476dca526a25534e529dbf1bbe711bbd13ec7abfec907cd321d1dff51efda9c1372fb46246187107e5ddd6ddf8e99b4b354382f5cda98a36d991fc6b9f331158f2d1c8ebe2be0a9555edb6ceffdf7fe996f0ad9b7b62fb6051d2650e0dd3309f1f20dfd560ca65ffe8e0dd4d25f13e5560079982f5667037dbd0a5def34b3c8d612ad5a3a1584fcf7237b07516487314357e5c5b8ae45c0f3b3881874acc90b419149ef0e95d9ad3f5f557c4b5e4906ae6c0246ee8b66ab273d6e83ef347bc9143aa83d91ff63ecdb433b6090c5ae85e4127a4b5533835d763447cd0eb76e355fc2b17c7d52934fde6f8379d34e9dbeae07dbc5c154976e47281df65e499f05aa750aa37b3fa8bf486ee2c694396992efcabd89e72c619122a438ba9c7c0d3523d3ce50dd5f1bafe631fdc554499fe845358fbac79e1cf823d875eb3f395570a65ea7d73f76aa5b6b35f47b87323adaa3d6475684c1b598090f1ec514228091417a06705396eedd3ad116a5fe67e306580ec2976807c702107fca3f1093ff308c96649bb8cee4a053216ce500524da8763cea0b8dcef483dc404f6775445333bc71f49a216527d911725b903fa54e4dda7fb8343bfae3a5ceb9e0d8c8dfc115699f539d10d195a1dfa6c6cce69c399736f21ab3f5c436f848e9710a5172929fd3d705e0db5a093445d45eb5a2b9c9b63f533ac65e717e6dbfe3e42b2299f7d4a21b3d0598967372416fa036b69a0433a8651adf02628068bfbd03034eaceef7bfa13100f6d6c68d5fcc2d65de767377f7fd2c03143fe89aebf2bab7c8463e59a1b337c915e1c285faafaf03fb02ecdd398d3266eef0fc385a1f6e6402246dcc810e475f2d6eacb3db728f50b7e86f5353d2e41a4d28a65922e1c019b7fc4cca2ea7499aac520dccd8a46eb151f56eff2d6b5ab98da9eb6f0dbedad0def6124a35adad65512be2fcae0dfb439064da8684f3b12c7759d11ee07df125e199335db17927ead502f3c5b136cc17e3ad0aa67e332d1544dabf18b585a1c198f0445c873c1713c561a108ff1011b3618734d3401b5b8a7860e82bfc9523035ed2d04d835a6e992a3026c22eeeaa5feefe271a0b25ea6f264fb39fb63e4afd7aa9024e42cbf12b00519f6056c5fb2da2f528b7c9cd4cdbab3310efcc6d6012bfd93a9c979a7742bbd2cc57ed11d4d6f6665db728101c4ea08cfc310dc03ba76625be927b3344c3311deac2b5e20cb8e43ae8add47ac5dc06e32b2e7a348f86301ddf3c027b3df543898ee0805cac69113324440c688d5e7e2a736d9a7c3556b5fc9286dda14441c11f87ae4f297d58a4b70b88686d3231db3cba6fc1e7d0c2f619f2061eb36c528040aa0d702eeb141014d5ab8a1f325fae60acbfbdca404fcc9e89e15dde9fb4fb0586d25bc9068ddfb5fa45e278b589ccf005b53ba49384139d326bae3280677e0a338c006f1d9c3112584d385d3c612c9fb15937685c9e9a9fa0783d1b0d91a63be3e03b6cd1c1708b48305b6dcd2a921936655664b015f630d7ddf13db77b0cabe841b353d98b8eeaf873ab82784eff9c16b0b688337f061d976f21fe4f73835948a52ca37c20a54afe9d7f8d6a6ca06279b194db5d24977c3c1a0ae400192a2386017915ee81bbc9c8d06f2ed096ecd06571016ead421b0228cd3815854e66fd2742f10e8e23a7b2f163d972b045e6d8fe04078e5e0674cfd6354cb3ddd127c4ee7a6a0c6cfe204b7424118be9519058669f3f6429c91acef26047f83f73a251a7c2f5801c43f97fd90782ca6927814de63e24e60137513c7adf211130c0cf05d6f32f6241cc47e6f242801f5aa2dcc7209436996e1cae5cb71dd8eac0518b35a46af6eab19297fc230ce4bc7373a36351c792b8c31404931cd29e22df0f3a6d76f686c9fe5162db4d4d252953caa1e7104d72139aaaeff0a2c9af2a186baafec0bd6cdf8fdf16817cc35cc28a232d740579404062ca40307e2436c62ff501eb9304fe4387949792c5e6860d63cba7dcb976479ebb315fac909559732b1157dbe3735cfa27aba7ba81e5b669762f1e1d80aa68129781b872012
2
+ ad45659ed7d2b5b805e7235eb71c9447
@@ -0,0 +1,2 @@
1
+ 040ac6a02613580c6476a9de27d20b9f32db8590dd045decd56ef3a89322aaaf3710484bb1f4e54af86ce683da3991d4d176460c0f66888d99f18998b26f1870f5f182bd2acf3bc1c468f4648188b01e6b9c32883f92596ada34ae9a67bf3c968776a5a2c2372755226be2a0f51bde9da9ad2f75cc049fb53dca1c74d48776c5cc80936ad6e5dc190d2cc093e1bdb1b16266ff30c0f036f2857c31daa1a9f545ab108172bce838c86d9118d772ff0cfe4b2003f8cba71014873b6d3b7a4c5cc7e208f1e177a0e62c925bc93d07df42506e97a7fe23fc6f12557e477d32a523991033208c3f2ddd813dc5873280377443c286363fb842fbc1a5bde11f97d6736bb6f60e590b105583307080ea9edc91141fc0140a97eecd87e9e0850170554a324df098b059829287c9facf4c8aa0feef60d5237cac314fe9329d8252e4e23ffdac3e15a8a56817abf267a6786f8b9e21eb319a5607b0a99576e42830aee29b511f52780891d42c39b262e8d8314be2cc1425fe20f3abe381037bf6e431cb6f2db2ee11921c4317558cf4c69bd3e29d46b4d398a239cb2af46be717a8761791ffe3b356b7a91855aea41dd3ed242051e4333ae062607f4d8f74a3dbda4436ae06a4644ea919de2e57a1feb158fb0d4886048378f2fdc3137a3845647097a3acfa5ecfe15b8de724904a7a275c43654b56d1fa75350507e9f596508e07cde93704cddc355578cf067dbf4f774fe6539f6d7acb2ae4ec424a96d6ba274760acd6c23b7856c13d6270c54744b6ee631f3da6
2
+ 4fad420c7ffe7cbd9e3261346677a44f
@@ -0,0 +1,2 @@
1
+ a3d60a75be5bd690f7b26a36d7873c47a354e3c6499ed413267b13fe45d721895c3014d477c481ec561c4af50f162eb75135eed918e143bf55f2a17efee2109f63d9e7f2dfbc8f5c6139de373bf7a7255ddc1886d4bd38ea0493246363cb3accfce7ed26f41fe46548ce04bbb3bf16856ca6737213600787ff69cdf54c44bcdcf1981ae3ea2518aba29a60e20d1670b834bf987f709b6acf9d064c161ea45917de3d33e914aff5461988ec2d2af1fac9975ecf9d37fac2aaf4e3cd7d39b0266503a0f82b98249e7d4a74919bfa5cb2b7574ffd47af3402ca09365fed834125f5e3d00088708be0fdd1cc1189bae2168e009e8fbe52063409efd080158d710dbaec12f84f863c7511a3f09b09a4bbeb965a088f6a8028eecd75b02ad2825023f3d02b52ccfaeb357cbbdbefb438dd8e0e9f712aa5abbef78722c51854c2ed4f894ea867b7ed897db3c664d7855fc00b07fab03c3e90ef1cd52b7d2ba503bf9f63770966b94eb4efb9ee4966d68d6018a14f20c1929750f944fc9c373325fc5d22ede61a2545fff1f238441604f2f0b4a6aa6a8439df438568d16399cca278863e8b4b40337d9c5a1bb0a2acbe3e4fcc3ace04ca62c74fbdc7962c134c81c2952930e12b167363ea340c0443fb6d60814e8e03f0b0528284e6a77c0ed7a2f82477be2bacff9c8f2cee8e2404db9a2213b7998ea841729c7c1eb80ada171a80df0ff36241be83260e542eba4f3592e56dc1cc4fe04036b8d3cfe0780ce7145312d0003663d273878e47f0201cd29829f2035247a482561f4d6144ef646d4a7568e0afedc781bddc6aab61a0c79fdb1a38a58f4497549ff3d25060b53fd9f4d834c6acc59bcdb44cb72c9918416a702d75c7ee93f89ff3283403ac789f806392ca2fb62ffed944af2efbbbcb2cb9a76048aee5ec3b64434b54b28340450499cd04b25275ca6df73d03c92a415f06885ca61da45dad1d42ec985093daedf40bc1437295357c42dda21b534427b4db90ad45b70d848ab0877ab12834f4876fdbb0a0c745a6ab543add2846f620ebb9662694d9fbe28e3b42e2b6fc31df14c7d1ae011d81e32f1873dbcae37c89f568bd5c6bf18f295e0b562d6c4920f3c8a6d44a63ed2ffae320132b247008a84794be2c03cc19f15c3e60294c16686c87458beacf3cb01cf53ebc35817d903be15ab823f50dfd1ec8ea0a6f01e137ede2be5094890ec028c2dd8cfd28f1ffb8bab2794ccf4b1876ba7cb27b968f0154e15d0db6e7fef7f4f1715e966deb5a5514825b04c44974f5859fd2789d8c102c90c491038cae219143cd26767f8520b1fa9d68493aad714cd04aae63d222b73a8a8774d01924def6edb6fdd2db849e1db4c87cc885b551deeee638024c602f17835d54d66d739914386e7757750a195a8e4178899662b116e249bfdcfd39643fc8b4920bec73236e9c92c87ac009f8b7eb1d818a349ebe95df4f0bc44090f65a1376669450e3faa94f04c0413cb147699470ff8be8bcefdb27ed8ac97ac463b9a2094ff1ab2ac8fe20c4a0f86aa92bb2302cf63ef4b1dda29ebcf6e44857866e830ae9479ba4678296c19796a027215877f351c37c949d3f71576c484c6ac5ef45342ea03bfd03e796769516333bd28d123e40a1ff05500b45b4ebc1a71313fc407f9b9bb689bbd915e0e1b83d0a8e765e97d930d4c71fb72ce12273eae8a0fa71b674d94e760e90bfa4e0ce9132e2171a711f77f27add11c1ede7c855f5ca0b645bf9a41c6453b0c62fc599a1a7b3d8401b29c92c61dff9ecf2c185625b5e6271731d60b1df7f801e886f9ecb19dc9036de653a71004582fd596ec2158c6a85331cde2d41183f543048020a2ef0cbcecac200759d0da344eaf9b7a8a714356314b502ee7f6ca161815adeedaaad7bb4365dd14285ac810baa047831d46a5d89650b8e2212f37acc07ca30b8d55e4fe7043ef0de68b342fd73a7243e4dc0c198e00b83ad3994863d6a0ba6b8d42990bd9f88c9f89fa167108af7aed7654eb29cad3722666ec15a9c2e4493b3a3e794db355c39942a6eac2c98c918e1f3ddffe60317ea8e233381af07474f6b28cc095f778599c5a8d23fcce9f94ae385e36ce5fc152066a3fefa19f177cd263eb0d352af078b55ff953906b8a1d10d0645007a50bd20078124bfc5e7fa93c9b54b89df0af156607ac1
2
+ 58c024be3154cdae3169ab254676344b
@@ -0,0 +1,2 @@
1
+ 4b4df5cbfdc28df1a9247594c484d4eba07d05ac322c808323f6bceb665604a702d88709c9ddf38206e5dbd5b4827ff01e7be2c3ffb8a3bc1035ae66ffeb07dc
2
+ 2e2f8cb7d8cdeb397d4bc9c67ba9fe6b
package/dist/esm/main.js CHANGED
@@ -1 +1 @@
1
- import*as e from"node:fs";import n from"node:fs";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 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,3 +1,8 @@
1
1
  export declare function fileExists(filePath: string): Promise<boolean>;
2
2
  export declare function getFileString(filePath: string, sizeKB?: number): Promise<string>;
3
3
  export declare function writeFileString(filePath: string, content: string, sizeKB?: number): Promise<void>;
4
+ export declare function encrypt(data: string): {
5
+ iv: Buffer<ArrayBufferLike>;
6
+ data: string;
7
+ };
8
+ export declare function decrypt(encryptedResult: any): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plugin-config-helper",
3
- "version": "0.1.9",
3
+ "version": "0.2.0",
4
4
  "private": false,
5
5
  "description": "把 vite.config.ts 配置进行逻辑拆分,并整合一些常用插件或代码,如 element-plus 自动导入组件样式配置的相关插件",
6
6
  "keywords": [
@@ -16,7 +16,7 @@
16
16
  "files": [
17
17
  "dist/**/*.d.ts",
18
18
  "dist/**/*.js",
19
- "src/assets"
19
+ "dist/**/*.ts"
20
20
  ],
21
21
  "exports": {
22
22
  ".": {
@@ -40,6 +40,7 @@
40
40
  "@rollup/plugin-typescript": "12.1.4",
41
41
  "@types/node": "24.6.2",
42
42
  "rollup": "^4.52.4",
43
+ "rollup-plugin-copy": "^3.5.0",
43
44
  "tslib": "^2.8.1",
44
45
  "typescript": "^5.9.3"
45
46
  },
@@ -1,60 +0,0 @@
1
- import { onBeforeMount } from 'vue'
2
-
3
- function lightColor(colorWithHash: string, percentFrom1To100: number) {
4
- const rgb = [1, 3, 5].map((diff) => parseInt(colorWithHash.substring(diff, diff + 2), 16))
5
- const lightRgb = rgb.map((value) =>
6
- parseInt(String(value + (255 - value) * (percentFrom1To100 / 100))),
7
- )
8
- return '#' + lightRgb.map((v) => v.toString(16).padStart(2, '0')).join('')
9
- }
10
-
11
- function darkColor(colorWithHash: string, percentFrom1To100: number) {
12
- const rgb = [1, 3, 5].map((diff) => parseInt(colorWithHash.substring(diff, diff + 2), 16))
13
- const darkRgb = rgb.map((value) => parseInt(String(value * (1 - percentFrom1To100 / 100))))
14
- return '#' + darkRgb.map((v) => v.toString(16).padStart(2, '0')).join('')
15
- }
16
-
17
- function updateThemeColor(colorWithHash: string = '#409eff') {
18
- const colorRegex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/
19
- if (!colorRegex.test(colorWithHash)) {
20
- console.error('color must be a hex string')
21
- return
22
- }
23
- if (colorWithHash.length === 4) {
24
- colorWithHash = ['#']
25
- .concat(
26
- colorWithHash
27
- .slice(1)
28
- .split('')
29
- .map((item) => item + item),
30
- )
31
- .join('')
32
- }
33
- const el = document.documentElement
34
- const colorNames = [
35
- '--el-color-primary',
36
- '--el-color-primary-light-3',
37
- '--el-color-primary-light-5',
38
- '--el-color-primary-light-7',
39
- '--el-color-primary-light-8',
40
- '--el-color-primary-light-9',
41
- '--el-color-primary-dark-2',
42
- ]
43
- for (const item of colorNames) {
44
- const tail = item.slice(-1)
45
- if (tail === 'y') {
46
- el.style.setProperty(item, colorWithHash)
47
- } else if (tail === '2') {
48
- el.style.setProperty(item, darkColor(colorWithHash, Number(tail + '0')))
49
- } else {
50
- el.style.setProperty(item, lightColor(colorWithHash, Number(tail + '0')))
51
- }
52
- }
53
- }
54
-
55
- export function useElementPlusTheme(colorWithHash?: string) {
56
- onBeforeMount(() => {
57
- updateThemeColor(colorWithHash)
58
- })
59
- return { updateThemeColor }
60
- }
@@ -1,28 +0,0 @@
1
- import { useI18n } from 'vue-i18n'
2
-
3
- export function useElementPlusLocale() {
4
- const { locale, t : i18nT } = useI18n()
5
-
6
- function getCachedLanguage() {
7
- return localStorage.getItem('default-language') || 'zh-cn'
8
- }
9
-
10
- function setCachedLanguage(lang: keyof LocaleMap) {
11
- localStorage.setItem('default-language', lang)
12
- }
13
-
14
- function switchLang(lang: keyof LocaleMap) {
15
- locale.value = lang
16
- }
17
-
18
- function t(key:string){
19
- return i18nT(`i18n.${key}`)
20
- }
21
-
22
- return {
23
- switchLang,
24
- t,
25
- getCachedLanguage,
26
- setCachedLanguage
27
- }
28
- }
@@ -1,54 +0,0 @@
1
- import type { App } from 'vue'
2
- import { createI18n } from 'vue-i18n'
3
- import en from '../../locales/en.yaml'
4
- import zh from '../../locales/zh-cn.yaml'
5
- import enEp from 'element-plus/dist/locale/en.mjs'
6
- import zhEp from 'element-plus/dist/locale/zh-cn.mjs'
7
-
8
- const i18n = createI18n({
9
- legacy: false,
10
- locale: 'zh-cn',
11
- fallbackLocale: 'en',
12
- messages: {
13
- en: {
14
- i18n: en,
15
- ...enEp,
16
- },
17
- 'zh-cn': {
18
- i18n: zh,
19
- ...zhEp,
20
- },
21
- },
22
- })
23
-
24
- /**
25
- * @description因为发现 vueI18n 的 messages 有很多嵌套,而 t 函数又不能根据键进行读取,
26
- * 参考 vue-pure-admin 项目的配置,它有一个函数来获取所有 yaml 文件中的键,所以模仿着用
27
- * 本函数也实现了相同功能,但后续逻辑并没走通(它好像是改造了 vueI18n 的 t 函数),且不断测
28
- * 试过程中找到了用 t 函数读取 yaml 配置项值的方法,所以这个函数并没派上用场,但它很有意思,
29
- * 所以记录下来。
30
- */
31
- function getYamlObjectKeys(obj: Record<string, any>, key: string) {
32
- const res: any[] = []
33
- for (const k in obj) {
34
- const sumKey = key ? key + '.' + k : k
35
- res.push(sumKey)
36
- const current = obj[k]
37
- if (typeof current === 'object' && current !== null) {
38
- res.push(...getYamlObjectKeys(current, sumKey))
39
- }
40
- }
41
- return res
42
- }
43
-
44
- export function getEpLocale(locale: keyof LocaleMap) {
45
- if (locale === 'en') {
46
- return enEp
47
- } else if (locale === 'zh-cn') {
48
- return zhEp
49
- }
50
- }
51
-
52
- export function useI18n(app: App) {
53
- app.use(i18n)
54
- }
@@ -1,4 +0,0 @@
1
- interface LocaleMap {
2
- 'zh-cn': 'China'
3
- 'en': 'English'
4
- }