add support for meta tags on share pages (#867)

This commit is contained in:
Hayden 2021-12-06 17:14:14 -09:00 committed by GitHub
parent 5454d2c8b8
commit 5839992c19
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 190 additions and 118 deletions

View File

@ -24,7 +24,7 @@ import { GroupReportsApi } from "./class-interfaces/group-reports";
import { ApiRequestInstance } from "~/types/api"; import { ApiRequestInstance } from "~/types/api";
class Api { class Api {
private static instance: Api; // private static instance: Api;
public recipes: RecipeAPI; public recipes: RecipeAPI;
public users: UserApi; public users: UserApi;
public groups: GroupAPI; public groups: GroupAPI;
@ -50,9 +50,9 @@ class Api {
public upload: UploadFile; public upload: UploadFile;
constructor(requests: ApiRequestInstance) { constructor(requests: ApiRequestInstance) {
if (Api.instance instanceof Api) { // if (Api.instance instanceof Api) {
return Api.instance; // return Api.instance;
} // }
// Recipes // Recipes
this.recipes = new RecipeAPI(requests); this.recipes = new RecipeAPI(requests);
@ -88,7 +88,7 @@ class Api {
this.bulk = new BulkActionsAPI(requests); this.bulk = new BulkActionsAPI(requests);
Object.freeze(this); Object.freeze(this);
Api.instance = this; // Api.instance = this;
} }
} }

View File

@ -1,25 +1,29 @@
import { useContext } from "@nuxtjs/composition-api"; import { useContext } from "@nuxtjs/composition-api";
import { detectServerBaseUrl } from "../use-utils";
export const useStaticRoutes = () => { export const useStaticRoutes = () => {
const { $config } = useContext(); const { $config, req } = useContext();
const serverBase = detectServerBaseUrl(req);
const prefix = `${$config.SUB_PATH}/api`.replace("//", "/"); const prefix = `${$config.SUB_PATH}/api`.replace("//", "/");
const fullBase = serverBase + prefix;
// Methods to Generate reference urls for assets/images * // Methods to Generate reference urls for assets/images *
function recipeImage(recipeSlug: string, version = null, key = null) { function recipeImage(recipeSlug: string, version = null, key = null) {
return `${prefix}/media/recipes/${recipeSlug}/images/original.webp?&rnd=${key}&version=${version}`; return `${fullBase}/media/recipes/${recipeSlug}/images/original.webp?&rnd=${key}&version=${version}`;
} }
function recipeSmallImage(recipeSlug: string, version = null, key = null) { function recipeSmallImage(recipeSlug: string, version = null, key = null) {
return `${prefix}/media/recipes/${recipeSlug}/images/min-original.webp?&rnd=${key}&version=${version}`; return `${fullBase}/media/recipes/${recipeSlug}/images/min-original.webp?&rnd=${key}&version=${version}`;
} }
function recipeTinyImage(recipeSlug: string, version = null, key = null) { function recipeTinyImage(recipeSlug: string, version = null, key = null) {
return `${prefix}/media/recipes/${recipeSlug}/images/tiny-original.webp?&rnd=${key}&version=${version}`; return `${fullBase}/media/recipes/${recipeSlug}/images/tiny-original.webp?&rnd=${key}&version=${version}`;
} }
function recipeAssetPath(recipeSlug: string, assetName: string) { function recipeAssetPath(recipeSlug: string, assetName: string) {
return `${prefix}/media/recipes/${recipeSlug}/assets/${assetName}`; return `${fullBase}/media/recipes/${recipeSlug}/assets/${assetName}`;
} }
return { return {

View File

@ -1,36 +1,36 @@
import { Ref } from "@nuxtjs/composition-api"; import { Ref } from "@nuxtjs/composition-api";
import { useStaticRoutes } from "../api"; // import { useStaticRoutes } from "../api";
import { Recipe } from "~/types/api-types/recipe"; import { Recipe } from "~/types/api-types/recipe";
export const useRecipeMeta = (recipe: Ref<Recipe>) => { export const useRecipeMeta = (recipe: Ref<Recipe>) => {
const { recipeImage } = useStaticRoutes(); // const { recipeImage } = useStaticRoutes();
console.log(recipe.value);
return () => { return () => {
const imageURL = "";
return { return {
title: recipe?.value?.name || "Recipe", title: recipe?.value?.name,
// @ts-ignore // @ts-ignore
mainImage: recipeImage(recipe?.value?.image), mainImage: imageURL,
meta: [ meta: [
{ hid: "og:title", property: "og:title", content: recipe?.value?.name || "Recipe" }, { hid: "og:title", property: "og:title", content: recipe?.value?.name || "Recipe" },
{ {
hid: "og:desc", hid: "og:desc",
property: "og:description", property: "og:description",
content: recipe?.value?.description || "", content: recipe?.value?.description,
}, },
{ {
hid: "og-image", hid: "og-image",
property: "og:image", property: "og:image",
content: recipeImage(recipe?.value?.image || ""), content: imageURL,
}, },
{ {
hid: "twitter:title", hid: "twitter:title",
property: "twitter:title", property: "twitter:title",
content: recipe?.value?.name || "Recipe", content: recipe?.value?.name,
}, },
{ {
hid: "twitter:desc", hid: "twitter:desc",
property: "twitter:description", property: "twitter:description",
content: recipe?.value?.description || "", content: recipe?.value?.description,
}, },
{ hid: "t-type", name: "twitter:card", content: "summary_large_image" }, { hid: "t-type", name: "twitter:card", content: "summary_large_image" },
], ],

View File

@ -2,6 +2,24 @@ export const useAsyncKey = function () {
return String(Date.now()); return String(Date.now());
}; };
export function detectServerBaseUrl(req: any) {
if (!req || req === undefined) {
return "";
}
if (req.headers.referer) {
const url = new URL(req.headers.referer);
return `${url.protocol}//${url.host}`;
} else if (req.headers.host) {
const protocol = req.connection.encrypted ? "https" : "http:";
return `${protocol}//${req.headers.host}`;
} else if (req.connection.remoteAddress) {
const protocol = req.connection.encrypted ? "https" : "http:";
return `${protocol}//${req.connection.localAddress}:${req.connection.localPort}`;
}
return "";
}
export function uuid4() { export function uuid4() {
// @ts-ignore // @ts-ignore
return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) => return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>

View File

@ -1,4 +1,5 @@
export default { export default {
mode: "universal",
// Global page headers: https://go.nuxtjs.dev/config-head // Global page headers: https://go.nuxtjs.dev/config-head
head: { head: {
title: "Home", title: "Home",

View File

@ -26,7 +26,7 @@
"core-js": "^3.15.1", "core-js": "^3.15.1",
"date-fns": "^2.23.0", "date-fns": "^2.23.0",
"fuse.js": "^6.4.6", "fuse.js": "^6.4.6",
"nuxt": "^2.15.7", "nuxt": "^2.15.8",
"v-jsoneditor": "^1.4.5", "v-jsoneditor": "^1.4.5",
"vuedraggable": "^2.24.3", "vuedraggable": "^2.24.3",
"vuetify": "^2.5.5" "vuetify": "^2.5.5"
@ -35,7 +35,7 @@
"@babel/eslint-parser": "^7.14.7", "@babel/eslint-parser": "^7.14.7",
"@nuxt/types": "^2.15.7", "@nuxt/types": "^2.15.7",
"@nuxt/typescript-build": "^2.1.0", "@nuxt/typescript-build": "^2.1.0",
"@nuxtjs/composition-api": "^0.30.0", "@nuxtjs/composition-api": "^0.31.0",
"@nuxtjs/eslint-config-typescript": "^6.0.1", "@nuxtjs/eslint-config-typescript": "^6.0.1",
"@nuxtjs/eslint-module": "^3.0.2", "@nuxtjs/eslint-module": "^3.0.2",
"@nuxtjs/vuetify": "^1.12.1", "@nuxtjs/vuetify": "^1.12.1",
@ -54,4 +54,4 @@
"resolutions": { "resolutions": {
"vite": "2.3.8" "vite": "2.3.8"
} }
} }

View File

@ -271,12 +271,14 @@
class="mt-10" class="mt-10"
:edit="form" :edit="form"
/> />
<RecipeAssets <client-only>
v-if="recipe.settings.showAssets" <RecipeAssets
v-model="recipe.assets" v-if="recipe.settings.showAssets"
:edit="form" v-model="recipe.assets"
:slug="recipe.slug" :edit="form"
/> :slug="recipe.slug"
/>
</client-only>
</div> </div>
</v-col> </v-col>
<v-divider v-if="$vuetify.breakpoint.mdAndUp" class="my-divider" :vertical="true"></v-divider> <v-divider v-if="$vuetify.breakpoint.mdAndUp" class="my-divider" :vertical="true"></v-divider>
@ -347,12 +349,14 @@
class="mt-10" class="mt-10"
:edit="form" :edit="form"
/> />
<RecipeAssets <client-only>
v-if="recipe.settings.showAssets" <RecipeAssets
v-model="recipe.assets" v-if="recipe.settings.showAssets"
:edit="form" v-model="recipe.assets"
:slug="recipe.slug" :edit="form"
/> :slug="recipe.slug"
/>
</client-only>
</div> </div>
<RecipeNotes v-model="recipe.notes" :edit="form" /> <RecipeNotes v-model="recipe.notes" :edit="form" />
@ -449,7 +453,6 @@ import RecipeChips from "~/components/Domain/Recipe/RecipeChips.vue";
import RecipeIngredients from "~/components/Domain/Recipe/RecipeIngredients.vue"; import RecipeIngredients from "~/components/Domain/Recipe/RecipeIngredients.vue";
import RecipeRating from "~/components/Domain/Recipe/RecipeRating.vue"; import RecipeRating from "~/components/Domain/Recipe/RecipeRating.vue";
import RecipeTimeCard from "~/components/Domain/Recipe/RecipeTimeCard.vue"; import RecipeTimeCard from "~/components/Domain/Recipe/RecipeTimeCard.vue";
import RecipeAssets from "~/components/Domain/Recipe/RecipeAssets.vue";
import RecipeNutrition from "~/components/Domain/Recipe/RecipeNutrition.vue"; import RecipeNutrition from "~/components/Domain/Recipe/RecipeNutrition.vue";
import RecipeInstructions from "~/components/Domain/Recipe/RecipeInstructions.vue"; import RecipeInstructions from "~/components/Domain/Recipe/RecipeInstructions.vue";
import RecipeNotes from "~/components/Domain/Recipe/RecipeNotes.vue"; import RecipeNotes from "~/components/Domain/Recipe/RecipeNotes.vue";
@ -468,7 +471,11 @@ export default defineComponent({
components: { components: {
draggable, draggable,
RecipeActionMenu, RecipeActionMenu,
RecipeAssets, RecipeAssets: () => {
if (process.client) {
return import(/* webpackChunkName: "RecipeAssets" */ "~/components/Domain/Recipe/RecipeAssets.vue");
}
},
RecipeCategoryTagSelector, RecipeCategoryTagSelector,
RecipeChips, RecipeChips,
RecipeComments, RecipeComments,
@ -519,9 +526,6 @@ export default defineComponent({
} }
}); });
// ===============================================================
// Guest Mode
// =============================================================== // ===============================================================
// Check Before Leaving // Check Before Leaving
@ -544,7 +548,7 @@ export default defineComponent({
const { recipe, loading, fetchRecipe } = useRecipe(slug); const { recipe, loading, fetchRecipe } = useRecipe(slug);
// Manage a deep copy of the recipe so we can detect if changes have occured and inform // Manage a deep copy of the recipe so we can detect if changes have occurred and inform
// the user if they try to navigate away from the page without saving. // the user if they try to navigate away from the page without saving.
const originalRecipe = ref<Recipe | null>(null); const originalRecipe = ref<Recipe | null>(null);
@ -769,4 +773,3 @@ export default defineComponent({
}); });
</script> </script>
<style scoped></style>

View File

@ -229,12 +229,6 @@
class="mt-10" class="mt-10"
:edit="form" :edit="form"
/> />
<RecipeAssets
v-if="recipe.settings.showAssets"
v-model="recipe.assets"
:edit="form"
:slug="recipe.slug"
/>
</div> </div>
<RecipeNotes v-model="recipe.notes" :edit="form" /> <RecipeNotes v-model="recipe.notes" :edit="form" />
@ -278,7 +272,7 @@ import {
} from "@nuxtjs/composition-api"; } from "@nuxtjs/composition-api";
// @ts-ignore // @ts-ignore
import VueMarkdown from "@adapttive/vue-markdown"; import VueMarkdown from "@adapttive/vue-markdown";
import { useRecipeMeta } from "~/composables/recipes"; // import { useRecipeMeta } from "~/composables/recipes";
import { useStaticRoutes, useUserApi } from "~/composables/api"; import { useStaticRoutes, useUserApi } from "~/composables/api";
import RecipeChips from "~/components/Domain/Recipe/RecipeChips.vue"; import RecipeChips from "~/components/Domain/Recipe/RecipeChips.vue";
import RecipeIngredients from "~/components/Domain/Recipe/RecipeIngredients.vue"; import RecipeIngredients from "~/components/Domain/Recipe/RecipeIngredients.vue";
@ -322,26 +316,55 @@ export default defineComponent({
}, },
}); });
// @ts-ignore
const { recipeImage } = useStaticRoutes(); const { recipeImage } = useStaticRoutes();
const { meta, title } = useMeta();
const recipe = useAsync(async () => { const recipe = useAsync(async () => {
const { data } = await api.recipes.getShared(id); const { data } = await api.recipes.getShared(id);
if (data) { if (data) {
if (data && data !== undefined) {
console.log("Computed Meta. RefKey=");
const imageURL = recipeImage(data.slug);
title.value = data.name;
meta.value = [
{ hid: "og:title", property: "og:title", content: data.name },
// @ts-ignore
{
hid: "og:desc",
property: "og:description",
content: data.description,
},
{
hid: "og-image",
property: "og:image",
content: imageURL,
},
// @ts-ignore
{
hid: "twitter:title",
property: "twitter:title",
content: data.name,
},
// @ts-ignore
{
hid: "twitter:desc",
property: "twitter:description",
content: data.description,
},
{ hid: "t-type", name: "twitter:card", content: "summary_large_image" },
];
}
return data; return data;
} }
}); });
// @ts-ignore
const recipeMeta = useRecipeMeta(recipe);
useMeta(recipeMeta);
// @ts-ignore // @ts-ignore
const { $vuetify } = useContext(); const { $vuetify } = useContext();
const enableLandscape = computed(() => { const enableLandscape = computed(() => {
const preferLandscape = recipe?.value?.settings?.landscapeView; const preferLandscape = recipe.value?.settings?.landscapeView;
const smallScreen = !$vuetify.breakpoint.smAndUp; const smallScreen = !$vuetify.breakpoint.smAndUp;
if (preferLandscape) { if (preferLandscape) {

View File

@ -77,7 +77,7 @@
semver "^6.3.0" semver "^6.3.0"
source-map "^0.5.0" source-map "^0.5.0"
"@babel/core@^7.15.5": "@babel/core@^7.16.0":
version "7.16.0" version "7.16.0"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4"
integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==
@ -452,11 +452,16 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.5.tgz#d33a58ca69facc05b26adfe4abebfed56c1c2dac" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.5.tgz#d33a58ca69facc05b26adfe4abebfed56c1c2dac"
integrity sha512-2hQstc6I7T6tQsWzlboMh3SgMRPaS4H6H7cPQsJkdzTzEGqQrpLDsE2BGASU5sBPoEQyHzeqU6C8uKbFeEk6sg== integrity sha512-2hQstc6I7T6tQsWzlboMh3SgMRPaS4H6H7cPQsJkdzTzEGqQrpLDsE2BGASU5sBPoEQyHzeqU6C8uKbFeEk6sg==
"@babel/parser@^7.15.6", "@babel/parser@^7.16.0": "@babel/parser@^7.16.0":
version "7.16.2" version "7.16.2"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.2.tgz#3723cd5c8d8773eef96ce57ea1d9b7faaccd12ac" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.2.tgz#3723cd5c8d8773eef96ce57ea1d9b7faaccd12ac"
integrity sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw== integrity sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==
"@babel/parser@^7.16.3":
version "7.16.4"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.4.tgz#d5f92f57cf2c74ffe9b37981c0e72fee7311372e"
integrity sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4": "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4":
version "7.15.4" version "7.15.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz#dbdeabb1e80f622d9f0b583efb2999605e0a567e" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz#dbdeabb1e80f622d9f0b583efb2999605e0a567e"
@ -1136,6 +1141,21 @@
debug "^4.1.0" debug "^4.1.0"
globals "^11.1.0" globals "^11.1.0"
"@babel/traverse@^7.16.3":
version "7.16.3"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787"
integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==
dependencies:
"@babel/code-frame" "^7.16.0"
"@babel/generator" "^7.16.0"
"@babel/helper-function-name" "^7.16.0"
"@babel/helper-hoist-variables" "^7.16.0"
"@babel/helper-split-export-declaration" "^7.16.0"
"@babel/parser" "^7.16.3"
"@babel/types" "^7.16.0"
debug "^4.1.0"
globals "^11.1.0"
"@babel/types@^7.0.0", "@babel/types@^7.15.0", "@babel/types@^7.15.4", "@babel/types@^7.3.0", "@babel/types@^7.4.4": "@babel/types@^7.0.0", "@babel/types@^7.15.0", "@babel/types@^7.15.4", "@babel/types@^7.3.0", "@babel/types@^7.4.4":
version "7.15.4" version "7.15.4"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.4.tgz#74eeb86dbd6748d2741396557b9860e57fce0a0d" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.4.tgz#74eeb86dbd6748d2741396557b9860e57fce0a0d"
@ -1144,7 +1164,7 @@
"@babel/helper-validator-identifier" "^7.14.9" "@babel/helper-validator-identifier" "^7.14.9"
to-fast-properties "^2.0.0" to-fast-properties "^2.0.0"
"@babel/types@^7.15.6", "@babel/types@^7.16.0": "@babel/types@^7.16.0":
version "7.16.0" version "7.16.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba"
integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==
@ -1646,18 +1666,18 @@
consola "^2.15.3" consola "^2.15.3"
defu "^5.0.0" defu "^5.0.0"
"@nuxtjs/composition-api@^0.30.0": "@nuxtjs/composition-api@^0.31.0":
version "0.30.0" version "0.31.0"
resolved "https://registry.yarnpkg.com/@nuxtjs/composition-api/-/composition-api-0.30.0.tgz#ea123798b8a9b2e74f80e22ccb38a3879b931e38" resolved "https://registry.yarnpkg.com/@nuxtjs/composition-api/-/composition-api-0.31.0.tgz#4baa645ee45e306a49b72de6257fdb9438eb2b07"
integrity sha512-IEuzCY5oUmXOTYkMNwdYQMagAxtlJRzQSDJ1o7LYt5KulOawfOm+wyyNfQxQMIPz/p5Df1UQ14ORDdQ+ZjWXIw== integrity sha512-xplH/EJ17W/EjNP7M11URTOrQcjMYqQn1wXUkMOdMiSLKM58VWuCyt0uT9jNCHMUspeQ+SPzr9dxQkNBGvwfiA==
dependencies: dependencies:
"@vue/composition-api" "^1.3.3" "@vue/composition-api" "^1.4.1"
defu "^5.0.0" defu "^5.0.0"
estree-walker "^2.0.2" estree-walker "^2.0.2"
fs-extra "^9.1.0" fs-extra "^9.1.0"
magic-string "^0.25.7" magic-string "^0.25.7"
ufo "^0.7.9" ufo "^0.7.9"
unplugin-vue2-script-setup "^0.6.13" unplugin-vue2-script-setup "^0.7.3"
upath "^2.0.1" upath "^2.0.1"
"@nuxtjs/eslint-config-typescript@^6.0.1": "@nuxtjs/eslint-config-typescript@^6.0.1":
@ -2279,13 +2299,13 @@
"@vue/babel-plugin-transform-vue-jsx" "^1.2.1" "@vue/babel-plugin-transform-vue-jsx" "^1.2.1"
camelcase "^5.0.0" camelcase "^5.0.0"
"@vue/compiler-core@3.2.21": "@vue/compiler-core@3.2.24", "@vue/compiler-core@^3.2.23":
version "3.2.21" version "3.2.24"
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.21.tgz#26566c32b2ad838199d471ef5df620a83846f24e" resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.24.tgz#cadcda0e026e7f1cd453ce87160be51a5f313fe0"
integrity sha512-NhhiQZNG71KNq1h5pMW/fAXdTF7lJRaSI7LDm2edhHXVz1ROMICo8SreUmQnSf4Fet0UPBVqJ988eF4+936iDQ== integrity sha512-A0SxB2HAggKzP57LDin5gfgWOTwFyGCtQ5MTMNBADnfQYALWnYuC8kMI0DhRSplGTWRvn9Z2DAnG8f35BnojuA==
dependencies: dependencies:
"@babel/parser" "^7.15.0" "@babel/parser" "^7.15.0"
"@vue/shared" "3.2.21" "@vue/shared" "3.2.24"
estree-walker "^2.0.2" estree-walker "^2.0.2"
source-map "^0.6.1" source-map "^0.6.1"
@ -2312,10 +2332,10 @@
dependencies: dependencies:
tslib "^2.3.0" tslib "^2.3.0"
"@vue/composition-api@^1.3.3": "@vue/composition-api@^1.4.1":
version "1.3.3" version "1.4.1"
resolved "https://registry.yarnpkg.com/@vue/composition-api/-/composition-api-1.3.3.tgz#a782f2d40e41d4cbb6b4550692c7e01d2182d457" resolved "https://registry.yarnpkg.com/@vue/composition-api/-/composition-api-1.4.1.tgz#2b4a6bfabc5e8277c4b890e0c9ca55d1252ca5b8"
integrity sha512-mjhfLjpCBecARYVJX65F0TYerlJQWtEgKjom4Btuu0x7k701EcvL66zyWQryf64HuIj9YR4h6aNRhM0AP/E3eQ== integrity sha512-ZTat9ru/rwecveRnFzlO2mduOBpGfnBdXn+WtBcFLV9UsL/D+6nX47RWuLiVdNxNDX0qphGZRC+JDjwt+YTnRA==
dependencies: dependencies:
tslib "^2.3.1" tslib "^2.3.1"
@ -2326,14 +2346,14 @@
dependencies: dependencies:
"@vue/shared" "3.2.9" "@vue/shared" "3.2.9"
"@vue/ref-transform@^3.2.11": "@vue/ref-transform@^3.2.23":
version "3.2.21" version "3.2.24"
resolved "https://registry.yarnpkg.com/@vue/ref-transform/-/ref-transform-3.2.21.tgz#b0c554c9f640c3f005f77e676066aa0faba90984" resolved "https://registry.yarnpkg.com/@vue/ref-transform/-/ref-transform-3.2.24.tgz#335bf06e0b25be16e7056cc4117c51a79f0c9122"
integrity sha512-uiEWWBsrGeun9O7dQExYWzXO3rHm/YdtFNXDVqCSoPypzOVxWxdiL+8hHeWzxMB58fVuV2sT80aUtIVyaBVZgQ== integrity sha512-j6oNbsGLvea2rF8GQB9w6q7UFL1So7J+t6ducaMeWPSyjYZ+slWpwPVK6mmyghg5oGqC41R+HC5BV036Y0KhXQ==
dependencies: dependencies:
"@babel/parser" "^7.15.0" "@babel/parser" "^7.15.0"
"@vue/compiler-core" "3.2.21" "@vue/compiler-core" "3.2.24"
"@vue/shared" "3.2.21" "@vue/shared" "3.2.24"
estree-walker "^2.0.2" estree-walker "^2.0.2"
magic-string "^0.25.7" magic-string "^0.25.7"
@ -2354,10 +2374,10 @@
"@vue/shared" "3.2.9" "@vue/shared" "3.2.9"
csstype "^2.6.8" csstype "^2.6.8"
"@vue/shared@3.2.21", "@vue/shared@^3.2.11": "@vue/shared@3.2.24", "@vue/shared@^3.2.23":
version "3.2.21" version "3.2.24"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.21.tgz#4cd80c0e62cf65a7adab2449e86b6f0cb33a130b" resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.24.tgz#d74615e856013b17fb60b19b09d712729ad5e090"
integrity sha512-5EQmIPK6gw4UVYUbM959B0uPsJ58+xoMESCZs3N89XyvJ9e+fX4pqEPrOGV8OroIk3SbEvJcC+eYc8BH9JQrHA== integrity sha512-BUgRiZCkCrqDps5aQ9av05xcge3rn092ztKIh17tHkeEFgP4zfXMQWBA2zfdoCdCEdBL26xtOv+FZYiOp9RUDA==
"@vue/shared@3.2.9": "@vue/shared@3.2.9":
version "3.2.9" version "3.2.9"
@ -4659,7 +4679,14 @@ domelementtype@^2.0.1, domelementtype@^2.2.0:
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57"
integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==
domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.2.2: domhandler@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a"
integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==
dependencies:
domelementtype "^2.0.1"
domhandler@^4.0.0, domhandler@^4.2.0:
version "4.2.2" version "4.2.2"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.2.tgz#e825d721d19a86b8c201a35264e226c678ee755f" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.2.tgz#e825d721d19a86b8c201a35264e226c678ee755f"
integrity sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w== integrity sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==
@ -4674,7 +4701,7 @@ domutils@^1.7.0:
dom-serializer "0" dom-serializer "0"
domelementtype "1" domelementtype "1"
domutils@^2.5.2, domutils@^2.6.0, domutils@^2.8.0: domutils@^2.4.2, domutils@^2.5.2, domutils@^2.6.0:
version "2.8.0" version "2.8.0"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
@ -4789,11 +4816,6 @@ entities@^2.0.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
entities@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4"
integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==
entities@~2.1.0: entities@~2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5"
@ -5961,6 +5983,16 @@ html-webpack-plugin@^4.5.1:
tapable "^1.1.3" tapable "^1.1.3"
util.promisify "1.0.0" util.promisify "1.0.0"
htmlparser2@5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-5.0.1.tgz#7daa6fc3e35d6107ac95a4fc08781f091664f6e7"
integrity sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==
dependencies:
domelementtype "^2.0.1"
domhandler "^3.3.0"
domutils "^2.4.2"
entities "^2.0.0"
htmlparser2@^6.1.0: htmlparser2@^6.1.0:
version "6.1.0" version "6.1.0"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
@ -5971,16 +6003,6 @@ htmlparser2@^6.1.0:
domutils "^2.5.2" domutils "^2.5.2"
entities "^2.0.0" entities "^2.0.0"
htmlparser2@^7.1.2:
version "7.1.2"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-7.1.2.tgz#587923d38f03bc89e03076e00cba2c7473f37f7c"
integrity sha512-d6cqsbJba2nRdg8WW2okyD4ceonFHn9jLFxhwlNcLhQWcFPdxXeJulgOLjLKtAK9T6ahd+GQNZwG9fjmGW7lyg==
dependencies:
domelementtype "^2.0.1"
domhandler "^4.2.2"
domutils "^2.8.0"
entities "^3.0.1"
http-errors@1.7.2: http-errors@1.7.2:
version "1.7.2" version "1.7.2"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
@ -7562,7 +7584,7 @@ nuxt-vite@^0.1.1:
vite "^2.4.4" vite "^2.4.4"
vite-plugin-vue2 "^1.8.0" vite-plugin-vue2 "^1.8.0"
nuxt@^2.15.7: nuxt@^2.15.8:
version "2.15.8" version "2.15.8"
resolved "https://registry.yarnpkg.com/nuxt/-/nuxt-2.15.8.tgz#946cba46bdaaf0e3918aa27fd9ea0fed8ed303b0" resolved "https://registry.yarnpkg.com/nuxt/-/nuxt-2.15.8.tgz#946cba46bdaaf0e3918aa27fd9ea0fed8ed303b0"
integrity sha512-ceK3qLg/Baj7J8mK9bIxqw9AavrF+LXqwYEreBdY/a4Sj8YV4mIvhqea/6E7VTCNNGvKT2sJ/TTJjtfQ597lTA== integrity sha512-ceK3qLg/Baj7J8mK9bIxqw9AavrF+LXqwYEreBdY/a4Sj8YV4mIvhqea/6E7VTCNNGvKT2sJ/TTJjtfQ597lTA==
@ -10400,24 +10422,25 @@ unpipe@1.0.0, unpipe@~1.0.0:
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
unplugin-vue2-script-setup@^0.6.13: unplugin-vue2-script-setup@^0.7.3:
version "0.6.13" version "0.7.3"
resolved "https://registry.yarnpkg.com/unplugin-vue2-script-setup/-/unplugin-vue2-script-setup-0.6.13.tgz#ec492ce0101684facbc0b116be3314df23d337f5" resolved "https://registry.yarnpkg.com/unplugin-vue2-script-setup/-/unplugin-vue2-script-setup-0.7.3.tgz#edf63f7f183d8f50d2991d12f120f78faeb78a5a"
integrity sha512-3jfzUhdKdI2gv1j62JZnuusbVWgBivUU24L3eAtezYe78xxa1CzEllTv34aCSAVC8ET6IdmiHcGvgSysmrv0pQ== integrity sha512-3C32JkCS7BsNsgUkVnCEIJynHy+N/xwqiaUiMkeTm3Rk+HfHMhEPQ5Gysg3tejWY7KJyk8CohUKswTChurI1ng==
dependencies: dependencies:
"@antfu/utils" "^0.3.0" "@antfu/utils" "^0.3.0"
"@babel/core" "^7.15.5" "@babel/core" "^7.16.0"
"@babel/generator" "^7.15.4" "@babel/generator" "^7.16.0"
"@babel/parser" "^7.15.6" "@babel/parser" "^7.16.3"
"@babel/traverse" "^7.15.4" "@babel/traverse" "^7.16.3"
"@babel/types" "^7.15.6" "@babel/types" "^7.16.0"
"@rollup/pluginutils" "^4.1.1" "@rollup/pluginutils" "^4.1.1"
"@vue/ref-transform" "^3.2.11" "@vue/compiler-core" "^3.2.23"
"@vue/shared" "^3.2.11" "@vue/ref-transform" "^3.2.23"
"@vue/shared" "^3.2.23"
defu "^5.0.0" defu "^5.0.0"
htmlparser2 "^7.1.2" htmlparser2 "5.0.1"
magic-string "^0.25.7" magic-string "^0.25.7"
unplugin "^0.2.11" unplugin "^0.2.21"
unplugin@^0.0.6: unplugin@^0.0.6:
version "0.0.6" version "0.0.6"
@ -10426,10 +10449,10 @@ unplugin@^0.0.6:
dependencies: dependencies:
webpack-virtual-modules "^0.4.3" webpack-virtual-modules "^0.4.3"
unplugin@^0.2.11: unplugin@^0.2.21:
version "0.2.20" version "0.2.21"
resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-0.2.20.tgz#fd579b8f302459eb1ae3616f71c2ba93e6076187" resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-0.2.21.tgz#7852cddd9f78f0b32881812fd2efd5a39dcc64e5"
integrity sha512-CGnCaTqNjqeixpIlNEkpysxfR2hb4xv21xa4IURXnhYTfCp73UWuG0KcdanuhFJbwO5w+EGK4XaAaqdb/1vWbg== integrity sha512-IJ15/L5XbhnV7J09Zjk0FT5HEkBjkXucWAXQWRsmEtUxmmxwh23yavrmDbCF6ZPxWiVB28+wnKIHePTRRpQPbQ==
dependencies: dependencies:
webpack-virtual-modules "^0.4.3" webpack-virtual-modules "^0.4.3"