├── .cz-config.js ├── .dockerignore ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .github ├── commit-convention.md ├── semantic.yml └── workflows │ └── ci.yml ├── .gitignore ├── .husky ├── commit-msg └── pre-commit ├── .lintstagedrc ├── .node-version ├── .npmrc ├── .prettierignore ├── Dockerfile ├── LICENSE ├── README.md ├── commitlint.config.ts ├── docker-compose.dev.yml ├── docker-compose.yml ├── docker ├── conf.d │ ├── main.conf │ ├── subapp1.conf │ ├── subapp2.conf │ └── subapp3.conf └── nginx.conf ├── package.json ├── packages ├── main │ ├── .cz-config.js │ ├── .editorconfig │ ├── .eslintignore │ ├── .eslintrc.js │ ├── .gitignore │ ├── .lintstagedrc │ ├── .prettierignore │ ├── .stylelintrc.js │ ├── .vscode │ │ └── extensions.json │ ├── README.md │ ├── commitlint.config.ts │ ├── element-preset.js │ ├── index.html │ ├── package.json │ ├── postcss.config.js │ ├── prettier.config.js │ ├── public │ │ └── favicon.ico │ ├── src │ │ ├── App.vue │ │ ├── api │ │ │ ├── index.ts │ │ │ └── modules │ │ │ │ ├── index.ts │ │ │ │ └── login.ts │ │ ├── assets │ │ │ ├── images │ │ │ │ └── logo.png │ │ │ └── styles │ │ │ │ ├── element │ │ │ │ ├── dark.scss │ │ │ │ └── index.scss │ │ │ │ ├── index.scss │ │ │ │ └── reset.scss │ │ ├── components │ │ │ ├── HelloWorld.vue │ │ │ ├── LoginButton.vue │ │ │ ├── ThemeSwitcher.vue │ │ │ ├── VueUse.vue │ │ │ └── shared │ │ │ │ ├── Footer.vue │ │ │ │ ├── Header.vue │ │ │ │ └── Menu.vue │ │ ├── composables │ │ │ ├── dark.ts │ │ │ └── index.ts │ │ ├── config.ts │ │ ├── env.d.ts │ │ ├── global.d.ts │ │ ├── main.ts │ │ ├── pages │ │ │ ├── detail.vue │ │ │ └── index.vue │ │ ├── router │ │ │ └── index.ts │ │ ├── store │ │ │ ├── index.ts │ │ │ └── user.ts │ │ ├── types │ │ │ └── shims-axios.d.ts │ │ └── utils │ │ │ ├── axios.ts │ │ │ ├── theme.ts │ │ │ ├── toast.ts │ │ │ ├── token.ts │ │ │ └── url.ts │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── plugin │ ├── README.md │ ├── global.d.ts │ ├── package.json │ ├── src │ │ ├── helper.ts │ │ └── index.ts │ ├── tsconfig.json │ └── vite.config.ts ├── subapp1 │ ├── .gitignore │ ├── README.md │ ├── index.html │ ├── package.json │ ├── public │ │ └── vite.svg │ ├── src │ │ ├── App.vue │ │ ├── assets │ │ │ ├── vite.svg │ │ │ └── vue.svg │ │ ├── components │ │ │ └── HelloWorld.vue │ │ ├── env.d.ts │ │ ├── global.d.ts │ │ ├── main.ts │ │ ├── pages │ │ │ ├── about.vue │ │ │ └── index.vue │ │ ├── router │ │ │ └── index.ts │ │ └── style.css │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── subapp2 │ ├── .gitignore │ ├── index.html │ ├── package.json │ ├── src │ │ ├── assets │ │ │ ├── react.svg │ │ │ └── vite.svg │ │ ├── global.d.ts │ │ ├── index.css │ │ ├── main.tsx │ │ ├── pages │ │ │ ├── about │ │ │ │ └── index.tsx │ │ │ └── index │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ ├── router │ │ │ └── index.tsx │ │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── subapp3 │ ├── .gitignore │ ├── .vscode │ │ └── extensions.json │ ├── README.md │ ├── index.html │ ├── package.json │ ├── src │ │ ├── app.css │ │ ├── app.svelte │ │ ├── assets │ │ │ ├── svelte.svg │ │ │ └── vite.svg │ │ ├── env.d.ts │ │ ├── global.d.ts │ │ ├── lib │ │ │ └── Counter.svelte │ │ ├── main.ts │ │ └── routes │ │ │ ├── about.svelte │ │ │ └── index.svelte │ ├── svelte.config.js │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts └── subapp4 │ ├── .gitignore │ ├── README.md │ ├── index.html │ ├── package.json │ ├── public │ └── vite.svg │ ├── src │ ├── App.vue │ ├── assets │ │ ├── vite.svg │ │ └── vue.svg │ ├── components │ │ └── HelloWorld.vue │ ├── env.d.ts │ ├── global.d.ts │ ├── main.ts │ ├── pages │ │ ├── about.vue │ │ └── index.vue │ ├── router │ │ └── index.ts │ └── style.css │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── prettier.config.js └── scripts ├── build.ts ├── dev.ts └── utils.ts /.cz-config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | types: [ 3 | { value: 'feat', name: 'feat: New Feature' }, 4 | { value: 'bug', name: 'bug: Should With Bug Number' }, 5 | { value: 'fix', name: 'fix: Fix bug' }, 6 | { value: 'ui', name: 'ui: Update UI' }, 7 | { value: 'docs', name: 'docs: Modify documents' }, 8 | { 9 | value: 'style', 10 | name: 'style: Update code style(do not influence business code)', 11 | }, 12 | { value: 'perf', name: 'perf: Performance' }, 13 | { 14 | value: 'refactor', 15 | name: 'refactor: Refact neither feature or bug fix', 16 | }, 17 | { value: 'release', name: 'release: Release' }, 18 | { value: 'deploy', name: 'deploy: Deployment' }, 19 | { value: 'test', name: 'test: Add test case' }, 20 | { 21 | value: 'chore', 22 | name: 'chore: Update build process or project tools(do not influence business code)', 23 | }, 24 | { value: 'revert', name: 'revert: Revert' }, 25 | { value: 'build', name: 'build: Build' }, 26 | ], 27 | // override the messages, defaults are as follows 28 | messages: { 29 | type: 'Please choose commit type:', 30 | customScope: 'Please input modify scope (optional):', 31 | subject: 'Please describe your commit message (required):', 32 | body: 'Please input decription in detail(optional):', 33 | footer: 'Please input issue to be closed(optional):', 34 | confirmCommit: 'Confirm to submit?(y/n/e/h)', 35 | }, 36 | allowCustomScopes: true, 37 | skipQuestions: ['body', 'footer'], 38 | subjectLimit: 72, 39 | }; 40 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | packages/**/node_modules 4 | packages/**/dist 5 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | charset = utf-8 3 | indent_style = space 4 | indent_size = 4 5 | end_of_line = lf 6 | trim_trailing_whitespace = true 7 | 8 | [*.{js,vue,scss}] 9 | insert_final_newline = true 10 | max_line_length = 150 11 | 12 | [*.{json,yml}] 13 | indent_size = 2 14 | 15 | [*.{conf}] 16 | indent_size = 2 17 | 18 | [*.md] 19 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | index.html 4 | 5 | public/mockServiceWorker.js 6 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: 'vue-eslint-parser', 3 | parserOptions: { 4 | parser: '@typescript-eslint/parser', 5 | ecmaVersion: 2020, 6 | sourceType: 'module', 7 | ecmaFeatures: { 8 | jsx: true, 9 | }, 10 | }, 11 | extends: [ 12 | 'plugin:vue/vue3-recommended', 13 | 'plugin:@typescript-eslint/recommended', 14 | 'prettier', 15 | 'plugin:prettier/recommended', 16 | ], 17 | 18 | rules: { 19 | // override/add rules settings here, such as: 20 | 'vue/multi-word-component-names': 'off', 21 | '@typescript-eslint/no-explicit-any': 'off', 22 | }, 23 | }; 24 | -------------------------------------------------------------------------------- /.github/commit-convention.md: -------------------------------------------------------------------------------- 1 | ## Git Commit Message Convention 2 | 3 | > This is adapted from [Angular's commit convention](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular). 4 | 5 | #### TL;DR: 6 | 7 | Messages must be matched by the following regex: 8 | 9 | 10 | ```js 11 | /^(revert: )?(feat|bug|fix|ui|docs|style|perf|release|deploy|refactor|test|chore|merge|build|ci)(\(.+\))?: .{1,50}/ 12 | ``` 13 | 14 | #### Examples 15 | 16 | Appears under "Features" header, `dev` subheader: 17 | 18 | ``` 19 | feat(dev): add 'comments' option 20 | ``` 21 | 22 | Appears under "Bug Fixes" header, `dev` subheader, with a link to issue #28: 23 | 24 | ``` 25 | fix(dev): fix dev error 26 | 27 | close #28 28 | ``` 29 | 30 | Appears under "Performance Improvements" header, and under "Breaking Changes" with the breaking change explanation: 31 | 32 | ``` 33 | perf(build): remove 'foo' option 34 | 35 | BREAKING CHANGE: The 'foo' option has been removed. 36 | ``` 37 | 38 | The following commit and commit `667ecc1` do not appear in the changelog if they are under the same release. If not, the revert commit appears under the "Reverts" header. 39 | 40 | ``` 41 | revert: feat(compiler): add 'comments' option 42 | 43 | This reverts commit 667ecc1654a317a13331b17617d973392f415f02. 44 | ``` 45 | 46 | ### Full Message Format 47 | 48 | A commit message consists of a **header**, **body** and **footer**. The header has a **type**, **scope** and **subject**: 49 | 50 | ``` 51 | (): 52 | 53 | 54 | 55 |