@wpnuxt/blocks 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/README.md +84 -0
  2. package/dist/module.cjs +5 -0
  3. package/dist/module.d.mts +7 -0
  4. package/dist/module.d.ts +7 -0
  5. package/dist/module.json +9 -0
  6. package/dist/module.mjs +75 -0
  7. package/dist/runtime/components/BlockComponent.vue +39 -0
  8. package/dist/runtime/components/BlockRenderer.vue +18 -0
  9. package/dist/runtime/components/blocks/CoreButton.vue +14 -0
  10. package/dist/runtime/components/blocks/CoreButtons.vue +23 -0
  11. package/dist/runtime/components/blocks/CoreGallery.vue +39 -0
  12. package/dist/runtime/components/blocks/CoreImage.vue +25 -0
  13. package/dist/runtime/components/blocks/CoreParagraph.vue +13 -0
  14. package/dist/runtime/components/blocks/CoreQuote.vue +20 -0
  15. package/dist/runtime/components/blocks/EditorBlock.vue +11 -0
  16. package/dist/runtime/queries/fragments/CoreButton.fragment.gql +26 -0
  17. package/dist/runtime/queries/fragments/CoreGallery.fragment.gql +31 -0
  18. package/dist/runtime/queries/fragments/CoreImage.fragment.gql +29 -0
  19. package/dist/runtime/queries/fragments/CoreParagraph.fragment.gql +20 -0
  20. package/dist/runtime/queries/fragments/CoreQuote.fragment.gql +18 -0
  21. package/dist/runtime/queries/fragments/EditorBlock.fragment.gql +21 -0
  22. package/dist/runtime/queries/fragments/EditorBlocks.fragment.gql +10 -0
  23. package/dist/runtime/queries/fragments/Page.fragment.gql +17 -0
  24. package/dist/runtime/queries/fragments/Post.fragment.gql +13 -0
  25. package/dist/runtime/server/tsconfig.json +3 -0
  26. package/dist/types.d.mts +1 -0
  27. package/dist/types.d.ts +1 -0
  28. package/package.json +59 -0
