create-packer 1.45.19 → 1.45.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/package.json +1 -1
  2. package/template/electron-vue/.editorconfig +14 -0
  3. package/template/electron-vue/.env +3 -0
  4. package/template/electron-vue/.env.development +3 -0
  5. package/template/electron-vue/.gitignore +28 -0
  6. package/template/electron-vue/.husky/commit-msg +4 -0
  7. package/template/electron-vue/.husky/pre-commit +4 -0
  8. package/template/electron-vue/.prettierignore +6 -0
  9. package/template/electron-vue/.prettierrc +18 -0
  10. package/template/electron-vue/.stylelintignore +4 -0
  11. package/template/electron-vue/.stylelintrc +35 -0
  12. package/template/electron-vue/.vscode/extensions.json +9 -0
  13. package/template/electron-vue/README.md +14 -0
  14. package/template/electron-vue/assets/rspack.png +0 -0
  15. package/template/electron-vue/build.config.json +40 -0
  16. package/template/electron-vue/commitlint.config.cjs +1 -0
  17. package/template/electron-vue/configs/clean.ts +10 -0
  18. package/template/electron-vue/configs/config.ts +25 -0
  19. package/template/electron-vue/configs/createChunks.ts +26 -0
  20. package/template/electron-vue/configs/rsbuild.main.config.ts +54 -0
  21. package/template/electron-vue/configs/rsbuild.preload.config.ts +54 -0
  22. package/template/electron-vue/configs/rsbuild.renderer.config.ts +64 -0
  23. package/template/electron-vue/env.d.ts +18 -0
  24. package/template/electron-vue/eslint.config.mjs +115 -0
  25. package/template/electron-vue/main/main.ts +83 -0
  26. package/template/electron-vue/main/tools/html.ts +8 -0
  27. package/template/electron-vue/main/tools/index.ts +1 -0
  28. package/template/electron-vue/package.json +87 -0
  29. package/template/electron-vue/pnpm-lock.yaml +10158 -0
  30. package/template/electron-vue/postcss.config.cjs +9 -0
  31. package/template/electron-vue/preload/index.ts +1 -0
  32. package/template/electron-vue/preload/toolr.ts +26 -0
  33. package/template/electron-vue/renderer/domain/app/app.ts +4 -0
  34. package/template/electron-vue/renderer/domain/app/components/app.vue +18 -0
  35. package/template/electron-vue/renderer/domain/app/components/index.ts +1 -0
  36. package/template/electron-vue/renderer/domain/app/createComponentInstance.ts +43 -0
  37. package/template/electron-vue/renderer/domain/app/index.ts +3 -0
  38. package/template/electron-vue/renderer/domain/router/home/index.ts +2 -0
  39. package/template/electron-vue/renderer/domain/router/home/names.ts +3 -0
  40. package/template/electron-vue/renderer/domain/router/home/routes.ts +8 -0
  41. package/template/electron-vue/renderer/domain/router/index.ts +26 -0
  42. package/template/electron-vue/renderer/domain/router/names.ts +5 -0
  43. package/template/electron-vue/renderer/index.html +11 -0
  44. package/template/electron-vue/renderer/main.css +4 -0
  45. package/template/electron-vue/renderer/main.ts +6 -0
  46. package/template/electron-vue/renderer/pages/home/index.ts +1 -0
  47. package/template/electron-vue/renderer/pages/home/view.vue +12 -0
  48. package/template/electron-vue/renderer/pages/index.ts +1 -0
  49. package/template/electron-vue/renderer/pages/index.vue +3 -0
  50. package/template/electron-vue/renderer/pages/not-found.vue +3 -0
  51. package/template/electron-vue/renderer/public/vite.svg +1 -0
  52. package/template/electron-vue/renderer/shared/assets/vue.svg +1 -0
  53. package/template/electron-vue/renderer/shared/components/index.ts +0 -0
  54. package/template/electron-vue/renderer/shared/constant/index.ts +0 -0
  55. package/template/electron-vue/renderer/shared/hooks/index.ts +2 -0
  56. package/template/electron-vue/renderer/shared/hooks/useList.ts +86 -0
  57. package/template/electron-vue/renderer/shared/hooks/useVisible.ts +27 -0
  58. package/template/electron-vue/renderer/shared/service/api.ts +1 -0
  59. package/template/electron-vue/renderer/shared/service/home.ts +7 -0
  60. package/template/electron-vue/renderer/shared/service/index.ts +3 -0
  61. package/template/electron-vue/renderer/shared/service/request.ts +5 -0
  62. package/template/electron-vue/renderer/shared/tools/index.ts +0 -0
  63. package/template/electron-vue/tsconfig.json +25 -0
  64. package/template/electron-vue/tsconfig.node.json +10 -0
