veryfront 0.1.1133 → 0.1.1135
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/esm/deno.js +1 -1
- package/esm/src/react/head-collector.d.ts.map +1 -1
- package/esm/src/react/head-collector.js +74 -2
- package/esm/src/react/runtime/core.d.ts.map +1 -1
- package/esm/src/react/runtime/core.js +24 -6
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +5 -5
package/esm/deno.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"head-collector.d.ts","sourceRoot":"","sources":["../../../src/src/react/head-collector.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,UAAU,UAAU;IAClB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,8DAA8D;IAC9D,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,eAAO,MAAM,qBAAqB,eAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"head-collector.d.ts","sourceRoot":"","sources":["../../../src/src/react/head-collector.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,UAAU,UAAU;IAClB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,8DAA8D;IAC9D,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,eAAO,MAAM,qBAAqB,eAA6C,CAAC;AAiEhF,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,OAAO,CAAC;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC,CAI7C;AAED,wBAAgB,uBAAuB,IAAI,aAAa,GAAG,IAAI,CAE9D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CA8C9D;AAID,wBAAgB,gBAAgB,IAAI,OAAO,CAY1C;AAWD,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAED,wBAAgB,kBAAkB,IAAI,aAAa,CAclD"}
|
|
@@ -11,6 +11,57 @@
|
|
|
11
11
|
import * as dntShim from "../../_dnt.shims.js";
|
|
12
12
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
13
13
|
export const HEAD_COLLECTOR_SYMBOL = Symbol.for("veryfront.react.collect-head");
|
|
14
|
+
/**
|
|
15
|
+
* Head tags that are single-valued per the HTML / Open Graph / Twitter-card
|
|
16
|
+
* specs — a document has exactly one canonical URL, one title, one `og:title`,
|
|
17
|
+
* one robots directive, and so on. For these keys a later (page) tag overrides
|
|
18
|
+
* an earlier (layout) tag with the same key, honouring the documented
|
|
19
|
+
* page-over-layout contract.
|
|
20
|
+
*
|
|
21
|
+
* Every *other* tag accumulates, and accumulate is the deliberate safe default:
|
|
22
|
+
* `rel` values and OG property namespaces are open-ended and full of
|
|
23
|
+
* legitimately-repeatable tags (`og:image`, `<link rel="preload">`, `hreflang`
|
|
24
|
+
* alternates, `rel="me"`, the vertical `article:` / `video:` / `music:`
|
|
25
|
+
* namespaces). Mis-classifying an unlisted key as single-valued would silently
|
|
26
|
+
* drop valid metadata; mis-classifying an unlisted single-valued key as
|
|
27
|
+
* repeatable merely leaves a duplicate — the pre-existing behaviour, never data
|
|
28
|
+
* loss. So we enumerate the small, closed singleton set and default the
|
|
29
|
+
* open-ended rest to accumulate.
|
|
30
|
+
*/
|
|
31
|
+
const SINGLETON_META_KEYS = new Set([
|
|
32
|
+
// Standard HTML metas
|
|
33
|
+
"description",
|
|
34
|
+
"robots",
|
|
35
|
+
"viewport",
|
|
36
|
+
"referrer",
|
|
37
|
+
"color-scheme",
|
|
38
|
+
"application-name",
|
|
39
|
+
"generator",
|
|
40
|
+
// Open Graph — single-valued core
|
|
41
|
+
"og:title",
|
|
42
|
+
"og:description",
|
|
43
|
+
"og:url",
|
|
44
|
+
"og:type",
|
|
45
|
+
"og:site_name",
|
|
46
|
+
"og:locale",
|
|
47
|
+
// Twitter cards — one per document
|
|
48
|
+
"twitter:card",
|
|
49
|
+
"twitter:site",
|
|
50
|
+
"twitter:creator",
|
|
51
|
+
"twitter:title",
|
|
52
|
+
"twitter:description",
|
|
53
|
+
"twitter:image",
|
|
54
|
+
"twitter:image:alt",
|
|
55
|
+
]);
|
|
56
|
+
const SINGLETON_LINK_RELS = new Set([
|
|
57
|
+
"canonical",
|
|
58
|
+
"manifest",
|
|
59
|
+
"amphtml",
|
|
60
|
+
]);
|
|
61
|
+
/** The dedupe key for a meta: `property` (og/twitter) or `name`, else none. */
|
|
62
|
+
function metaKey(meta) {
|
|
63
|
+
return meta.property ?? meta.name ?? undefined;
|
|
64
|
+
}
|
|
14
65
|
function createEmpty() {
|
|
15
66
|
return { metas: [], links: [], styles: [], scripts: [] };
|
|
16
67
|
}
|
|
@@ -36,10 +87,31 @@ export function collectHead(data) {
|
|
|
36
87
|
if (meta.name === "description" && meta.content) {
|
|
37
88
|
collected.description = meta.content;
|
|
38
89
|
}
|
|
90
|
+
const key = metaKey(meta);
|
|
91
|
+
// Single-valued keys override the earlier (layout) tag; every other key
|
|
92
|
+
// (and keyless metas) accumulates.
|
|
93
|
+
if (key && SINGLETON_META_KEYS.has(key)) {
|
|
94
|
+
const idx = collected.metas.findIndex((m) => metaKey(m) === key);
|
|
95
|
+
if (idx !== -1) {
|
|
96
|
+
collected.metas[idx] = meta;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
39
100
|
collected.metas.push(meta);
|
|
40
101
|
}
|
|
41
|
-
|
|
42
|
-
|
|
102
|
+
for (const link of data.links ?? []) {
|
|
103
|
+
const rel = link.rel;
|
|
104
|
+
// A single-valued `rel` (canonical, manifest, …) overrides the earlier
|
|
105
|
+
// tag; every other rel (stylesheet, preload, icon, alternate, …) accumulates.
|
|
106
|
+
if (rel && SINGLETON_LINK_RELS.has(rel)) {
|
|
107
|
+
const idx = collected.links.findIndex((l) => l.rel === rel);
|
|
108
|
+
if (idx !== -1) {
|
|
109
|
+
collected.links[idx] = link;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
collected.links.push(link);
|
|
114
|
+
}
|
|
43
115
|
if (data.styles?.length)
|
|
44
116
|
collected.styles.push(...data.styles);
|
|
45
117
|
for (const script of data.scripts ?? []) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/src/react/runtime/core.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/src/react/runtime/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -231,13 +231,33 @@ export function PageContextProvider({ children, pageContext, }) {
|
|
|
231
231
|
export function usePageContext() {
|
|
232
232
|
return React.useContext(PageContextContext);
|
|
233
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Flattens `Head` children into host elements, unwrapping React fragments so
|
|
236
|
+
* `<Head><>…</></Head>` behaves like direct children — matching React's
|
|
237
|
+
* transparent-fragment semantics. `React.Children` already flattens arrays
|
|
238
|
+
* (so `.map()` works), but passes a fragment through as a single element whose
|
|
239
|
+
* `type` is `Symbol(react.fragment)`, which matched none of the tag branches
|
|
240
|
+
* and was silently dropped.
|
|
241
|
+
*/
|
|
242
|
+
function flattenHeadChildren(children) {
|
|
243
|
+
const out = [];
|
|
244
|
+
React.Children.forEach(children, (child) => {
|
|
245
|
+
if (!React.isValidElement(child))
|
|
246
|
+
return;
|
|
247
|
+
if (child.type === React.Fragment) {
|
|
248
|
+
const nested = child.props.children;
|
|
249
|
+
out.push(...flattenHeadChildren(nested));
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
out.push(child);
|
|
253
|
+
});
|
|
254
|
+
return out;
|
|
255
|
+
}
|
|
234
256
|
/** Applies document head elements during SSR and client rendering. */
|
|
235
257
|
export function Head({ children }) {
|
|
236
258
|
const isSSR = isServerEnvironment();
|
|
237
259
|
if (isSSR && children) {
|
|
238
|
-
|
|
239
|
-
if (!React.isValidElement(child))
|
|
240
|
-
return;
|
|
260
|
+
flattenHeadChildren(children).forEach((child) => {
|
|
241
261
|
const { type } = child;
|
|
242
262
|
const props = child.props;
|
|
243
263
|
if (typeof type !== "string" || type === "body")
|
|
@@ -294,9 +314,7 @@ export function Head({ children }) {
|
|
|
294
314
|
return;
|
|
295
315
|
const addedElements = [];
|
|
296
316
|
const nonce = getDocumentNonce();
|
|
297
|
-
|
|
298
|
-
if (!React.isValidElement(child))
|
|
299
|
-
return;
|
|
317
|
+
flattenHeadChildren(children).forEach((child) => {
|
|
300
318
|
const { type } = child;
|
|
301
319
|
const props = child.props;
|
|
302
320
|
if (typeof type !== "string" || type === "body")
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "veryfront",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1135",
|
|
4
4
|
"description": "The simplest way to build AI-powered apps",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -332,10 +332,10 @@
|
|
|
332
332
|
"@types/react": "19.2.14",
|
|
333
333
|
"@types/react-dom": "19.2.3",
|
|
334
334
|
"ws": "8.21.0",
|
|
335
|
-
"@veryfront/ext-bundler-esbuild": "0.1.
|
|
336
|
-
"@veryfront/ext-content-mdx": "0.1.
|
|
337
|
-
"@veryfront/ext-css-tailwind": "0.1.
|
|
338
|
-
"@veryfront/ext-parser-babel": "0.1.
|
|
335
|
+
"@veryfront/ext-bundler-esbuild": "0.1.1135",
|
|
336
|
+
"@veryfront/ext-content-mdx": "0.1.1135",
|
|
337
|
+
"@veryfront/ext-css-tailwind": "0.1.1135",
|
|
338
|
+
"@veryfront/ext-parser-babel": "0.1.1135"
|
|
339
339
|
},
|
|
340
340
|
"devDependencies": {
|
|
341
341
|
"@types/node": "20.9.0"
|