From 99f236b70d4e8bdd4a01d1f628857f2280c897a2 Mon Sep 17 00:00:00 2001 From: Rotimi Best Date: Thu, 1 Aug 2024 14:04:50 +0100 Subject: [PATCH] feat: support course meta tags (#421) * support course meta tags * fix import --- apps/dashboard/package.json | 1 + apps/dashboard/src/app.html | 5 +- apps/dashboard/src/routes/+layout.server.ts | 43 ++++++- apps/dashboard/src/routes/+layout.svelte | 7 +- .../src/routes/course/[slug]/+page.js | 15 --- .../src/routes/course/[slug]/+page.svelte | 29 ----- .../src/routes/course/[slug]/+page.ts | 45 +++++++ pnpm-lock.yaml | 113 ++++++++++++------ 8 files changed, 173 insertions(+), 85 deletions(-) delete mode 100644 apps/dashboard/src/routes/course/[slug]/+page.js create mode 100644 apps/dashboard/src/routes/course/[slug]/+page.ts diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index 0813723a..ebbe9da6 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -55,6 +55,7 @@ "sirv": "^2.0.3", "stripe": "^14.22.0", "svelte-email": "^0.0.4", + "svelte-meta-tags": "^3.1.2", "svelte-ui": "workspace:*", "sveltekit-i18n": "^2.4.2", "unsplash-js": "^7.0.18", diff --git a/apps/dashboard/src/app.html b/apps/dashboard/src/app.html index 3ba9128e..0c2972b2 100644 --- a/apps/dashboard/src/app.html +++ b/apps/dashboard/src/app.html @@ -12,7 +12,8 @@ - ClassroomIO – Launch Your Online Bootcamp In Minutes + diff --git a/apps/dashboard/src/routes/+layout.server.ts b/apps/dashboard/src/routes/+layout.server.ts index e33990c3..d1c7d100 100644 --- a/apps/dashboard/src/routes/+layout.server.ts +++ b/apps/dashboard/src/routes/+layout.server.ts @@ -1,3 +1,4 @@ +import type { MetaTagsProps } from 'svelte-meta-tags'; import { dev, browser } from '$app/environment'; import { redirect } from '@sveltejs/kit'; import { blockedSubdomain } from '$lib/utils/constants/app'; @@ -16,6 +17,7 @@ interface LoadOutput { isOrgSite: boolean; skipAuth: boolean; org: CurrentOrg | null; + baseMetaTags: MetaTagsProps; } export const load = async ({ url, cookies }): Promise => { @@ -23,7 +25,8 @@ export const load = async ({ url, cookies }): Promise => { orgSiteName: '', isOrgSite: false, skipAuth: false, - org: null + org: null, + baseMetaTags: getBaseMetaTags(url) }; // Selfhosted usecase would be here @@ -98,6 +101,44 @@ export const load = async ({ url, cookies }): Promise => { return response; }; +function getBaseMetaTags(url: URL) { + return Object.freeze({ + title: 'ClassroomIO – Launch Your Online Bootcamp In Minutes', + description: + 'Launch your bootcamp quickly and affordably with ClassroomIO, the customizable online teaching platform.', + canonical: new URL(url.pathname, url.origin).href, + openGraph: { + type: 'website', + url: new URL(url.pathname, url.origin).href, + locale: 'en_IE', + title: 'ClassroomIO – Launch Your Online Bootcamp In Minutes', + description: + 'Launch your bootcamp quickly and affordably with ClassroomIO, the customizable online teaching platform.', + siteName: 'ClassroomIO', + images: [ + { + url: 'https://classroomio.com/classroomio-opengraph-image.png', + alt: 'ClassroomIO OG Image', + width: 1920, + height: 1080, + secureUrl: 'https://classroomio.com/classroomio-opengraph-image.png', + type: 'image/jpeg' + } + ] + }, + twitter: { + handle: '@classroomio', + site: '@classroomio', + cardType: 'summary_large_image', + title: 'ClassroomIO – Launch Your Online Bootcamp In Minutes', + description: + 'Launch your bootcamp quickly and affordably with ClassroomIO, the customizable online teaching platform.', + image: 'https://classroomio.com/classroomio-opengraph-image.png', + imageAlt: 'ClassroomIO OG Image' + } + }); +} + // Define getInitialLocale function function getInitialLocale(): string { if (browser) { diff --git a/apps/dashboard/src/routes/+layout.svelte b/apps/dashboard/src/routes/+layout.svelte index 70a4e978..8f91797d 100644 --- a/apps/dashboard/src/routes/+layout.svelte +++ b/apps/dashboard/src/routes/+layout.svelte @@ -1,12 +1,14 @@ + + diff --git a/apps/dashboard/src/routes/course/[slug]/+page.js b/apps/dashboard/src/routes/course/[slug]/+page.js deleted file mode 100644 index 018e98fc..00000000 --- a/apps/dashboard/src/routes/course/[slug]/+page.js +++ /dev/null @@ -1,15 +0,0 @@ -import { fetchCourse } from '$lib/utils/services/courses'; -import { supabase, getSupabase } from '$lib/utils/functions/supabase'; - -if (!supabase) { - getSupabase(); -} - -export const load = async ({ params = { slug: '' } }) => { - const { data } = await fetchCourse(undefined, params.slug); - - return { - slug: params.slug, - course: data - }; -}; diff --git a/apps/dashboard/src/routes/course/[slug]/+page.svelte b/apps/dashboard/src/routes/course/[slug]/+page.svelte index 8b933a40..005bc518 100644 --- a/apps/dashboard/src/routes/course/[slug]/+page.svelte +++ b/apps/dashboard/src/routes/course/[slug]/+page.svelte @@ -1,5 +1,4 @@ - - {get(data.course, 'title', '')} - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/dashboard/src/routes/course/[slug]/+page.ts b/apps/dashboard/src/routes/course/[slug]/+page.ts new file mode 100644 index 00000000..fbeab276 --- /dev/null +++ b/apps/dashboard/src/routes/course/[slug]/+page.ts @@ -0,0 +1,45 @@ +import { fetchCourse } from '$lib/utils/services/courses'; +import { supabase, getSupabase } from '$lib/utils/functions/supabase'; +import type { MetaTagsProps } from 'svelte-meta-tags'; + +if (!supabase) { + getSupabase(); +} + +export const load = async ({ params = { slug: '' } }) => { + const { data } = await fetchCourse(undefined, params.slug); + + const pageMetaTags = Object.freeze({ + title: data?.title, + description: data?.description, + openGraph: { + title: data?.title, + description: data?.description, + images: [ + { + url: data?.logo, + alt: data?.title, + width: 280, + height: 200, + secureUrl: data?.logo, + type: 'image/jpeg' + } + ] + }, + twitter: { + handle: '@classroomio', + site: '@classroomio', + cardType: 'summary_large_image', + title: data?.title, + description: data?.description, + image: data?.logo, + imageAlt: 'ClassroomIO OG Image' + } + }) satisfies MetaTagsProps; + + return { + slug: params.slug, + course: data, + pageMetaTags + }; +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 995014aa..22662253 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -267,6 +267,9 @@ importers: svelte-email: specifier: ^0.0.4 version: 0.0.4 + svelte-meta-tags: + specifier: ^3.1.2 + version: 3.1.2(svelte@4.1.2)(typescript@5.1.6) svelte-ui: specifier: workspace:* version: link:../../packages/svelte-ui @@ -1628,7 +1631,7 @@ packages: '@babel/traverse': 7.23.4 '@babel/types': 7.23.4 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -1651,7 +1654,7 @@ packages: '@babel/traverse': 7.23.4 '@babel/types': 7.23.4 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -1674,7 +1677,7 @@ packages: '@babel/traverse': 7.23.9 '@babel/types': 7.23.9 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -1808,7 +1811,7 @@ packages: '@babel/core': 7.22.9 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -3123,7 +3126,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.4 '@babel/types': 7.23.4 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -3141,7 +3144,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.9 '@babel/types': 7.23.9 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -3495,7 +3498,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) espree: 9.6.1 globals: 13.23.0 ignore: 5.3.0 @@ -3512,7 +3515,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -3565,7 +3568,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -3577,7 +3580,7 @@ packages: deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -4324,8 +4327,8 @@ packages: typescript: optional: true dependencies: - debug: 4.3.4(supports-color@8.1.1) - extract-zip: 2.0.1(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) + extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.3.0 tar-fs: 3.0.4 @@ -5838,7 +5841,7 @@ packages: vite: ^4.0.0 dependencies: '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.1.2)(vite@4.4.8) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) svelte: 4.1.2 vite: 4.4.8(@types/node@18.11.10)(sass@1.64.2) transitivePeerDependencies: @@ -5852,7 +5855,7 @@ packages: vite: ^4.0.0 dependencies: '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.5.3)(svelte@4.1.2)(vite@4.4.8) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.5 @@ -6265,7 +6268,7 @@ packages: '@typescript-eslint/type-utils': 6.12.0(eslint@8.57.0)(typescript@5.3.2) '@typescript-eslint/utils': 6.12.0(eslint@8.57.0)(typescript@5.3.2) '@typescript-eslint/visitor-keys': 6.12.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.0 @@ -6291,7 +6294,7 @@ packages: '@typescript-eslint/types': 6.12.0 '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) '@typescript-eslint/visitor-keys': 6.12.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 typescript: 5.3.2 transitivePeerDependencies: @@ -6326,7 +6329,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) '@typescript-eslint/utils': 6.12.0(eslint@8.57.0)(typescript@5.3.2) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 ts-api-utils: 1.0.3(typescript@5.3.2) typescript: 5.3.2 @@ -6355,7 +6358,7 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -6376,7 +6379,7 @@ packages: dependencies: '@typescript-eslint/types': 6.12.0 '@typescript-eslint/visitor-keys': 6.12.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -6644,7 +6647,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: false @@ -6653,7 +6656,7 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -8670,7 +8673,6 @@ packages: dependencies: ms: 2.1.2 supports-color: 5.5.0 - dev: false /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -8683,6 +8685,7 @@ packages: dependencies: ms: 2.1.2 supports-color: 8.1.1 + dev: true /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -9322,7 +9325,7 @@ packages: eslint: '*' eslint-plugin-import: '*' dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) enhanced-resolve: 5.15.0 eslint: 8.57.0 eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) @@ -9519,7 +9522,7 @@ packages: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@jridgewell/sourcemap-codec': 1.4.15 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 eslint-compat-utils: 0.1.2(eslint@8.57.0) esutils: 2.0.3 @@ -9631,7 +9634,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -9678,7 +9681,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -9966,6 +9969,20 @@ packages: /extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + /extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + dependencies: + debug: 4.3.4(supports-color@5.5.0) + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + dev: false + /extract-zip@2.0.1(supports-color@8.1.1): resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} @@ -9978,6 +9995,7 @@ packages: '@types/yauzl': 2.10.3 transitivePeerDependencies: - supports-color + dev: true /extsprintf@1.3.0: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} @@ -10354,7 +10372,7 @@ packages: dependencies: basic-ftp: 5.0.4 data-uri-to-buffer: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) fs-extra: 11.2.0 transitivePeerDependencies: - supports-color @@ -10599,6 +10617,7 @@ packages: /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + dev: true /has-property-descriptors@1.0.1: resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} @@ -10852,7 +10871,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: false @@ -10871,7 +10890,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: false @@ -10881,7 +10900,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -11016,7 +11035,7 @@ packages: dependencies: '@ioredis/commands': 1.2.0 cluster-key-slot: 1.1.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -11430,7 +11449,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -13042,7 +13061,7 @@ packages: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: '@types/debug': 4.1.12 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -13839,7 +13858,7 @@ packages: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) get-uri: 6.0.3 http-proxy-agent: 7.0.1 https-proxy-agent: 7.0.4 @@ -14406,7 +14425,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) http-proxy-agent: 7.0.1 https-proxy-agent: 7.0.4 lru-cache: 7.18.3 @@ -14460,7 +14479,7 @@ packages: '@puppeteer/browsers': 1.4.6(typescript@5.3.2) chromium-bidi: 0.4.16(devtools-protocol@0.0.1147663) cross-fetch: 4.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) devtools-protocol: 0.0.1147663 typescript: 5.3.2 ws: 8.13.0 @@ -15078,6 +15097,14 @@ packages: loose-envify: 1.4.0 dev: false + /schema-dts@1.1.2(typescript@5.1.6): + resolution: {integrity: sha512-MpNwH0dZJHinVxk9bT8XUdjKTxMYrA5bLtrrGmFA6PTLwlOKnhi67XoRd6/ty+Djt6ZC0slR57qFhZDNMI6DhQ==} + peerDependencies: + typescript: '>=4.1.0' + dependencies: + typescript: 5.1.6 + dev: false + /scroll-into-view-if-needed@3.1.0: resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} dependencies: @@ -15303,7 +15330,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) socks: 2.7.3 transitivePeerDependencies: - supports-color @@ -15776,6 +15803,7 @@ packages: engines: {node: '>=10'} dependencies: has-flag: 4.0.0 + dev: true /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} @@ -15871,6 +15899,17 @@ packages: resolution: {integrity: sha512-vKaW71QMCBcTNijAGc0mUl8k3DQ66iYmp6MB8BMGCXyWk82bTrcLy8FOnSm9fE+8q6TwzD6PLUoYFHt0II93Xw==} dev: true + /svelte-meta-tags@3.1.2(svelte@4.1.2)(typescript@5.1.6): + resolution: {integrity: sha512-zw8xSA10ce7atFO1o0N1x41+qU+HBnpGx8KcVRAWPy5iiRdO6fvUFMg6VwJVgMhLSBEUTZXKAvMALLUssbCoCw==} + peerDependencies: + svelte: ^3.55.0 || ^4.0.0 + dependencies: + schema-dts: 1.1.2(typescript@5.1.6) + svelte: 4.1.2 + transitivePeerDependencies: + - typescript + dev: false + /svelte-preprocess@5.0.4(@babel/core@7.22.9)(postcss-load-config@4.0.1)(postcss@8.4.24)(sass@1.64.2)(svelte@4.1.2)(typescript@5.1.6): resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==} engines: {node: '>= 14.10.0'}