| @@ -0,0 +1,4 @@ | |||||
| > 1% | |||||
| last 2 versions | |||||
| not dead | |||||
| not ie 11 | |||||
| @@ -0,0 +1,7 @@ | |||||
| [*.{js,jsx,ts,tsx,vue}] | |||||
| indent_style = space | |||||
| indent_size = 2 | |||||
| end_of_line = lf | |||||
| trim_trailing_whitespace = true | |||||
| insert_final_newline = true | |||||
| max_line_length = 100 | |||||
| @@ -0,0 +1,29 @@ | |||||
| module.exports = { | |||||
| root: true, | |||||
| env: { | |||||
| node: true, | |||||
| }, | |||||
| extends: [ | |||||
| 'plugin:vue/vue3-essential', | |||||
| '@vue/airbnb', | |||||
| '@vue/typescript/recommended', | |||||
| ], | |||||
| parserOptions: { | |||||
| ecmaVersion: 2020, | |||||
| }, | |||||
| rules: { | |||||
| 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', | |||||
| 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', | |||||
| }, | |||||
| overrides: [ | |||||
| { | |||||
| files: [ | |||||
| '**/__tests__/*.{j,t}s?(x)', | |||||
| '**/tests/unit/**/*.spec.{j,t}s?(x)', | |||||
| ], | |||||
| env: { | |||||
| mocha: true, | |||||
| }, | |||||
| }, | |||||
| ], | |||||
| }; | |||||
| @@ -0,0 +1,23 @@ | |||||
| .DS_Store | |||||
| node_modules | |||||
| /dist | |||||
| # local env files | |||||
| .env.local | |||||
| .env.*.local | |||||
| # Log files | |||||
| npm-debug.log* | |||||
| yarn-debug.log* | |||||
| yarn-error.log* | |||||
| pnpm-debug.log* | |||||
| # Editor directories and files | |||||
| .idea | |||||
| .vscode | |||||
| *.suo | |||||
| *.ntvs* | |||||
| *.njsproj | |||||
| *.sln | |||||
| *.sw? | |||||
| @@ -0,0 +1,29 @@ | |||||
| # signet | |||||
| ## Project setup | |||||
| ``` | |||||
| yarn install | |||||
| ``` | |||||
| ### Compiles and hot-reloads for development | |||||
| ``` | |||||
| yarn serve | |||||
| ``` | |||||
| ### Compiles and minifies for production | |||||
| ``` | |||||
| yarn build | |||||
| ``` | |||||
| ### Run your unit tests | |||||
| ``` | |||||
| yarn test:unit | |||||
| ``` | |||||
| ### Lints and fixes files | |||||
| ``` | |||||
| yarn lint | |||||
| ``` | |||||
| ### Customize configuration | |||||
| See [Configuration Reference](https://cli.vuejs.org/config/). | |||||
| @@ -0,0 +1,5 @@ | |||||
| module.exports = { | |||||
| presets: [ | |||||
| '@vue/cli-plugin-babel/preset', | |||||
| ], | |||||
| }; | |||||
| @@ -0,0 +1,41 @@ | |||||
| { | |||||
| "name": "signet", | |||||
| "version": "0.1.0", | |||||
| "private": true, | |||||
| "scripts": { | |||||
| "serve": "vue-cli-service serve", | |||||
| "build": "vue-cli-service build", | |||||
| "test:unit": "vue-cli-service test:unit", | |||||
| "lint": "vue-cli-service lint" | |||||
| }, | |||||
| "dependencies": { | |||||
| "core-js": "^3.8.3", | |||||
| "vue": "^3.2.13", | |||||
| "vue-router": "^4.0.3", | |||||
| "vuex": "^4.0.0" | |||||
| }, | |||||
| "devDependencies": { | |||||
| "@types/chai": "^4.2.15", | |||||
| "@types/mocha": "^8.2.1", | |||||
| "@typescript-eslint/eslint-plugin": "^5.4.0", | |||||
| "@typescript-eslint/parser": "^5.4.0", | |||||
| "@vue/cli-plugin-babel": "~5.0.0", | |||||
| "@vue/cli-plugin-eslint": "~5.0.0", | |||||
| "@vue/cli-plugin-router": "~5.0.0", | |||||
| "@vue/cli-plugin-typescript": "~5.0.0", | |||||
| "@vue/cli-plugin-unit-mocha": "~5.0.0", | |||||
| "@vue/cli-plugin-vuex": "~5.0.0", | |||||
| "@vue/cli-service": "~5.0.0", | |||||
| "@vue/eslint-config-airbnb": "^6.0.0", | |||||
| "@vue/eslint-config-typescript": "^9.1.0", | |||||
| "@vue/test-utils": "^2.0.0-0", | |||||
| "chai": "^4.2.0", | |||||
| "eslint": "^7.32.0", | |||||
| "eslint-plugin-import": "^2.25.3", | |||||
| "eslint-plugin-vue": "^8.0.3", | |||||
| "eslint-plugin-vuejs-accessibility": "^1.1.0", | |||||
| "stylus": "^0.55.0", | |||||
| "stylus-loader": "^6.1.0", | |||||
| "typescript": "~4.5.5" | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,17 @@ | |||||
| <!DOCTYPE html> | |||||
| <html lang=""> | |||||
| <head> | |||||
| <meta charset="utf-8"> | |||||
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||||
| <meta name="viewport" content="width=device-width,initial-scale=1.0"> | |||||
| <link rel="icon" href="<%= BASE_URL %>favicon.ico"> | |||||
| <title><%= htmlWebpackPlugin.options.title %></title> | |||||
| </head> | |||||
| <body> | |||||
| <noscript> | |||||
| <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> | |||||
| </noscript> | |||||
| <div id="app"></div> | |||||
| <!-- built files will be auto injected --> | |||||
| </body> | |||||
| </html> | |||||
| @@ -0,0 +1,17 @@ | |||||
| <template> | |||||
| <nav> | |||||
| <router-link to="/">Home</router-link> | | |||||
| <router-link to="/about">About</router-link> | |||||
| </nav> | |||||
| <router-view/> | |||||
| </template> | |||||
| <style lang="stylus"> | |||||
| #app | |||||
| font-family Avenir, Helvetica, Arial, sans-serif | |||||
| -webkit-font-smoothing antialiased | |||||
| -moz-osx-font-smoothing grayscale | |||||
| text-align center | |||||
| color #2c3e50 | |||||
| margin-top 60px | |||||
| </style> | |||||
| @@ -0,0 +1,63 @@ | |||||
| <template> | |||||
| <div class="hello"> | |||||
| <h1>{{ msg }}</h1> | |||||
| <p> | |||||
| For a guide and recipes on how to configure / customize this project,<br> | |||||
| check out the | |||||
| <a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>. | |||||
| </p> | |||||
| <h3>Installed CLI Plugins</h3> | |||||
| <ul> | |||||
| <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li> | |||||
| <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router" target="_blank" rel="noopener">router</a></li> | |||||
| <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex" target="_blank" rel="noopener">vuex</a></li> | |||||
| <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li> | |||||
| <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-unit-mocha" target="_blank" rel="noopener">unit-mocha</a></li> | |||||
| <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-typescript" target="_blank" rel="noopener">typescript</a></li> | |||||
| </ul> | |||||
| <h3>Essential Links</h3> | |||||
| <ul> | |||||
| <li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li> | |||||
| <li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li> | |||||
| <li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li> | |||||
| <li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li> | |||||
| <li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li> | |||||
| </ul> | |||||
| <h3>Ecosystem</h3> | |||||
| <ul> | |||||
| <li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li> | |||||
| <li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li> | |||||
| <li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li> | |||||
| <li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li> | |||||
| <li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li> | |||||
| </ul> | |||||
| </div> | |||||
| </template> | |||||
| <script lang="ts"> | |||||
| import { defineComponent } from 'vue'; | |||||
| export default defineComponent({ | |||||
| name: 'HelloWorld', | |||||
| props: { | |||||
| msg: String, | |||||
| }, | |||||
| }); | |||||
| </script> | |||||
| <!-- Add "scoped" attribute to limit CSS to this component only --> | |||||
| <style scoped lang="stylus"> | |||||
| h3 | |||||
| margin 40px 0 0 | |||||
| ul | |||||
| list-style-type none | |||||
| padding 0 | |||||
| li | |||||
| display inline-block | |||||
| margin 0 10px | |||||
| a | |||||
| color #42b983 | |||||
| </style> | |||||
| @@ -0,0 +1,6 @@ | |||||
| import { createApp } from 'vue'; | |||||
| import App from './App.vue'; | |||||
| import router from './router'; | |||||
| import store from './store'; | |||||
| createApp(App).use(store).use(router).mount('#app'); | |||||
| @@ -0,0 +1,25 @@ | |||||
| import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'; | |||||
| import HomeView from '../views/HomeView.vue'; | |||||
| const routes: Array<RouteRecordRaw> = [ | |||||
| { | |||||
| path: '/', | |||||
| name: 'home', | |||||
| component: HomeView, | |||||
| }, | |||||
| { | |||||
| path: '/about', | |||||
| name: 'about', | |||||
| // route level code-splitting | |||||
| // this generates a separate chunk (about.[hash].js) for this route | |||||
| // which is lazy-loaded when the route is visited. | |||||
| component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue'), | |||||
| }, | |||||
| ]; | |||||
| const router = createRouter({ | |||||
| history: createWebHistory(process.env.BASE_URL), | |||||
| routes, | |||||
| }); | |||||
| export default router; | |||||
| @@ -0,0 +1,6 @@ | |||||
| /* eslint-disable */ | |||||
| declare module '*.vue' { | |||||
| import type { DefineComponent } from 'vue' | |||||
| const component: DefineComponent<{}, {}, any> | |||||
| export default component | |||||
| } | |||||
| @@ -0,0 +1,14 @@ | |||||
| import { createStore } from 'vuex'; | |||||
| export default createStore({ | |||||
| state: { | |||||
| }, | |||||
| getters: { | |||||
| }, | |||||
| mutations: { | |||||
| }, | |||||
| actions: { | |||||
| }, | |||||
| modules: { | |||||
| }, | |||||
| }); | |||||
| @@ -0,0 +1,5 @@ | |||||
| <template> | |||||
| <div class="about"> | |||||
| <h1>This is an about page</h1> | |||||
| </div> | |||||
| </template> | |||||
| @@ -0,0 +1,18 @@ | |||||
| <template> | |||||
| <div class="home"> | |||||
| <img alt="Vue logo" src="../assets/logo.png"> | |||||
| <HelloWorld msg="Welcome to Your Vue.js + TypeScript App"/> | |||||
| </div> | |||||
| </template> | |||||
| <script lang="ts"> | |||||
| import { defineComponent } from 'vue'; | |||||
| import HelloWorld from '@/components/HelloWorld.vue'; // @ is an alias to /src | |||||
| export default defineComponent({ | |||||
| name: 'HomeView', | |||||
| components: { | |||||
| HelloWorld, | |||||
| }, | |||||
| }); | |||||
| </script> | |||||
| @@ -0,0 +1,13 @@ | |||||
| import { expect } from 'chai'; | |||||
| import { shallowMount } from '@vue/test-utils'; | |||||
| import HelloWorld from '@/components/HelloWorld.vue'; | |||||
| describe('HelloWorld.vue', () => { | |||||
| it('renders props.msg when passed', () => { | |||||
| const msg = 'new message'; | |||||
| const wrapper = shallowMount(HelloWorld, { | |||||
| props: { msg }, | |||||
| }); | |||||
| expect(wrapper.text()).to.include(msg); | |||||
| }); | |||||
| }); | |||||
| @@ -0,0 +1,42 @@ | |||||
| { | |||||
| "compilerOptions": { | |||||
| "target": "esnext", | |||||
| "module": "esnext", | |||||
| "strict": true, | |||||
| "jsx": "preserve", | |||||
| "moduleResolution": "node", | |||||
| "skipLibCheck": true, | |||||
| "esModuleInterop": true, | |||||
| "allowSyntheticDefaultImports": true, | |||||
| "forceConsistentCasingInFileNames": true, | |||||
| "useDefineForClassFields": true, | |||||
| "sourceMap": true, | |||||
| "baseUrl": ".", | |||||
| "types": [ | |||||
| "webpack-env", | |||||
| "mocha", | |||||
| "chai" | |||||
| ], | |||||
| "paths": { | |||||
| "@/*": [ | |||||
| "src/*" | |||||
| ] | |||||
| }, | |||||
| "lib": [ | |||||
| "esnext", | |||||
| "dom", | |||||
| "dom.iterable", | |||||
| "scripthost" | |||||
| ] | |||||
| }, | |||||
| "include": [ | |||||
| "src/**/*.ts", | |||||
| "src/**/*.tsx", | |||||
| "src/**/*.vue", | |||||
| "tests/**/*.ts", | |||||
| "tests/**/*.tsx" | |||||
| ], | |||||
| "exclude": [ | |||||
| "node_modules" | |||||
| ] | |||||
| } | |||||
| @@ -0,0 +1,5 @@ | |||||
| const { defineConfig } = require('@vue/cli-service'); | |||||
| module.exports = defineConfig({ | |||||
| transpileDependencies: true, | |||||
| }); | |||||