diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index a786b23..0000000
--- a/.eslintignore
+++ /dev/null
@@ -1,3 +0,0 @@
-dist
-node_modules
-client
diff --git a/.eslintrc b/.eslintrc
deleted file mode 100644
index 9e17846..0000000
--- a/.eslintrc
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "root": true,
- "extends": ["@nuxt/eslint-config"]
-}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..eae23ff
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,43 @@
+{
+ // Enable the ESlint flat config support
+ "eslint.experimental.useFlatConfig": true,
+
+ // Disable the default formatter, use eslint instead
+ "prettier.enable": false,
+ "editor.formatOnSave": false,
+
+ // Auto fix
+ "editor.codeActionsOnSave": {
+ "source.fixAll.eslint": "explicit",
+ "source.organizeImports": "never"
+ },
+
+ // Silent the stylistic rules in you IDE, but still auto fix them
+ "eslint.rules.customizations": [
+ { "rule": "style/*", "severity": "off" },
+ { "rule": "format/*", "severity": "off" },
+ { "rule": "*-indent", "severity": "off" },
+ { "rule": "*-spacing", "severity": "off" },
+ { "rule": "*-spaces", "severity": "off" },
+ { "rule": "*-order", "severity": "off" },
+ { "rule": "*-dangle", "severity": "off" },
+ { "rule": "*-newline", "severity": "off" },
+ { "rule": "*quotes", "severity": "off" },
+ { "rule": "*semi", "severity": "off" }
+ ],
+
+ // Enable eslint for all supported languages
+ "eslint.validate": [
+ "javascript",
+ "javascriptreact",
+ "typescript",
+ "typescriptreact",
+ "vue",
+ "html",
+ "markdown",
+ "json",
+ "jsonc",
+ "yaml",
+ "toml"
+ ]
+}
diff --git a/README.md b/README.md
index 46b9629..8ef4db4 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,5 @@
[![vue-email](https://github.com/vue-email/vue-email/blob/main/public/repo-banner.png?raw=true)](https://vuemail.net)
-
[![npm version][npm-version-src]][npm-version-href]
@@ -90,7 +89,6 @@ npm run release
[MIT](./LICENSE) License © 2023-PRESENT [Vue Email](https://vuemail.net/)
-
[npm-version-src]: https://img.shields.io/npm/v/@vue-email/nuxt/latest.svg?style=flat&colorA=18181B&colorB=28CF8D
[npm-version-href]: https://npmjs.com/package/@vue-email/nuxt
diff --git a/client/components/CodeContainer.vue b/client/components/CodeContainer.vue
index cf8145f..1eeafdb 100644
--- a/client/components/CodeContainer.vue
+++ b/client/components/CodeContainer.vue
@@ -59,21 +59,24 @@ const items = computed(() => {
code: template.value.txt,
},
]
- } else if (editorCode.value.id === 'html') {
+ }
+ else if (editorCode.value.id === 'html') {
arr.push({
key: 'html',
label: 'HTML',
icon: 'i-ph-file-html-duotone',
code: template.value.html,
})
- } else if (editorCode.value.id === 'txt') {
+ }
+ else if (editorCode.value.id === 'txt') {
arr.push({
key: 'txt',
label: 'Plain Text',
icon: 'i-ph-text-t-duotone',
code: template.value.txt,
})
- } else if (editorCode.value.id === 'vue') {
+ }
+ else if (editorCode.value.id === 'vue') {
arr.push({
key: 'vue',
label: 'Vue',
@@ -89,9 +92,12 @@ const tab = ref(0)
-
+ {{ email.props }}
+
diff --git a/client/components/CommandPalette.vue b/client/components/CommandPalette.vue
index 0df3e4f..817ea83 100644
--- a/client/components/CommandPalette.vue
+++ b/client/components/CommandPalette.vue
@@ -53,8 +53,10 @@ function onSelect(option: Email) {
>
-
-
We couldn't find any email template.
+
+
+ We couldn't find any email template.
+
You can create a
diff --git a/client/components/EmailPreview.vue b/client/components/EmailPreview.vue
index 1ff9eba..e2431f6 100644
--- a/client/components/EmailPreview.vue
+++ b/client/components/EmailPreview.vue
@@ -33,14 +33,16 @@ const emailSubject = ref('Testing Vue Email')
function handleView(view: ActiveView) {
activeView.value = view
router.push(`${route.path}?view=${view}`)
- if (iframeUpdate.value >= 100) iframeUpdate.value = 0
+ if (iframeUpdate.value >= 100)
+ iframeUpdate.value = 0
iframeUpdate.value++
}
async function updateIframe() {
refresh.value = !refresh.value
- if (iframeUpdate.value >= 100) iframeUpdate.value = 0
+ if (iframeUpdate.value >= 100)
+ iframeUpdate.value = 0
iframeUpdate.value++
}
@@ -50,10 +52,12 @@ function setlang(lang: ActiveLang) {
}
watchEffect(() => {
- if (query.view === 'source' || query.view === 'desktop' || query.view === 'mobile') activeView.value = query.view
+ if (query.view === 'source' || query.view === 'desktop' || query.view === 'mobile')
+ activeView.value = query.view
if (query.lang) {
- if (['html'].includes(query.lang)) activeLang.value = query.lang
+ if (['html'].includes(query.lang))
+ activeLang.value = query.lang
}
})
@@ -99,9 +103,7 @@ watchEffect(() => {
-
Powered by Resend
+
Powered by Resend
-
Welcome to the Vue Email Dev Tools!
+
+ Welcome to the Vue Email Dev Tools!
+
To start developing your next email template, you can create a
.vue file under the emails folder.
@@ -69,7 +71,9 @@ const items = [
{{ item.title }}
→
-
{{ item.description }}
+
+ {{ item.description }}
+
diff --git a/client/components/SendEmail.vue b/client/components/SendEmail.vue
index 6247e9f..6656c41 100644
--- a/client/components/SendEmail.vue
+++ b/client/components/SendEmail.vue
@@ -34,12 +34,8 @@ defineShortcuts({
-
Powered by
- Resend
+
Powered by
+ Resend
-
Horizontal Split
-
Split the email preview and code editor horizontally
+
+ Horizontal Split
+
+
+ Split the email preview and code editor horizontally
+
-
Preview Mode
-
Choose between the preview modes
+
+ Preview Mode
+
+
+ Choose between the preview modes
+
@@ -26,8 +34,12 @@ const { isSettingsOpen, email, horizontalSplit, previewMode, previewModes, edito
-
Editor Language
-
Choose which code language to display in the editor
+
+ Editor Language
+
+
+ Choose which code language to display in the editor
+
@@ -36,10 +48,10 @@ const { isSettingsOpen, email, horizontalSplit, previewMode, previewModes, edito
-
+
-
+
+
diff --git a/client/components/TopNav.vue b/client/components/TopNav.vue
index edf8de5..a43cf20 100644
--- a/client/components/TopNav.vue
+++ b/client/components/TopNav.vue
@@ -8,10 +8,14 @@ import { version } from '../../package.json'
- Vue Email
+
+ Vue Email
+
- v{{ version }}
+
+ v{{ version }}
+
diff --git a/client/composables/shiki.ts b/client/composables/shiki.ts
index fe84247..8323d46 100644
--- a/client/composables/shiki.ts
+++ b/client/composables/shiki.ts
@@ -13,7 +13,8 @@ getHighlighter({
})
export function highlight(code: string, lang: string) {
- if (!shiki.value) return code
+ if (!shiki.value)
+ return code
return shiki.value.codeToHtml(code, {
lang,
theme: 'vitesse-dark',
diff --git a/client/composables/useEmail.ts b/client/composables/useEmail.ts
index 72ffd53..fe495d8 100644
--- a/client/composables/useEmail.ts
+++ b/client/composables/useEmail.ts
@@ -1,6 +1,6 @@
import pretty from 'pretty'
-import type { Email } from '@/types/email'
import type { Result } from '@vue-email/compiler'
+import type { Email } from '@/types/email'
export function useEmail() {
const emails = useState('emails')
@@ -25,37 +25,39 @@ export function useEmail() {
return
}
- if (data && data.value) {
+ if (data && data.value)
emails.value = data.value
- }
}
const renderEmail = async () => {
- if (!email.value) return null
+ if (!email.value)
+ return null
const { data } = await useFetch(`/api/render/${email.value.filename}`, {
baseURL: host.value,
})
- if (data.value)
+ if (data.value) {
return {
vue: email.value.content,
html: pretty(data.value.html),
txt: data.value.text,
}
+ }
return null
}
const getEmail = async (filename: string) => {
if (filename && emails.value && emails.value.length) {
- const found = emails.value.find((email) => email.filename === filename)
+ const found = emails.value.find(email => email.filename === filename)
if (found) {
email.value = found
await renderEmail().then((value) => {
- if (value) template.value = value
+ if (value)
+ template.value = value
})
}
}
@@ -63,7 +65,8 @@ export function useEmail() {
const sendTestEmail = async (to: string, subject: string, markup: string) => {
try {
- if (!email || !subject) return
+ if (!email || !subject)
+ return
sending.value = true
@@ -96,14 +99,16 @@ export function useEmail() {
icon: 'i-ph-bell-bold',
})
}
- } catch (error) {
+ }
+ catch (error) {
useToast().add({
title: 'Error',
description: 'Something went wrong. Please try again.',
color: 'red',
icon: 'i-ph-bell-bold',
})
- } finally {
+ }
+ finally {
sending.value = false
}
}
diff --git a/client/composables/useTool.ts b/client/composables/useTool.ts
index 03aed5e..2f81cd2 100644
--- a/client/composables/useTool.ts
+++ b/client/composables/useTool.ts
@@ -58,13 +58,11 @@ export function useTool(params?: UseToolParams) {
const editorCode = useStorage('editorCodes', editorCodes[0])
watch(reloadTemplate, async () => {
- if (typeof params?.onReload == 'undefined' && typeof params?.onReload !== 'function' && !reloadTemplate.value) {
+ if (typeof params?.onReload == 'undefined' && typeof params?.onReload !== 'function' && !reloadTemplate.value)
return
- }
- if (typeof params?.onReload === 'function') {
+ if (typeof params?.onReload === 'function')
await params.onReload()
- }
setTimeout(() => {
reloadTemplate.value = false
diff --git a/client/emails/code-components.vue b/client/emails/code-components.vue
index bad6cd4..0be9677 100644
--- a/client/emails/code-components.vue
+++ b/client/emails/code-components.vue
@@ -15,7 +15,6 @@ const box = {
padding: '0 48px',
}
-
const code = `import { codeToThemedTokens } from 'shikiji'
const tokens = await codeToThemedTokens('bar
', {
diff --git a/client/emails/github-access-token.vue b/client/emails/github-access-token.vue
index 61beb9b..0ee2520 100644
--- a/client/emails/github-access-token.vue
+++ b/client/emails/github-access-token.vue
@@ -71,26 +71,36 @@ const footer = {
- @{{ username }}, a personal access was created on your account.
+ @{{ username }}, a personal access was created on your account.
- Hey {{ username }}!
+ Hey {{ username }}!
+
+
+ A fine-grained personal access token (
+ resend
+ ) was recently added to your account.
- A fine-grained personal access token ( resend ) was recently added to your account.
- View your token
+
+ View your token
+
- Your security audit log
+
+ Your security audit log
+
・
- Contact support
+
+ Contact support
+
- GitHub, Inc. ・88 Colin P Kelly Jr Street ・San Francisco, CA 94107
+
+ GitHub, Inc. ・88 Colin P Kelly Jr Street ・San Francisco, CA 94107
+
diff --git a/client/emails/koala-welcome.vue b/client/emails/koala-welcome.vue
index 15ad73f..4c4ab3b 100644
--- a/client/emails/koala-welcome.vue
+++ b/client/emails/koala-welcome.vue
@@ -57,18 +57,26 @@ const footer = {
- Hi {{ userFirstname }},
- Welcome to Koala, the sales intelligence platform that helps you uncover qualified leads and close deals faster.
+
+ Hi {{ userFirstname }},
+
+
+ Welcome to Koala, the sales intelligence platform that helps you uncover qualified leads and close deals faster.
+
- Get started
+
+ Get started
+
Best,
-
+
The Koala team
- 408 Warren Rd - San Mateo, CA 94402
+
+ 408 Warren Rd - San Mateo, CA 94402
+
diff --git a/client/emails/stripe-welcome.vue b/client/emails/stripe-welcome.vue
index 6ccda36..2c023ea 100644
--- a/client/emails/stripe-welcome.vue
+++ b/client/emails/stripe-welcome.vue
@@ -60,36 +60,56 @@ const footer = {
- Thanks for submitting your account information. You're now ready to make live transactions with Stripe!
- You can view your payments and a variety of other information about your account right from your dashboard.
- View your Stripe Dashboard
+
+ Thanks for submitting your account information. You're now ready to make live transactions with Stripe!
+
+
+ You can view your payments and a variety of other information about your account right from your dashboard.
+
+
+ View your Stripe Dashboard
+
If you haven't finished your integration, you might find our
- docs
+
+ docs
+
handy.
Once you're ready to start accepting payments, you'll just need to use your live
- API keys
+
+ API keys
+
instead of your test API keys. Your account can simultaneously be used for both test and live requests, so you can continue testing while accepting live payments. Check
out our
- tutorial about account basics
+
+ tutorial about account basics
+
.
Finally, we've put together a
- quick checklist
+
+ quick checklist
+
to ensure your website conforms to card network standards.
We'll be here to help you with any step along the way. You can find answers to most questions and get in touch with us on our
- support site
+
+ support site
+
.
- — The Stripe team
+
+ — The Stripe team
+
- Stripe, 354 Oyster Point Blvd, South San Francisco, CA 94080
+
+ Stripe, 354 Oyster Point Blvd, South San Francisco, CA 94080
+
diff --git a/client/emails/twitch-reset-password.vue b/client/emails/twitch-reset-password.vue
index a023e56..c5223d0 100644
--- a/client/emails/twitch-reset-password.vue
+++ b/client/emails/twitch-reset-password.vue
@@ -92,27 +92,35 @@ const link = {
- Hi {{ username }},
+
+ Hi {{ username }},
+
You updated the password for your Twitch account on
{{ formattedDate }}. If this was you, then no further action is required.
However if you did NOT perform this password change, please
- reset your account password
+
+ reset your account password
+
immediately.
Remember to use a password that is both strong and unique to your Twitch account. To learn more about how to create a strong and unique password,
- click here.
+
+ click here.
+
Still have questions? Please contact
- Twitch Support
+
+ Twitch Support
+
Thanks,
-
+
Twitch Support Team
@@ -128,7 +136,7 @@ const link = {
- © 2023 Twitch, All Rights Reserved
+ © 2023 Twitch, All Rights Reserved
350 Bush Street, 2nd Floor, San Francisco, CA, 94104 - USA
diff --git a/client/emails/vercel-invite-user.vue b/client/emails/vercel-invite-user.vue
index f07fa4f..a31d345 100644
--- a/client/emails/vercel-invite-user.vue
+++ b/client/emails/vercel-invite-user.vue
@@ -34,7 +34,9 @@ const previewText = `Join ${props.invitedByUsername} on Vercel`
Join {{ teamName }} on Vercel
- Hello {{ username }},
+
+ Hello {{ username }},
+
bukinoshita (
@@ -56,7 +58,9 @@ const previewText = `Join ${props.invitedByUsername} on Vercel`
- Join the team
+
+ Join the team
+
or copy and paste this URL into your browser:
@@ -68,8 +72,7 @@ const previewText = `Join ${props.invitedByUsername} on Vercel`
This invitation was intended for
{{ username }} .This invite was sent from {{ inviteFromIp }} located in
- {{ inviteFromLocation }}. If you were not expecting this invitation, you can ignore this email. If you are concerned about your account's safety, please reply to this email to get in touch
+ {{ inviteFromLocation }}. If you were not expecting this invitation, you can ignore this email. If you are concerned about your account's safety, please reply to this email to get in touch
with us.
diff --git a/client/emails/yelp-recent-login.vue b/client/emails/yelp-recent-login.vue
index 761d245..405bf7e 100644
--- a/client/emails/yelp-recent-login.vue
+++ b/client/emails/yelp-recent-login.vue
@@ -91,7 +91,9 @@ const containerImageFooter = {
}"
>
- Hi {{ userFirstName }},
+
+ Hi {{ userFirstName }},
+
If this was you, there's nothing else you need to do.
- If this wasn't you or if you have additional questions, please see our support page.
+
+ If this was you, there's nothing else you need to do.
+
+
+ If this wasn't you or if you have additional questions, please see our support page.
+
- Learn More
+
+ Learn More
+
diff --git a/client/package.json b/client/package.json
index ec42d74..d29e8cd 100644
--- a/client/package.json
+++ b/client/package.json
@@ -27,6 +27,7 @@
"pretty": "^2.0.0",
"scule": "^1.2.0",
"shikiji": "^0.9.19",
- "splitpanes": "^3.1.5"
+ "splitpanes": "^3.1.5",
+ "vue-component-meta": "^1.8.27"
}
}
diff --git a/client/server/api/emails.get.ts b/client/server/api/emails.get.ts
index 33fbe9f..060e24a 100644
--- a/client/server/api/emails.get.ts
+++ b/client/server/api/emails.get.ts
@@ -1,25 +1,105 @@
+import path from 'node:path'
import { kebabCase, pascalCase } from 'scule'
+import { createComponentMetaCheckerByJsonConfig } from 'vue-component-meta'
import type { Email } from '~/types/email'
import { createError, defineEventHandler, useStorage } from '#imports'
+const rootDir = process.cwd()
+const checker = createComponentMetaCheckerByJsonConfig(
+ rootDir,
+ {
+ extends: `${rootDir}/tsconfig.json`,
+ skipLibCheck: true,
+ include: ['emails/**/*'],
+ exclude: [],
+ },
+ {
+ forceUseTs: true,
+ printer: { newLine: 1 },
+ },
+)
+
+function stripeTypeScriptInternalTypesSchema(type: any): any {
+ if (!type)
+ return type
+
+ if (type.declarations && type.declarations.find((d: any) => d.file.includes('node_modules/typescript')))
+ return false
+
+ if (Array.isArray(type))
+ return type.map((sch: any) => stripeTypeScriptInternalTypesSchema(sch)).filter(r => r !== false)
+
+ if (Array.isArray(type.schema)) {
+ return {
+ ...type,
+ schema: type.schema.map((sch: any) => stripeTypeScriptInternalTypesSchema(sch)).filter((r: any) => r !== false),
+ }
+ }
+ if (!type.schema || typeof type.schema !== 'object')
+ return type
+
+ const schema: any = {}
+ Object.keys(type.schema).forEach((sch) => {
+ const res = stripeTypeScriptInternalTypesSchema(type.schema[sch])
+ if (res !== false)
+ schema[sch] = res
+ })
+ return {
+ ...type,
+ schema,
+ }
+}
+
export default defineEventHandler(async () => {
try {
const nitroEmails = await useStorage('assets:emails').getKeys()
const emails: Email[] = await Promise.all(
nitroEmails.map(async (email) => {
- const data = JSON.stringify(await useStorage('assets:emails').getMeta(email))
+ const data = JSON.stringify(
+ await useStorage('assets:emails').getMeta(email),
+ )
const emailData = JSON.parse(data)
- const content = (await useStorage('assets:emails').getItem(email)) as string
+ const emailPath = path.join(
+ rootDir,
+ 'emails',
+ email.replaceAll(':', '/'),
+ )
+ const { props } = checker.getComponentMeta(emailPath)
+ let emailProps = (props).filter(prop => !prop.global).sort((a, b) => {
+ if (!a.required && b.required)
+ return 1
+
+ if (a.required && !b.required)
+ return -1
+
+ if (a.type === 'boolean' && b.type !== 'boolean')
+ return 1
+
+ if (a.type !== 'boolean' && b.type === 'boolean')
+ return -1
+
+ return 0
+ })
+ emailProps = emailProps.map(stripeTypeScriptInternalTypesSchema)
+
+ const content = (await useStorage('assets:emails').getItem(
+ email,
+ )) as string
return {
- label: pascalCase(kebabCase(email.replace('.vue', '').replace(':', '_')).split('-').join(' ')),
+ label: pascalCase(
+ kebabCase(email.replace('.vue', '').replace(':', '_'))
+ .split('-')
+ .join(' '),
+ ),
filename: email,
content,
icon: 'i-heroicons-envelope',
size: emailData.size,
created: emailData.birthtime,
modified: emailData.mtime,
+ props: emailProps,
}
}),
)
@@ -32,7 +112,8 @@ export default defineEventHandler(async () => {
}
return emails
- } catch (error) {
+ }
+ catch (error) {
throw createError({
statusCode: 500,
statusMessage: 'Internal Server Error',
diff --git a/client/server/api/render/[file].get.ts b/client/server/api/render/[file].get.ts
index 5d49e26..796661b 100644
--- a/client/server/api/render/[file].get.ts
+++ b/client/server/api/render/[file].get.ts
@@ -16,7 +16,8 @@ export default defineEventHandler(async (event: any) => {
}
return template
- } catch (error) {
+ }
+ catch (error) {
console.error(error)
throw createError({
diff --git a/client/tsconfig.json b/client/tsconfig.json
index eb97e3f..4b34df1 100644
--- a/client/tsconfig.json
+++ b/client/tsconfig.json
@@ -1,3 +1,3 @@
{
"extends": "./.nuxt/tsconfig.json"
-}
\ No newline at end of file
+}
diff --git a/client/types/email.ts b/client/types/email.ts
index d5da2fb..19a4cd5 100644
--- a/client/types/email.ts
+++ b/client/types/email.ts
@@ -1,3 +1,5 @@
+import type { PropertyMeta } from 'vue-component-meta'
+
export interface Email {
label: string
filename: string
@@ -6,6 +8,7 @@ export interface Email {
size: number
created: Date
modified: Date
+ props: PropertyMeta[]
}
export interface Directory {
diff --git a/client/util/copy-text-to-clipboard.ts b/client/util/copy-text-to-clipboard.ts
index 5b5a888..de338c3 100644
--- a/client/util/copy-text-to-clipboard.ts
+++ b/client/util/copy-text-to-clipboard.ts
@@ -1,7 +1,8 @@
export async function copyTextToClipboard(text: string) {
try {
await navigator.clipboard.writeText(text)
- } catch {
+ }
+ catch {
throw new Error('Not able to copy')
}
}
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 0000000..6608dd1
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,7 @@
+import antfu from '@antfu/eslint-config'
+
+export default antfu({
+ rules: {
+ 'node/prefer-global/process': 'off',
+ },
+})
diff --git a/package.json b/package.json
index 6710d91..de6982e 100644
--- a/package.json
+++ b/package.json
@@ -1,9 +1,11 @@
{
"name": "@vue-email/nuxt",
+ "type": "module",
"version": "0.8.12",
"packageManager": "pnpm@8.11.0",
"description": "Nuxt package for vue-email",
"author": "David Arenas (https://github.com/Dave136/)",
+ "license": "MIT",
"homepage": "https://vuemail.net/",
"maintainers": [
{
@@ -17,8 +19,6 @@
"url": "https://github.com/Flowko"
}
],
- "license": "MIT",
- "type": "module",
"exports": {
".": {
"types": "./dist/types.d.ts",
@@ -43,26 +43,28 @@
"dev:client": "nuxi dev client",
"dev:prepare": "pnpm stub && nuxt-module-build prepare && nuxi prepare playground && nuxi prepare client",
"lint": "eslint .",
+ "lint:fix": "eslint . --fix",
"test": "vitest run",
"test:watch": "vitest watch",
"release": "bumpp"
},
"dependencies": {
"@nuxt/kit": "^3.10.0",
- "defu": "^6.1.4",
- "vue-email": "npm:vue-email-edge@0.8.7-28446842.1f6e4a0",
"@vue-email/compiler": "npm:@vue-email/compiler-edge@0.8.9-28446863.0aab8eb",
- "sirv": "^2.0.4"
+ "defu": "^6.1.4",
+ "sirv": "^2.0.4",
+ "vue-component-meta": "^1.8.27",
+ "vue-email": "npm:vue-email-edge@0.8.7-28446842.1f6e4a0"
},
"devDependencies": {
+ "@antfu/eslint-config": "^2.6.3",
"@nuxt/devtools": "latest",
- "@nuxt/eslint-config": "^0.2.0",
"@nuxt/module-builder": "^0.5.5",
"@nuxt/schema": "^3.10.0",
"@nuxt/test-utils": "^3.11.0",
"@types/node": "^20.11.10",
- "eslint": "^8.56.0",
"bumpp": "^9.3.0",
+ "eslint": "^8.56.0",
"jiti": "^1.21.0",
"nuxt": "^3.10.0",
"vitest": "^1.2.2"
diff --git a/playground/app.vue b/playground/app.vue
index 58db5ce..a5f2c39 100644
--- a/playground/app.vue
+++ b/playground/app.vue
@@ -1,8 +1,8 @@
+
+
Nuxt module playground!
-
-
diff --git a/playground/nuxt-layer/.eslintrc.cjs b/playground/nuxt-layer/.eslintrc.cjs
index 774ebda..10db400 100644
--- a/playground/nuxt-layer/.eslintrc.cjs
+++ b/playground/nuxt-layer/.eslintrc.cjs
@@ -1,4 +1,4 @@
module.exports = {
root: true,
- extends: ["@nuxt/eslint-config"],
-};
+ extends: ['@nuxt/eslint-config'],
+}
diff --git a/playground/nuxt-layer/.playground/app.config.ts b/playground/nuxt-layer/.playground/app.config.ts
index 2e818ca..2822871 100644
--- a/playground/nuxt-layer/.playground/app.config.ts
+++ b/playground/nuxt-layer/.playground/app.config.ts
@@ -1,5 +1,5 @@
export default defineAppConfig({
myLayer: {
- name: 'My amazing Nuxt layer (overwritten)'
- }
+ name: 'My amazing Nuxt layer (overwritten)',
+ },
})
diff --git a/playground/nuxt-layer/.playground/nuxt.config.ts b/playground/nuxt-layer/.playground/nuxt.config.ts
index ce50adf..c8908aa 100644
--- a/playground/nuxt-layer/.playground/nuxt.config.ts
+++ b/playground/nuxt-layer/.playground/nuxt.config.ts
@@ -1,3 +1,3 @@
export default defineNuxtConfig({
- extends: ['..']
+ extends: ['..'],
})
diff --git a/playground/nuxt-layer/app.config.ts b/playground/nuxt-layer/app.config.ts
index e3276b7..b75e30f 100644
--- a/playground/nuxt-layer/app.config.ts
+++ b/playground/nuxt-layer/app.config.ts
@@ -1,7 +1,7 @@
export default defineAppConfig({
myLayer: {
- name: 'Hello from Nuxt layer'
- }
+ name: 'Hello from Nuxt layer',
+ },
})
declare module '@nuxt/schema' {
diff --git a/playground/nuxt-layer/emails/TestEmail.vue b/playground/nuxt-layer/emails/TestEmail.vue
index a239e99..1187c9f 100644
--- a/playground/nuxt-layer/emails/TestEmail.vue
+++ b/playground/nuxt-layer/emails/TestEmail.vue
@@ -1,31 +1,31 @@
diff --git a/playground/nuxt-layer/nuxt.config.ts b/playground/nuxt-layer/nuxt.config.ts
index 8851e77..9d825c4 100644
--- a/playground/nuxt-layer/nuxt.config.ts
+++ b/playground/nuxt-layer/nuxt.config.ts
@@ -1,4 +1,4 @@
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
- devtools: { enabled: true }
+ devtools: { enabled: true },
})
diff --git a/playground/nuxt.config.ts b/playground/nuxt.config.ts
index 0c20a78..ae03563 100644
--- a/playground/nuxt.config.ts
+++ b/playground/nuxt.config.ts
@@ -1,22 +1,22 @@
export default defineNuxtConfig({
- modules: ["../src/module", "@nuxtjs/tailwindcss"],
- extends: ["./nuxt-layer"],
+ modules: ['../src/module', '@nuxtjs/tailwindcss'],
+ extends: ['./nuxt-layer'],
vueEmail: {
- baseUrl: "https://vue-email-demo.vercel.app/",
+ baseUrl: 'https://vue-email-demo.vercel.app/',
i18n: {
- defaultLocale: "fr",
+ defaultLocale: 'fr',
translations: {
en: {
- title: "Welcome to Vue Email",
+ title: 'Welcome to Vue Email',
subtitle:
- "A Vue.js component for generating beautiful emails using MJML",
- button: "Get Started",
+ 'A Vue.js component for generating beautiful emails using MJML',
+ button: 'Get Started',
},
fr: {
- title: "Bienvenue sur Vue Email",
+ title: 'Bienvenue sur Vue Email',
subtitle:
- "Un composant Vue.js pour générer de beaux emails en utilisant MJML",
- button: "Commencer",
+ 'Un composant Vue.js pour générer de beaux emails en utilisant MJML',
+ button: 'Commencer',
},
},
},
@@ -33,4 +33,4 @@ export default defineNuxtConfig({
// },
},
devtools: { enabled: true },
-});
+})
diff --git a/playground/package.json b/playground/package.json
index 50b3643..92606e3 100644
--- a/playground/package.json
+++ b/playground/package.json
@@ -1,7 +1,7 @@
{
- "private": true,
"name": "my-module-playground",
"type": "module",
+ "private": true,
"scripts": {
"dev": "nuxi dev",
"build": "nuxi build",
diff --git a/playground/server/api/test.get.ts b/playground/server/api/test.get.ts
index 2fc5773..b81a37e 100644
--- a/playground/server/api/test.get.ts
+++ b/playground/server/api/test.get.ts
@@ -1,19 +1,21 @@
-import { useCompiler } from "#vue-email";
+import { useCompiler } from '#vue-email'
export default defineEventHandler(async () => {
try {
- const template = await useCompiler("TestEmail.vue", {
+ const template = await useCompiler('TestEmail.vue', {
props: {
- username: "Flowko",
+ username: 'Flowko',
},
}).catch((error) => {
- console.error(error);
- });
+ console.error(error)
+ })
- if (!template) return null;
+ if (!template)
+ return null
- return template.html;
- } catch (error) {
- console.error(error);
+ return template.html
}
-});
+ catch (error) {
+ console.error(error)
+ }
+})
diff --git a/playground/tailwind.config.js b/playground/tailwind.config.js
index b89c848..a4b9944 100644
--- a/playground/tailwind.config.js
+++ b/playground/tailwind.config.js
@@ -4,10 +4,10 @@ export default {
theme: {
extend: {
colors: {
- primary: "cyan",
- secondary: "#ca8a04",
+ primary: 'cyan',
+ secondary: '#ca8a04',
},
},
},
plugins: [],
-};
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f77afec..eeccbff 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -20,16 +20,19 @@ importers:
sirv:
specifier: ^2.0.4
version: 2.0.4
+ vue-component-meta:
+ specifier: ^1.8.27
+ version: 1.8.27(typescript@5.3.3)
vue-email:
specifier: npm:vue-email-edge@0.8.7-28446842.1f6e4a0
version: /vue-email-edge@0.8.7-28446842.1f6e4a0(typescript@5.3.3)(vue@3.4.15)
devDependencies:
+ '@antfu/eslint-config':
+ specifier: ^2.6.3
+ version: 2.6.3(@vue/compiler-sfc@3.4.15)(eslint@8.56.0)(typescript@5.3.3)(vitest@1.2.2)
'@nuxt/devtools':
specifier: latest
version: 1.0.8(nuxt@3.10.0)(rollup@3.29.4)(vite@5.0.12)
- '@nuxt/eslint-config':
- specifier: ^0.2.0
- version: 0.2.0(eslint@8.56.0)
'@nuxt/module-builder':
specifier: ^0.5.5
version: 0.5.5(@nuxt/kit@3.10.0)(nuxi@3.10.0)(typescript@5.3.3)
@@ -120,6 +123,9 @@ importers:
splitpanes:
specifier: ^3.1.5
version: 3.1.5
+ vue-component-meta:
+ specifier: ^1.8.27
+ version: 1.8.27(typescript@5.3.3)
playground:
devDependencies:
@@ -148,6 +154,87 @@ packages:
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.22
+ /@antfu/eslint-config@2.6.3(@vue/compiler-sfc@3.4.15)(eslint@8.56.0)(typescript@5.3.3)(vitest@1.2.2):
+ resolution: {integrity: sha512-sfkamrOatMwMZkp14mBerHKIw8FY0SD1iCb5UZ6Y5hgb+FeDpNQPlVA0i2PN95TQ8NSYyPC1QnoM+UA5NSl0Kg==}
+ hasBin: true
+ peerDependencies:
+ '@unocss/eslint-plugin': '>=0.50.0'
+ eslint: '>=8.40.0'
+ eslint-plugin-format: '>=0.1.0'
+ eslint-plugin-react: ^7.33.2
+ eslint-plugin-react-hooks: ^4.6.0
+ eslint-plugin-react-refresh: ^0.4.4
+ eslint-plugin-svelte: ^2.34.1
+ svelte-eslint-parser: ^0.33.1
+ peerDependenciesMeta:
+ '@unocss/eslint-plugin':
+ optional: true
+ eslint-plugin-format:
+ optional: true
+ eslint-plugin-react:
+ optional: true
+ eslint-plugin-react-hooks:
+ optional: true
+ eslint-plugin-react-refresh:
+ optional: true
+ eslint-plugin-svelte:
+ optional: true
+ svelte-eslint-parser:
+ optional: true
+ dependencies:
+ '@antfu/eslint-define-config': 1.23.0-2
+ '@antfu/install-pkg': 0.3.1
+ '@eslint-types/jsdoc': 46.8.2-1
+ '@eslint-types/typescript-eslint': 6.19.1
+ '@eslint-types/unicorn': 50.0.1
+ '@stylistic/eslint-plugin': 1.5.4(eslint@8.56.0)(typescript@5.3.3)
+ '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
+ '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3)
+ eslint: 8.56.0
+ eslint-config-flat-gitignore: 0.1.2
+ eslint-merge-processors: 0.1.0(eslint@8.56.0)
+ eslint-plugin-antfu: 2.1.2(eslint@8.56.0)
+ eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0)
+ eslint-plugin-i: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)
+ eslint-plugin-jsdoc: 48.0.4(eslint@8.56.0)
+ eslint-plugin-jsonc: 2.13.0(eslint@8.56.0)
+ eslint-plugin-markdown: 3.0.1(eslint@8.56.0)
+ eslint-plugin-n: 16.6.2(eslint@8.56.0)
+ eslint-plugin-no-only-tests: 3.1.0
+ eslint-plugin-perfectionist: 2.5.0(eslint@8.56.0)(typescript@5.3.3)(vue-eslint-parser@9.4.1)
+ eslint-plugin-toml: 0.9.2(eslint@8.56.0)
+ eslint-plugin-unicorn: 50.0.1(eslint@8.56.0)
+ eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0)
+ eslint-plugin-vitest: 0.3.21(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0)(typescript@5.3.3)(vitest@1.2.2)
+ eslint-plugin-vue: 9.20.1(eslint@8.56.0)
+ eslint-plugin-yml: 1.12.2(eslint@8.56.0)
+ eslint-processor-vue-blocks: 0.1.1(@vue/compiler-sfc@3.4.15)(eslint@8.56.0)
+ globals: 13.24.0
+ jsonc-eslint-parser: 2.4.0
+ local-pkg: 0.5.0
+ parse-gitignore: 2.0.0
+ picocolors: 1.0.0
+ prompts: 2.4.2
+ toml-eslint-parser: 0.9.3
+ vue-eslint-parser: 9.4.1(eslint@8.56.0)
+ yaml-eslint-parser: 1.2.2
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@vue/compiler-sfc'
+ - astro-eslint-parser
+ - eslint-import-resolver-typescript
+ - eslint-import-resolver-webpack
+ - supports-color
+ - svelte
+ - typescript
+ - vitest
+ dev: true
+
+ /@antfu/eslint-define-config@1.23.0-2:
+ resolution: {integrity: sha512-LvxY21+ZhpuBf/aHeBUtGQhSEfad4PkNKXKvDOSvukaM3XVTfBhwmHX2EKwAsdq5DlfjbT3qqYyMiueBIO5iDQ==}
+ engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>= 8.6.0'}
+ dev: true
+
/@antfu/install-pkg@0.1.1:
resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==}
dependencies:
@@ -155,6 +242,12 @@ packages:
find-up: 5.0.0
dev: true
+ /@antfu/install-pkg@0.3.1:
+ resolution: {integrity: sha512-A3zWY9VeTPnxlMiZtsGHw2lSd3ghwvL8s9RiGOtqvDxhhFfZ781ynsGBa/iUnDJ5zBrmTFQrJDud3TGgRISaxw==}
+ dependencies:
+ execa: 8.0.1
+ dev: true
+
/@antfu/utils@0.7.7:
resolution: {integrity: sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==}
dev: true
@@ -542,6 +635,15 @@ packages:
- supports-color
dev: true
+ /@es-joy/jsdoccomment@0.41.0:
+ resolution: {integrity: sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==}
+ engines: {node: '>=16'}
+ dependencies:
+ comment-parser: 1.4.1
+ esquery: 1.5.0
+ jsdoc-type-pratt-parser: 4.0.0
+ dev: true
+
/@esbuild/aix-ppc64@0.19.11:
resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==}
engines: {node: '>=12'}
@@ -989,6 +1091,18 @@ packages:
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
dev: true
+ /@eslint-types/jsdoc@46.8.2-1:
+ resolution: {integrity: sha512-FwD7V0xX0jyaqj8Ul5ZY+TAAPohDfVqtbuXJNHb+OIv1aTIqZi5+Zn3F2UwQ5O3BnQd2mTduyK0+HjGx3/AMFg==}
+ dev: true
+
+ /@eslint-types/typescript-eslint@6.19.1:
+ resolution: {integrity: sha512-X0farz1+psE6Qfx6+ISQQ/J3ZetKlUeuTIN9Zt/agx4UXrgK6daH/n9ba776JxysK6YJCRaEHng/bcQQUm+BsA==}
+ dev: true
+
+ /@eslint-types/unicorn@50.0.1:
+ resolution: {integrity: sha512-nuJuipTNcg9f+oxZ+3QZw4tuDLmir4RJOPfM/oujgToiy1s+tePDZhwg5jUGc3q8OzTtPbVpsFSYX7QApjO3EA==}
+ dev: true
+
/@eslint/eslintrc@2.1.4:
resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -1507,21 +1621,6 @@ packages:
- utf-8-validate
dev: true
- /@nuxt/eslint-config@0.2.0(eslint@8.56.0):
- resolution: {integrity: sha512-NeJX8TLcnNAjQFiDs3XhP+9CHKK8jaKsP7eUyCSrQdgY7nqWe7VJx64lwzx5FTT4cW3RHMEyH+Y0qzLGYYoa/A==}
- peerDependencies:
- eslint: ^8.48.0
- dependencies:
- '@rushstack/eslint-patch': 1.7.0
- '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
- '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3)
- eslint: 8.56.0
- eslint-plugin-vue: 9.20.1(eslint@8.56.0)
- typescript: 5.3.3
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/@nuxt/kit@3.10.0(rollup@3.29.4):
resolution: {integrity: sha512-SNyZqk57kyEvTdFSYhQCYFCwT/EQO13O9SWtY2ULscdhXd2C5D0SQW9E7OM7O/31Fa+KQ9RnSTA8DnwaOFne2g==}
engines: {node: ^14.18.0 || >=16.10.0}
@@ -2482,10 +2581,6 @@ packages:
dev: true
optional: true
- /@rushstack/eslint-patch@1.7.0:
- resolution: {integrity: sha512-Jh4t/593gxs0lJZ/z3NnasKlplXT2f+4y/LZYuaKZW5KAaiVFL/fThhs+17EbUd53jUVJ0QudYCBGbN/psvaqg==}
- dev: true
-
/@selderee/plugin-htmlparser2@0.11.0:
resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==}
dependencies:
@@ -2553,6 +2648,72 @@ packages:
resolution: {integrity: sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==}
engines: {node: '>=18'}
+ /@stylistic/eslint-plugin-js@1.5.4(eslint@8.56.0):
+ resolution: {integrity: sha512-3ctWb3NvJNV1MsrZN91cYp2EGInLPSoZKphXIbIRx/zjZxKwLDr9z4LMOWtqjq14li/OgqUUcMq5pj8fgbLoTw==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: '>=8.40.0'
+ dependencies:
+ acorn: 8.11.3
+ escape-string-regexp: 4.0.0
+ eslint: 8.56.0
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ dev: true
+
+ /@stylistic/eslint-plugin-jsx@1.5.4(eslint@8.56.0):
+ resolution: {integrity: sha512-JUfrpCkeBCqt1IZ4QsP4WgxGza4PhK4LPbc0VnCjHKygl+rgqoDAovqOuzFJ49wJ4Ix3r6OIHFuwiBGswZEVvg==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: '>=8.40.0'
+ dependencies:
+ '@stylistic/eslint-plugin-js': 1.5.4(eslint@8.56.0)
+ eslint: 8.56.0
+ estraverse: 5.3.0
+ dev: true
+
+ /@stylistic/eslint-plugin-plus@1.5.4(eslint@8.56.0)(typescript@5.3.3):
+ resolution: {integrity: sha512-dI0Cs5vYX/0uMhQDY+NK0cKQ0Pe9B6jWYxd0Ndud+mNloDaVLrsmJocK4zn+YfhGEDs1E4Nk5uAPZEumIpDuSg==}
+ peerDependencies:
+ eslint: '*'
+ dependencies:
+ '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3)
+ eslint: 8.56.0
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
+
+ /@stylistic/eslint-plugin-ts@1.5.4(eslint@8.56.0)(typescript@5.3.3):
+ resolution: {integrity: sha512-NZDFVIlVNjuPvhT+0Cidm5IS3emtx338xbJTqs2xfOVRDGTpYwRHhNVEGa1rFOpYHmv0sAj6+OXbMDn7ul0K/g==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: '>=8.40.0'
+ dependencies:
+ '@stylistic/eslint-plugin-js': 1.5.4(eslint@8.56.0)
+ '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3)
+ eslint: 8.56.0
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
+
+ /@stylistic/eslint-plugin@1.5.4(eslint@8.56.0)(typescript@5.3.3):
+ resolution: {integrity: sha512-zWPXr+O67GC9KDAFkbL1U9UVqE6Iv69YMKhkIECCmE0GvClUJwdfsimm4XebEDondV7kfjMrTDZaYfrI5aS0Jg==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: '>=8.40.0'
+ dependencies:
+ '@stylistic/eslint-plugin-js': 1.5.4(eslint@8.56.0)
+ '@stylistic/eslint-plugin-jsx': 1.5.4(eslint@8.56.0)
+ '@stylistic/eslint-plugin-plus': 1.5.4(eslint@8.56.0)(typescript@5.3.3)
+ '@stylistic/eslint-plugin-ts': 1.5.4(eslint@8.56.0)(typescript@5.3.3)
+ eslint: 8.56.0
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
+
/@swc/helpers@0.4.14:
resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==}
dependencies:
@@ -2648,12 +2809,22 @@ packages:
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
dev: true
+ /@types/mdast@3.0.15:
+ resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==}
+ dependencies:
+ '@types/unist': 2.0.10
+ dev: true
+
/@types/node@20.11.10:
resolution: {integrity: sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg==}
dependencies:
undici-types: 5.26.5
dev: true
+ /@types/normalize-package-data@2.4.4:
+ resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
+ dev: true
+
/@types/pretty@2.0.3:
resolution: {integrity: sha512-xR96pShNlrxLd3gZqzCnbaAmbYhiRYjW51CDFjektZemqpBZBAAkMwxm4gBraJP/xSgKcsQhLXdlXOwDNWo4VQ==}
dev: true
@@ -2676,6 +2847,10 @@ packages:
resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
dev: false
+ /@types/unist@2.0.10:
+ resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==}
+ dev: true
+
/@types/web-bluetooth@0.0.20:
resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
dev: true
@@ -2738,6 +2913,14 @@ packages:
'@typescript-eslint/visitor-keys': 6.19.0
dev: true
+ /@typescript-eslint/scope-manager@6.20.0:
+ resolution: {integrity: sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ dependencies:
+ '@typescript-eslint/types': 6.20.0
+ '@typescript-eslint/visitor-keys': 6.20.0
+ dev: true
+
/@typescript-eslint/type-utils@6.19.0(eslint@8.56.0)(typescript@5.3.3):
resolution: {integrity: sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -2763,6 +2946,11 @@ packages:
engines: {node: ^16.0.0 || >=18.0.0}
dev: true
+ /@typescript-eslint/types@6.20.0:
+ resolution: {integrity: sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ dev: true
+
/@typescript-eslint/typescript-estree@6.19.0(typescript@5.3.3):
resolution: {integrity: sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -2785,6 +2973,28 @@ packages:
- supports-color
dev: true
+ /@typescript-eslint/typescript-estree@6.20.0(typescript@5.3.3):
+ resolution: {integrity: sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/types': 6.20.0
+ '@typescript-eslint/visitor-keys': 6.20.0
+ debug: 4.3.4
+ globby: 11.1.0
+ is-glob: 4.0.3
+ minimatch: 9.0.3
+ semver: 7.5.4
+ ts-api-utils: 1.0.3(typescript@5.3.3)
+ typescript: 5.3.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/@typescript-eslint/utils@6.19.0(eslint@8.56.0)(typescript@5.3.3):
resolution: {integrity: sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -2804,6 +3014,25 @@ packages:
- typescript
dev: true
+ /@typescript-eslint/utils@6.20.0(eslint@8.56.0)(typescript@5.3.3):
+ resolution: {integrity: sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
+ '@types/json-schema': 7.0.15
+ '@types/semver': 7.5.6
+ '@typescript-eslint/scope-manager': 6.20.0
+ '@typescript-eslint/types': 6.20.0
+ '@typescript-eslint/typescript-estree': 6.20.0(typescript@5.3.3)
+ eslint: 8.56.0
+ semver: 7.5.4
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
+
/@typescript-eslint/visitor-keys@6.19.0:
resolution: {integrity: sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -2812,6 +3041,14 @@ packages:
eslint-visitor-keys: 3.4.3
dev: true
+ /@typescript-eslint/visitor-keys@6.20.0:
+ resolution: {integrity: sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ dependencies:
+ '@typescript-eslint/types': 6.20.0
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
/@ungap/structured-clone@1.2.0:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
dev: true
@@ -2969,6 +3206,22 @@ packages:
pretty-format: 29.7.0
dev: true
+ /@volar/language-core@1.11.1:
+ resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==}
+ dependencies:
+ '@volar/source-map': 1.11.1
+
+ /@volar/source-map@1.11.1:
+ resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==}
+ dependencies:
+ muggle-string: 0.3.1
+
+ /@volar/typescript@1.11.1:
+ resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==}
+ dependencies:
+ '@volar/language-core': 1.11.1
+ path-browserify: 1.0.1
+
/@vue-email/cli@0.0.11(typescript@5.3.3)(vue@3.4.15):
resolution: {integrity: sha512-nPOiCwRYc0Z3BIsTJ1rnFNcQaJQ2iE1QB/GaHVMR0fxM72VB0qcQ/LsrMDgvewAgY1ZJkpGGVrwwIR7T6PEU/w==}
hasBin: true
@@ -3012,7 +3265,7 @@ packages:
kolorist: 1.8.0
scule: 1.2.0
vue: 3.4.15(typescript@5.3.3)
- vue-email: 0.8.7(typescript@5.3.3)(vue@3.4.15)
+ vue-email: 0.8.7(vue@3.4.15)
transitivePeerDependencies:
- bufferutil
- canvas
@@ -3141,6 +3394,25 @@ packages:
/@vue/devtools-api@6.5.1:
resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==}
+ /@vue/language-core@1.8.27(typescript@5.3.3):
+ resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@volar/language-core': 1.11.1
+ '@volar/source-map': 1.11.1
+ '@vue/compiler-dom': 3.4.15
+ '@vue/shared': 3.4.15
+ computeds: 0.0.1
+ minimatch: 9.0.3
+ muggle-string: 0.3.1
+ path-browserify: 1.0.1
+ typescript: 5.3.3
+ vue-template-compiler: 2.7.16
+
/@vue/reactivity@3.4.15:
resolution: {integrity: sha512-55yJh2bsff20K5O84MxSvXKPHHt17I2EomHznvFiJCAZpJTNW8IuLj1xZWMLELRhBK3kkFV/1ErZGHJfah7i7w==}
dependencies:
@@ -3423,6 +3695,11 @@ packages:
zip-stream: 5.0.1
dev: true
+ /are-docs-informative@0.0.2:
+ resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==}
+ engines: {node: '>=14'}
+ dev: true
+
/are-we-there-yet@2.0.0:
resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==}
engines: {node: '>=10'}
@@ -3747,6 +4024,18 @@ packages:
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
dev: true
+ /character-entities-legacy@1.1.4:
+ resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
+ dev: true
+
+ /character-entities@1.2.4:
+ resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==}
+ dev: true
+
+ /character-reference-invalid@1.1.4:
+ resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==}
+ dev: true
+
/check-error@1.0.3:
resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
dependencies:
@@ -3781,6 +4070,13 @@ packages:
dependencies:
consola: 3.2.3
+ /clean-regexp@1.0.0:
+ resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==}
+ engines: {node: '>=4'}
+ dependencies:
+ escape-string-regexp: 1.0.5
+ dev: true
+
/clean-stack@2.2.0:
resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
engines: {node: '>=6'}
@@ -3896,6 +4192,11 @@ packages:
engines: {node: '>= 12'}
dev: true
+ /comment-parser@1.4.1:
+ resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==}
+ engines: {node: '>= 12.0.0'}
+ dev: true
+
/commondir@1.0.1:
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
dev: true
@@ -3910,6 +4211,9 @@ packages:
readable-stream: 3.6.2
dev: true
+ /computeds@0.0.1:
+ resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==}
+
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: true
@@ -3965,6 +4269,12 @@ packages:
keygrip: 1.1.0
dev: true
+ /core-js-compat@3.35.1:
+ resolution: {integrity: sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==}
+ dependencies:
+ browserslist: 4.22.2
+ dev: true
+
/core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
dev: true
@@ -4131,6 +4441,9 @@ packages:
whatwg-url: 14.0.0
dev: false
+ /de-indent@1.0.2:
+ resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+
/debug@2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
@@ -4407,6 +4720,12 @@ packages:
resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
dev: true
+ /error-ex@1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+ dependencies:
+ is-arrayish: 0.2.1
+ dev: true
+
/error-stack-parser-es@0.1.1:
resolution: {integrity: sha512-g/9rfnvnagiNf+DRMHEVGuGuIBlCIMDFoTA616HaP2l9PlCjGjVhD98PNbVSJvmK4TttqT5mV5tInMhoFgi+aA==}
dev: true
@@ -4683,26 +5002,331 @@ packages:
'@esbuild/win32-x64': 0.20.0
dev: true
- /escalade@3.1.1:
- resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
- engines: {node: '>=6'}
-
- /escape-html@1.0.3:
- resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+ /escalade@3.1.1:
+ resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
+ engines: {node: '>=6'}
+
+ /escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+ dev: true
+
+ /escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+
+ /escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+ engines: {node: '>=12'}
+
+ /eslint-compat-utils@0.1.2(eslint@8.56.0):
+ resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ eslint: '>=6.0.0'
+ dependencies:
+ eslint: 8.56.0
+ dev: true
+
+ /eslint-compat-utils@0.4.1(eslint@8.56.0):
+ resolution: {integrity: sha512-5N7ZaJG5pZxUeNNJfUchurLVrunD1xJvyg5kYOIVF8kg1f3ajTikmAu/5fZ9w100omNPOoMjngRszh/Q/uFGMg==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ eslint: '>=6.0.0'
+ dependencies:
+ eslint: 8.56.0
+ semver: 7.5.4
+ dev: true
+
+ /eslint-config-flat-gitignore@0.1.2:
+ resolution: {integrity: sha512-PcBsqtd5QHEZH4ROvpnRN4EP0qcHh9voCCHgtyHxnJZHGspJREcZn7oPqRG/GfWt9m3C0fkC2l5CuBtMig2wXQ==}
+ dependencies:
+ parse-gitignore: 2.0.0
+ dev: true
+
+ /eslint-import-resolver-node@0.3.9:
+ resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
+ dependencies:
+ debug: 3.2.7
+ is-core-module: 2.13.1
+ resolve: 1.22.8
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-merge-processors@0.1.0(eslint@8.56.0):
+ resolution: {integrity: sha512-IvRXXtEajLeyssvW4wJcZ2etxkR9mUf4zpNwgI+m/Uac9RfXHskuJefkHUcawVzePnd6xp24enp5jfgdHzjRdQ==}
+ peerDependencies:
+ eslint: '*'
+ dependencies:
+ eslint: 8.56.0
+ dev: true
+
+ /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0):
+ resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: '*'
+ eslint-import-resolver-node: '*'
+ eslint-import-resolver-typescript: '*'
+ eslint-import-resolver-webpack: '*'
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ eslint:
+ optional: true
+ eslint-import-resolver-node:
+ optional: true
+ eslint-import-resolver-typescript:
+ optional: true
+ eslint-import-resolver-webpack:
+ optional: true
+ dependencies:
+ '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3)
+ debug: 3.2.7
+ eslint: 8.56.0
+ eslint-import-resolver-node: 0.3.9
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-plugin-antfu@2.1.2(eslint@8.56.0):
+ resolution: {integrity: sha512-s7ZTOM3uq0iqpp6gF0UEotnvup7f2PHBUftCytLZX0+6C9j9KadKZQh6bVVngAyFgsmeD9+gcBopOYLClb2oDg==}
+ peerDependencies:
+ eslint: '*'
+ dependencies:
+ eslint: 8.56.0
+ dev: true
+
+ /eslint-plugin-es-x@7.5.0(eslint@8.56.0):
+ resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '>=8'
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
+ '@eslint-community/regexpp': 4.10.0
+ eslint: 8.56.0
+ eslint-compat-utils: 0.1.2(eslint@8.56.0)
+ dev: true
+
+ /eslint-plugin-eslint-comments@3.2.0(eslint@8.56.0):
+ resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==}
+ engines: {node: '>=6.5.0'}
+ peerDependencies:
+ eslint: '>=4.19.1'
+ dependencies:
+ escape-string-regexp: 1.0.5
+ eslint: 8.56.0
+ ignore: 5.3.0
+ dev: true
+
+ /eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0):
+ resolution: {integrity: sha512-ORizX37MelIWLbMyqI7hi8VJMf7A0CskMmYkB+lkCX3aF4pkGV7kwx5bSEb4qx7Yce2rAf9s34HqDRPjGRZPNQ==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ eslint: ^7.2.0 || ^8
+ dependencies:
+ debug: 4.3.4
+ doctrine: 3.0.0
+ eslint: 8.56.0
+ eslint-import-resolver-node: 0.3.9
+ eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0)
+ get-tsconfig: 4.7.2
+ is-glob: 4.0.3
+ minimatch: 3.1.2
+ semver: 7.5.4
+ transitivePeerDependencies:
+ - '@typescript-eslint/parser'
+ - eslint-import-resolver-typescript
+ - eslint-import-resolver-webpack
+ - supports-color
+ dev: true
+
+ /eslint-plugin-jsdoc@48.0.4(eslint@8.56.0):
+ resolution: {integrity: sha512-A0cH+5svWPXzGZszBjXA1t0aAqVGS+/x3i02KFmb73rU0iMLnadEcVWcD/dGBZHIfAMKr3YpWh58f6wn4N909w==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
+ dependencies:
+ '@es-joy/jsdoccomment': 0.41.0
+ are-docs-informative: 0.0.2
+ comment-parser: 1.4.1
+ debug: 4.3.4
+ escape-string-regexp: 4.0.0
+ eslint: 8.56.0
+ esquery: 1.5.0
+ is-builtin-module: 3.2.1
+ semver: 7.5.4
+ spdx-expression-parse: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-plugin-jsonc@2.13.0(eslint@8.56.0):
+ resolution: {integrity: sha512-2wWdJfpO/UbZzPDABuUVvlUQjfMJa2p2iQfYt/oWxOMpXCcjuiMUSaA02gtY/Dbu82vpaSqc+O7Xq6ECHwtIxA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '>=6.0.0'
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
+ eslint: 8.56.0
+ eslint-compat-utils: 0.4.1(eslint@8.56.0)
+ espree: 9.6.1
+ graphemer: 1.4.0
+ jsonc-eslint-parser: 2.4.0
+ natural-compare: 1.4.0
+ synckit: 0.6.2
+ dev: true
+
+ /eslint-plugin-markdown@3.0.1(eslint@8.56.0):
+ resolution: {integrity: sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ eslint: 8.56.0
+ mdast-util-from-markdown: 0.8.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-plugin-n@16.6.2(eslint@8.56.0):
+ resolution: {integrity: sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ eslint: '>=7.0.0'
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
+ builtins: 5.0.1
+ eslint: 8.56.0
+ eslint-plugin-es-x: 7.5.0(eslint@8.56.0)
+ get-tsconfig: 4.7.2
+ globals: 13.24.0
+ ignore: 5.3.0
+ is-builtin-module: 3.2.1
+ is-core-module: 2.13.1
+ minimatch: 3.1.2
+ resolve: 1.22.8
+ semver: 7.5.4
+ dev: true
+
+ /eslint-plugin-no-only-tests@3.1.0:
+ resolution: {integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==}
+ engines: {node: '>=5.0.0'}
+ dev: true
+
+ /eslint-plugin-perfectionist@2.5.0(eslint@8.56.0)(typescript@5.3.3)(vue-eslint-parser@9.4.1):
+ resolution: {integrity: sha512-F6XXcq4mKKUe/SREoMGQqzgw6cgCgf3pFzkFfQVIGtqD1yXVpQjnhTepzhBeZfxZwgMzR9HO4yH4CUhIQ2WBcQ==}
+ peerDependencies:
+ astro-eslint-parser: ^0.16.0
+ eslint: '>=8.0.0'
+ svelte: '>=3.0.0'
+ svelte-eslint-parser: ^0.33.0
+ vue-eslint-parser: '>=9.0.0'
+ peerDependenciesMeta:
+ astro-eslint-parser:
+ optional: true
+ svelte:
+ optional: true
+ svelte-eslint-parser:
+ optional: true
+ vue-eslint-parser:
+ optional: true
+ dependencies:
+ '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3)
+ eslint: 8.56.0
+ minimatch: 9.0.3
+ natural-compare-lite: 1.4.0
+ vue-eslint-parser: 9.4.1(eslint@8.56.0)
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
+
+ /eslint-plugin-toml@0.9.2(eslint@8.56.0):
+ resolution: {integrity: sha512-ri0xf63PYf3pIq/WY9BIwrqxZmGTIwSkAO0bHddI0ajUwN4KGz6W8vOvdXFHOpRdRfzxlmXze/vfsY/aTEXESg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '>=6.0.0'
+ dependencies:
+ debug: 4.3.4
+ eslint: 8.56.0
+ eslint-compat-utils: 0.4.1(eslint@8.56.0)
+ lodash: 4.17.21
+ toml-eslint-parser: 0.9.3
+ transitivePeerDependencies:
+ - supports-color
dev: true
- /escape-string-regexp@1.0.5:
- resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
- engines: {node: '>=0.8.0'}
+ /eslint-plugin-unicorn@50.0.1(eslint@8.56.0):
+ resolution: {integrity: sha512-KxenCZxqSYW0GWHH18okDlOQcpezcitm5aOSz6EnobyJ6BIByiPDviQRjJIUAjG/tMN11958MxaQ+qCoU6lfDA==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ eslint: '>=8.56.0'
+ dependencies:
+ '@babel/helper-validator-identifier': 7.22.20
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
+ '@eslint/eslintrc': 2.1.4
+ ci-info: 4.0.0
+ clean-regexp: 1.0.0
+ core-js-compat: 3.35.1
+ eslint: 8.56.0
+ esquery: 1.5.0
+ indent-string: 4.0.0
+ is-builtin-module: 3.2.1
+ jsesc: 3.0.2
+ pluralize: 8.0.0
+ read-pkg-up: 7.0.1
+ regexp-tree: 0.1.27
+ regjsparser: 0.10.0
+ semver: 7.5.4
+ strip-indent: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
- /escape-string-regexp@4.0.0:
- resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
- engines: {node: '>=10'}
+ /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0):
+ resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ '@typescript-eslint/eslint-plugin': ^6.0.0
+ eslint: ^8.0.0
+ peerDependenciesMeta:
+ '@typescript-eslint/eslint-plugin':
+ optional: true
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
+ eslint: 8.56.0
+ eslint-rule-composer: 0.3.0
dev: true
- /escape-string-regexp@5.0.0:
- resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
- engines: {node: '>=12'}
+ /eslint-plugin-vitest@0.3.21(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0)(typescript@5.3.3)(vitest@1.2.2):
+ resolution: {integrity: sha512-oYwR1MrwaBw/OG6CKU+SJYleAc442w6CWL1RTQl5WLwy8X3sh0bgHIQk5iEtmTak3Q+XAvZglr0bIoDOjFdkcw==}
+ engines: {node: ^18.0.0 || >= 20.0.0}
+ peerDependencies:
+ '@typescript-eslint/eslint-plugin': '*'
+ eslint: '>=8.0.0'
+ vitest: '*'
+ peerDependenciesMeta:
+ '@typescript-eslint/eslint-plugin':
+ optional: true
+ vitest:
+ optional: true
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
+ '@typescript-eslint/utils': 6.20.0(eslint@8.56.0)(typescript@5.3.3)
+ eslint: 8.56.0
+ vitest: 1.2.2(@types/node@20.11.10)
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
/eslint-plugin-vue@9.20.1(eslint@8.56.0):
resolution: {integrity: sha512-GyCs8K3lkEvoyC1VV97GJhP1SvqsKCiWGHnbn0gVUYiUhaH2+nB+Dv1uekv1THFMPbBfYxukrzQdltw950k+LQ==}
@@ -4722,6 +5346,37 @@ packages:
- supports-color
dev: true
+ /eslint-plugin-yml@1.12.2(eslint@8.56.0):
+ resolution: {integrity: sha512-hvS9p08FhPT7i/ynwl7/Wt7ke7Rf4P2D6fT8lZlL43peZDTsHtH2A0SIFQ7Kt7+mJ6if6P+FX3iJhMkdnxQwpg==}
+ engines: {node: ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '>=6.0.0'
+ dependencies:
+ debug: 4.3.4
+ eslint: 8.56.0
+ eslint-compat-utils: 0.4.1(eslint@8.56.0)
+ lodash: 4.17.21
+ natural-compare: 1.4.0
+ yaml-eslint-parser: 1.2.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-processor-vue-blocks@0.1.1(@vue/compiler-sfc@3.4.15)(eslint@8.56.0):
+ resolution: {integrity: sha512-9+dU5lU881log570oBwpelaJmOfOzSniben7IWEDRYQPPWwlvaV7NhOtsTuUWDqpYT+dtKKWPsgz4OkOi+aZnA==}
+ peerDependencies:
+ '@vue/compiler-sfc': ^3.3.0
+ eslint: ^8.50.0
+ dependencies:
+ '@vue/compiler-sfc': 3.4.15
+ eslint: 8.56.0
+ dev: true
+
+ /eslint-rule-composer@0.3.0:
+ resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==}
+ engines: {node: '>=4.0.0'}
+ dev: true
+
/eslint-scope@7.2.2:
resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -4949,6 +5604,14 @@ packages:
dependencies:
to-regex-range: 5.0.1
+ /find-up@4.1.0:
+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+ engines: {node: '>=8'}
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+ dev: true
+
/find-up@5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
@@ -5119,6 +5782,12 @@ packages:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
+ /get-tsconfig@4.7.2:
+ resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==}
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+ dev: true
+
/giget@1.2.1:
resolution: {integrity: sha512-4VG22mopWtIeHwogGSy1FViXVo0YT+m6BrqZfz0JJFwbSsePsCdOzdLIIli5BtMp7Xe8f/o2OmBpQX2NBOC24g==}
hasBin: true
@@ -5332,9 +6001,17 @@ packages:
dependencies:
function-bind: 1.1.2
+ /he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
/hookable@5.5.3:
resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
+ /hosted-git-info@2.8.9:
+ resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
+ dev: true
+
/hosted-git-info@7.0.1:
resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==}
engines: {node: ^16.14.0 || >=18.0.0}
@@ -5567,6 +6244,21 @@ packages:
resolution: {integrity: sha512-anOK1Mktt8U1Xi7fCM3RELTuYbnFikQY5VtrDj7kPgpejV7d43tWKhzgioO0zpkazLEL/j/iayRqnJhrGfqUsg==}
dev: true
+ /is-alphabetical@1.0.4:
+ resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==}
+ dev: true
+
+ /is-alphanumerical@1.0.4:
+ resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==}
+ dependencies:
+ is-alphabetical: 1.0.4
+ is-decimal: 1.0.4
+ dev: true
+
+ /is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+ dev: true
+
/is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
@@ -5589,6 +6281,10 @@ packages:
dependencies:
hasown: 2.0.0
+ /is-decimal@1.0.4:
+ resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==}
+ dev: true
+
/is-docker@2.2.1:
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
engines: {node: '>=8'}
@@ -5627,6 +6323,10 @@ packages:
dependencies:
is-extglob: 2.1.1
+ /is-hexadecimal@1.0.4:
+ resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
+ dev: true
+
/is-inside-container@1.0.0:
resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
engines: {node: '>=14.16'}
@@ -5788,6 +6488,11 @@ packages:
argparse: 2.0.1
dev: true
+ /jsdoc-type-pratt-parser@4.0.0:
+ resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==}
+ engines: {node: '>=12.0.0'}
+ dev: true
+
/jsdom@24.0.0:
resolution: {integrity: sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==}
engines: {node: '>=18'}
@@ -5824,15 +6529,30 @@ packages:
- utf-8-validate
dev: false
+ /jsesc@0.5.0:
+ resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
+ hasBin: true
+ dev: true
+
/jsesc@2.5.2:
resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
engines: {node: '>=4'}
hasBin: true
+ /jsesc@3.0.2:
+ resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
+ engines: {node: '>=6'}
+ hasBin: true
+ dev: true
+
/json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
dev: true
+ /json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+ dev: true
+
/json-parse-even-better-errors@3.0.1:
resolution: {integrity: sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@@ -5851,6 +6571,16 @@ packages:
engines: {node: '>=6'}
hasBin: true
+ /jsonc-eslint-parser@2.4.0:
+ resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ acorn: 8.11.3
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ semver: 7.5.4
+ dev: true
+
/jsonc-parser@3.2.0:
resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
@@ -6039,6 +6769,13 @@ packages:
mlly: 1.5.0
pkg-types: 1.0.3
+ /locate-path@5.0.0:
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+ engines: {node: '>=8'}
+ dependencies:
+ p-locate: 4.1.0
+ dev: true
+
/locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
@@ -6182,6 +6919,22 @@ packages:
- supports-color
dev: true
+ /mdast-util-from-markdown@0.8.5:
+ resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==}
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-to-string: 2.0.0
+ micromark: 2.11.4
+ parse-entities: 2.0.0
+ unist-util-stringify-position: 2.0.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /mdast-util-to-string@2.0.0:
+ resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==}
+ dev: true
+
/mdn-data@2.0.28:
resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
dev: true
@@ -6207,6 +6960,15 @@ packages:
engines: {node: '>= 0.6'}
dev: true
+ /micromark@2.11.4:
+ resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==}
+ dependencies:
+ debug: 4.3.4
+ parse-entities: 2.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/micromatch@4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
engines: {node: '>=8.6'}
@@ -6245,6 +7007,11 @@ packages:
resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
engines: {node: '>=12'}
+ /min-indent@1.0.1:
+ resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
+ engines: {node: '>=4'}
+ dev: true
+
/mini-svg-data-uri@1.4.4:
resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==}
hasBin: true
@@ -6422,6 +7189,9 @@ packages:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
dev: true
+ /muggle-string@0.3.1:
+ resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==}
+
/mz@2.7.0:
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
dependencies:
@@ -6440,6 +7210,10 @@ packages:
hasBin: true
dev: true
+ /natural-compare-lite@1.4.0:
+ resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
+ dev: true
+
/natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
dev: true
@@ -6608,6 +7382,15 @@ packages:
abbrev: 2.0.0
dev: true
+ /normalize-package-data@2.5.0:
+ resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
+ dependencies:
+ hosted-git-info: 2.8.9
+ resolve: 1.22.8
+ semver: 5.7.2
+ validate-npm-package-license: 3.0.4
+ dev: true
+
/normalize-package-data@6.0.0:
resolution: {integrity: sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==}
engines: {node: ^16.14.0 || >=18.0.0}
@@ -7076,6 +7859,13 @@ packages:
type-check: 0.4.0
dev: true
+ /p-limit@2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
+ dependencies:
+ p-try: 2.2.0
+ dev: true
+
/p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
@@ -7090,6 +7880,13 @@ packages:
yocto-queue: 1.0.0
dev: true
+ /p-locate@4.1.0:
+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+ engines: {node: '>=8'}
+ dependencies:
+ p-limit: 2.3.0
+ dev: true
+
/p-locate@5.0.0:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
@@ -7104,6 +7901,11 @@ packages:
aggregate-error: 3.1.0
dev: true
+ /p-try@2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+ dev: true
+
/pacote@17.0.6:
resolution: {integrity: sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ==}
engines: {node: ^16.14.0 || >=18.0.0}
@@ -7150,6 +7952,17 @@ packages:
callsites: 3.1.0
dev: true
+ /parse-entities@2.0.0:
+ resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==}
+ dependencies:
+ character-entities: 1.2.4
+ character-entities-legacy: 1.1.4
+ character-reference-invalid: 1.1.4
+ is-alphanumerical: 1.0.4
+ is-decimal: 1.0.4
+ is-hexadecimal: 1.0.4
+ dev: true
+
/parse-git-config@3.0.0:
resolution: {integrity: sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA==}
engines: {node: '>=8'}
@@ -7158,6 +7971,21 @@ packages:
ini: 1.3.8
dev: true
+ /parse-gitignore@2.0.0:
+ resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==}
+ engines: {node: '>=14'}
+ dev: true
+
+ /parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+ dev: true
+
/parse-path@7.0.0:
resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==}
dependencies:
@@ -7188,6 +8016,9 @@ packages:
engines: {node: '>= 0.8'}
dev: true
+ /path-browserify@1.0.1:
+ resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+
/path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -7265,6 +8096,11 @@ packages:
mlly: 1.5.0
pathe: 1.1.2
+ /pluralize@8.0.0:
+ resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
+ engines: {node: '>=4'}
+ dev: true
+
/portfinder@1.0.32:
resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==}
engines: {node: '>= 0.12.0'}
@@ -7810,6 +8646,25 @@ packages:
npm-normalize-package-bin: 3.0.1
dev: true
+ /read-pkg-up@7.0.1:
+ resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
+ engines: {node: '>=8'}
+ dependencies:
+ find-up: 4.1.0
+ read-pkg: 5.2.0
+ type-fest: 0.8.1
+ dev: true
+
+ /read-pkg@5.2.0:
+ resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@types/normalize-package-data': 2.4.4
+ normalize-package-data: 2.5.0
+ parse-json: 5.2.0
+ type-fest: 0.6.0
+ dev: true
+
/readable-stream@2.3.8:
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
dependencies:
@@ -7859,6 +8714,18 @@ packages:
resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
dev: true
+ /regexp-tree@0.1.27:
+ resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==}
+ hasBin: true
+ dev: true
+
+ /regjsparser@0.10.0:
+ resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==}
+ hasBin: true
+ dependencies:
+ jsesc: 0.5.0
+ dev: true
+
/replace-in-file@6.3.5:
resolution: {integrity: sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg==}
engines: {node: '>=10'}
@@ -7896,6 +8763,10 @@ packages:
path-is-absolute: 1.0.1
dev: true
+ /resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+ dev: true
+
/resolve@1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true
@@ -8046,6 +8917,11 @@ packages:
parseley: 0.12.1
dev: true
+ /semver@5.7.2:
+ resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
+ hasBin: true
+ dev: true
+
/semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
@@ -8283,6 +9159,13 @@ packages:
spdx-license-ids: 3.0.16
dev: true
+ /spdx-expression-parse@4.0.0:
+ resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==}
+ dependencies:
+ spdx-exceptions: 2.3.0
+ spdx-license-ids: 3.0.16
+ dev: true
+
/spdx-license-ids@3.0.16:
resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==}
dev: true
@@ -8380,6 +9263,13 @@ packages:
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
engines: {node: '>=12'}
+ /strip-indent@3.0.0:
+ resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ min-indent: 1.0.1
+ dev: true
+
/strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
@@ -8464,6 +9354,13 @@ packages:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
dev: false
+ /synckit@0.6.2:
+ resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==}
+ engines: {node: '>=12.20'}
+ dependencies:
+ tslib: 2.6.2
+ dev: true
+
/system-architecture@0.1.0:
resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==}
engines: {node: '>=18'}
@@ -8617,6 +9514,13 @@ packages:
engines: {node: '>=0.6'}
dev: true
+ /toml-eslint-parser@0.9.3:
+ resolution: {integrity: sha512-moYoCvkNUAPCxSW9jmHmRElhm4tVJpHL8ItC/+uYD0EpPSFXbck7yREz9tNdJVTSpHVod8+HoipcpbQ0oE6gsw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
/totalist@3.0.1:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
engines: {node: '>=6'}
@@ -8696,6 +9600,16 @@ packages:
engines: {node: '>=10'}
dev: true
+ /type-fest@0.6.0:
+ resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /type-fest@0.8.1:
+ resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
+ engines: {node: '>=8'}
+ dev: true
+
/type-fest@3.13.1:
resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==}
engines: {node: '>=14.16'}
@@ -8877,6 +9791,12 @@ packages:
imurmurhash: 0.1.4
dev: true
+ /unist-util-stringify-position@2.0.3:
+ resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==}
+ dependencies:
+ '@types/unist': 2.0.10
+ dev: true
+
/universalify@0.2.0:
resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
engines: {node: '>= 4.0.0'}
@@ -9448,6 +10368,23 @@ packages:
ufo: 1.3.2
dev: true
+ /vue-component-meta@1.8.27(typescript@5.3.3):
+ resolution: {integrity: sha512-j3WJsyQHP4TDlvnjHc/eseo0/eVkf0FaCpkqGwez5zD+Tj31onBzWZEXTnWKs8xRj0n3dMNYdy3SpiS6NubSvg==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@volar/typescript': 1.11.1
+ '@vue/language-core': 1.8.27(typescript@5.3.3)
+ path-browserify: 1.0.1
+ typescript: 5.3.3
+ vue-component-type-helpers: 1.8.27
+
+ /vue-component-type-helpers@1.8.27:
+ resolution: {integrity: sha512-0vOfAtI67UjeO1G6UiX5Kd76CqaQ67wrRZiOe7UAb9Jm6GzlUr/fC7CV90XfwapJRjpCMaZFhv1V0ajWRmE9Dg==}
+
/vue-demi@0.14.6(vue@3.4.15):
resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==}
engines: {node: '>=12'}
@@ -9489,7 +10426,7 @@ packages:
- utf-8-validate
dev: false
- /vue-email@0.8.7(typescript@5.3.3)(vue@3.4.15):
+ /vue-email@0.8.7(vue@3.4.15):
resolution: {integrity: sha512-VxJHqXpVnFIezZ4Oj+vhtjBNBQZtqbKud+WicLQLSIqdtcV9hnM6f3+BQIXW2AijglVCTtUel/Z2Tn1m7/teRA==}
hasBin: true
peerDependencies:
@@ -9507,7 +10444,6 @@ packages:
- canvas
- supports-color
- ts-node
- - typescript
- utf-8-validate
dev: false
@@ -9550,6 +10486,12 @@ packages:
vue: 3.4.15(typescript@5.3.3)
dev: true
+ /vue-template-compiler@2.7.16:
+ resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==}
+ dependencies:
+ de-indent: 1.0.2
+ he: 1.2.0
+
/vue@2.7.16:
resolution: {integrity: sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==}
deprecated: Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.
@@ -9718,6 +10660,15 @@ packages:
/yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+ /yaml-eslint-parser@1.2.2:
+ resolution: {integrity: sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==}
+ engines: {node: ^14.17.0 || >=16.0.0}
+ dependencies:
+ eslint-visitor-keys: 3.4.3
+ lodash: 4.17.21
+ yaml: 2.3.4
+ dev: true
+
/yaml@2.3.4:
resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
engines: {node: '>= 14'}
diff --git a/src/module.ts b/src/module.ts
index 2516b28..7c3392f 100644
--- a/src/module.ts
+++ b/src/module.ts
@@ -1,5 +1,5 @@
-import { join } from "node:path";
-import { existsSync } from "node:fs";
+import { join } from 'node:path'
+import { existsSync } from 'node:fs'
import {
addComponent,
addComponentsDir,
@@ -9,58 +9,57 @@ import {
createResolver,
defineNuxtModule,
hasNuxtModule,
-} from "@nuxt/kit";
-import { defu } from "defu";
-import sirv from "sirv";
-import type { I18n, VueEmailPluginOptions } from "vue-email";
+} from '@nuxt/kit'
+import { defu } from 'defu'
+import sirv from 'sirv'
+import type { I18n, VueEmailPluginOptions } from 'vue-email'
const components = [
- "EBody",
- "EButton",
- "ECodeBlock",
- "ECodeInline",
- "EColumn",
- "EContainer",
- "EFont",
- "EHead",
- "EStyle",
- "EHeading",
- "EHr",
- "EHtml",
- "EImg",
- "ELink",
- "EPreview",
- "ERow",
- "ESection",
- "EText",
- "ETailwind",
- "EMarkdown",
-];
-const PATH = "/__vue_email__";
-const PATH_PLAYGROUND = `${PATH}/client`;
+ 'EBody',
+ 'EButton',
+ 'ECodeBlock',
+ 'ECodeInline',
+ 'EColumn',
+ 'EContainer',
+ 'EFont',
+ 'EHead',
+ 'EStyle',
+ 'EHeading',
+ 'EHr',
+ 'EHtml',
+ 'EImg',
+ 'ELink',
+ 'EPreview',
+ 'ERow',
+ 'ESection',
+ 'EText',
+ 'ETailwind',
+ 'EMarkdown',
+]
+const PATH = '/__vue_email__'
+const PATH_PLAYGROUND = `${PATH}/client`
// Module options TypeScript interface definition
export interface ModuleOptions {
- baseUrl?: string | null;
- i18n?: I18n;
- playground?: boolean;
- autoImport?: boolean;
- useNuxtTailwind?: boolean;
- tailwind?: VueEmailPluginOptions["tailwind"];
+ baseUrl?: string | null
+ i18n?: I18n
+ playground?: boolean
+ autoImport?: boolean
+ useNuxtTailwind?: boolean
+ tailwind?: VueEmailPluginOptions['tailwind']
}
export default defineNuxtModule({
meta: {
- name: "vue-email",
- configKey: "vueEmail",
+ name: 'vue-email',
+ configKey: 'vueEmail',
compatibility: {
- nuxt: "^3.0.0",
+ nuxt: '^3.0.0',
bridge: false,
},
},
- // Default configuration options of the Nuxt module
defaults(nuxt) {
- const isDev = process.env.NODE_ENV === "development" || nuxt.options.dev;
+ const isDev = process.env.NODE_ENV === 'development' || nuxt.options.dev
return {
baseUrl: null,
@@ -68,142 +67,137 @@ export default defineNuxtModule({
autoImport: false,
useNuxtTailwind: true,
tailwind: undefined,
- };
+ }
},
async setup(options, nuxt) {
- const { resolve } = createResolver(import.meta.url);
- const playgroundDir = resolve("../dist/client");
+ const { resolve } = createResolver(import.meta.url)
+ const playgroundDir = resolve('../dist/client')
nuxt.options.runtimeConfig.public.vueEmail = defu(
nuxt.options.runtimeConfig.public.vueEmail,
- options
- );
+ options,
+ )
- let tempaltesDir = "/emails";
+ let tempaltesDir = '/emails'
for (const layer of nuxt.options._layers) {
- const templatePath = join(layer.cwd, "/emails");
- const pathFound = existsSync(templatePath);
+ const templatePath = join(layer.cwd, '/emails')
+ const pathFound = existsSync(templatePath)
- if (!pathFound) continue;
- tempaltesDir = templatePath;
- break;
+ if (!pathFound)
+ continue
+ tempaltesDir = templatePath
+ break
}
- if (hasNuxtModule("@nuxtjs/tailwindcss") && options.useNuxtTailwind) {
- // @ts-ignore
- nuxt.hook("tailwindcss:resolvedConfig", function (resolvedConfig) {
- options.tailwind = resolvedConfig;
+ if (hasNuxtModule('@nuxtjs/tailwindcss') && options.useNuxtTailwind) {
+ // @ts-expect-error runtime type
+ nuxt.hook('tailwindcss:resolvedConfig', (resolvedConfig) => {
+ options.tailwind = resolvedConfig
nuxt.options.runtimeConfig.public.vueEmail = defu(
nuxt.options.runtimeConfig.public.vueEmail,
- options
- );
- });
+ options,
+ )
+ })
}
- nuxt.options.nitro.alias = nuxt.options.nitro.alias || {};
+ nuxt.options.nitro.alias = nuxt.options.nitro.alias || {}
nuxt.options.nitro.externals = defu(
- typeof nuxt.options.nitro.externals === "object"
+ typeof nuxt.options.nitro.externals === 'object'
? nuxt.options.nitro.externals
: {},
{
- inline: [resolve("./runtime")],
- }
- );
+ inline: [resolve('./runtime')],
+ },
+ )
nuxt.options.nitro.alias = defu(nuxt.options.nitro.alias, {
- "#vue-email": resolve("./runtime/server/nitro"),
- });
+ '#vue-email': resolve('./runtime/server/nitro'),
+ })
- nuxt.options.nitro.serverAssets = nuxt.options.nitro.serverAssets || [];
+ nuxt.options.nitro.serverAssets = nuxt.options.nitro.serverAssets || []
nuxt.options.nitro.serverAssets.push({
- baseName: "emails",
+ baseName: 'emails',
dir: tempaltesDir,
- });
-
- // Setup playground. Only available in development
+ })
if (options.playground) {
addServerHandler({
- handler: resolve("./runtime/server/api/emails.get"),
- route: "/api/emails",
- method: "get",
+ handler: resolve('./runtime/server/api/emails.get'),
+ route: '/api/emails',
+ method: 'get',
lazy: true,
- });
+ })
addServerHandler({
- handler: resolve("./runtime/server/api/render/[file].get"),
- route: "/api/render/:file",
- method: "get",
+ handler: resolve('./runtime/server/api/render/[file].get'),
+ route: '/api/render/:file',
+ method: 'get',
lazy: true,
- });
+ })
- nuxt.hook("vite:serverCreated", async (server) => {
+ nuxt.hook('vite:serverCreated', async (server) => {
server.middlewares.use(
PATH_PLAYGROUND,
- sirv(playgroundDir, { single: true, dev: true })
- );
- });
+ sirv(playgroundDir, { single: true, dev: true }),
+ )
+ })
- // eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error
- // @ts-ignore runtime type
- nuxt.hook("devtools:customTabs", (iframeTabs) => {
+ nuxt.hook('devtools:customTabs', (iframeTabs) => {
iframeTabs.push({
- name: "vueemail",
- title: "Vue Email",
- icon: "twemoji:incoming-envelope",
+ name: 'vueemail',
+ title: 'Vue Email',
+ icon: 'twemoji:incoming-envelope',
view: {
- type: "iframe",
+ type: 'iframe',
src: PATH_PLAYGROUND,
},
- });
- });
+ })
+ })
}
addTemplate({
- filename: "types/vue-email.d.ts",
+ filename: 'types/vue-email.d.ts',
getContents: () =>
[
- "declare module '#vue-email' {",
+ 'declare module \'#vue-email\' {',
` const useCompiler: typeof import('${resolve(
- "./runtime/server/nitro"
+ './runtime/server/nitro',
)}').useCompiler`,
- "}",
- ].join("\n"),
- });
+ '}',
+ ].join('\n'),
+ })
- nuxt.hook("prepare:types", (options) => {
+ nuxt.hook('prepare:types', (options) => {
options.references.push({
- path: resolve(nuxt.options.buildDir, "types/vue-email.d.ts"),
- });
- });
-
- // addPlugin(resolve('./runtime/plugins/vue-email'))
+ path: resolve(nuxt.options.buildDir, 'types/vue-email.d.ts'),
+ })
+ })
if (options.autoImport) {
components.forEach((component) => {
addComponent({
name: component,
export: component,
- filePath: "vue-email",
- });
- });
-
- await addComponentsDir({
- // TODO: add options to add a custom path and indicate if is absolute or relative
- // for example (absolute o relative):
- // path: options?.absolutePath ? resolve('emails') : tempaltesDir ,
- //
- // custom:
- // path: options?.emailsDir || tempaltesDir,
- path: tempaltesDir,
- extensions: ["vue"],
- global: true,
- });
+ filePath: 'vue-email',
+ })
+ })
addImportsSources({
- from: "vue-email",
- imports: ["useRender"],
- });
+ from: 'vue-email',
+ imports: ['useRender'],
+ })
}
+
+ await addComponentsDir({
+ // TODO: add options to add a custom path and indicate if is absolute or relative
+ // for example (absolute o relative):
+ // path: options?.absolutePath ? resolve('emails') : tempaltesDir ,
+ //
+ // custom:
+ // path: options?.emailsDir || tempaltesDir,
+ path: tempaltesDir,
+ extensions: ['vue'],
+ global: true,
+ })
},
-});
+})
diff --git a/src/runtime/server/api/emails.get.ts b/src/runtime/server/api/emails.get.ts
index ce761b4..fd39e66 100644
--- a/src/runtime/server/api/emails.get.ts
+++ b/src/runtime/server/api/emails.get.ts
@@ -32,7 +32,8 @@ export default defineEventHandler(async () => {
}
return emails
- } catch (error) {
+ }
+ catch (error) {
throw createError({
statusCode: 500,
statusMessage: 'Internal Server Error',
diff --git a/src/runtime/server/api/render/[file].get.ts b/src/runtime/server/api/render/[file].get.ts
index 5d49e26..796661b 100644
--- a/src/runtime/server/api/render/[file].get.ts
+++ b/src/runtime/server/api/render/[file].get.ts
@@ -16,7 +16,8 @@ export default defineEventHandler(async (event: any) => {
}
return template
- } catch (error) {
+ }
+ catch (error) {
console.error(error)
throw createError({
diff --git a/src/runtime/server/nitro/useCompiler.ts b/src/runtime/server/nitro/useCompiler.ts
index 2300637..49a3703 100644
--- a/src/runtime/server/nitro/useCompiler.ts
+++ b/src/runtime/server/nitro/useCompiler.ts
@@ -1,51 +1,35 @@
-import type { RenderOptions } from "@vue-email/compiler";
-import { templateRender } from "@vue-email/compiler";
-import type { ModuleOptions } from "../../../module";
-import { useRuntimeConfig, useStorage } from "#imports";
+import type { RenderOptions } from '@vue-email/compiler'
+import { templateRender } from '@vue-email/compiler'
+import type { ModuleOptions } from '../../../module'
+import { useRuntimeConfig, useStorage } from '#imports'
-const storageKey = "assets:emails";
+const storageKey = 'assets:emails'
-/**
- * Compile a email template
- * @param {string} filename
- * @param {object} options
- * @returns {string}
- *
- * @example
- * ```ts
- * useCompiler('template.vue', {
- * props: {
- * name: 'foo',
- * },
- * locale: 'en',
- * translations: {},
- * })
- * ```
- */
export async function useCompiler(
filename: string,
data?: RenderOptions,
- verbose = false
+ verbose = false,
) {
- const vueEmailOptions = useRuntimeConfig().public.vueEmail as ModuleOptions;
- const source = await useStorage(storageKey).getItem(filename);
- const keys = await useStorage(storageKey).getKeys();
+ const vueEmailOptions = useRuntimeConfig().public.vueEmail as ModuleOptions
+ const source = await useStorage(storageKey).getItem(filename)
+ const keys = await useStorage(storageKey).getKeys()
const components: {
- name: string;
- source: string;
- }[] = [];
+ name: string
+ source: string
+ }[] = []
for (const key of keys) {
- const value = await useStorage(storageKey).getItem(key);
+ const value = await useStorage(storageKey).getItem(key)
- if (value && key.endsWith(".vue")) {
+ if (value && key.endsWith('.vue')) {
components.push({
name: key,
source: value as string,
- });
+ })
}
}
- if (!source) throw new Error(`Template ${filename} not found`);
+ if (!source)
+ throw new Error(`Template ${filename} not found`)
const template = await templateRender(
filename,
@@ -58,8 +42,8 @@ export async function useCompiler(
i18n: vueEmailOptions?.i18n,
tailwind: vueEmailOptions?.tailwind,
},
- }
- );
+ },
+ )
- return template;
+ return template
}
diff --git a/tsconfig.json b/tsconfig.json
index 3ffb9a6..d6ce489 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,8 +1,8 @@
{
"extends": "./.nuxt/tsconfig.json",
- "exclude": ["client", "dist"],
"compilerOptions": {
- "noImplicitAny": false,
- "strictNullChecks": false
- }
+ "strictNullChecks": false,
+ "noImplicitAny": false
+ },
+ "exclude": ["client", "dist"]
}