@nuxt/hints 0.0.0 → 1.0.0-alpha.10

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 (210) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +140 -0
  3. package/dist/client/200.html +1 -0
  4. package/dist/client/404.html +1 -0
  5. package/dist/client/_nuxt/2EtD6e53.js +1 -0
  6. package/dist/client/_nuxt/32ctXXKs.js +1 -0
  7. package/dist/client/_nuxt/3e1v2bzS.js +1 -0
  8. package/dist/client/_nuxt/5X7smno1.js +1 -0
  9. package/dist/client/_nuxt/5i3qLPDT.js +1 -0
  10. package/dist/client/_nuxt/B0m2ddpp.js +1 -0
  11. package/dist/client/_nuxt/B1dDrJ26.js +1 -0
  12. package/dist/client/_nuxt/B5Mb093_.js +1 -0
  13. package/dist/client/_nuxt/B6aJPvgy.js +1 -0
  14. package/dist/client/_nuxt/B7mTdjB0.js +1 -0
  15. package/dist/client/_nuxt/BA47KaF1.js +1 -0
  16. package/dist/client/_nuxt/BD7vbABK.js +1 -0
  17. package/dist/client/_nuxt/BEDo0Tqx.js +1 -0
  18. package/dist/client/_nuxt/BGJmEYvX.js +1 -0
  19. package/dist/client/_nuxt/BIGW1oBm.js +1 -0
  20. package/dist/client/_nuxt/BLmx8bSh.js +1 -0
  21. package/dist/client/_nuxt/BLtJtn59.js +1 -0
  22. package/dist/client/_nuxt/BN7gUcg9.js +1 -0
  23. package/dist/client/_nuxt/BPQ3VLAy.js +1 -0
  24. package/dist/client/_nuxt/BUw7H-hv.js +1 -0
  25. package/dist/client/_nuxt/BXkSAIEj.js +1 -0
  26. package/dist/client/_nuxt/BchVSmrD.js +6 -0
  27. package/dist/client/_nuxt/BfHTSMKl.js +1 -0
  28. package/dist/client/_nuxt/BfjtVDDH.js +1 -0
  29. package/dist/client/_nuxt/BgDCqdQA.js +1 -0
  30. package/dist/client/_nuxt/Bkuqu6BP.js +1 -0
  31. package/dist/client/_nuxt/Bp3cYrEr.js +1 -0
  32. package/dist/client/_nuxt/Br6cN0cg.js +1 -0
  33. package/dist/client/_nuxt/BthQWCQV.js +1 -0
  34. package/dist/client/_nuxt/Buea-lGh.js +1 -0
  35. package/dist/client/_nuxt/Bw305WKR.js +1 -0
  36. package/dist/client/_nuxt/Bxupbja9.js +4 -0
  37. package/dist/client/_nuxt/BygCkY0G.js +1 -0
  38. package/dist/client/_nuxt/Byy-EI8A.js +1 -0
  39. package/dist/client/_nuxt/BzJJZx-M.js +1 -0
  40. package/dist/client/_nuxt/C39BiMTA.js +1 -0
  41. package/dist/client/_nuxt/C3Wv6jpd.js +1 -0
  42. package/dist/client/_nuxt/C3mMm8J8.js +1 -0
  43. package/dist/client/_nuxt/C4gqWexZ.js +1 -0
  44. package/dist/client/_nuxt/C8M2exoo.js +1 -0
  45. package/dist/client/_nuxt/C9dUb6Cb.js +1 -0
  46. package/dist/client/_nuxt/C9oPPf7i.js +1 -0
  47. package/dist/client/_nuxt/C9tS-k6U.js +1 -0
  48. package/dist/client/_nuxt/CD8AGNRT.js +1 -0
  49. package/dist/client/_nuxt/CDVJQ6XC.js +1 -0
  50. package/dist/client/_nuxt/CFHQjOhq.js +1 -0
  51. package/dist/client/_nuxt/CG6Dc4jp.js +1 -0
  52. package/dist/client/_nuxt/CH1njM8p.js +1 -0
  53. package/dist/client/_nuxt/CMTm3GFP.js +1 -0
  54. package/dist/client/_nuxt/COt5Ahok.js +1 -0
  55. package/dist/client/_nuxt/CS3Unz2-.js +1 -0
  56. package/dist/client/_nuxt/CTRr51gU.js +1 -0
  57. package/dist/client/_nuxt/CVO1_9PV.js +1 -0
  58. package/dist/client/_nuxt/CVdnzihN.js +1 -0
  59. package/dist/client/_nuxt/CW8IKDeL.js +1 -0
  60. package/dist/client/_nuxt/CXZktZb0.js +1 -0
  61. package/dist/client/_nuxt/CXtECtnM.js +1 -0
  62. package/dist/client/_nuxt/CYsAdtH9.js +1 -0
  63. package/dist/client/_nuxt/CafNBF8u.js +1 -0
  64. package/dist/client/_nuxt/CbfX1IO0.js +1 -0
  65. package/dist/client/_nuxt/Cc68jesL.js +1 -0
  66. package/dist/client/_nuxt/CfQXZHmo.js +1 -0
  67. package/dist/client/_nuxt/Cj5Yp3dK.js +1 -0
  68. package/dist/client/_nuxt/CkXjmgJE.js +1 -0
  69. package/dist/client/_nuxt/Cl0AqbOI.js +1 -0
  70. package/dist/client/_nuxt/Cm3UrAx6.js +1 -0
  71. package/dist/client/_nuxt/CmIQRyeF.js +1 -0
  72. package/dist/client/_nuxt/Cmh6b_Ma.js +1 -0
  73. package/dist/client/_nuxt/Cn-bp-IR.js +1 -0
  74. package/dist/client/_nuxt/CnnebwVN.js +1 -0
  75. package/dist/client/_nuxt/Cp-IABpG.js +1 -0
  76. package/dist/client/_nuxt/Csfq5Kiy.js +1 -0
  77. package/dist/client/_nuxt/CufHLc7y.js +1 -0
  78. package/dist/client/_nuxt/CuhuY25u.js +1 -0
  79. package/dist/client/_nuxt/Cuk6v7N8.js +1 -0
  80. package/dist/client/_nuxt/Cvjx9yec.js +1 -0
  81. package/dist/client/_nuxt/CxbxFI8M.js +1 -0
  82. package/dist/client/_nuxt/CyktbL80.js +1 -0
  83. package/dist/client/_nuxt/CylS5w8V.js +1 -0
  84. package/dist/client/_nuxt/D-2ljcwZ.js +1 -0
  85. package/dist/client/_nuxt/D0r3Knsf.js +1 -0
  86. package/dist/client/_nuxt/D2Qjm2dq.js +1 -0
  87. package/dist/client/_nuxt/D2ZA7i9S.js +1 -0
  88. package/dist/client/_nuxt/D4_iv3hh.js +1 -0
  89. package/dist/client/_nuxt/D4h5O-jR.js +1 -0
  90. package/dist/client/_nuxt/D5KoaKCx.js +1 -0
  91. package/dist/client/_nuxt/D7oLnXFd.js +1 -0
  92. package/dist/client/_nuxt/D87Tk5Gz.js +1 -0
  93. package/dist/client/_nuxt/DAi9KRSo.js +1 -0
  94. package/dist/client/_nuxt/DBKV2OwM.js +1 -0
  95. package/dist/client/_nuxt/DEthMvLe.js +1 -0
  96. package/dist/client/_nuxt/DFWUc33u.js +1 -0
  97. package/dist/client/_nuxt/DFlZdHUX.js +1 -0
  98. package/dist/client/_nuxt/DGP4VlC8.js +1 -0
  99. package/dist/client/_nuxt/DGztddWO.js +1 -0
  100. package/dist/client/_nuxt/DH5Ifo-i.js +1 -0
  101. package/dist/client/_nuxt/DHJKELXO.js +1 -0
  102. package/dist/client/_nuxt/DHQR4-dF.js +1 -0
  103. package/dist/client/_nuxt/DJjDtW9f.js +1 -0
  104. package/dist/client/_nuxt/DPfMkruS.js +1 -0
  105. package/dist/client/_nuxt/DQyhUUbL.js +1 -0
  106. package/dist/client/_nuxt/DRw_LuNl.js +1 -0
  107. package/dist/client/_nuxt/DSeZwD4N.js +1 -0
  108. package/dist/client/_nuxt/DU1UobuO.js +1 -0
  109. package/dist/client/_nuxt/DUszq2jm.js +1 -0
  110. package/dist/client/_nuxt/DVMEJ2y_.js +1 -0
  111. package/dist/client/_nuxt/DWedfzmr.js +1 -0
  112. package/dist/client/_nuxt/DXbdFlpD.js +1 -0
  113. package/dist/client/_nuxt/DYE7WIF3.js +1 -0
  114. package/dist/client/_nuxt/DZxFcAj9.js +1 -0
  115. package/dist/client/_nuxt/DaskW291.js +1 -0
  116. package/dist/client/_nuxt/DcaNXYhu.js +1 -0
  117. package/dist/client/_nuxt/Ddv68eIx.js +1 -0
  118. package/dist/client/_nuxt/Des-eS-w.js +1 -0
  119. package/dist/client/_nuxt/DgsIRcX7.js +1 -0
  120. package/dist/client/_nuxt/DnULxvSX.js +1 -0
  121. package/dist/client/_nuxt/DqQDbK_p.js +1 -0
  122. package/dist/client/_nuxt/DqwNpetd.js +1 -0
  123. package/dist/client/_nuxt/Dspwwk_N.js +1 -0
  124. package/dist/client/_nuxt/Dx-B1_4e.js +1 -0
  125. package/dist/client/_nuxt/DxNHbxmM.js +1 -0
  126. package/dist/client/_nuxt/DxSwrfjg.js +1 -0
  127. package/dist/client/_nuxt/E3gJ1_iC.js +1 -0
  128. package/dist/client/_nuxt/GsRaNv29.js +1 -0
  129. package/dist/client/_nuxt/L9t79GZl.js +1 -0
  130. package/dist/client/_nuxt/MzD3tlZU.js +1 -0
  131. package/dist/client/_nuxt/SCyfE3vN.js +1 -0
  132. package/dist/client/_nuxt/W9tJ9s81.js +1 -0
  133. package/dist/client/_nuxt/X0qVHnNL.js +1 -0
  134. package/dist/client/_nuxt/Yzrsuije.js +1 -0
  135. package/dist/client/_nuxt/bN70gL4F.js +1 -0
  136. package/dist/client/_nuxt/builds/latest.json +1 -0
  137. package/dist/client/_nuxt/builds/meta/988a741f-ba30-4645-9949-60dd86de74e2.json +1 -0
  138. package/dist/client/_nuxt/entry.bXb283Sw.css +1 -0
  139. package/dist/client/_nuxt/error-404.LspKb3Ne.css +1 -0
  140. package/dist/client/_nuxt/error-500.B_qDdXYW.css +1 -0
  141. package/dist/client/_nuxt/fuZLfV_i.js +1 -0
  142. package/dist/client/_nuxt/g9-lgVsj.js +1 -0
  143. package/dist/client/_nuxt/gufSdAgD.js +36 -0
  144. package/dist/client/_nuxt/hJgmCMqR.js +1 -0
  145. package/dist/client/_nuxt/hegEt444.js +1 -0
  146. package/dist/client/_nuxt/hydration.C8A3o8hr.css +1 -0
  147. package/dist/client/_nuxt/m17aaUwq.js +1 -0
  148. package/dist/client/_nuxt/qdsjHGoJ.js +1 -0
  149. package/dist/client/_nuxt/wDzz0qaB.js +1 -0
  150. package/dist/client/_nuxt/zVBI731p.js +9 -0
  151. package/dist/client/component-lazy-load/index.html +1 -0
  152. package/dist/client/hydration/index.html +1 -0
  153. package/dist/client/index.html +1 -0
  154. package/dist/client/third-party-scripts/index.html +1 -0
  155. package/dist/client/web-vitals/index.html +1 -0
  156. package/dist/module.d.mts +10 -0
  157. package/dist/module.json +9 -0
  158. package/dist/module.mjs +442 -0
  159. package/dist/runtime/core/components/nuxt-island.d.ts +2 -0
  160. package/dist/runtime/core/components/nuxt-island.js +15 -0
  161. package/dist/runtime/core/features.d.ts +4 -0
  162. package/dist/runtime/core/features.js +10 -0
  163. package/dist/runtime/core/plugins/features.client.d.ts +2 -0
  164. package/dist/runtime/core/plugins/features.client.js +16 -0
  165. package/dist/runtime/core/plugins/vue-tracer-state.client.d.ts +2 -0
  166. package/dist/runtime/core/plugins/vue-tracer-state.client.js +7 -0
  167. package/dist/runtime/core/server/sse.d.ts +2 -0
  168. package/dist/runtime/core/server/sse.js +16 -0
  169. package/dist/runtime/core/server/types.d.ts +12 -0
  170. package/dist/runtime/core/server/types.js +2 -0
  171. package/dist/runtime/core/types.d.ts +9 -0
  172. package/dist/runtime/core/types.js +0 -0
  173. package/dist/runtime/hydration/component.d.ts +3 -0
  174. package/dist/runtime/hydration/component.js +22 -0
  175. package/dist/runtime/hydration/composables.d.ts +5 -0
  176. package/dist/runtime/hydration/composables.js +45 -0
  177. package/dist/runtime/hydration/nitro.plugin.d.ts +2 -0
  178. package/dist/runtime/hydration/nitro.plugin.js +65 -0
  179. package/dist/runtime/hydration/plugin.client.d.ts +2 -0
  180. package/dist/runtime/hydration/plugin.client.js +11 -0
  181. package/dist/runtime/hydration/types.d.ts +29 -0
  182. package/dist/runtime/hydration/types.js +0 -0
  183. package/dist/runtime/hydration/utils.d.ts +4 -0
  184. package/dist/runtime/hydration/utils.js +26 -0
  185. package/dist/runtime/lazy-load/composables.d.ts +11 -0
  186. package/dist/runtime/lazy-load/composables.js +52 -0
  187. package/dist/runtime/lazy-load/nitro.plugin.d.ts +2 -0
  188. package/dist/runtime/lazy-load/nitro.plugin.js +59 -0
  189. package/dist/runtime/lazy-load/plugin.client.d.ts +2 -0
  190. package/dist/runtime/lazy-load/plugin.client.js +73 -0
  191. package/dist/runtime/lazy-load/schema.d.ts +28 -0
  192. package/dist/runtime/lazy-load/schema.js +16 -0
  193. package/dist/runtime/lazy-load/utils.d.ts +2 -0
  194. package/dist/runtime/lazy-load/utils.js +4 -0
  195. package/dist/runtime/logger.d.ts +3 -0
  196. package/dist/runtime/logger.js +8 -0
  197. package/dist/runtime/third-party-scripts/nitro.plugin.d.ts +2 -0
  198. package/dist/runtime/third-party-scripts/nitro.plugin.js +48 -0
  199. package/dist/runtime/third-party-scripts/plugin.client.d.ts +2 -0
  200. package/dist/runtime/third-party-scripts/plugin.client.js +93 -0
  201. package/dist/runtime/third-party-scripts/utils.d.ts +1 -0
  202. package/dist/runtime/third-party-scripts/utils.js +2 -0
  203. package/dist/runtime/types.d.ts +80 -0
  204. package/dist/runtime/web-vitals/plugin.client.d.ts +13 -0
  205. package/dist/runtime/web-vitals/plugin.client.js +138 -0
  206. package/dist/runtime/web-vitals/utils.d.ts +36 -0
  207. package/dist/runtime/web-vitals/utils.js +15 -0
  208. package/dist/types.d.mts +3 -0
  209. package/package.json +70 -2
  210. /package/dist/{.gitkeep → client/_nuxt/third-party-scripts.tn0RQdqM.css} +0 -0
