File tree Expand file tree Collapse file tree 11 files changed +131
-95
lines changed Expand file tree Collapse file tree 11 files changed +131
-95
lines changed Original file line number Diff line number Diff line change @@ -25,7 +25,6 @@ describe('nuxt-jsonld', () => {
2525 expect ( json ) . to . have . property ( '@context' , 'https://schema.org' ) ;
2626 expect ( json ) . to . have . property ( '@type' , 'Thing' ) ;
2727 expect ( json ) . to . have . property ( 'name' , 'Static json' ) ;
28-
2928 const json2 = JSON . parse ( el [ 1 ] . innerText ) ;
3029 expect ( json2 ) . to . have . property ( '@context' , 'https://schema.org' ) ;
3130 expect ( json2 ) . to . have . property ( '@type' , 'Thing' ) ;
Original file line number Diff line number Diff line change 2222 "prettier" : " ^3.3.2"
2323 },
2424 "volta" : {
25- "node" : " 18.18 .0" ,
25+ "node" : " 22.12 .0" ,
2626 "yarn" : " 1.22.22"
2727 }
2828}
Original file line number Diff line number Diff line change 1+ type Dog = {
2+ breed : string ;
3+ name : string ;
4+ age : number ;
5+ } ;
6+
7+ export const useDog = async ( ) => {
8+ const app = useNuxtApp ( ) ;
9+
10+ // fetch Dog data
11+ await new Promise ( ( res ) => setTimeout ( res , 100 ) ) ;
12+ const dog : Dog = {
13+ breed : 'Golden Retriever' ,
14+ name : 'Buddy' ,
15+ age : 5 ,
16+ } ;
17+
18+ // Note: This jsonld will not disappear even after page transition.
19+ // If you want to link it to the page, use useJsonld in the component side.
20+ app . runWithContext ( ( ) => {
21+ useJsonld ( ( ) => ( {
22+ '@context' : 'https://schema.org' ,
23+ '@type' : 'Thing' ,
24+ name : dog . name ,
25+ description : `A ${ dog . breed } dog: not linked to the page` ,
26+ } ) ) ;
27+ } ) ;
28+
29+ return {
30+ dog,
31+ } ;
32+ } ;
Original file line number Diff line number Diff line change 1- import NuxtJsonld from 'nuxt-jsonld' ;
2-
31export default defineNuxtConfig ( {
4- modules : [ NuxtJsonld ] ,
2+ modules : [ 'nuxt-jsonld' ] ,
53 css : [ '@/css/index.css' ] ,
6- devtools : true ,
4+ compatibilityDate : '2024-12-11' ,
75} ) ;
Original file line number Diff line number Diff line change 99 "start" : " node ./.output/server/index.mjs"
1010 },
1111 "dependencies" : {
12- "nuxt" : " ^3.11.2 "
12+ "nuxt" : " ^3.12.4 "
1313 },
1414 "devDependencies" : {
1515 "@nuxt/devtools" : " ^0.8.5"
Original file line number Diff line number Diff line change 11<template >
22 <div >
33 <h1 >Composable Options</h1 >
4+ <nuxt-link to =" /" > Back to list </nuxt-link >
45 </div >
56</template >
67
7- <script lang="ts">
8- export default defineComponent ({
9- setup() {
10- useJsonld (
11- () => {
12- return {
13- ' @context' : ' https://schema.org' ,
14- ' @type' : ' WebSite' ,
15- name: ' nuxt-jsonld composable options' ,
16- };
17- },
18- {
19- tagPosition: ' bodyClose' ,
20- }
21- );
8+ <script lang="ts" setup>
9+ useJsonld (
10+ () => {
11+ return {
12+ ' @context' : ' https://schema.org' ,
13+ ' @type' : ' WebSite' ,
14+ name: ' nuxt-jsonld composable options' ,
15+ };
2216 },
23- });
17+ {
18+ tagPosition: ' bodyClose' ,
19+ }
20+ );
2421 </script >
Original file line number Diff line number Diff line change 1+ <template >
2+ <div >
3+ <h1 >Context example</h1 >
4+ <div >
5+ <pre >{{ JSON.stringify(dog, null, 4) }}</pre >
6+ <nuxt-link to =" /" > Back to list </nuxt-link >
7+ </div >
8+ </div >
9+ </template >
10+
11+ <script lang="ts" setup>
12+ import { useDog } from ' @/composables/dog' ;
13+ const { dog } = await useDog ();
14+ useJsonld (() => ({
15+ ' @context' : ' https://schema.org' ,
16+ ' @type' : ' Thing' ,
17+ name: dog .name ,
18+ description: ` A ${dog .breed } dog: linked to this page ` ,
19+ }));
20+ </script >
21+
22+ <style scoped>
23+ pre {
24+ display : block ;
25+ margin : 10px auto ;
26+ max-width : 300px ;
27+ padding : 12px ;
28+ text-align : left ;
29+ background-color : gainsboro ;
30+ border-radius : 4px ;
31+ }
32+ </style >
Original file line number Diff line number Diff line change 88 {{ p.name }}
99 </nuxt-link >
1010 </li >
11- <li ><nuxt-link :to =" { name: 'static' }" >Static JSON</nuxt-link ></li >
1211 <li ><nuxt-link :to =" { name: 'option' }" >Options API</nuxt-link ></li >
1312 <li ><nuxt-link :to =" { name: 'composable-options' }" >Composable API Options</nuxt-link ></li >
13+ <li ><nuxt-link :to =" { name: 'context' }" >Context</nuxt-link ></li >
1414 </ul >
1515 </div >
1616</template >
1717
18- <script lang="ts">
19- import { WithContext , ItemList } from ' schema-dts' ;
18+ <script lang="ts" setup>
19+ useHead ({
20+ title: ' Product List' ,
21+ });
2022
21- export default defineComponent ({
22- setup() {
23- useHead ({
24- title: ' Product List ' ,
25- }) ;
23+ const products = [
24+ { name: ' Foo ' , id: 1 },
25+ { name: ' Bar ' , id: 2 },
26+ { name: ' Baz ' , id: 3 } ,
27+ ] ;
2628
27- return {
28- products: [
29- { name: ' Foo' , id: 1 },
30- { name: ' Bar' , id: 2 },
31- { name: ' Baz' , id: 3 },
32- ],
33- };
34- },
35- jsonld(): WithContext <ItemList > {
36- return {
37- ' @context' : ' https://schema.org' ,
38- ' @type' : ' ItemList' ,
39- itemListElement: this .products .map ((p ) => ({
40- ' @type' : ' ListItem' ,
41- position: p .id ,
42- item: {
43- ' @type' : ' Product' ,
44- name: p .name ,
45- },
46- })),
47- };
48- },
29+ useJsonld ({
30+ ' @context' : ' https://schema.org' ,
31+ ' @type' : ' ItemList' ,
32+ itemListElement: products .map ((p ) => ({
33+ ' @type' : ' ListItem' ,
34+ position: p .id ,
35+ item: {
36+ ' @type' : ' Product' ,
37+ name: p .name ,
38+ },
39+ })),
4940});
5041 </script >
Original file line number Diff line number Diff line change 1010 </div >
1111</template >
1212
13- <script lang="ts">
14- export default defineComponent ({
15- setup() {
16- const { params } = useRoute ();
17- const count = ref <number >(0 );
18- const updateCount = () => {
19- count .value ++ ;
20- };
21- const product = reactive ({
22- name: params .id ,
23- description: ` This is a sample ${params .id } product. ` ,
24- count ,
25- });
26-
27- useHead ({
28- title: ` Product: ${product .name } ` ,
29- });
13+ <script lang="ts" setup>
14+ const { params } = useRoute ();
15+ const count = ref <number >(0 );
16+ const updateCount = () => {
17+ count .value ++ ;
18+ };
19+ const product = reactive ({
20+ name: params .id ,
21+ description: ` This is a sample ${params .id } product. ` ,
22+ count ,
23+ });
3024
31- useJsonld (() => {
32- if (! product .count ) {
33- return null ;
34- }
35- return {
36- ' @context' : ' https://schema.org' ,
37- ' @type' : ' Product' ,
38- ... product ,
39- };
40- });
25+ useHead ({
26+ title: ` Product: ${product .name } ` ,
27+ });
4128
42- return {
43- updateCount ,
44- product ,
45- };
46- },
29+ useJsonld (() => {
30+ if (! product .count ) {
31+ return null ;
32+ }
33+ return {
34+ ' @context' : ' https://schema.org' ,
35+ ' @type' : ' Product' ,
36+ ... product ,
37+ };
4738});
4839 </script >
Original file line number Diff line number Diff line change 88 </div >
99</template >
1010
11- <script lang="ts">
12- export default defineComponent ({
13- setup() {
14- useJsonld ({
15- ' @context' : ' https://schema.org' ,
16- ' @type' : ' Thing' ,
17- name: ' Static json' ,
18- });
19- },
11+ <script lang="ts" setup>
12+ useJsonld ({
13+ ' @context' : ' https://schema.org' ,
14+ ' @type' : ' Thing' ,
15+ name: ' Static json' ,
2016});
2117 </script >
2218
You can’t perform that action at this time.
0 commit comments