@jjlmoya/utils-converters 1.25.0 → 1.26.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.
Files changed (133) hide show
  1. package/package.json +2 -2
  2. package/src/category/i18n/de.ts +1 -1
  3. package/src/category/i18n/en.ts +1 -1
  4. package/src/category/i18n/fr.ts +1 -1
  5. package/src/category/i18n/id.ts +1 -1
  6. package/src/category/i18n/it.ts +1 -1
  7. package/src/category/i18n/nl.ts +1 -1
  8. package/src/category/i18n/pl.ts +1 -1
  9. package/src/category/i18n/pt.ts +1 -1
  10. package/src/category/i18n/sv.ts +1 -1
  11. package/src/tests/bibliography_wellformed_export.test.ts +46 -0
  12. package/src/tests/category_seo_quality.test.ts +74 -0
  13. package/src/tests/faq_count.test.ts +1 -1
  14. package/src/tests/no_h1_in_components.test.ts +1 -1
  15. package/src/tests/seo_parity.test.ts +2 -2
  16. package/src/tests/seo_wellformed_export.test.ts +65 -0
  17. package/src/tests/tool_validation.test.ts +15 -15
  18. package/src/tool/avifAJpg/i18n/en.ts +164 -164
  19. package/src/tool/avifAJpg/i18n/es.ts +164 -164
  20. package/src/tool/avifAJpg/i18n/fr.ts +164 -164
  21. package/src/tool/avifAJpg/i18n/ja.ts +166 -166
  22. package/src/tool/avifAJpg/i18n/ko.ts +166 -166
  23. package/src/tool/avifAJpg/i18n/zh.ts +166 -166
  24. package/src/tool/avifAJpg/seo.astro +15 -15
  25. package/src/tool/avifAPng/i18n/en.ts +164 -164
  26. package/src/tool/avifAPng/i18n/es.ts +164 -164
  27. package/src/tool/avifAPng/i18n/fr.ts +164 -164
  28. package/src/tool/avifAPng/i18n/ja.ts +166 -166
  29. package/src/tool/avifAPng/i18n/ko.ts +166 -166
  30. package/src/tool/avifAPng/i18n/zh.ts +166 -166
  31. package/src/tool/avifAPng/seo.astro +15 -15
  32. package/src/tool/avifAWebp/i18n/en.ts +164 -164
  33. package/src/tool/avifAWebp/i18n/es.ts +164 -164
  34. package/src/tool/avifAWebp/i18n/fr.ts +164 -164
  35. package/src/tool/avifAWebp/i18n/ja.ts +166 -166
  36. package/src/tool/avifAWebp/i18n/ko.ts +166 -166
  37. package/src/tool/avifAWebp/i18n/zh.ts +166 -166
  38. package/src/tool/avifAWebp/seo.astro +15 -15
  39. package/src/tool/bmpAJpg/i18n/en.ts +164 -164
  40. package/src/tool/bmpAJpg/i18n/es.ts +164 -164
  41. package/src/tool/bmpAJpg/i18n/fr.ts +164 -164
  42. package/src/tool/bmpAJpg/i18n/ja.ts +166 -166
  43. package/src/tool/bmpAJpg/i18n/ko.ts +166 -166
  44. package/src/tool/bmpAJpg/i18n/zh.ts +166 -166
  45. package/src/tool/bmpAJpg/seo.astro +15 -15
  46. package/src/tool/bmpAPng/i18n/en.ts +164 -164
  47. package/src/tool/bmpAPng/i18n/es.ts +164 -164
  48. package/src/tool/bmpAPng/i18n/fr.ts +164 -164
  49. package/src/tool/bmpAPng/i18n/ja.ts +165 -165
  50. package/src/tool/bmpAPng/i18n/ko.ts +165 -165
  51. package/src/tool/bmpAPng/i18n/zh.ts +165 -165
  52. package/src/tool/bmpAPng/seo.astro +15 -15
  53. package/src/tool/bmpAWebp/i18n/en.ts +164 -164
  54. package/src/tool/bmpAWebp/i18n/es.ts +164 -164
  55. package/src/tool/bmpAWebp/i18n/fr.ts +164 -164
  56. package/src/tool/bmpAWebp/i18n/ja.ts +166 -166
  57. package/src/tool/bmpAWebp/i18n/ko.ts +166 -166
  58. package/src/tool/bmpAWebp/i18n/zh.ts +166 -166
  59. package/src/tool/bmpAWebp/seo.astro +15 -15
  60. package/src/tool/gifAJpg/i18n/en.ts +164 -164
  61. package/src/tool/gifAJpg/i18n/es.ts +164 -164
  62. package/src/tool/gifAJpg/i18n/fr.ts +164 -164
  63. package/src/tool/gifAJpg/i18n/ja.ts +166 -166
  64. package/src/tool/gifAJpg/i18n/ko.ts +166 -166
  65. package/src/tool/gifAJpg/i18n/zh.ts +166 -166
  66. package/src/tool/gifAJpg/seo.astro +15 -15
  67. package/src/tool/gifAPng/i18n/en.ts +164 -164
  68. package/src/tool/gifAPng/i18n/es.ts +164 -164
  69. package/src/tool/gifAPng/i18n/fr.ts +164 -164
  70. package/src/tool/gifAPng/i18n/ja.ts +166 -166
  71. package/src/tool/gifAPng/i18n/ko.ts +166 -166
  72. package/src/tool/gifAPng/i18n/zh.ts +166 -166
  73. package/src/tool/gifAPng/seo.astro +15 -15
  74. package/src/tool/gifAWebp/i18n/en.ts +164 -164
  75. package/src/tool/gifAWebp/i18n/es.ts +164 -164
  76. package/src/tool/gifAWebp/i18n/fr.ts +164 -164
  77. package/src/tool/gifAWebp/i18n/ja.ts +166 -166
  78. package/src/tool/gifAWebp/i18n/ko.ts +166 -166
  79. package/src/tool/gifAWebp/i18n/zh.ts +166 -166
  80. package/src/tool/gifAWebp/seo.astro +15 -15
  81. package/src/tool/imagenBase64/i18n/en.ts +154 -154
  82. package/src/tool/imagenBase64/i18n/es.ts +154 -154
  83. package/src/tool/imagenBase64/i18n/fr.ts +154 -154
  84. package/src/tool/imagenBase64/seo.astro +15 -15
  85. package/src/tool/jpgAIco/seo.astro +15 -15
  86. package/src/tool/jpgAPng/i18n/en.ts +164 -164
  87. package/src/tool/jpgAPng/i18n/es.ts +164 -164
  88. package/src/tool/jpgAPng/i18n/fr.ts +164 -164
  89. package/src/tool/jpgAPng/i18n/ja.ts +166 -166
  90. package/src/tool/jpgAPng/i18n/ko.ts +166 -166
  91. package/src/tool/jpgAPng/i18n/zh.ts +166 -166
  92. package/src/tool/jpgAPng/seo.astro +15 -15
  93. package/src/tool/jpgAWebp/i18n/en.ts +164 -164
  94. package/src/tool/jpgAWebp/i18n/es.ts +164 -164
  95. package/src/tool/jpgAWebp/i18n/fr.ts +164 -164
  96. package/src/tool/jpgAWebp/seo.astro +15 -15
  97. package/src/tool/pngAIco/seo.astro +15 -15
  98. package/src/tool/pngAJpg/i18n/de.ts +21 -21
  99. package/src/tool/pngAJpg/i18n/es.ts +177 -177
  100. package/src/tool/pngAJpg/i18n/fr.ts +137 -137
  101. package/src/tool/pngAJpg/i18n/id.ts +89 -89
  102. package/src/tool/pngAJpg/i18n/it.ts +89 -89
  103. package/src/tool/pngAJpg/i18n/ko.ts +177 -177
  104. package/src/tool/pngAJpg/i18n/nl.ts +20 -20
  105. package/src/tool/pngAJpg/i18n/pl.ts +89 -89
  106. package/src/tool/pngAJpg/i18n/pt.ts +89 -89
  107. package/src/tool/pngAJpg/i18n/ru.ts +177 -177
  108. package/src/tool/pngAJpg/i18n/sv.ts +89 -89
  109. package/src/tool/pngAJpg/i18n/tr.ts +89 -89
  110. package/src/tool/pngAJpg/seo.astro +15 -15
  111. package/src/tool/pngAWebp/i18n/en.ts +164 -164
  112. package/src/tool/pngAWebp/i18n/es.ts +164 -164
  113. package/src/tool/pngAWebp/i18n/fr.ts +164 -164
  114. package/src/tool/pngAWebp/seo.astro +15 -15
  115. package/src/tool/svgAJpg/i18n/fr.ts +164 -164
  116. package/src/tool/svgAJpg/seo.astro +15 -15
  117. package/src/tool/svgAPng/i18n/fr.ts +164 -164
  118. package/src/tool/svgAPng/seo.astro +15 -15
  119. package/src/tool/webpAIco/seo.astro +15 -15
  120. package/src/tool/webpAJpg/seo.astro +15 -15
  121. package/src/tool/webpAPng/bibliography.ts +13 -13
  122. package/src/tool/webpAPng/i18n/de.ts +166 -166
  123. package/src/tool/webpAPng/i18n/es.ts +171 -171
  124. package/src/tool/webpAPng/i18n/fr.ts +166 -166
  125. package/src/tool/webpAPng/i18n/id.ts +166 -166
  126. package/src/tool/webpAPng/i18n/it.ts +166 -166
  127. package/src/tool/webpAPng/i18n/nl.ts +166 -166
  128. package/src/tool/webpAPng/i18n/pl.ts +166 -166
  129. package/src/tool/webpAPng/i18n/pt.ts +166 -166
  130. package/src/tool/webpAPng/i18n/ru.ts +166 -166
  131. package/src/tool/webpAPng/i18n/sv.ts +166 -166
  132. package/src/tool/webpAPng/i18n/tr.ts +167 -167
  133. package/src/tool/webpAPng/seo.astro +15 -15
