toiljs 0.0.76 → 0.0.77
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/CHANGELOG.md +11 -0
- package/build/client/.tsbuildinfo +1 -1
- package/build/client/components/Image.js +13 -5
- package/build/client/head/head.d.ts +0 -1
- package/build/client/head/head.js +1 -7
- package/build/client/head/metadata.d.ts +0 -1
- package/build/client/head/metadata.js +1 -1
- package/build/compiler/.tsbuildinfo +1 -1
- package/build/compiler/generate.js +1 -0
- package/build/compiler/template-build.js +7 -0
- package/build/compiler/toil-docs.generated.js +1 -1
- package/docs/client.md +0 -1
- package/examples/basic/client/layout.tsx +2 -4
- package/examples/basic/client/routes/about.tsx +2 -2
- package/examples/basic/client/routes/features/seo.tsx +0 -5
- package/examples/basic/client/routes/index.tsx +1 -3
- package/package.json +1 -1
- package/src/client/components/Image.tsx +41 -16
- package/src/client/head/head.ts +4 -12
- package/src/client/head/metadata.ts +1 -3
- package/src/compiler/generate.ts +1 -0
- package/src/compiler/template-build.ts +16 -0
- package/src/compiler/toil-docs.generated.ts +1 -1
- package/test/dom/Image.test.tsx +15 -3
- package/test/dom/route-head.test.tsx +5 -27
- package/test/head.test.ts +1 -4
- package/test/metadata.test.ts +0 -2
|
@@ -32,22 +32,12 @@ describe('route head (metadata baseline)', () => {
|
|
|
32
32
|
expect(desc()).toBe('route desc');
|
|
33
33
|
});
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
function LayoutDefaults() {
|
|
37
|
-
useHead({ titleTemplate: '%s · toiljs' });
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
render(<LayoutDefaults />);
|
|
41
|
-
setRouteHead(resolveMetadata({ title: 'About' }));
|
|
42
|
-
expect(document.title).toBe('About · toiljs');
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
// Regression for the "metadata title doesn't update" report: a real layout (title + template)
|
|
35
|
+
// Regression for the "metadata title doesn't update" report: a real layout (title default)
|
|
46
36
|
// plus a route's full `metadata` (the exact shape users write) must land on the route's title,
|
|
47
|
-
//
|
|
48
|
-
it('applies a full route metadata over a layout title
|
|
37
|
+
// with the route's og:title applied too.
|
|
38
|
+
it('applies a full route metadata over a layout title default', () => {
|
|
49
39
|
function LayoutDefaults() {
|
|
50
|
-
useHead({
|
|
40
|
+
useHead({ title: 'ToilJS' });
|
|
51
41
|
return null;
|
|
52
42
|
}
|
|
53
43
|
render(<LayoutDefaults />);
|
|
@@ -58,21 +48,9 @@ describe('route head (metadata baseline)', () => {
|
|
|
58
48
|
openGraph: { title: 'useReducer | React Hooks', type: 'website' },
|
|
59
49
|
}),
|
|
60
50
|
);
|
|
61
|
-
expect(document.title).toBe('useReducer | React Hooks
|
|
51
|
+
expect(document.title).toBe('useReducer | React Hooks');
|
|
62
52
|
expect(
|
|
63
53
|
document.head.querySelector('meta[property="og:title"]')?.getAttribute('content'),
|
|
64
54
|
).toBe('useReducer | React Hooks');
|
|
65
55
|
});
|
|
66
|
-
|
|
67
|
-
// A route can opt out of the layout's template by setting its own `titleTemplate: '%s'`, so the
|
|
68
|
-
// tab reads exactly the route title with no site suffix.
|
|
69
|
-
it("lets a route override the layout template with its own '%s'", () => {
|
|
70
|
-
function LayoutDefaults() {
|
|
71
|
-
useHead({ titleTemplate: '%s | ToilJS', title: 'ToilJS' });
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
render(<LayoutDefaults />);
|
|
75
|
-
setRouteHead(resolveMetadata({ title: 'useReducer | React Hooks', titleTemplate: '%s' }));
|
|
76
|
-
expect(document.title).toBe('useReducer | React Hooks');
|
|
77
|
-
});
|
|
78
56
|
});
|
package/test/head.test.ts
CHANGED
|
@@ -3,12 +3,9 @@ import { describe, expect, it } from 'vitest';
|
|
|
3
3
|
import { mergeHead } from '../src/client/head/head';
|
|
4
4
|
|
|
5
5
|
describe('mergeHead', () => {
|
|
6
|
-
it('takes the last title
|
|
6
|
+
it('takes the last title', () => {
|
|
7
7
|
expect(mergeHead([{ title: 'Home' }]).title).toBe('Home');
|
|
8
8
|
expect(mergeHead([{ title: 'A' }, { title: 'B' }]).title).toBe('B');
|
|
9
|
-
expect(mergeHead([{ titleTemplate: '%s · toiljs' }, { title: 'About' }]).title).toBe(
|
|
10
|
-
'About · toiljs',
|
|
11
|
-
);
|
|
12
9
|
});
|
|
13
10
|
|
|
14
11
|
it('leaves title undefined when nothing sets it', () => {
|
package/test/metadata.test.ts
CHANGED
|
@@ -6,7 +6,6 @@ describe('resolveMetadata', () => {
|
|
|
6
6
|
it('expands convenience fields into meta/link tags', () => {
|
|
7
7
|
const head = resolveMetadata({
|
|
8
8
|
title: 'About',
|
|
9
|
-
titleTemplate: '%s · toiljs',
|
|
10
9
|
description: 'desc',
|
|
11
10
|
keywords: ['a', 'b'],
|
|
12
11
|
robots: 'noindex',
|
|
@@ -16,7 +15,6 @@ describe('resolveMetadata', () => {
|
|
|
16
15
|
});
|
|
17
16
|
|
|
18
17
|
expect(head.title).toBe('About');
|
|
19
|
-
expect(head.titleTemplate).toBe('%s · toiljs');
|
|
20
18
|
const byName = (name: string) => head.meta?.find((m) => m.name === name)?.content;
|
|
21
19
|
const byProp = (property: string) =>
|
|
22
20
|
head.meta?.find((m) => m.property === property)?.content;
|