package/README.md ADDED
@@ -0,0 +1,84 @@
1
+ <!--
2
+ Get your module up and running quickly.
3
+
4
+ Find and replace all on all files (CMD+SHIFT+F):
5
+ - Name: My Module
6
+ - Package name: my-module
7
+ - Description: My new Nuxt module
8
+ -->
9
+
10
+ # My Module
11
+
12
+ [![npm version][npm-version-src]][npm-version-href]
13
+ [![npm downloads][npm-downloads-src]][npm-downloads-href]
14
+ [![License][license-src]][license-href]
15
+ [![Nuxt][nuxt-src]][nuxt-href]
16
+
17
+ My new Nuxt module for doing amazing things.
18
+
19
+ - [✨ &nbsp;Release Notes](/CHANGELOG.md)
20
+ <!-- - [🏀 Online playground](https://stackblitz.com/github/your-org/my-module?file=playground%2Fapp.vue) -->
21
+ <!-- - [📖 &nbsp;Documentation](https://example.com) -->
22
+
23
+ ## Features
24
+
25
+ <!-- Highlight some of the features your module provide here -->
26
+ - ⛰ &nbsp;Foo
27
+ - 🚠 &nbsp;Bar
28
+ - 🌲 &nbsp;Baz
29
+
30
+ ## Quick Setup
31
+
32
+ Install the module to your Nuxt application with one command:
33
+
34
+ ```bash
35
+ npx nuxi module add my-module
36
+ ```
37
+
38
+ That's it! You can now use My Module in your Nuxt app ✨
39
+
40
+
41
+ ## Contribution
42
+
43
+ <details>
44
+ <summary>Local development</summary>
45
+
46
+ ```bash
47
+ # Install dependencies
48
+ npm install
49
+
50
+ # Generate type stubs
51
+ npm run dev:prepare
52
+
53
+ # Develop with the playground
54
+ npm run dev
55
+
56
+ # Build the playground
57
+ npm run dev:build
58
+
59
+ # Run ESLint
60
+ npm run lint
61
+
62
+ # Run Vitest
63
+ npm run test
64
+ npm run test:watch
65
+
66
+ # Release new version
67
+ npm run release
68
+ ```
69
+
70
+ </details>
71
+
72
+
73
+ <!-- Badges -->
74
+ [npm-version-src]: https://img.shields.io/npm/v/my-module/latest.svg?style=flat&colorA=020420&colorB=00DC82
75
+ [npm-version-href]: https://npmjs.com/package/my-module
76
+
77
+ [npm-downloads-src]: https://img.shields.io/npm/dm/my-module.svg?style=flat&colorA=020420&colorB=00DC82
78
+ [npm-downloads-href]: https://npmjs.com/package/my-module
79
+
80
+ [license-src]: https://img.shields.io/npm/l/my-module.svg?style=flat&colorA=020420&colorB=00DC82
81
+ [license-href]: https://npmjs.com/package/my-module
82
+
83
+ [nuxt-src]: https://img.shields.io/badge/Nuxt-020420?logo=nuxt.js
84
+ [nuxt-href]: https://nuxt.com
@@ -0,0 +1,5 @@
1
+ module.exports = function(...args) {
2
+ return import('./module.mjs').then(m => m.default.call(this, ...args))
3
+ }
4
+ const _meta = module.exports.meta = require('./module.json')
5
+ module.exports.getMeta = () => Promise.resolve(_meta)
@@ -0,0 +1,7 @@
1
+ import * as _nuxt_schema from '@nuxt/schema';
2
+
3
+ interface ModuleOptions {
4
+ }
5
+ declare const _default: _nuxt_schema.NuxtModule<ModuleOptions>;
6
+
7
+ export { type ModuleOptions, _default as default };
@@ -0,0 +1,7 @@
1
+ import * as _nuxt_schema from '@nuxt/schema';
2
+
3
+ interface ModuleOptions {
4
+ }
5
+ declare const _default: _nuxt_schema.NuxtModule<ModuleOptions>;
6
+
7
+ export { type ModuleOptions, _default as default };
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "@wpnuxt/blocks",
3
+ "version": "0.0.2",
4
+ "configKey": "wpNuxtBlocks",
5
+ "builder": {
6
+ "@nuxt/module-builder": "0.8.1",
7
+ "unbuild": "2.0.0"
8
+ }
9
+ }
@@ -0,0 +1,75 @@
1
+ import fs from 'node:fs';
2
+ import { defineNuxtModule, createResolver, addComponentsDir, addComponent, addTemplate } from '@nuxt/kit';
3
+ import { genDynamicImport } from 'knitwork';
4
+
5
+ const name = "@wpnuxt/blocks";
6
+ const version = "0.0.2";
7
+
8
+ const module = defineNuxtModule({
9
+ meta: {
10
+ name,
11
+ version,
12
+ configKey: "wpNuxtBlocks"
13
+ },
14
+ // Default configuration options of the Nuxt module
15
+ defaults: {},
16
+ async setup(_options, nuxt) {
17
+ const { resolve } = createResolver(import.meta.url);
18
+ const resolveRuntimeModule = (path) => resolve("./runtime", path);
19
+ console.log("!!! Setup @wpnuxt/blocks module");
20
+ nuxt.options.alias["#wpnuxt/blocks"] = resolve(nuxt.options.buildDir, "wpnuxt/blocks");
21
+ addComponentsDir({
22
+ path: resolveRuntimeModule("./components/blocks"),
23
+ pathPrefix: false,
24
+ prefix: "",
25
+ global: true
26
+ });
27
+ const _layers = [...nuxt.options._layers].reverse();
28
+ for (const layer of _layers) {
29
+ const srcDir = layer.config.srcDir;
30
+ const blockComponents = resolve(srcDir, "components/blocks");
31
+ const dirStat = await fs.promises.stat(blockComponents).catch(() => null);
32
+ if (dirStat && dirStat.isDirectory()) {
33
+ nuxt.hook("components:dirs", (dirs) => {
34
+ dirs.unshift({
35
+ path: blockComponents,
36
+ global: true,
37
+ pathPrefix: false,
38
+ prefix: ""
39
+ });
40
+ });
41
+ }
42
+ }
43
+ addComponent({ name: "BlockComponent", filePath: resolveRuntimeModule("./components/BlockComponent") });
44
+ addComponent({ name: "BlockInfo", filePath: resolveRuntimeModule("./components/BlockInfo") });
45
+ addComponent({ name: "BlockRenderer", filePath: resolveRuntimeModule("./components/BlockRenderer") });
46
+ const componentsContext = { components: [] };
47
+ nuxt.hook("components:extend", (newComponents) => {
48
+ const moduleBlocksDir = resolveRuntimeModule("./components/blocks");
49
+ const userBlocksDir = (nuxt.options.srcDir || nuxt.options.rootDir) + "/components/blocks";
50
+ componentsContext.components = newComponents.filter((c) => {
51
+ if (c.filePath.startsWith(moduleBlocksDir) || c.filePath.startsWith(userBlocksDir)) {
52
+ return true;
53
+ }
54
+ return false;
55
+ });
56
+ });
57
+ addTemplate({
58
+ write: true,
59
+ filename: "wpnuxt/blocks.mjs",
60
+ getContents({ options }) {
61
+ const components = options.getComponents().filter((c) => !c.island).flatMap((c) => {
62
+ const exp = c.export === "default" ? "c.default || c" : `c['${c.export}']`;
63
+ const isClient = c.mode === "client";
64
+ const definitions = [];
65
+ definitions.push(`export const ${c.pascalName} = ${genDynamicImport(c.filePath)}.then(c => ${isClient ? `createClientOnly(${exp})` : exp})`);
66
+ return definitions;
67
+ });
68
+ return components.join("\n");
69
+ },
70
+ options: { getComponents: () => componentsContext.components }
71
+ });
72
+ }
73
+ });
74
+
75
+ export { module as default };
@@ -0,0 +1,39 @@
1
+ <script setup lang="ts">
2
+ import { pascalCase } from 'scule'
3
+ import { resolveComponent, useRuntimeConfig } from '#imports'
4
+ import type { EditorBlock } from '#wpnuxt/blocks'
5
+
6
+ const manifest = await import('#wpnuxt/blocks').catch(() => ({}))
7
+
8
+ const config = useRuntimeConfig()
9
+
10
+ const props = defineProps<{
11
+ block: EditorBlock
12
+ }>()
13
+ const findComponentToRender = async () => {
14
+ // only process top level blocks
15
+ if (props.block.parentClientId === null || props.block.parentClientId === undefined) {
16
+ if (config.public.wpNuxt.blocks && props.block.name) {
17
+ const componentName = pascalCase(props.block.name)
18
+ const componentImporter = manifest[componentName]
19
+ if (typeof componentImporter === 'function') {
20
+ return await componentImporter()
21
+ }
22
+ }
23
+ return resolveComponent('EditorBlock')
24
+ } else {
25
+ return undefined
26
+ }
27
+ }
28
+ const componentToRender = await findComponentToRender()
29
+ </script>
30
+
31
+ <template>
32
+ <div>
33
+ <component
34
+ :is="componentToRender"
35
+ v-if="componentToRender"
36
+ :block="block"
37
+ />
38
+ </div>
39
+ </template>
@@ -0,0 +1,18 @@
1
+ <script setup lang="ts">
2
+ import BlockComponent from './BlockComponent.vue'
3
+ import type { EditorBlock } from '#wpnuxt/blocks'
4
+
5
+ defineProps<{
6
+ blocks: EditorBlock[]
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <div>
12
+ <BlockComponent
13
+ v-for="block, index in blocks"
14
+ :key="index"
15
+ :block="block"
16
+ />
17
+ </div>
18
+ </template>
@@ -0,0 +1,14 @@
1
+ <script setup lang="ts">
2
+ import type { CoreButton } from '#wpnuxt/blocks'
3
+
4
+ defineProps<{
5
+ block: CoreButton
6
+ }>()
7
+ </script>
8
+
9
+ <template>
10
+ <UButton
11
+ :label="block.attributes.text"
12
+ :to="block.attributes.url"
13
+ />
14
+ </template>
@@ -0,0 +1,23 @@
1
+ <script setup lang="ts">
2
+ import type { CoreButtons, EditorBlock } from '#wpnuxt/blocks'
3
+
4
+ defineProps<{
5
+ block: CoreButtons
6
+ }>()
7
+ </script>
8
+
9
+ <template>
10
+ <div
11
+ v-for="innerBlock, index in block.innerBlocks"
12
+ :key="index"
13
+ >
14
+ <CoreButton
15
+ v-if="innerBlock.name === 'core/button'"
16
+ :block="innerBlock"
17
+ />
18
+ <EditorBlock
19
+ v-else
20
+ :block="innerBlock"
21
+ />
22
+ </div>
23
+ </template>
@@ -0,0 +1,39 @@
1
+ <script setup lang="ts">
2
+ import type { CoreGallery, CoreImage } from '#wpnuxt/blocks'
3
+
4
+ const props = defineProps<{
5
+ block: CoreGallery
6
+ }>()
7
+ const imageBlocks: CoreImage[] = []
8
+ props.block?.innerBlocks?.forEach((innerBlock) => {
9
+ if (innerBlock && innerBlock.name === 'core/image') {
10
+ const imgBlock = innerBlock as CoreImage
11
+ imageBlocks.push(imgBlock)
12
+ }
13
+ })
14
+ </script>
15
+
16
+ <template>
17
+ <div class="columns-2 md:columns-3 lg:columns-4 mx-[-8px] mb-20">
18
+ <div
19
+ v-for="(imgBlock, index) in imageBlocks"
20
+ :key="index"
21
+ class="px-0 md:px-1"
22
+ >
23
+ <div
24
+ v-if="imgBlock"
25
+ class="galleryImgWrapper rounded-lg overflow-hidden relative mb-4 md:mb-6 shadow-md hover:shadow-xl"
26
+ >
27
+ <CoreImage
28
+ :block="imgBlock"
29
+ class="rounded-lg cursor-pointer w-full"
30
+ width="300"
31
+ />
32
+ </div>
33
+ </div>
34
+ </div>
35
+ </template>
36
+
37
+ <style>
38
+ .galleryImgWrapper{overflow:hidden;position:relative}.galleryImgWrapper img{height:auto;margin:0;max-width:100%;transition:all .5s}.galleryImgWrapper:hover img{transform:scale(1.02)}
39
+ </style>
@@ -0,0 +1,25 @@
1
+ <script setup lang="ts">
2
+ import { getRelativeImagePath } from '../../util/images'
3
+ import type { CoreImage } from '#graphql-operations'
4
+
5
+ const props = defineProps<{
6
+ block: CoreImage
7
+ }>()
8
+ const imgUrl = getRelativeImagePath(props.block?.attributes?.url)
9
+ </script>
10
+
11
+ <template>
12
+ <div>
13
+ <NuxtImg
14
+ v-if="imgUrl"
15
+ :src="imgUrl"
16
+ :alt="block?.attributes?.alt"
17
+ :width="block?.attributes?.width"
18
+ :height="block?.attributes?.height"
19
+ />
20
+ <div
21
+ v-else
22
+ v-sanitize="block?.renderedHtml"
23
+ />
24
+ </div>
25
+ </template>
@@ -0,0 +1,13 @@
1
+ <script setup lang="ts">
2
+ import type { CoreParagraph } from '#wpnuxt/blocks'
3
+
4
+ defineProps<{
5
+ block: CoreParagraph
6
+ }>()
7
+ </script>
8
+
9
+ <template>
10
+ <div>
11
+ <p v-sanitize="block?.attributes?.content" />
12
+ </div>
13
+ </template>
@@ -0,0 +1,20 @@
1
+ <script setup lang="ts">
2
+ import type { CoreQuote, CoreParagraph } from '#wpnuxt/blocks'
3
+
4
+ defineProps<{
5
+ block: CoreQuote
6
+ }>()
7
+ </script>
8
+
9
+ <template>
10
+ <blockquote
11
+ v-for="innerBlock, index in block.innerBlocks"
12
+ :key="index"
13
+ >
14
+ <CoreParagraph
15
+ v-if="innerBlock.name === 'core/paragraph'"
16
+ class="text-sm text-primary-500"
17
+ :block="innerBlock"
18
+ />
19
+ </blockquote>
20
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import type { EditorBlock } from '#wpnuxt/blocks'
3
+
4
+ defineProps<{
5
+ block: EditorBlock
6
+ }>()
7
+ </script>
8
+
9
+ <template>
10
+ <p v-sanitize="block.renderedHtml" />
11
+ </template>
@@ -0,0 +1,26 @@
1
+ fragment CoreButton on CoreButton {
2
+ attributes {
3
+ anchor
4
+ backgroundColor
5
+ borderColor
6
+ className
7
+ cssClassName
8
+ fontFamily
9
+ fontSize
10
+ gradient
11
+ linkClassName
12
+ linkTarget
13
+ lock
14
+ metadata
15
+ placeholder
16
+ rel
17
+ style
18
+ tagName
19
+ text
20
+ textAlign
21
+ textColor
22
+ title
23
+ type
24
+ url
25
+ }
26
+ }
@@ -0,0 +1,31 @@
1
+ fragment CoreGallery on CoreGallery {
2
+ attributes {
3
+ align
4
+ allowResize
5
+ anchor
6
+ backgroundColor
7
+ caption
8
+ className
9
+ columns
10
+ fixedHeight
11
+ gradient
12
+ ids
13
+ imageCrop
14
+ layout
15
+ linkTarget
16
+ linkTo
17
+ lock
18
+ metadata
19
+ randomOrder
20
+ shortCodeTransforms
21
+ style
22
+ images {
23
+ alt
24
+ caption
25
+ fullUrl
26
+ id
27
+ link
28
+ url
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,29 @@
1
+ fragment CoreImage on CoreImage {
2
+ attributes {
3
+ align
4
+ alt
5
+ anchor
6
+ aspectRatio
7
+ borderColor
8
+ className
9
+ cssClassName
10
+ height
11
+ href
12
+ id
13
+ linkClass
14
+ linkDestination
15
+ linkTarget
16
+ lock
17
+ rel
18
+ scale
19
+ sizeSlug
20
+ src
21
+ style
22
+ title
23
+ url
24
+ width
25
+ caption
26
+ lightbox
27
+ metadata
28
+ }
29
+ }
@@ -0,0 +1,20 @@
1
+ fragment CoreParagraph on CoreParagraph {
2
+ attributes {
3
+ align
4
+ anchor
5
+ backgroundColor
6
+ className
7
+ content
8
+ cssClassName
9
+ direction
10
+ dropCap
11
+ fontFamily
12
+ fontSize
13
+ gradient
14
+ lock
15
+ metadata
16
+ placeholder
17
+ style
18
+ textColor
19
+ }
20
+ }
@@ -0,0 +1,18 @@
1
+ fragment CoreQuote on CoreQuote {
2
+ attributes {
3
+ anchor
4
+ backgroundColor
5
+ citation
6
+ className
7
+ cssClassName
8
+ fontFamily
9
+ fontSize
10
+ gradient
11
+ layout
12
+ lock
13
+ metadata
14
+ style
15
+ textColor
16
+ value
17
+ }
18
+ }
@@ -0,0 +1,21 @@
1
+ #import '~/.queries/fragments/CoreButton.fragment.gql';
2
+ #import '~/.queries/fragments/CoreGallery.fragment.gql';
3
+ #import '~/.queries/fragments/CoreImage.fragment.gql';
4
+ #import '~/.queries/fragments/CoreParagraph.fragment.gql';
5
+ #import '~/.queries/fragments/CoreQuote.fragment.gql';
6
+
7
+ fragment EditorBlock on EditorBlock {
8
+ apiVersion
9
+ blockEditorCategoryName
10
+ clientId
11
+ cssClassNames
12
+ isDynamic
13
+ name
14
+ parentClientId
15
+ renderedHtml
16
+ ...CoreButton
17
+ ...CoreGallery
18
+ ...CoreImage
19
+ ...CoreParagraph
20
+ ...CoreQuote
21
+ }
@@ -0,0 +1,10 @@
1
+ #import '~/.queries/fragments/EditorBlock.fragment.gql';
2
+
3
+ fragment EditorBlocks on NodeWithEditorBlocks {
4
+ editorBlocks {
5
+ ...EditorBlock
6
+ innerBlocks {
7
+ ...EditorBlock
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,17 @@
1
+ #import '~/.queries/fragments/ContentNode.fragment.gql';
2
+ #import '~/.queries/fragments/NodeWithFeaturedImage.fragment.gql';
3
+ #import '~/.queries/fragments/EditorBlocks.fragment.gql';
4
+
5
+ fragment Page on Page {
6
+ ...ContentNode
7
+ ...NodeWithFeaturedImage
8
+ content
9
+ isFrontPage
10
+ isPostsPage
11
+ isPreview
12
+ isPrivacyPage
13
+ isRestricted
14
+ isRevision
15
+ title
16
+ ...EditorBlocks
17
+ }
@@ -0,0 +1,13 @@
1
+ #import "~/.queries/fragments/NodeWithExcerpt.fragment.gql";
2
+ #import '~/.queries/fragments/ContentNode.fragment.gql';
3
+ #import '~/.queries/fragments/NodeWithFeaturedImage.fragment.gql';
4
+ #import '~/.queries/fragments/EditorBlocks.fragment.gql';
5
+
6
+ fragment Post on Post {
7
+ ...NodeWithExcerpt
8
+ ...ContentNode
9
+ ...NodeWithFeaturedImage
10
+ content
11
+ title
12
+ ...EditorBlocks
13
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "../../../.nuxt/tsconfig.server.json",
3
+ }
@@ -0,0 +1 @@
1
+ export { type ModuleOptions, default } from './module.js'
@@ -0,0 +1 @@
1
+ export { type ModuleOptions, default } from './module'
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@wpnuxt/blocks",
3
+ "version": "0.0.2",
4
+ "description": "WPNuxt Blocks",
5
+ "repository": "wpnuxt/wpnuxt-blocks",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/types.d.ts",
11
+ "import": "./dist/module.mjs",
12
+ "require": "./dist/module.cjs"
13
+ }
14
+ },
15
+ "main": "./dist/module.cjs",
16
+ "types": "./dist/types.d.ts",
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "scripts": {
24
+ "prepack": "nuxt-module-build build",
25
+ "dev": "nuxi dev playground",
26
+ "dev:build": "nuxi build playground",
27
+ "dev:prepare": "nuxt-module-build build --stub && nuxt-module-build prepare && nuxi prepare playground",
28
+ "release": "npm run lint && npm run test && npm run prepack; release-it --git.tagExclude='*[-edge]*'",
29
+ "release-edge": "npm run lint; release-it --no-github --preRelease=edge --config .release-it-edge.json",
30
+ "lint": "eslint .",
31
+ "lint:fix": "eslint . --fix",
32
+ "test": "vitest run",
33
+ "test:watch": "vitest watch",
34
+ "test:types": "vue-tsc --noEmit && cd playground && vue-tsc --noEmit"
35
+ },
36
+ "dependencies": {
37
+ "@nuxt/kit": "^3.12.4",
38
+ "@vernaillen/wpnuxt": "^0.6.0-edge.0"
39
+ },
40
+ "devDependencies": {
41
+ "@nuxt/devtools": "^1.3.9",
42
+ "@nuxt/eslint-config": "^0.3.13",
43
+ "@nuxt/module-builder": "^0.8.1",
44
+ "@nuxt/schema": "^3.12.4",
45
+ "@nuxt/test-utils": "^3.13.1",
46
+ "@types/node": "^20.14.11",
47
+ "changelogen": "^0.5.5",
48
+ "eslint": "^9.7.0",
49
+ "nuxt": "^3.12.4",
50
+ "release-it": "^17.6.0",
51
+ "typescript": "latest",
52
+ "vitest": "^2.0.3",
53
+ "vue-tsc": "^2.0.26"
54
+ },
55
+ "peerDependencies": {
56
+ "knitwork": "^1.1.0",
57
+ "pathe": "^1.1.2"
58
+ }
59
+ }