@@ -0,0 +1,13 @@
1
+ declare global {
2
+ interface PerformanceEntry {
3
+ element?: HTMLElement;
4
+ sources?: {
5
+ node: HTMLElement;
6
+ currentRect: DOMRect;
7
+ previousRect: DOMRect;
8
+ }[];
9
+ value?: number;
10
+ }
11
+ }
12
+ declare const _default: any;
13
+ export default _default;
@@ -0,0 +1,138 @@
1
+ import { defineNuxtPlugin, useNuxtApp } from "#imports";
2
+ import { onINP, onLCP, onCLS } from "web-vitals/attribution";
3
+ import { defu } from "defu";
4
+ import { ref } from "vue";
5
+ import { logger } from "./utils.js";
6
+ function isImgElement(element) {
7
+ return element instanceof Element && element.tagName === "IMG";
8
+ }
9
+ export default defineNuxtPlugin({
10
+ name: "nuxt-hints:performance",
11
+ setup() {
12
+ const nuxtApp = useNuxtApp();
13
+ nuxtApp.payload.__hints = defu(nuxtApp.payload.__hints, {
14
+ webvitals: {
15
+ lcp: ref([]),
16
+ inp: ref([]),
17
+ cls: ref([])
18
+ }
19
+ });
20
+ nuxtApp.hook("hints:webvitals:sync", (webvitals) => {
21
+ webvitals.lcp.value = [...nuxtApp.payload.__hints.webvitals.lcp.value];
22
+ webvitals.inp.value = [...nuxtApp.payload.__hints.webvitals.inp.value];
23
+ webvitals.cls.value = [...nuxtApp.payload.__hints.webvitals.cls.value];
24
+ });
25
+ nuxtApp.hook("app:mounted", () => {
26
+ onINP((metric) => {
27
+ if (metric.rating === "good") {
28
+ return;
29
+ }
30
+ logger.info(
31
+ "[web-vitals] INP Metric: ",
32
+ metric
33
+ );
34
+ nuxtApp.payload.__hints.webvitals.inp.value.push(metric);
35
+ nuxtApp.callHook("hints:webvitals:inp", metric);
36
+ }, {
37
+ reportAllChanges: true
38
+ });
39
+ onLCP((metric) => {
40
+ if (metric.rating === "good") {
41
+ return;
42
+ }
43
+ logger.info(
44
+ `[web-vitals] LCP Metric: `,
45
+ metric
46
+ );
47
+ nuxtApp.payload.__hints.webvitals.lcp.value.push(metric);
48
+ nuxtApp.callHook("hints:webvitals:lcp", metric);
49
+ for (const performanceEntry of metric.entries) {
50
+ if (!performanceEntry.element || !isImgElement(performanceEntry.element)) {
51
+ continue;
52
+ }
53
+ if (performanceEntry.element.attributes?.getNamedItem("loading")?.value === "lazy") {
54
+ logger.warn(
55
+ '[performance] LCP Element should not have `loading="lazy"` \n\n Learn more: https://web.dev/optimize-lcp/#optimize-the-priority-the-resource-is-given'
56
+ );
57
+ }
58
+ if (hasImageFormat(performanceEntry.element.src)) {
59
+ if (!performanceEntry.element.src.includes("webp") || !performanceEntry.element.src.includes("avif")) {
60
+ logger.warn(
61
+ "[performance] LCP Element can be served in a next gen format like `webp` or `avif` \n\n Learn more: https://web.dev/choose-the-right-image-format/ \n\n Use: https://image.nuxt.com/usage/nuxt-img#format"
62
+ );
63
+ }
64
+ }
65
+ if (performanceEntry.element.fetchPriority !== "high") {
66
+ logger.warn(
67
+ '[performance] LCP Element can have `fetchPriority="high"` to load as soon as possible \n\n Learn more: https://web.dev/optimize-lcp/#optimize-the-priority-the-resource-is-given'
68
+ );
69
+ }
70
+ if (!performanceEntry.element.attributes.getNamedItem("height") || !performanceEntry.element.attributes.getNamedItem("width")) {
71
+ logger.warn(
72
+ "[performance] Images should have `width` and `height` sizes set \n\n Learn more: https://web.dev/optimize-cls/#images-without-dimensions \n\n Use: https://image.nuxt.com/usage/nuxt-img#width-height"
73
+ );
74
+ }
75
+ if (performanceEntry.startTime > 2500) {
76
+ logger.warn(
77
+ `[performance] LCP Element loaded in ${performanceEntry.startTime} miliseconds. Good result is below 2500 miliseconds
78
+
79
+ Learn more: https://web.dev/lcp/#what-is-a-good-lcp-score`
80
+ );
81
+ }
82
+ if (!isElementPreloaded(performanceEntry.element.src)) {
83
+ logger.warn(
84
+ "[performance] LCP Element can be preloaded in `head` to improve load time \n\n Learn more: https://web.dev/optimize-lcp/#optimize-when-the-resource-is-discovered \n\n Use: https://image.nuxt.com/usage/nuxt-img#preload"
85
+ );
86
+ }
87
+ }
88
+ }, {
89
+ reportAllChanges: true
90
+ });
91
+ onCLS((metric) => {
92
+ if (metric.rating === "good") {
93
+ return;
94
+ }
95
+ logger.info(
96
+ "[web-vitals] CLS Metric: ",
97
+ metric
98
+ );
99
+ nuxtApp.callHook(
100
+ "hints:webvitals:cls",
101
+ metric
102
+ );
103
+ nuxtApp.payload.__hints.webvitals.cls.value.push(metric);
104
+ for (const entry of metric.entries) {
105
+ const performanceEntry = entry;
106
+ if (!performanceEntry.sources?.[0]) return;
107
+ const sourceElement = performanceEntry.sources?.[0].node;
108
+ if (!sourceElement || sourceElement.parentElement?.className.includes("nuxt-devtools")) return;
109
+ logger.info(
110
+ "[performance] Potential CLS Element: ",
111
+ sourceElement
112
+ );
113
+ if ((performanceEntry.value ?? 0) > 0.1) {
114
+ logger.warn(
115
+ `[performance] CLS was ${performanceEntry.value}. Good result is below 0.1
116
+
117
+ Learn more: https://web.dev/articles/cls#what-is-a-good-cls-score`
118
+ );
119
+ }
120
+ if (isImgElement(sourceElement) && (!sourceElement.attributes.getNamedItem("height") || !sourceElement.attributes.getNamedItem("width"))) {
121
+ logger.warn(
122
+ "[performance] Images should have `width` and `height` sizes set \n\n Learn more: https://web.dev/optimize-cls/#images-without-dimensions \n\n Use: https://image.nuxt.com/usage/nuxt-img#width-height"
123
+ );
124
+ }
125
+ }
126
+ });
127
+ });
128
+ }
129
+ });
130
+ const hasImageFormat = (src) => {
131
+ const imageFormats = ["avif", "jpg", "jpeg", "png", "webp"];
132
+ return imageFormats.some((format) => src.includes(format));
133
+ };
134
+ const isElementPreloaded = (src) => {
135
+ return Array.from(document.head.childNodes).filter(
136
+ (el) => el.nodeName === "LINK" && el.attributes.href.value === src
137
+ ).length;
138
+ };
@@ -0,0 +1,36 @@
1
+ export declare const logger: import("consola").ConsolaInstance;
2
+ export declare enum ImagePerformanceIssueType {
3
+ LazyAttrOnLCPElement = 0,
4
+ ImgFormat = 1,
5
+ FetchPriorityMissingOnLCPElement = 2,
6
+ HeightWidthMissingOnLCPElement = 3,
7
+ LoadingTooLong = 4,
8
+ PreloadMissingOnLCPElement = 5
9
+ }
10
+ type LazyAttrOnLCPElementDetails = {
11
+ type: ImagePerformanceIssueType.LazyAttrOnLCPElement;
12
+ };
13
+ type ImgFormatDetails = {
14
+ type: ImagePerformanceIssueType.ImgFormat;
15
+ };
16
+ type FetchPriorityMissingOnLCPElementDetails = {
17
+ type: ImagePerformanceIssueType.FetchPriorityMissingOnLCPElement;
18
+ };
19
+ type HeightWidthMissingOnLCPElementDetails = {
20
+ type: ImagePerformanceIssueType.HeightWidthMissingOnLCPElement;
21
+ };
22
+ type LoadingTooLongDetails = {
23
+ type: ImagePerformanceIssueType.LoadingTooLong;
24
+ };
25
+ type PreloadMissingOnLCPElementDetails = {
26
+ type: ImagePerformanceIssueType.PreloadMissingOnLCPElement;
27
+ };
28
+ export type ImagePerformanceIssueDetails = LazyAttrOnLCPElementDetails | ImgFormatDetails | FetchPriorityMissingOnLCPElementDetails | HeightWidthMissingOnLCPElementDetails | LoadingTooLongDetails | PreloadMissingOnLCPElementDetails;
29
+ export declare enum CLSIssueType {
30
+ LayoutShiftTooBig = 0
31
+ }
32
+ type LayoutShiftTooBigDetails = {
33
+ type: CLSIssueType.LayoutShiftTooBig;
34
+ };
35
+ export type CLSIssueDetails = LayoutShiftTooBigDetails;
36
+ export {};
@@ -0,0 +1,15 @@
1
+ import { createHintsLogger } from "../logger.js";
2
+ export const logger = createHintsLogger("webVitals");
3
+ export var ImagePerformanceIssueType = /* @__PURE__ */ ((ImagePerformanceIssueType2) => {
4
+ ImagePerformanceIssueType2[ImagePerformanceIssueType2["LazyAttrOnLCPElement"] = 0] = "LazyAttrOnLCPElement";
5
+ ImagePerformanceIssueType2[ImagePerformanceIssueType2["ImgFormat"] = 1] = "ImgFormat";
6
+ ImagePerformanceIssueType2[ImagePerformanceIssueType2["FetchPriorityMissingOnLCPElement"] = 2] = "FetchPriorityMissingOnLCPElement";
7
+ ImagePerformanceIssueType2[ImagePerformanceIssueType2["HeightWidthMissingOnLCPElement"] = 3] = "HeightWidthMissingOnLCPElement";
8
+ ImagePerformanceIssueType2[ImagePerformanceIssueType2["LoadingTooLong"] = 4] = "LoadingTooLong";
9
+ ImagePerformanceIssueType2[ImagePerformanceIssueType2["PreloadMissingOnLCPElement"] = 5] = "PreloadMissingOnLCPElement";
10
+ return ImagePerformanceIssueType2;
11
+ })(ImagePerformanceIssueType || {});
12
+ export var CLSIssueType = /* @__PURE__ */ ((CLSIssueType2) => {
13
+ CLSIssueType2[CLSIssueType2["LayoutShiftTooBig"] = 0] = "LayoutShiftTooBig";
14
+ return CLSIssueType2;
15
+ })(CLSIssueType || {});
@@ -0,0 +1,3 @@
1
+ export { default } from './module.mjs'
2
+
3
+ export { type ModuleOptions } from './module.mjs'
package/package.json CHANGED
@@ -1,8 +1,76 @@
1
1
  {
2
2
  "name": "@nuxt/hints",
3
- "version": "0.0.0",
3
+ "version": "1.0.0-alpha.10",
4
+ "description": "Nuxt module that shows hints for aspects of your application such as Performance, Security, and more!",
5
+ "repository": "https://github.com/nuxt/hints",
6
+ "homepage": "https://github.com/nuxt/hints",
7
+ "license": "MIT",
8
+ "type": "module",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/types.d.mts",
12
+ "import": "./dist/module.mjs"
13
+ },
14
+ "./runtime/*": {
15
+ "types": "./dist/runtime/*",
16
+ "import": "./dist/runtime/*"
17
+ }
18
+ },
19
+ "main": "./dist/module.mjs",
4
20
  "files": [
5
21
  "dist"
6
22
  ],
