@duffcloudservices/cms 0.4.0 → 0.5.0

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.
@@ -1,267 +0,0 @@
1
- import * as vue from 'vue';
2
-
3
- /**
4
- * Types for .dcs/seo.yaml structure
5
- * Matches contracts/generated/schemas/seo.json
6
- */
7
- /**
8
- * Root structure of .dcs/seo.yaml
9
- */
10
- interface SeoConfiguration {
11
- /** Schema version */
12
- version: number;
13
- /** ISO timestamp of last update */
14
- lastUpdated?: string;
15
- /** Email or identifier of who made the update */
16
- updatedBy?: string;
17
- /** Global/site-wide SEO defaults */
18
- global?: GlobalSeoConfig;
19
- /** Page-specific SEO configurations keyed by page slug */
20
- pages?: Record<string, PageSeoConfig>;
21
- }
22
- /**
23
- * Global/site-wide SEO configuration
24
- */
25
- interface GlobalSeoConfig {
26
- /** Site name used in titles and structured data */
27
- siteName?: string;
28
- /** Base URL of the site (e.g., https://example.com) */
29
- siteUrl?: string;
30
- /** Locale for Open Graph (e.g., en_US) */
31
- locale?: string;
32
- /** Default page title */
33
- defaultTitle?: string;
34
- /** Default meta description */
35
- defaultDescription?: string;
36
- /** Title template with %s placeholder (e.g., "%s | Site Name") */
37
- titleTemplate?: string;
38
- /** Author information for structured data */
39
- author?: SeoAuthorConfig;
40
- /** Social media handles */
41
- social?: SeoSocialConfig;
42
- /** Default images for social sharing */
43
- images?: SeoImagesConfig;
44
- /** Default robots directive (e.g., "index, follow") */
45
- robots?: string;
46
- /** Global JSON-LD schemas (Organization, WebSite, etc.) */
47
- schemas?: SeoSchemaConfig[];
48
- /** Search engine verification codes */
49
- verification?: SeoVerificationConfig;
50
- }
51
- /**
52
- * Page-specific SEO configuration
53
- */
54
- interface PageSeoConfig {
55
- /** Page title */
56
- title?: string;
57
- /** Meta description */
58
- description?: string;
59
- /** Meta keywords (comma-separated) */
60
- keywords?: string;
61
- /** Canonical URL */
62
- canonical?: string;
63
- /** Page-specific robots directive */
64
- robots?: string;
65
- /** Open Graph configuration */
66
- openGraph?: SeoOpenGraphConfig;
67
- /** Twitter Card configuration */
68
- twitter?: SeoTwitterConfig;
69
- /** Page-specific JSON-LD schemas */
70
- schemas?: SeoSchemaConfig[];
71
- /** Alternate language links */
72
- alternates?: SeoAlternateConfig[];
73
- /** If true, don't apply titleTemplate to this page */
74
- noTitleTemplate?: boolean;
75
- }
76
- /**
77
- * Author information for structured data
78
- */
79
- interface SeoAuthorConfig {
80
- /** Author name */
81
- name?: string;
82
- /** Author email */
83
- email?: string;
84
- /** Author image URL */
85
- image?: string;
86
- /** Job title */
87
- jobTitle?: string;
88
- /** Social profile URLs */
89
- sameAs?: string[];
90
- }
91
- /**
92
- * Social media handles
93
- */
94
- interface SeoSocialConfig {
95
- /** Twitter handle (without @) */
96
- twitter?: string;
97
- /** LinkedIn company or profile slug */
98
- linkedin?: string;
99
- /** GitHub username */
100
- github?: string;
101
- /** Facebook page name */
102
- facebook?: string;
103
- /** Instagram username */
104
- instagram?: string;
105
- /** YouTube channel */
106
- youtube?: string;
107
- }
108
- /**
109
- * Default images for social sharing
110
- */
111
- interface SeoImagesConfig {
112
- /** Logo image URL */
113
- logo?: string;
114
- /** Default Open Graph image */
115
- ogDefault?: string;
116
- /** Default Twitter Card image */
117
- twitterDefault?: string;
118
- /** Favicon URL */
119
- favicon?: string;
120
- }
121
- /**
122
- * Open Graph meta configuration
123
- */
124
- interface SeoOpenGraphConfig {
125
- /** OG title (defaults to page title) */
126
- title?: string;
127
- /** OG description (defaults to page description) */
128
- description?: string;
129
- /** OG image URL */
130
- image?: string;
131
- /** Alt text for OG image */
132
- imageAlt?: string;
133
- /** OG image width in pixels */
134
- imageWidth?: number;
135
- /** OG image height in pixels */
136
- imageHeight?: number;
137
- /** OG type */
138
- type?: 'website' | 'article' | 'profile' | 'book' | 'music.song' | 'music.album' | 'video.movie' | 'video.episode' | 'video.tv_show' | 'video.other';
139
- /** OG URL (defaults to canonical) */
140
- url?: string;
141
- /** Article published time (ISO 8601) */
142
- publishedTime?: string;
143
- /** Article modified time (ISO 8601) */
144
- modifiedTime?: string;
145
- /** Article author */
146
- author?: string;
147
- /** Article section/category */
148
- section?: string;
149
- /** Article tags */
150
- tags?: string[];
151
- }
152
- /**
153
- * Twitter Card configuration
154
- */
155
- interface SeoTwitterConfig {
156
- /** Card type */
157
- card?: 'summary' | 'summary_large_image' | 'app' | 'player';
158
- /** Twitter title */
159
- title?: string;
160
- /** Twitter description */
161
- description?: string;
162
- /** Twitter image URL */
163
- image?: string;
164
- /** Alt text for Twitter image */
165
- imageAlt?: string;
166
- /** Site's Twitter handle (without @) */
167
- site?: string;
168
- /** Content creator's Twitter handle (without @) */
169
- creator?: string;
170
- }
171
- /**
172
- * JSON-LD schema configuration
173
- */
174
- interface SeoSchemaConfig {
175
- /** Schema.org type (e.g., "WebSite", "Organization", "Article") */
176
- type: string;
177
- /** Schema properties */
178
- properties?: Record<string, unknown>;
179
- }
180
- /**
181
- * Alternate language link
182
- */
183
- interface SeoAlternateConfig {
184
- /** Language code (e.g., "en", "es", "x-default") */
185
- hreflang: string;
186
- /** URL of alternate version */
187
- href: string;
188
- }
189
- /**
190
- * Search engine verification codes
191
- */
192
- interface SeoVerificationConfig {
193
- /** Google Search Console verification code */
194
- google?: string;
195
- /** Bing Webmaster Tools verification code */
196
- bing?: string;
197
- /** DuckDuckGo verification (reserved for future use) */
198
- duckduckgo?: string;
199
- }
200
- /**
201
- * Resolved page SEO configuration (after merging global + page)
202
- */
203
- interface ResolvedPageSeo {
204
- /** Final page title */
205
- title: string;
206
- /** Final meta description */
207
- description: string;
208
- /** Page keywords (comma-separated), if configured */
209
- keywords?: string;
210
- /** Final canonical URL */
211
- canonical: string;
212
- /** Final robots directive */
213
- robots: string;
214
- /** Merged Open Graph configuration */
215
- openGraph: Required<Pick<SeoOpenGraphConfig, 'title' | 'description' | 'type'>> & SeoOpenGraphConfig;
216
- /** Merged Twitter configuration */
217
- twitter: Required<Pick<SeoTwitterConfig, 'card'>> & SeoTwitterConfig;
218
- /** All schemas (global + page) */
219
- schemas: SeoSchemaConfig[];
220
- /** Alternate links */
221
- alternates: SeoAlternateConfig[];
222
- }
223
- /**
224
- * Configuration for useSEO composable
225
- */
226
- interface UseSeoConfig {
227
- /** Page slug matching entry in seo.yaml */
228
- pageSlug: string;
229
- /** Optional page path for canonical URL generation */
230
- pagePath?: string;
231
- }
232
- /**
233
- * Return type of useSEO composable
234
- */
235
- interface UseSeoReturn {
236
- /** Computed page SEO configuration */
237
- config: vue.ComputedRef<ResolvedPageSeo>;
238
- /** Apply all meta tags via useHead */
239
- applyHead: (overrides?: HeadOverrides) => void;
240
- /** Get JSON-LD schema objects for the page */
241
- getSchema: () => object[];
242
- /** Get canonical URL for the page */
243
- getCanonical: () => string;
244
- /** Whether SEO config was loaded from build-time */
245
- hasBuildTimeSeo: boolean;
246
- }
247
- /**
248
- * Overrides that can be passed to applyHead
249
- */
250
- interface HeadOverrides {
251
- /** Override title */
252
- title?: string;
253
- /** Override description */
254
- description?: string;
255
- /** Override keywords meta tag */
256
- keywords?: string;
257
- /** Additional or replacement schemas */
258
- schemas?: object[];
259
- /** Additional meta tags */
260
- meta?: Array<{
261
- name?: string;
262
- property?: string;
263
- content: string;
264
- }>;
265
- }
266
-
267
- export type { GlobalSeoConfig as G, HeadOverrides as H, PageSeoConfig as P, ResolvedPageSeo as R, SeoConfiguration as S, UseSeoReturn as U, SeoSchemaConfig as a, SeoOpenGraphConfig as b, SeoTwitterConfig as c, SeoAuthorConfig as d, SeoSocialConfig as e, SeoImagesConfig as f, SeoAlternateConfig as g, SeoVerificationConfig as h, UseSeoConfig as i };