@nuxt/hints 1.0.0-alpha.9 → 1.0.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/README.md +50 -3
- package/dist/client/200.html +1 -1
- package/dist/client/404.html +1 -1
- package/dist/client/_nuxt/2UxHyX5q.js +1 -0
- package/dist/client/_nuxt/4A_iFExJ.js +1 -0
- package/dist/client/_nuxt/85-TOEBH.js +1 -0
- package/dist/client/_nuxt/B1yitclQ.js +1 -0
- package/dist/client/_nuxt/B7c-h3xW.js +1 -0
- package/dist/client/_nuxt/{BS0rITwE.js → BAtxTl2q.js} +1 -1
- package/dist/client/_nuxt/BBf5iR-q.js +1 -0
- package/dist/client/_nuxt/BERRCDM3.js +1 -0
- package/dist/client/_nuxt/BETggiCN.js +1 -0
- package/dist/client/_nuxt/BEwlwnbL.js +1 -0
- package/dist/client/_nuxt/BFfxhgS-.js +1 -0
- package/dist/client/_nuxt/BGHnOYBU.js +1 -0
- package/dist/client/_nuxt/BH7IYjvW.js +1 -0
- package/dist/client/_nuxt/BJDFO7_C.js +1 -0
- package/dist/client/_nuxt/BM1_JUlF.js +1 -0
- package/dist/client/_nuxt/BMWR74SV.js +1 -0
- package/dist/client/_nuxt/BQ8w6xss.js +1 -0
- package/dist/client/_nuxt/BR5kRUq4.js +1 -0
- package/dist/client/_nuxt/BRHolxvo.js +1 -0
- package/dist/client/_nuxt/BRZ36xJF.js +1 -0
- package/dist/client/_nuxt/BTJTHyun.js +1 -0
- package/dist/client/_nuxt/BTifaqeh.js +1 -0
- package/dist/client/_nuxt/BV7otONQ.js +1 -0
- package/dist/client/_nuxt/BVQ-GDCI.js +1 -0
- package/dist/client/_nuxt/BWvSN4gD.js +1 -0
- package/dist/client/_nuxt/{BKRej55Q.js → BY2SE5zy.js} +1 -1
- package/dist/client/_nuxt/BYV0-3_D.js +1 -0
- package/dist/client/_nuxt/BYunw83y.js +1 -0
- package/dist/client/_nuxt/BZvkOJ9d.js +1 -0
- package/dist/client/_nuxt/B_m7g4N7.js +1 -0
- package/dist/client/_nuxt/BcOcwvcX.js +1 -0
- package/dist/client/_nuxt/BcVCzyr7.js +1 -0
- package/dist/client/_nuxt/BdImnpbu.js +1 -0
- package/dist/client/_nuxt/BdnUsdx6.js +1 -0
- package/dist/client/_nuxt/BdyeT68K.js +1 -0
- package/dist/client/_nuxt/BeH2EWoN.js +1 -0
- package/dist/client/_nuxt/BhOHFoWU.js +1 -0
- package/dist/client/_nuxt/BkioyH1T.js +1 -0
- package/dist/client/_nuxt/BmXAJ9_W.js +1 -0
- package/dist/client/_nuxt/Bmn6On1c.js +1 -0
- package/dist/client/_nuxt/Bp6g37R7.js +1 -0
- package/dist/client/_nuxt/BqTXFGrv.js +1 -0
- package/dist/client/_nuxt/BqWnGSMi.js +1 -0
- package/dist/client/_nuxt/BqYA7rlc.js +1 -0
- package/dist/client/_nuxt/{DOJAAXAk.js → BsJUmJIm.js} +1 -1
- package/dist/client/_nuxt/BsS91CYL.js +1 -0
- package/dist/client/_nuxt/BspZqrRM.js +1 -0
- package/dist/client/_nuxt/BtCnVYZw.js +1 -0
- package/dist/client/_nuxt/BtOb2qkB.js +1 -0
- package/dist/client/_nuxt/BtqSS_iP.js +1 -0
- package/dist/client/_nuxt/BuQSe7zV.js +13 -0
- package/dist/client/_nuxt/Bv_4Rxtq.js +1 -0
- package/dist/client/_nuxt/BvzEVeQv.js +1 -0
- package/dist/client/_nuxt/BxgE0vQu.js +1 -0
- package/dist/client/_nuxt/{CuE35eZa.js → Bz59FrZb.js} +1 -1
- package/dist/client/_nuxt/BzTr9Aqm.js +1 -0
- package/dist/client/_nuxt/C-HG3fhB.js +1 -0
- package/dist/client/_nuxt/C-SQnVFl.js +1 -0
- package/dist/client/_nuxt/C0HS_06l.js +1 -0
- package/dist/client/_nuxt/C0hk2d4L.js +1 -0
- package/dist/client/_nuxt/C151Ov-r.js +1 -0
- package/dist/client/_nuxt/C2t-YnRu.js +1 -0
- package/dist/client/_nuxt/C3B-1QV4.js +1 -0
- package/dist/client/_nuxt/C4EeE6gA.js +1 -0
- package/dist/client/_nuxt/C4IJs8-o.js +1 -0
- package/dist/client/_nuxt/C5BYcBs_.js +1 -0
- package/dist/client/_nuxt/C5YyOfLZ.js +1 -0
- package/dist/client/_nuxt/C7zT0LnQ.js +1 -0
- package/dist/client/_nuxt/{CTf7BuVz.js → C8XNfCrI.js} +1 -1
- package/dist/client/_nuxt/C8lEn-DE.js +1 -0
- package/dist/client/_nuxt/C98Dy4si.js +1 -0
- package/dist/client/_nuxt/C9XAeP06.js +1 -0
- package/dist/client/_nuxt/CDx5xZoG.js +1 -0
- package/dist/client/_nuxt/CEL-wOlO.js +1 -0
- package/dist/client/_nuxt/CENFIVCM.js +1 -0
- package/dist/client/_nuxt/CEu0bR-o.js +1 -0
- package/dist/client/_nuxt/CF10PKvl.js +1 -0
- package/dist/client/_nuxt/CG8Ifv2g.js +1 -0
- package/dist/client/_nuxt/CHLpvVh8.js +1 -0
- package/dist/client/_nuxt/CHM0blh-.js +1 -0
- package/dist/client/_nuxt/CJc9bBzg.js +1 -0
- package/dist/client/_nuxt/CKIfxQSi.js +1 -0
- package/dist/client/_nuxt/CLZrNe3w.js +1 -0
- package/dist/client/_nuxt/CLxacb5B.js +1 -0
- package/dist/client/_nuxt/CO1LY3CK.js +1 -0
- package/dist/client/_nuxt/COcwbKMJ.js +1 -0
- package/dist/client/_nuxt/COkxafJQ.js +1 -0
- package/dist/client/_nuxt/CSXwinHm.js +1 -0
- package/dist/client/_nuxt/CXDyekYo.js +3 -0
- package/dist/client/_nuxt/CYpkKp66.js +1 -0
- package/dist/client/_nuxt/{BFRyJUvr.js → CZ1OMT3Z.js} +1 -1
- package/dist/client/_nuxt/CZhp0h8q.js +1 -0
- package/dist/client/_nuxt/CbFg5uaA.js +1 -0
- package/dist/client/_nuxt/CeAyd5Ju.js +1 -0
- package/dist/client/_nuxt/CeZK1NFH.js +1 -0
- package/dist/client/_nuxt/CenWIFCC.js +1 -0
- package/dist/client/_nuxt/Cg-RD9OK.js +1 -0
- package/dist/client/_nuxt/CgK0fS9t.js +1 -0
- package/dist/client/_nuxt/CgrjxMR_.js +6 -0
- package/dist/client/_nuxt/ChMvpjG-.js +1 -0
- package/dist/client/_nuxt/CkByrt1z.js +1 -0
- package/dist/client/_nuxt/CklMAg4u.js +1 -0
- package/dist/client/_nuxt/Cl_HNi2c.js +4 -0
- package/dist/client/_nuxt/Cn7AkR1O.js +1 -0
- package/dist/client/_nuxt/CnnmHF94.js +1 -0
- package/dist/client/_nuxt/CnsnAmq5.js +1 -0
- package/dist/client/_nuxt/Co6uUVPk.js +1 -0
- package/dist/client/_nuxt/CoDkCxhg.js +1 -0
- package/dist/client/_nuxt/CpOuai2O.js +1 -0
- package/dist/client/_nuxt/Cq5zzVJU.js +1 -0
- package/dist/client/_nuxt/CquLrc37.js +1 -0
- package/dist/client/_nuxt/CsfeWuGM.js +1 -0
- package/dist/client/_nuxt/CuPHTKiy.js +1 -0
- package/dist/client/_nuxt/CwoSXNpI.js +1 -0
- package/dist/client/_nuxt/CxGSJlkm.js +1 -0
- package/dist/client/_nuxt/CxLEBnE3.js +1 -0
- package/dist/client/_nuxt/Cz2AlsmD.js +1 -0
- package/dist/client/_nuxt/CzTSHFRz.js +1 -0
- package/dist/client/_nuxt/D0YGMca9.js +1 -0
- package/dist/client/_nuxt/D17OF-Vu.js +1 -0
- package/dist/client/_nuxt/D1j8_8rp.js +1 -0
- package/dist/client/_nuxt/D3lLCCz7.js +1 -0
- package/dist/client/_nuxt/D5-asLiD.js +1 -0
- package/dist/client/_nuxt/D53aC0YG.js +1 -0
- package/dist/client/_nuxt/D7o27uSR.js +1 -0
- package/dist/client/_nuxt/D82EKSYY.js +1 -0
- package/dist/client/_nuxt/D82vCrfD.js +1 -0
- package/dist/client/_nuxt/D8_7TLub.js +1 -0
- package/dist/client/_nuxt/D8l8udqQ.js +1 -0
- package/dist/client/_nuxt/D93ZcfNL.js +1 -0
- package/dist/client/_nuxt/D97Zzqfu.js +1 -0
- package/dist/client/_nuxt/DDvzSYfr.js +1 -0
- package/dist/client/_nuxt/DFQXde-d.js +1 -0
- package/dist/client/_nuxt/DFXneXwc.js +1 -0
- package/dist/client/_nuxt/DHCkPAjA.js +1 -0
- package/dist/client/_nuxt/DM8c43g1.js +1 -0
- package/dist/client/_nuxt/DMLP1f5n.js +24 -0
- package/dist/client/_nuxt/DMzUqQB5.js +1 -0
- package/dist/client/_nuxt/{DOHcV6MR.js → DO_IqDaw.js} +1 -1
- package/dist/client/_nuxt/DPOp833l.js +1 -0
- package/dist/client/_nuxt/DRJZaHtK.js +1 -0
- package/dist/client/_nuxt/DRg8JJMk.js +1 -0
- package/dist/client/_nuxt/DV7GczEv.js +1 -0
- package/dist/client/_nuxt/DVFEvuxE.js +1 -0
- package/dist/client/_nuxt/DVxCFoDh.js +1 -0
- package/dist/client/_nuxt/DWrx1Km3.js +1 -0
- package/dist/client/_nuxt/DXmwc3jG.js +1 -0
- package/dist/client/_nuxt/DXvB9xmW.js +1 -0
- package/dist/client/_nuxt/DZf3V79B.js +1 -0
- package/dist/client/_nuxt/DZu-aV2c.js +1 -0
- package/dist/client/_nuxt/D_Q5rh1f.js +1 -0
- package/dist/client/_nuxt/Da5cRb03.js +1 -0
- package/dist/client/_nuxt/Dd19v3D-.js +1 -0
- package/dist/client/_nuxt/DdkO51Og.js +1 -0
- package/dist/client/_nuxt/Df6bDoY_.js +1 -0
- package/dist/client/_nuxt/DhmSosst.js +1 -0
- package/dist/client/_nuxt/DjAJT7YJ.js +1 -0
- package/dist/client/_nuxt/DkFqJrB1.js +1 -0
- package/dist/client/_nuxt/DkwncUOv.js +1 -0
- package/dist/client/_nuxt/Dpen1YoG.js +1 -0
- package/dist/client/_nuxt/Dph4kLrZ.js +1 -0
- package/dist/client/_nuxt/{BHYWC4mf.js → Dq5iEy-J.js} +1 -1
- package/dist/client/_nuxt/DsOJ9woJ.js +1 -0
- package/dist/client/_nuxt/DsumFeuD.js +1 -0
- package/dist/client/_nuxt/{BMheLZQI.js → DuO5kjlf.js} +1 -1
- package/dist/client/_nuxt/DvAmuSmV.js +1 -0
- package/dist/client/_nuxt/DyxjwDmM.js +1 -0
- package/dist/client/_nuxt/Dzze3sRP.js +1 -0
- package/dist/client/_nuxt/FtFNcQmh.js +1 -0
- package/dist/client/_nuxt/IF9eRakj.js +1 -0
- package/dist/client/_nuxt/IeuSbFQv.js +1 -0
- package/dist/client/_nuxt/LCb0JLof.js +1 -0
- package/dist/client/_nuxt/P80f7IUj.js +1 -0
- package/dist/client/_nuxt/Pmp26Uib.js +1 -0
- package/dist/client/_nuxt/QIJgUcNo.js +1 -0
- package/dist/client/_nuxt/RxLv4Mw1.js +1 -0
- package/dist/client/_nuxt/VOosw3JB.js +1 -0
- package/dist/client/_nuxt/Ve4PFQV2.js +1 -0
- package/dist/client/_nuxt/YqXBG_HV.js +1 -0
- package/dist/client/_nuxt/_H4v1dQx.js +1 -0
- package/dist/client/_nuxt/_ykCGR6B.js +1 -0
- package/dist/client/_nuxt/{BZWgH84o.js → a9uSpr3S.js} +1 -1
- package/dist/client/_nuxt/bCR0ucgS.js +1 -0
- package/dist/client/_nuxt/builds/latest.json +1 -1
- package/dist/client/_nuxt/builds/meta/99ecb9ec-79bf-4090-9942-9ce383dac370.json +1 -0
- package/dist/client/_nuxt/dwOrl1Do.js +1 -0
- package/dist/client/_nuxt/{entry.bXb283Sw.css → entry.D5OyC1nV.css} +1 -1
- package/dist/client/_nuxt/eo99z4R2.js +1 -0
- package/dist/client/_nuxt/error-404.B6ZMX39t.css +1 -0
- package/dist/client/_nuxt/error-500.dS86tDkg.css +1 -0
- package/dist/client/_nuxt/fKv21gyL.js +1 -0
- package/dist/client/_nuxt/gcz8RCvz.js +1 -0
- package/dist/client/_nuxt/hydration.BczHrsb5.css +1 -0
- package/dist/client/_nuxt/k_qm7-4y.js +1 -0
- package/dist/client/_nuxt/lXgVvXCa.js +1 -0
- package/dist/client/_nuxt/mWjccvbQ.js +1 -0
- package/dist/client/_nuxt/mjskCLCv.js +1 -0
- package/dist/client/_nuxt/n2N0HUVH.js +1 -0
- package/dist/client/_nuxt/oH_c3LbQ.js +1 -0
- package/dist/client/_nuxt/rGO070M0.js +1 -0
- package/dist/client/_nuxt/rZm6bMo-.js +1 -0
- package/dist/client/_nuxt/u5AG7uiY.js +1 -0
- package/dist/client/_nuxt/uYugtg8r.js +1 -0
- package/dist/client/_nuxt/vGWfd6FD.js +1 -0
- package/dist/client/_nuxt/yv6CvBhz.js +1 -0
- package/dist/client/component-lazy-load/index.html +1 -1
- package/dist/client/html-validate/index.html +1 -0
- package/dist/client/hydration/index.html +1 -1
- package/dist/client/index.html +1 -1
- package/dist/client/third-party-scripts/index.html +1 -1
- package/dist/client/web-vitals/index.html +1 -1
- package/dist/module.d.mts +5 -1
- package/dist/module.json +1 -1
- package/dist/module.mjs +75 -37
- package/dist/runtime/core/components/nuxt-island.d.ts +136 -1
- package/dist/runtime/core/features.d.ts +6 -0
- package/dist/runtime/core/features.js +17 -0
- package/dist/runtime/core/plugins/features.client.d.ts +2 -0
- package/dist/runtime/core/plugins/features.client.js +16 -0
- package/dist/runtime/core/plugins/vue-tracer-state.client.d.ts +1 -1
- package/dist/runtime/core/types.d.ts +17 -0
- package/dist/runtime/core/types.js +0 -0
- package/dist/runtime/feature-options.d.ts +8 -0
- package/dist/runtime/feature-options.js +0 -0
- package/dist/runtime/html-validate/handlers/delete.d.ts +1 -0
- package/dist/runtime/html-validate/handlers/delete.js +17 -0
- package/dist/runtime/html-validate/handlers/get.d.ts +2 -0
- package/dist/runtime/html-validate/handlers/get.js +5 -0
- package/dist/runtime/html-validate/handlers/nitro-handlers.plugin.d.ts +3 -0
- package/dist/runtime/html-validate/handlers/nitro-handlers.plugin.js +36 -0
- package/dist/runtime/html-validate/nitro.plugin.d.ts +3 -0
- package/dist/runtime/html-validate/nitro.plugin.js +54 -0
- package/dist/runtime/html-validate/plugin.client.d.ts +2 -0
- package/dist/runtime/html-validate/plugin.client.js +28 -0
- package/dist/runtime/html-validate/storage.d.ts +1 -0
- package/dist/runtime/html-validate/storage.js +2 -0
- package/dist/runtime/html-validate/types.d.ts +8 -0
- package/dist/runtime/html-validate/types.js +0 -0
- package/dist/runtime/html-validate/utils.d.ts +3 -0
- package/dist/runtime/html-validate/utils.js +12 -0
- package/dist/runtime/hydration/composables.js +15 -13
- package/dist/runtime/hydration/plugin.client.d.ts +1 -1
- package/dist/runtime/hydration/utils.d.ts +1 -0
- package/dist/runtime/hydration/utils.js +2 -0
- package/dist/runtime/lazy-load/plugin.client.d.ts +1 -1
- package/dist/runtime/lazy-load/plugin.client.js +3 -3
- package/dist/runtime/lazy-load/utils.d.ts +1 -0
- package/dist/runtime/lazy-load/utils.js +2 -0
- package/dist/runtime/logger.d.ts +2 -0
- package/dist/runtime/logger.js +6 -0
- package/dist/runtime/third-party-scripts/plugin.client.d.ts +1 -1
- package/dist/runtime/third-party-scripts/plugin.client.js +28 -8
- package/dist/runtime/third-party-scripts/types.d.ts +6 -0
- package/dist/runtime/third-party-scripts/types.js +0 -0
- package/dist/runtime/third-party-scripts/utils.d.ts +1 -0
- package/dist/runtime/third-party-scripts/utils.js +2 -0
- package/dist/runtime/types.d.ts +12 -0
- package/dist/runtime/web-vitals/plugin.client.d.ts +1 -1
- package/dist/runtime/web-vitals/plugin.client.js +124 -94
- package/dist/runtime/web-vitals/types.d.ts +4 -0
- package/dist/runtime/web-vitals/types.js +0 -0
- package/dist/runtime/web-vitals/utils.d.ts +1 -0
- package/dist/runtime/web-vitals/utils.js +2 -0
- package/package.json +21 -17
- package/dist/client/_nuxt/16LZ-2rN.js +0 -1
- package/dist/client/_nuxt/BOWvZIQC.js +0 -4
- package/dist/client/_nuxt/BY53PIN5.js +0 -1
- package/dist/client/_nuxt/BYo9cb9R.js +0 -36
- package/dist/client/_nuxt/D7xuZOu8.js +0 -1
- package/dist/client/_nuxt/DaNrdrhj.js +0 -1
- package/dist/client/_nuxt/GiOWC8es.js +0 -6
- package/dist/client/_nuxt/builds/meta/9cd25584-d8cd-4e50-8973-949eec6b2524.json +0 -1
- package/dist/client/_nuxt/error-404.LspKb3Ne.css +0 -1
- package/dist/client/_nuxt/error-500.B_qDdXYW.css +0 -1
- package/dist/client/_nuxt/hydration.CLUG10u4.css +0 -1
|
@@ -1,2 +1,137 @@
|
|
|
1
|
-
declare const HintsNuxtIsland:
|
|
1
|
+
declare const HintsNuxtIsland: {
|
|
2
|
+
new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<Readonly<import("vue").ExtractPropTypes<{
|
|
3
|
+
name: {
|
|
4
|
+
type: StringConstructor;
|
|
5
|
+
required: true;
|
|
6
|
+
};
|
|
7
|
+
lazy: BooleanConstructor;
|
|
8
|
+
props: {
|
|
9
|
+
type: ObjectConstructor;
|
|
10
|
+
default: () => undefined;
|
|
11
|
+
};
|
|
12
|
+
context: {
|
|
13
|
+
type: ObjectConstructor;
|
|
14
|
+
default: () => {};
|
|
15
|
+
};
|
|
16
|
+
scopeId: {
|
|
17
|
+
type: import("vue").PropType<string | undefined | null>;
|
|
18
|
+
default: () => undefined;
|
|
19
|
+
};
|
|
20
|
+
source: {
|
|
21
|
+
type: StringConstructor;
|
|
22
|
+
default: () => undefined;
|
|
23
|
+
};
|
|
24
|
+
dangerouslyLoadClientComponents: {
|
|
25
|
+
type: BooleanConstructor;
|
|
26
|
+
default: boolean;
|
|
27
|
+
};
|
|
28
|
+
}>> & Readonly<{
|
|
29
|
+
onError?: ((...args: any[]) => any) | undefined;
|
|
30
|
+
}>, (_ctx: any, _cache: any) => (import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
31
|
+
[key: string]: any;
|
|
32
|
+
}> | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
33
|
+
[key: string]: any;
|
|
34
|
+
}>[])[] | import("vue").VNode<any, any, {
|
|
35
|
+
[key: string]: any;
|
|
36
|
+
}>[], {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "error"[], import("vue").PublicProps, {
|
|
37
|
+
props: Record<string, any>;
|
|
38
|
+
source: string;
|
|
39
|
+
scopeId: string | null | undefined;
|
|
40
|
+
lazy: boolean;
|
|
41
|
+
context: Record<string, any>;
|
|
42
|
+
dangerouslyLoadClientComponents: boolean;
|
|
43
|
+
}, true, {}, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
|
|
44
|
+
P: {};
|
|
45
|
+
B: {};
|
|
46
|
+
D: {};
|
|
47
|
+
C: {};
|
|
48
|
+
M: {};
|
|
49
|
+
Defaults: {};
|
|
50
|
+
}, Readonly<import("vue").ExtractPropTypes<{
|
|
51
|
+
name: {
|
|
52
|
+
type: StringConstructor;
|
|
53
|
+
required: true;
|
|
54
|
+
};
|
|
55
|
+
lazy: BooleanConstructor;
|
|
56
|
+
props: {
|
|
57
|
+
type: ObjectConstructor;
|
|
58
|
+
default: () => undefined;
|
|
59
|
+
};
|
|
60
|
+
context: {
|
|
61
|
+
type: ObjectConstructor;
|
|
62
|
+
default: () => {};
|
|
63
|
+
};
|
|
64
|
+
scopeId: {
|
|
65
|
+
type: import("vue").PropType<string | undefined | null>;
|
|
66
|
+
default: () => undefined;
|
|
67
|
+
};
|
|
68
|
+
source: {
|
|
69
|
+
type: StringConstructor;
|
|
70
|
+
default: () => undefined;
|
|
71
|
+
};
|
|
72
|
+
dangerouslyLoadClientComponents: {
|
|
73
|
+
type: BooleanConstructor;
|
|
74
|
+
default: boolean;
|
|
75
|
+
};
|
|
76
|
+
}>> & Readonly<{
|
|
77
|
+
onError?: ((...args: any[]) => any) | undefined;
|
|
78
|
+
}>, (_ctx: any, _cache: any) => (import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
79
|
+
[key: string]: any;
|
|
80
|
+
}> | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
81
|
+
[key: string]: any;
|
|
82
|
+
}>[])[] | import("vue").VNode<any, any, {
|
|
83
|
+
[key: string]: any;
|
|
84
|
+
}>[], {}, {}, {}, {
|
|
85
|
+
props: Record<string, any>;
|
|
86
|
+
source: string;
|
|
87
|
+
scopeId: string | null | undefined;
|
|
88
|
+
lazy: boolean;
|
|
89
|
+
context: Record<string, any>;
|
|
90
|
+
dangerouslyLoadClientComponents: boolean;
|
|
91
|
+
}>;
|
|
92
|
+
__isFragment?: never;
|
|
93
|
+
__isTeleport?: never;
|
|
94
|
+
__isSuspense?: never;
|
|
95
|
+
} & import("vue").ComponentOptionsBase<Readonly<import("vue").ExtractPropTypes<{
|
|
96
|
+
name: {
|
|
97
|
+
type: StringConstructor;
|
|
98
|
+
required: true;
|
|
99
|
+
};
|
|
100
|
+
lazy: BooleanConstructor;
|
|
101
|
+
props: {
|
|
102
|
+
type: ObjectConstructor;
|
|
103
|
+
default: () => undefined;
|
|
104
|
+
};
|
|
105
|
+
context: {
|
|
106
|
+
type: ObjectConstructor;
|
|
107
|
+
default: () => {};
|
|
108
|
+
};
|
|
109
|
+
scopeId: {
|
|
110
|
+
type: import("vue").PropType<string | undefined | null>;
|
|
111
|
+
default: () => undefined;
|
|
112
|
+
};
|
|
113
|
+
source: {
|
|
114
|
+
type: StringConstructor;
|
|
115
|
+
default: () => undefined;
|
|
116
|
+
};
|
|
117
|
+
dangerouslyLoadClientComponents: {
|
|
118
|
+
type: BooleanConstructor;
|
|
119
|
+
default: boolean;
|
|
120
|
+
};
|
|
121
|
+
}>> & Readonly<{
|
|
122
|
+
onError?: ((...args: any[]) => any) | undefined;
|
|
123
|
+
}>, (_ctx: any, _cache: any) => (import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
124
|
+
[key: string]: any;
|
|
125
|
+
}> | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
126
|
+
[key: string]: any;
|
|
127
|
+
}>[])[] | import("vue").VNode<any, any, {
|
|
128
|
+
[key: string]: any;
|
|
129
|
+
}>[], {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "error"[], "error", {
|
|
130
|
+
props: Record<string, any>;
|
|
131
|
+
source: string;
|
|
132
|
+
scopeId: string | null | undefined;
|
|
133
|
+
lazy: boolean;
|
|
134
|
+
context: Record<string, any>;
|
|
135
|
+
dangerouslyLoadClientComponents: boolean;
|
|
136
|
+
}, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
|
|
2
137
|
export default HintsNuxtIsland;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { FeaturesName } from './types.js';
|
|
2
|
+
import type { FeatureOptionsMap } from '../feature-options.js';
|
|
3
|
+
export declare function isFeatureDevtoolsEnabled(feature: FeaturesName): boolean;
|
|
4
|
+
export declare function isFeatureLogsEnabled(feature: FeaturesName): boolean;
|
|
5
|
+
export declare function isFeatureEnabled(feature: FeaturesName): boolean;
|
|
6
|
+
export declare function getFeatureOptions<K extends keyof FeatureOptionsMap>(feature: K): FeatureOptionsMap[K] | undefined;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { features } from "#shared/hints-config";
|
|
2
|
+
export function isFeatureDevtoolsEnabled(feature) {
|
|
3
|
+
return features[feature] != null && typeof features[feature] === "object" ? features[feature].devtools !== false : !!features[feature];
|
|
4
|
+
}
|
|
5
|
+
export function isFeatureLogsEnabled(feature) {
|
|
6
|
+
return features[feature] != null && typeof features[feature] === "object" ? features[feature].logs !== false : !!features[feature];
|
|
7
|
+
}
|
|
8
|
+
export function isFeatureEnabled(feature) {
|
|
9
|
+
return !!features[feature];
|
|
10
|
+
}
|
|
11
|
+
export function getFeatureOptions(feature) {
|
|
12
|
+
const val = features[feature];
|
|
13
|
+
if (typeof val === "object" && val.options) {
|
|
14
|
+
return val.options;
|
|
15
|
+
}
|
|
16
|
+
return void 0;
|
|
17
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { defineNuxtPlugin } from "#imports";
|
|
2
|
+
import { features } from "#shared/hints-config";
|
|
3
|
+
export default defineNuxtPlugin({
|
|
4
|
+
name: "hints:features",
|
|
5
|
+
setup(nuxtApp) {
|
|
6
|
+
Object.defineProperty(nuxtApp, "hints", {
|
|
7
|
+
get() {
|
|
8
|
+
return Object.freeze({
|
|
9
|
+
config: {
|
|
10
|
+
features
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
});
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default:
|
|
1
|
+
declare const _default: import("nuxt/app").Plugin<Record<string, unknown>> & import("nuxt/app").ObjectPlugin<Record<string, unknown>>;
|
|
2
2
|
export default _default;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { FeatureOptionsMap } from '../feature-options.js';
|
|
2
|
+
export type FeaturesName = 'hydration' | 'lazyLoad' | 'webVitals' | 'thirdPartyScripts' | 'htmlValidate';
|
|
3
|
+
export type FeatureFlags<T extends Record<string, any> = Record<string, never>> = {
|
|
4
|
+
logs?: boolean;
|
|
5
|
+
devtools?: boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Any feature specific options
|
|
8
|
+
*/
|
|
9
|
+
options?: T;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Fully-resolved features configuration type, where each feature
|
|
13
|
+
* can be a simple boolean or a FeatureFlags with its own options.
|
|
14
|
+
*/
|
|
15
|
+
export type Features = {
|
|
16
|
+
[K in FeaturesName]: boolean | FeatureFlags<K extends keyof FeatureOptionsMap ? FeatureOptionsMap[K] : Record<string, never>>;
|
|
17
|
+
};
|
|
File without changes
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { HtmlValidateFeatureOptions } from './html-validate/types.js';
|
|
2
|
+
import type { ThirdPartyScriptsFeatureOptions } from './third-party-scripts/types.js';
|
|
3
|
+
import type { WebVitalsFeatureOptions } from './web-vitals/types.js';
|
|
4
|
+
export interface FeatureOptionsMap {
|
|
5
|
+
thirdPartyScripts: ThirdPartyScriptsFeatureOptions;
|
|
6
|
+
htmlValidate: HtmlValidateFeatureOptions;
|
|
7
|
+
webVitals: WebVitalsFeatureOptions;
|
|
8
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const deleteHandler: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<{}>>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createError, defineEventHandler, setResponseStatus } from "h3";
|
|
2
|
+
import { storage } from "../storage.js";
|
|
3
|
+
import { useNitroApp } from "nitropack/runtime";
|
|
4
|
+
export const deleteHandler = defineEventHandler(async (event) => {
|
|
5
|
+
const nitro = useNitroApp();
|
|
6
|
+
const id = event.context.params?.id;
|
|
7
|
+
if (typeof id === "string") {
|
|
8
|
+
await storage.removeItem(id);
|
|
9
|
+
setResponseStatus(event, 204);
|
|
10
|
+
nitro.hooks.callHook("hints:html-validate:deleted", id);
|
|
11
|
+
return {};
|
|
12
|
+
}
|
|
13
|
+
throw createError({
|
|
14
|
+
statusCode: 404,
|
|
15
|
+
statusMessage: "Not Found"
|
|
16
|
+
});
|
|
17
|
+
});
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { defineEventHandler } from "h3";
|
|
2
|
+
import { storage } from "../storage.js";
|
|
3
|
+
export const getAllHandler = defineEventHandler(() => {
|
|
4
|
+
return storage.getKeys().then((keys) => Promise.all(keys.map((key) => storage.getItem(key)))).then((items) => items.filter((item) => item !== null));
|
|
5
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { join } from "pathe";
|
|
2
|
+
import { HTMLVALIDATE_ROUTE } from "../utils.js";
|
|
3
|
+
import { getAllHandler } from "./get.js";
|
|
4
|
+
import { deleteHandler } from "./delete.js";
|
|
5
|
+
export default (function(nitro) {
|
|
6
|
+
nitro.router.add(
|
|
7
|
+
HTMLVALIDATE_ROUTE,
|
|
8
|
+
getAllHandler,
|
|
9
|
+
"get"
|
|
10
|
+
);
|
|
11
|
+
nitro.router.add(
|
|
12
|
+
join(HTMLVALIDATE_ROUTE, ":id"),
|
|
13
|
+
deleteHandler,
|
|
14
|
+
"delete"
|
|
15
|
+
);
|
|
16
|
+
nitro.hooks.hook("hints:sse:setup", (context) => {
|
|
17
|
+
context.unsubscribers.push(
|
|
18
|
+
nitro.hooks.hook("hints:html-validate:report", (report) => {
|
|
19
|
+
context.eventStream.push(
|
|
20
|
+
{
|
|
21
|
+
data: JSON.stringify(report),
|
|
22
|
+
event: "hints:html-validate:report"
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
}),
|
|
26
|
+
nitro.hooks.hook("hints:html-validate:deleted", (id) => {
|
|
27
|
+
context.eventStream.push(
|
|
28
|
+
{
|
|
29
|
+
data: id,
|
|
30
|
+
event: "hints:html-validate:deleted"
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
})
|
|
34
|
+
);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { HtmlValidate } from "html-validate";
|
|
2
|
+
import { addBeforeBodyEndTag } from "./utils.js";
|
|
3
|
+
import { storage } from "./storage.js";
|
|
4
|
+
import { randomUUID } from "crypto";
|
|
5
|
+
import { stringify } from "devalue";
|
|
6
|
+
import { format } from "prettier/standalone";
|
|
7
|
+
import html from "prettier/parser-html";
|
|
8
|
+
import { getFeatureOptions } from "../core/features.js";
|
|
9
|
+
import { defu } from "defu";
|
|
10
|
+
const DEFAULT_EXTENDS = [
|
|
11
|
+
"html-validate:standard",
|
|
12
|
+
"html-validate:document",
|
|
13
|
+
"html-validate:browser"
|
|
14
|
+
];
|
|
15
|
+
const DEFAULT_RULES = {
|
|
16
|
+
"svg-focusable": "off",
|
|
17
|
+
"no-unknown-elements": "error",
|
|
18
|
+
"void-style": "off",
|
|
19
|
+
"no-trailing-whitespace": "off",
|
|
20
|
+
// Conflict with Nuxt defaults
|
|
21
|
+
"require-sri": "off",
|
|
22
|
+
"attribute-boolean-style": "off",
|
|
23
|
+
"doctype-style": "off",
|
|
24
|
+
// Unreasonable rule
|
|
25
|
+
"no-inline-style": "off"
|
|
26
|
+
};
|
|
27
|
+
export default (function(nitro) {
|
|
28
|
+
const opts = defu({
|
|
29
|
+
extends: DEFAULT_EXTENDS,
|
|
30
|
+
rules: DEFAULT_RULES
|
|
31
|
+
}, getFeatureOptions("htmlValidate") ?? {});
|
|
32
|
+
const validator = new HtmlValidate(opts);
|
|
33
|
+
nitro.hooks.hook("render:response", async (response, { event }) => {
|
|
34
|
+
if (typeof response.body === "string" && (response.headers?.["Content-Type"] || response.headers?.["content-type"])?.includes("html")) {
|
|
35
|
+
const formattedBody = await format(response.body, { plugins: [html], parser: "html" });
|
|
36
|
+
const results = await validator.validateString(formattedBody);
|
|
37
|
+
if (response.body && results.errorCount > 0) {
|
|
38
|
+
const id = randomUUID();
|
|
39
|
+
const data = {
|
|
40
|
+
id,
|
|
41
|
+
path: event.path,
|
|
42
|
+
html: formattedBody,
|
|
43
|
+
results: results.results
|
|
44
|
+
};
|
|
45
|
+
storage.setItem(id, data);
|
|
46
|
+
response.body = addBeforeBodyEndTag(
|
|
47
|
+
response.body,
|
|
48
|
+
`<script id="hints-html-validate" type="application/json">${stringify(data)}<\/script>`
|
|
49
|
+
);
|
|
50
|
+
nitro.hooks.callHook("hints:html-validate:report", data);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { defineNuxtPlugin } from "#imports";
|
|
2
|
+
import { parse } from "devalue";
|
|
3
|
+
import { logger } from "./utils.js";
|
|
4
|
+
export default defineNuxtPlugin({
|
|
5
|
+
name: "@nuxt/hints:html-validate",
|
|
6
|
+
setup() {
|
|
7
|
+
const el = document.getElementById("hints-html-validate");
|
|
8
|
+
const raw = el?.textContent;
|
|
9
|
+
if (!raw) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
let data;
|
|
13
|
+
try {
|
|
14
|
+
data = parse(raw);
|
|
15
|
+
} catch (err) {
|
|
16
|
+
logger.warn("[html-validate] Failed to parse report payload", err);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (!data?.results || !Array.isArray(data.results)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
for (const result of data.results) {
|
|
23
|
+
result.messages.forEach((message) => {
|
|
24
|
+
logger.warn(`[html-validate] ${message.ruleId} at ${result.filePath}:${message.line}:${message.column} - ${message.message}`);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const storage: import("unstorage").Storage<import("unstorage").StorageValue>;
|
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { join } from "pathe";
|
|
2
|
+
import { HINTS_ROUTE } from "../core/server/types.js";
|
|
3
|
+
import { createHintsLogger } from "../logger.js";
|
|
4
|
+
export const logger = createHintsLogger("htmlValidate");
|
|
5
|
+
export const HTMLVALIDATE_ROUTE = join(HINTS_ROUTE, "html-validate");
|
|
6
|
+
export function addBeforeBodyEndTag(html, content) {
|
|
7
|
+
const closingBodyTagIndex = html.lastIndexOf("</body>");
|
|
8
|
+
if (closingBodyTagIndex === -1) {
|
|
9
|
+
return html + content;
|
|
10
|
+
}
|
|
11
|
+
return html.slice(0, closingBodyTagIndex) + content + html.slice(closingBodyTagIndex);
|
|
12
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { getCurrentInstance, inject, onMounted } from "vue";
|
|
1
|
+
import { getCurrentInstance, inject, markRaw, onMounted } from "vue";
|
|
2
2
|
import { useNuxtApp } from "#imports";
|
|
3
|
-
import { HYDRATION_ROUTE, formatHTML } from "./utils.js";
|
|
4
|
-
import { logger } from "../logger.js";
|
|
3
|
+
import { HYDRATION_ROUTE, formatHTML, logger } from "./utils.js";
|
|
5
4
|
import { clientOnlySymbol } from "#app/components/client-only";
|
|
5
|
+
import { isFeatureDevtoolsEnabled } from "../core/features.js";
|
|
6
6
|
export function useHydrationCheck() {
|
|
7
7
|
const isClientOnly = inject(clientOnlySymbol, false);
|
|
8
8
|
if (import.meta.server || isClientOnly) {
|
|
@@ -27,17 +27,19 @@ export function useHydrationCheck() {
|
|
|
27
27
|
componentName,
|
|
28
28
|
fileLocation
|
|
29
29
|
};
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
30
|
+
if (isFeatureDevtoolsEnabled("hydration")) {
|
|
31
|
+
$fetch(new URL(HYDRATION_ROUTE, window.location.origin).href, {
|
|
32
|
+
method: "POST",
|
|
33
|
+
body
|
|
34
|
+
}).then((payload) => {
|
|
35
|
+
nuxtApp.payload.__hints.hydration.push({
|
|
36
|
+
...payload,
|
|
37
|
+
instance: markRaw(instance),
|
|
38
|
+
vnode: markRaw(vnodePrehydration)
|
|
39
|
+
});
|
|
38
40
|
});
|
|
39
|
-
}
|
|
40
|
-
logger.warn(`[hydration] Component ${componentName
|
|
41
|
+
}
|
|
42
|
+
logger.warn(`[hydration] Component ${componentName} at ${fileLocation} seems to have different html pre and post-hydration. Please make sure you don't have any hydration issue.`);
|
|
41
43
|
}
|
|
42
44
|
});
|
|
43
45
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default:
|
|
1
|
+
declare const _default: import("nuxt/app").Plugin<Record<string, unknown>> & import("nuxt/app").ObjectPlugin<Record<string, unknown>>;
|
|
2
2
|
export default _default;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { HINTS_ROUTE, HINTS_SSE_ROUTE } from "../core/server/types.js";
|
|
2
|
+
import { createHintsLogger } from "../logger.js";
|
|
3
|
+
export const logger = createHintsLogger("hydration");
|
|
2
4
|
export const HYDRATION_ROUTE = `${HINTS_ROUTE}/hydration`;
|
|
3
5
|
export const HYDRATION_SSE_ROUTE = HINTS_SSE_ROUTE;
|
|
4
6
|
export function formatHTML(html) {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default:
|
|
1
|
+
declare const _default: import("nuxt/app").Plugin<Record<string, unknown>> & import("nuxt/app").ObjectPlugin<Record<string, unknown>>;
|
|
2
2
|
export default _default;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { defineNuxtPlugin, useNuxtApp, useRoute } from "#imports";
|
|
2
2
|
import { defu } from "defu";
|
|
3
3
|
import { useLazyComponentTracking } from "./composables.js";
|
|
4
|
-
import { logger } from "
|
|
5
|
-
import {
|
|
4
|
+
import { logger, LAZY_LOAD_ROUTE } from "./utils.js";
|
|
5
|
+
import { isFeatureDevtoolsEnabled } from "../core/features.js";
|
|
6
6
|
export default defineNuxtPlugin({
|
|
7
7
|
name: "@nuxt/hints:lazy-load",
|
|
8
8
|
dependsOn: ["nuxt:router"],
|
|
@@ -53,7 +53,7 @@ function reportSuggestions(suggestions) {
|
|
|
53
53
|
Used in: ${suggestion.importedBy}`
|
|
54
54
|
);
|
|
55
55
|
}
|
|
56
|
-
if (suggestions.length) {
|
|
56
|
+
if (suggestions.length && isFeatureDevtoolsEnabled("lazyLoad")) {
|
|
57
57
|
const payload = {
|
|
58
58
|
id: `${encodeURIComponent(route.path)}-${Date.now()}`,
|
|
59
59
|
route: route.path,
|
package/dist/runtime/logger.d.ts
CHANGED
package/dist/runtime/logger.js
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
import { createConsola } from "consola";
|
|
2
|
+
import { isFeatureLogsEnabled } from "./core/features.js";
|
|
3
|
+
export function createHintsLogger(feature) {
|
|
4
|
+
return createConsola({
|
|
5
|
+
level: isFeatureLogsEnabled(feature) ? void 0 : 0
|
|
6
|
+
}).withTag(`hints:${feature}`);
|
|
7
|
+
}
|
|
2
8
|
export const logger = createConsola().withTag("hints");
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default:
|
|
1
|
+
declare const _default: import("nuxt/app").Plugin<Record<string, unknown>> & import("nuxt/app").ObjectPlugin<Record<string, unknown>>;
|
|
2
2
|
export default _default;
|
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
import { defineNuxtPlugin,
|
|
1
|
+
import { defineNuxtPlugin, shallowRef, useNuxtApp } from "#imports";
|
|
2
2
|
import { defu } from "defu";
|
|
3
|
-
import { logger } from "
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
import { logger } from "./utils.js";
|
|
4
|
+
import { getFeatureOptions } from "../core/features.js";
|
|
5
|
+
const DEFAULT_EXTENSION_SCHEMES = ["chrome-extension", "moz-extension", "safari-extension", "ms-browser-extension"];
|
|
6
|
+
function escapeRegExp(s) {
|
|
7
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
8
|
+
}
|
|
9
|
+
function buildExtensionSchemesRegex(schemes) {
|
|
10
|
+
return new RegExp(`^(${schemes.map(escapeRegExp).join("|")}):`);
|
|
11
|
+
}
|
|
12
|
+
function isExtensionScript(src, schemesRegex) {
|
|
6
13
|
try {
|
|
7
14
|
const url = new URL(src, window.location.origin);
|
|
8
|
-
return
|
|
15
|
+
return schemesRegex.test(url.protocol);
|
|
9
16
|
} catch {
|
|
10
17
|
return false;
|
|
11
18
|
}
|
|
@@ -18,15 +25,28 @@ function isSameOriginScript(src) {
|
|
|
18
25
|
return false;
|
|
19
26
|
}
|
|
20
27
|
}
|
|
21
|
-
function
|
|
22
|
-
|
|
28
|
+
function isIgnoredDomain(src, ignoredDomains) {
|
|
29
|
+
if (ignoredDomains.length === 0) return false;
|
|
30
|
+
try {
|
|
31
|
+
const url = new URL(src, window.location.origin);
|
|
32
|
+
return ignoredDomains.some((domain) => url.hostname === domain || url.hostname.endsWith(`.${domain}`));
|
|
33
|
+
} catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
23
36
|
}
|
|
24
37
|
export default defineNuxtPlugin({
|
|
25
38
|
name: "nuxt-hints:third-party-scripts",
|
|
26
39
|
setup() {
|
|
27
40
|
const nuxtApp = useNuxtApp();
|
|
41
|
+
const opts = getFeatureOptions("thirdPartyScripts") ?? {};
|
|
42
|
+
const extensionSchemes = [...DEFAULT_EXTENSION_SCHEMES, ...opts.ignoredSchemes ?? []];
|
|
43
|
+
const schemesRegex = buildExtensionSchemesRegex(extensionSchemes);
|
|
44
|
+
const ignoredDomains = opts.ignoredDomains ?? [];
|
|
45
|
+
function isIgnoredScript(src) {
|
|
46
|
+
return isSameOriginScript(src) || isExtensionScript(src, schemesRegex) || isIgnoredDomain(src, ignoredDomains);
|
|
47
|
+
}
|
|
28
48
|
nuxtApp.payload.__hints = defu(nuxtApp.payload.__hints, {
|
|
29
|
-
thirdPartyScripts:
|
|
49
|
+
thirdPartyScripts: shallowRef([])
|
|
30
50
|
});
|
|
31
51
|
const scripts = nuxtApp.payload.__hints.thirdPartyScripts;
|
|
32
52
|
const isUsingNuxtScripts = !!nuxtApp.$scripts;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface ThirdPartyScriptsFeatureOptions {
|
|
2
|
+
/** Additional domains to ignore when detecting third-party scripts */
|
|
3
|
+
ignoredDomains?: string[];
|
|
4
|
+
/** Additional URL scheme patterns to ignore (default includes browser extension schemes) */
|
|
5
|
+
ignoredSchemes?: string[];
|
|
6
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const logger: import("consola").ConsolaInstance;
|