@@ -1,168 +1,168 @@
1
1
  import { bibliography } from '../bibliography';
2
- import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
3
3
  import { generateSchemas } from '../../../shared/logic/schemas';
4
- import type { GifAWebpLocaleContent } from '../index';
5
-
6
- const slug = 'gif-to-webp-converter';
7
- const title = 'Convert GIF to Static WebP';
8
- const description =
9
- 'Convert animated GIFs to static WebP. Preserves transparency. No server. Processed locally in your browser. Free.';
10
-
11
- const ui: ImageConverterUI = {
12
- dragText: 'Drag GIF files...',
13
- convertText: 'To convert them to WebP instantly',
14
- selectFiles: 'Select files',
15
- processedFiles: 'Processed files',
16
- downloadAll: 'Download All (.zip)',
4
+ import type { GifAWebpLocaleContent } from '../index';
5
+
6
+ const slug = 'gif-to-webp-converter';
7
+ const title = 'Convert GIF to Static WebP';
8
+ const description =
9
+ 'Convert animated GIFs to static WebP. Preserves transparency. No server. Processed locally in your browser. Free.';
10
+
11
+ const ui: ImageConverterUI = {
12
+ dragText: 'Drag GIF files...',
13
+ convertText: 'To convert them to WebP instantly',
14
+ selectFiles: 'Select files',
15
+ processedFiles: 'Processed files',
16
+ downloadAll: 'Download All (.zip)',
17
17
  pending: 'Pending',
18
- bibliographyTitle: 'Bibliographic References',
19
- faqTitle: 'Frequently Asked Questions',
20
- };
21
-
22
- const faq: GifAWebpLocaleContent['faq'] = [
23
- {
24
- question: 'Why freeze an animated file to modern static WebP format?',
25
- answer:
26
- 'WebP is Google\'s compression standard; it is remarkably lightweight and retains transparency cleanly. Moving from GIF to WebP eliminates the heavy animation and achieves an abysmal gain in web speed.',
27
- },
28
- {
29
- question: 'Will the original avatar remain transparent?',
30
- answer:
31
- 'Yes, unlike JPEG, the WebP container respects the complex Alpha channel. All its silhouettes will remain perfect as they were natively.',
32
- },
33
- {
34
- question: 'Where will files be uploaded to?',
35
- answer:
36
- 'There is no upload. Processing is performed entirely by the browser\'s Javascript on your PC, with zero remote sending.',
37
- },
38
- ];
39
-
40
- const howTo: GifAWebpLocaleContent['howTo'] = [
41
- {
42
- name: 'Launch an animated avalanche',
43
- text: 'Move and drop dozens of memes to the delimited zone without remote connection.',
44
- },
45
- {
46
- name: 'Witness the great invisible change',
47
- text: 'Watch a progressive indicator change at each millisecond as the local canvas decoder generates the output.',
48
- },
49
- {
50
- name: 'Compress or save your clean resulting arsenal',
51
- text: 'Take the extracted files individually or press Download Zip to package everything.',
52
- },
53
- ];
54
-
55
- const seo: GifAWebpLocaleContent['seo'] = [
56
- {
57
- type: 'title',
58
- text: 'GIF to WebP Converter: The Modern Replacement for Heavy Animations',
59
- level: 2,
60
- },
61
- {
62
- type: 'paragraph',
63
- html: 'Animated GIFs are the dinosaurs of modern web content: they consume disproportionate bandwidth, degrade the PageSpeed of any page, and are responsible for a significant percentage of total weight on thousands of websites. A typical 5 MB animated GIF can become a WebP animation under 1 MB with the same visual quality. WebP is the modern successor Google specifically designed to replace GIF on the web.',
64
- },
65
- {
66
- type: 'title',
67
- text: 'GIF vs WebP: the gap between the past and present of the web',
68
- level: 3,
69
- },
70
- {
71
- type: 'paragraph',
72
- html: 'GIF is a 1987 format not originally designed for animations - that feature arrived as a later hack. Its 256-color palette, inefficient compression, and inability to handle audio make it an obsolete format. WebP, developed by Google in 2010, offers superior compression both lossy and lossless, native animation support, and full alpha channel.',
73
- },
74
- {
75
- type: 'paragraph',
76
- html: 'For a web developer, replacing GIFs with WebP on pages can mean a 10-30 point improvement in Google PageSpeed score. Less page weight means better Core Web Vitals, better SEO rankings, and lower bandwidth costs on servers. It is not just an aesthetic improvement - it is a technical architecture decision.',
77
- },
78
- {
79
- type: 'title',
80
- text: 'Architecture Comparison: Local vs Cloud',
81
- level: 3,
82
- },
83
- {
84
- type: 'comparative',
85
- items: [
86
- {
87
- title: 'Cloud Converters',
88
- description: 'Platforms that process your GIFs on remote servers.',
89
- icon: 'mdi:cloud-upload',
90
- pointIcon: 'mdi:close-circle-outline',
91
- points: [
92
- 'Your animations travel over the internet to third-party servers',
93
- 'Waiting time due to network latency on upload and download',
94
- 'Size limits (large GIFs are often rejected)',
95
- 'Risk of file retention and analysis',
96
- ],
97
- },
98
- {
99
- title: 'Our Local Architecture',
100
- description: 'Direct processing on your hardware using Vanilla JS technology.',
101
- icon: 'mdi:laptop-mac',
102
- highlight: true,
103
- points: [
104
- 'The GIF never leaves your device',
105
- 'Instant conversion with no network wait',
106
- 'No size limits: process GIFs of any weight',
107
- 'Total privacy: 0 bytes sent externally',
108
- ],
109
- },
110
- ],
111
- },
112
- {
113
- type: 'title',
114
- text: 'How the local GIF to WebP conversion works',
115
- level: 3,
116
- },
117
- {
118
- type: 'paragraph',
119
- html: 'The local conversion uses the HTML5 Canvas API. The GIF is loaded as a native browser Image element. By drawing it onto a canvas, the graphics engine captures the first animation frame with all its transparency information. The <code>toDataURL(\'image/webp\')</code> method exports the frame as WebP directly in RAM.',
120
- },
121
- {
122
- type: 'paragraph',
123
- html: 'WebP supports full alpha channel, so GIF transparencies are preserved in the resulting WebP without needing to add a background. WebP compression algorithms are significantly more efficient than GIF or PNG, which explains the drastic file size reduction of the final output.',
124
- },
125
- {
126
- type: 'tip',
127
- title: 'Guaranteed PageSpeed improvement',
128
- html: 'A 5 MB animated GIF can become a WebP under 1 MB. If you have GIFs on your website pages, replacing them with WebP can immediately improve your Largest Contentful Paint (LCP) and Total Blocking Time (TBT), directly impacting SEO rankings.',
129
- },
130
- {
131
- type: 'title',
132
- text: 'Use cases and compatibility of the resulting WebP',
133
- level: 3,
134
- },
135
- {
136
- type: 'list',
137
- icon: 'mdi:check-circle',
138
- items: [
139
- 'Replacing GIFs on web pages to improve PageSpeed scores.',
140
- 'Optimized avatars and stickers for Discord, Slack and modern platforms.',
141
- 'Banners and visuals for digital marketing campaigns.',
142
- 'Animations in progressive web applications (PWA).',
143
- 'Compatible with Chrome, Edge, Firefox, Safari 14+ and all modern browsers.',
144
- ],
145
- },
146
- {
147
- type: 'title',
148
- text: 'Conclusion: migrate your GIFs to the 21st century',
149
- level: 3,
150
- },
151
- {
152
- type: 'paragraph',
153
- html: 'Every GIF on your website is a missed optimization opportunity. Our tool converts GIFs to WebP instantly, privately, and without limits, directly in your browser. The result: files up to 5 times smaller, perfect transparency, and compatibility with all modern browsers.',
154
- },
155
- ];
156
-
18
+ bibliographyTitle: 'Bibliographic References',
19
+ faqTitle: 'Frequently Asked Questions',
20
+ };
21
+
22
+ const faq: GifAWebpLocaleContent['faq'] = [
23
+ {
24
+ question: 'Why freeze an animated file to modern static WebP format?',
25
+ answer:
26
+ 'WebP is Google\'s compression standard; it is remarkably lightweight and retains transparency cleanly. Moving from GIF to WebP eliminates the heavy animation and achieves an abysmal gain in web speed.',
27
+ },
28
+ {
29
+ question: 'Will the original avatar remain transparent?',
30
+ answer:
31
+ 'Yes, unlike JPEG, the WebP container respects the complex Alpha channel. All its silhouettes will remain perfect as they were natively.',
32
+ },
33
+ {
34
+ question: 'Where will files be uploaded to?',
35
+ answer:
36
+ 'There is no upload. Processing is performed entirely by the browser\'s Javascript on your PC, with zero remote sending.',
37
+ },
38
+ ];
39
+
40
+ const howTo: GifAWebpLocaleContent['howTo'] = [
41
+ {
42
+ name: 'Launch an animated avalanche',
43
+ text: 'Move and drop dozens of memes to the delimited zone without remote connection.',
44
+ },
45
+ {
46
+ name: 'Witness the great invisible change',
47
+ text: 'Watch a progressive indicator change at each millisecond as the local canvas decoder generates the output.',
48
+ },
49
+ {
50
+ name: 'Compress or save your clean resulting arsenal',
51
+ text: 'Take the extracted files individually or press Download Zip to package everything.',
52
+ },
53
+ ];
54
+
55
+ const seo: GifAWebpLocaleContent['seo'] = [
56
+ {
57
+ type: 'title',
58
+ text: 'GIF to WebP Converter: The Modern Replacement for Heavy Animations',
59
+ level: 2,
60
+ },
61
+ {
62
+ type: 'paragraph',
63
+ html: 'Animated GIFs are the dinosaurs of modern web content: they consume disproportionate bandwidth, degrade the PageSpeed of any page, and are responsible for a significant percentage of total weight on thousands of websites. A typical 5 MB animated GIF can become a WebP animation under 1 MB with the same visual quality. WebP is the modern successor Google specifically designed to replace GIF on the web.',
64
+ },
65
+ {
66
+ type: 'title',
67
+ text: 'GIF vs WebP: the gap between the past and present of the web',
68
+ level: 3,
69
+ },
70
+ {
71
+ type: 'paragraph',
72
+ html: 'GIF is a 1987 format not originally designed for animations - that feature arrived as a later hack. Its 256-color palette, inefficient compression, and inability to handle audio make it an obsolete format. WebP, developed by Google in 2010, offers superior compression both lossy and lossless, native animation support, and full alpha channel.',
73
+ },
74
+ {
75
+ type: 'paragraph',
76
+ html: 'For a web developer, replacing GIFs with WebP on pages can mean a 10-30 point improvement in Google PageSpeed score. Less page weight means better Core Web Vitals, better SEO rankings, and lower bandwidth costs on servers. It is not just an aesthetic improvement - it is a technical architecture decision.',
77
+ },
78
+ {
79
+ type: 'title',
80
+ text: 'Architecture Comparison: Local vs Cloud',
81
+ level: 3,
82
+ },
83
+ {
84
+ type: 'comparative',
85
+ items: [
86
+ {
87
+ title: 'Cloud Converters',
88
+ description: 'Platforms that process your GIFs on remote servers.',
89
+ icon: 'mdi:cloud-upload',
90
+ pointIcon: 'mdi:close-circle-outline',
91
+ points: [
92
+ 'Your animations travel over the internet to third-party servers',
93
+ 'Waiting time due to network latency on upload and download',
94
+ 'Size limits (large GIFs are often rejected)',
95
+ 'Risk of file retention and analysis',
96
+ ],
97
+ },
98
+ {
99
+ title: 'Our Local Architecture',
100
+ description: 'Direct processing on your hardware using Vanilla JS technology.',
101
+ icon: 'mdi:laptop-mac',
102
+ highlight: true,
103
+ points: [
104
+ 'The GIF never leaves your device',
105
+ 'Instant conversion with no network wait',
106
+ 'No size limits: process GIFs of any weight',
107
+ 'Total privacy: 0 bytes sent externally',
108
+ ],
109
+ },
110
+ ],
111
+ },
112
+ {
113
+ type: 'title',
114
+ text: 'How the local GIF to WebP conversion works',
115
+ level: 3,
116
+ },
117
+ {
118
+ type: 'paragraph',
119
+ html: 'The local conversion uses the HTML5 Canvas API. The GIF is loaded as a native browser Image element. By drawing it onto a canvas, the graphics engine captures the first animation frame with all its transparency information. The <code>toDataURL(\'image/webp\')</code> method exports the frame as WebP directly in RAM.',
120
+ },
121
+ {
122
+ type: 'paragraph',
123
+ html: 'WebP supports full alpha channel, so GIF transparencies are preserved in the resulting WebP without needing to add a background. WebP compression algorithms are significantly more efficient than GIF or PNG, which explains the drastic file size reduction of the final output.',
124
+ },
125
+ {
126
+ type: 'tip',
127
+ title: 'Guaranteed PageSpeed improvement',
128
+ html: 'A 5 MB animated GIF can become a WebP under 1 MB. If you have GIFs on your website pages, replacing them with WebP can immediately improve your Largest Contentful Paint (LCP) and Total Blocking Time (TBT), directly impacting SEO rankings.',
129
+ },
130
+ {
131
+ type: 'title',
132
+ text: 'Use cases and compatibility of the resulting WebP',
133
+ level: 3,
134
+ },
135
+ {
136
+ type: 'list',
137
+ icon: 'mdi:check-circle',
138
+ items: [
139
+ 'Replacing GIFs on web pages to improve PageSpeed scores.',
140
+ 'Optimized avatars and stickers for Discord, Slack and modern platforms.',
141
+ 'Banners and visuals for digital marketing campaigns.',
142
+ 'Animations in progressive web applications (PWA).',
143
+ 'Compatible with Chrome, Edge, Firefox, Safari 14+ and all modern browsers.',
144
+ ],
145
+ },
146
+ {
147
+ type: 'title',
148
+ text: 'Conclusion: migrate your GIFs to the 21st century',
149
+ level: 3,
150
+ },
151
+ {
152
+ type: 'paragraph',
153
+ html: 'Every GIF on your website is a missed optimization opportunity. Our tool converts GIFs to WebP instantly, privately, and without limits, directly in your browser. The result: files up to 5 times smaller, perfect transparency, and compatibility with all modern browsers.',
154
+ },
155
+ ];
157
156
 
158
- export const content: GifAWebpLocaleContent = {
159
- slug,
160
- title,
161
- description,
162
- ui,
163
- seo,
164
- faq,
165
- bibliography,
166
- howTo,
167
- schemas: generateSchemas({ title, description, inLanguage: 'en', faq, howTo }),
168
- };
157
+
158
+ export const content: GifAWebpLocaleContent = {
159
+ slug,
160
+ title,
161
+ description,
162
+ ui,
163
+ seo,
164
+ faq,
165
+ bibliography,
166
+ howTo,
167
+ schemas: generateSchemas({ title, description, inLanguage: 'en', faq, howTo }),
168
+ };