Skip to content

Commit 7019bd9

Browse files
committedFeb 21, 2025·
feat(svelte): useSchemaOrg()
1 parent e30346e commit 7019bd9

File tree

12 files changed

+156
-30
lines changed

12 files changed

+156
-30
lines changed
 

‎examples/vite-ssr-svelte/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"compression": "^1.7.5",
1616
"express": "^5.0.1",
1717
"sirv": "^3.0.0",
18-
"@unhead/svelte": "workspace:*"
18+
"@unhead/svelte": "workspace:*",
19+
"@unhead/schema-org": "workspace:*"
1920
},
2021
"devDependencies": {
2122
"@sveltejs/vite-plugin-svelte": "^5.0.1",

‎examples/vite-ssr-svelte/src/App.svelte

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script lang="ts">
22
import svelteLogo from './assets/svelte.svg'
33
import Counter from './lib/Counter.svelte'
4+
import SchemaOrg from './lib/SchemaOrg.svelte'
45
56
let counter = $state(true)
67
</script>
@@ -24,6 +25,8 @@
2425

2526
<button onclick={counter = false}>disable counter</button>
2627

28+
<SchemaOrg />
29+
2730
<p>
2831
Check out <a href="https://github.com/sveltejs/kit#readme" target="_blank" rel="noreferrer">SvelteKit</a>, the official Svelte app framework powered by Vite!
2932
</p>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<script lang="ts">
2+
import { useSchemaOrg, defineWebPage } from '@unhead/schema-org/svelte'
3+
4+
useSchemaOrg([
5+
defineWebPage({
6+
name: 'Home',
7+
description: 'A simple example of using Schema.org with Svelte',
8+
url: 'https://example.com',
9+
}),
10+
])
11+
</script>

‎packages/schema-org/build.config.ts

+2
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@ export default defineBuildConfig({
66
entries: [
77
{ input: 'src/index' },
88
{ input: 'src/vue/index', name: 'vue' },
9+
{ input: 'src/svelte/index', name: 'svelte' },
910
],
1011
externals: [
1112
'vue',
1213
'@vue/runtime-core',
1314
'unplugin-vue-components',
1415
'unhead',
1516
'vite',
17+
'svelte',
1618
'vue-router',
1719
'@unhead/vue',
1820
'unplugin-ast',

‎packages/schema-org/package.json

+17-3
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@
3333
"./vue": {
3434
"types": "./dist/vue.d.ts",
3535
"import": "./dist/vue.mjs"
36+
},
37+
"./svelte": {
38+
"types": "./dist/svelte.d.ts",
39+
"import": "./dist/svelte.mjs"
3640
}
3741
},
3842
"main": "dist/index.mjs",
@@ -42,11 +46,15 @@
4246
"*": {
4347
"vue": [
4448
"dist/vue"
49+
],
50+
"svelte": [
51+
"dist/svelte"
4552
]
4653
}
4754
},
4855
"files": [
4956
"dist",
57+
"svelte.d.ts",
5058
"vue.d.ts"
5159
],
5260
"scripts": {
@@ -57,10 +65,14 @@
5765
"lint": "eslint \"{src,test}/**/*.{ts,vue,json,yml}\" --fix"
5866
},
5967
"peerDependencies": {
60-
"@unhead/vue": "^1.11.18",
61-
"unhead": "^1.11.18"
68+
"@unhead/svelte": "^2",
69+
"@unhead/vue": "^2",
70+
"unhead": "^2"
6271
},
6372
"peerDependenciesMeta": {
73+
"@unhead/svelte": {
74+
"optional": true
75+
},
6476
"@unhead/vue": {
6577
"optional": true
6678
}
@@ -71,13 +83,15 @@
7183
"ufo": "^1.5.4"
7284
},
7385
"devDependencies": {
86+
"@unhead/svelte": "workspace:*",
7487
"@unhead/vue": "workspace:*",
7588
"unhead": "workspace:*",
7689
"unplugin-vue-components": "^28.4.0"
7790
},
7891
"build": {
7992
"external": [
80-
"vue"
93+
"vue",
94+
"svelte"
8195
]
8296
}
8397
}

‎packages/schema-org/src/runtime.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type {ActiveHeadEntry, HeadEntryOptions, Unhead} from 'unhead/types'
1+
import type { ActiveHeadEntry, HeadEntryOptions, Unhead } from 'unhead/types'
22
import type {
33
AggregateOffer,
44
AggregateRating,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import type { ActiveHeadEntry, HeadEntryOptions } from 'unhead/types'
2+
import type { UseSchemaOrgInput } from '../index'
3+
import { useHead, useUnhead } from '@unhead/svelte'
4+
import {
5+
normalizeSchemaOrgInput,
6+
} from '../index'
7+
import { UnheadSchemaOrg } from '../plugin'
8+
9+
export {
10+
defineArticle,
11+
defineBook,
12+
defineBreadcrumb,
13+
defineComment,
14+
defineCourse,
15+
defineEvent,
16+
defineFoodEstablishment,
17+
defineHowTo,
18+
defineImage,
19+
defineItemList,
20+
defineJobPosting,
21+
defineLocalBusiness,
22+
defineMovie,
23+
defineOrganization,
24+
definePerson,
25+
defineProduct,
26+
defineQuestion,
27+
defineRecipe,
28+
defineReview,
29+
defineSoftwareApp,
30+
defineVideo,
31+
defineWebPage,
32+
defineWebSite,
33+
} from '../runtime'
34+
35+
export function useSchemaOrg(input: UseSchemaOrgInput = [], options: HeadEntryOptions = {}): ActiveHeadEntry<UseSchemaOrgInput> {
36+
// lazy initialise the plugin
37+
const unhead = options.head || useUnhead()
38+
unhead.use(UnheadSchemaOrg())
39+
const entry = useHead(normalizeSchemaOrgInput(input), options) as ActiveHeadEntry<UseSchemaOrgInput>
40+
const corePatch = entry.patch
41+
entry.patch = input => corePatch(normalizeSchemaOrgInput(input))
42+
return entry
43+
}
+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
export const schemaAutoImports = [
2+
'defineAddress',
3+
'defineAggregateOffer',
4+
'defineAggregateRating',
5+
'defineArticle',
6+
'defineBook',
7+
'defineBookEdition',
8+
'defineBreadcrumb',
9+
'defineComment',
10+
'defineCourse',
11+
'defineEvent',
12+
'defineFoodEstablishment',
13+
'defineHowTo',
14+
'defineHowToStep',
15+
'defineImage',
16+
'defineItemList',
17+
'defineJobPosting',
18+
'defineListItem',
19+
'defineLocalBusiness',
20+
'defineMovie',
21+
'defineOffer',
22+
'defineOpeningHours',
23+
'defineOrganization',
24+
'definePerson',
25+
'definePlace',
26+
'defineProduct',
27+
'defineQuestion',
28+
'defineReadAction',
29+
'defineRecipe',
30+
'defineReview',
31+
'defineSearchAction',
32+
'defineSoftwareApp',
33+
'defineVideo',
34+
'defineVirtualLocation',
35+
'defineWebPage',
36+
'defineWebSite',
37+
'useSchemaOrg',
38+
]
39+
40+
export const schemaOrgAutoImports = [
41+
{
42+
from: '@unhead/schema-org/svelte',
43+
imports: schemaAutoImports,
44+
},
45+
]
+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export type { MetaInput, UserConfig } from '../'
2+
3+
export * from './composables'
4+
export * from './imports'

‎packages/schema-org/svelte.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './dist/svelte'

‎packages/svelte/src/composables.ts

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import type {
22
ActiveHeadEntry,
3-
Head,
43
HeadEntryOptions,
54
HeadSafe,
65
Unhead,

‎pnpm-lock.yaml

+27-24
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
Please sign in to comment.