@vistagenic/vista 0.1.0-alpha.1
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.
- package/bin/vista.js +98 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.js +16 -0
- package/dist/bin/build-rsc.d.ts +17 -0
- package/dist/bin/build-rsc.js +320 -0
- package/dist/bin/build.d.ts +4 -0
- package/dist/bin/build.js +336 -0
- package/dist/bin/file-scanner.d.ts +66 -0
- package/dist/bin/file-scanner.js +399 -0
- package/dist/bin/server-component-plugin.d.ts +17 -0
- package/dist/bin/server-component-plugin.js +133 -0
- package/dist/bin/webpack.config.d.ts +6 -0
- package/dist/bin/webpack.config.js +138 -0
- package/dist/build/manifest.d.ts +95 -0
- package/dist/build/manifest.js +168 -0
- package/dist/build/rsc/client-manifest.d.ts +48 -0
- package/dist/build/rsc/client-manifest.js +191 -0
- package/dist/build/rsc/client-reference-plugin.d.ts +37 -0
- package/dist/build/rsc/client-reference-plugin.js +185 -0
- package/dist/build/rsc/compiler.d.ts +36 -0
- package/dist/build/rsc/compiler.js +311 -0
- package/dist/build/rsc/index.d.ts +16 -0
- package/dist/build/rsc/index.js +32 -0
- package/dist/build/rsc/native-scanner.d.ts +123 -0
- package/dist/build/rsc/native-scanner.js +165 -0
- package/dist/build/rsc/rsc-renderer.d.ts +99 -0
- package/dist/build/rsc/rsc-renderer.js +269 -0
- package/dist/build/rsc/server-component-loader.d.ts +19 -0
- package/dist/build/rsc/server-component-loader.js +147 -0
- package/dist/build/rsc/server-manifest.d.ts +63 -0
- package/dist/build/rsc/server-manifest.js +268 -0
- package/dist/build/webpack/loaders/vista-flight-loader.d.ts +17 -0
- package/dist/build/webpack/loaders/vista-flight-loader.js +93 -0
- package/dist/build/webpack/plugins/vista-flight-plugin.d.ts +36 -0
- package/dist/build/webpack/plugins/vista-flight-plugin.js +133 -0
- package/dist/client/dynamic.d.ts +25 -0
- package/dist/client/dynamic.js +68 -0
- package/dist/client/font.d.ts +98 -0
- package/dist/client/font.js +109 -0
- package/dist/client/head.d.ts +79 -0
- package/dist/client/head.js +261 -0
- package/dist/client/hydration.d.ts +45 -0
- package/dist/client/hydration.js +291 -0
- package/dist/client/link.d.ts +30 -0
- package/dist/client/link.js +188 -0
- package/dist/client/navigation.d.ts +28 -0
- package/dist/client/navigation.js +116 -0
- package/dist/client/router.d.ts +41 -0
- package/dist/client/router.js +190 -0
- package/dist/client/script.d.ts +51 -0
- package/dist/client/script.js +118 -0
- package/dist/components/client-island.d.ts +34 -0
- package/dist/components/client-island.js +75 -0
- package/dist/components/client.d.ts +29 -0
- package/dist/components/client.js +102 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +8 -0
- package/dist/components/link.d.ts +6 -0
- package/dist/components/link.js +13 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.js +31 -0
- package/dist/dev-error.d.ts +35 -0
- package/dist/dev-error.js +310 -0
- package/dist/image/get-img-props.d.ts +28 -0
- package/dist/image/get-img-props.js +49 -0
- package/dist/image/image-config.d.ts +20 -0
- package/dist/image/image-config.js +20 -0
- package/dist/image/image-loader.d.ts +7 -0
- package/dist/image/image-loader.js +14 -0
- package/dist/image/index.d.ts +6 -0
- package/dist/image/index.js +110 -0
- package/dist/image.d.ts +10 -0
- package/dist/image.js +7 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +53 -0
- package/dist/metadata/generate.d.ts +22 -0
- package/dist/metadata/generate.js +324 -0
- package/dist/metadata/index.d.ts +7 -0
- package/dist/metadata/index.js +26 -0
- package/dist/metadata/types.d.ts +325 -0
- package/dist/metadata/types.js +15 -0
- package/dist/router/context.d.ts +8 -0
- package/dist/router/context.js +13 -0
- package/dist/router/index.d.ts +2 -0
- package/dist/router/index.js +18 -0
- package/dist/router/provider.d.ts +5 -0
- package/dist/router/provider.js +31 -0
- package/dist/server/client-boundary.d.ts +48 -0
- package/dist/server/client-boundary.js +133 -0
- package/dist/server/engine.d.ts +4 -0
- package/dist/server/engine.js +651 -0
- package/dist/server/index.d.ts +95 -0
- package/dist/server/index.js +177 -0
- package/dist/server/rsc-engine.d.ts +20 -0
- package/dist/server/rsc-engine.js +588 -0
- package/dist/server/rsc-module-system.d.ts +33 -0
- package/dist/server/rsc-module-system.js +119 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.js +2 -0
- package/package.json +103 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vista Metadata Renderer
|
|
3
|
+
*
|
|
4
|
+
* Converts Metadata object to React head elements.
|
|
5
|
+
* Used by server for SSR and can be used client-side.
|
|
6
|
+
*/
|
|
7
|
+
import * as React from 'react';
|
|
8
|
+
import type { Metadata } from './types';
|
|
9
|
+
export interface MetadataRendererProps {
|
|
10
|
+
metadata: Metadata;
|
|
11
|
+
parentTemplate?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Renders metadata as React head elements.
|
|
15
|
+
* Returns an array of elements to be placed in <head>.
|
|
16
|
+
*/
|
|
17
|
+
export declare function MetadataRenderer({ metadata, parentTemplate }: MetadataRendererProps): React.ReactElement;
|
|
18
|
+
/**
|
|
19
|
+
* Converts metadata to HTML string for SSR injection.
|
|
20
|
+
*/
|
|
21
|
+
export declare function generateMetadataHtml(metadata: Metadata, parentTemplate?: string): string;
|
|
22
|
+
export default MetadataRenderer;
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MetadataRenderer = MetadataRenderer;
|
|
4
|
+
exports.generateMetadataHtml = generateMetadataHtml;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Helper Functions
|
|
8
|
+
// ============================================================================
|
|
9
|
+
function resolveTitle(title, template) {
|
|
10
|
+
if (!title)
|
|
11
|
+
return null;
|
|
12
|
+
if (typeof title === 'string') {
|
|
13
|
+
if (template) {
|
|
14
|
+
return template.replace('%s', title);
|
|
15
|
+
}
|
|
16
|
+
return title;
|
|
17
|
+
}
|
|
18
|
+
// TemplateString object
|
|
19
|
+
if (title.absolute) {
|
|
20
|
+
return title.absolute;
|
|
21
|
+
}
|
|
22
|
+
const baseTitle = title.default;
|
|
23
|
+
if (title.template) {
|
|
24
|
+
return title.template.replace('%s', baseTitle);
|
|
25
|
+
}
|
|
26
|
+
return baseTitle;
|
|
27
|
+
}
|
|
28
|
+
function resolveUrl(url, base) {
|
|
29
|
+
if (!url)
|
|
30
|
+
return null;
|
|
31
|
+
const urlStr = url.toString();
|
|
32
|
+
if (urlStr.startsWith('http://') || urlStr.startsWith('https://')) {
|
|
33
|
+
return urlStr;
|
|
34
|
+
}
|
|
35
|
+
if (base) {
|
|
36
|
+
return new URL(urlStr, base.toString()).toString();
|
|
37
|
+
}
|
|
38
|
+
return urlStr;
|
|
39
|
+
}
|
|
40
|
+
// ============================================================================
|
|
41
|
+
// Meta Tag Generators
|
|
42
|
+
// ============================================================================
|
|
43
|
+
function generateBasicMeta(metadata) {
|
|
44
|
+
const elements = [];
|
|
45
|
+
// Description
|
|
46
|
+
if (metadata.description) {
|
|
47
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "description", content: metadata.description }, "description"));
|
|
48
|
+
}
|
|
49
|
+
// Application name
|
|
50
|
+
if (metadata.applicationName) {
|
|
51
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "application-name", content: metadata.applicationName }, "application-name"));
|
|
52
|
+
}
|
|
53
|
+
// Generator
|
|
54
|
+
if (metadata.generator) {
|
|
55
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "generator", content: metadata.generator }, "generator"));
|
|
56
|
+
}
|
|
57
|
+
// Keywords
|
|
58
|
+
if (metadata.keywords) {
|
|
59
|
+
const keywords = Array.isArray(metadata.keywords)
|
|
60
|
+
? metadata.keywords.join(', ')
|
|
61
|
+
: metadata.keywords;
|
|
62
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "keywords", content: keywords }, "keywords"));
|
|
63
|
+
}
|
|
64
|
+
// Referrer
|
|
65
|
+
if (metadata.referrer) {
|
|
66
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "referrer", content: metadata.referrer }, "referrer"));
|
|
67
|
+
}
|
|
68
|
+
// Creator
|
|
69
|
+
if (metadata.creator) {
|
|
70
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "creator", content: metadata.creator }, "creator"));
|
|
71
|
+
}
|
|
72
|
+
// Publisher
|
|
73
|
+
if (metadata.publisher) {
|
|
74
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "publisher", content: metadata.publisher }, "publisher"));
|
|
75
|
+
}
|
|
76
|
+
// Category
|
|
77
|
+
if (metadata.category) {
|
|
78
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "category", content: metadata.category }, "category"));
|
|
79
|
+
}
|
|
80
|
+
// Abstract
|
|
81
|
+
if (metadata.abstract) {
|
|
82
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "abstract", content: metadata.abstract }, "abstract"));
|
|
83
|
+
}
|
|
84
|
+
return elements;
|
|
85
|
+
}
|
|
86
|
+
function generateAuthorMeta(authors) {
|
|
87
|
+
if (!authors)
|
|
88
|
+
return [];
|
|
89
|
+
const authorList = Array.isArray(authors) ? authors : [authors];
|
|
90
|
+
const elements = [];
|
|
91
|
+
authorList.forEach((author, index) => {
|
|
92
|
+
if (author.name) {
|
|
93
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "author", content: author.name }, `author-${index}`));
|
|
94
|
+
}
|
|
95
|
+
if (author.url) {
|
|
96
|
+
elements.push((0, jsx_runtime_1.jsx)("link", { rel: "author", href: author.url.toString() }, `author-link-${index}`));
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
return elements;
|
|
100
|
+
}
|
|
101
|
+
function generateRobotsMeta(robots) {
|
|
102
|
+
if (!robots)
|
|
103
|
+
return [];
|
|
104
|
+
if (typeof robots === 'string') {
|
|
105
|
+
return [(0, jsx_runtime_1.jsx)("meta", { name: "robots", content: robots }, "robots")];
|
|
106
|
+
}
|
|
107
|
+
const directives = [];
|
|
108
|
+
if (robots.index !== undefined)
|
|
109
|
+
directives.push(robots.index ? 'index' : 'noindex');
|
|
110
|
+
if (robots.follow !== undefined)
|
|
111
|
+
directives.push(robots.follow ? 'follow' : 'nofollow');
|
|
112
|
+
if (robots.noarchive)
|
|
113
|
+
directives.push('noarchive');
|
|
114
|
+
if (robots.nosnippet)
|
|
115
|
+
directives.push('nosnippet');
|
|
116
|
+
if (robots.noimageindex)
|
|
117
|
+
directives.push('noimageindex');
|
|
118
|
+
if (robots.nocache)
|
|
119
|
+
directives.push('nocache');
|
|
120
|
+
if (robots['max-snippet'] !== undefined)
|
|
121
|
+
directives.push(`max-snippet:${robots['max-snippet']}`);
|
|
122
|
+
if (robots['max-image-preview'])
|
|
123
|
+
directives.push(`max-image-preview:${robots['max-image-preview']}`);
|
|
124
|
+
if (robots['max-video-preview'] !== undefined)
|
|
125
|
+
directives.push(`max-video-preview:${robots['max-video-preview']}`);
|
|
126
|
+
const elements = [];
|
|
127
|
+
if (directives.length > 0) {
|
|
128
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "robots", content: directives.join(', ') }, "robots"));
|
|
129
|
+
}
|
|
130
|
+
// GoogleBot specific
|
|
131
|
+
if (robots.googleBot) {
|
|
132
|
+
if (typeof robots.googleBot === 'string') {
|
|
133
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "googlebot", content: robots.googleBot }, "googlebot"));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return elements;
|
|
137
|
+
}
|
|
138
|
+
function generateOpenGraphMeta(og, base) {
|
|
139
|
+
if (!og)
|
|
140
|
+
return [];
|
|
141
|
+
const elements = [];
|
|
142
|
+
// Type
|
|
143
|
+
if (og.type) {
|
|
144
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { property: "og:type", content: og.type }, "og:type"));
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { property: "og:type", content: "website" }, "og:type"));
|
|
148
|
+
}
|
|
149
|
+
// Title
|
|
150
|
+
if (og.title) {
|
|
151
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { property: "og:title", content: og.title }, "og:title"));
|
|
152
|
+
}
|
|
153
|
+
// Description
|
|
154
|
+
if (og.description) {
|
|
155
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { property: "og:description", content: og.description }, "og:description"));
|
|
156
|
+
}
|
|
157
|
+
// URL
|
|
158
|
+
if (og.url) {
|
|
159
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { property: "og:url", content: resolveUrl(og.url, base) || '' }, "og:url"));
|
|
160
|
+
}
|
|
161
|
+
// Site name
|
|
162
|
+
if (og.siteName) {
|
|
163
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { property: "og:site_name", content: og.siteName }, "og:site_name"));
|
|
164
|
+
}
|
|
165
|
+
// Locale
|
|
166
|
+
if (og.locale) {
|
|
167
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { property: "og:locale", content: og.locale }, "og:locale"));
|
|
168
|
+
}
|
|
169
|
+
// Images
|
|
170
|
+
if (og.images) {
|
|
171
|
+
const images = Array.isArray(og.images) ? og.images : [og.images];
|
|
172
|
+
images.forEach((image, index) => {
|
|
173
|
+
if (typeof image === 'string' || image instanceof URL) {
|
|
174
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { property: "og:image", content: resolveUrl(image, base) || '' }, `og:image:${index}`));
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { property: "og:image", content: resolveUrl(image.url, base) || '' }, `og:image:${index}`));
|
|
178
|
+
if (image.width) {
|
|
179
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { property: "og:image:width", content: String(image.width) }, `og:image:width:${index}`));
|
|
180
|
+
}
|
|
181
|
+
if (image.height) {
|
|
182
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { property: "og:image:height", content: String(image.height) }, `og:image:height:${index}`));
|
|
183
|
+
}
|
|
184
|
+
if (image.alt) {
|
|
185
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { property: "og:image:alt", content: image.alt }, `og:image:alt:${index}`));
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
return elements;
|
|
191
|
+
}
|
|
192
|
+
function generateTwitterMeta(twitter) {
|
|
193
|
+
if (!twitter)
|
|
194
|
+
return [];
|
|
195
|
+
const elements = [];
|
|
196
|
+
// Card type
|
|
197
|
+
if (twitter.card) {
|
|
198
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "twitter:card", content: twitter.card }, "twitter:card"));
|
|
199
|
+
}
|
|
200
|
+
// Site
|
|
201
|
+
if (twitter.site) {
|
|
202
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "twitter:site", content: twitter.site }, "twitter:site"));
|
|
203
|
+
}
|
|
204
|
+
// Creator
|
|
205
|
+
if (twitter.creator) {
|
|
206
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "twitter:creator", content: twitter.creator }, "twitter:creator"));
|
|
207
|
+
}
|
|
208
|
+
// Title
|
|
209
|
+
if (twitter.title) {
|
|
210
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "twitter:title", content: twitter.title }, "twitter:title"));
|
|
211
|
+
}
|
|
212
|
+
// Description
|
|
213
|
+
if (twitter.description) {
|
|
214
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "twitter:description", content: twitter.description }, "twitter:description"));
|
|
215
|
+
}
|
|
216
|
+
// Images
|
|
217
|
+
if (twitter.images) {
|
|
218
|
+
const images = Array.isArray(twitter.images) ? twitter.images : [twitter.images];
|
|
219
|
+
images.forEach((image, index) => {
|
|
220
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "twitter:image", content: image.toString() }, `twitter:image:${index}`));
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
return elements;
|
|
224
|
+
}
|
|
225
|
+
function generateIconLinks(icons) {
|
|
226
|
+
if (!icons)
|
|
227
|
+
return [];
|
|
228
|
+
const elements = [];
|
|
229
|
+
const addIcon = (icon, rel = 'icon', index = 0) => {
|
|
230
|
+
if (typeof icon === 'string' || icon instanceof URL) {
|
|
231
|
+
elements.push((0, jsx_runtime_1.jsx)("link", { rel: rel, href: icon.toString() }, `${rel}-${index}`));
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
elements.push((0, jsx_runtime_1.jsx)("link", { rel: icon.rel || rel, href: icon.url.toString(), type: icon.type, sizes: icon.sizes }, `${rel}-${index}`));
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
if (Array.isArray(icons)) {
|
|
238
|
+
icons.forEach((icon, index) => addIcon(icon, 'icon', index));
|
|
239
|
+
}
|
|
240
|
+
else if (typeof icons === 'string' || icons instanceof URL) {
|
|
241
|
+
addIcon(icons);
|
|
242
|
+
}
|
|
243
|
+
else if ('url' in icons) {
|
|
244
|
+
// Single IconDescriptor
|
|
245
|
+
addIcon(icons);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
// Icons object
|
|
249
|
+
const iconsObj = icons;
|
|
250
|
+
if (iconsObj.icon) {
|
|
251
|
+
const iconList = Array.isArray(iconsObj.icon) ? iconsObj.icon : [iconsObj.icon];
|
|
252
|
+
iconList.forEach((icon, index) => addIcon(icon, 'icon', index));
|
|
253
|
+
}
|
|
254
|
+
if (iconsObj.shortcut) {
|
|
255
|
+
const shortcutList = Array.isArray(iconsObj.shortcut) ? iconsObj.shortcut : [iconsObj.shortcut];
|
|
256
|
+
shortcutList.forEach((icon, index) => addIcon(icon, 'shortcut icon', index));
|
|
257
|
+
}
|
|
258
|
+
if (iconsObj.apple) {
|
|
259
|
+
const appleList = Array.isArray(iconsObj.apple) ? iconsObj.apple : [iconsObj.apple];
|
|
260
|
+
appleList.forEach((icon, index) => addIcon(icon, 'apple-touch-icon', index));
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return elements;
|
|
264
|
+
}
|
|
265
|
+
function generateVerificationMeta(verification) {
|
|
266
|
+
if (!verification)
|
|
267
|
+
return [];
|
|
268
|
+
const elements = [];
|
|
269
|
+
if (verification.google) {
|
|
270
|
+
const values = Array.isArray(verification.google) ? verification.google : [verification.google];
|
|
271
|
+
values.forEach((value, index) => {
|
|
272
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "google-site-verification", content: value }, `google-site-verification-${index}`));
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
if (verification.yandex) {
|
|
276
|
+
const values = Array.isArray(verification.yandex) ? verification.yandex : [verification.yandex];
|
|
277
|
+
values.forEach((value, index) => {
|
|
278
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "yandex-verification", content: value }, `yandex-verification-${index}`));
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
if (verification.bing) {
|
|
282
|
+
const values = Array.isArray(verification.bing) ? verification.bing : [verification.bing];
|
|
283
|
+
values.forEach((value, index) => {
|
|
284
|
+
elements.push((0, jsx_runtime_1.jsx)("meta", { name: "msvalidate.01", content: value }, `msvalidate.01-${index}`));
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
return elements;
|
|
288
|
+
}
|
|
289
|
+
function generateAlternateLinks(alternates, base) {
|
|
290
|
+
if (!alternates)
|
|
291
|
+
return [];
|
|
292
|
+
const elements = [];
|
|
293
|
+
// Canonical
|
|
294
|
+
if (alternates.canonical) {
|
|
295
|
+
elements.push((0, jsx_runtime_1.jsx)("link", { rel: "canonical", href: resolveUrl(alternates.canonical, base) || '' }, "canonical"));
|
|
296
|
+
}
|
|
297
|
+
// Language alternates
|
|
298
|
+
if (alternates.languages) {
|
|
299
|
+
Object.entries(alternates.languages).forEach(([lang, url]) => {
|
|
300
|
+
const urls = Array.isArray(url) ? url : [url];
|
|
301
|
+
urls.forEach((u, index) => {
|
|
302
|
+
elements.push((0, jsx_runtime_1.jsx)("link", { rel: "alternate", hrefLang: lang, href: resolveUrl(u, base) || '' }, `alternate-${lang}-${index}`));
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
return elements;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Renders metadata as React head elements.
|
|
310
|
+
* Returns an array of elements to be placed in <head>.
|
|
311
|
+
*/
|
|
312
|
+
function MetadataRenderer({ metadata, parentTemplate }) {
|
|
313
|
+
const base = metadata.metadataBase;
|
|
314
|
+
const title = resolveTitle(metadata.title, parentTemplate);
|
|
315
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [title && (0, jsx_runtime_1.jsx)("title", { children: title }), generateBasicMeta(metadata), generateAuthorMeta(metadata.authors), generateRobotsMeta(metadata.robots), generateOpenGraphMeta(metadata.openGraph, base), generateTwitterMeta(metadata.twitter), generateIconLinks(metadata.icons), generateVerificationMeta(metadata.verification), generateAlternateLinks(metadata.alternates, base), metadata.manifest && ((0, jsx_runtime_1.jsx)("link", { rel: "manifest", href: resolveUrl(metadata.manifest, base) || '' }))] }));
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Converts metadata to HTML string for SSR injection.
|
|
319
|
+
*/
|
|
320
|
+
function generateMetadataHtml(metadata, parentTemplate) {
|
|
321
|
+
const { renderToStaticMarkup } = require('react-dom/server');
|
|
322
|
+
return renderToStaticMarkup((0, jsx_runtime_1.jsx)(MetadataRenderer, { metadata: metadata, parentTemplate: parentTemplate }));
|
|
323
|
+
}
|
|
324
|
+
exports.default = MetadataRenderer;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Vista Metadata Module
|
|
4
|
+
*
|
|
5
|
+
* Re-exports all metadata-related types and utilities.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.generateMetadataHtml = exports.MetadataRenderer = void 0;
|
|
23
|
+
__exportStar(require("./types"), exports);
|
|
24
|
+
var generate_1 = require("./generate");
|
|
25
|
+
Object.defineProperty(exports, "MetadataRenderer", { enumerable: true, get: function () { return generate_1.MetadataRenderer; } });
|
|
26
|
+
Object.defineProperty(exports, "generateMetadataHtml", { enumerable: true, get: function () { return generate_1.generateMetadataHtml; } });
|