@@ -0,0 +1,9 @@
1
+ module.exports = {
2
+ plugins: {
3
+ 'postcss-import': {},
4
+ '@tailwindcss/postcss': {},
5
+ 'postcss-nesting': {},
6
+ autoprefixer: {},
7
+ ...(process.env.NODE_ENV === 'production' ? { cssnano: {} } : {})
8
+ }
9
+ }
@@ -0,0 +1 @@
1
+ export * from './toolr'
@@ -0,0 +1,26 @@
1
+ import { contextBridge, ipcRenderer, IpcRendererEvent } from 'electron'
2
+
3
+ export type Channels = 'ipc-example'
4
+
5
+ const electronHandler = {
6
+ ipcRenderer: {
7
+ sendMessage(channel: Channels, ...args: unknown[]) {
8
+ ipcRenderer.send(channel, ...args)
9
+ },
10
+ on(channel: Channels, func: (...args: unknown[]) => void) {
11
+ const subscription = (_event: IpcRendererEvent, ...args: unknown[]) => func(...args)
12
+ ipcRenderer.on(channel, subscription)
13
+
14
+ return () => {
15
+ ipcRenderer.removeListener(channel, subscription)
16
+ }
17
+ },
18
+ once(channel: Channels, func: (...args: unknown[]) => void) {
19
+ ipcRenderer.once(channel, (_event, ...args) => func(...args))
20
+ }
21
+ }
22
+ }
23
+
24
+ contextBridge.exposeInMainWorld('electron', electronHandler)
25
+
26
+ export type ElectronHandler = typeof electronHandler
@@ -0,0 +1,4 @@
1
+ import { createApp } from 'vue'
2
+ import { App } from './components'
3
+
4
+ export default createApp(App)
@@ -0,0 +1,18 @@
1
+ <template>
2
+ <router-view />
3
+ </template>
4
+
5
+ <script setup lang="ts">
6
+ import { router, routerNames } from '@/renderer/domain/router'
7
+
8
+ router.beforeEach(async to => {
9
+ if (!Object.values(routerNames).includes(to.name as string)) {
10
+ return {
11
+ replace: true,
12
+ name: routerNames.notFound
13
+ }
14
+ }
15
+ })
16
+ </script>
17
+
18
+ <style scoped></style>
@@ -0,0 +1 @@
1
+ export { default as App } from './app.vue'
@@ -0,0 +1,43 @@
1
+ import { createVNode, render, VNodeChild } from 'vue'
2
+ import app from './app'
3
+
4
+ const store = new Map()
5
+
6
+ function reset(oldObj: Record<string, any>, newObj: Record<string, any>) {
7
+ Object.keys(oldObj).forEach(k => {
8
+ oldObj[k] = void 0
9
+ })
10
+ Object.assign(oldObj, newObj)
11
+ }
12
+
13
+ export function createComponentInstance<
14
+ P extends Record<string, any>,
15
+ E extends Record<string, any>,
16
+ Slots extends Record<string, () => VNodeChild> = Record<string, () => VNodeChild>
17
+ >(name: string, component: any, props?: P, slots?: Slots) {
18
+ let vNode = store.get(name)
19
+ function updateProps(props: Partial<P>) {
20
+ reset(vNode.component.props, props)
21
+ }
22
+
23
+ function updateSlots(slots: Partial<Record<string, () => VNodeChild>>) {
24
+ reset(vNode.component.slots, slots)
25
+ }
26
+
27
+ if (!vNode) {
28
+ const container = document.createElement('div')
29
+ vNode = createVNode(component, props, slots)
30
+ vNode.appContext = app._context || {}
31
+ store.set(name, vNode)
32
+ render(vNode, container)
33
+ } else {
34
+ updateProps(props || {})
35
+ updateSlots(slots || {})
36
+ }
37
+ return {
38
+ instance: vNode,
39
+ updateProps,
40
+ updateSlots,
41
+ ...(vNode.component?.exposed as E)
42
+ }
43
+ }
@@ -0,0 +1,3 @@
1
+ export { default as app } from './app'
2
+ export * from './components'
3
+ export * from './createComponentInstance'
@@ -0,0 +1,2 @@
1
+ export { default as names } from './names'
2
+ export { default as routes } from './routes'
@@ -0,0 +1,3 @@
1
+ export default {
2
+ home: 'home'
3
+ }
@@ -0,0 +1,8 @@
1
+ import { RouteRecordRaw } from 'vue-router'
2
+ import names from './names'
3
+
4
+ const routes: RouteRecordRaw[] = [
5
+ { path: '/home', name: names.home, component: () => import('@/renderer/pages/home') }
6
+ ]
7
+
8
+ export default routes
@@ -0,0 +1,26 @@
1
+ import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
2
+ import names from './names'
3
+ import * as homeRouter from './home'
4
+
5
+ const routes: RouteRecordRaw[] = [
6
+ {
7
+ path: '/',
8
+ component: () => import('@/renderer/pages'),
9
+ redirect: { name: names.home },
10
+ children: [
11
+ ...homeRouter.routes,
12
+ {
13
+ path: '/404',
14
+ name: names.notFound,
15
+ component: () => import('@/renderer/pages/not-found.vue')
16
+ }
17
+ ]
18
+ }
19
+ ]
20
+
21
+ export { default as routerNames } from './names'
22
+
23
+ export const router = createRouter({
24
+ history: createWebHashHistory(import.meta.env.PUBLIC_BASE_URL),
25
+ routes
26
+ })
@@ -0,0 +1,5 @@
1
+ import * as homeRouter from './home'
2
+ export default {
3
+ ...homeRouter.names,
4
+ notFound: '404'
5
+ }
@@ -0,0 +1,11 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ </head>
7
+ <body>
8
+ <noscript>You need to enable JavaScript to run this app.</noscript>
9
+ <div id="app"></div>
10
+ </body>
11
+ </html>
@@ -0,0 +1,4 @@
1
+ @layer theme, base, components, utilities;
2
+ @import "tailwindcss/theme.css" prefix(tw) layer(theme);
3
+ @import "tailwindcss/utilities.css" layer(utilities);
4
+
@@ -0,0 +1,6 @@
1
+ import { createPinia } from 'pinia'
2
+ import { router } from '@/renderer/domain/router'
3
+ import { app } from '@/renderer/domain/app'
4
+ import './main.css'
5
+
6
+ app.use(createPinia()).use(router).mount('#app')
@@ -0,0 +1 @@
1
+ export { default } from './view.vue'
@@ -0,0 +1,12 @@
1
+ <script setup lang="ts">
2
+ import { fetchHomeData } from '@/renderer/shared/service'
3
+
4
+ const data = fetchHomeData()
5
+ console.log('data', data)
6
+ </script>
7
+
8
+ <template>
9
+ <div class="tw:flex tw:justify-center tw:align-middle">Home</div>
10
+ </template>
11
+
12
+ <style scoped></style>
@@ -0,0 +1 @@
1
+ export { default } from './index.vue'
@@ -0,0 +1,3 @@
1
+ <template>
2
+ <div><router-view /></div>
3
+ </template>
@@ -0,0 +1,3 @@
1
+ <template>
2
+ <div>404</div>
3
+ </template>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>
@@ -0,0 +1,2 @@
1
+ export { default as useVisible } from './useVisible'
2
+ export { default as useList } from './useList'
@@ -0,0 +1,86 @@
1
+ import { ref, reactive, computed, unref } from 'vue'
2
+ import { cloneDeep, pick, isNil } from 'es-toolkit'
3
+ import { assign, size, max } from 'es-toolkit/compat'
4
+
5
+ export interface configType<ListItem, P> {
6
+ /**
7
+ * @description 默认请求参数
8
+ */
9
+ defaultParams: P
10
+ /** 列表请求 */
11
+ fetch: (state: { params: P }) => Promise<{
12
+ list: ListItem[]
13
+ page?: number
14
+ pageSize?: number
15
+ total?: number
16
+ sum?: Record<string, any>
17
+ }>
18
+ /** 初始化列表时的配置 */
19
+ initConfig?: {
20
+ /** 初始化的时候需要保留值的字段 */
21
+ keepParamsKeys?: Array<keyof P>
22
+ }
23
+ }
24
+
25
+ export default function createListStore<
26
+ P extends { page?: number; pageSize?: number; [key: string]: any },
27
+ ListItem extends Record<string, any> = Record<string, any>
28
+ >(config: configType<ListItem, P>) {
29
+ const loading = ref(true)
30
+ const total = ref(0)
31
+ const params = reactive(cloneDeep(config.defaultParams))
32
+ const list = ref<ListItem[]>([])
33
+ const sum = reactive<Record<string, any>>({})
34
+ const selected = ref<ListItem[]>([])
35
+ const selectedKeys = ref<(string | number)[]>([])
36
+ const pagination = computed(() => ({
37
+ current: params.page || 0,
38
+ pageSize: params.pageSize || 0,
39
+ total: total.value
40
+ }))
41
+ const selectedLen = computed(() => {
42
+ return max([size(selected.value), size(selectedKeys.value)]) || 0
43
+ })
44
+ function resetParams() {
45
+ assign(params, cloneDeep(config.defaultParams))
46
+ }
47
+ async function fetchList(arg?: { params?: Partial<P>; isConcat?: boolean; isInit?: boolean }) {
48
+ loading.value = true
49
+ try {
50
+ if (arg?.isInit) {
51
+ assign(
52
+ params,
53
+ cloneDeep(config.defaultParams),
54
+ pick(params, (config?.initConfig?.keepParamsKeys || []) as never)
55
+ )
56
+ }
57
+ assign(params, arg?.params)
58
+ const result = await config.fetch({ params: unref(params) })
59
+ if (!isNil(result.page) && arg?.isConcat) {
60
+ list.value = [...list.value, ...result.list] as ListItem[]
61
+ } else {
62
+ list.value = result.list
63
+ }
64
+ sum.value = result.sum || {}
65
+ total.value = result.total || total.value
66
+ params.page = result.page || params.page
67
+ params.pageSize = result.pageSize || params.pageSize
68
+ } finally {
69
+ loading.value = false
70
+ }
71
+ }
72
+
73
+ return {
74
+ loading,
75
+ total,
76
+ params,
77
+ list,
78
+ sum,
79
+ selected,
80
+ selectedKeys,
81
+ pagination,
82
+ selectedLen,
83
+ resetParams,
84
+ fetchList
85
+ }
86
+ }
@@ -0,0 +1,27 @@
1
+ import { ref } from 'vue'
2
+ import { isFunction } from 'es-toolkit'
3
+
4
+ export interface useVisibleConfigType {
5
+ defaultVisible?: boolean
6
+ onBeforeShow?: () => Promise<boolean | void>
7
+ onBeforeHide?: () => Promise<boolean | void>
8
+ }
9
+ export default function useVisible(config?: useVisibleConfigType) {
10
+ const visible = ref(config?.defaultVisible ?? false)
11
+ const onShow = async () => {
12
+ let isShow: boolean | void = true
13
+ if (isFunction(config?.onBeforeShow)) {
14
+ isShow = await config?.onBeforeShow?.()
15
+ }
16
+ visible.value = isShow !== false
17
+ }
18
+ const onClose = async () => {
19
+ let isHide: boolean | void = true
20
+ if (isFunction(config?.onBeforeHide)) {
21
+ isHide = await config?.onBeforeHide?.()
22
+ }
23
+ visible.value = isHide === false
24
+ }
25
+
26
+ return { visible, onShow, onClose }
27
+ }
@@ -0,0 +1 @@
1
+ export const HOME_DATA = '/homeData'
@@ -0,0 +1,7 @@
1
+ import { request } from './request'
2
+ import { HOME_DATA } from './api'
3
+
4
+ export async function fetchHomeData() {
5
+ const { data } = await request(HOME_DATA)
6
+ return data
7
+ }
@@ -0,0 +1,3 @@
1
+ export * from './request'
2
+ export * as API from './api'
3
+ export * from './home'
@@ -0,0 +1,5 @@
1
+ import axios from 'axios'
2
+
3
+ export const request = axios.create({
4
+ baseURL: import.meta.env.PUBLIC_BASE_URL + import.meta.env.PUBLIC_API_HOST
5
+ })
@@ -0,0 +1,25 @@
1
+ {
2
+ "compilerOptions": {
3
+ "baseUrl": ".",
4
+ "target": "ESNext",
5
+ "useDefineForClassFields": true,
6
+ "module": "ESNext",
7
+ "moduleResolution": "bundler",
8
+ "strict": true,
9
+ "jsx": "preserve",
10
+ "jsxImportSource": "vue",
11
+ "sourceMap": true,
12
+ "resolveJsonModule": true,
13
+ "isolatedModules": true,
14
+ "strictPropertyInitialization": false,
15
+ "esModuleInterop": true,
16
+ "lib": ["ESNext", "DOM"],
17
+ "skipLibCheck": true,
18
+ "paths": {
19
+ "@/*": ["./*"],
20
+ },
21
+ },
22
+ "include": ["**/*.tsx", "**/*.ts", "**/*.vue"],
23
+ "exclude": ["scripts", "rsbuild.config.ts"],
24
+ "references": [{ "path": "./tsconfig.node.json" }],
25
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "compilerOptions": {
3
+ "composite": true,
4
+ "module": "ESNext",
5
+ "moduleResolution": "node",
6
+ "allowSyntheticDefaultImports": true,
7
+ "resolveJsonModule": true
8
+ },
9
+ "include": ["scripts", "rsbuild.config.ts", "package.json"]
10
+ }