mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-10-30 17:53:31 -04:00 
			
		
		
		
	Import Error Hotfix (#148)
* Changed uvicorn port to 80 * Changed port in docker-compose to match dockerfile * Readded environment variables in docker-compose * production image rework * Use opengraph metadata to make basic recipe cards when full recipe metadata is not available * fixed instrucitons on parse * add last_recipe * automated testing * roadmap update * Sqlite (#75) * file structure * auto-test * take 2 * refactor ap scheduler and startup process * fixed scraper error * database abstraction * database abstraction * port recipes over to new schema * meal migration * start settings migration * finale mongo port * backup improvements * migration imports to new DB structure * unused import cleanup * docs strings * settings and theme import logic * cleanup * fixed tinydb error * requirements * fuzzy search * remove scratch file * sqlalchemy models * improved search ui * recipe models almost done * sql modal population * del scratch * rewrite database model mixins * mostly grabage * recipe updates * working sqllite * remove old files and reorganize * final cleanup Co-authored-by: Hayden <hay-kot@pm.me> * Backup card (#78) * backup / import dialog * upgrade to new tag method * New import card * rename settings.py to app_config.py * migrate to poetry for development * fix failing test Co-authored-by: Hayden <hay-kot@pm.me> * added mkdocs to docker-compose * Translations (#72) * Translations + danish * changed back proxy target to use ENV * Resolved more merge conflicts * Removed test in translation * Documentation of translations * Updated translations * removed old packages Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com> * fail to start bug fixes * feature: prep/cook/total time slots (#80) Co-authored-by: Hayden <hay-kot@pm.me> * missing bind attributes * Bug fixes (#81) * fix: url remains after succesful import * docs: changelog + update todos * arm image * arm compose * compose updates * update poetry * arm support Co-authored-by: Hayden <hay-kot@pm.me> * dockerfile hotfix * dockerfile hotfix * Version Release Final Touches (#84) * Remove slim * bug: opacity issues * bug: startup failure with no database * ci/cd on dev branch * formatting * v0.1.0 documentation Co-authored-by: Hayden <hay-kot@pm.me> * db init hotfix * bug: fix crash in mongo * fix mongo bug * fixed version notifier * finale changelog * Dropping Mongo From Dev Branch (#89) * Fix link to Docker Hub Found an extra s. DESTROYED it. * initial pass * second pass cleanup * backup card framework * backup card functionality * translation * upload button vile creation * Release v0.1.0 Candidate (#85) * Changed uvicorn port to 80 * Changed port in docker-compose to match dockerfile * Readded environment variables in docker-compose * production image rework * Use opengraph metadata to make basic recipe cards when full recipe metadata is not available * fixed instrucitons on parse * add last_recipe * automated testing * roadmap update * Sqlite (#75) * file structure * auto-test * take 2 * refactor ap scheduler and startup process * fixed scraper error * database abstraction * database abstraction * port recipes over to new schema * meal migration * start settings migration * finale mongo port * backup improvements * migration imports to new DB structure * unused import cleanup * docs strings * settings and theme import logic * cleanup * fixed tinydb error * requirements * fuzzy search * remove scratch file * sqlalchemy models * improved search ui * recipe models almost done * sql modal population * del scratch * rewrite database model mixins * mostly grabage * recipe updates * working sqllite * remove old files and reorganize * final cleanup Co-authored-by: Hayden <hay-kot@pm.me> * Backup card (#78) * backup / import dialog * upgrade to new tag method * New import card * rename settings.py to app_config.py * migrate to poetry for development * fix failing test Co-authored-by: Hayden <hay-kot@pm.me> * added mkdocs to docker-compose * Translations (#72) * Translations + danish * changed back proxy target to use ENV * Resolved more merge conflicts * Removed test in translation * Documentation of translations * Updated translations * removed old packages Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com> * fail to start bug fixes * feature: prep/cook/total time slots (#80) Co-authored-by: Hayden <hay-kot@pm.me> * missing bind attributes * Bug fixes (#81) * fix: url remains after succesful import * docs: changelog + update todos * arm image * arm compose * compose updates * update poetry * arm support Co-authored-by: Hayden <hay-kot@pm.me> * dockerfile hotfix * dockerfile hotfix * Version Release Final Touches (#84) * Remove slim * bug: opacity issues * bug: startup failure with no database * ci/cd on dev branch * formatting * v0.1.0 documentation Co-authored-by: Hayden <hay-kot@pm.me> * db init hotfix * bug: fix crash in mongo * fix mongo bug * fixed version notifier * finale changelog Co-authored-by: kentora <=> Co-authored-by: Hayden <hay-kot@pm.me> Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com> Co-authored-by: kentora <kentora@kentora.dk> * build container * webscraper hotfix * dev bug: change data location to prevent reloads * api docs * api docs bug * workflow update Co-authored-by: David Young <davidy@funkypenguin.co.nz> Co-authored-by: Hayden <hay-kot@pm.me> Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com> Co-authored-by: kentora <kentora@kentora.dk> * Add French Translation (#93) * New tests (#94) * dev-bug: fixed vscode freezes * test: refactor database init to support tests Co-authored-by: Hayden <hay-kot@pm.me> * Mealplan CRUD Tests (#95) * dev-bug: fixed vscode freezes * test: refactor database init to support tests * mealplan CRUD testing Co-authored-by: Hayden <hay-kot@pm.me> * Fix typos (#96) * Settings, Themes and Migration Route Tests (#100) * dev-bug: fixed vscode freezes * test: refactor database init to support tests * mealplan CRUD testing * restructure test folder * git attributes * tests: migration, settings, theme routes testing Co-authored-by: Hayden <hay-kot@pm.me> * Refactor + New Docker File (#105) * dev-bug: fixed vscode freezes * test: refactor database init to support tests * mealplan CRUD testing * restructure test folder * git attributes * tests: migration, settings, theme routes testing * docker-file shrink * rebuild * refactor: moving directories around * adding funding Co-authored-by: Hayden <hay-kot@pm.me> * Meal planner improvements (#107) * dev-bug: fixed vscode freezes * test: refactor database init to support tests * mealplan CRUD testing * restructure test folder * git attributes * tests: migration, settings, theme routes testing * docker-file shrink * rebuild * refactor: moving directories around * adding funding * mealplan redesign Co-authored-by: Hayden <hay-kot@pm.me> * Upload component (#108) * unified upload button + download backups * javascript toolings * fix vuetur config * fixed type check error * refactor: clean up bag javascript Co-authored-by: Hayden <hay-kot@pm.me> * Upload component (#113) * unified upload button + download backups * javascript toolings * fix vuetur config * fixed type check error * refactor: clean up bag javascript * UI updates + name validation * docs: changelog + sp * fixed route links * changelog Co-authored-by: Hayden <hay-kot@pm.me> * fixed menu links * fixed poetry install on docker.dev build * Migration redesign (#119) * migration redesign init * new color picker * changelog * added UI language selection * fix layout issue on recipe editor * remove git as dependency * added UI editor for original URL * CI/CD Tests * test: fixed migration routes Co-authored-by: Hayden <hay-kot@pm.me> * Fix link to dev-notes.md (#110) * translation: add swedish (#128) * language: da is Danish * translations: add swedish * scraper: unescape html in instructions (#129) Some urls erroneously deliver escaped html their instructions, sometimes they are even escaped on multiple levels like here: https://www.ica.se/recept/kladdig-kladdkaka-722982/ ``` >>> normalize_instruction("S&auml;tt ugnen p&aring; 200&deg;C.") 'Sätt ugnen på 200°C.' ``` * v0.2.0 Updates (#130) * migration redesign init * new color picker * changelog * added UI language selection * fix layout issue on recipe editor * remove git as dependency * added UI editor for original URL * CI/CD Tests * test: fixed migration routes * test todos * bug/added docker volume * chowdow test data * partial image recipe image testing * added card section card * settings form * homepage cetegory ui * frontend category placeholder * fixed broken scheduler * remove old files * removed temp test Co-authored-by: Hayden <hay-kot@pm.me> * Fix missing translations key (#133) * translation: add simplified & traditional chinese * Fix missing translations * fix chinese translations * v0.2.0 Release Candidate (#141) * Fix link to Docker Hub Found an extra s. DESTROYED it. * Release v0.1.0 Candidate (#85) * Changed uvicorn port to 80 * Changed port in docker-compose to match dockerfile * Readded environment variables in docker-compose * production image rework * Use opengraph metadata to make basic recipe cards when full recipe metadata is not available * fixed instrucitons on parse * add last_recipe * automated testing * roadmap update * Sqlite (#75) * file structure * auto-test * take 2 * refactor ap scheduler and startup process * fixed scraper error * database abstraction * database abstraction * port recipes over to new schema * meal migration * start settings migration * finale mongo port * backup improvements * migration imports to new DB structure * unused import cleanup * docs strings * settings and theme import logic * cleanup * fixed tinydb error * requirements * fuzzy search * remove scratch file * sqlalchemy models * improved search ui * recipe models almost done * sql modal population * del scratch * rewrite database model mixins * mostly grabage * recipe updates * working sqllite * remove old files and reorganize * final cleanup Co-authored-by: Hayden <hay-kot@pm.me> * Backup card (#78) * backup / import dialog * upgrade to new tag method * New import card * rename settings.py to app_config.py * migrate to poetry for development * fix failing test Co-authored-by: Hayden <hay-kot@pm.me> * added mkdocs to docker-compose * Translations (#72) * Translations + danish * changed back proxy target to use ENV * Resolved more merge conflicts * Removed test in translation * Documentation of translations * Updated translations * removed old packages Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com> * fail to start bug fixes * feature: prep/cook/total time slots (#80) Co-authored-by: Hayden <hay-kot@pm.me> * missing bind attributes * Bug fixes (#81) * fix: url remains after succesful import * docs: changelog + update todos * arm image * arm compose * compose updates * update poetry * arm support Co-authored-by: Hayden <hay-kot@pm.me> * dockerfile hotfix * dockerfile hotfix * Version Release Final Touches (#84) * Remove slim * bug: opacity issues * bug: startup failure with no database * ci/cd on dev branch * formatting * v0.1.0 documentation Co-authored-by: Hayden <hay-kot@pm.me> * db init hotfix * bug: fix crash in mongo * fix mongo bug * fixed version notifier * finale changelog Co-authored-by: kentora <=> Co-authored-by: Hayden <hay-kot@pm.me> Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com> Co-authored-by: kentora <kentora@kentora.dk> * build container * webscraper hotfix * notes hot fix * bug: mongo updates fail #99 * Fix error message (#101) * gh funding * Create Issue Templates (#125) * Create bug_report.md * Create config.yml Included a link to feature requests. * Update config.yml Fixed link I had for testing to the actual link * Update bug_report.md fix capitalization * Update .github/ISSUE_TEMPLATE/bug_report.md Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com> Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com> * merge kentors changes * refactor/recipe routers * category/tag database relationship and endpoints * frontend category management * update branch todos * bug/normalize recipe steps html * remove console.log + refactor categories * fix categories database errors * refactor/ router endpoint * refactor/ remove old code * drag and drop ingredients * general cleanup * route refactoring * changelog * api refactoring + random cleanup * fixed backwards sort * Update mkdocs.yml (#137) Fix warning from Deploy Docs github action * fixed navigate on enter in search * refactor/create global css * added category scroll * cleanup todos * debug routes * docs/new gifs & general updates * cleanup * fix list test Co-authored-by: David Young <davidy@funkypenguin.co.nz> Co-authored-by: Hayden <hay-kot@pm.me> Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com> Co-authored-by: kentora <kentora@kentora.dk> Co-authored-by: Alexei Pesic <pesic.alexei@gmail.com> Co-authored-by: Andrew <dpieski@gmail.com> Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com> * fix build * fix duplicate editor * fixed docker mount problem * python 3.9 * added tasks for non-docker development * remove old scripts * dev updates * fixed no image upload option * get version from backend * final docs pass * .gitignore * feature/markdown support for description and steps * package-lock * rename production task * category import errors on import Co-authored-by: kentora <=> Co-authored-by: Hayden <hay-kot@pm.me> Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com> Co-authored-by: kentora <kentora@kentora.dk> Co-authored-by: David Young <davidy@funkypenguin.co.nz> Co-authored-by: Bastien <43323819+Batgame@users.noreply.github.com> Co-authored-by: sephrat <34862846+sephrat@users.noreply.github.com> Co-authored-by: Nick CJ <17556895+nickcj931@users.noreply.github.com> Co-authored-by: dekvall <dkvldev@gmail.com> Co-authored-by: wengtad <wengtad93@gmail.com> Co-authored-by: Alexei Pesic <pesic.alexei@gmail.com> Co-authored-by: Andrew <dpieski@gmail.com> Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
This commit is contained in:
		
							
								
								
									
										2
									
								
								.github/workflows/dockerbuild.prod.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/dockerbuild.prod.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | |||||||
| name: Docker Build Dev | name: Docker Build Production | ||||||
|  |  | ||||||
| on: | on: | ||||||
|   push: |   push: | ||||||
|   | |||||||
							
								
								
									
										430
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										430
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -4,6 +4,37 @@ | |||||||
|   "lockfileVersion": 1, |   "lockfileVersion": 1, | ||||||
|   "requires": true, |   "requires": true, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|  |     "@adapttive/vue-markdown": { | ||||||
|  |       "version": "3.0.3", | ||||||
|  |       "resolved": "https://registry.npmjs.org/@adapttive/vue-markdown/-/vue-markdown-3.0.3.tgz", | ||||||
|  |       "integrity": "sha512-nopu1itoXJ5CwXe70dACSAq4n17nybBRZqXDu2ZyHC+vjVNjPiSp4kuvdBZHKMVHBEC7YakW4b9Mfkr2Wvybfw==", | ||||||
|  |       "requires": { | ||||||
|  |         "highlight.js": "^10.4.0", | ||||||
|  |         "markdown-it": "^12.0.3", | ||||||
|  |         "markdown-it-abbr": "^1.0.4", | ||||||
|  |         "markdown-it-deflist": "^2.1.0", | ||||||
|  |         "markdown-it-emoji": "^2.0.0", | ||||||
|  |         "markdown-it-external-preview": "^1.0.4", | ||||||
|  |         "markdown-it-footnote": "^3.0.2", | ||||||
|  |         "markdown-it-ins": "^3.0.0", | ||||||
|  |         "markdown-it-katex": "npm:@iktakahiro/markdown-it-katex@^4.0.1", | ||||||
|  |         "markdown-it-mark": "^3.0.0", | ||||||
|  |         "markdown-it-sub": "^1.0.0", | ||||||
|  |         "markdown-it-sup": "^1.0.0", | ||||||
|  |         "markdown-it-task-lists": "^2.1.1", | ||||||
|  |         "markdown-it-toc-and-anchor": "^4.2.0" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "markdown-it-katex": { | ||||||
|  |           "version": "npm:@iktakahiro/markdown-it-katex@4.0.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/@iktakahiro/markdown-it-katex/-/markdown-it-katex-4.0.1.tgz", | ||||||
|  |           "integrity": "sha512-kGFooO7fIOgY34PSG8ZNVsUlKhhNoqhzW2kq94TNGa8COzh73PO4KsEoPOsQVG1mEAe8tg7GqG0FoVao0aMHaw==", | ||||||
|  |           "requires": { | ||||||
|  |             "katex": "^0.12.0" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "@babel/code-frame": { |     "@babel/code-frame": { | ||||||
|       "version": "7.10.4", |       "version": "7.10.4", | ||||||
|       "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz?cache=0&sync_timestamp=1593522948158&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.10.4.tgz", |       "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz?cache=0&sync_timestamp=1593522948158&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.10.4.tgz", | ||||||
| @@ -1445,6 +1476,14 @@ | |||||||
|         "@types/node": "*" |         "@types/node": "*" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "@types/concat-stream": { | ||||||
|  |       "version": "1.6.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.0.tgz", | ||||||
|  |       "integrity": "sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0=", | ||||||
|  |       "requires": { | ||||||
|  |         "@types/node": "*" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "@types/connect": { |     "@types/connect": { | ||||||
|       "version": "3.4.34", |       "version": "3.4.34", | ||||||
|       "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", |       "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", | ||||||
| @@ -1487,6 +1526,14 @@ | |||||||
|         "@types/range-parser": "*" |         "@types/range-parser": "*" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "@types/form-data": { | ||||||
|  |       "version": "0.0.33", | ||||||
|  |       "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", | ||||||
|  |       "integrity": "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=", | ||||||
|  |       "requires": { | ||||||
|  |         "@types/node": "*" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "@types/glob": { |     "@types/glob": { | ||||||
|       "version": "7.1.3", |       "version": "7.1.3", | ||||||
|       "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", |       "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", | ||||||
| @@ -1544,8 +1591,7 @@ | |||||||
|     "@types/node": { |     "@types/node": { | ||||||
|       "version": "14.14.21", |       "version": "14.14.21", | ||||||
|       "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.21.tgz", |       "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.21.tgz", | ||||||
|       "integrity": "sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A==", |       "integrity": "sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A==" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "@types/normalize-package-data": { |     "@types/normalize-package-data": { | ||||||
|       "version": "2.4.0", |       "version": "2.4.0", | ||||||
| @@ -1562,8 +1608,7 @@ | |||||||
|     "@types/qs": { |     "@types/qs": { | ||||||
|       "version": "6.9.5", |       "version": "6.9.5", | ||||||
|       "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", |       "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", | ||||||
|       "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==", |       "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "@types/range-parser": { |     "@types/range-parser": { | ||||||
|       "version": "1.2.3", |       "version": "1.2.3", | ||||||
| @@ -2584,6 +2629,11 @@ | |||||||
|       "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", |       "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "asap": { | ||||||
|  |       "version": "2.0.6", | ||||||
|  |       "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", | ||||||
|  |       "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" | ||||||
|  |     }, | ||||||
|     "asn1": { |     "asn1": { | ||||||
|       "version": "0.2.4", |       "version": "0.2.4", | ||||||
|       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", |       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", | ||||||
| @@ -2682,8 +2732,7 @@ | |||||||
|     "asynckit": { |     "asynckit": { | ||||||
|       "version": "0.4.0", |       "version": "0.4.0", | ||||||
|       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", |       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", | ||||||
|       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", |       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "atob": { |     "atob": { | ||||||
|       "version": "2.1.2", |       "version": "2.1.2", | ||||||
| @@ -2825,8 +2874,7 @@ | |||||||
|     "base64-js": { |     "base64-js": { | ||||||
|       "version": "1.5.1", |       "version": "1.5.1", | ||||||
|       "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", |       "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", | ||||||
|       "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", |       "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "batch": { |     "batch": { | ||||||
|       "version": "0.6.1", |       "version": "0.6.1", | ||||||
| @@ -2867,6 +2915,16 @@ | |||||||
|       "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", |       "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "bindings": { | ||||||
|  |       "version": "1.5.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", | ||||||
|  |       "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", | ||||||
|  |       "dev": true, | ||||||
|  |       "optional": true, | ||||||
|  |       "requires": { | ||||||
|  |         "file-uri-to-path": "1.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "bluebird": { |     "bluebird": { | ||||||
|       "version": "3.7.2", |       "version": "3.7.2", | ||||||
|       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", |       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", | ||||||
| @@ -2993,6 +3051,11 @@ | |||||||
|       "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", |       "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "browser-or-node": { | ||||||
|  |       "version": "1.3.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", | ||||||
|  |       "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" | ||||||
|  |     }, | ||||||
|     "browserify-aes": { |     "browserify-aes": { | ||||||
|       "version": "1.2.0", |       "version": "1.2.0", | ||||||
|       "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", |       "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", | ||||||
| @@ -3112,8 +3175,7 @@ | |||||||
|     "buffer-from": { |     "buffer-from": { | ||||||
|       "version": "1.1.1", |       "version": "1.1.1", | ||||||
|       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", |       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", | ||||||
|       "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", |       "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "buffer-indexof": { |     "buffer-indexof": { | ||||||
|       "version": "1.1.1", |       "version": "1.1.1", | ||||||
| @@ -3282,8 +3344,7 @@ | |||||||
|     "caseless": { |     "caseless": { | ||||||
|       "version": "0.12.0", |       "version": "0.12.0", | ||||||
|       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", |       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", | ||||||
|       "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", |       "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "chalk": { |     "chalk": { | ||||||
|       "version": "2.4.2", |       "version": "2.4.2", | ||||||
| @@ -3566,6 +3627,17 @@ | |||||||
|       "integrity": "sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=", |       "integrity": "sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "clipboard": { | ||||||
|  |       "version": "2.0.6", | ||||||
|  |       "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", | ||||||
|  |       "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", | ||||||
|  |       "optional": true, | ||||||
|  |       "requires": { | ||||||
|  |         "good-listener": "^1.2.2", | ||||||
|  |         "select": "^1.1.2", | ||||||
|  |         "tiny-emitter": "^2.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "clipboardy": { |     "clipboardy": { | ||||||
|       "version": "2.3.0", |       "version": "2.3.0", | ||||||
|       "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", |       "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", | ||||||
| @@ -3726,7 +3798,6 @@ | |||||||
|       "version": "1.0.8", |       "version": "1.0.8", | ||||||
|       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", |       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", | ||||||
|       "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", |       "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", | ||||||
|       "dev": true, |  | ||||||
|       "requires": { |       "requires": { | ||||||
|         "delayed-stream": "~1.0.0" |         "delayed-stream": "~1.0.0" | ||||||
|       } |       } | ||||||
| @@ -3734,8 +3805,7 @@ | |||||||
|     "commander": { |     "commander": { | ||||||
|       "version": "2.20.3", |       "version": "2.20.3", | ||||||
|       "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1605992628233&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz", |       "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1605992628233&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz", | ||||||
|       "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=", |       "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "commondir": { |     "commondir": { | ||||||
|       "version": "1.0.1", |       "version": "1.0.1", | ||||||
| @@ -3806,7 +3876,6 @@ | |||||||
|       "version": "1.6.2", |       "version": "1.6.2", | ||||||
|       "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", |       "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", | ||||||
|       "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", |       "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", | ||||||
|       "dev": true, |  | ||||||
|       "requires": { |       "requires": { | ||||||
|         "buffer-from": "^1.0.0", |         "buffer-from": "^1.0.0", | ||||||
|         "inherits": "^2.0.3", |         "inherits": "^2.0.3", | ||||||
| @@ -4041,8 +4110,7 @@ | |||||||
|     "core-util-is": { |     "core-util-is": { | ||||||
|       "version": "1.0.2", |       "version": "1.0.2", | ||||||
|       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", |       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", | ||||||
|       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", |       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "cosmiconfig": { |     "cosmiconfig": { | ||||||
|       "version": "5.2.1", |       "version": "5.2.1", | ||||||
| @@ -4643,8 +4711,13 @@ | |||||||
|     "delayed-stream": { |     "delayed-stream": { | ||||||
|       "version": "1.0.0", |       "version": "1.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", |       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", | ||||||
|       "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", |       "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" | ||||||
|       "dev": true |     }, | ||||||
|  |     "delegate": { | ||||||
|  |       "version": "3.2.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", | ||||||
|  |       "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", | ||||||
|  |       "optional": true | ||||||
|     }, |     }, | ||||||
|     "depd": { |     "depd": { | ||||||
|       "version": "1.1.2", |       "version": "1.1.2", | ||||||
| @@ -4953,8 +5026,7 @@ | |||||||
|     "entities": { |     "entities": { | ||||||
|       "version": "2.1.0", |       "version": "2.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", |       "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", | ||||||
|       "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", |       "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "errno": { |     "errno": { | ||||||
|       "version": "0.1.8", |       "version": "0.1.8", | ||||||
| @@ -5635,6 +5707,13 @@ | |||||||
|         "schema-utils": "^2.5.0" |         "schema-utils": "^2.5.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "file-uri-to-path": { | ||||||
|  |       "version": "1.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", | ||||||
|  |       "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", | ||||||
|  |       "dev": true, | ||||||
|  |       "optional": true | ||||||
|  |     }, | ||||||
|     "filesize": { |     "filesize": { | ||||||
|       "version": "3.6.1", |       "version": "3.6.1", | ||||||
|       "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", |       "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", | ||||||
| @@ -5781,7 +5860,6 @@ | |||||||
|       "version": "2.3.3", |       "version": "2.3.3", | ||||||
|       "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", |       "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", | ||||||
|       "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", |       "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", | ||||||
|       "dev": true, |  | ||||||
|       "requires": { |       "requires": { | ||||||
|         "asynckit": "^0.4.0", |         "asynckit": "^0.4.0", | ||||||
|         "combined-stream": "^1.0.6", |         "combined-stream": "^1.0.6", | ||||||
| @@ -5904,6 +5982,11 @@ | |||||||
|         "has-symbols": "^1.0.1" |         "has-symbols": "^1.0.1" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "get-port": { | ||||||
|  |       "version": "3.2.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", | ||||||
|  |       "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=" | ||||||
|  |     }, | ||||||
|     "get-stream": { |     "get-stream": { | ||||||
|       "version": "4.1.0", |       "version": "4.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", |       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", | ||||||
| @@ -5979,6 +6062,15 @@ | |||||||
|         "slash": "^2.0.0" |         "slash": "^2.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "good-listener": { | ||||||
|  |       "version": "1.2.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", | ||||||
|  |       "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", | ||||||
|  |       "optional": true, | ||||||
|  |       "requires": { | ||||||
|  |         "delegate": "^3.1.2" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "graceful-fs": { |     "graceful-fs": { | ||||||
|       "version": "4.2.4", |       "version": "4.2.4", | ||||||
|       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", |       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", | ||||||
| @@ -6131,8 +6223,7 @@ | |||||||
|     "highlight.js": { |     "highlight.js": { | ||||||
|       "version": "10.5.0", |       "version": "10.5.0", | ||||||
|       "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.5.0.tgz", |       "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.5.0.tgz", | ||||||
|       "integrity": "sha512-xTmvd9HiIHR6L53TMC7TKolEj65zG1XU+Onr8oi86mYa+nLcIbxTTWkpW7CsEwv/vK7u1zb8alZIMLDqqN6KTw==", |       "integrity": "sha512-xTmvd9HiIHR6L53TMC7TKolEj65zG1XU+Onr8oi86mYa+nLcIbxTTWkpW7CsEwv/vK7u1zb8alZIMLDqqN6KTw==" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "hmac-drbg": { |     "hmac-drbg": { | ||||||
|       "version": "1.0.1", |       "version": "1.0.1", | ||||||
| @@ -6312,6 +6403,17 @@ | |||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "http-basic": { | ||||||
|  |       "version": "8.1.3", | ||||||
|  |       "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", | ||||||
|  |       "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", | ||||||
|  |       "requires": { | ||||||
|  |         "caseless": "^0.12.0", | ||||||
|  |         "concat-stream": "^1.6.2", | ||||||
|  |         "http-response-object": "^3.0.1", | ||||||
|  |         "parse-cache-control": "^1.0.1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "http-deceiver": { |     "http-deceiver": { | ||||||
|       "version": "1.2.7", |       "version": "1.2.7", | ||||||
|       "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", |       "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", | ||||||
| @@ -6368,6 +6470,21 @@ | |||||||
|         "micromatch": "^3.1.10" |         "micromatch": "^3.1.10" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "http-response-object": { | ||||||
|  |       "version": "3.0.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", | ||||||
|  |       "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", | ||||||
|  |       "requires": { | ||||||
|  |         "@types/node": "^10.0.3" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "@types/node": { | ||||||
|  |           "version": "10.17.51", | ||||||
|  |           "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.51.tgz", | ||||||
|  |           "integrity": "sha512-KANw+MkL626tq90l++hGelbl67irOJzGhUJk6a1Bt8QHOeh9tztJx+L0AqttraWKinmZn7Qi5lJZJzx45Gq0dg==" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "http-signature": { |     "http-signature": { | ||||||
|       "version": "1.2.0", |       "version": "1.2.0", | ||||||
|       "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", |       "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", | ||||||
| @@ -6412,8 +6529,7 @@ | |||||||
|     "ieee754": { |     "ieee754": { | ||||||
|       "version": "1.2.1", |       "version": "1.2.1", | ||||||
|       "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", |       "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", | ||||||
|       "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", |       "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "iferr": { |     "iferr": { | ||||||
|       "version": "0.1.5", |       "version": "0.1.5", | ||||||
| @@ -6513,8 +6629,7 @@ | |||||||
|     "inherits": { |     "inherits": { | ||||||
|       "version": "2.0.4", |       "version": "2.0.4", | ||||||
|       "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz", |       "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz", | ||||||
|       "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", |       "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "inquirer": { |     "inquirer": { | ||||||
|       "version": "7.3.3", |       "version": "7.3.3", | ||||||
| @@ -6983,8 +7098,7 @@ | |||||||
|     "isarray": { |     "isarray": { | ||||||
|       "version": "1.0.0", |       "version": "1.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", |       "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", | ||||||
|       "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", |       "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "isexe": { |     "isexe": { | ||||||
|       "version": "2.0.0", |       "version": "2.0.0", | ||||||
| @@ -7182,6 +7296,14 @@ | |||||||
|         "verror": "1.10.0" |         "verror": "1.10.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "katex": { | ||||||
|  |       "version": "0.12.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/katex/-/katex-0.12.0.tgz", | ||||||
|  |       "integrity": "sha512-y+8btoc/CK70XqcHqjxiGWBOeIL8upbS0peTPXTvgrh21n1RiWWcIpSWM+4uXq+IAgNh9YYQWdc7LVDPDAEEAg==", | ||||||
|  |       "requires": { | ||||||
|  |         "commander": "^2.19.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "killable": { |     "killable": { | ||||||
|       "version": "1.0.1", |       "version": "1.0.1", | ||||||
|       "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", |       "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", | ||||||
| @@ -7229,6 +7351,14 @@ | |||||||
|       "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", |       "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "linkify-it": { | ||||||
|  |       "version": "3.0.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.2.tgz", | ||||||
|  |       "integrity": "sha512-gDBO4aHNZS6coiZCKVhSNh43F9ioIL4JwRjLZPkoLIY4yZFwg264Y5lu2x6rb1Js42Gh6Yqm2f6L2AJcnkzinQ==", | ||||||
|  |       "requires": { | ||||||
|  |         "uc.micro": "^1.0.1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "loader-fs-cache": { |     "loader-fs-cache": { | ||||||
|       "version": "1.0.3", |       "version": "1.0.3", | ||||||
|       "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", |       "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", | ||||||
| @@ -7422,6 +7552,108 @@ | |||||||
|         "object-visit": "^1.0.0" |         "object-visit": "^1.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "markdown-it": { | ||||||
|  |       "version": "12.0.4", | ||||||
|  |       "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.0.4.tgz", | ||||||
|  |       "integrity": "sha512-34RwOXZT8kyuOJy25oJNJoulO8L0bTHYWXcdZBYZqFnjIy3NgjeoM3FmPXIOFQ26/lSHYMr8oc62B6adxXcb3Q==", | ||||||
|  |       "requires": { | ||||||
|  |         "argparse": "^2.0.1", | ||||||
|  |         "entities": "~2.1.0", | ||||||
|  |         "linkify-it": "^3.0.1", | ||||||
|  |         "mdurl": "^1.0.1", | ||||||
|  |         "uc.micro": "^1.0.5" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "argparse": { | ||||||
|  |           "version": "2.0.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", | ||||||
|  |           "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "markdown-it-abbr": { | ||||||
|  |       "version": "1.0.4", | ||||||
|  |       "resolved": "https://registry.npmjs.org/markdown-it-abbr/-/markdown-it-abbr-1.0.4.tgz", | ||||||
|  |       "integrity": "sha1-1mtTZFIcuz3Yqlna37ovtoZcj9g=" | ||||||
|  |     }, | ||||||
|  |     "markdown-it-deflist": { | ||||||
|  |       "version": "2.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/markdown-it-deflist/-/markdown-it-deflist-2.1.0.tgz", | ||||||
|  |       "integrity": "sha512-3OuqoRUlSxJiuQYu0cWTLHNhhq2xtoSFqsZK8plANg91+RJQU1ziQ6lA2LzmFAEes18uPBsHZpcX6We5l76Nzg==" | ||||||
|  |     }, | ||||||
|  |     "markdown-it-emoji": { | ||||||
|  |       "version": "2.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-2.0.0.tgz", | ||||||
|  |       "integrity": "sha512-39j7/9vP/CPCKbEI44oV8yoPJTpvfeReTn/COgRhSpNrjWF3PfP/JUxxB0hxV6ynOY8KH8Y8aX9NMDdo6z+6YQ==" | ||||||
|  |     }, | ||||||
|  |     "markdown-it-external-preview": { | ||||||
|  |       "version": "1.0.4", | ||||||
|  |       "resolved": "https://registry.npmjs.org/markdown-it-external-preview/-/markdown-it-external-preview-1.0.4.tgz", | ||||||
|  |       "integrity": "sha512-kuhuUeL1vmunHdzzUKTSec3Xl30vBbeDu/fgnlPvvQIRcOnWlCK+6pT2ov9R5igaJ0oXS6GMiyDlE7QiL7bd8w==", | ||||||
|  |       "requires": { | ||||||
|  |         "browser-or-node": "^1.3.0", | ||||||
|  |         "buffer": "^6.0.3", | ||||||
|  |         "prismjs": "^1.22.0", | ||||||
|  |         "sync-request": "^6.1.0" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "buffer": { | ||||||
|  |           "version": "6.0.3", | ||||||
|  |           "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", | ||||||
|  |           "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", | ||||||
|  |           "requires": { | ||||||
|  |             "base64-js": "^1.3.1", | ||||||
|  |             "ieee754": "^1.2.1" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "markdown-it-footnote": { | ||||||
|  |       "version": "3.0.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/markdown-it-footnote/-/markdown-it-footnote-3.0.2.tgz", | ||||||
|  |       "integrity": "sha512-JVW6fCmZWjvMdDQSbOT3nnOQtd9iAXmw7hTSh26+v42BnvXeVyGMDBm5b/EZocMed2MbCAHiTX632vY0FyGB8A==" | ||||||
|  |     }, | ||||||
|  |     "markdown-it-ins": { | ||||||
|  |       "version": "3.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/markdown-it-ins/-/markdown-it-ins-3.0.1.tgz", | ||||||
|  |       "integrity": "sha512-32SSfZqSzqyAmmQ4SHvhxbFqSzPDqsZgMHDwxqPzp+v+t8RsmqsBZRG+RfRQskJko9PfKC2/oxyOs4Yg/CfiRw==" | ||||||
|  |     }, | ||||||
|  |     "markdown-it-mark": { | ||||||
|  |       "version": "3.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/markdown-it-mark/-/markdown-it-mark-3.0.1.tgz", | ||||||
|  |       "integrity": "sha512-HyxjAu6BRsdt6Xcv6TKVQnkz/E70TdGXEFHRYBGLncRE9lBFwDNLVtFojKxjJWgJ+5XxUwLaHXy+2sGBbDn+4A==" | ||||||
|  |     }, | ||||||
|  |     "markdown-it-sub": { | ||||||
|  |       "version": "1.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/markdown-it-sub/-/markdown-it-sub-1.0.0.tgz", | ||||||
|  |       "integrity": "sha1-N1/WAm6ufdywEkl/ZBEZXqHjr+g=" | ||||||
|  |     }, | ||||||
|  |     "markdown-it-sup": { | ||||||
|  |       "version": "1.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/markdown-it-sup/-/markdown-it-sup-1.0.0.tgz", | ||||||
|  |       "integrity": "sha1-y5yf+RpSVawI8/09YyhuFd8KH8M=" | ||||||
|  |     }, | ||||||
|  |     "markdown-it-task-lists": { | ||||||
|  |       "version": "2.1.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz", | ||||||
|  |       "integrity": "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==" | ||||||
|  |     }, | ||||||
|  |     "markdown-it-toc-and-anchor": { | ||||||
|  |       "version": "4.2.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/markdown-it-toc-and-anchor/-/markdown-it-toc-and-anchor-4.2.0.tgz", | ||||||
|  |       "integrity": "sha512-DusSbKtg8CwZ92ztN7bOojDpP4h0+w7BVOPuA3PHDIaabMsERYpwsazLYSP/UlKedoQjOz21mwlai36TQ04EpA==", | ||||||
|  |       "requires": { | ||||||
|  |         "clone": "^2.1.0", | ||||||
|  |         "uslug": "^1.0.4" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "clone": { | ||||||
|  |           "version": "2.1.2", | ||||||
|  |           "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", | ||||||
|  |           "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "md5.js": { |     "md5.js": { | ||||||
|       "version": "1.3.5", |       "version": "1.3.5", | ||||||
|       "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", |       "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", | ||||||
| @@ -7439,6 +7671,11 @@ | |||||||
|       "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", |       "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "mdurl": { | ||||||
|  |       "version": "1.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", | ||||||
|  |       "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" | ||||||
|  |     }, | ||||||
|     "media-typer": { |     "media-typer": { | ||||||
|       "version": "0.3.0", |       "version": "0.3.0", | ||||||
|       "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", |       "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", | ||||||
| @@ -7544,14 +7781,12 @@ | |||||||
|     "mime-db": { |     "mime-db": { | ||||||
|       "version": "1.45.0", |       "version": "1.45.0", | ||||||
|       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", |       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", | ||||||
|       "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", |       "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "mime-types": { |     "mime-types": { | ||||||
|       "version": "2.1.28", |       "version": "2.1.28", | ||||||
|       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", |       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", | ||||||
|       "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", |       "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", | ||||||
|       "dev": true, |  | ||||||
|       "requires": { |       "requires": { | ||||||
|         "mime-db": "1.45.0" |         "mime-db": "1.45.0" | ||||||
|       } |       } | ||||||
| @@ -7776,6 +8011,13 @@ | |||||||
|         "thenify-all": "^1.0.0" |         "thenify-all": "^1.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "nan": { | ||||||
|  |       "version": "2.14.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", | ||||||
|  |       "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", | ||||||
|  |       "dev": true, | ||||||
|  |       "optional": true | ||||||
|  |     }, | ||||||
|     "nanomatch": { |     "nanomatch": { | ||||||
|       "version": "1.2.13", |       "version": "1.2.13", | ||||||
|       "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", |       "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", | ||||||
| @@ -8318,6 +8560,11 @@ | |||||||
|         "safe-buffer": "^5.1.1" |         "safe-buffer": "^5.1.1" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "parse-cache-control": { | ||||||
|  |       "version": "1.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", | ||||||
|  |       "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" | ||||||
|  |     }, | ||||||
|     "parse-json": { |     "parse-json": { | ||||||
|       "version": "5.1.0", |       "version": "5.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", |       "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", | ||||||
| @@ -9177,6 +9424,14 @@ | |||||||
|         "renderkid": "^2.0.4" |         "renderkid": "^2.0.4" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "prismjs": { | ||||||
|  |       "version": "1.23.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz", | ||||||
|  |       "integrity": "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==", | ||||||
|  |       "requires": { | ||||||
|  |         "clipboard": "^2.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "process": { |     "process": { | ||||||
|       "version": "0.11.10", |       "version": "0.11.10", | ||||||
|       "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", |       "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", | ||||||
| @@ -9186,8 +9441,7 @@ | |||||||
|     "process-nextick-args": { |     "process-nextick-args": { | ||||||
|       "version": "2.0.1", |       "version": "2.0.1", | ||||||
|       "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", |       "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", | ||||||
|       "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", |       "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "progress": { |     "progress": { | ||||||
|       "version": "2.0.3", |       "version": "2.0.3", | ||||||
| @@ -9195,6 +9449,14 @@ | |||||||
|       "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", |       "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "promise": { | ||||||
|  |       "version": "8.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", | ||||||
|  |       "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", | ||||||
|  |       "requires": { | ||||||
|  |         "asap": "~2.0.6" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "promise-inflight": { |     "promise-inflight": { | ||||||
|       "version": "1.0.1", |       "version": "1.0.1", | ||||||
|       "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", |       "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", | ||||||
| @@ -9381,7 +9643,6 @@ | |||||||
|       "version": "2.3.7", |       "version": "2.3.7", | ||||||
|       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", |       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", | ||||||
|       "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", |       "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", | ||||||
|       "dev": true, |  | ||||||
|       "requires": { |       "requires": { | ||||||
|         "core-util-is": "~1.0.0", |         "core-util-is": "~1.0.0", | ||||||
|         "inherits": "~2.0.3", |         "inherits": "~2.0.3", | ||||||
| @@ -9722,8 +9983,7 @@ | |||||||
|     "safe-buffer": { |     "safe-buffer": { | ||||||
|       "version": "5.1.2", |       "version": "5.1.2", | ||||||
|       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", |       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", | ||||||
|       "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", |       "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "safe-regex": { |     "safe-regex": { | ||||||
|       "version": "1.1.0", |       "version": "1.1.0", | ||||||
| @@ -9787,6 +10047,12 @@ | |||||||
|         "ajv-keywords": "^3.5.2" |         "ajv-keywords": "^3.5.2" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "select": { | ||||||
|  |       "version": "1.1.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", | ||||||
|  |       "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", | ||||||
|  |       "optional": true | ||||||
|  |     }, | ||||||
|     "select-hose": { |     "select-hose": { | ||||||
|       "version": "2.0.0", |       "version": "2.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", |       "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", | ||||||
| @@ -10540,7 +10806,6 @@ | |||||||
|       "version": "1.1.1", |       "version": "1.1.1", | ||||||
|       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", |       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", | ||||||
|       "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", |       "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", | ||||||
|       "dev": true, |  | ||||||
|       "requires": { |       "requires": { | ||||||
|         "safe-buffer": "~5.1.0" |         "safe-buffer": "~5.1.0" | ||||||
|       } |       } | ||||||
| @@ -10646,6 +10911,24 @@ | |||||||
|         "util.promisify": "~1.0.0" |         "util.promisify": "~1.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "sync-request": { | ||||||
|  |       "version": "6.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", | ||||||
|  |       "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", | ||||||
|  |       "requires": { | ||||||
|  |         "http-response-object": "^3.0.1", | ||||||
|  |         "sync-rpc": "^1.2.1", | ||||||
|  |         "then-request": "^6.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "sync-rpc": { | ||||||
|  |       "version": "1.3.6", | ||||||
|  |       "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", | ||||||
|  |       "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", | ||||||
|  |       "requires": { | ||||||
|  |         "get-port": "^3.1.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "table": { |     "table": { | ||||||
|       "version": "5.4.6", |       "version": "5.4.6", | ||||||
|       "resolved": "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz?cache=0&sync_timestamp=1605825218994&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftable%2Fdownload%2Ftable-5.4.6.tgz", |       "resolved": "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz?cache=0&sync_timestamp=1605825218994&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftable%2Fdownload%2Ftable-5.4.6.tgz", | ||||||
| @@ -10789,6 +11072,31 @@ | |||||||
|       "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", |       "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "then-request": { | ||||||
|  |       "version": "6.0.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", | ||||||
|  |       "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", | ||||||
|  |       "requires": { | ||||||
|  |         "@types/concat-stream": "^1.6.0", | ||||||
|  |         "@types/form-data": "0.0.33", | ||||||
|  |         "@types/node": "^8.0.0", | ||||||
|  |         "@types/qs": "^6.2.31", | ||||||
|  |         "caseless": "~0.12.0", | ||||||
|  |         "concat-stream": "^1.6.0", | ||||||
|  |         "form-data": "^2.2.0", | ||||||
|  |         "http-basic": "^8.1.1", | ||||||
|  |         "http-response-object": "^3.0.1", | ||||||
|  |         "promise": "^8.0.0", | ||||||
|  |         "qs": "^6.4.0" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "@types/node": { | ||||||
|  |           "version": "8.10.66", | ||||||
|  |           "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", | ||||||
|  |           "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "thenify": { |     "thenify": { | ||||||
|       "version": "3.3.1", |       "version": "3.3.1", | ||||||
|       "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", |       "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", | ||||||
| @@ -10855,6 +11163,12 @@ | |||||||
|       "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", |       "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "tiny-emitter": { | ||||||
|  |       "version": "2.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", | ||||||
|  |       "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", | ||||||
|  |       "optional": true | ||||||
|  |     }, | ||||||
|     "tmp": { |     "tmp": { | ||||||
|       "version": "0.0.33", |       "version": "0.0.33", | ||||||
|       "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz", |       "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz", | ||||||
| @@ -11007,8 +11321,12 @@ | |||||||
|     "typedarray": { |     "typedarray": { | ||||||
|       "version": "0.0.6", |       "version": "0.0.6", | ||||||
|       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", |       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", | ||||||
|       "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", |       "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" | ||||||
|       "dev": true |     }, | ||||||
|  |     "uc.micro": { | ||||||
|  |       "version": "1.0.6", | ||||||
|  |       "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", | ||||||
|  |       "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" | ||||||
|     }, |     }, | ||||||
|     "uglify-js": { |     "uglify-js": { | ||||||
|       "version": "3.4.10", |       "version": "3.4.10", | ||||||
| @@ -11110,6 +11428,11 @@ | |||||||
|       "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", |       "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "unorm": { | ||||||
|  |       "version": "1.6.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", | ||||||
|  |       "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==" | ||||||
|  |     }, | ||||||
|     "unpipe": { |     "unpipe": { | ||||||
|       "version": "1.0.0", |       "version": "1.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", |       "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", | ||||||
| @@ -11233,6 +11556,14 @@ | |||||||
|       "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", |       "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "uslug": { | ||||||
|  |       "version": "1.0.4", | ||||||
|  |       "resolved": "https://registry.npmjs.org/uslug/-/uslug-1.0.4.tgz", | ||||||
|  |       "integrity": "sha1-uaIvCRTgqGFAYz2swwLl9PpFBnc=", | ||||||
|  |       "requires": { | ||||||
|  |         "unorm": ">= 1.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "util": { |     "util": { | ||||||
|       "version": "0.11.1", |       "version": "0.11.1", | ||||||
|       "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", |       "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", | ||||||
| @@ -11253,8 +11584,7 @@ | |||||||
|     "util-deprecate": { |     "util-deprecate": { | ||||||
|       "version": "1.0.2", |       "version": "1.0.2", | ||||||
|       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", |       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", | ||||||
|       "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", |       "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "util.promisify": { |     "util.promisify": { | ||||||
|       "version": "1.0.1", |       "version": "1.0.1", | ||||||
| @@ -11766,7 +12096,11 @@ | |||||||
|           "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", |           "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", | ||||||
|           "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", |           "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", | ||||||
|           "dev": true, |           "dev": true, | ||||||
|           "optional": true |           "optional": true, | ||||||
|  |           "requires": { | ||||||
|  |             "bindings": "^1.5.0", | ||||||
|  |             "nan": "^2.12.1" | ||||||
|  |           } | ||||||
|         }, |         }, | ||||||
|         "glob-parent": { |         "glob-parent": { | ||||||
|           "version": "3.1.0", |           "version": "3.1.0", | ||||||
| @@ -12068,7 +12402,11 @@ | |||||||
|           "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", |           "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", | ||||||
|           "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", |           "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", | ||||||
|           "dev": true, |           "dev": true, | ||||||
|           "optional": true |           "optional": true, | ||||||
|  |           "requires": { | ||||||
|  |             "bindings": "^1.5.0", | ||||||
|  |             "nan": "^2.12.1" | ||||||
|  |           } | ||||||
|         }, |         }, | ||||||
|         "glob-parent": { |         "glob-parent": { | ||||||
|           "version": "3.1.0", |           "version": "3.1.0", | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ | |||||||
|     "i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'" |     "i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'" | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|  |     "@adapttive/vue-markdown": "^3.0.3", | ||||||
|     "axios": "^0.21.1", |     "axios": "^0.21.1", | ||||||
|     "core-js": "^3.8.2", |     "core-js": "^3.8.2", | ||||||
|     "fuse.js": "^6.4.6", |     "fuse.js": "^6.4.6", | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|       {{ name }} |       {{ name }} | ||||||
|     </v-card-title> |     </v-card-title> | ||||||
|     <v-card-text> |     <v-card-text> | ||||||
|       {{ description }} |       <vue-markdown :source="description"> </vue-markdown> | ||||||
|       <div class="my-2"></div> |       <div class="my-2"></div> | ||||||
|       <v-row dense disabled> |       <v-row dense disabled> | ||||||
|         <v-col> |         <v-col> | ||||||
| @@ -32,7 +32,7 @@ | |||||||
|       </v-row> |       </v-row> | ||||||
|       <v-row> |       <v-row> | ||||||
|         <v-col cols="12" sm="12" md="4" lg="4"> |         <v-col cols="12" sm="12" md="4" lg="4"> | ||||||
|           <h2 class="mb-4">{{$t('recipe.ingredients')}}</h2> |           <h2 class="mb-4">{{ $t("recipe.ingredients") }}</h2> | ||||||
|           <div |           <div | ||||||
|             v-for="(ingredient, index) in ingredients" |             v-for="(ingredient, index) in ingredients" | ||||||
|             :key="generateKey('ingredient', index)" |             :key="generateKey('ingredient', index)" | ||||||
| @@ -47,7 +47,7 @@ | |||||||
|           </div> |           </div> | ||||||
|  |  | ||||||
|           <div v-if="categories[0]"> |           <div v-if="categories[0]"> | ||||||
|             <h2 class="mt-4">{{$t('recipe.categories')}}</h2> |             <h2 class="mt-4">{{ $t("recipe.categories") }}</h2> | ||||||
|             <v-chip |             <v-chip | ||||||
|               class="ma-1" |               class="ma-1" | ||||||
|               color="accent" |               color="accent" | ||||||
| @@ -60,7 +60,7 @@ | |||||||
|           </div> |           </div> | ||||||
|  |  | ||||||
|           <div v-if="tags[0]"> |           <div v-if="tags[0]"> | ||||||
|             <h2 class="mt-4">{{$t('recipe.tags')}}</h2> |             <h2 class="mt-4">{{ $t("recipe.tags") }}</h2> | ||||||
|             <v-chip |             <v-chip | ||||||
|               class="ma-1" |               class="ma-1" | ||||||
|               color="accent" |               color="accent" | ||||||
| @@ -72,7 +72,7 @@ | |||||||
|             </v-chip> |             </v-chip> | ||||||
|           </div> |           </div> | ||||||
|  |  | ||||||
|           <h2 v-if="notes[0]" class="my-4">{{$t('recipe.notes')}}</h2> |           <h2 v-if="notes[0]" class="my-4">{{ $t("recipe.notes") }}</h2> | ||||||
|           <v-card |           <v-card | ||||||
|             class="mt-1" |             class="mt-1" | ||||||
|             v-for="(note, index) in notes" |             v-for="(note, index) in notes" | ||||||
| @@ -87,7 +87,7 @@ | |||||||
|         <v-divider class="my-divider" :vertical="true"></v-divider> |         <v-divider class="my-divider" :vertical="true"></v-divider> | ||||||
|  |  | ||||||
|         <v-col cols="12" sm="12" md="8" lg="8"> |         <v-col cols="12" sm="12" md="8" lg="8"> | ||||||
|           <h2 class="mb-4">{{$t('recipe.instructions')}}</h2> |           <h2 class="mb-4">{{ $t("recipe.instructions") }}</h2> | ||||||
|           <v-hover |           <v-hover | ||||||
|             v-for="(step, index) in instructions" |             v-for="(step, index) in instructions" | ||||||
|             :key="generateKey('step', index)" |             :key="generateKey('step', index)" | ||||||
| @@ -99,8 +99,14 @@ | |||||||
|               :elevation="hover ? 12 : 2" |               :elevation="hover ? 12 : 2" | ||||||
|               @click="toggleDisabled(index)" |               @click="toggleDisabled(index)" | ||||||
|             > |             > | ||||||
|               <v-card-title>{{ $t('recipe.step-index', {step: index + 1}) }}</v-card-title> |               <v-card-title>{{ | ||||||
|               <v-card-text>{{ step.text }}</v-card-text> |                 $t("recipe.step-index", { step: index + 1 }) | ||||||
|  |               }}</v-card-title> | ||||||
|  |               <v-card-text> | ||||||
|  |                 <vue-markdown> | ||||||
|  |                   {{ step.text }} | ||||||
|  |                 </vue-markdown> | ||||||
|  |               </v-card-text> | ||||||
|             </v-card> |             </v-card> | ||||||
|           </v-hover> |           </v-hover> | ||||||
|         </v-col> |         </v-col> | ||||||
| @@ -121,7 +127,7 @@ | |||||||
|           target="_blank" |           target="_blank" | ||||||
|           class="rounded-sm mr-4" |           class="rounded-sm mr-4" | ||||||
|         > |         > | ||||||
|           {{$t('recipe.original-url')}} |           {{ $t("recipe.original-url") }} | ||||||
|         </v-btn> |         </v-btn> | ||||||
|       </v-row> |       </v-row> | ||||||
|     </v-card-text> |     </v-card-text> | ||||||
| @@ -129,8 +135,12 @@ | |||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
|  | import VueMarkdown from "@adapttive/vue-markdown"; | ||||||
| import utils from "../../utils"; | import utils from "../../utils"; | ||||||
| export default { | export default { | ||||||
|  |   components: { | ||||||
|  |     VueMarkdown, | ||||||
|  |   }, | ||||||
|   props: { |   props: { | ||||||
|     name: String, |     name: String, | ||||||
|     description: String, |     description: String, | ||||||
|   | |||||||
| @@ -1,63 +0,0 @@ | |||||||
| from typing import List |  | ||||||
|  |  | ||||||
| from app_config import USE_MONGO, USE_SQL |  | ||||||
|  |  | ||||||
| from db.db_base import BaseDocument |  | ||||||
| from db.db_setup import USE_MONGO, USE_SQL |  | ||||||
| from db.mongo.meal_models import MealDocument, MealPlanDocument |  | ||||||
| from db.sql.db_session import create_session |  | ||||||
| from db.sql.meal_models import MealPlanModel |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class _Meals(BaseDocument): |  | ||||||
|     def __init__(self) -> None: |  | ||||||
|         self.primary_key = "uid" |  | ||||||
|         if USE_SQL: |  | ||||||
|             self.sql_model = MealPlanModel |  | ||||||
|             self.create_session = create_session |  | ||||||
|  |  | ||||||
|         self.document = MealPlanDocument |  | ||||||
|  |  | ||||||
|     @staticmethod |  | ||||||
|     def _process_meals(meals: List[dict]) -> List[MealDocument]: |  | ||||||
|         """Turns a list of Meals in dictionary form into a list of |  | ||||||
|         MealDocuments that can be attached to a MealPlanDocument |  | ||||||
|  |  | ||||||
|  |  | ||||||
|         Args: \n |  | ||||||
|             meals (List[dict]): From a Pydantic Class in meal_services.py \n |  | ||||||
|  |  | ||||||
|         Returns: |  | ||||||
|             a List of MealDocuments |  | ||||||
|         """ |  | ||||||
|         meal_docs = [] |  | ||||||
|         for meal in meals: |  | ||||||
|             meal_doc = MealDocument(**meal) |  | ||||||
|             meal_docs.append(meal_doc) |  | ||||||
|  |  | ||||||
|         return meal_docs |  | ||||||
|  |  | ||||||
|     def save_new_mongo(self, plan_data: dict) -> None: |  | ||||||
|         """Saves a new meal plan into the database |  | ||||||
|  |  | ||||||
|         Args: \n |  | ||||||
|             plan_data (dict): From a Pydantic Class in meal_services.py \n |  | ||||||
|         """ |  | ||||||
|  |  | ||||||
|         if USE_MONGO: |  | ||||||
|             plan_data["meals"] = _Meals._process_meals(plan_data["meals"]) |  | ||||||
|             document = self.document(**plan_data) |  | ||||||
|  |  | ||||||
|             document.save() |  | ||||||
|         elif USE_SQL: |  | ||||||
|             pass |  | ||||||
|  |  | ||||||
|     def update_mongo(self, uid: str, plan_data: dict) -> dict: |  | ||||||
|         if USE_MONGO: |  | ||||||
|             document = self.document.objects.get(uid=uid) |  | ||||||
|             if document: |  | ||||||
|                 new_meals = _Meals._process_meals(plan_data["meals"]) |  | ||||||
|                 document.update(set__meals=new_meals) |  | ||||||
|                 document.save() |  | ||||||
|         elif USE_SQL: |  | ||||||
|             pass |  | ||||||
| @@ -1,68 +0,0 @@ | |||||||
| from app_config import USE_MONGO, USE_SQL |  | ||||||
|  |  | ||||||
| from db.db_base import BaseDocument |  | ||||||
| from db.mongo.recipe_models import RecipeDocument |  | ||||||
| from db.sql.db_session import create_session |  | ||||||
| from db.sql.recipe_models import RecipeModel |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class _Recipes(BaseDocument): |  | ||||||
|     def __init__(self) -> None: |  | ||||||
|         self.primary_key = "slug" |  | ||||||
|         if USE_SQL: |  | ||||||
|             self.sql_model = RecipeModel |  | ||||||
|             self.create_session = create_session |  | ||||||
|         else: |  | ||||||
|             self.document = RecipeDocument |  | ||||||
|  |  | ||||||
|     def save_new_sql(self, recipe_data: dict): |  | ||||||
|         session = self.create_session() |  | ||||||
|         new_recipe = self.sql_model(**recipe_data) |  | ||||||
|         session.add(new_recipe) |  | ||||||
|         session.commit() |  | ||||||
|  |  | ||||||
|         return recipe_data |  | ||||||
|  |  | ||||||
|     def update_mongo(self, slug: str, new_data: dict) -> None: |  | ||||||
|         if USE_MONGO: |  | ||||||
|             document = self.document.objects.get(slug=slug) |  | ||||||
|  |  | ||||||
|             if document: |  | ||||||
|                 document.update(set__name=new_data.get("name")) |  | ||||||
|                 document.update(set__description=new_data.get("description")) |  | ||||||
|                 document.update(set__image=new_data.get("image")) |  | ||||||
|                 document.update(set__recipeYield=new_data.get("recipeYield")) |  | ||||||
|                 document.update(set__recipeIngredient=new_data.get("recipeIngredient")) |  | ||||||
|                 document.update( |  | ||||||
|                     set__recipeInstructions=new_data.get("recipeInstructions") |  | ||||||
|                 ) |  | ||||||
|                 document.update(set__totalTime=new_data.get("totalTime")) |  | ||||||
|  |  | ||||||
|                 document.update(set__slug=new_data.get("slug")) |  | ||||||
|                 document.update(set__categories=new_data.get("categories")) |  | ||||||
|                 document.update(set__tags=new_data.get("tags")) |  | ||||||
|                 document.update(set__notes=new_data.get("notes")) |  | ||||||
|                 document.update(set__orgURL=new_data.get("orgURL")) |  | ||||||
|                 document.update(set__rating=new_data.get("rating")) |  | ||||||
|                 document.update(set__extras=new_data.get("extras")) |  | ||||||
|                 document.save() |  | ||||||
|  |  | ||||||
|                 return new_data |  | ||||||
|         # elif USE_SQL: |  | ||||||
|         #     session, recipe = self._query_one(match_value=slug) |  | ||||||
|         #     recipe.update(session=session, **new_data) |  | ||||||
|         #     recipe_dict = recipe.dict() |  | ||||||
|         #     session.commit() |  | ||||||
|  |  | ||||||
|         #     session.close() |  | ||||||
|  |  | ||||||
|         #     return recipe_dict |  | ||||||
|  |  | ||||||
|     def update_image(self, slug: str, extension: str) -> None: |  | ||||||
|         if USE_MONGO: |  | ||||||
|             document = self.document.objects.get(slug=slug) |  | ||||||
|  |  | ||||||
|             if document: |  | ||||||
|                 document.update(set__image=f"{slug}.{extension}") |  | ||||||
|         elif USE_SQL: |  | ||||||
|             pass |  | ||||||
| @@ -1,44 +0,0 @@ | |||||||
| from app_config import USE_MONGO, USE_SQL |  | ||||||
|  |  | ||||||
| from db.db_base import BaseDocument |  | ||||||
| from db.db_setup import USE_MONGO, USE_SQL |  | ||||||
| from db.mongo.settings_models import SiteSettingsDocument, WebhooksDocument |  | ||||||
| from db.sql.db_session import create_session |  | ||||||
| from db.sql.settings_models import SiteSettingsModel |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class _Settings(BaseDocument): |  | ||||||
|     def __init__(self) -> None: |  | ||||||
|  |  | ||||||
|         self.primary_key = "name" |  | ||||||
|  |  | ||||||
|         if USE_SQL: |  | ||||||
|             self.sql_model = SiteSettingsModel |  | ||||||
|             self.create_session = create_session |  | ||||||
|  |  | ||||||
|         self.document = SiteSettingsDocument |  | ||||||
|  |  | ||||||
|     def save_new(self, main: dict, webhooks: dict) -> str: |  | ||||||
|  |  | ||||||
|         if USE_MONGO: |  | ||||||
|             main["webhooks"] = WebhooksDocument(**webhooks) |  | ||||||
|             new_doc = self.document(**main) |  | ||||||
|             return new_doc.save() |  | ||||||
|  |  | ||||||
|         elif USE_SQL: |  | ||||||
|             session = create_session() |  | ||||||
|             new_settings = self.sql_model(main.get("name"), webhooks) |  | ||||||
|  |  | ||||||
|             session.add(new_settings) |  | ||||||
|             session.commit() |  | ||||||
|  |  | ||||||
|             return new_settings.dict() |  | ||||||
|  |  | ||||||
|     def update_mongo(self, name: str, new_data: dict) -> dict: |  | ||||||
|         if USE_MONGO: |  | ||||||
|             document = self.document.objects.get(name=name) |  | ||||||
|             if document: |  | ||||||
|                 document.update(set__webhooks=WebhooksDocument(**new_data["webhooks"])) |  | ||||||
|                 document.save() |  | ||||||
|         elif USE_SQL: |  | ||||||
|             return |  | ||||||
| @@ -1,56 +0,0 @@ | |||||||
| from app_config import USE_MONGO, USE_SQL |  | ||||||
|  |  | ||||||
| from db.db_base import BaseDocument |  | ||||||
| from db.db_setup import USE_MONGO, USE_SQL |  | ||||||
| from db.mongo.settings_models import SiteThemeDocument, ThemeColorsDocument |  | ||||||
| from db.sql.db_session import create_session |  | ||||||
| from db.sql.theme_models import SiteThemeModel |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class _Themes(BaseDocument): |  | ||||||
|     def __init__(self) -> None: |  | ||||||
|         self.primary_key = "name" |  | ||||||
|         if USE_SQL: |  | ||||||
|             self.sql_model = SiteThemeModel |  | ||||||
|             self.create_session = create_session |  | ||||||
|         else: |  | ||||||
|             self.document = SiteThemeDocument |  | ||||||
|  |  | ||||||
|     def save_new(self, theme_data: dict) -> None: |  | ||||||
|         if USE_MONGO: |  | ||||||
|             theme_data["colors"] = ThemeColorsDocument(**theme_data["colors"]) |  | ||||||
|  |  | ||||||
|             document = self.document(**theme_data) |  | ||||||
|  |  | ||||||
|             document.save() |  | ||||||
|         elif USE_SQL: |  | ||||||
|             session = self.create_session() |  | ||||||
|             new_theme = self.sql_model(**theme_data) |  | ||||||
|  |  | ||||||
|             session.add(new_theme) |  | ||||||
|             session.commit() |  | ||||||
|  |  | ||||||
|             return_data = new_theme.dict() |  | ||||||
|  |  | ||||||
|             session.close() |  | ||||||
|             return return_data |  | ||||||
|  |  | ||||||
|     def update(self, data: dict) -> dict: |  | ||||||
|         if USE_MONGO: |  | ||||||
|             colors = ThemeColorsDocument(**data["colors"]) |  | ||||||
|             theme_document = self.document.objects.get(name=data.get("name")) |  | ||||||
|  |  | ||||||
|             if theme_document: |  | ||||||
|                 theme_document.update(set__colors=colors) |  | ||||||
|                 theme_document.save() |  | ||||||
|             else: |  | ||||||
|                 raise Exception("No database entry was found to update") |  | ||||||
|  |  | ||||||
|         elif USE_SQL: |  | ||||||
|             session, theme_model = self._query_one( |  | ||||||
|                 match_value=data["name"], match_key="name" |  | ||||||
|             ) |  | ||||||
|  |  | ||||||
|             theme_model.update(**data) |  | ||||||
|             session.commit() |  | ||||||
|             session.close() |  | ||||||
| @@ -7,6 +7,7 @@ import sqlalchemy.orm as orm | |||||||
| from db.sql.model_base import BaseMixins, SqlAlchemyBase | from db.sql.model_base import BaseMixins, SqlAlchemyBase | ||||||
| from slugify import slugify | from slugify import slugify | ||||||
| from sqlalchemy.ext.orderinglist import ordering_list | from sqlalchemy.ext.orderinglist import ordering_list | ||||||
|  | from sqlalchemy.orm import validates | ||||||
| from utils.logger import logger | from utils.logger import logger | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -43,20 +44,26 @@ recipes2tags = sa.Table( | |||||||
| class Category(SqlAlchemyBase): | class Category(SqlAlchemyBase): | ||||||
|     __tablename__ = "categories" |     __tablename__ = "categories" | ||||||
|     id = sa.Column(sa.Integer, primary_key=True) |     id = sa.Column(sa.Integer, primary_key=True) | ||||||
|     name = sa.Column(sa.String, index=True) |     name = sa.Column(sa.String, index=True, nullable=False) | ||||||
|     slug = sa.Column(sa.String, index=True, unique=True) |     slug = sa.Column(sa.String, index=True, unique=True, nullable=False) | ||||||
|     recipes = orm.relationship( |     recipes = orm.relationship( | ||||||
|         "RecipeModel", secondary=recipes2categories, back_populates="categories" |         "RecipeModel", secondary=recipes2categories, back_populates="categories" | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|  |     @validates("name") | ||||||
|  |     def validate_name(self, key, name): | ||||||
|  |         assert not name == "" | ||||||
|  |         return name | ||||||
|  |  | ||||||
|     def __init__(self, name) -> None: |     def __init__(self, name) -> None: | ||||||
|         self.name = name.strip() |         self.name = name.strip() | ||||||
|         self.slug = slugify(name) |         self.slug = slugify(name) | ||||||
|  |  | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def create_if_not_exist(session, name: str = None): |     def create_if_not_exist(session, name: str = None): | ||||||
|  |         test_slug = slugify(name) | ||||||
|         try: |         try: | ||||||
|             result = session.query(Category).filter(Category.name == name.strip()).one() |             result = session.query(Category).filter(Category.slug == test_slug).one() | ||||||
|             if result: |             if result: | ||||||
|                 logger.info("Category exists, associating recipe") |                 logger.info("Category exists, associating recipe") | ||||||
|                 return result |                 return result | ||||||
| @@ -82,12 +89,17 @@ class Category(SqlAlchemyBase): | |||||||
| class Tag(SqlAlchemyBase): | class Tag(SqlAlchemyBase): | ||||||
|     __tablename__ = "tags" |     __tablename__ = "tags" | ||||||
|     id = sa.Column(sa.Integer, primary_key=True) |     id = sa.Column(sa.Integer, primary_key=True) | ||||||
|     name = sa.Column(sa.String, index=True) |     name = sa.Column(sa.String, index=True, nullable=False) | ||||||
|     slug = sa.Column(sa.String, index=True, unique=True) |     slug = sa.Column(sa.String, index=True, unique=True, nullable=False) | ||||||
|     recipes = orm.relationship( |     recipes = orm.relationship( | ||||||
|         "RecipeModel", secondary=recipes2tags, back_populates="tags" |         "RecipeModel", secondary=recipes2tags, back_populates="tags" | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|  |     @validates("name") | ||||||
|  |     def validate_name(self, key, name): | ||||||
|  |         assert not name == "" | ||||||
|  |         return name | ||||||
|  |  | ||||||
|     def to_str(self): |     def to_str(self): | ||||||
|         return self.name |         return self.name | ||||||
|  |  | ||||||
| @@ -105,8 +117,9 @@ class Tag(SqlAlchemyBase): | |||||||
|  |  | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def create_if_not_exist(session, name: str = None): |     def create_if_not_exist(session, name: str = None): | ||||||
|  |         test_slug = slugify(name) | ||||||
|         try: |         try: | ||||||
|             result = session.query(Tag).filter(Tag.name == name.strip()).first() |             result = session.query(Tag).filter(Tag.slug == test_slug).first() | ||||||
|  |  | ||||||
|             if result: |             if result: | ||||||
|                 logger.info("Tag exists, associating recipe") |                 logger.info("Tag exists, associating recipe") | ||||||
| @@ -169,7 +182,7 @@ class RecipeModel(SqlAlchemyBase, BaseMixins): | |||||||
|     id = sa.Column(sa.Integer, primary_key=True) |     id = sa.Column(sa.Integer, primary_key=True) | ||||||
|  |  | ||||||
|     # General Recipe Properties |     # General Recipe Properties | ||||||
|     name = sa.Column(sa.String) |     name = sa.Column(sa.String, nullable=False) | ||||||
|     description = sa.Column(sa.String) |     description = sa.Column(sa.String) | ||||||
|     image = sa.Column(sa.String) |     image = sa.Column(sa.String) | ||||||
|     recipeYield = sa.Column(sa.String) |     recipeYield = sa.Column(sa.String) | ||||||
| @@ -205,6 +218,11 @@ class RecipeModel(SqlAlchemyBase, BaseMixins): | |||||||
|     orgURL = sa.Column(sa.String) |     orgURL = sa.Column(sa.String) | ||||||
|     extras: List[ApiExtras] = orm.relationship("ApiExtras", cascade="all, delete") |     extras: List[ApiExtras] = orm.relationship("ApiExtras", cascade="all, delete") | ||||||
|  |  | ||||||
|  |     @validates("name") | ||||||
|  |     def validate_name(self, key, name): | ||||||
|  |         assert not name == "" | ||||||
|  |         return name | ||||||
|  |  | ||||||
|     def __init__( |     def __init__( | ||||||
|         self, |         self, | ||||||
|         session, |         session, | ||||||
|   | |||||||
| @@ -95,9 +95,24 @@ class ImportDatabase: | |||||||
|             del recipe_dict["_id"] |             del recipe_dict["_id"] | ||||||
|             del recipe_dict["dateAdded"] |             del recipe_dict["dateAdded"] | ||||||
|         except: |         except: | ||||||
|             logger.info("Detected new backup Schema, skipping migration...") |             pass | ||||||
|             return recipe_dict |  | ||||||
|         # Migration from list to Object Type Data |         # Migration from list to Object Type Data | ||||||
|  |         try: | ||||||
|  |             if "" in recipe_dict["tags"]: | ||||||
|  |                 recipe_dict["tags"] = [ | ||||||
|  |                     tag for tag in recipe_dict["tags"] if not tag == "" | ||||||
|  |                 ] | ||||||
|  |         except: | ||||||
|  |             pass | ||||||
|  |  | ||||||
|  |         try: | ||||||
|  |             if "" in recipe_dict["categories"]: | ||||||
|  |                 recipe_dict["categories"] = [ | ||||||
|  |                     cat for cat in recipe_dict["categories"] if not cat == "" | ||||||
|  |                 ] | ||||||
|  |         except: | ||||||
|  |             pass | ||||||
|  |  | ||||||
|         if type(recipe_dict["extras"]) == list: |         if type(recipe_dict["extras"]) == list: | ||||||
|             recipe_dict["extras"] = {} |             recipe_dict["extras"] = {} | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user