├── README.md ├── backend ├── Pipfile ├── Pipfile.lock ├── main.py └── requirements.txt ├── frontend ├── frontend │ ├── .gitignore │ ├── README.md │ ├── babel.config.js │ ├── package-lock.json │ ├── package.json │ ├── public │ │ ├── favicon.ico │ │ └── index.html │ └── src │ │ ├── App.vue │ │ ├── assets │ │ └── logo.png │ │ ├── components │ │ ├── Games.vue │ │ ├── HelloWorld.vue │ │ └── Shark.vue │ │ ├── main.js │ │ └── router │ │ └── index.js └── package-lock.json └── plan.txt /README.md: -------------------------------------------------------------------------------- 1 | # VueJS-Flask-Full-Stack-Application 2 | ## This is a game library full-stack web app using VueJs for Frontend design and Flask for backend server 3 | 4 | Vue is a progressive open-source JavaScript framework for building UI, 5 | 6 | the word "progressive" means its implemented as additional markup to html. it basically a template model bound to a data model. 7 | 8 | If the model is updated the browsers html is updated, that is it reacts to model updates. Vue js in an example of progressive framework. 9 | 10 | Vue is not created by a Big companies such as Google for Angular or Facebook for React; but it was created by an independent software developer called Evan You. 11 | 12 | Comparable to React and Angular, it's much more approachable, and easy to grasb, so beginners can get up and running quickly. 13 | 14 | It's also as powerful as react and angular, so it provides all the features you'll need to create modern front-end applications. 15 | 16 | There are severl Vue version, but the main versions are Vue2 and Vue3. And in this tutprial we will work with Vue2 17 | 18 | >>> https://vuejs.org/v2/guide/index.html 19 | 20 | Vue provides a way to build components that encapsulate state in your javascript in a reactive way to your HTML template using what's called Declarative rendering where you can render data to the browser with straightforward template syntax, it reminds of jinja2 or the django template language with these double curly braces, where you can plug any variables and it gets to be rendered in the DOM, so the same data input will always produce the same output rendered in the DOM. 21 | 22 | FLASK 23 | >>> https://flask.palletsprojects.com/en/2.0.x/ 24 | 25 | Flask is a Python microframework like Pyramid, bottle or cherrypy, and with it we'll build a a RESTful API today, 26 | I also have a tutorial to show you how to create a restful API in Flask in two different ways. 27 | And I have a crash course on Flask, you can check it out if you like 28 | 29 | The good thing about microframeworks like Flask, is we don't have out of the box tools and features like in Django or Turbogears, 30 | so you will have to build everyhting manually which is a great thing for learning and self-improvement as a developer in my opinion. 31 | 32 | Watch the whole video on my YouTube Channel to learn how to create this CRUD router application. 33 | 34 | Thank you for participating. 35 | 36 | BR, 37 | Bek 38 | -------------------------------------------------------------------------------- /backend/Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | url = "https://pypi.org/simple" 3 | verify_ssl = true 4 | name = "pypi" 5 | 6 | [packages] 7 | Flask = "==2.0.1" 8 | Flask-Cors = "==3.0.10" 9 | 10 | [dev-packages] 11 | 12 | [requires] 13 | python_version = "3.9" 14 | -------------------------------------------------------------------------------- /backend/Pipfile.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_meta": { 3 | "hash": { 4 | "sha256": "7c3159c2491d89d1662c141a6d06a23f3517fb7e2137202f11627bf220953ff7" 5 | }, 6 | "pipfile-spec": 6, 7 | "requires": { 8 | "python_version": "3.9" 9 | }, 10 | "sources": [ 11 | { 12 | "name": "pypi", 13 | "url": "https://pypi.org/simple", 14 | "verify_ssl": true 15 | } 16 | ] 17 | }, 18 | "default": { 19 | "click": { 20 | "hashes": [ 21 | "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a", 22 | "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6" 23 | ], 24 | "markers": "python_version >= '3.6'", 25 | "version": "==8.0.1" 26 | }, 27 | "colorama": { 28 | "hashes": [ 29 | "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b", 30 | "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2" 31 | ], 32 | "markers": "platform_system == 'Windows'", 33 | "version": "==0.4.4" 34 | }, 35 | "flask": { 36 | "hashes": [ 37 | "sha256:1c4c257b1892aec1398784c63791cbaa43062f1f7aeb555c4da961b20ee68f55", 38 | "sha256:a6209ca15eb63fc9385f38e452704113d679511d9574d09b2cf9183ae7d20dc9" 39 | ], 40 | "index": "pypi", 41 | "version": "==2.0.1" 42 | }, 43 | "flask-cors": { 44 | "hashes": [ 45 | "sha256:74efc975af1194fc7891ff5cd85b0f7478be4f7f59fe158102e91abb72bb4438", 46 | "sha256:b60839393f3b84a0f3746f6cdca56c1ad7426aa738b70d6c61375857823181de" 47 | ], 48 | "index": "pypi", 49 | "version": "==3.0.10" 50 | }, 51 | "itsdangerous": { 52 | "hashes": [ 53 | "sha256:5174094b9637652bdb841a3029700391451bd092ba3db90600dea710ba28e97c", 54 | "sha256:9e724d68fc22902a1435351f84c3fb8623f303fffcc566a4cb952df8c572cff0" 55 | ], 56 | "markers": "python_version >= '3.6'", 57 | "version": "==2.0.1" 58 | }, 59 | "jinja2": { 60 | "hashes": [ 61 | "sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4", 62 | "sha256:703f484b47a6af502e743c9122595cc812b0271f661722403114f71a79d0f5a4" 63 | ], 64 | "markers": "python_version >= '3.6'", 65 | "version": "==3.0.1" 66 | }, 67 | "markupsafe": { 68 | "hashes": [ 69 | "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298", 70 | "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64", 71 | "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b", 72 | "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567", 73 | "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff", 74 | "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74", 75 | "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35", 76 | "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26", 77 | "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7", 78 | "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75", 79 | "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f", 80 | "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135", 81 | "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8", 82 | "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a", 83 | "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914", 84 | "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18", 85 | "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8", 86 | "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2", 87 | "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d", 88 | "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b", 89 | "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f", 90 | "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb", 91 | "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833", 92 | "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415", 93 | "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902", 94 | "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9", 95 | "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d", 96 | "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066", 97 | "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f", 98 | "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5", 99 | "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94", 100 | "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509", 101 | "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51", 102 | "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872" 103 | ], 104 | "markers": "python_version >= '3.6'", 105 | "version": "==2.0.1" 106 | }, 107 | "six": { 108 | "hashes": [ 109 | "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", 110 | "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" 111 | ], 112 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", 113 | "version": "==1.16.0" 114 | }, 115 | "werkzeug": { 116 | "hashes": [ 117 | "sha256:1de1db30d010ff1af14a009224ec49ab2329ad2cde454c8a708130642d579c42", 118 | "sha256:6c1ec500dcdba0baa27600f6a22f6333d8b662d22027ff9f6202e3367413caa8" 119 | ], 120 | "markers": "python_version >= '3.6'", 121 | "version": "==2.0.1" 122 | } 123 | }, 124 | "develop": {} 125 | } 126 | -------------------------------------------------------------------------------- /backend/main.py: -------------------------------------------------------------------------------- 1 | # @Bek Brace [ Twitter - Dev.to - GitHub ] 2 | # VueJs - Flask Full-Stack Web Application 3 | # bekbrace.com - info@bekbrace.com 4 | # Source Code : Michael Hermann [ mjheaO ] 5 | 6 | from flask import Flask, jsonify, request 7 | from flask_cors import CORS 8 | import uuid 9 | 10 | app = Flask(__name__) 11 | 12 | app.config.from_object(__name__) 13 | 14 | CORS(app, resources={r"/*":{'origins':"*"}}) 15 | # CORS(app, resources={r'/*':{'origins': 'http://localhost:8080',"allow_headers": "Access-Control-Allow-Origin"}}) 16 | 17 | # hello world route 18 | @app.route('/', methods=['GET']) 19 | def greetings(): 20 | return("Hello, world!") 21 | 22 | @app.route('/shark', methods=['GET']) 23 | def shark(): 24 | return("Shark🦈!") 25 | 26 | 27 | GAMES = [ 28 | 29 | { 'id': uuid.uuid4().hex, 30 | 'title':'2k21', 31 | 'genre':'sports', 32 | 'played': True, 33 | }, 34 | { 'id': uuid.uuid4().hex, 35 | 'title':'Evil Within', 36 | 'genre':'horror', 37 | 'played': False, 38 | }, 39 | { 'id': uuid.uuid4().hex, 40 | 'title':'the last of us', 41 | 'genre':'survival', 42 | 'played': True, 43 | }, 44 | { 'id': uuid.uuid4().hex, 45 | 'title':'days gone', 46 | 'genre':'horror/survival', 47 | 'played': False, 48 | }, 49 | { 'id': uuid.uuid4().hex, 50 | 'title':'mario', 51 | 'genre':'retro', 52 | 'played': True, 53 | } 54 | 55 | ] 56 | 57 | # The GET and POST route handler 58 | @app.route('/games', methods=['GET', 'POST']) 59 | def all_games(): 60 | response_object = {'status':'success'} 61 | if request.method == "POST": 62 | post_data = request.get_json() 63 | GAMES.append({ 64 | 'id' : uuid.uuid4().hex, 65 | 'title': post_data.get('title'), 66 | 'genre': post_data.get('genre'), 67 | 'played': post_data.get('played')}) 68 | response_object['message'] = 'Game Added!' 69 | else: 70 | response_object['games'] = GAMES 71 | return jsonify(response_object) 72 | 73 | 74 | #The PUT and DELETE route handler 75 | @app.route('/games/', methods =['PUT', 'DELETE']) 76 | def single_game(game_id): 77 | response_object = {'status':'success'} 78 | if request.method == "PUT": 79 | post_data = request.get_json() 80 | remove_game(game_id) 81 | GAMES.append({ 82 | 'id' : uuid.uuid4().hex, 83 | 'title': post_data.get('title'), 84 | 'genre': post_data.get('genre'), 85 | 'played': post_data.get('played') 86 | }) 87 | response_object['message'] = 'Game Updated!' 88 | if request.method == "DELETE": 89 | remove_game(game_id) 90 | response_object['message'] = 'Game removed!' 91 | return jsonify(response_object) 92 | 93 | 94 | # Removing the game to update / delete 95 | def remove_game(game_id): 96 | for game in GAMES: 97 | if game['id'] == game_id: 98 | GAMES.remove(game) 99 | return True 100 | return False 101 | 102 | if __name__ == "__main__": 103 | app.run(debug=True) 104 | 105 | -------------------------------------------------------------------------------- /backend/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask == 2.0.1 2 | Flask-Cors == 3.0.10 3 | 4 | -------------------------------------------------------------------------------- /frontend/frontend/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /frontend/frontend/README.md: -------------------------------------------------------------------------------- 1 | # frontend 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Lints and fixes files 19 | ``` 20 | npm run lint 21 | ``` 22 | 23 | ### Customize configuration 24 | See [Configuration Reference](https://cli.vuejs.org/config/). 25 | -------------------------------------------------------------------------------- /frontend/frontend/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"], 3 | }; 4 | -------------------------------------------------------------------------------- /frontend/frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "axios": "^0.21.1", 12 | "bootstrap": "^4.6.0", 13 | "core-js": "^3.6.5", 14 | "vue": "^2.6.11", 15 | "vue-router": "^3.2.0" 16 | }, 17 | "devDependencies": { 18 | "@vue/cli-plugin-babel": "~4.5.0", 19 | "@vue/cli-plugin-eslint": "~4.5.0", 20 | "@vue/cli-plugin-router": "~4.5.0", 21 | "@vue/cli-service": "~4.5.0", 22 | "@vue/eslint-config-prettier": "^6.0.0", 23 | "babel-eslint": "^10.1.0", 24 | "eslint": "^6.7.2", 25 | "eslint-plugin-prettier": "^3.3.1", 26 | "eslint-plugin-vue": "^6.2.2", 27 | "prettier": "^2.2.1", 28 | "vue-template-compiler": "^2.6.11" 29 | }, 30 | "eslintConfig": { 31 | "root": true, 32 | "env": { 33 | "node": true 34 | }, 35 | "extends": [ 36 | "plugin:vue/essential", 37 | "eslint:recommended", 38 | "@vue/prettier" 39 | ], 40 | "parserOptions": { 41 | "parser": "babel-eslint" 42 | }, 43 | "rules": {} 44 | }, 45 | "browserslist": [ 46 | "> 1%", 47 | "last 2 versions", 48 | "not dead" 49 | ] 50 | } 51 | -------------------------------------------------------------------------------- /frontend/frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BekBrace/VueJS-Flask-Full-Stack-Application/809a99078100be32eb604531a41ae3dcee4c0b4a/frontend/frontend/public/favicon.ico -------------------------------------------------------------------------------- /frontend/frontend/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <%= htmlWebpackPlugin.options.title %> 9 | 10 | 11 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /frontend/frontend/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /frontend/frontend/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BekBrace/VueJS-Flask-Full-Stack-Application/809a99078100be32eb604531a41ae3dcee4c0b4a/frontend/frontend/src/assets/logo.png -------------------------------------------------------------------------------- /frontend/frontend/src/components/Games.vue: -------------------------------------------------------------------------------- 1 | // @Bek Brace [ Twitter - Dev.to - GitHub ] 2 | // bekbrace.com - info@bekbrace.com 3 | // Source Code : Michael Hermann [ mjheaO ] 4 | 5 | 10 | 11 | 157 | 158 | 159 | 160 | -------------------------------------------------------------------------------- /frontend/frontend/src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 96 | 97 | 105 | 106 | 107 | 123 | -------------------------------------------------------------------------------- /frontend/frontend/src/components/Shark.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/frontend/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import App from "./App.vue"; 3 | import router from "./router"; 4 | // install bootstrap first 5 | import 'bootstrap/dist/css/bootstrap.css'; 6 | // Importing the bootstrapvue library 7 | import BootstrapVue from 'bootstrap-vue'; 8 | 9 | 10 | Vue.config.productionTip = false; 11 | Vue.use(BootstrapVue) 12 | 13 | new Vue({ 14 | router, 15 | render: (h) => h(App), 16 | }).$mount("#app"); 17 | -------------------------------------------------------------------------------- /frontend/frontend/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import VueRouter from "vue-router"; 3 | import Shark from '../components/Shark.vue' 4 | import Games from '../components/Games.vue' 5 | 6 | 7 | Vue.use(VueRouter); 8 | 9 | const routes = [ 10 | { 11 | path : '/shark', 12 | name : 'Shark', 13 | component : Shark, 14 | }, 15 | { 16 | path : '/games', 17 | name : 'Games', 18 | component : Games, 19 | } 20 | ]; 21 | 22 | const router = new VueRouter({ 23 | mode: "history", 24 | base: process.env.BASE_URL, 25 | routes, 26 | }); 27 | 28 | export default router; 29 | -------------------------------------------------------------------------------- /frontend/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": true, 3 | "lockfileVersion": 1, 4 | "dependencies": { 5 | "@babel/code-frame": { 6 | "version": "7.12.11", 7 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", 8 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", 9 | "requires": { 10 | "@babel/highlight": "^7.10.4" 11 | } 12 | }, 13 | "@babel/helper-validator-identifier": { 14 | "version": "7.14.8", 15 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz", 16 | "integrity": "sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==" 17 | }, 18 | "@babel/highlight": { 19 | "version": "7.14.5", 20 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", 21 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", 22 | "requires": { 23 | "@babel/helper-validator-identifier": "^7.14.5", 24 | "chalk": "^2.0.0", 25 | "js-tokens": "^4.0.0" 26 | }, 27 | "dependencies": { 28 | "chalk": { 29 | "version": "2.4.2", 30 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 31 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 32 | "requires": { 33 | "ansi-styles": "^3.2.1", 34 | "escape-string-regexp": "^1.0.5", 35 | "supports-color": "^5.3.0" 36 | } 37 | }, 38 | "escape-string-regexp": { 39 | "version": "1.0.5", 40 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 41 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 42 | } 43 | } 44 | }, 45 | "@eslint/eslintrc": { 46 | "version": "0.4.3", 47 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", 48 | "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", 49 | "requires": { 50 | "ajv": "^6.12.4", 51 | "debug": "^4.1.1", 52 | "espree": "^7.3.0", 53 | "globals": "^13.9.0", 54 | "ignore": "^4.0.6", 55 | "import-fresh": "^3.2.1", 56 | "js-yaml": "^3.13.1", 57 | "minimatch": "^3.0.4", 58 | "strip-json-comments": "^3.1.1" 59 | } 60 | }, 61 | "@humanwhocodes/config-array": { 62 | "version": "0.5.0", 63 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", 64 | "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", 65 | "requires": { 66 | "@humanwhocodes/object-schema": "^1.2.0", 67 | "debug": "^4.1.1", 68 | "minimatch": "^3.0.4" 69 | } 70 | }, 71 | "@humanwhocodes/object-schema": { 72 | "version": "1.2.0", 73 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", 74 | "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" 75 | }, 76 | "@nuxt/opencollective": { 77 | "version": "0.3.2", 78 | "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.3.2.tgz", 79 | "integrity": "sha512-XG7rUdXG9fcafu9KTDIYjJSkRO38EwjlKYIb5TQ/0WDbiTUTtUtgncMscKOYzfsY86kGs05pAuMOR+3Fi0aN3A==", 80 | "requires": { 81 | "chalk": "^4.1.0", 82 | "consola": "^2.15.0", 83 | "node-fetch": "^2.6.1" 84 | } 85 | }, 86 | "acorn": { 87 | "version": "7.4.1", 88 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 89 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" 90 | }, 91 | "acorn-jsx": { 92 | "version": "5.3.2", 93 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 94 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" 95 | }, 96 | "ajv": { 97 | "version": "6.12.6", 98 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 99 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 100 | "requires": { 101 | "fast-deep-equal": "^3.1.1", 102 | "fast-json-stable-stringify": "^2.0.0", 103 | "json-schema-traverse": "^0.4.1", 104 | "uri-js": "^4.2.2" 105 | } 106 | }, 107 | "ansi-colors": { 108 | "version": "4.1.1", 109 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 110 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" 111 | }, 112 | "ansi-regex": { 113 | "version": "5.0.0", 114 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 115 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" 116 | }, 117 | "ansi-styles": { 118 | "version": "3.2.1", 119 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 120 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 121 | "requires": { 122 | "color-convert": "^1.9.0" 123 | } 124 | }, 125 | "argparse": { 126 | "version": "1.0.10", 127 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 128 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 129 | "requires": { 130 | "sprintf-js": "~1.0.2" 131 | } 132 | }, 133 | "astral-regex": { 134 | "version": "2.0.0", 135 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", 136 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" 137 | }, 138 | "balanced-match": { 139 | "version": "1.0.2", 140 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 141 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 142 | }, 143 | "bootstrap": { 144 | "version": "4.6.0", 145 | "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz", 146 | "integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw==" 147 | }, 148 | "bootstrap-vue": { 149 | "version": "2.21.2", 150 | "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.21.2.tgz", 151 | "integrity": "sha512-0Exe+4MZysqhZNXIKf4TzkvXaupxh9EHsoCRez0o5Dc0J7rlafayOEwql63qXv74CgZO8E4U8ugRNJko1vMvNw==", 152 | "requires": { 153 | "@nuxt/opencollective": "^0.3.2", 154 | "bootstrap": ">=4.5.3 <5.0.0", 155 | "popper.js": "^1.16.1", 156 | "portal-vue": "^2.1.7", 157 | "vue-functional-data-merge": "^3.1.0" 158 | } 159 | }, 160 | "brace-expansion": { 161 | "version": "1.1.11", 162 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 163 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 164 | "requires": { 165 | "balanced-match": "^1.0.0", 166 | "concat-map": "0.0.1" 167 | } 168 | }, 169 | "callsites": { 170 | "version": "3.1.0", 171 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 172 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" 173 | }, 174 | "chalk": { 175 | "version": "4.1.1", 176 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", 177 | "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", 178 | "requires": { 179 | "ansi-styles": "^4.1.0", 180 | "supports-color": "^7.1.0" 181 | }, 182 | "dependencies": { 183 | "ansi-styles": { 184 | "version": "4.3.0", 185 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 186 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 187 | "requires": { 188 | "color-convert": "^2.0.1" 189 | } 190 | }, 191 | "color-convert": { 192 | "version": "2.0.1", 193 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 194 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 195 | "requires": { 196 | "color-name": "~1.1.4" 197 | } 198 | }, 199 | "color-name": { 200 | "version": "1.1.4", 201 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 202 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 203 | }, 204 | "has-flag": { 205 | "version": "4.0.0", 206 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 207 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 208 | }, 209 | "supports-color": { 210 | "version": "7.2.0", 211 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 212 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 213 | "requires": { 214 | "has-flag": "^4.0.0" 215 | } 216 | } 217 | } 218 | }, 219 | "color-convert": { 220 | "version": "1.9.3", 221 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 222 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 223 | "requires": { 224 | "color-name": "1.1.3" 225 | } 226 | }, 227 | "color-name": { 228 | "version": "1.1.3", 229 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 230 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 231 | }, 232 | "concat-map": { 233 | "version": "0.0.1", 234 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 235 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 236 | }, 237 | "consola": { 238 | "version": "2.15.3", 239 | "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", 240 | "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" 241 | }, 242 | "cross-spawn": { 243 | "version": "7.0.3", 244 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 245 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 246 | "requires": { 247 | "path-key": "^3.1.0", 248 | "shebang-command": "^2.0.0", 249 | "which": "^2.0.1" 250 | } 251 | }, 252 | "debug": { 253 | "version": "4.3.2", 254 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 255 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 256 | "requires": { 257 | "ms": "2.1.2" 258 | } 259 | }, 260 | "deep-is": { 261 | "version": "0.1.3", 262 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 263 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" 264 | }, 265 | "doctrine": { 266 | "version": "3.0.0", 267 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 268 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 269 | "requires": { 270 | "esutils": "^2.0.2" 271 | } 272 | }, 273 | "emoji-regex": { 274 | "version": "8.0.0", 275 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 276 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 277 | }, 278 | "enquirer": { 279 | "version": "2.3.6", 280 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 281 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 282 | "requires": { 283 | "ansi-colors": "^4.1.1" 284 | } 285 | }, 286 | "escape-string-regexp": { 287 | "version": "4.0.0", 288 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 289 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" 290 | }, 291 | "eslint": { 292 | "version": "7.31.0", 293 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz", 294 | "integrity": "sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==", 295 | "requires": { 296 | "@babel/code-frame": "7.12.11", 297 | "@eslint/eslintrc": "^0.4.3", 298 | "@humanwhocodes/config-array": "^0.5.0", 299 | "ajv": "^6.10.0", 300 | "chalk": "^4.0.0", 301 | "cross-spawn": "^7.0.2", 302 | "debug": "^4.0.1", 303 | "doctrine": "^3.0.0", 304 | "enquirer": "^2.3.5", 305 | "escape-string-regexp": "^4.0.0", 306 | "eslint-scope": "^5.1.1", 307 | "eslint-utils": "^2.1.0", 308 | "eslint-visitor-keys": "^2.0.0", 309 | "espree": "^7.3.1", 310 | "esquery": "^1.4.0", 311 | "esutils": "^2.0.2", 312 | "fast-deep-equal": "^3.1.3", 313 | "file-entry-cache": "^6.0.1", 314 | "functional-red-black-tree": "^1.0.1", 315 | "glob-parent": "^5.1.2", 316 | "globals": "^13.6.0", 317 | "ignore": "^4.0.6", 318 | "import-fresh": "^3.0.0", 319 | "imurmurhash": "^0.1.4", 320 | "is-glob": "^4.0.0", 321 | "js-yaml": "^3.13.1", 322 | "json-stable-stringify-without-jsonify": "^1.0.1", 323 | "levn": "^0.4.1", 324 | "lodash.merge": "^4.6.2", 325 | "minimatch": "^3.0.4", 326 | "natural-compare": "^1.4.0", 327 | "optionator": "^0.9.1", 328 | "progress": "^2.0.0", 329 | "regexpp": "^3.1.0", 330 | "semver": "^7.2.1", 331 | "strip-ansi": "^6.0.0", 332 | "strip-json-comments": "^3.1.0", 333 | "table": "^6.0.9", 334 | "text-table": "^0.2.0", 335 | "v8-compile-cache": "^2.0.3" 336 | } 337 | }, 338 | "eslint-plugin-vue": { 339 | "version": "7.14.0", 340 | "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.14.0.tgz", 341 | "integrity": "sha512-IW5A2Td0wEWjFGaGVEO24JNXa8cVFzAQTXrYv/Vu3zyDVS9sjwOpZY0iqub7FOkT2AK3Imtw4U4wg48pP9oWww==", 342 | "requires": { 343 | "eslint-utils": "^2.1.0", 344 | "natural-compare": "^1.4.0", 345 | "semver": "^6.3.0", 346 | "vue-eslint-parser": "^7.9.0" 347 | }, 348 | "dependencies": { 349 | "semver": { 350 | "version": "6.3.0", 351 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 352 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" 353 | } 354 | } 355 | }, 356 | "eslint-scope": { 357 | "version": "5.1.1", 358 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 359 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 360 | "requires": { 361 | "esrecurse": "^4.3.0", 362 | "estraverse": "^4.1.1" 363 | } 364 | }, 365 | "eslint-utils": { 366 | "version": "2.1.0", 367 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 368 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 369 | "requires": { 370 | "eslint-visitor-keys": "^1.1.0" 371 | }, 372 | "dependencies": { 373 | "eslint-visitor-keys": { 374 | "version": "1.3.0", 375 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 376 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" 377 | } 378 | } 379 | }, 380 | "eslint-visitor-keys": { 381 | "version": "2.1.0", 382 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 383 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" 384 | }, 385 | "espree": { 386 | "version": "7.3.1", 387 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", 388 | "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", 389 | "requires": { 390 | "acorn": "^7.4.0", 391 | "acorn-jsx": "^5.3.1", 392 | "eslint-visitor-keys": "^1.3.0" 393 | }, 394 | "dependencies": { 395 | "eslint-visitor-keys": { 396 | "version": "1.3.0", 397 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 398 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" 399 | } 400 | } 401 | }, 402 | "esprima": { 403 | "version": "4.0.1", 404 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 405 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" 406 | }, 407 | "esquery": { 408 | "version": "1.4.0", 409 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 410 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 411 | "requires": { 412 | "estraverse": "^5.1.0" 413 | }, 414 | "dependencies": { 415 | "estraverse": { 416 | "version": "5.2.0", 417 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 418 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" 419 | } 420 | } 421 | }, 422 | "esrecurse": { 423 | "version": "4.3.0", 424 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 425 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 426 | "requires": { 427 | "estraverse": "^5.2.0" 428 | }, 429 | "dependencies": { 430 | "estraverse": { 431 | "version": "5.2.0", 432 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 433 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" 434 | } 435 | } 436 | }, 437 | "estraverse": { 438 | "version": "4.3.0", 439 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 440 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" 441 | }, 442 | "esutils": { 443 | "version": "2.0.3", 444 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 445 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" 446 | }, 447 | "fast-deep-equal": { 448 | "version": "3.1.3", 449 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 450 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 451 | }, 452 | "fast-json-stable-stringify": { 453 | "version": "2.1.0", 454 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 455 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 456 | }, 457 | "fast-levenshtein": { 458 | "version": "2.0.6", 459 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 460 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" 461 | }, 462 | "file-entry-cache": { 463 | "version": "6.0.1", 464 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 465 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 466 | "requires": { 467 | "flat-cache": "^3.0.4" 468 | } 469 | }, 470 | "flat-cache": { 471 | "version": "3.0.4", 472 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 473 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 474 | "requires": { 475 | "flatted": "^3.1.0", 476 | "rimraf": "^3.0.2" 477 | } 478 | }, 479 | "flatted": { 480 | "version": "3.2.1", 481 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", 482 | "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==" 483 | }, 484 | "fs.realpath": { 485 | "version": "1.0.0", 486 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 487 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 488 | }, 489 | "functional-red-black-tree": { 490 | "version": "1.0.1", 491 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 492 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" 493 | }, 494 | "glob": { 495 | "version": "7.1.7", 496 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 497 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 498 | "requires": { 499 | "fs.realpath": "^1.0.0", 500 | "inflight": "^1.0.4", 501 | "inherits": "2", 502 | "minimatch": "^3.0.4", 503 | "once": "^1.3.0", 504 | "path-is-absolute": "^1.0.0" 505 | } 506 | }, 507 | "glob-parent": { 508 | "version": "5.1.2", 509 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 510 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 511 | "requires": { 512 | "is-glob": "^4.0.1" 513 | } 514 | }, 515 | "globals": { 516 | "version": "13.10.0", 517 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", 518 | "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", 519 | "requires": { 520 | "type-fest": "^0.20.2" 521 | } 522 | }, 523 | "has-flag": { 524 | "version": "3.0.0", 525 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 526 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 527 | }, 528 | "ignore": { 529 | "version": "4.0.6", 530 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 531 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" 532 | }, 533 | "import-fresh": { 534 | "version": "3.3.0", 535 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 536 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 537 | "requires": { 538 | "parent-module": "^1.0.0", 539 | "resolve-from": "^4.0.0" 540 | } 541 | }, 542 | "imurmurhash": { 543 | "version": "0.1.4", 544 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 545 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" 546 | }, 547 | "inflight": { 548 | "version": "1.0.6", 549 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 550 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 551 | "requires": { 552 | "once": "^1.3.0", 553 | "wrappy": "1" 554 | } 555 | }, 556 | "inherits": { 557 | "version": "2.0.4", 558 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 559 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 560 | }, 561 | "is-extglob": { 562 | "version": "2.1.1", 563 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 564 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 565 | }, 566 | "is-fullwidth-code-point": { 567 | "version": "3.0.0", 568 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 569 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 570 | }, 571 | "is-glob": { 572 | "version": "4.0.1", 573 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 574 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 575 | "requires": { 576 | "is-extglob": "^2.1.1" 577 | } 578 | }, 579 | "isexe": { 580 | "version": "2.0.0", 581 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 582 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 583 | }, 584 | "js-tokens": { 585 | "version": "4.0.0", 586 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 587 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 588 | }, 589 | "js-yaml": { 590 | "version": "3.14.1", 591 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 592 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 593 | "requires": { 594 | "argparse": "^1.0.7", 595 | "esprima": "^4.0.0" 596 | } 597 | }, 598 | "json-schema-traverse": { 599 | "version": "0.4.1", 600 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 601 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 602 | }, 603 | "json-stable-stringify-without-jsonify": { 604 | "version": "1.0.1", 605 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 606 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" 607 | }, 608 | "levn": { 609 | "version": "0.4.1", 610 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 611 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 612 | "requires": { 613 | "prelude-ls": "^1.2.1", 614 | "type-check": "~0.4.0" 615 | } 616 | }, 617 | "lodash": { 618 | "version": "4.17.21", 619 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 620 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 621 | }, 622 | "lodash.clonedeep": { 623 | "version": "4.5.0", 624 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", 625 | "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" 626 | }, 627 | "lodash.merge": { 628 | "version": "4.6.2", 629 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 630 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" 631 | }, 632 | "lodash.truncate": { 633 | "version": "4.4.2", 634 | "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", 635 | "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" 636 | }, 637 | "lru-cache": { 638 | "version": "6.0.0", 639 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 640 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 641 | "requires": { 642 | "yallist": "^4.0.0" 643 | } 644 | }, 645 | "minimatch": { 646 | "version": "3.0.4", 647 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 648 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 649 | "requires": { 650 | "brace-expansion": "^1.1.7" 651 | } 652 | }, 653 | "ms": { 654 | "version": "2.1.2", 655 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 656 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 657 | }, 658 | "natural-compare": { 659 | "version": "1.4.0", 660 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 661 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" 662 | }, 663 | "node-fetch": { 664 | "version": "2.6.1", 665 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 666 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" 667 | }, 668 | "once": { 669 | "version": "1.4.0", 670 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 671 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 672 | "requires": { 673 | "wrappy": "1" 674 | } 675 | }, 676 | "optionator": { 677 | "version": "0.9.1", 678 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 679 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 680 | "requires": { 681 | "deep-is": "^0.1.3", 682 | "fast-levenshtein": "^2.0.6", 683 | "levn": "^0.4.1", 684 | "prelude-ls": "^1.2.1", 685 | "type-check": "^0.4.0", 686 | "word-wrap": "^1.2.3" 687 | } 688 | }, 689 | "parent-module": { 690 | "version": "1.0.1", 691 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 692 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 693 | "requires": { 694 | "callsites": "^3.0.0" 695 | } 696 | }, 697 | "path-is-absolute": { 698 | "version": "1.0.1", 699 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 700 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 701 | }, 702 | "path-key": { 703 | "version": "3.1.1", 704 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 705 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" 706 | }, 707 | "popper.js": { 708 | "version": "1.16.1", 709 | "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", 710 | "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" 711 | }, 712 | "portal-vue": { 713 | "version": "2.1.7", 714 | "resolved": "https://registry.npmjs.org/portal-vue/-/portal-vue-2.1.7.tgz", 715 | "integrity": "sha512-+yCno2oB3xA7irTt0EU5Ezw22L2J51uKAacE/6hMPMoO/mx3h4rXFkkBkT4GFsMDv/vEe8TNKC3ujJJ0PTwb6g==" 716 | }, 717 | "prelude-ls": { 718 | "version": "1.2.1", 719 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 720 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" 721 | }, 722 | "progress": { 723 | "version": "2.0.3", 724 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 725 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" 726 | }, 727 | "punycode": { 728 | "version": "2.1.1", 729 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 730 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 731 | }, 732 | "regexpp": { 733 | "version": "3.2.0", 734 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 735 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" 736 | }, 737 | "require-from-string": { 738 | "version": "2.0.2", 739 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 740 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" 741 | }, 742 | "resolve-from": { 743 | "version": "4.0.0", 744 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 745 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" 746 | }, 747 | "rimraf": { 748 | "version": "3.0.2", 749 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 750 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 751 | "requires": { 752 | "glob": "^7.1.3" 753 | } 754 | }, 755 | "semver": { 756 | "version": "7.3.5", 757 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 758 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 759 | "requires": { 760 | "lru-cache": "^6.0.0" 761 | } 762 | }, 763 | "shebang-command": { 764 | "version": "2.0.0", 765 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 766 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 767 | "requires": { 768 | "shebang-regex": "^3.0.0" 769 | } 770 | }, 771 | "shebang-regex": { 772 | "version": "3.0.0", 773 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 774 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" 775 | }, 776 | "slice-ansi": { 777 | "version": "4.0.0", 778 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", 779 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", 780 | "requires": { 781 | "ansi-styles": "^4.0.0", 782 | "astral-regex": "^2.0.0", 783 | "is-fullwidth-code-point": "^3.0.0" 784 | }, 785 | "dependencies": { 786 | "ansi-styles": { 787 | "version": "4.3.0", 788 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 789 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 790 | "requires": { 791 | "color-convert": "^2.0.1" 792 | } 793 | }, 794 | "color-convert": { 795 | "version": "2.0.1", 796 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 797 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 798 | "requires": { 799 | "color-name": "~1.1.4" 800 | } 801 | }, 802 | "color-name": { 803 | "version": "1.1.4", 804 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 805 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 806 | } 807 | } 808 | }, 809 | "sprintf-js": { 810 | "version": "1.0.3", 811 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 812 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" 813 | }, 814 | "string-width": { 815 | "version": "4.2.2", 816 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", 817 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", 818 | "requires": { 819 | "emoji-regex": "^8.0.0", 820 | "is-fullwidth-code-point": "^3.0.0", 821 | "strip-ansi": "^6.0.0" 822 | } 823 | }, 824 | "strip-ansi": { 825 | "version": "6.0.0", 826 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 827 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 828 | "requires": { 829 | "ansi-regex": "^5.0.0" 830 | } 831 | }, 832 | "strip-json-comments": { 833 | "version": "3.1.1", 834 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 835 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" 836 | }, 837 | "supports-color": { 838 | "version": "5.5.0", 839 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 840 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 841 | "requires": { 842 | "has-flag": "^3.0.0" 843 | } 844 | }, 845 | "table": { 846 | "version": "6.7.1", 847 | "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", 848 | "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", 849 | "requires": { 850 | "ajv": "^8.0.1", 851 | "lodash.clonedeep": "^4.5.0", 852 | "lodash.truncate": "^4.4.2", 853 | "slice-ansi": "^4.0.0", 854 | "string-width": "^4.2.0", 855 | "strip-ansi": "^6.0.0" 856 | }, 857 | "dependencies": { 858 | "ajv": { 859 | "version": "8.6.2", 860 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", 861 | "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", 862 | "requires": { 863 | "fast-deep-equal": "^3.1.1", 864 | "json-schema-traverse": "^1.0.0", 865 | "require-from-string": "^2.0.2", 866 | "uri-js": "^4.2.2" 867 | } 868 | }, 869 | "json-schema-traverse": { 870 | "version": "1.0.0", 871 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 872 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" 873 | } 874 | } 875 | }, 876 | "text-table": { 877 | "version": "0.2.0", 878 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 879 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" 880 | }, 881 | "type-check": { 882 | "version": "0.4.0", 883 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 884 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 885 | "requires": { 886 | "prelude-ls": "^1.2.1" 887 | } 888 | }, 889 | "type-fest": { 890 | "version": "0.20.2", 891 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 892 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" 893 | }, 894 | "uri-js": { 895 | "version": "4.4.1", 896 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 897 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 898 | "requires": { 899 | "punycode": "^2.1.0" 900 | } 901 | }, 902 | "v8-compile-cache": { 903 | "version": "2.3.0", 904 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 905 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" 906 | }, 907 | "vue-eslint-parser": { 908 | "version": "7.10.0", 909 | "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.10.0.tgz", 910 | "integrity": "sha512-7tc/ewS9Vq9Bn741pvpg8op2fWJPH3k32aL+jcIcWGCTzh/zXSdh7pZ5FV3W2aJancP9+ftPAv292zY5T5IPCg==", 911 | "requires": { 912 | "debug": "^4.1.1", 913 | "eslint-scope": "^5.1.1", 914 | "eslint-visitor-keys": "^1.1.0", 915 | "espree": "^6.2.1", 916 | "esquery": "^1.4.0", 917 | "lodash": "^4.17.21", 918 | "semver": "^6.3.0" 919 | }, 920 | "dependencies": { 921 | "eslint-visitor-keys": { 922 | "version": "1.3.0", 923 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 924 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" 925 | }, 926 | "espree": { 927 | "version": "6.2.1", 928 | "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", 929 | "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", 930 | "requires": { 931 | "acorn": "^7.1.1", 932 | "acorn-jsx": "^5.2.0", 933 | "eslint-visitor-keys": "^1.1.0" 934 | } 935 | }, 936 | "semver": { 937 | "version": "6.3.0", 938 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 939 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" 940 | } 941 | } 942 | }, 943 | "vue-functional-data-merge": { 944 | "version": "3.1.0", 945 | "resolved": "https://registry.npmjs.org/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz", 946 | "integrity": "sha512-leT4kdJVQyeZNY1kmnS1xiUlQ9z1B/kdBFCILIjYYQDqZgLqCLa0UhjSSeRX6c3mUe6U5qYeM8LrEqkHJ1B4LA==" 947 | }, 948 | "which": { 949 | "version": "2.0.2", 950 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 951 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 952 | "requires": { 953 | "isexe": "^2.0.0" 954 | } 955 | }, 956 | "word-wrap": { 957 | "version": "1.2.3", 958 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 959 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" 960 | }, 961 | "wrappy": { 962 | "version": "1.0.2", 963 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 964 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 965 | }, 966 | "yallist": { 967 | "version": "4.0.0", 968 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 969 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 970 | } 971 | } 972 | } 973 | -------------------------------------------------------------------------------- /plan.txt: -------------------------------------------------------------------------------- 1 | Vue-Flask SPA Plan 2 | ------------------ 3 | 1 Connect UI front-end app to Flask back-end server. 4 | 2 Develop a RESTful API with Flask. 5 | 3 Use Vue router to create routes. 6 | 4 Bootstrap for styling and for 2 modals. 7 | 8 | Application tools: 9 | ----------------- 10 | Vue v2.6.11 11 | Vue CLI v4.5.11 12 | Node v15.7.0 13 | npm v7.4.3 14 | Flask v1.1.2 15 | Python v3.9. 16 | --------------------------------------------------------------------------------