7
- "author": "Daniel Roe <daniel@roe.dev>"
23
+ "dependencies": {
24
+ "@nuxt/devtools-kit": "^3.2.1",
25
+ "@nuxt/kit": "^4.3.1",
26
+ "consola": "^3.4.2",
27
+ "h3": "^1.15.5",
28
+ "knitwork": "^1.3.0",
29
+ "magic-string": "^0.30.21",
30
+ "nitropack": "^2.13.1",
31
+ "oxc-parser": "^0.115.0",
32
+ "sirv": "^3.0.2",
33
+ "unplugin": "^3.0.0",
34
+ "unstorage": "^1.17.4",
35
+ "valibot": "^1.2.0",
36
+ "vite-plugin-vue-tracer": "^1.2.0",
37
+ "web-vitals": "^5.1.0"
38
+ },
39
+ "devDependencies": {
40
+ "@nuxt/devtools": "^3.2.1",
41
+ "@nuxt/devtools-ui-kit": "^3.2.1",
42
+ "@nuxt/eslint": "^1.15.1",
43
+ "@nuxt/icon": "^2.2.1",
44
+ "@nuxt/module-builder": "^1.0.2",
45
+ "@nuxt/schema": "^4.3.1",
46
+ "@nuxt/test-utils": "^4.0.0",
47
+ "@shikijs/transformers": "^3.22.0",
48
+ "@types/node": "^24.10.13",
49
+ "@vue/test-utils": "^2.4.6",
50
+ "changelogen": "^0.6.2",
51
+ "diff": "^8.0.3",
52
+ "eslint": "^10.0.1",
53
+ "get-port-please": "^3.2.0",
54
+ "happy-dom": "^20.7.0",
55
+ "pkg-pr-new": "0.0.63",
56
+ "rimraf": "^6.1.3",
57
+ "sass-embedded": "^1.97.3",
58
+ "shiki": "^3.22.0",
59
+ "shiki-transformer-fold": "^0.2.0",
60
+ "vitest": "^4.0.18",
61
+ "@nuxt/hints": "^1.0.0-alpha.10"
62
+ },
63
+ "scripts": {
64
+ "client:build": "nuxi generate client",
65
+ "client:dev": "nuxi dev client --port 3300",
66
+ "dev": "nuxi dev playground",
67
+ "dev:build": "nuxi build playground",
68
+ "dev:prepare": "nuxt-module-build build --stub && nuxi prepare && nuxi prepare playground",
69
+ "release": "pnpm run lint && pnpm run test && pnpm run prepack && changelogen --release && pnpm publish && git push --follow-tags",
70
+ "lint": "eslint .",
71
+ "test": "vitest run",
72
+ "test:types": "tsc --noEmit",
73
+ "test:watch": "vitest watch",
74
+ "cleanup": "rimraf **/node_modules **/dist **/.output **/.nuxt --glob"
75
+ }
8
76
  }