mirror of
https://github.com/IT4Change/boilerplate-frontend.git
synced 2025-12-13 07:35:53 +00:00
clean structure
This commit is contained in:
parent
02b3276519
commit
2851a5144f
@ -70,7 +70,10 @@
|
||||
"import/no-dynamic-require": "error",
|
||||
"import/no-internal-modules": "off",
|
||||
"import/no-relative-packages": "error",
|
||||
"import/no-relative-parent-imports": "error",
|
||||
"import/no-relative-parent-imports": [
|
||||
"error",
|
||||
{ "ignore": ["#[src,root,components,pages,plugins,context,types]/*"] }
|
||||
],
|
||||
"import/no-self-import": "error",
|
||||
"import/no-unresolved": "error",
|
||||
"import/no-useless-path-segments": "error",
|
||||
|
||||
@ -1,10 +1,8 @@
|
||||
import { setup } from '@storybook/vue3'
|
||||
import { createPinia } from 'pinia'
|
||||
|
||||
// eslint-disable-next-line import/no-relative-parent-imports
|
||||
import i18n from '../renderer/i18n'
|
||||
// eslint-disable-next-line import/no-relative-parent-imports
|
||||
import CreateVuetify from '../renderer/vuetify'
|
||||
import i18n from '#plugins/i18n'
|
||||
import CreateVuetify from '#plugins/vuetify'
|
||||
|
||||
import { withVuetifyTheme } from './withVuetifyTheme.decorator'
|
||||
|
||||
|
||||
@ -82,7 +82,6 @@ The following endpoints are provided given the right command is executed or all
|
||||
|
||||
- [ ] figma
|
||||
- [ ] chromatic
|
||||
- [ ] github actions
|
||||
- [ ] feature zähler -> pinia tore
|
||||
|
||||
## Known Problems
|
||||
|
||||
13
package.json
13
package.json
@ -24,7 +24,9 @@
|
||||
"docker",
|
||||
"remark-cli"
|
||||
],
|
||||
"author": "Ulf Gebhardt",
|
||||
"author": {
|
||||
"name": "Ulf Gebhardt"
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"bugs": {
|
||||
"url": "https://github.com/IT4Change/boilerplate-frontend/issues"
|
||||
@ -122,5 +124,14 @@
|
||||
"stylelint-config-standard-scss": "^11.1.0",
|
||||
"vitest": "^0.34.6",
|
||||
"vuepress": "^2.0.0-rc.0"
|
||||
},
|
||||
"imports": {
|
||||
"#root/*": "./*",
|
||||
"#src/*": "./src/*",
|
||||
"#components/*": "./src/components/*",
|
||||
"#pages/*": "./src/pages/*",
|
||||
"#plugins/*": "./renderer/plugins/*",
|
||||
"#context/*": "./renderer/context/*",
|
||||
"#types/*": "./types/*"
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
import { createApp } from './app'
|
||||
|
||||
import type { PageContextClient } from './types'
|
||||
|
||||
export { render }
|
||||
import type { PageContextClient } from '#types/PageContext'
|
||||
|
||||
// This render() hook only supports SSR, see https://vike.dev/render-modes for how to modify render() to support SPA
|
||||
async function render(pageContext: PageContextClient) {
|
||||
@ -15,3 +13,5 @@ async function render(pageContext: PageContextClient) {
|
||||
/* To enable Client-side Routing:
|
||||
export const clientRouting = true
|
||||
// !! WARNING !! Before doing so, read https://vike.dev/clientRouting */
|
||||
|
||||
export { render }
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
import { renderToString as renderToString_ } from '@vue/server-renderer'
|
||||
import { escapeInject, dangerouslySkipEscape } from 'vike/server'
|
||||
|
||||
import { createApp } from './app'
|
||||
import logoUrl from './logo.svg'
|
||||
import logoUrl from '#components/logo.svg'
|
||||
|
||||
import type { PageContextServer } from './types'
|
||||
import { createApp } from './app'
|
||||
|
||||
import type { PageContextServer } from '#types/PageContext'
|
||||
import type { App } from 'vue'
|
||||
|
||||
export { render }
|
||||
// See https://vike.dev/data-fetching
|
||||
export const passToClient = ['pageProps', 'urlPathname']
|
||||
|
||||
@ -56,3 +56,5 @@ async function renderToString(app: App) {
|
||||
if (err) throw err
|
||||
return appHtml
|
||||
}
|
||||
|
||||
export { render }
|
||||
|
||||
@ -1,16 +1,16 @@
|
||||
import { createPinia } from 'pinia'
|
||||
import { createSSRApp, defineComponent, h } from 'vue'
|
||||
|
||||
import i18n from './i18n'
|
||||
import PageShell from './PageShell.vue'
|
||||
import { setPageContext } from './usePageContext'
|
||||
import CreateVuetify from './vuetify'
|
||||
import PageShell from '#components//PageShell.vue'
|
||||
import { setPageContext } from '#context/usePageContext'
|
||||
import i18n from '#plugins/i18n'
|
||||
import pinia from '#plugins/pinia'
|
||||
import CreateVuetify from '#plugins/vuetify'
|
||||
import { Page } from '#types/Page'
|
||||
import { PageProps } from '#types/PageProps'
|
||||
|
||||
import type { Component, PageContext, PageProps } from './types'
|
||||
import type { PageContext } from '#types/PageContext'
|
||||
|
||||
export { createApp }
|
||||
|
||||
function createApp(Page: Component, pageProps: PageProps | undefined, pageContext: PageContext) {
|
||||
function createApp(Page: Page, pageProps: PageProps | undefined, pageContext: PageContext) {
|
||||
const PageWithLayout = defineComponent({
|
||||
render() {
|
||||
return h(
|
||||
@ -25,7 +25,6 @@ function createApp(Page: Component, pageProps: PageProps | undefined, pageContex
|
||||
},
|
||||
})
|
||||
|
||||
const pinia = createPinia()
|
||||
const app = createSSRApp(PageWithLayout)
|
||||
app.use(pinia)
|
||||
app.use(i18n)
|
||||
@ -36,3 +35,5 @@ function createApp(Page: Component, pageProps: PageProps | undefined, pageContex
|
||||
|
||||
return app
|
||||
}
|
||||
|
||||
export { createApp }
|
||||
|
||||
@ -3,13 +3,10 @@
|
||||
|
||||
import { inject } from 'vue'
|
||||
|
||||
import { PageContext } from './types'
|
||||
import { PageContext } from '#types/PageContext'
|
||||
|
||||
import type { App, InjectionKey } from 'vue'
|
||||
|
||||
export { usePageContext }
|
||||
export { setPageContext }
|
||||
|
||||
const key: InjectionKey<PageContext> = Symbol(undefined)
|
||||
|
||||
function usePageContext() {
|
||||
@ -21,3 +18,6 @@ function usePageContext() {
|
||||
function setPageContext(app: App, pageContext: PageContext) {
|
||||
app.provide(key, pageContext)
|
||||
}
|
||||
|
||||
export { usePageContext }
|
||||
export { setPageContext }
|
||||
@ -1,10 +1,8 @@
|
||||
import { createI18n } from 'vue-i18n'
|
||||
|
||||
// eslint-disable-next-line import/no-relative-parent-imports
|
||||
import de from '../src/locales/de.json'
|
||||
import de from '#src/locales/de.json'
|
||||
// import { de as $vuetify } from 'vuetify/locale'
|
||||
// eslint-disable-next-line import/no-relative-parent-imports
|
||||
import en from '../src/locales/en.json'
|
||||
import en from '#src/locales/en.json'
|
||||
// import { en as $vuetify } from 'vuetify/locale'
|
||||
|
||||
export default createI18n({
|
||||
3
renderer/plugins/pinia.ts
Normal file
3
renderer/plugins/pinia.ts
Normal file
@ -0,0 +1,3 @@
|
||||
import { createPinia } from 'pinia'
|
||||
|
||||
export default createPinia()
|
||||
@ -1,9 +1,7 @@
|
||||
import { config } from '@vue/test-utils'
|
||||
|
||||
// eslint-disable-next-line import/no-relative-parent-imports
|
||||
import i18n from '../renderer/i18n'
|
||||
// eslint-disable-next-line import/no-relative-parent-imports
|
||||
import vuetify from '../renderer/vuetify'
|
||||
import i18n from '#plugins/i18n'
|
||||
import vuetify from '#plugins/vuetify'
|
||||
|
||||
config.global.plugins.push(vuetify(i18n))
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
</a>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { usePageContext } from './usePageContext'
|
||||
import { usePageContext } from '#context/usePageContext'
|
||||
|
||||
const pageContext = usePageContext()
|
||||
</script>
|
||||
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.7 KiB |
@ -8,5 +8,5 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import ClickCounter from './ClickCounter.vue'
|
||||
import ClickCounter from '#components/ClickCounter.vue'
|
||||
</script>
|
||||
|
||||
@ -9,7 +9,16 @@
|
||||
"types": ["vite/client"],
|
||||
"skipLibCheck": true,
|
||||
"esModuleInterop": true,
|
||||
"resolveJsonModule": true
|
||||
"resolveJsonModule": true,
|
||||
"paths": {
|
||||
"#root/*": ["./*"],
|
||||
"#src/*": ["./src/*"],
|
||||
"#components/*": ["./src/components/*"],
|
||||
"#pages/*": ["./src/pages/*"],
|
||||
"#plugins/*": ["./renderer/plugins/*"],
|
||||
"#context/*": ["./renderer/context/*"],
|
||||
"#types/*": ["./types/*"]
|
||||
}
|
||||
},
|
||||
"ts-node": {
|
||||
"transpileOnly": true,
|
||||
|
||||
5
types/Page.ts
Normal file
5
types/Page.ts
Normal file
@ -0,0 +1,5 @@
|
||||
import type { ComponentPublicInstance } from 'vue'
|
||||
|
||||
type Page = ComponentPublicInstance // https://stackoverflow.com/questions/63985658/how-to-type-vue-instance-out-of-definecomponent-in-vue-3/63986086#63986086
|
||||
|
||||
export type { Page }
|
||||
@ -1,25 +1,19 @@
|
||||
import type { ComponentPublicInstance } from 'vue'
|
||||
import { Page } from '#types/Page'
|
||||
import { PageProps } from '#types/PageProps'
|
||||
|
||||
export type {
|
||||
PageContextServer,
|
||||
/*
|
||||
// When using Client Routing https://vike.dev/clientRouting
|
||||
PageContextClient,
|
||||
PageContext,
|
||||
/ */
|
||||
// When using Client Routing https://vike.dev/clientRouting
|
||||
PageContextClient,
|
||||
PageContext,
|
||||
/ */
|
||||
// When using Server Routing
|
||||
PageContextClientWithServerRouting as PageContextClient,
|
||||
PageContextWithServerRouting as PageContext,
|
||||
//* /
|
||||
} from 'vike/types'
|
||||
|
||||
type PageProps = object
|
||||
type Component = ComponentPublicInstance // https://stackoverflow.com/questions/63985658/how-to-type-vue-instance-out-of-definecomponent-in-vue-3/63986086#63986086
|
||||
type Page = Component
|
||||
|
||||
export type { PageProps }
|
||||
export type { Component }
|
||||
|
||||
// https://vike.dev/pageContext#typescript
|
||||
declare global {
|
||||
// eslint-disable-next-line @typescript-eslint/no-namespace
|
||||
3
types/PageProps.ts
Normal file
3
types/PageProps.ts
Normal file
@ -0,0 +1,3 @@
|
||||
type PageProps = object
|
||||
|
||||
export type { PageProps }
|
||||
0
src/vue.d.ts → types/vue.d.ts
vendored
0
src/vue.d.ts → types/vue.d.ts
vendored
@ -1,3 +1,5 @@
|
||||
import path from 'path'
|
||||
|
||||
import vueI18n from '@intlify/unplugin-vue-i18n/vite'
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
import vike from 'vike/plugin'
|
||||
@ -18,6 +20,17 @@ const config: UserConfig = {
|
||||
outDir: './build',
|
||||
},
|
||||
ssr: { noExternal: ['vuetify'] },
|
||||
resolve: {
|
||||
alias: {
|
||||
'#root': __dirname,
|
||||
'#src': path.join(__dirname, '/src'),
|
||||
'#components': path.join(__dirname, '/src/components'),
|
||||
'#pages': path.join(__dirname, '/src/pages'),
|
||||
'#plugins': path.join(__dirname, '/renderer/plugins'),
|
||||
'#context': path.join(__dirname, '/renderer/context'),
|
||||
'#types': path.join(__dirname, '/types'),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
export default config
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user