diff --git a/frontend.old/src/components/UI/Dialogs/ConfirmationDialog.vue b/frontend.old/src/components/UI/Dialogs/ConfirmationDialog.vue deleted file mode 100644 index 7d7ea8ea574b..000000000000 --- a/frontend.old/src/components/UI/Dialogs/ConfirmationDialog.vue +++ /dev/null @@ -1,137 +0,0 @@ - - - - - diff --git a/frontend/api/class-interfaces/_base.ts b/frontend/api/class-interfaces/_base.ts new file mode 100644 index 000000000000..74ecc49cc84b --- /dev/null +++ b/frontend/api/class-interfaces/_base.ts @@ -0,0 +1,10 @@ +import { ApiRequestInstance } from "~/types/api"; + +export class BaseAPIClass { + requests: ApiRequestInstance + + constructor(requests: ApiRequestInstance) { + this.requests = requests; + } +} + diff --git a/frontend/api/class-interfaces/recipes.ts b/frontend/api/class-interfaces/recipes.ts new file mode 100644 index 000000000000..12ba427429d1 --- /dev/null +++ b/frontend/api/class-interfaces/recipes.ts @@ -0,0 +1,55 @@ +import { BaseAPIClass } from "./_base"; +import { Recipe } from "~/types/api-types/admin"; + +const prefix = "/api"; + +const routes = { + recipesCreate: `${prefix}/recipes/create`, + recipesBase: `${prefix}/recipes`, + recipesSummary: `${prefix}/recipes/summary`, + recipesTestScrapeUrl: `${prefix}/recipes/test-scrape-url`, + recipesCreateUrl: `${prefix}/recipes/create-url`, + recipesCreateFromZip: `${prefix}/recipes/create-from-zip`, + + recipesRecipeSlug: (recipe_slug: string) => `${prefix}/recipes/${recipe_slug}`, + recipesRecipeSlugZip: (recipe_slug: string) => `${prefix}/recipes/${recipe_slug}/zip`, + recipesRecipeSlugImage: (recipe_slug: string) => `${prefix}/recipes/${recipe_slug}/image`, + recipesRecipeSlugAssets: (recipe_slug: string) => `${prefix}/recipes/${recipe_slug}/assets`, +}; + +class RecipeAPI extends BaseAPIClass { + async getAll(start = 0, limit = 9999) { + return await this.requests.get(routes.recipesSummary, { + params: { start, limit }, + }); + } + + async getOne(slug: string) { + return await this.requests.get(routes.recipesRecipeSlug(slug)); + } + + async createOne(name: string) { + return await this.requests.post(routes.recipesBase, { name }); + } + + + + + recipeImage(recipeSlug: string, version = null, key = null) { + return `/api/media/recipes/${recipeSlug}/images/original.webp?&rnd=${key}&version=${version}`; + } + + recipeSmallImage(recipeSlug: string, version = null, key = null) { + return `/api/media/recipes/${recipeSlug}/images/min-original.webp?&rnd=${key}&version=${version}`; + } + + recipeTinyImage(recipeSlug: string, version = null, key = null) { + return `/api/media/recipes/${recipeSlug}/images/tiny-original.webp?&rnd=${key}&version=${version}`; + } + + recipeAssetPath(recipeSlug: string, assetName: string) { + return `/api/media/recipes/${recipeSlug}/assets/${assetName}`; + } +} + +export { RecipeAPI }; diff --git a/frontend/api/index.ts b/frontend/api/index.ts index c61e743f6e35..8c5ea3e2b7b5 100644 --- a/frontend/api/index.ts +++ b/frontend/api/index.ts @@ -1,5 +1,20 @@ +import { RecipeAPI } from "./class-interfaces/recipes"; +import { ApiRequestInstance } from "~/types/api"; +class Api { + private static instance: Api; + public recipes: RecipeAPI; + constructor(requests: ApiRequestInstance) { + if (Api.instance instanceof Api) { + return Api.instance; + } -export const api = {} + this.recipes = new RecipeAPI(requests); + Object.freeze(this); + Api.instance = this; + } +} + +export { Api }; diff --git a/frontend/api/requests.ts b/frontend/api/requests.ts index f21a4bc4f82d..544a99ca8e9e 100644 --- a/frontend/api/requests.ts +++ b/frontend/api/requests.ts @@ -1,5 +1,6 @@ import axios, { AxiosResponse } from "axios"; + interface RequestResponse { response: AxiosResponse | null; data: T | null; diff --git a/frontend/assets/main.css b/frontend/assets/main.css new file mode 100644 index 000000000000..b5ff067e6f6c --- /dev/null +++ b/frontend/assets/main.css @@ -0,0 +1,8 @@ +.layout-enter-active, +.layout-leave-active { + transition: opacity 0.2s; +} +.layout-enter, +.layout-leave-active { + opacity: 0; +} diff --git a/frontend/components/Domain/MealPlan/MealPlanCard.vue b/frontend/component-stagin/Domain/MealPlan/MealPlanCard.vue similarity index 89% rename from frontend/components/Domain/MealPlan/MealPlanCard.vue rename to frontend/component-stagin/Domain/MealPlan/MealPlanCard.vue index 13862cdd09d3..140e9872cb39 100644 --- a/frontend/components/Domain/MealPlan/MealPlanCard.vue +++ b/frontend/component-stagin/Domain/MealPlan/MealPlanCard.vue @@ -2,19 +2,19 @@ - + - + @@ -80,9 +80,9 @@ diff --git a/frontend.old/src/components/UI/CardSection.vue b/frontend/components/Domain/Recipe/RecipeCardSection.vue similarity index 84% rename from frontend.old/src/components/UI/CardSection.vue rename to frontend/components/Domain/Recipe/RecipeCardSection.vue index 35835b31c8e6..7f84c84a8cc7 100644 --- a/frontend.old/src/components/UI/CardSection.vue +++ b/frontend/components/Domain/Recipe/RecipeCardSection.vue @@ -1,7 +1,7 @@ + + + + \ No newline at end of file diff --git a/frontend/pages/admin/manage-users.vue b/frontend/pages/admin/manage-users.vue index f65b2c8a525b..a39f31c72bf6 100644 --- a/frontend/pages/admin/manage-users.vue +++ b/frontend/pages/admin/manage-users.vue @@ -1,16 +1,17 @@ - - - - \ No newline at end of file +
+ + + + + \ No newline at end of file diff --git a/frontend/pages/admin/migrations.vue b/frontend/pages/admin/migrations.vue index f65b2c8a525b..a39f31c72bf6 100644 --- a/frontend/pages/admin/migrations.vue +++ b/frontend/pages/admin/migrations.vue @@ -1,16 +1,17 @@ - - - - \ No newline at end of file +
+ + + + + \ No newline at end of file diff --git a/frontend/pages/admin/site-settings.vue b/frontend/pages/admin/site-settings.vue index f65b2c8a525b..a39f31c72bf6 100644 --- a/frontend/pages/admin/site-settings.vue +++ b/frontend/pages/admin/site-settings.vue @@ -1,16 +1,17 @@ - - - - \ No newline at end of file +
+ + + + + \ No newline at end of file diff --git a/frontend/pages/admin/toolbox.vue b/frontend/pages/admin/toolbox.vue index d0cd7424ba9b..a39f31c72bf6 100644 --- a/frontend/pages/admin/toolbox.vue +++ b/frontend/pages/admin/toolbox.vue @@ -1,16 +1,17 @@ - - - - \ No newline at end of file diff --git a/frontend/pages/index.vue b/frontend/pages/index.vue index 411c8fc22c68..3d3d96a42a34 100644 --- a/frontend/pages/index.vue +++ b/frontend/pages/index.vue @@ -1,16 +1,28 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/frontend/pages/meal-plan/planner.vue b/frontend/pages/meal-plan/planner.vue index f65b2c8a525b..bb6aebe3f129 100644 --- a/frontend/pages/meal-plan/planner.vue +++ b/frontend/pages/meal-plan/planner.vue @@ -3,7 +3,7 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/frontend/pages/user/register.vue b/frontend/pages/user/profile.vue similarity index 92% rename from frontend/pages/user/register.vue rename to frontend/pages/user/profile.vue index 7aa494406644..516e23df5228 100644 --- a/frontend/pages/user/register.vue +++ b/frontend/pages/user/profile.vue @@ -6,6 +6,7 @@ import { defineComponent } from "@nuxtjs/composition-api"; export default defineComponent({ + layout: "admin", setup() { return {}; }, diff --git a/frontend/pages/user/sign-up.vue b/frontend/pages/user/sign-up.vue new file mode 100644 index 000000000000..c234c6995a37 --- /dev/null +++ b/frontend/pages/user/sign-up.vue @@ -0,0 +1,116 @@ + + + + \ No newline at end of file diff --git a/frontend/plugins/globals.js b/frontend/plugins/globals.js new file mode 100644 index 000000000000..f0fd42ee3217 --- /dev/null +++ b/frontend/plugins/globals.js @@ -0,0 +1,206 @@ +import { + mdiAccount, + mdiSilverwareVariant, + mdiPlus, + mdiPlusCircle, + mdiDelete, + mdiContentSave, + mdiContentSaveEdit, + mdiSquareEditOutline, + mdiClose, + mdiTagMultipleOutline, + mdiBookOutline, + mdiAccountCog, + mdiAccountGroup, + mdiHome, + mdiMagnify, + mdiTranslate, + mdiClockTimeFourOutline, + mdiImport, + mdiEmail, + mdiLock, + mdiEye, + mdiEyeOff, + mdiCalendarMinus, + mdiCalendar, + mdiDiceMultiple, + mdiAlertCircle, + mdiDotsVertical, + mdiPrinter, + mdiShareVariant, + mdiHeart, + mdiHeartOutline, + mdiDotsHorizontal, + mdiCheckboxBlankOutline, + mdiCommentTextMultipleOutline, + mdiDownload, + mdiFile, + mdiFilePdfBox, + mdiFileImage, + mdiCodeJson, + mdiArrowUpDown, + mdiCog, + mdiSort, + mdiOrderAlphabeticalAscending, + mdiStar, + mdiNewBox, + mdiShuffleVariant, + mdiAlert, + mdiCheckboxMarkedCircle, + mdiInformation, + mdiBellAlert, + mdiRefreshCircle, + mdiMenu, + mdiWeatherSunny, + mdiWeatherNight, + mdiLink, + mdiRobot, + mdiLinkVariant, + mdiViewModule, + mdiViewDashboard, + mdiTools, + mdiCalendarWeek, + mdiCalendarToday, + mdiCalendarMultiselect, + mdiFormatListChecks, + mdiLogout, + mdiContentCopy, + mdiClipboardCheck, + mdiCloudUpload, + mdiDatabase, + mdiGithub, + mdiFolderOutline, + mdiApi, + mdiTestTube, + mdiDevTo, + mdiBackupRestore, + mdiNotificationClearAll, + mdiFood, + mdiWebhook, + mdiFilter, + mdiAccountPlusOutline, + mdiDesktopTowerMonitor, + mdiFormatColorFill, + mdiFormSelect, + mdiPageLayoutBody, + mdiCalendarWeekBegin, + mdiOpenInNew, + mdiCheck, + mdiBroom, + mdiCartCheck, + mdiArrowLeftBold, + mdiMinus, + mdiWindowClose, + mdiFolderZipOutline, +} from "@mdi/js"; + +const icons = { + // Primary + primary: mdiSilverwareVariant, + + // General + alert: mdiAlert, + alertCircle: mdiAlertCircle, + api: mdiApi, + arrowLeftBold: mdiArrowLeftBold, + arrowUpDown: mdiArrowUpDown, + backupRestore: mdiBackupRestore, + bellAlert: mdiBellAlert, + broom: mdiBroom, + calendar: mdiCalendar, + calendarMinus: mdiCalendarMinus, + calendarMultiselect: mdiCalendarMultiselect, + calendarToday: mdiCalendarToday, + calendarWeek: mdiCalendarWeek, + calendarWeekBegin: mdiCalendarWeekBegin, + cartCheck: mdiCartCheck, + check: mdiCheck, + checkboxBlankOutline: mdiCheckboxBlankOutline, + checkboxMarkedCircle: mdiCheckboxMarkedCircle, + clipboardCheck: mdiClipboardCheck, + clockOutline: mdiClockTimeFourOutline, + codeBraces: mdiCodeJson, + codeJson: mdiCodeJson, + cog: mdiCog, + commentTextMultipleOutline: mdiCommentTextMultipleOutline, + contentCopy: mdiContentCopy, + database: mdiDatabase, + desktopTowerMonitor: mdiDesktopTowerMonitor, + devTo: mdiDevTo, + diceMultiple: mdiDiceMultiple, + dotsHorizontal: mdiDotsHorizontal, + dotsVertical: mdiDotsVertical, + download: mdiDownload, + email: mdiEmail, + externalLink: mdiLinkVariant, + eye: mdiEye, + eyeOff: mdiEyeOff, + file: mdiFile, + fileImage: mdiFileImage, + filePDF: mdiFilePdfBox, + filter: mdiFilter, + folderOutline: mdiFolderOutline, + food: mdiFood, + formatColorFill: mdiFormatColorFill, + formatListCheck: mdiFormatListChecks, + formSelect: mdiFormSelect, + github: mdiGithub, + heart: mdiHeart, + heartOutline: mdiHeartOutline, + home: mdiHome, + import: mdiImport, + information: mdiInformation, + link: mdiLink, + lock: mdiLock, + logout: mdiLogout, + menu: mdiMenu, + newBox: mdiNewBox, + notificationClearAll: mdiNotificationClearAll, + openInNew: mdiOpenInNew, + orderAlphabeticalAscending: mdiOrderAlphabeticalAscending, + pageLayoutBody: mdiPageLayoutBody, + printer: mdiPrinter, + refreshCircle: mdiRefreshCircle, + robot: mdiRobot, + search: mdiMagnify, + shareVariant: mdiShareVariant, + shuffleVariant: mdiShuffleVariant, + sort: mdiSort, + star: mdiStar, + testTube: mdiTestTube, + tools: mdiTools, + translate: mdiTranslate, + upload: mdiCloudUpload, + viewDashboard: mdiViewDashboard, + viewModule: mdiViewModule, + weatherNight: mdiWeatherNight, + weatherSunny: mdiWeatherSunny, + webhook: mdiWebhook, + windowClose: mdiWindowClose, + zip: mdiFolderZipOutline, + + // Crud + createAlt: mdiPlus, + create: mdiPlusCircle, + delete: mdiDelete, + save: mdiContentSave, + update: mdiContentSaveEdit, + edit: mdiSquareEditOutline, + close: mdiClose, + minus: mdiMinus, + + // Organization + tags: mdiTagMultipleOutline, + pages: mdiBookOutline, + + // Admin + user: mdiAccount, + admin: mdiAccountCog, + group: mdiAccountGroup, + accountPlusOutline: mdiAccountPlusOutline, +}; + +export default ({ app }, inject) => { + // Inject $hello(msg) in Vue, context and store. + inject("globals", { icons }); +}; diff --git a/frontend/static/account.png b/frontend/static/account.png new file mode 100644 index 000000000000..28804298a32c Binary files /dev/null and b/frontend/static/account.png differ diff --git a/frontend/store/index.js b/frontend/store/index.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 896590d01fc6..77f9c2712a7d 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -10,12 +10,13 @@ "strict": true, "noEmit": true, "experimentalDecorators": true, + "strictPropertyInitialization": false, "baseUrl": ".", "paths": { "~/*": ["./*"], "@/*": ["./*"] }, - "types": ["@nuxt/types", "@nuxtjs/axios", "@nuxt/content", "@types/node"] + "types": ["@nuxt/types", "@nuxtjs/axios", "@types/node", "nuxt-i18n", "@nuxtjs/auth-next"] }, "exclude": ["node_modules", ".nuxt", "dist"] } diff --git a/frontend/types/api-types/admin.ts b/frontend/types/api-types/admin.ts new file mode 100644 index 000000000000..2d86f73d1b39 --- /dev/null +++ b/frontend/types/api-types/admin.ts @@ -0,0 +1,253 @@ +/* tslint:disable */ +/* eslint-disable */ +/** +/* This file was automatically generated from pydantic models by running pydantic2ts. +/* Do not modify it by hand - just update the pydantic models and then re-run the script +*/ + +export interface AppInfo { + production: boolean; + version: string; + demoStatus: boolean; +} +export interface AppStatistics { + totalRecipes: number; + totalUsers: number; + totalGroups: number; + uncategorizedRecipes: number; + untaggedRecipes: number; +} +export interface BackupJob { + tag?: string; + options: BackupOptions; + templates?: string[]; +} +export interface BackupOptions { + recipes?: boolean; + settings?: boolean; + pages?: boolean; + themes?: boolean; + groups?: boolean; + users?: boolean; + notifications?: boolean; +} +export interface CategoryBase { + name: string; + id: number; + slug: string; +} +export interface ChowdownURL { + url: string; +} +export interface Colors { + primary?: string; + accent?: string; + secondary?: string; + success?: string; + info?: string; + warning?: string; + error?: string; +} +export interface CustomPageBase { + name: string; + slug?: string; + position: number; + categories?: RecipeCategoryResponse[]; +} +export interface RecipeCategoryResponse { + name: string; + id: number; + slug: string; + recipes?: Recipe[]; +} +export interface Recipe { + id?: number; + name?: string; + slug?: string; + image?: unknown; + description?: string; + recipeCategory?: string[]; + tags?: string[]; + rating?: number; + dateAdded?: string; + dateUpdated?: string; + recipeYield?: string; + recipeIngredient?: RecipeIngredient[]; + recipeInstructions?: RecipeStep[]; + nutrition?: Nutrition; + tools?: string[]; + totalTime?: string; + prepTime?: string; + performTime?: string; + settings?: RecipeSettings; + assets?: RecipeAsset[]; + notes?: RecipeNote[]; + orgURL?: string; + extras?: { + [k: string]: unknown; + }; + comments?: CommentOut[]; +} +export interface RecipeIngredient { + title?: string; + note?: string; + unit?: RecipeIngredientUnit; + food?: RecipeIngredientFood; + disableAmount?: boolean; + quantity?: number; +} +export interface RecipeIngredientUnit { + name?: string; + description?: string; +} +export interface RecipeIngredientFood { + name?: string; + description?: string; +} +export interface RecipeStep { + title?: string; + text: string; +} +export interface Nutrition { + calories?: string; + fatContent?: string; + proteinContent?: string; + carbohydrateContent?: string; + fiberContent?: string; + sodiumContent?: string; + sugarContent?: string; +} +export interface RecipeSettings { + public?: boolean; + showNutrition?: boolean; + showAssets?: boolean; + landscapeView?: boolean; + disableComments?: boolean; + disableAmount?: boolean; +} +export interface RecipeAsset { + name: string; + icon: string; + fileName?: string; +} +export interface RecipeNote { + title: string; + text: string; +} +export interface CommentOut { + text: string; + id: number; + uuid: string; + recipeSlug: string; + dateAdded: string; + user: UserBase; +} +export interface UserBase { + id: number; + username?: string; + admin: boolean; +} +export interface CustomPageImport { + name: string; + status: boolean; + exception?: string; +} +export interface CustomPageOut { + name: string; + slug?: string; + position: number; + categories?: RecipeCategoryResponse[]; + id: number; +} +export interface DebugInfo { + production: boolean; + version: string; + demoStatus: boolean; + apiPort: number; + apiDocs: boolean; + dbType: string; + dbUrl: string; + defaultGroup: string; +} +export interface GroupImport { + name: string; + status: boolean; + exception?: string; +} +export interface ImportBase { + name: string; + status: boolean; + exception?: string; +} +export interface ImportJob { + recipes?: boolean; + settings?: boolean; + pages?: boolean; + themes?: boolean; + groups?: boolean; + users?: boolean; + notifications?: boolean; + name: string; + force?: boolean; + rebase?: boolean; +} +export interface Imports { + imports: LocalBackup[]; + templates: string[]; +} +export interface LocalBackup { + name: string; + date: string; +} +export interface MigrationFile { + name: string; + date: string; +} +export interface MigrationImport { + name: string; + status: boolean; + exception?: string; + slug?: string; +} +export interface Migrations { + type: string; + files?: MigrationFile[]; +} +export interface NotificationImport { + name: string; + status: boolean; + exception?: string; +} +export interface RecipeImport { + name: string; + status: boolean; + exception?: string; + slug?: string; +} +export interface SettingsImport { + name: string; + status: boolean; + exception?: string; +} +export interface SiteSettings { + language?: string; + firstDayOfWeek?: number; + showRecent?: boolean; + cardsPerSection?: number; + categories?: CategoryBase[]; +} +export interface SiteTheme { + id?: number; + name?: string; + colors?: Colors; +} +export interface ThemeImport { + name: string; + status: boolean; + exception?: string; +} +export interface UserImport { + name: string; + status: boolean; + exception?: string; +} diff --git a/frontend/types/api-types/events.ts b/frontend/types/api-types/events.ts new file mode 100644 index 000000000000..d5b45234f612 --- /dev/null +++ b/frontend/types/api-types/events.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** +/* This file was automatically generated from pydantic models by running pydantic2ts. +/* Do not modify it by hand - just update the pydantic models and then re-run the script +*/ + +export type EventCategory = "general" | "recipe" | "backup" | "scheduled" | "migration" | "group" | "user"; +export type DeclaredTypes = "General" | "Discord" | "Gotify" | "Pushover" | "Home Assistant"; +export type GotifyPriority = "low" | "moderate" | "normal" | "high"; + +export interface Discord { + webhookId: string; + webhookToken: string; +} +export interface Event { + id?: number; + title: string; + text: string; + timeStamp?: string; + category?: EventCategory & string; +} +export interface EventNotificationIn { + id?: number; + name?: string; + type?: DeclaredTypes & string; + general?: boolean; + recipe?: boolean; + backup?: boolean; + scheduled?: boolean; + migration?: boolean; + group?: boolean; + user?: boolean; + notificationUrl?: string; +} +export interface EventNotificationOut { + id?: number; + name?: string; + type?: DeclaredTypes & string; + general?: boolean; + recipe?: boolean; + backup?: boolean; + scheduled?: boolean; + migration?: boolean; + group?: boolean; + user?: boolean; +} +export interface EventsOut { + total: number; + events: Event[]; +} +export interface Gotify { + hostname: string; + token: string; + priority?: GotifyPriority & string; +} +export interface TestEvent { + id?: number; + testUrl?: string; +} diff --git a/frontend/types/api-types/meal-plan.ts b/frontend/types/api-types/meal-plan.ts new file mode 100644 index 000000000000..74c3870f9e89 --- /dev/null +++ b/frontend/types/api-types/meal-plan.ts @@ -0,0 +1,52 @@ +/* tslint:disable */ +/* eslint-disable */ +/** +/* This file was automatically generated from pydantic models by running pydantic2ts. +/* Do not modify it by hand - just update the pydantic models and then re-run the script +*/ + +export interface ListItem { + title?: string; + text?: string; + quantity?: number; + checked?: boolean; +} +export interface MealDayIn { + date?: string; + meals: MealIn[]; +} +export interface MealIn { + slug?: string; + name?: string; + description?: string; +} +export interface MealDayOut { + date?: string; + meals: MealIn[]; + id: number; +} +export interface MealPlanIn { + group: string; + startDate: string; + endDate: string; + planDays: MealDayIn[]; +} +export interface MealPlanOut { + group: string; + startDate: string; + endDate: string; + planDays: MealDayIn[]; + uid: number; + shoppingList?: number; +} +export interface ShoppingListIn { + name: string; + group?: string; + items: ListItem[]; +} +export interface ShoppingListOut { + name: string; + group?: string; + items: ListItem[]; + id: number; +} diff --git a/frontend/types/api-types/recipe.ts b/frontend/types/api-types/recipe.ts new file mode 100644 index 000000000000..1cf74ba7ef8e --- /dev/null +++ b/frontend/types/api-types/recipe.ts @@ -0,0 +1,141 @@ +/* tslint:disable */ +/* eslint-disable */ +/** +/* This file was automatically generated from pydantic models by running pydantic2ts. +/* Do not modify it by hand - just update the pydantic models and then re-run the script +*/ + +export interface AllRecipeRequest { + properties: string[]; + limit?: number; +} +export interface CategoryBase { + name: string; + id: number; + slug: string; +} +export interface CategoryIn { + name: string; +} +export interface CommentIn { + text: string; +} +export interface CommentOut { + text: string; + id: number; + uuid: string; + recipeSlug: string; + dateAdded: string; + user: UserBase; +} +export interface UserBase { + id: number; + username?: string; + admin: boolean; +} +export interface CommentSaveToDB { + text: string; + recipeSlug: string; + user: number; +} +export interface Nutrition { + calories?: string; + fatContent?: string; + proteinContent?: string; + carbohydrateContent?: string; + fiberContent?: string; + sodiumContent?: string; + sugarContent?: string; +} +export interface Recipe { + id?: number; + name?: string; + slug?: string; + image?: unknown; + description?: string; + recipeCategory?: string[]; + tags?: string[]; + rating?: number; + dateAdded?: string; + dateUpdated?: string; + recipeYield?: string; + recipeIngredient?: RecipeIngredient[]; + recipeInstructions?: RecipeStep[]; + nutrition?: Nutrition; + tools?: string[]; + totalTime?: string; + prepTime?: string; + performTime?: string; + settings?: RecipeSettings; + assets?: RecipeAsset[]; + notes?: RecipeNote[]; + orgURL?: string; + extras?: { + [k: string]: unknown; + }; + comments?: CommentOut[]; +} +export interface RecipeIngredient { + title?: string; + note?: string; + unit?: RecipeIngredientUnit; + food?: RecipeIngredientFood; + disableAmount?: boolean; + quantity?: number; +} +export interface RecipeIngredientUnit { + name?: string; + description?: string; +} +export interface RecipeIngredientFood { + name?: string; + description?: string; +} +export interface RecipeStep { + title?: string; + text: string; +} +export interface RecipeSettings { + public?: boolean; + showNutrition?: boolean; + showAssets?: boolean; + landscapeView?: boolean; + disableComments?: boolean; + disableAmount?: boolean; +} +export interface RecipeAsset { + name: string; + icon: string; + fileName?: string; +} +export interface RecipeNote { + title: string; + text: string; +} +export interface RecipeSlug { + slug: string; +} +export interface RecipeSummary { + id?: number; + name?: string; + slug?: string; + image?: unknown; + description?: string; + recipeCategory?: string[]; + tags?: string[]; + rating?: number; + dateAdded?: string; + dateUpdated?: string; +} +export interface RecipeURLIn { + url: string; +} +export interface SlugResponse {} +export interface TagBase { + name: string; + id: number; + slug: string; +} +export interface TagIn { + name: string; +} diff --git a/frontend/types/api-types/user.ts b/frontend/types/api-types/user.ts new file mode 100644 index 000000000000..3cc1689e65f3 --- /dev/null +++ b/frontend/types/api-types/user.ts @@ -0,0 +1,166 @@ +/* tslint:disable */ +/* eslint-disable */ +/** +/* This file was automatically generated from pydantic models by running pydantic2ts. +/* Do not modify it by hand - just update the pydantic models and then re-run the script +*/ + +export interface CategoryBase { + name: string; + id: number; + slug: string; +} +export interface ChangePassword { + currentPassword: string; + newPassword: string; +} +export interface CreateToken { + name: string; + parentId: number; + token: string; +} +export interface GroupBase { + name: string; +} +export interface GroupInDB { + name: string; + id: number; + categories?: CategoryBase[]; + webhookUrls?: string[]; + webhookTime?: string; + webhookEnable: boolean; + users?: UserOut[]; + mealplans?: MealPlanOut[]; + shoppingLists?: ShoppingListOut[]; +} +export interface UserOut { + username?: string; + fullName?: string; + email: string; + admin: boolean; + group: string; + favoriteRecipes?: string[]; + id: number; + tokens?: LongLiveTokenOut[]; +} +export interface LongLiveTokenOut { + name: string; + id: number; +} +export interface MealPlanOut { + group: string; + startDate: string; + endDate: string; + planDays: MealDayIn[]; + uid: number; + shoppingList?: number; +} +export interface MealDayIn { + date?: string; + meals: MealIn[]; +} +export interface MealIn { + slug?: string; + name?: string; + description?: string; +} +export interface ShoppingListOut { + name: string; + group?: string; + items: ListItem[]; + id: number; +} +export interface ListItem { + title?: string; + text?: string; + quantity?: number; + checked?: boolean; +} +export interface LoingLiveTokenIn { + name: string; +} +export interface LongLiveTokenInDB { + name: string; + parentId: number; + token: string; + id: number; + user: UserInDB; +} +export interface UserInDB { + username?: string; + fullName?: string; + email: string; + admin: boolean; + group: string; + favoriteRecipes?: string[]; + id: number; + tokens?: LongLiveTokenOut[]; + password: string; +} +export interface RecipeSummary { + id?: number; + name?: string; + slug?: string; + image?: unknown; + description?: string; + recipeCategory?: string[]; + tags?: string[]; + rating?: number; + dateAdded?: string; + dateUpdated?: string; +} +export interface SignUpIn { + name: string; + admin: boolean; +} +export interface SignUpOut { + name: string; + admin: boolean; + token: string; + id: number; +} +export interface SignUpToken { + name: string; + admin: boolean; + token: string; +} +export interface Token { + access_token: string; + token_type: string; +} +export interface TokenData { + username?: string; +} +export interface UpdateGroup { + name: string; + id: number; + categories?: CategoryBase[]; + webhookUrls?: string[]; + webhookTime?: string; + webhookEnable: boolean; +} +export interface UserBase { + username?: string; + fullName?: string; + email: string; + admin: boolean; + group?: string; + favoriteRecipes?: string[]; +} +export interface UserFavorites { + username?: string; + fullName?: string; + email: string; + admin: boolean; + group?: string; + favoriteRecipes?: RecipeSummary[]; +} +export interface UserIn { + username?: string; + fullName?: string; + email: string; + admin: boolean; + group?: string; + favoriteRecipes?: string[]; + password: string; +} diff --git a/frontend/types/api.ts b/frontend/types/api.ts new file mode 100644 index 000000000000..772d1e027f59 --- /dev/null +++ b/frontend/types/api.ts @@ -0,0 +1,16 @@ +import { AxiosResponse } from "axios"; + +interface RequestResponse { + response: AxiosResponse | null; + data: T | null; + error: any; + } + +export interface ApiRequestInstance { + get(url: string, data?: object): Promise>; + post(url: string, data: object): Promise>; + put(url: string, data: object): Promise>; + patch(url: string, data: object): Promise>; + delete(url: string, data: object): Promise>; +} + diff --git a/frontend/types/application-types.ts b/frontend/types/application-types.ts new file mode 100644 index 000000000000..6a1d8ff96bfa --- /dev/null +++ b/frontend/types/application-types.ts @@ -0,0 +1,9 @@ +import { TranslateResult } from "vue-i18n"; + +export interface SideBarLink { + icon: string + to: string + title: TranslateResult +} + +export type SidebarLinks = Array \ No newline at end of file diff --git a/frontend/types/vue.d.ts b/frontend/types/vue.d.ts new file mode 100644 index 000000000000..291cda5b2acf --- /dev/null +++ b/frontend/types/vue.d.ts @@ -0,0 +1,14 @@ +import Vue from "vue"; + +declare module "vue/types/vue" { + + interface Vue { + $globals: any; + } +} + +declare module "vue/types/options" { + interface ComponentOptions { + $globals?: any; + } +} diff --git a/frontend.old/src/utils/globals.js b/frontend/utils/globals.js similarity index 100% rename from frontend.old/src/utils/globals.js rename to frontend/utils/globals.js diff --git a/frontend.old/src/utils/index.js b/frontend/utils/index.js similarity index 100% rename from frontend.old/src/utils/index.js rename to frontend/utils/index.js diff --git a/frontend.old/src/utils/recipe.js b/frontend/utils/recipe.js similarity index 100% rename from frontend.old/src/utils/recipe.js rename to frontend/utils/recipe.js diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 46324b261a8b..75e9e06ac47e 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -2,6 +2,22 @@ # yarn lockfile v1 +"@adapttive/vue-markdown@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@adapttive/vue-markdown/-/vue-markdown-4.0.1.tgz#4912aa13482cb764bd7ef894f5e1f42e18a911c2" + integrity sha512-Qqs9zZ2PGaZQBycQnc1hfz4FyJxsmQNLXAYsGPkPipg+wnRIv7+m9cR6Maa4zJbHmGzZrwAMYFE5BMXEUDfh/g== + dependencies: + 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-footnote "^3.0.2" + markdown-it-ins "^3.0.0" + markdown-it-mark "^3.0.0" + markdown-it-sub "^1.0.0" + markdown-it-sup "^1.0.0" + markdown-it-toc-and-anchor "^4.2.0" + "@babel/code-frame@7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" @@ -267,7 +283,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.14.8": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.14.7", "@babel/parser@^7.14.8", "@babel/parser@^7.9.6": version "7.14.8" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.8.tgz#66fd41666b2d7b840bd5ace7f7416d5ac60208d4" integrity sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA== @@ -896,7 +912,7 @@ "@babel/parser" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.14.8": +"@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.14.7", "@babel/traverse@^7.14.8": version "7.14.8" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.8.tgz#c0253f02677c5de1a8ff9df6b0aacbec7da1a8ce" integrity sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg== @@ -953,6 +969,32 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== +"@intlify/shared@^9.0.0": + version "9.1.7" + resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.1.7.tgz#e7d8bc90cb59dc17dd7b4c85a73db16fcb7891fc" + integrity sha512-zt0zlUdalumvT9AjQNxPXA36UgOndUyvBMplh8uRZU0fhWHAwhnJTcf0NaG9Qvr8I1n3HPSs96+kLb/YdwTavQ== + +"@intlify/vue-i18n-extensions@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@intlify/vue-i18n-extensions/-/vue-i18n-extensions-1.0.2.tgz#ab7f8507f7d423c368e44fa21d6dece700261fca" + integrity sha512-rnfA0ScyBXyp9xsSD4EAMGeOh1yv/AE7fhqdAdSOr5X8N39azz257umfRtzNT9sHXAKSSzpCVhIbMAkp5c/gjQ== + dependencies: + "@babel/parser" "^7.9.6" + +"@intlify/vue-i18n-loader@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@intlify/vue-i18n-loader/-/vue-i18n-loader-1.1.0.tgz#eecc6460823676f533784b3641665c5a609eccf0" + integrity sha512-9LXiztMtYKTE8t/hRwwGUp+ofrwU0sxLQLzFEOZ38zvn0DonUIQmZUj1cfz5p1Lu8BllxKbCrn6HnsRJ+LYA6g== + dependencies: + "@intlify/shared" "^9.0.0" + js-yaml "^3.13.1" + json5 "^2.1.1" + +"@mdi/js@^5.9.55": + version "5.9.55" + resolved "https://registry.yarnpkg.com/@mdi/js/-/js-5.9.55.tgz#8f5bc4d924c23f30dab20545ddc768e778bbc882" + integrity sha512-BbeHMgeK2/vjdJIRnx12wvQ6s8xAYfvMmEAVsUx9b+7GiQGQ9Za8jpwp17dMKr9CgKRvemlAM4S7S3QOtEbp4A== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1334,7 +1376,22 @@ webpack-node-externals "^3.0.0" webpackbar "^4.0.0" -"@nuxtjs/axios@^5.13.6": +"@nuxtjs/auth-next@5.0.0-1624817847.21691f1": + version "5.0.0-1624817847.21691f1" + resolved "https://registry.yarnpkg.com/@nuxtjs/auth-next/-/auth-next-5.0.0-1624817847.21691f1.tgz#28b92625ac5817d8083f8b42dd184a88caefbe96" + integrity sha512-PsHhLtzglMnwM2o16mgM7zQ3KwTI7AIg2ja3IFYujbs9s1w8HvnRD3byMRj1WZo0vXEBRh3u3nHxKEBIbFe1Xg== + dependencies: + "@nuxtjs/axios" "^5.13.0" + axios "^0.21.1" + body-parser "^1.19.0" + consola "^2.15.3" + cookie "^0.4.1" + defu "^3.2.2" + hasha "^5.2.2" + jwt-decode "^3.1.2" + requrl "^3.0.2" + +"@nuxtjs/axios@^5.13.0", "@nuxtjs/axios@^5.13.6": version "5.13.6" resolved "https://registry.yarnpkg.com/@nuxtjs/axios/-/axios-5.13.6.tgz#6f4bbd98a3a7799a5d2c0726c6ad2a98aa111881" integrity sha512-XS+pOE0xsDODs1zAIbo95A0LKlilvJi8YW0NoXYuq3/jjxGgWDxizZ6Yx0AIIjZOoGsXJOPc0/BcnSEUQ2mFBA== @@ -2296,6 +2353,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -2517,6 +2579,22 @@ bn.js@^5.0.0, bn.js@^5.1.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== +body-parser@^1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -2686,6 +2764,11 @@ bytes@3.0.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + cacache@^12.0.2: version "12.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" @@ -2998,6 +3081,11 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" +clone@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + coa@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" @@ -3152,6 +3240,11 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" @@ -3164,6 +3257,11 @@ cookie@^0.3.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= +cookie@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -3844,6 +3942,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== + errno@^0.1.3, errno@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" @@ -4000,6 +4103,13 @@ eslint-plugin-nuxt@^2.0.0: semver "^7.3.2" vue-eslint-parser "^7.1.1" +eslint-plugin-prettier@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7" + integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw== + dependencies: + prettier-linter-helpers "^1.0.0" + eslint-plugin-promise@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-5.1.0.tgz#fb2188fb734e4557993733b41aa1a688f46c6f24" @@ -4334,6 +4444,11 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + fast-glob@^3.1.1: version "3.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" @@ -4968,6 +5083,17 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + http-errors@~1.7.2: version "1.7.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" @@ -5019,7 +5145,7 @@ husky@^6.0.0: resolved "https://registry.yarnpkg.com/husky/-/husky-6.0.0.tgz#810f11869adf51604c32ea577edbc377d7f9319e" integrity sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ== -iconv-lite@^0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -5341,6 +5467,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-https@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-https/-/is-https-4.0.0.tgz#9ee725a334fb517b988278d2674efc96e4f348ed" + integrity sha512-FeMLiqf8E5g6SdiVJsPcNZX8k4h2fBs1wp5Bb6uaNxn58ufK1axBqQZdmAQsqh0t9BuwFObybrdVJh6MKyPlyg== + is-negative-zero@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" @@ -5493,6 +5624,11 @@ jiti@^1.9.2: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.11.0.tgz#64120a30d97b9bf37b8b032cf4564dfadc28984c" integrity sha512-/2c7e61hxxTIN34UeHBB0LCJ5Tq64kgJDV7GR+++e8XRxCKRIKmB8tH6ww1W+Z6Kgd6By+C3RSCu1lXjbPT68A== +js-cookie@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" + integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== + js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -5548,7 +5684,7 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.2, json5@^2.2.0: +json5@^2.1.1, json5@^2.1.2, json5@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== @@ -5571,6 +5707,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jwt-decode@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59" + integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A== + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -5636,6 +5777,13 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= +linkify-it@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.2.tgz#f55eeb8bc1d3ae754049e124ab3bb56d97797fb8" + integrity sha512-gDBO4aHNZS6coiZCKVhSNh43F9ioIL4JwRjLZPkoLIY4yZFwg264Y5lu2x6rb1Js42Gh6Yqm2f6L2AJcnkzinQ== + dependencies: + uc.micro "^1.0.1" + lint-staged@^10.5.4: version "10.5.4" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.4.tgz#cd153b5f0987d2371fc1d2847a409a2fe705b665" @@ -5891,6 +6039,65 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +markdown-it-abbr@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/markdown-it-abbr/-/markdown-it-abbr-1.0.4.tgz#d66b5364521cbb3dd8aa59dadfba2fb6865c8fd8" + integrity sha1-1mtTZFIcuz3Yqlna37ovtoZcj9g= + +markdown-it-deflist@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/markdown-it-deflist/-/markdown-it-deflist-2.1.0.tgz#50d7a56b9544cd81252f7623bd785e28a8dcef5c" + integrity sha512-3OuqoRUlSxJiuQYu0cWTLHNhhq2xtoSFqsZK8plANg91+RJQU1ziQ6lA2LzmFAEes18uPBsHZpcX6We5l76Nzg== + +markdown-it-emoji@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/markdown-it-emoji/-/markdown-it-emoji-2.0.0.tgz#3164ad4c009efd946e98274f7562ad611089a231" + integrity sha512-39j7/9vP/CPCKbEI44oV8yoPJTpvfeReTn/COgRhSpNrjWF3PfP/JUxxB0hxV6ynOY8KH8Y8aX9NMDdo6z+6YQ== + +markdown-it-footnote@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/markdown-it-footnote/-/markdown-it-footnote-3.0.3.tgz#e0e4c0d67390a4c5f0c75f73be605c7c190ca4d8" + integrity sha512-YZMSuCGVZAjzKMn+xqIco9d1cLGxbELHZ9do/TSYVzraooV8ypsppKNmUJ0fVH5ljkCInQAtFpm8Rb3eXSrt5w== + +markdown-it-ins@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/markdown-it-ins/-/markdown-it-ins-3.0.1.tgz#c09356b917cf1dbf73add0b275d67ab8c73d4b4d" + integrity sha512-32SSfZqSzqyAmmQ4SHvhxbFqSzPDqsZgMHDwxqPzp+v+t8RsmqsBZRG+RfRQskJko9PfKC2/oxyOs4Yg/CfiRw== + +markdown-it-mark@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/markdown-it-mark/-/markdown-it-mark-3.0.1.tgz#51257db58787d78aaf46dc13418d99a9f3f0ebd3" + integrity sha512-HyxjAu6BRsdt6Xcv6TKVQnkz/E70TdGXEFHRYBGLncRE9lBFwDNLVtFojKxjJWgJ+5XxUwLaHXy+2sGBbDn+4A== + +markdown-it-sub@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/markdown-it-sub/-/markdown-it-sub-1.0.0.tgz#375fd6026eae7ddcb012497f6411195ea1e3afe8" + integrity sha1-N1/WAm6ufdywEkl/ZBEZXqHjr+g= + +markdown-it-sup@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/markdown-it-sup/-/markdown-it-sup-1.0.0.tgz#cb9c9ff91a5255ac08f3fd3d63286e15df0a1fc3" + integrity sha1-y5yf+RpSVawI8/09YyhuFd8KH8M= + +markdown-it-toc-and-anchor@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/markdown-it-toc-and-anchor/-/markdown-it-toc-and-anchor-4.2.0.tgz#d1613327cc63c61f82cd66cbac5564f4db12c0e9" + integrity sha512-DusSbKtg8CwZ92ztN7bOojDpP4h0+w7BVOPuA3PHDIaabMsERYpwsazLYSP/UlKedoQjOz21mwlai36TQ04EpA== + dependencies: + clone "^2.1.0" + uslug "^1.0.4" + +markdown-it@^12.0.3: + version "12.1.0" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.1.0.tgz#7ad572caddd336bd27a68d20e86bac1fafe8fb20" + integrity sha512-7temG6IFOOxfU0SgzhqR+vr2diuMhyO5uUIEZ3C5NbXhqC9uFUHoU41USYuDFoZRsaY7BEIEei874Z20VMLF6A== + dependencies: + argparse "^2.0.1" + entities "~2.1.0" + linkify-it "^3.0.1" + mdurl "^1.0.1" + uc.micro "^1.0.5" + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -5910,6 +6117,16 @@ mdn-data@2.0.4: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + mem@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/mem/-/mem-8.1.1.tgz#cf118b357c65ab7b7e0817bdf00c8062297c0122" @@ -6359,6 +6576,24 @@ num2fraction@^1.2.2: resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= +nuxt-i18n@^6.28.0: + version "6.28.0" + resolved "https://registry.yarnpkg.com/nuxt-i18n/-/nuxt-i18n-6.28.0.tgz#05924b8cf4b12633041a547b39e43db2f1f852a8" + integrity sha512-8XT9UflwAlEDROMTZOwQKFrnM2+eqbHC8UJNlLCjODOCrmhMHGSfojxbFxs4W4+hKdDw4Gz30PHK6v6GIqIzMQ== + dependencies: + "@babel/parser" "^7.14.7" + "@babel/traverse" "^7.14.7" + "@intlify/vue-i18n-extensions" "^1.0.2" + "@intlify/vue-i18n-loader" "^1.1.0" + cookie "^0.4.1" + devalue "^2.0.1" + is-https "^4.0.0" + js-cookie "^2.2.1" + klona "^2.0.4" + lodash.merge "^4.6.2" + ufo "^0.7.7" + vue-i18n "^8.25.0" + nuxt@^2.15.7: version "2.15.7" resolved "https://registry.yarnpkg.com/nuxt/-/nuxt-2.15.7.tgz#45332e3b00ba5c1cf04688d42373c8ed7ef4dca7" @@ -7472,6 +7707,13 @@ prepend-http@^1.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + prettier@^1.18.2: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" @@ -7601,6 +7843,11 @@ q@^1.1.2: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + qs@^6.9.4: version "6.10.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" @@ -7666,6 +7913,16 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + rc9@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/rc9/-/rc9-1.2.0.tgz#ef098181fdde714efc4c426383d6e46c14b1254a" @@ -7863,6 +8120,11 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +requrl@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/requrl/-/requrl-3.0.2.tgz#d376104193b02a2d874dde68454c2db2dfeb0fac" + integrity sha512-f3gjR6d8MhOpn46PP+DSJywbmxi95fxQm3coXBFwognjFLla9X6tr8BdNyaIKNOEkaRbRcm0/zYAqN19N1oyhg== + reserved-words@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" @@ -8314,6 +8576,11 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" +sortablejs@1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.10.2.tgz#6e40364d913f98b85a14f6678f92b5c1221f5290" + integrity sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A== + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -8939,6 +9206,14 @@ type-fest@^0.8.0, type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-is@~1.6.17: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -8954,6 +9229,11 @@ ua-parser-js@^0.7.28: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.28.tgz#8ba04e653f35ce210239c64661685bf9121dec31" integrity sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g== +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + ufo@^0.7.4, ufo@^0.7.7: version "0.7.7" resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.7.7.tgz#0062f9e5e790819b0fb23ca24d7c63a4011c036a" @@ -9046,7 +9326,12 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@~1.0.0: +"unorm@>= 1.0.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/unorm/-/unorm-1.6.0.tgz#029b289661fba714f1a9af439eb51d9b16c205af" + integrity sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA== + +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= @@ -9113,6 +9398,13 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== +uslug@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/uslug/-/uslug-1.0.4.tgz#b9a22f0914e0a86140633dacc302e5f4fa450677" + integrity sha1-uaIvCRTgqGFAYz2swwLl9PpFBnc= + dependencies: + unorm ">= 1.0.0" + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -9216,6 +9508,11 @@ vue-hot-reload-api@^2.3.0: resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== +vue-i18n@^8.25.0: + version "8.25.0" + resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.25.0.tgz#1037d9295fa2845a230b771de473481edb2cfc4c" + integrity sha512-ynhcL+PmTxuuSE1T10htiSXzjBozxYIE3ffbM1RfgAkVbr/v1SP+9Mi/7/uv8ZVV1yGuKjFAYp9BXq+X7op6MQ== + vue-loader@^15.9.7: version "15.9.7" resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.7.tgz#15b05775c3e0c38407679393c2ce6df673b01044" @@ -9284,6 +9581,13 @@ vue@^2.6.12: resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.14.tgz#e51aa5250250d569a3fbad3a8a5a687d6036e235" integrity sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ== +vuedraggable@^2.24.3: + version "2.24.3" + resolved "https://registry.yarnpkg.com/vuedraggable/-/vuedraggable-2.24.3.tgz#43c93849b746a24ce503e123d5b259c701ba0d19" + integrity sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g== + dependencies: + sortablejs "1.10.2" + vuetify-loader@^1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/vuetify-loader/-/vuetify-loader-1.7.2.tgz#5cdc45309496cf3a5fe431fd7611706ffa4aa8c8" diff --git a/poetry.lock b/poetry.lock index 2a8a7e3b771f..3d0670dcf72d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -173,7 +173,7 @@ pycparser = "*" [[package]] name = "charset-normalizer" -version = "2.0.3" +version = "2.0.4" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false @@ -413,7 +413,7 @@ python-versions = ">=3.5" [[package]] name = "importlib-metadata" -version = "4.6.1" +version = "4.6.3" description = "Read metadata from Python packages" category = "dev" optional = false @@ -448,7 +448,7 @@ six = "*" [[package]] name = "isort" -version = "5.9.2" +version = "5.9.3" description = "A Python utility / library to sort Python imports." category = "dev" optional = false @@ -577,7 +577,7 @@ i18n = ["babel (>=2.9.0)"] [[package]] name = "mkdocs-material" -version = "7.2.0" +version = "7.2.2" description = "A Material Design theme for MkDocs" category = "dev" optional = false @@ -740,6 +740,18 @@ typing-extensions = ">=3.7.4.3" dotenv = ["python-dotenv (>=0.10.4)"] email = ["email-validator (>=1.0.3)"] +[[package]] +name = "pydantic-to-typescript" +version = "1.0.7" +description = "Convert pydantic models to typescript interfaces" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +click = "*" +pydantic = "*" + [[package]] name = "pyflakes" version = "2.3.1" @@ -766,7 +778,7 @@ python-versions = "*" [[package]] name = "pylint" -version = "2.9.5" +version = "2.9.6" description = "python code static checker" category = "dev" optional = false @@ -1282,7 +1294,7 @@ pgsql = ["psycopg2-binary"] [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "a06d6cf8970f370f05958cc8190a97c731dd586405d51ed11b828de842fbe1d2" +content-hash = "c5beb9d4a67cd02434b365bb0d6bec1a1d0688a2b2ff20acb991e103ee8ee8bf" [metadata.files] aiofiles = [ @@ -1386,8 +1398,8 @@ cffi = [ {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.0.3.tar.gz", hash = "sha256:c46c3ace2d744cfbdebceaa3c19ae691f53ae621b39fd7570f59d14fb7f2fd12"}, - {file = "charset_normalizer-2.0.3-py3-none-any.whl", hash = "sha256:88fce3fa5b1a84fdcb3f603d889f723d1dd89b26059d0123ca435570e848d5e1"}, + {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"}, + {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, @@ -1580,8 +1592,8 @@ idna = [ {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"}, ] importlib-metadata = [ - {file = "importlib_metadata-4.6.1-py3-none-any.whl", hash = "sha256:9f55f560e116f8643ecf2922d9cd3e1c7e8d52e683178fecd9d08f6aa357e11e"}, - {file = "importlib_metadata-4.6.1.tar.gz", hash = "sha256:079ada16b7fc30dfbb5d13399a5113110dab1aa7c2bc62f66af75f0b717c8cac"}, + {file = "importlib_metadata-4.6.3-py3-none-any.whl", hash = "sha256:51c6635429c77cf1ae634c997ff9e53ca3438b495f10a55ba28594dd69764a8b"}, + {file = "importlib_metadata-4.6.3.tar.gz", hash = "sha256:0645585859e9a6689c523927a5032f2ba5919f1f7d0e84bd4533312320de1ff9"}, ] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, @@ -1592,8 +1604,8 @@ isodate = [ {file = "isodate-0.6.0.tar.gz", hash = "sha256:2e364a3d5759479cdb2d37cce6b9376ea504db2ff90252a2e5b7cc89cc9ff2d8"}, ] isort = [ - {file = "isort-5.9.2-py3-none-any.whl", hash = "sha256:eed17b53c3e7912425579853d078a0832820f023191561fcee9d7cae424e0813"}, - {file = "isort-5.9.2.tar.gz", hash = "sha256:f65ce5bd4cbc6abdfbe29afc2f0245538ab358c14590912df638033f157d555e"}, + {file = "isort-5.9.3-py3-none-any.whl", hash = "sha256:e17d6e2b81095c9db0a03a8025a957f334d6ea30b26f9ec70805411e5c7c81f2"}, + {file = "isort-5.9.3.tar.gz", hash = "sha256:9c2ea1e62d871267b78307fe511c0838ba0da28698c5732d54e2790bf3ba9899"}, ] jinja2 = [ {file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"}, @@ -1721,8 +1733,8 @@ mkdocs = [ {file = "mkdocs-1.2.2.tar.gz", hash = "sha256:a334f5bd98ec960638511366eb8c5abc9c99b9083a0ed2401d8791b112d6b078"}, ] mkdocs-material = [ - {file = "mkdocs-material-7.2.0.tar.gz", hash = "sha256:9f43c5874e119b312a6f369ef363815c11f182b5cdeff4a3426615ebc4664ace"}, - {file = "mkdocs_material-7.2.0-py2.py3-none-any.whl", hash = "sha256:8b3750857e168a9ca20be34890791817090b016248a39be45069fab5343f1dc0"}, + {file = "mkdocs-material-7.2.2.tar.gz", hash = "sha256:4f501e139e2f8546653e7d8777c9b97ca639d03d8c86345a60609864cc5bbb03"}, + {file = "mkdocs_material-7.2.2-py2.py3-none-any.whl", hash = "sha256:76de22213f0e0319b9bddf1bfa86530e93efb4a604e9ddf8f8419f0438572523"}, ] mkdocs-material-extensions = [ {file = "mkdocs-material-extensions-1.0.1.tar.gz", hash = "sha256:6947fb7f5e4291e3c61405bad3539d81e0b3cd62ae0d66ced018128af509c68f"}, @@ -1879,6 +1891,11 @@ pydantic = [ {file = "pydantic-1.8.2-py3-none-any.whl", hash = "sha256:fec866a0b59f372b7e776f2d7308511784dace622e0992a0b59ea3ccee0ae833"}, {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"}, ] +pydantic-to-typescript = [ + {file = "pydantic-to-typescript-1.0.7.tar.gz", hash = "sha256:dccf668e97626e616d20f2b1b99a568b5ac16344f3b2c850ebc463118b21a3d7"}, + {file = "pydantic_to_typescript-1.0.7-py3-none-any.whl", hash = "sha256:b3d093cbd15fd938faa09d1128621f27a9a93bef275eea5eb0912987d5d9d843"}, + {file = "pydantic_to_typescript-1.0.7-py3.8.egg", hash = "sha256:b4917453d74df1b401259b881117ae164bf1bac2cac849a88466badb43825e6d"}, +] pyflakes = [ {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, @@ -1892,8 +1909,8 @@ pyhumps = [ {file = "pyhumps-3.0.2.tar.gz", hash = "sha256:042b4b6eec6c1f862f8310c0eebbae19293e9edab8cafb030ff78c890ef1aa34"}, ] pylint = [ - {file = "pylint-2.9.5-py3-none-any.whl", hash = "sha256:748f81e5776d6273a6619506e08f1b48ff9bcb8198366a56821cf11aac14fc87"}, - {file = "pylint-2.9.5.tar.gz", hash = "sha256:1f333dc72ef7f5ea166b3230936ebcfb1f3b722e76c980cb9fe6b9f95e8d3172"}, + {file = "pylint-2.9.6-py3-none-any.whl", hash = "sha256:2e1a0eb2e8ab41d6b5dbada87f066492bb1557b12b76c47c2ee8aa8a11186594"}, + {file = "pylint-2.9.6.tar.gz", hash = "sha256:8b838c8983ee1904b2de66cce9d0b96649a91901350e956d78f289c3bc87b48e"}, ] pymdown-extensions = [ {file = "pymdown-extensions-8.2.tar.gz", hash = "sha256:b6daa94aad9e1310f9c64c8b1f01e4ce82937ab7eb53bfc92876a97aca02a6f4"}, diff --git a/pyproject.toml b/pyproject.toml index 498735093a84..f672f7548e6b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,6 +45,7 @@ pytest-cov = "^2.11.0" mkdocs-material = "^7.0.2" flake8 = "^3.9.0" coverage = "^5.5" +pydantic-to-typescript = "^1.0.7" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/vetur.config.js b/vetur.config.js index a02a5672618b..e59ab1d60346 100644 --- a/vetur.config.js +++ b/vetur.config.js @@ -10,6 +10,7 @@ module.exports = { { root: "./frontend", package: "package.json", + tsconfig: "tsconfig.json", globalComponents: ["./src/components/**/*.vue"], }, ],