@sonordev/site-kit 5.7.0 → 5.8.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 +3 -3
- package/agent-manifest.json +14 -2
- package/dist/AnalyticsProvider-ERNSZ4DH.mjs +12 -0
- package/dist/{AnalyticsProvider-EWF7JN2X.mjs.map → AnalyticsProvider-ERNSZ4DH.mjs.map} +1 -1
- package/dist/AnalyticsProvider-HE6V5UJD.js +33 -0
- package/dist/{AnalyticsProvider-GJFG7YXA.js.map → AnalyticsProvider-HE6V5UJD.js.map} +1 -1
- package/dist/{BlogViewTracker-CKYG6MYU.mjs → BlogViewTracker-2NQ5LBVR.mjs} +13 -10
- package/dist/BlogViewTracker-2NQ5LBVR.mjs.map +1 -0
- package/dist/{BlogViewTracker-2D3IJPJK.js → BlogViewTracker-4OGWSC2Q.js} +14 -11
- package/dist/BlogViewTracker-4OGWSC2Q.js.map +1 -0
- package/dist/ChatWidget-67CHHONZ.js +24 -0
- package/dist/{ChatWidget-AWP6GBVW.js.map → ChatWidget-67CHHONZ.js.map} +1 -1
- package/dist/ChatWidget-T4RICLLT.mjs +15 -0
- package/dist/{ChatWidget-Z5QXDZP3.mjs.map → ChatWidget-T4RICLLT.mjs.map} +1 -1
- package/dist/EngageWidget-TDW2ZI3Q.js +21 -0
- package/dist/{EngageWidget-VT4DYXVO.js.map → EngageWidget-TDW2ZI3Q.js.map} +1 -1
- package/dist/EngageWidget-WXEQTV4X.mjs +12 -0
- package/dist/{EngageWidget-BKEY5TPO.mjs.map → EngageWidget-WXEQTV4X.mjs.map} +1 -1
- package/dist/{FileField-62ZWZMQK.js → FileField-DEVOXJSO.js} +6 -6
- package/dist/{FileField-62ZWZMQK.js.map → FileField-DEVOXJSO.js.map} +1 -1
- package/dist/{FileField-JJN5QKDL.mjs → FileField-Y5YM365S.mjs} +5 -5
- package/dist/{FileField-JJN5QKDL.mjs.map → FileField-Y5YM365S.mjs.map} +1 -1
- package/dist/{FormSpotlight-URS4XRS7.js → FormSpotlight-4Q5FM3YS.js} +25 -21
- package/dist/FormSpotlight-4Q5FM3YS.js.map +1 -0
- package/dist/{FormSpotlight-OTFB6QM5.mjs → FormSpotlight-T3ASGUYB.mjs} +11 -7
- package/dist/FormSpotlight-T3ASGUYB.mjs.map +1 -0
- package/dist/{FormStage-FVKMIV73.js → FormStage-PSAIPZBS.js} +20 -15
- package/dist/FormStage-PSAIPZBS.js.map +1 -0
- package/dist/{FormStage-VPGOCMAV.mjs → FormStage-U5V4MI5Q.mjs} +9 -4
- package/dist/FormStage-U5V4MI5Q.mjs.map +1 -0
- package/dist/ManagedForm-EAZOMNSL.mjs +16 -0
- package/dist/{ManagedForm-CXVDJMHN.mjs.map → ManagedForm-EAZOMNSL.mjs.map} +1 -1
- package/dist/ManagedForm-R6DJXU34.js +25 -0
- package/dist/{ManagedForm-FGNTDGED.js.map → ManagedForm-R6DJXU34.js.map} +1 -1
- package/dist/{ManagedNewsletterForm-SQYB4BZU.mjs → ManagedNewsletterForm-5RY3TWPQ.mjs} +9 -7
- package/dist/ManagedNewsletterForm-5RY3TWPQ.mjs.map +1 -0
- package/dist/{ManagedNewsletterForm-3O5L44AZ.js → ManagedNewsletterForm-VX6GMZXJ.js} +10 -8
- package/dist/ManagedNewsletterForm-VX6GMZXJ.js.map +1 -0
- package/dist/{SignalCore-RFBOBNLQ.js → SignalCore-MWHF2WG4.js} +14 -20
- package/dist/SignalCore-MWHF2WG4.js.map +1 -0
- package/dist/{SignalCore-M2PKKIGH.mjs → SignalCore-ZT6EQGV3.mjs} +8 -14
- package/dist/SignalCore-ZT6EQGV3.mjs.map +1 -0
- package/dist/SitemapSync-OG4TQLDB.mjs +9 -0
- package/dist/{SitemapSync-4OVMIIGC.mjs.map → SitemapSync-OG4TQLDB.mjs.map} +1 -1
- package/dist/SitemapSync-Z62BGZMV.js +18 -0
- package/dist/{SitemapSync-RK3SQ4M2.js.map → SitemapSync-Z62BGZMV.js.map} +1 -1
- package/dist/analytics/AnalyticsProvider.d.ts.map +1 -1
- package/dist/analytics/index.js +10 -9
- package/dist/analytics/index.mjs +5 -4
- package/dist/api-D745LGGU.mjs +0 -1
- package/dist/api-XR5APCH3.js +0 -1
- package/dist/blog/BlogLayout.d.ts +3 -1
- package/dist/blog/BlogLayout.d.ts.map +1 -1
- package/dist/blog/BlogList.d.ts +7 -1
- package/dist/blog/BlogList.d.ts.map +1 -1
- package/dist/blog/BlogPost.d.ts +20 -1
- package/dist/blog/BlogPost.d.ts.map +1 -1
- package/dist/blog/BlogSidebar.d.ts +3 -1
- package/dist/blog/BlogSidebar.d.ts.map +1 -1
- package/dist/blog/BlogViewTracker.d.ts +8 -2
- package/dist/blog/BlogViewTracker.d.ts.map +1 -1
- package/dist/blog/ClusterLandingPage.d.ts +3 -1
- package/dist/blog/ClusterLandingPage.d.ts.map +1 -1
- package/dist/blog/ClusterNavigation.d.ts +5 -2
- package/dist/blog/ClusterNavigation.d.ts.map +1 -1
- package/dist/blog/RelatedPosts.d.ts +3 -1
- package/dist/blog/RelatedPosts.d.ts.map +1 -1
- package/dist/blog/index.d.ts +1 -1
- package/dist/blog/index.d.ts.map +1 -1
- package/dist/blog/index.js +40 -31
- package/dist/blog/index.js.map +1 -1
- package/dist/blog/index.mjs +11 -6
- package/dist/blog/index.mjs.map +1 -1
- package/dist/blog/processBlogHtml.d.ts +19 -2
- package/dist/blog/processBlogHtml.d.ts.map +1 -1
- package/dist/blog/public-reads.d.ts +27 -0
- package/dist/blog/public-reads.d.ts.map +1 -0
- package/dist/blog/server-core.d.ts +76 -10
- package/dist/blog/server-core.d.ts.map +1 -1
- package/dist/blog/server-ui.js +29 -23
- package/dist/blog/server-ui.js.map +1 -1
- package/dist/blog/server-ui.mjs +12 -6
- package/dist/blog/server-ui.mjs.map +1 -1
- package/dist/blog/server.d.ts +76 -10
- package/dist/blog/server.d.ts.map +1 -1
- package/dist/blog/server.js +54 -47
- package/dist/blog/server.mjs +5 -2
- package/dist/brand/extract-brand-profile.d.ts +36 -2
- package/dist/brand/extract-brand-profile.d.ts.map +1 -1
- package/dist/{chunk-MW2M6O7A.mjs → chunk-26EKSVXM.mjs} +4 -4
- package/dist/{chunk-MW2M6O7A.mjs.map → chunk-26EKSVXM.mjs.map} +1 -1
- package/dist/{chunk-D553G64G.js → chunk-2HPQTRUB.js} +13 -13
- package/dist/{chunk-D553G64G.js.map → chunk-2HPQTRUB.js.map} +1 -1
- package/dist/{chunk-BFJOZ3MU.mjs → chunk-3EY5E35M.mjs} +36 -71
- package/dist/chunk-3EY5E35M.mjs.map +1 -0
- package/dist/{chunk-BUJWXSYZ.mjs → chunk-3TQUARVN.mjs} +4 -4
- package/dist/{chunk-BUJWXSYZ.mjs.map → chunk-3TQUARVN.mjs.map} +1 -1
- package/dist/{chunk-OYOO2OO5.js → chunk-3VRWKKTD.js} +10 -10
- package/dist/{chunk-OYOO2OO5.js.map → chunk-3VRWKKTD.js.map} +1 -1
- package/dist/{chunk-BFM5PEFV.js → chunk-43I7U5AI.js} +56 -177
- package/dist/chunk-43I7U5AI.js.map +1 -0
- package/dist/{chunk-ILNCUSXW.mjs → chunk-4L7OHRWB.mjs} +12 -9
- package/dist/chunk-4L7OHRWB.mjs.map +1 -0
- package/dist/chunk-4LYW6PMU.mjs +72 -0
- package/dist/chunk-4LYW6PMU.mjs.map +1 -0
- package/dist/chunk-4TLFZ6NR.mjs +16 -0
- package/dist/chunk-4TLFZ6NR.mjs.map +1 -0
- package/dist/{chunk-JQ7M6CVL.mjs → chunk-4VSDMNQU.mjs} +3 -3
- package/dist/{chunk-JQ7M6CVL.mjs.map → chunk-4VSDMNQU.mjs.map} +1 -1
- package/dist/{chunk-4B4S56WJ.mjs → chunk-5B4J3IBX.mjs} +75 -21
- package/dist/chunk-5B4J3IBX.mjs.map +1 -0
- package/dist/{chunk-M5GY2AI3.mjs → chunk-5K6B4LWV.mjs} +4 -10
- package/dist/chunk-5K6B4LWV.mjs.map +1 -0
- package/dist/chunk-5SANRSX3.mjs +17 -0
- package/dist/chunk-5SANRSX3.mjs.map +1 -0
- package/dist/chunk-5XFFUP6D.js +100 -0
- package/dist/chunk-5XFFUP6D.js.map +1 -0
- package/dist/chunk-5YA6SI4Z.mjs +0 -1
- package/dist/{chunk-TDJKGN5Q.mjs → chunk-62Y4W4LR.mjs} +216 -103
- package/dist/chunk-62Y4W4LR.mjs.map +1 -0
- package/dist/{chunk-3CLP35TT.mjs → chunk-6S3JE66D.mjs} +62 -97
- package/dist/chunk-6S3JE66D.mjs.map +1 -0
- package/dist/{chunk-4A5V73SR.mjs → chunk-6WEZWYRU.mjs} +9 -9
- package/dist/{chunk-4A5V73SR.mjs.map → chunk-6WEZWYRU.mjs.map} +1 -1
- package/dist/{chunk-JTF4DFUF.mjs → chunk-7AEVA667.mjs} +4 -4
- package/dist/{chunk-JTF4DFUF.mjs.map → chunk-7AEVA667.mjs.map} +1 -1
- package/dist/{chunk-H65OX263.js → chunk-7DV7Y7BZ.js} +15 -15
- package/dist/{chunk-H65OX263.js.map → chunk-7DV7Y7BZ.js.map} +1 -1
- package/dist/{chunk-7ZX6TO6C.mjs → chunk-7H4HB4UZ.mjs} +50 -26
- package/dist/chunk-7H4HB4UZ.mjs.map +1 -0
- package/dist/{chunk-FO4KGPGF.js → chunk-7TC3GRXQ.js} +73 -38
- package/dist/chunk-7TC3GRXQ.js.map +1 -0
- package/dist/{chunk-UQ5YULFU.mjs → chunk-AUHUEIBB.mjs} +4 -4
- package/dist/{chunk-UQ5YULFU.mjs.map → chunk-AUHUEIBB.mjs.map} +1 -1
- package/dist/{chunk-BQGEVMIR.mjs → chunk-AWF73RU2.mjs} +5 -5
- package/dist/{chunk-BQGEVMIR.mjs.map → chunk-AWF73RU2.mjs.map} +1 -1
- package/dist/{chunk-ELQ4SRRR.js → chunk-BHBW2SZF.js} +15 -15
- package/dist/{chunk-ELQ4SRRR.js.map → chunk-BHBW2SZF.js.map} +1 -1
- package/dist/{chunk-RNAGCAIB.js → chunk-BIGXEYKT.js} +7 -7
- package/dist/{chunk-RNAGCAIB.js.map → chunk-BIGXEYKT.js.map} +1 -1
- package/dist/chunk-BQP6JIE2.mjs +28 -0
- package/dist/chunk-BQP6JIE2.mjs.map +1 -0
- package/dist/{chunk-VFGEY6FJ.js → chunk-BY35X57A.js} +223 -110
- package/dist/chunk-BY35X57A.js.map +1 -0
- package/dist/{chunk-3YQILJKJ.js → chunk-CGCUHIAR.js} +60 -35
- package/dist/chunk-CGCUHIAR.js.map +1 -0
- package/dist/chunk-CUNZAD46.js +53 -0
- package/dist/chunk-CUNZAD46.js.map +1 -0
- package/dist/{chunk-FEWWGEQF.js → chunk-CWUYI6LI.js} +4 -4
- package/dist/{chunk-FEWWGEQF.js.map → chunk-CWUYI6LI.js.map} +1 -1
- package/dist/chunk-CXAXZFFW.js +157 -0
- package/dist/chunk-CXAXZFFW.js.map +1 -0
- package/dist/{chunk-H4OBGC43.mjs → chunk-DA7IANFG.mjs} +14 -3
- package/dist/chunk-DA7IANFG.mjs.map +1 -0
- package/dist/{chunk-57AFHENV.mjs → chunk-EHAUNF4V.mjs} +3 -3
- package/dist/{chunk-57AFHENV.mjs.map → chunk-EHAUNF4V.mjs.map} +1 -1
- package/dist/{chunk-2N27LCZH.js → chunk-FEKPEI2G.js} +9 -9
- package/dist/{chunk-2N27LCZH.js.map → chunk-FEKPEI2G.js.map} +1 -1
- package/dist/{chunk-LC7AM4J5.js → chunk-FHPW7XVH.js} +77 -20
- package/dist/chunk-FHPW7XVH.js.map +1 -0
- package/dist/{chunk-JNRHTZL4.js → chunk-FVW6FT6L.js} +73 -29
- package/dist/chunk-FVW6FT6L.js.map +1 -0
- package/dist/{chunk-YKUEFRZI.js → chunk-FWW4K6QP.js} +14 -14
- package/dist/{chunk-YKUEFRZI.js.map → chunk-FWW4K6QP.js.map} +1 -1
- package/dist/{chunk-JNAXDFC4.mjs → chunk-GF4LV5LX.mjs} +38 -156
- package/dist/chunk-GF4LV5LX.mjs.map +1 -0
- package/dist/{chunk-C563AHZZ.mjs → chunk-GKFTJ5AF.mjs} +3 -3
- package/dist/{chunk-C563AHZZ.mjs.map → chunk-GKFTJ5AF.mjs.map} +1 -1
- package/dist/{chunk-OZ3FU4BT.js → chunk-H5NBFNND.js} +2 -2
- package/dist/chunk-H5NBFNND.js.map +1 -0
- package/dist/chunk-HCN3IKMW.mjs +106 -0
- package/dist/chunk-HCN3IKMW.mjs.map +1 -0
- package/dist/{chunk-6FC5Q4KU.mjs → chunk-HOJ4J4X2.mjs} +30 -12
- package/dist/chunk-HOJ4J4X2.mjs.map +1 -0
- package/dist/{chunk-H6YVT3BL.js → chunk-I3ND4XYW.js} +12 -9
- package/dist/chunk-I3ND4XYW.js.map +1 -0
- package/dist/chunk-I7AZC5ZQ.js +0 -1
- package/dist/{chunk-V5THCFPG.mjs → chunk-JFJ7NHS3.mjs} +4 -4
- package/dist/{chunk-V5THCFPG.mjs.map → chunk-JFJ7NHS3.mjs.map} +1 -1
- package/dist/{chunk-KXGD4E7G.js → chunk-JI4EUPHB.js} +7 -7
- package/dist/{chunk-KXGD4E7G.js.map → chunk-JI4EUPHB.js.map} +1 -1
- package/dist/{chunk-GZJE23Y5.mjs → chunk-JLVCWC6A.mjs} +2 -2
- package/dist/chunk-JLVCWC6A.mjs.map +1 -0
- package/dist/chunk-JOYMIGR2.mjs +0 -1
- package/dist/chunk-JS75ORH7.js +0 -1
- package/dist/{chunk-Q7347KP6.mjs → chunk-JX5SM2MX.mjs} +6 -12
- package/dist/chunk-JX5SM2MX.mjs.map +1 -0
- package/dist/chunk-K4TCEAUX.js +52 -0
- package/dist/chunk-K4TCEAUX.js.map +1 -0
- package/dist/chunk-KV7XXLJV.mjs +30 -0
- package/dist/chunk-KV7XXLJV.mjs.map +1 -0
- package/dist/{chunk-JTCQJKJE.js → chunk-LIAISQUE.js} +76 -111
- package/dist/chunk-LIAISQUE.js.map +1 -0
- package/dist/{chunk-CPY74A4F.js → chunk-LMEUYRRR.js} +72 -106
- package/dist/chunk-LMEUYRRR.js.map +1 -0
- package/dist/{chunk-4WBTM6YE.js → chunk-LOEP76MQ.js} +4 -4
- package/dist/{chunk-4WBTM6YE.js.map → chunk-LOEP76MQ.js.map} +1 -1
- package/dist/chunk-LVGSOW2F.js +32 -0
- package/dist/chunk-LVGSOW2F.js.map +1 -0
- package/dist/{chunk-DOB37PV4.js → chunk-M45AL7EA.js} +37 -19
- package/dist/chunk-M45AL7EA.js.map +1 -0
- package/dist/{chunk-RCSTDJUH.js → chunk-M4UVFUFR.js} +8 -13
- package/dist/chunk-M4UVFUFR.js.map +1 -0
- package/dist/{chunk-R2SXXFXZ.mjs → chunk-MI2SRBCR.mjs} +3 -3
- package/dist/{chunk-R2SXXFXZ.mjs.map → chunk-MI2SRBCR.mjs.map} +1 -1
- package/dist/chunk-MLVHVKFT.mjs +148 -0
- package/dist/chunk-MLVHVKFT.mjs.map +1 -0
- package/dist/{chunk-L7ACQ6PC.js → chunk-MOAYT3KN.js} +4 -4
- package/dist/{chunk-L7ACQ6PC.js.map → chunk-MOAYT3KN.js.map} +1 -1
- package/dist/chunk-NG2TTI7D.js +8 -0
- package/dist/{chunk-5TXXTYXL.js.map → chunk-NG2TTI7D.js.map} +1 -1
- package/dist/{chunk-C4PZ2R3B.js → chunk-NLDN6PYM.js} +10 -10
- package/dist/{chunk-C4PZ2R3B.js.map → chunk-NLDN6PYM.js.map} +1 -1
- package/dist/chunk-NN2YE5WT.js +0 -1
- package/dist/chunk-NNZDWY3L.mjs +0 -1
- package/dist/chunk-NRBITVDK.js +114 -0
- package/dist/chunk-NRBITVDK.js.map +1 -0
- package/dist/{chunk-TSZIACRC.js → chunk-OBKYF4TP.js} +6 -12
- package/dist/chunk-OBKYF4TP.js.map +1 -0
- package/dist/{chunk-TP7H6BSK.mjs → chunk-OE7CTIOU.mjs} +73 -30
- package/dist/chunk-OE7CTIOU.mjs.map +1 -0
- package/dist/chunk-OESGRWI4.mjs +6 -0
- package/dist/{chunk-QRBPT6Z6.mjs.map → chunk-OESGRWI4.mjs.map} +1 -1
- package/dist/{chunk-UJ6CHZAI.mjs → chunk-OEW2LFOV.js} +169 -25
- package/dist/chunk-OEW2LFOV.js.map +1 -0
- package/dist/chunk-P4Y75QSU.js +19 -0
- package/dist/chunk-P4Y75QSU.js.map +1 -0
- package/dist/{chunk-47XQWV4S.mjs → chunk-PQVQAX67.mjs} +3 -3
- package/dist/{chunk-47XQWV4S.mjs.map → chunk-PQVQAX67.mjs.map} +1 -1
- package/dist/chunk-QRHVMTHF.mjs +94 -0
- package/dist/chunk-QRHVMTHF.mjs.map +1 -0
- package/dist/{chunk-FBDHKYNF.mjs → chunk-R4B3DFF4.mjs} +3 -3
- package/dist/{chunk-FBDHKYNF.mjs.map → chunk-R4B3DFF4.mjs.map} +1 -1
- package/dist/chunk-R7GHP3FY.js +81 -0
- package/dist/chunk-R7GHP3FY.js.map +1 -0
- package/dist/{chunk-4UVM7E2W.js → chunk-S5VL7AWW.js} +3 -3
- package/dist/{chunk-4UVM7E2W.js.map → chunk-S5VL7AWW.js.map} +1 -1
- package/dist/{chunk-P4TB4ROG.js → chunk-SEP5D4MI.js} +8 -2
- package/dist/chunk-SEP5D4MI.js.map +1 -0
- package/dist/{chunk-L4V6TKMJ.mjs → chunk-U2V542EO.mjs} +7 -3
- package/dist/chunk-U2V542EO.mjs.map +1 -0
- package/dist/{chunk-HBN4A2N4.mjs → chunk-U6H5ZY3B.mjs} +3 -3
- package/dist/{chunk-HBN4A2N4.mjs.map → chunk-U6H5ZY3B.mjs.map} +1 -1
- package/dist/{chunk-H7274TKR.mjs → chunk-VJV7WUR2.mjs} +12 -4
- package/dist/chunk-VJV7WUR2.mjs.map +1 -0
- package/dist/{chunk-F3AKYZOH.js → chunk-WED6ZDVS.js} +6 -13
- package/dist/chunk-WED6ZDVS.js.map +1 -0
- package/dist/{chunk-5B4FABFK.js → chunk-WS7MH3GD.js} +14 -2
- package/dist/chunk-WS7MH3GD.js.map +1 -0
- package/dist/{chunk-XLPU3TEE.mjs → chunk-X22BGNVL.mjs} +4 -4
- package/dist/{chunk-XLPU3TEE.mjs.map → chunk-X22BGNVL.mjs.map} +1 -1
- package/dist/{chunk-IPV2TUAT.js → chunk-XA2GJFVM.js} +12 -4
- package/dist/chunk-XA2GJFVM.js.map +1 -0
- package/dist/chunk-XBX2K3GA.js +33 -0
- package/dist/chunk-XBX2K3GA.js.map +1 -0
- package/dist/{chunk-ABZGEHTC.mjs → chunk-XSAHJ2BB.mjs} +3 -3
- package/dist/{chunk-ABZGEHTC.mjs.map → chunk-XSAHJ2BB.mjs.map} +1 -1
- package/dist/{chunk-6CJP7BFM.js → chunk-XZO5I4RS.mjs} +147 -20
- package/dist/chunk-XZO5I4RS.mjs.map +1 -0
- package/dist/chunk-Y5QZPUL3.mjs +47 -0
- package/dist/chunk-Y5QZPUL3.mjs.map +1 -0
- package/dist/{chunk-NOU3JQJK.js → chunk-Y6Z2W45H.js} +8 -8
- package/dist/{chunk-NOU3JQJK.js.map → chunk-Y6Z2W45H.js.map} +1 -1
- package/dist/{chunk-YYDZ2TYR.js → chunk-YCFYQN2Q.js} +3 -3
- package/dist/{chunk-YYDZ2TYR.js.map → chunk-YCFYQN2Q.js.map} +1 -1
- package/dist/chunk-YN7QHLWF.js +19 -0
- package/dist/chunk-YN7QHLWF.js.map +1 -0
- package/dist/{chunk-O2VJZOR2.mjs → chunk-YRNDASQY.mjs} +6 -11
- package/dist/chunk-YRNDASQY.mjs.map +1 -0
- package/dist/chunk-YU7QZ3PP.mjs +45 -0
- package/dist/chunk-YU7QZ3PP.mjs.map +1 -0
- package/dist/{chunk-3S5JN6KL.js → chunk-ZV6HIQRQ.js} +6 -6
- package/dist/{chunk-3S5JN6KL.js.map → chunk-ZV6HIQRQ.js.map} +1 -1
- package/dist/{chunk-RVRN5U7W.mjs → chunk-ZVI7MBVF.mjs} +73 -38
- package/dist/chunk-ZVI7MBVF.mjs.map +1 -0
- package/dist/cli/agent/checks.d.ts +15 -1
- package/dist/cli/agent/checks.d.ts.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/og.d.ts +26 -8
- package/dist/cli/commands/og.d.ts.map +1 -1
- package/dist/cli/index.js +683 -323
- package/dist/cli/index.mjs +604 -244
- package/dist/client/index.js +6 -6
- package/dist/client/index.mjs +5 -5
- package/dist/commerce/CheckoutForm.d.ts.map +1 -1
- package/dist/commerce/ProductDetail.d.ts.map +1 -1
- package/dist/commerce/api.d.ts +14 -0
- package/dist/commerce/api.d.ts.map +1 -1
- package/dist/commerce/index.d.ts +1 -1
- package/dist/commerce/index.d.ts.map +1 -1
- package/dist/commerce/index.js +61 -56
- package/dist/commerce/index.mjs +6 -5
- package/dist/config/index.js +3 -3
- package/dist/config/index.mjs +1 -1
- package/dist/discover-CYXYKHZ2.mjs +4 -0
- package/dist/{discover-FGTKWOL3.mjs.map → discover-CYXYKHZ2.mjs.map} +1 -1
- package/dist/discover-NGEPXZOD.js +21 -0
- package/dist/{discover-NJZPWTDL.js.map → discover-NGEPXZOD.js.map} +1 -1
- package/dist/engage/index.js +12 -10
- package/dist/engage/index.js.map +1 -1
- package/dist/engage/index.mjs +9 -7
- package/dist/engage/index.mjs.map +1 -1
- package/dist/fleet/index.js +8 -8
- package/dist/fleet/index.mjs +4 -4
- package/dist/forms/FormClient.d.ts.map +1 -1
- package/dist/forms/FormField.d.ts +7 -1
- package/dist/forms/FormField.d.ts.map +1 -1
- package/dist/forms/FormSpotlight.d.ts +1 -1
- package/dist/forms/FormSpotlight.d.ts.map +1 -1
- package/dist/forms/FormStage.d.ts +1 -1
- package/dist/forms/FormStage.d.ts.map +1 -1
- package/dist/forms/experience-plan.d.ts +0 -1
- package/dist/forms/experience-plan.d.ts.map +1 -1
- package/dist/forms/field-interactions.d.ts +63 -0
- package/dist/forms/field-interactions.d.ts.map +1 -0
- package/dist/forms/field-rules.d.ts +41 -0
- package/dist/forms/field-rules.d.ts.map +1 -0
- package/dist/forms/index.js +25 -23
- package/dist/forms/index.js.map +1 -1
- package/dist/forms/index.mjs +13 -11
- package/dist/forms/index.mjs.map +1 -1
- package/dist/forms/server.js +11 -11
- package/dist/forms/server.mjs +9 -9
- package/dist/forms/static.js +8 -8
- package/dist/forms/static.mjs +7 -7
- package/dist/forms/tracking-session.d.ts +48 -3
- package/dist/forms/tracking-session.d.ts.map +1 -1
- package/dist/forms/types.d.ts +11 -0
- package/dist/forms/types.d.ts.map +1 -1
- package/dist/forms/useForm.d.ts +8 -0
- package/dist/forms/useForm.d.ts.map +1 -1
- package/dist/forms/useFormTracking.d.ts +29 -4
- package/dist/forms/useFormTracking.d.ts.map +1 -1
- package/dist/images/index.js +11 -11
- package/dist/images/index.mjs +4 -4
- package/dist/index.js +72 -68
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +14 -10
- package/dist/index.mjs.map +1 -1
- package/dist/layout/client.js +10 -10
- package/dist/layout/client.mjs +9 -9
- package/dist/layout/index.js +13 -12
- package/dist/layout/index.js.map +1 -1
- package/dist/layout/index.mjs +11 -10
- package/dist/layout/index.mjs.map +1 -1
- package/dist/lib-6HOOMENJ.js +0 -1
- package/dist/lib-BGAWCSUH.js +0 -1
- package/dist/lib-R7IQ4ZHE.mjs +0 -1
- package/dist/lib-RSDMEKDQ.mjs +0 -1
- package/dist/llms/aiRobots.d.ts +20 -4
- package/dist/llms/aiRobots.d.ts.map +1 -1
- package/dist/llms/api.d.ts +8 -3
- package/dist/llms/api.d.ts.map +1 -1
- package/dist/llms/discovery-headers.d.ts +24 -0
- package/dist/llms/discovery-headers.d.ts.map +1 -1
- package/dist/llms/generateLLMsTxt.d.ts.map +1 -1
- package/dist/llms/index.d.ts +2 -2
- package/dist/llms/index.d.ts.map +1 -1
- package/dist/llms/index.js +45 -96
- package/dist/llms/index.js.map +1 -1
- package/dist/llms/index.mjs +11 -81
- package/dist/llms/index.mjs.map +1 -1
- package/dist/llms/links.d.ts +26 -0
- package/dist/llms/links.d.ts.map +1 -0
- package/dist/llms/types.d.ts +15 -0
- package/dist/llms/types.d.ts.map +1 -1
- package/dist/llms/wiring.d.ts +22 -0
- package/dist/llms/wiring.d.ts.map +1 -1
- package/dist/llms/writeLLMsTxt.d.ts +9 -0
- package/dist/llms/writeLLMsTxt.d.ts.map +1 -1
- package/dist/maps/index.js +5 -5
- package/dist/maps/index.mjs +3 -3
- package/dist/motion/gsap.d.ts +54 -0
- package/dist/motion/gsap.d.ts.map +1 -1
- package/dist/motion/gsap.js +34 -4
- package/dist/motion/gsap.js.map +1 -1
- package/dist/motion/gsap.mjs +33 -5
- package/dist/motion/gsap.mjs.map +1 -1
- package/dist/og/config.d.ts +6 -0
- package/dist/og/config.d.ts.map +1 -1
- package/dist/og/contrast.d.ts +33 -0
- package/dist/og/contrast.d.ts.map +1 -0
- package/dist/og/index.d.ts +2 -0
- package/dist/og/index.d.ts.map +1 -1
- package/dist/og/index.js +26 -8
- package/dist/og/index.mjs +3 -1
- package/dist/og/pages.d.ts +101 -0
- package/dist/og/pages.d.ts.map +1 -1
- package/dist/og/route-copy.d.ts +34 -0
- package/dist/og/route-copy.d.ts.map +1 -0
- package/dist/og/route-fit.d.ts +77 -0
- package/dist/og/route-fit.d.ts.map +1 -0
- package/dist/og/route.d.ts +80 -20
- package/dist/og/route.d.ts.map +1 -1
- package/dist/og/route.js +195 -25
- package/dist/og/route.js.map +1 -1
- package/dist/og/route.mjs +193 -26
- package/dist/og/route.mjs.map +1 -1
- package/dist/og/template.d.ts.map +1 -1
- package/dist/og/wiring.d.ts +43 -3
- package/dist/og/wiring.d.ts.map +1 -1
- package/dist/proxy/index.d.ts.map +1 -1
- package/dist/proxy/index.js +15 -10
- package/dist/proxy/index.js.map +1 -1
- package/dist/proxy/index.mjs +12 -7
- package/dist/proxy/index.mjs.map +1 -1
- package/dist/redirects/index.d.ts +24 -0
- package/dist/redirects/index.d.ts.map +1 -1
- package/dist/redirects/index.js +11 -8
- package/dist/redirects/index.mjs +4 -1
- package/dist/redirects/not-found.js +8 -5
- package/dist/redirects/not-found.js.map +1 -1
- package/dist/redirects/not-found.mjs +4 -1
- package/dist/redirects/not-found.mjs.map +1 -1
- package/dist/robots/index.d.ts +2 -0
- package/dist/robots/index.d.ts.map +1 -1
- package/dist/robots/index.js +23 -3
- package/dist/robots/index.js.map +1 -1
- package/dist/robots/index.mjs +2 -2
- package/dist/robots/index.mjs.map +1 -1
- package/dist/search/index.js +4 -4
- package/dist/search/index.mjs +3 -3
- package/dist/seo/ManagedContent.d.ts +4 -2
- package/dist/seo/ManagedContent.d.ts.map +1 -1
- package/dist/seo/ManagedFAQ.d.ts.map +1 -1
- package/dist/seo/ManagedInternalLinks.d.ts.map +1 -1
- package/dist/seo/ManagedSchema.d.ts.map +1 -1
- package/dist/seo/client.js +6 -6
- package/dist/seo/client.mjs +5 -5
- package/dist/seo/getManagedMetadata.d.ts.map +1 -1
- package/dist/seo/index.js +59 -49
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/index.mjs +29 -19
- package/dist/seo/index.mjs.map +1 -1
- package/dist/seo/register-sitemap-cli-impl.d.ts +32 -0
- package/dist/seo/register-sitemap-cli-impl.d.ts.map +1 -1
- package/dist/seo/register-sitemap-cli.d.ts +7 -0
- package/dist/seo/register-sitemap-cli.d.ts.map +1 -1
- package/dist/seo/register-sitemap-cli.js +273 -57
- package/dist/seo/register-sitemap-cli.mjs +269 -53
- package/dist/seo/register-sitemap-request.d.ts +36 -0
- package/dist/seo/register-sitemap-request.d.ts.map +1 -0
- package/dist/seo/routing.d.ts +2 -0
- package/dist/seo/routing.d.ts.map +1 -1
- package/dist/seo/schema-filter.d.ts +43 -0
- package/dist/seo/schema-filter.d.ts.map +1 -0
- package/dist/seo/server-api.d.ts +15 -2
- package/dist/seo/server-api.d.ts.map +1 -1
- package/dist/seo/server.js +23 -18
- package/dist/seo/server.mjs +7 -2
- package/dist/seo/types.d.ts +30 -0
- package/dist/seo/types.d.ts.map +1 -1
- package/dist/seo-meta/contract.d.ts +60 -0
- package/dist/seo-meta/contract.d.ts.map +1 -0
- package/dist/seo-meta/contract.js +41 -0
- package/dist/seo-meta/contract.js.map +1 -0
- package/dist/seo-meta/contract.mjs +4 -0
- package/dist/seo-meta/contract.mjs.map +1 -0
- package/dist/server/index.js +4 -3
- package/dist/server/index.mjs +3 -2
- package/dist/server/mint-site-token.d.ts +2 -32
- package/dist/server/mint-site-token.d.ts.map +1 -1
- package/dist/{server-api-RG3ZL3DV.mjs → server-api-A2EFCTZX.mjs} +7 -3
- package/dist/{server-api-RG3ZL3DV.mjs.map → server-api-A2EFCTZX.mjs.map} +1 -1
- package/dist/{server-api-RYJQAUGO.js → server-api-IWTZ7C3O.js} +25 -21
- package/dist/{server-api-RYJQAUGO.js.map → server-api-IWTZ7C3O.js.map} +1 -1
- package/dist/shared/build-entries.d.ts +2 -0
- package/dist/shared/build-entries.d.ts.map +1 -1
- package/dist/shared/fresh-fetch.d.ts +64 -0
- package/dist/shared/fresh-fetch.d.ts.map +1 -0
- package/dist/shared/next-files.d.ts +7 -0
- package/dist/shared/next-files.d.ts.map +1 -1
- package/dist/shared/page-leave.d.ts +27 -0
- package/dist/shared/page-leave.d.ts.map +1 -0
- package/dist/shared/source-graph.d.ts +63 -0
- package/dist/shared/source-graph.d.ts.map +1 -0
- package/dist/shared/version.d.ts +1 -1
- package/dist/signal/SignalCore.d.ts.map +1 -1
- package/dist/signal/index.js +11 -11
- package/dist/signal/index.mjs +2 -2
- package/dist/sitemap/index.d.ts +19 -4
- package/dist/sitemap/index.d.ts.map +1 -1
- package/dist/sitemap/index.js +53 -43
- package/dist/sitemap/index.js.map +1 -1
- package/dist/sitemap/index.mjs +37 -27
- package/dist/sitemap/index.mjs.map +1 -1
- package/dist/sitemap/shared.d.ts +65 -0
- package/dist/sitemap/shared.d.ts.map +1 -1
- package/dist/sites/resolve.d.ts.map +1 -1
- package/dist/sites/site-param.d.ts +16 -0
- package/dist/sites/site-param.d.ts.map +1 -0
- package/dist/sync/index.js +17 -17
- package/dist/sync/index.mjs +4 -4
- package/dist/writeLLMsTxt-CQ7A4AAL.js +19 -0
- package/dist/writeLLMsTxt-NX5MSPYX.mjs +10 -0
- package/package.json +9 -4
- package/dist/AnalyticsProvider-EWF7JN2X.mjs +0 -11
- package/dist/AnalyticsProvider-GJFG7YXA.js +0 -32
- package/dist/BlogViewTracker-2D3IJPJK.js.map +0 -1
- package/dist/BlogViewTracker-CKYG6MYU.mjs.map +0 -1
- package/dist/ChatWidget-AWP6GBVW.js +0 -22
- package/dist/ChatWidget-Z5QXDZP3.mjs +0 -13
- package/dist/EngageWidget-BKEY5TPO.mjs +0 -12
- package/dist/EngageWidget-VT4DYXVO.js +0 -21
- package/dist/FormSpotlight-OTFB6QM5.mjs.map +0 -1
- package/dist/FormSpotlight-URS4XRS7.js.map +0 -1
- package/dist/FormStage-FVKMIV73.js.map +0 -1
- package/dist/FormStage-VPGOCMAV.mjs.map +0 -1
- package/dist/ManagedForm-CXVDJMHN.mjs +0 -14
- package/dist/ManagedForm-FGNTDGED.js +0 -23
- package/dist/ManagedNewsletterForm-3O5L44AZ.js.map +0 -1
- package/dist/ManagedNewsletterForm-SQYB4BZU.mjs.map +0 -1
- package/dist/SignalCore-M2PKKIGH.mjs.map +0 -1
- package/dist/SignalCore-RFBOBNLQ.js.map +0 -1
- package/dist/SitemapSync-4OVMIIGC.mjs +0 -9
- package/dist/SitemapSync-RK3SQ4M2.js +0 -18
- package/dist/analytics/send-gate.test.d.ts +0 -20
- package/dist/analytics/send-gate.test.d.ts.map +0 -1
- package/dist/api-D745LGGU.mjs.map +0 -1
- package/dist/api-XR5APCH3.js.map +0 -1
- package/dist/blog/artwork-components.test.d.ts +0 -2
- package/dist/blog/artwork-components.test.d.ts.map +0 -1
- package/dist/blog/artwork.test.d.ts +0 -2
- package/dist/blog/artwork.test.d.ts.map +0 -1
- package/dist/blog/author-social.test.d.ts +0 -2
- package/dist/blog/author-social.test.d.ts.map +0 -1
- package/dist/blog/blog-tables.test.d.ts +0 -2
- package/dist/blog/blog-tables.test.d.ts.map +0 -1
- package/dist/blog/blog-view-tracker.test.d.ts +0 -2
- package/dist/blog/blog-view-tracker.test.d.ts.map +0 -1
- package/dist/blog/category-metadata.test.d.ts +0 -2
- package/dist/blog/category-metadata.test.d.ts.map +0 -1
- package/dist/blog/metadata-images.test.d.ts +0 -2
- package/dist/blog/metadata-images.test.d.ts.map +0 -1
- package/dist/blog/newsletter-widget.test.d.ts +0 -2
- package/dist/blog/newsletter-widget.test.d.ts.map +0 -1
- package/dist/blog/publication-render.test.d.ts +0 -2
- package/dist/blog/publication-render.test.d.ts.map +0 -1
- package/dist/blog/publication-routes.test.d.ts +0 -2
- package/dist/blog/publication-routes.test.d.ts.map +0 -1
- package/dist/blog/reading-time.test.d.ts +0 -2
- package/dist/blog/reading-time.test.d.ts.map +0 -1
- package/dist/blog/sanitize-excerpt.test.d.ts +0 -2
- package/dist/blog/sanitize-excerpt.test.d.ts.map +0 -1
- package/dist/blog/server-core-contract.test.d.ts +0 -2
- package/dist/blog/server-core-contract.test.d.ts.map +0 -1
- package/dist/blog/static-params.test.d.ts +0 -2
- package/dist/blog/static-params.test.d.ts.map +0 -1
- package/dist/blog/tag-links.test.d.ts +0 -2
- package/dist/blog/tag-links.test.d.ts.map +0 -1
- package/dist/blog/types-wire-shape.test.d.ts +0 -2
- package/dist/blog/types-wire-shape.test.d.ts.map +0 -1
- package/dist/brand/status-contrast.test.d.ts +0 -2
- package/dist/brand/status-contrast.test.d.ts.map +0 -1
- package/dist/chunk-3CLP35TT.mjs.map +0 -1
- package/dist/chunk-3UC6JETG.js +0 -32
- package/dist/chunk-3UC6JETG.js.map +0 -1
- package/dist/chunk-3YQILJKJ.js.map +0 -1
- package/dist/chunk-4B4S56WJ.mjs.map +0 -1
- package/dist/chunk-5B4FABFK.js.map +0 -1
- package/dist/chunk-5TXXTYXL.js +0 -8
- package/dist/chunk-5YA6SI4Z.mjs.map +0 -1
- package/dist/chunk-6CJP7BFM.js.map +0 -1
- package/dist/chunk-6FC5Q4KU.mjs.map +0 -1
- package/dist/chunk-7ZX6TO6C.mjs.map +0 -1
- package/dist/chunk-AWK57R5S.mjs +0 -29
- package/dist/chunk-AWK57R5S.mjs.map +0 -1
- package/dist/chunk-BFJOZ3MU.mjs.map +0 -1
- package/dist/chunk-BFM5PEFV.js.map +0 -1
- package/dist/chunk-CPY74A4F.js.map +0 -1
- package/dist/chunk-DOB37PV4.js.map +0 -1
- package/dist/chunk-F3AKYZOH.js.map +0 -1
- package/dist/chunk-FO4KGPGF.js.map +0 -1
- package/dist/chunk-GZJE23Y5.mjs.map +0 -1
- package/dist/chunk-H4OBGC43.mjs.map +0 -1
- package/dist/chunk-H6YVT3BL.js.map +0 -1
- package/dist/chunk-H7274TKR.mjs.map +0 -1
- package/dist/chunk-I7AZC5ZQ.js.map +0 -1
- package/dist/chunk-ILNCUSXW.mjs.map +0 -1
- package/dist/chunk-IPV2TUAT.js.map +0 -1
- package/dist/chunk-JEOKDUPQ.js +0 -45
- package/dist/chunk-JEOKDUPQ.js.map +0 -1
- package/dist/chunk-JNAXDFC4.mjs.map +0 -1
- package/dist/chunk-JNRHTZL4.js.map +0 -1
- package/dist/chunk-JOYMIGR2.mjs.map +0 -1
- package/dist/chunk-JS75ORH7.js.map +0 -1
- package/dist/chunk-JTCQJKJE.js.map +0 -1
- package/dist/chunk-L4V6TKMJ.mjs.map +0 -1
- package/dist/chunk-LC7AM4J5.js.map +0 -1
- package/dist/chunk-M5GY2AI3.mjs.map +0 -1
- package/dist/chunk-NN2YE5WT.js.map +0 -1
- package/dist/chunk-NNZDWY3L.mjs.map +0 -1
- package/dist/chunk-O2VJZOR2.mjs.map +0 -1
- package/dist/chunk-OZ3FU4BT.js.map +0 -1
- package/dist/chunk-P4TB4ROG.js.map +0 -1
- package/dist/chunk-Q7347KP6.mjs.map +0 -1
- package/dist/chunk-QJU6HBSK.mjs +0 -39
- package/dist/chunk-QJU6HBSK.mjs.map +0 -1
- package/dist/chunk-QRBPT6Z6.mjs +0 -6
- package/dist/chunk-RCSTDJUH.js.map +0 -1
- package/dist/chunk-RVRN5U7W.mjs.map +0 -1
- package/dist/chunk-TDJKGN5Q.mjs.map +0 -1
- package/dist/chunk-TP7H6BSK.mjs.map +0 -1
- package/dist/chunk-TSZIACRC.js.map +0 -1
- package/dist/chunk-UJ6CHZAI.mjs.map +0 -1
- package/dist/chunk-VFGEY6FJ.js.map +0 -1
- package/dist/cli/agent/envelope.test.d.ts +0 -2
- package/dist/cli/agent/envelope.test.d.ts.map +0 -1
- package/dist/cli/agent/ssr-bailout.test.d.ts +0 -2
- package/dist/cli/agent/ssr-bailout.test.d.ts.map +0 -1
- package/dist/cli/codemod/diff.test.d.ts +0 -2
- package/dist/cli/codemod/diff.test.d.ts.map +0 -1
- package/dist/cli/codemod/transforms.test.d.ts +0 -2
- package/dist/cli/codemod/transforms.test.d.ts.map +0 -1
- package/dist/cli/commands/config-regression.test.d.ts +0 -2
- package/dist/cli/commands/config-regression.test.d.ts.map +0 -1
- package/dist/cli/commands/geo.test.d.ts +0 -2
- package/dist/cli/commands/geo.test.d.ts.map +0 -1
- package/dist/cli/commands/og.test.d.ts +0 -2
- package/dist/cli/commands/og.test.d.ts.map +0 -1
- package/dist/cli/config.test.d.ts +0 -2
- package/dist/cli/config.test.d.ts.map +0 -1
- package/dist/cli/generators/index.test.d.ts +0 -2
- package/dist/cli/generators/index.test.d.ts.map +0 -1
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/index.mjs.map +0 -1
- package/dist/cli/state.test.d.ts +0 -2
- package/dist/cli/state.test.d.ts.map +0 -1
- package/dist/commerce/events-extras.test.d.ts +0 -2
- package/dist/commerce/events-extras.test.d.ts.map +0 -1
- package/dist/commerce/server-result.test.d.ts +0 -2
- package/dist/commerce/server-result.test.d.ts.map +0 -1
- package/dist/discover-FGTKWOL3.mjs +0 -4
- package/dist/discover-NJZPWTDL.js +0 -21
- package/dist/engage/chat-launcher.test.d.ts +0 -2
- package/dist/engage/chat-launcher.test.d.ts.map +0 -1
- package/dist/engage/dependency-contract.test.d.ts +0 -2
- package/dist/engage/dependency-contract.test.d.ts.map +0 -1
- package/dist/engage/launcher-placement.test.d.ts +0 -2
- package/dist/engage/launcher-placement.test.d.ts.map +0 -1
- package/dist/fleet/contract.test.d.ts +0 -2
- package/dist/fleet/contract.test.d.ts.map +0 -1
- package/dist/fleet/heartbeat.test.d.ts +0 -2
- package/dist/fleet/heartbeat.test.d.ts.map +0 -1
- package/dist/forms/contract.test.d.ts +0 -2
- package/dist/forms/contract.test.d.ts.map +0 -1
- package/dist/forms/ga4-identity.test.d.ts +0 -2
- package/dist/forms/ga4-identity.test.d.ts.map +0 -1
- package/dist/forms/native-fallback.test.d.ts +0 -2
- package/dist/forms/native-fallback.test.d.ts.map +0 -1
- package/dist/forms/stage.test.d.ts +0 -2
- package/dist/forms/stage.test.d.ts.map +0 -1
- package/dist/forms/static-form.test.d.ts +0 -2
- package/dist/forms/static-form.test.d.ts.map +0 -1
- package/dist/forms/tracking-session.test.d.ts +0 -22
- package/dist/forms/tracking-session.test.d.ts.map +0 -1
- package/dist/landing/contract.test.d.ts +0 -2
- package/dist/landing/contract.test.d.ts.map +0 -1
- package/dist/landing/server-entry.test.d.ts +0 -2
- package/dist/landing/server-entry.test.d.ts.map +0 -1
- package/dist/lib-6HOOMENJ.js.map +0 -1
- package/dist/lib-BGAWCSUH.js.map +0 -1
- package/dist/lib-R7IQ4ZHE.mjs.map +0 -1
- package/dist/lib-RSDMEKDQ.mjs.map +0 -1
- package/dist/llms/aiRobots.test.d.ts +0 -2
- package/dist/llms/aiRobots.test.d.ts.map +0 -1
- package/dist/llms/contract.test.d.ts +0 -2
- package/dist/llms/contract.test.d.ts.map +0 -1
- package/dist/llms/discovery-headers.test.d.ts +0 -2
- package/dist/llms/discovery-headers.test.d.ts.map +0 -1
- package/dist/llms/generateLLMsTxt.test.d.ts +0 -2
- package/dist/llms/generateLLMsTxt.test.d.ts.map +0 -1
- package/dist/llms/handlers.test.d.ts +0 -2
- package/dist/llms/handlers.test.d.ts.map +0 -1
- package/dist/llms/humanize-industry.test.d.ts +0 -2
- package/dist/llms/humanize-industry.test.d.ts.map +0 -1
- package/dist/llms/sourcedFacts.test.d.ts +0 -2
- package/dist/llms/sourcedFacts.test.d.ts.map +0 -1
- package/dist/llms/wiring.test.d.ts +0 -2
- package/dist/llms/wiring.test.d.ts.map +0 -1
- package/dist/llms/writeLLMsTxt.test.d.ts +0 -2
- package/dist/llms/writeLLMsTxt.test.d.ts.map +0 -1
- package/dist/mcp/protocol.test.d.ts +0 -2
- package/dist/mcp/protocol.test.d.ts.map +0 -1
- package/dist/motion/motion.test.d.ts +0 -16
- package/dist/motion/motion.test.d.ts.map +0 -1
- package/dist/og/pages.test.d.ts +0 -2
- package/dist/og/pages.test.d.ts.map +0 -1
- package/dist/og/template.test.d.ts +0 -2
- package/dist/og/template.test.d.ts.map +0 -1
- package/dist/og/wiring.test.d.ts +0 -2
- package/dist/og/wiring.test.d.ts.map +0 -1
- package/dist/portfolio/contract.test.d.ts +0 -2
- package/dist/portfolio/contract.test.d.ts.map +0 -1
- package/dist/proxy/securityHeaders.test.d.ts +0 -2
- package/dist/proxy/securityHeaders.test.d.ts.map +0 -1
- package/dist/proxy/segment.test.d.ts +0 -2
- package/dist/proxy/segment.test.d.ts.map +0 -1
- package/dist/robots/index.test.d.ts +0 -2
- package/dist/robots/index.test.d.ts.map +0 -1
- package/dist/seo/register-sitemap-cli-impl.test.d.ts +0 -2
- package/dist/seo/register-sitemap-cli-impl.test.d.ts.map +0 -1
- package/dist/seo/register-sitemap-cli.js.map +0 -1
- package/dist/seo/register-sitemap-cli.mjs.map +0 -1
- package/dist/seo-pages/contract.test.d.ts +0 -2
- package/dist/seo-pages/contract.test.d.ts.map +0 -1
- package/dist/server/mint-site-token.test.d.ts +0 -2
- package/dist/server/mint-site-token.test.d.ts.map +0 -1
- package/dist/server/server-fetch.test.d.ts +0 -2
- package/dist/server/server-fetch.test.d.ts.map +0 -1
- package/dist/shared/client-entry-boundary.test.d.ts +0 -2
- package/dist/shared/client-entry-boundary.test.d.ts.map +0 -1
- package/dist/shared/next-files.test.d.ts +0 -2
- package/dist/shared/next-files.test.d.ts.map +0 -1
- package/dist/shared/no-cjs-require.test.d.ts +0 -2
- package/dist/shared/no-cjs-require.test.d.ts.map +0 -1
- package/dist/shared/publishCredential.test.d.ts +0 -2
- package/dist/shared/publishCredential.test.d.ts.map +0 -1
- package/dist/shared/raw-browser-api-guard.test.d.ts +0 -15
- package/dist/shared/raw-browser-api-guard.test.d.ts.map +0 -1
- package/dist/shared/siteToken.test.d.ts +0 -2
- package/dist/shared/siteToken.test.d.ts.map +0 -1
- package/dist/shared/sonorFetch.test.d.ts +0 -2
- package/dist/shared/sonorFetch.test.d.ts.map +0 -1
- package/dist/shared/uuid.test.d.ts +0 -2
- package/dist/shared/uuid.test.d.ts.map +0 -1
- package/dist/shared/version.test.d.ts +0 -2
- package/dist/shared/version.test.d.ts.map +0 -1
- package/dist/shared/visual-viewport-gap.test.d.ts +0 -2
- package/dist/shared/visual-viewport-gap.test.d.ts.map +0 -1
- package/dist/sitemap/discover.test.d.ts +0 -2
- package/dist/sitemap/discover.test.d.ts.map +0 -1
- package/dist/sitemap/shared.test.d.ts +0 -2
- package/dist/sitemap/shared.test.d.ts.map +0 -1
- package/dist/sitemap/site-scope.test.d.ts +0 -2
- package/dist/sitemap/site-scope.test.d.ts.map +0 -1
- package/dist/sites/contract.test.d.ts +0 -2
- package/dist/sites/contract.test.d.ts.map +0 -1
- package/dist/slots/ManagedSlot.test.d.ts +0 -2
- package/dist/slots/ManagedSlot.test.d.ts.map +0 -1
- package/dist/slots/contract.test.d.ts +0 -2
- package/dist/slots/contract.test.d.ts.map +0 -1
- package/dist/slots/revalidate.test.d.ts +0 -2
- package/dist/slots/revalidate.test.d.ts.map +0 -1
- package/dist/slots/server-api.test.d.ts +0 -2
- package/dist/slots/server-api.test.d.ts.map +0 -1
- package/dist/sync/add-to-calendar.test.d.ts +0 -2
- package/dist/sync/add-to-calendar.test.d.ts.map +0 -1
- package/dist/sync/api-errors.test.d.ts +0 -2
- package/dist/sync/api-errors.test.d.ts.map +0 -1
- package/dist/sync/booking-flow.test.d.ts +0 -2
- package/dist/sync/booking-flow.test.d.ts.map +0 -1
package/dist/cli/index.js
CHANGED
|
@@ -3,15 +3,17 @@
|
|
|
3
3
|
|
|
4
4
|
var chunkJS75ORH7_js = require('../chunk-JS75ORH7.js');
|
|
5
5
|
var chunkI7AZC5ZQ_js = require('../chunk-I7AZC5ZQ.js');
|
|
6
|
-
var
|
|
6
|
+
var chunkOEW2LFOV_js = require('../chunk-OEW2LFOV.js');
|
|
7
|
+
var chunkCUNZAD46_js = require('../chunk-CUNZAD46.js');
|
|
7
8
|
var chunkNN2YE5WT_js = require('../chunk-NN2YE5WT.js');
|
|
8
|
-
var
|
|
9
|
-
var
|
|
9
|
+
var chunkSEP5D4MI_js = require('../chunk-SEP5D4MI.js');
|
|
10
|
+
var chunkR7GHP3FY_js = require('../chunk-R7GHP3FY.js');
|
|
11
|
+
var chunkNG2TTI7D_js = require('../chunk-NG2TTI7D.js');
|
|
10
12
|
var chunkSNAQBZPT_js = require('../chunk-SNAQBZPT.js');
|
|
11
13
|
var events = require('events');
|
|
12
14
|
var childProcess = require('child_process');
|
|
13
15
|
var path12 = require('path');
|
|
14
|
-
var
|
|
16
|
+
var fs20 = require('fs');
|
|
15
17
|
var process2 = require('process');
|
|
16
18
|
var util = require('util');
|
|
17
19
|
var os = require('os');
|
|
@@ -49,7 +51,7 @@ function _interopNamespace(e) {
|
|
|
49
51
|
|
|
50
52
|
var childProcess__default = /*#__PURE__*/_interopDefault(childProcess);
|
|
51
53
|
var path12__default = /*#__PURE__*/_interopDefault(path12);
|
|
52
|
-
var
|
|
54
|
+
var fs20__namespace = /*#__PURE__*/_interopNamespace(fs20);
|
|
53
55
|
var process2__default = /*#__PURE__*/_interopDefault(process2);
|
|
54
56
|
var os__default = /*#__PURE__*/_interopDefault(os);
|
|
55
57
|
var tty__default = /*#__PURE__*/_interopDefault(tty);
|
|
@@ -6234,10 +6236,10 @@ var require_lib2 = chunkSNAQBZPT_js.__commonJS({
|
|
|
6234
6236
|
exports.analyse = analyse;
|
|
6235
6237
|
var detectFile = (filepath, opts = {}) => new Promise((resolve, reject) => {
|
|
6236
6238
|
let fd;
|
|
6237
|
-
const
|
|
6239
|
+
const fs31 = (0, node_1.default)();
|
|
6238
6240
|
const handler = (err, buffer) => {
|
|
6239
6241
|
if (fd) {
|
|
6240
|
-
|
|
6242
|
+
fs31.closeSync(fd);
|
|
6241
6243
|
}
|
|
6242
6244
|
if (err) {
|
|
6243
6245
|
reject(err);
|
|
@@ -6249,9 +6251,9 @@ var require_lib2 = chunkSNAQBZPT_js.__commonJS({
|
|
|
6249
6251
|
};
|
|
6250
6252
|
const sampleSize = (opts === null || opts === void 0 ? void 0 : opts.sampleSize) || 0;
|
|
6251
6253
|
if (sampleSize > 0) {
|
|
6252
|
-
fd =
|
|
6254
|
+
fd = fs31.openSync(filepath, "r");
|
|
6253
6255
|
let sample = Buffer.allocUnsafe(sampleSize);
|
|
6254
|
-
|
|
6256
|
+
fs31.read(fd, sample, 0, sampleSize, opts.offset, (err, bytesRead) => {
|
|
6255
6257
|
if (err) {
|
|
6256
6258
|
handler(err, null);
|
|
6257
6259
|
} else {
|
|
@@ -6263,22 +6265,22 @@ var require_lib2 = chunkSNAQBZPT_js.__commonJS({
|
|
|
6263
6265
|
});
|
|
6264
6266
|
return;
|
|
6265
6267
|
}
|
|
6266
|
-
|
|
6268
|
+
fs31.readFile(filepath, handler);
|
|
6267
6269
|
});
|
|
6268
6270
|
exports.detectFile = detectFile;
|
|
6269
6271
|
var detectFileSync = (filepath, opts = {}) => {
|
|
6270
|
-
const
|
|
6272
|
+
const fs31 = (0, node_1.default)();
|
|
6271
6273
|
if (opts && opts.sampleSize) {
|
|
6272
|
-
const fd =
|
|
6274
|
+
const fd = fs31.openSync(filepath, "r");
|
|
6273
6275
|
let sample = Buffer.allocUnsafe(opts.sampleSize);
|
|
6274
|
-
const bytesRead =
|
|
6276
|
+
const bytesRead = fs31.readSync(fd, sample, 0, opts.sampleSize, opts.offset);
|
|
6275
6277
|
if (bytesRead < opts.sampleSize) {
|
|
6276
6278
|
sample = sample.subarray(0, bytesRead);
|
|
6277
6279
|
}
|
|
6278
|
-
|
|
6280
|
+
fs31.closeSync(fd);
|
|
6279
6281
|
return (0, exports.detect)(sample);
|
|
6280
6282
|
}
|
|
6281
|
-
return (0, exports.detect)(
|
|
6283
|
+
return (0, exports.detect)(fs31.readFileSync(filepath));
|
|
6282
6284
|
};
|
|
6283
6285
|
exports.detectFileSync = detectFileSync;
|
|
6284
6286
|
exports.default = {
|
|
@@ -12279,7 +12281,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
12279
12281
|
* @param {string} subcommandName
|
|
12280
12282
|
*/
|
|
12281
12283
|
_checkForMissingExecutable(executableFile, executableDir, subcommandName) {
|
|
12282
|
-
if (
|
|
12284
|
+
if (fs20__namespace.default.existsSync(executableFile)) return;
|
|
12283
12285
|
const executableDirMessage = executableDir ? `searched for local subcommand relative to directory '${executableDir}'` : "no directory for search for local subcommand, use .executableDir() to supply a custom directory";
|
|
12284
12286
|
const executableMissing = `'${executableFile}' does not exist
|
|
12285
12287
|
- if '${subcommandName}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
@@ -12297,10 +12299,10 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
12297
12299
|
const sourceExt = [".js", ".ts", ".tsx", ".mjs", ".cjs"];
|
|
12298
12300
|
function findFile(baseDir, baseName) {
|
|
12299
12301
|
const localBin = path12__default.default.resolve(baseDir, baseName);
|
|
12300
|
-
if (
|
|
12302
|
+
if (fs20__namespace.default.existsSync(localBin)) return localBin;
|
|
12301
12303
|
if (sourceExt.includes(path12__default.default.extname(baseName))) return void 0;
|
|
12302
12304
|
const foundExt = sourceExt.find(
|
|
12303
|
-
(ext2) =>
|
|
12305
|
+
(ext2) => fs20__namespace.default.existsSync(`${localBin}${ext2}`)
|
|
12304
12306
|
);
|
|
12305
12307
|
if (foundExt) return `${localBin}${foundExt}`;
|
|
12306
12308
|
return void 0;
|
|
@@ -12312,7 +12314,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
12312
12314
|
if (this._scriptPath) {
|
|
12313
12315
|
let resolvedScriptPath;
|
|
12314
12316
|
try {
|
|
12315
|
-
resolvedScriptPath =
|
|
12317
|
+
resolvedScriptPath = fs20__namespace.default.realpathSync(this._scriptPath);
|
|
12316
12318
|
} catch {
|
|
12317
12319
|
resolvedScriptPath = this._scriptPath;
|
|
12318
12320
|
}
|
|
@@ -13268,9 +13270,9 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
13268
13270
|
* @param {string} [path]
|
|
13269
13271
|
* @return {(string|null|Command)}
|
|
13270
13272
|
*/
|
|
13271
|
-
executableDir(
|
|
13272
|
-
if (
|
|
13273
|
-
this._executableDir =
|
|
13273
|
+
executableDir(path31) {
|
|
13274
|
+
if (path31 === void 0) return this._executableDir;
|
|
13275
|
+
this._executableDir = path31;
|
|
13274
13276
|
return this;
|
|
13275
13277
|
}
|
|
13276
13278
|
/**
|
|
@@ -13543,7 +13545,7 @@ function buildEnvelope(input, nowMs = Date.now()) {
|
|
|
13543
13545
|
ok: exitCode === 0 /* OK */,
|
|
13544
13546
|
command,
|
|
13545
13547
|
schemaVersion: 1,
|
|
13546
|
-
siteKitVersion:
|
|
13548
|
+
siteKitVersion: chunkNG2TTI7D_js.SITE_KIT_VERSION,
|
|
13547
13549
|
exitCode,
|
|
13548
13550
|
status: statusForCode(exitCode),
|
|
13549
13551
|
summary,
|
|
@@ -19159,7 +19161,7 @@ var ExternalEditor = class {
|
|
|
19159
19161
|
if (!this.tempDir)
|
|
19160
19162
|
return;
|
|
19161
19163
|
try {
|
|
19162
|
-
|
|
19164
|
+
fs20.rmSync(this.tempDir, { force: true, recursive: true });
|
|
19163
19165
|
this.tempFile = "";
|
|
19164
19166
|
this.tempDir = "";
|
|
19165
19167
|
} catch (removeFileError) {
|
|
@@ -19169,7 +19171,7 @@ var ExternalEditor = class {
|
|
|
19169
19171
|
createTempFile() {
|
|
19170
19172
|
try {
|
|
19171
19173
|
const baseDir = path12__default.default.resolve(this.fileOptions.dir ?? os__default.default.tmpdir());
|
|
19172
|
-
this.tempDir =
|
|
19174
|
+
this.tempDir = fs20.mkdtempSync(path12__default.default.join(baseDir, "inquirer-editor-"));
|
|
19173
19175
|
const id = crypto.randomUUID();
|
|
19174
19176
|
const prefix = sanitizeAffix(this.fileOptions.prefix);
|
|
19175
19177
|
const postfix = sanitizeAffix(this.fileOptions.postfix);
|
|
@@ -19179,7 +19181,7 @@ var ExternalEditor = class {
|
|
|
19179
19181
|
if (Object.prototype.hasOwnProperty.call(this.fileOptions, "mode")) {
|
|
19180
19182
|
opt.mode = this.fileOptions.mode;
|
|
19181
19183
|
}
|
|
19182
|
-
|
|
19184
|
+
fs20.writeFileSync(this.tempFile, this.text, opt);
|
|
19183
19185
|
} catch (createFileError) {
|
|
19184
19186
|
throw new CreateFileError(createFileError);
|
|
19185
19187
|
}
|
|
@@ -19189,7 +19191,7 @@ var ExternalEditor = class {
|
|
|
19189
19191
|
}
|
|
19190
19192
|
readTemporaryFile() {
|
|
19191
19193
|
try {
|
|
19192
|
-
const tempFileBuffer =
|
|
19194
|
+
const tempFileBuffer = fs20.readFileSync(this.tempFile);
|
|
19193
19195
|
if (tempFileBuffer.length === 0) {
|
|
19194
19196
|
this.text = "";
|
|
19195
19197
|
} else {
|
|
@@ -20377,9 +20379,9 @@ function observableToAsyncIterable(source) {
|
|
|
20377
20379
|
|
|
20378
20380
|
// node_modules/.pnpm/inquirer@14.0.2_@types+node@26.2.0/node_modules/inquirer/dist/ui/prompt.js
|
|
20379
20381
|
var _ = {
|
|
20380
|
-
set: (obj,
|
|
20382
|
+
set: (obj, path31 = "", value) => {
|
|
20381
20383
|
let pointer = obj;
|
|
20382
|
-
|
|
20384
|
+
path31.split(".").forEach((key, index, arr) => {
|
|
20383
20385
|
if (key === "__proto__" || key === "constructor")
|
|
20384
20386
|
return;
|
|
20385
20387
|
if (index === arr.length - 1) {
|
|
@@ -20390,8 +20392,8 @@ var _ = {
|
|
|
20390
20392
|
pointer = pointer[key];
|
|
20391
20393
|
});
|
|
20392
20394
|
},
|
|
20393
|
-
get: (obj,
|
|
20394
|
-
const travel = (regexp) => String.prototype.split.call(
|
|
20395
|
+
get: (obj, path31 = "", defaultValue) => {
|
|
20396
|
+
const travel = (regexp) => String.prototype.split.call(path31, regexp).filter(Boolean).reduce(
|
|
20395
20397
|
// @ts-expect-error implicit any on res[key]
|
|
20396
20398
|
(res, key) => res == null ? res : res[key],
|
|
20397
20399
|
obj
|
|
@@ -20748,18 +20750,18 @@ function scanForForms(ast, content, filePath) {
|
|
|
20748
20750
|
const forms = [];
|
|
20749
20751
|
content.split("\n");
|
|
20750
20752
|
chunkJS75ORH7_js.traverse(ast, {
|
|
20751
|
-
JSXElement(
|
|
20752
|
-
const opening =
|
|
20753
|
+
JSXElement(path31) {
|
|
20754
|
+
const opening = path31.node.openingElement;
|
|
20753
20755
|
if (chunkJS75ORH7_js.isJSXIdentifier(opening.name) && opening.name.name === "form") {
|
|
20754
|
-
const fields = extractFieldsFromForm(
|
|
20756
|
+
const fields = extractFieldsFromForm(path31);
|
|
20755
20757
|
const hasOnSubmit = opening.attributes.some(
|
|
20756
20758
|
(attr) => chunkJS75ORH7_js.isJSXAttribute(attr) && chunkJS75ORH7_js.isJSXIdentifier(attr.name) && attr.name.name === "onSubmit"
|
|
20757
20759
|
);
|
|
20758
20760
|
if (hasOnSubmit && fields.length > 0) {
|
|
20759
|
-
const startLine =
|
|
20760
|
-
const endLine =
|
|
20761
|
+
const startLine = path31.node.loc?.start.line || 0;
|
|
20762
|
+
const endLine = path31.node.loc?.end.line || 0;
|
|
20761
20763
|
let componentName = "UnknownForm";
|
|
20762
|
-
let current =
|
|
20764
|
+
let current = path31.parentPath;
|
|
20763
20765
|
while (current) {
|
|
20764
20766
|
if (chunkJS75ORH7_js.isFunctionDeclaration(current.node) && current.node.id) {
|
|
20765
20767
|
componentName = current.node.id.name;
|
|
@@ -20792,7 +20794,7 @@ function scanForForms(ast, content, filePath) {
|
|
|
20792
20794
|
}
|
|
20793
20795
|
if (chunkJS75ORH7_js.isJSXIdentifier(opening.name) && opening.name.name === "Form") {
|
|
20794
20796
|
if (content.includes("Formik") || content.includes("formik")) {
|
|
20795
|
-
const fields = extractFieldsFromFormik(
|
|
20797
|
+
const fields = extractFieldsFromFormik(path31);
|
|
20796
20798
|
if (fields.length > 0) {
|
|
20797
20799
|
forms.push({
|
|
20798
20800
|
filePath,
|
|
@@ -20803,8 +20805,8 @@ function scanForForms(ast, content, filePath) {
|
|
|
20803
20805
|
submitsTo: null,
|
|
20804
20806
|
complexity: "moderate",
|
|
20805
20807
|
suggestedAction: "assisted",
|
|
20806
|
-
startLine:
|
|
20807
|
-
endLine:
|
|
20808
|
+
startLine: path31.node.loc?.start.line || 0,
|
|
20809
|
+
endLine: path31.node.loc?.end.line || 0
|
|
20808
20810
|
});
|
|
20809
20811
|
}
|
|
20810
20812
|
}
|
|
@@ -20822,8 +20824,8 @@ function extractFieldsFromForm(formPath) {
|
|
|
20822
20824
|
const radioGroups = /* @__PURE__ */ new Map();
|
|
20823
20825
|
const checkboxGroups = /* @__PURE__ */ new Map();
|
|
20824
20826
|
formPath.traverse({
|
|
20825
|
-
JSXElement(
|
|
20826
|
-
const opening =
|
|
20827
|
+
JSXElement(path31) {
|
|
20828
|
+
const opening = path31.node.openingElement;
|
|
20827
20829
|
const tagName = chunkJS75ORH7_js.isJSXIdentifier(opening.name) ? opening.name.name : null;
|
|
20828
20830
|
if (["input", "textarea", "select"].includes(tagName || "")) {
|
|
20829
20831
|
const attrs = opening.attributes;
|
|
@@ -20870,7 +20872,7 @@ function extractFieldsFromForm(formPath) {
|
|
|
20870
20872
|
}
|
|
20871
20873
|
if (tagName === "select") {
|
|
20872
20874
|
const selectOptions = [];
|
|
20873
|
-
|
|
20875
|
+
path31.traverse({
|
|
20874
20876
|
JSXElement(optionPath) {
|
|
20875
20877
|
const optOpening = optionPath.node.openingElement;
|
|
20876
20878
|
const optTagName = chunkJS75ORH7_js.isJSXIdentifier(optOpening.name) ? optOpening.name.name : null;
|
|
@@ -20945,8 +20947,8 @@ function extractFieldsFromForm(formPath) {
|
|
|
20945
20947
|
function extractFieldsFromFormik(formPath, content) {
|
|
20946
20948
|
const fields = [];
|
|
20947
20949
|
formPath.traverse({
|
|
20948
|
-
JSXElement(
|
|
20949
|
-
const opening =
|
|
20950
|
+
JSXElement(path31) {
|
|
20951
|
+
const opening = path31.node.openingElement;
|
|
20950
20952
|
const tagName = chunkJS75ORH7_js.isJSXIdentifier(opening.name) ? opening.name.name : null;
|
|
20951
20953
|
if (tagName === "Field" || tagName === "FastField") {
|
|
20952
20954
|
const attrs = opening.attributes;
|
|
@@ -21065,11 +21067,11 @@ function scanForMetadata(ast, content, filePath) {
|
|
|
21065
21067
|
}
|
|
21066
21068
|
let hasHeadComponent = false;
|
|
21067
21069
|
chunkJS75ORH7_js.traverse(ast, {
|
|
21068
|
-
JSXElement(
|
|
21069
|
-
const opening =
|
|
21070
|
+
JSXElement(path31) {
|
|
21071
|
+
const opening = path31.node.openingElement;
|
|
21070
21072
|
if (chunkJS75ORH7_js.isJSXIdentifier(opening.name) && opening.name.name === "Head") {
|
|
21071
21073
|
hasHeadComponent = true;
|
|
21072
|
-
|
|
21074
|
+
path31.stop();
|
|
21073
21075
|
}
|
|
21074
21076
|
}
|
|
21075
21077
|
});
|
|
@@ -21104,8 +21106,8 @@ function scanForWidgets(ast, content, filePath) {
|
|
|
21104
21106
|
for (const { pattern, type } of widgetPatterns) {
|
|
21105
21107
|
if (pattern.test(content)) {
|
|
21106
21108
|
chunkJS75ORH7_js.traverse(ast, {
|
|
21107
|
-
JSXElement(
|
|
21108
|
-
const opening =
|
|
21109
|
+
JSXElement(path31) {
|
|
21110
|
+
const opening = path31.node.openingElement;
|
|
21109
21111
|
if (chunkJS75ORH7_js.isJSXIdentifier(opening.name) && (opening.name.name === "script" || opening.name.name === "Script")) {
|
|
21110
21112
|
const srcAttr = opening.attributes.find(
|
|
21111
21113
|
(attr) => chunkJS75ORH7_js.isJSXAttribute(attr) && chunkJS75ORH7_js.isJSXIdentifier(attr.name) && attr.name.name === "src"
|
|
@@ -21120,8 +21122,8 @@ function scanForWidgets(ast, content, filePath) {
|
|
|
21120
21122
|
filePath,
|
|
21121
21123
|
widgetType: type,
|
|
21122
21124
|
scriptTag: src,
|
|
21123
|
-
startLine:
|
|
21124
|
-
endLine:
|
|
21125
|
+
startLine: path31.node.loc?.start.line || 0,
|
|
21126
|
+
endLine: path31.node.loc?.end.line || 0
|
|
21125
21127
|
});
|
|
21126
21128
|
}
|
|
21127
21129
|
}
|
|
@@ -21260,8 +21262,8 @@ function scanForSchemas(ast, content, filePath) {
|
|
|
21260
21262
|
return schemas;
|
|
21261
21263
|
}
|
|
21262
21264
|
chunkJS75ORH7_js.traverse(ast, {
|
|
21263
|
-
JSXElement(
|
|
21264
|
-
const opening =
|
|
21265
|
+
JSXElement(path31) {
|
|
21266
|
+
const opening = path31.node.openingElement;
|
|
21265
21267
|
if (chunkJS75ORH7_js.isJSXIdentifier(opening.name) && (opening.name.name === "script" || opening.name.name === "Script")) {
|
|
21266
21268
|
const typeAttr = opening.attributes.find(
|
|
21267
21269
|
(attr) => chunkJS75ORH7_js.isJSXAttribute(attr) && chunkJS75ORH7_js.isJSXIdentifier(attr.name) && attr.name.name === "type"
|
|
@@ -21288,8 +21290,8 @@ function scanForSchemas(ast, content, filePath) {
|
|
|
21288
21290
|
filePath,
|
|
21289
21291
|
type: detectedType,
|
|
21290
21292
|
schemaType,
|
|
21291
|
-
startLine:
|
|
21292
|
-
endLine:
|
|
21293
|
+
startLine: path31.node.loc?.start.line || 0,
|
|
21294
|
+
endLine: path31.node.loc?.end.line || 0
|
|
21293
21295
|
});
|
|
21294
21296
|
}
|
|
21295
21297
|
}
|
|
@@ -21322,8 +21324,8 @@ function scanForFAQs(ast, content, filePath) {
|
|
|
21322
21324
|
/questions?\s*(?:and|&)?\s*answers?/i
|
|
21323
21325
|
];
|
|
21324
21326
|
chunkJS75ORH7_js.traverse(ast, {
|
|
21325
|
-
JSXElement(
|
|
21326
|
-
const opening =
|
|
21327
|
+
JSXElement(path31) {
|
|
21328
|
+
const opening = path31.node.openingElement;
|
|
21327
21329
|
let tagName = "";
|
|
21328
21330
|
if (chunkJS75ORH7_js.isJSXIdentifier(opening.name)) {
|
|
21329
21331
|
tagName = opening.name.name;
|
|
@@ -21336,8 +21338,8 @@ function scanForFAQs(ast, content, filePath) {
|
|
|
21336
21338
|
faqs.push({
|
|
21337
21339
|
filePath,
|
|
21338
21340
|
type: "details-summary",
|
|
21339
|
-
startLine:
|
|
21340
|
-
endLine:
|
|
21341
|
+
startLine: path31.node.loc?.start.line || 0,
|
|
21342
|
+
endLine: path31.node.loc?.end.line || 0,
|
|
21341
21343
|
hasSchema: content.includes("FAQPage") || content.includes("application/ld+json")
|
|
21342
21344
|
});
|
|
21343
21345
|
return;
|
|
@@ -21345,7 +21347,7 @@ function scanForFAQs(ast, content, filePath) {
|
|
|
21345
21347
|
for (const pattern of faqPatterns) {
|
|
21346
21348
|
if (pattern.test(tagName)) {
|
|
21347
21349
|
let itemCount = 0;
|
|
21348
|
-
|
|
21350
|
+
path31.traverse({
|
|
21349
21351
|
JSXElement(itemPath) {
|
|
21350
21352
|
const itemOpening = itemPath.node.openingElement;
|
|
21351
21353
|
if (chunkJS75ORH7_js.isJSXIdentifier(itemOpening.name)) {
|
|
@@ -21361,8 +21363,8 @@ function scanForFAQs(ast, content, filePath) {
|
|
|
21361
21363
|
type: "accordion",
|
|
21362
21364
|
componentName: tagName,
|
|
21363
21365
|
itemCount: itemCount || void 0,
|
|
21364
|
-
startLine:
|
|
21365
|
-
endLine:
|
|
21366
|
+
startLine: path31.node.loc?.start.line || 0,
|
|
21367
|
+
endLine: path31.node.loc?.end.line || 0,
|
|
21366
21368
|
hasSchema: content.includes("FAQPage") || content.includes("application/ld+json")
|
|
21367
21369
|
});
|
|
21368
21370
|
return;
|
|
@@ -21485,8 +21487,8 @@ function scanForImages(ast, content, filePath) {
|
|
|
21485
21487
|
return images;
|
|
21486
21488
|
}
|
|
21487
21489
|
chunkJS75ORH7_js.traverse(ast, {
|
|
21488
|
-
JSXElement(
|
|
21489
|
-
const opening =
|
|
21490
|
+
JSXElement(path31) {
|
|
21491
|
+
const opening = path31.node.openingElement;
|
|
21490
21492
|
if (!chunkJS75ORH7_js.isJSXIdentifier(opening.name)) return;
|
|
21491
21493
|
const tagName = opening.name.name;
|
|
21492
21494
|
if (tagName === "img" || tagName === "Image") {
|
|
@@ -21514,8 +21516,8 @@ function scanForImages(ast, content, filePath) {
|
|
|
21514
21516
|
src: src || void 0,
|
|
21515
21517
|
alt: alt || void 0,
|
|
21516
21518
|
isLocal,
|
|
21517
|
-
startLine:
|
|
21518
|
-
endLine:
|
|
21519
|
+
startLine: path31.node.loc?.start.line || 0,
|
|
21520
|
+
endLine: path31.node.loc?.end.line || 0
|
|
21519
21521
|
});
|
|
21520
21522
|
}
|
|
21521
21523
|
}
|
|
@@ -22406,18 +22408,18 @@ async function migrateFile(filePath, options) {
|
|
|
22406
22408
|
let componentName = "Form";
|
|
22407
22409
|
const traverse2 = (await import('../lib-BGAWCSUH.js')).default;
|
|
22408
22410
|
traverse2(ast, {
|
|
22409
|
-
ExportNamedDeclaration(
|
|
22410
|
-
const decl =
|
|
22411
|
+
ExportNamedDeclaration(path31) {
|
|
22412
|
+
const decl = path31.node.declaration;
|
|
22411
22413
|
if (decl && decl.type === "FunctionDeclaration" && decl.id) {
|
|
22412
22414
|
componentName = decl.id.name;
|
|
22413
|
-
|
|
22415
|
+
path31.stop();
|
|
22414
22416
|
}
|
|
22415
22417
|
},
|
|
22416
|
-
ExportDefaultDeclaration(
|
|
22417
|
-
const decl =
|
|
22418
|
+
ExportDefaultDeclaration(path31) {
|
|
22419
|
+
const decl = path31.node.declaration;
|
|
22418
22420
|
if (decl && decl.type === "FunctionDeclaration" && decl.id) {
|
|
22419
22421
|
componentName = decl.id.name;
|
|
22420
|
-
|
|
22422
|
+
path31.stop();
|
|
22421
22423
|
}
|
|
22422
22424
|
}
|
|
22423
22425
|
});
|
|
@@ -22567,12 +22569,12 @@ async function generateLayout() {
|
|
|
22567
22569
|
await fs3__default.default.writeFile(layoutPath, newContent, "utf-8");
|
|
22568
22570
|
}
|
|
22569
22571
|
async function findLayoutFile() {
|
|
22570
|
-
return
|
|
22572
|
+
return chunkSEP5D4MI_js.findRootLayout(process.cwd());
|
|
22571
22573
|
}
|
|
22572
22574
|
var isDockerCached;
|
|
22573
22575
|
function hasDockerEnv() {
|
|
22574
22576
|
try {
|
|
22575
|
-
|
|
22577
|
+
fs20__namespace.default.statSync("/.dockerenv");
|
|
22576
22578
|
return true;
|
|
22577
22579
|
} catch {
|
|
22578
22580
|
return false;
|
|
@@ -22580,7 +22582,7 @@ function hasDockerEnv() {
|
|
|
22580
22582
|
}
|
|
22581
22583
|
function hasDockerCGroup() {
|
|
22582
22584
|
try {
|
|
22583
|
-
return
|
|
22585
|
+
return fs20__namespace.default.readFileSync("/proc/self/cgroup", "utf8").includes("docker");
|
|
22584
22586
|
} catch {
|
|
22585
22587
|
return false;
|
|
22586
22588
|
}
|
|
@@ -22596,7 +22598,7 @@ function isDocker() {
|
|
|
22596
22598
|
var cachedResult;
|
|
22597
22599
|
var hasContainerEnv = () => {
|
|
22598
22600
|
try {
|
|
22599
|
-
|
|
22601
|
+
fs20__namespace.default.statSync("/run/.containerenv");
|
|
22600
22602
|
return true;
|
|
22601
22603
|
} catch {
|
|
22602
22604
|
return false;
|
|
@@ -22621,12 +22623,12 @@ var isWsl = () => {
|
|
|
22621
22623
|
return true;
|
|
22622
22624
|
}
|
|
22623
22625
|
try {
|
|
22624
|
-
if (
|
|
22626
|
+
if (fs20__namespace.default.readFileSync("/proc/version", "utf8").toLowerCase().includes("microsoft")) {
|
|
22625
22627
|
return !isInsideContainer();
|
|
22626
22628
|
}
|
|
22627
22629
|
} catch {
|
|
22628
22630
|
}
|
|
22629
|
-
if (
|
|
22631
|
+
if (fs20__namespace.default.existsSync("/proc/sys/fs/binfmt_misc/WSLInterop") || fs20__namespace.default.existsSync("/run/WSL")) {
|
|
22630
22632
|
return !isInsideContainer();
|
|
22631
22633
|
}
|
|
22632
22634
|
return false;
|
|
@@ -22729,15 +22731,15 @@ var wslDefaultBrowser = async () => {
|
|
|
22729
22731
|
const { stdout } = await executePowerShell(command, { powerShellPath: psPath });
|
|
22730
22732
|
return stdout.trim();
|
|
22731
22733
|
};
|
|
22732
|
-
var convertWslPathToWindows = async (
|
|
22733
|
-
if (/^[a-z]+:\/\//i.test(
|
|
22734
|
-
return
|
|
22734
|
+
var convertWslPathToWindows = async (path31) => {
|
|
22735
|
+
if (/^[a-z]+:\/\//i.test(path31)) {
|
|
22736
|
+
return path31;
|
|
22735
22737
|
}
|
|
22736
22738
|
try {
|
|
22737
|
-
const { stdout } = await execFile2("wslpath", ["-aw",
|
|
22739
|
+
const { stdout } = await execFile2("wslpath", ["-aw", path31], { encoding: "utf8" });
|
|
22738
22740
|
return stdout.trim();
|
|
22739
22741
|
} catch {
|
|
22740
|
-
return
|
|
22742
|
+
return path31;
|
|
22741
22743
|
}
|
|
22742
22744
|
};
|
|
22743
22745
|
|
|
@@ -23147,7 +23149,7 @@ function resolveImageManifestReadPath(root) {
|
|
|
23147
23149
|
return preferCurrent(path12__default.default.join(root, IMAGE_MANIFEST), path12__default.default.join(root, LEGACY_IMAGE_MANIFEST));
|
|
23148
23150
|
}
|
|
23149
23151
|
function preferCurrent(current, legacy) {
|
|
23150
|
-
return
|
|
23152
|
+
return fs20.existsSync(current) || !fs20.existsSync(legacy) ? current : legacy;
|
|
23151
23153
|
}
|
|
23152
23154
|
async function listLocalTemplates(root = process.cwd()) {
|
|
23153
23155
|
const names = /* @__PURE__ */ new Set();
|
|
@@ -24845,7 +24847,7 @@ function detectCriticalImage(filename, relPath, usages, fileSize) {
|
|
|
24845
24847
|
return { isCritical: false };
|
|
24846
24848
|
}
|
|
24847
24849
|
async function uploadImageToPortal(localPath, image, config2) {
|
|
24848
|
-
const fileBuffer =
|
|
24850
|
+
const fileBuffer = fs20.readFileSync(localPath);
|
|
24849
24851
|
const blob = new Blob([fileBuffer], { type: image.mimeType });
|
|
24850
24852
|
const form = new FormData();
|
|
24851
24853
|
form.append("file", blob, image.filename);
|
|
@@ -25213,11 +25215,11 @@ async function templateCommand(sourcePath, options) {
|
|
|
25213
25215
|
const spinner = ora("Analyzing source page...").start();
|
|
25214
25216
|
try {
|
|
25215
25217
|
const resolvedPath = path12__default.default.resolve(sourcePath);
|
|
25216
|
-
if (!
|
|
25218
|
+
if (!fs20.existsSync(resolvedPath)) {
|
|
25217
25219
|
spinner.fail(`File not found: ${sourcePath}`);
|
|
25218
25220
|
return;
|
|
25219
25221
|
}
|
|
25220
|
-
const sourceCode =
|
|
25222
|
+
const sourceCode = fs20.readFileSync(resolvedPath, "utf-8");
|
|
25221
25223
|
const ast = chunkI7AZC5ZQ_js.parse(sourceCode, {
|
|
25222
25224
|
sourceType: "module",
|
|
25223
25225
|
plugins: ["jsx", "typescript"]
|
|
@@ -25225,8 +25227,8 @@ async function templateCommand(sourcePath, options) {
|
|
|
25225
25227
|
const slots = [];
|
|
25226
25228
|
const componentNames = [];
|
|
25227
25229
|
chunkJS75ORH7_js.traverse(ast, {
|
|
25228
|
-
JSXElement(
|
|
25229
|
-
const openingElement =
|
|
25230
|
+
JSXElement(path31) {
|
|
25231
|
+
const openingElement = path31.node.openingElement;
|
|
25230
25232
|
if (chunkJS75ORH7_js.isJSXIdentifier(openingElement.name)) {
|
|
25231
25233
|
const componentName = openingElement.name.name;
|
|
25232
25234
|
if (componentName[0] === componentName[0].toUpperCase()) {
|
|
@@ -25376,12 +25378,12 @@ async function uploadCommand(templateName, config2) {
|
|
|
25376
25378
|
const spinner = ora("Uploading template to Portal...").start();
|
|
25377
25379
|
try {
|
|
25378
25380
|
const templatePath = resolveStateReadPath(path12__default.default.join("templates", `${templateName}.json`));
|
|
25379
|
-
if (!
|
|
25381
|
+
if (!fs20.existsSync(templatePath)) {
|
|
25380
25382
|
spinner.fail(`Template not found: ${templatePath}`);
|
|
25381
25383
|
console.log(source_default.gray(` Run: npx sonor-setup locations template <page> --name ${templateName}`));
|
|
25382
25384
|
return;
|
|
25383
25385
|
}
|
|
25384
|
-
const template = JSON.parse(
|
|
25386
|
+
const template = JSON.parse(fs20.readFileSync(templatePath, "utf-8"));
|
|
25385
25387
|
const response = await fetch(`${config2.apiUrl}/seo/location-templates`, {
|
|
25386
25388
|
method: "POST",
|
|
25387
25389
|
headers: {
|
|
@@ -25436,7 +25438,7 @@ async function generateCommand(options, config2) {
|
|
|
25436
25438
|
let locationList = locations || [];
|
|
25437
25439
|
if (locationsFile) {
|
|
25438
25440
|
try {
|
|
25439
|
-
const fileContent =
|
|
25441
|
+
const fileContent = fs20.readFileSync(locationsFile, "utf-8");
|
|
25440
25442
|
const parsed = JSON.parse(fileContent);
|
|
25441
25443
|
locationList = Array.isArray(parsed) ? parsed : parsed.locations || [];
|
|
25442
25444
|
} catch (e) {
|
|
@@ -25600,7 +25602,7 @@ async function extractCommand(options, config2) {
|
|
|
25600
25602
|
const extensions = ["", ".js", ".ts", ".jsx", ".tsx", ".json"];
|
|
25601
25603
|
for (const ext2 of extensions) {
|
|
25602
25604
|
const tryPath = resolvedPath + ext2;
|
|
25603
|
-
if (
|
|
25605
|
+
if (fs20.existsSync(tryPath)) {
|
|
25604
25606
|
try {
|
|
25605
25607
|
importedFiles[importPath] = await fs3__default.default.readFile(tryPath, "utf-8");
|
|
25606
25608
|
} catch {
|
|
@@ -26060,7 +26062,7 @@ async function scanForPageFiles(rootDir) {
|
|
|
26060
26062
|
const srcPagesDir = path12__default.default.join(rootDir, "src", "pages");
|
|
26061
26063
|
const dirs = [appDir, srcAppDir, pagesDir, srcPagesDir];
|
|
26062
26064
|
for (const dir of dirs) {
|
|
26063
|
-
if (
|
|
26065
|
+
if (fs20.existsSync(dir)) {
|
|
26064
26066
|
await scanDirectory(dir, dir, pages);
|
|
26065
26067
|
}
|
|
26066
26068
|
}
|
|
@@ -26109,7 +26111,7 @@ async function gatherImportedFiles(page, rootDir) {
|
|
|
26109
26111
|
const extensions = ["", ".js", ".ts", ".jsx", ".tsx", ".json"];
|
|
26110
26112
|
for (const ext2 of extensions) {
|
|
26111
26113
|
const tryPath = resolvedPath + ext2;
|
|
26112
|
-
if (
|
|
26114
|
+
if (fs20.existsSync(tryPath)) {
|
|
26113
26115
|
try {
|
|
26114
26116
|
page.importedFiles[importPath] = await fs3__default.default.readFile(tryPath, "utf-8");
|
|
26115
26117
|
} catch {
|
|
@@ -26178,7 +26180,7 @@ async function findDynamicRouteData(page, parentPath, rootDir) {
|
|
|
26178
26180
|
const routeSegment = parentPath.replace(/^\//, "").split("/")[0];
|
|
26179
26181
|
const routeSegmentNormalized = routeSegment.replace(/-/g, "");
|
|
26180
26182
|
for (const dataFile of dataFilePaths) {
|
|
26181
|
-
if (!
|
|
26183
|
+
if (!fs20.existsSync(dataFile)) continue;
|
|
26182
26184
|
try {
|
|
26183
26185
|
const content = await fs3__default.default.readFile(dataFile, "utf-8");
|
|
26184
26186
|
const exportPattern = new RegExp(
|
|
@@ -26350,10 +26352,230 @@ async function uploadSchemas(pages, globalSchema, config2) {
|
|
|
26350
26352
|
}
|
|
26351
26353
|
}
|
|
26352
26354
|
}
|
|
26355
|
+
var SOURCE_EXTENSIONS = [".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs"];
|
|
26356
|
+
function stripComments(source) {
|
|
26357
|
+
return source.replace(
|
|
26358
|
+
/("(?:\\.|[^"\\\n])*"|'(?:\\.|[^'\\\n])*'|`(?:\\.|[^`\\])*`)|\/\*[\s\S]*?\*\/|\/\/[^\n]*/g,
|
|
26359
|
+
(match, literal) => literal ?? (match.startsWith("/*") ? match.replace(/[^\n]/g, "") : "")
|
|
26360
|
+
);
|
|
26361
|
+
}
|
|
26362
|
+
function readText(file) {
|
|
26363
|
+
try {
|
|
26364
|
+
return fs20__namespace.default.readFileSync(file, "utf-8");
|
|
26365
|
+
} catch {
|
|
26366
|
+
return null;
|
|
26367
|
+
}
|
|
26368
|
+
}
|
|
26369
|
+
function isFile(p) {
|
|
26370
|
+
try {
|
|
26371
|
+
return fs20__namespace.default.statSync(p).isFile();
|
|
26372
|
+
} catch {
|
|
26373
|
+
return false;
|
|
26374
|
+
}
|
|
26375
|
+
}
|
|
26376
|
+
function realpath(p) {
|
|
26377
|
+
try {
|
|
26378
|
+
return fs20__namespace.default.realpathSync(p);
|
|
26379
|
+
} catch {
|
|
26380
|
+
return null;
|
|
26381
|
+
}
|
|
26382
|
+
}
|
|
26383
|
+
function resolveFile(base) {
|
|
26384
|
+
if (isFile(base) && SOURCE_EXTENSIONS.includes(path12__default.default.extname(base))) return base;
|
|
26385
|
+
const stem = base.replace(/\.(m|c)?js$/, "");
|
|
26386
|
+
for (const ext2 of SOURCE_EXTENSIONS) {
|
|
26387
|
+
if (isFile(stem + ext2)) return stem + ext2;
|
|
26388
|
+
}
|
|
26389
|
+
for (const ext2 of SOURCE_EXTENSIONS) {
|
|
26390
|
+
const index = path12__default.default.join(base, `index${ext2}`);
|
|
26391
|
+
if (isFile(index)) return index;
|
|
26392
|
+
}
|
|
26393
|
+
return null;
|
|
26394
|
+
}
|
|
26395
|
+
function importSpecifiers(source) {
|
|
26396
|
+
const found = /* @__PURE__ */ new Set();
|
|
26397
|
+
const patterns = [
|
|
26398
|
+
/\b(?:import|export)\s+(?:type\s+)?[^'"`;]*?\bfrom\s*['"]([^'"]+)['"]/g,
|
|
26399
|
+
/\bimport\s*['"]([^'"]+)['"]/g,
|
|
26400
|
+
/\bimport\s*\(\s*['"]([^'"]+)['"]\s*\)/g,
|
|
26401
|
+
/\brequire\s*\(\s*['"]([^'"]+)['"]\s*\)/g
|
|
26402
|
+
];
|
|
26403
|
+
for (const re2 of patterns) {
|
|
26404
|
+
for (const m of source.matchAll(re2)) found.add(m[1]);
|
|
26405
|
+
}
|
|
26406
|
+
return [...found];
|
|
26407
|
+
}
|
|
26408
|
+
function readLooseJson(file) {
|
|
26409
|
+
const text = readText(file);
|
|
26410
|
+
if (!text) return null;
|
|
26411
|
+
try {
|
|
26412
|
+
return JSON.parse(text);
|
|
26413
|
+
} catch {
|
|
26414
|
+
try {
|
|
26415
|
+
const stripped = text.replace(/("(?:\\.|[^"\\])*")|\/\*[\s\S]*?\*\/|\/\/[^\n]*/g, (_m4, str) => str ?? "").replace(/,(\s*[}\]])/g, "$1");
|
|
26416
|
+
return JSON.parse(stripped);
|
|
26417
|
+
} catch {
|
|
26418
|
+
return null;
|
|
26419
|
+
}
|
|
26420
|
+
}
|
|
26421
|
+
}
|
|
26422
|
+
function loadScope(root) {
|
|
26423
|
+
const tsconfig = readLooseJson(path12__default.default.join(root, "tsconfig.json")) ?? readLooseJson(path12__default.default.join(root, "jsconfig.json"));
|
|
26424
|
+
const options = tsconfig?.compilerOptions ?? {};
|
|
26425
|
+
const baseUrl = path12__default.default.resolve(root, options.baseUrl ?? ".");
|
|
26426
|
+
const aliases = [];
|
|
26427
|
+
for (const [key, value] of Object.entries(options.paths ?? {})) {
|
|
26428
|
+
const star = key.indexOf("*");
|
|
26429
|
+
aliases.push({
|
|
26430
|
+
prefix: star === -1 ? key : key.slice(0, star),
|
|
26431
|
+
suffix: star === -1 ? "" : key.slice(star + 1),
|
|
26432
|
+
exact: star === -1,
|
|
26433
|
+
targets: (Array.isArray(value) ? value : [value]).map((t) => path12__default.default.resolve(baseUrl, t))
|
|
26434
|
+
});
|
|
26435
|
+
}
|
|
26436
|
+
return { root, aliases };
|
|
26437
|
+
}
|
|
26438
|
+
function packageRoot(dir) {
|
|
26439
|
+
let current = dir;
|
|
26440
|
+
for (; ; ) {
|
|
26441
|
+
if (["package.json", "tsconfig.json", "jsconfig.json"].some((f) => isFile(path12__default.default.join(current, f)))) return current;
|
|
26442
|
+
const parent = path12__default.default.dirname(current);
|
|
26443
|
+
if (parent === current) return dir;
|
|
26444
|
+
current = parent;
|
|
26445
|
+
}
|
|
26446
|
+
}
|
|
26447
|
+
function pickExportTarget(value) {
|
|
26448
|
+
if (typeof value === "string") return value;
|
|
26449
|
+
if (Array.isArray(value)) {
|
|
26450
|
+
for (const v2 of value) {
|
|
26451
|
+
const t = pickExportTarget(v2);
|
|
26452
|
+
if (t) return t;
|
|
26453
|
+
}
|
|
26454
|
+
return null;
|
|
26455
|
+
}
|
|
26456
|
+
if (value && typeof value === "object") {
|
|
26457
|
+
const conditions = value;
|
|
26458
|
+
for (const key of ["source", "import", "default", "require", "node", "types"]) {
|
|
26459
|
+
if (key in conditions) {
|
|
26460
|
+
const t = pickExportTarget(conditions[key]);
|
|
26461
|
+
if (t) return t;
|
|
26462
|
+
}
|
|
26463
|
+
}
|
|
26464
|
+
}
|
|
26465
|
+
return null;
|
|
26466
|
+
}
|
|
26467
|
+
function resolvePackageSubpath(pkgRoot, subpath) {
|
|
26468
|
+
const pkg = readLooseJson(path12__default.default.join(pkgRoot, "package.json")) ?? {};
|
|
26469
|
+
const exportsField = pkg.exports;
|
|
26470
|
+
if (exportsField !== void 0) {
|
|
26471
|
+
const map = typeof exportsField === "string" || Array.isArray(exportsField) || !Object.keys(exportsField).some((k2) => k2.startsWith(".")) ? { ".": exportsField } : exportsField;
|
|
26472
|
+
if (subpath in map) {
|
|
26473
|
+
const target = pickExportTarget(map[subpath]);
|
|
26474
|
+
if (target) return resolveFile(path12__default.default.resolve(pkgRoot, target));
|
|
26475
|
+
}
|
|
26476
|
+
for (const [key, value] of Object.entries(map)) {
|
|
26477
|
+
const star = key.indexOf("*");
|
|
26478
|
+
if (star === -1) continue;
|
|
26479
|
+
const prefix = key.slice(0, star);
|
|
26480
|
+
const suffix = key.slice(star + 1);
|
|
26481
|
+
if (subpath.startsWith(prefix) && subpath.endsWith(suffix) && subpath.length >= prefix.length + suffix.length) {
|
|
26482
|
+
const matched = subpath.slice(prefix.length, subpath.length - suffix.length);
|
|
26483
|
+
const target = pickExportTarget(value);
|
|
26484
|
+
if (target) return resolveFile(path12__default.default.resolve(pkgRoot, target.replace("*", matched)));
|
|
26485
|
+
}
|
|
26486
|
+
}
|
|
26487
|
+
}
|
|
26488
|
+
if (subpath === ".") {
|
|
26489
|
+
const main = pkg.source ?? pkg.module ?? pkg.main;
|
|
26490
|
+
if (typeof main === "string") {
|
|
26491
|
+
const hit = resolveFile(path12__default.default.resolve(pkgRoot, main));
|
|
26492
|
+
if (hit) return hit;
|
|
26493
|
+
}
|
|
26494
|
+
return resolveFile(path12__default.default.join(pkgRoot, "index"));
|
|
26495
|
+
}
|
|
26496
|
+
return resolveFile(path12__default.default.resolve(pkgRoot, subpath));
|
|
26497
|
+
}
|
|
26498
|
+
function workspacePackage(fromDir, name) {
|
|
26499
|
+
let current = fromDir;
|
|
26500
|
+
for (; ; ) {
|
|
26501
|
+
const candidate = path12__default.default.join(current, "node_modules", name);
|
|
26502
|
+
if (fs20__namespace.default.existsSync(candidate)) {
|
|
26503
|
+
const real = realpath(candidate);
|
|
26504
|
+
if (!real || real.split(path12__default.default.sep).includes("node_modules")) return null;
|
|
26505
|
+
return real;
|
|
26506
|
+
}
|
|
26507
|
+
const parent = path12__default.default.dirname(current);
|
|
26508
|
+
if (parent === current) return null;
|
|
26509
|
+
current = parent;
|
|
26510
|
+
}
|
|
26511
|
+
}
|
|
26512
|
+
function splitBare(specifier) {
|
|
26513
|
+
const parts = specifier.split("/");
|
|
26514
|
+
const nameParts = specifier.startsWith("@") ? parts.slice(0, 2) : parts.slice(0, 1);
|
|
26515
|
+
const rest = parts.slice(nameParts.length);
|
|
26516
|
+
return { name: nameParts.join("/"), subpath: rest.length ? `./${rest.join("/")}` : "." };
|
|
26517
|
+
}
|
|
26518
|
+
function readSourceGraph(entries, options = {}) {
|
|
26519
|
+
const { maxDepth = 4, maxFiles = 300 } = options;
|
|
26520
|
+
const scopes = /* @__PURE__ */ new Map();
|
|
26521
|
+
const scopeFor = (file) => {
|
|
26522
|
+
const root = packageRoot(path12__default.default.dirname(file));
|
|
26523
|
+
let scope = scopes.get(root);
|
|
26524
|
+
if (!scope) {
|
|
26525
|
+
scope = loadScope(root);
|
|
26526
|
+
scopes.set(root, scope);
|
|
26527
|
+
}
|
|
26528
|
+
return scope;
|
|
26529
|
+
};
|
|
26530
|
+
const resolve = (specifier, fromFile) => {
|
|
26531
|
+
const fromDir = path12__default.default.dirname(fromFile);
|
|
26532
|
+
if (specifier.startsWith(".")) return resolveFile(path12__default.default.resolve(fromDir, specifier));
|
|
26533
|
+
if (specifier.startsWith("/") || /^[a-z]+:/i.test(specifier)) return null;
|
|
26534
|
+
const scope = scopeFor(fromFile);
|
|
26535
|
+
for (const alias of scope.aliases) {
|
|
26536
|
+
const hit = alias.exact ? specifier === alias.prefix : specifier.startsWith(alias.prefix) && specifier.endsWith(alias.suffix);
|
|
26537
|
+
if (!hit) continue;
|
|
26538
|
+
const matched = alias.exact ? "" : specifier.slice(alias.prefix.length, specifier.length - alias.suffix.length);
|
|
26539
|
+
for (const target of alias.targets) {
|
|
26540
|
+
const hit2 = resolveFile(target.replace("*", matched));
|
|
26541
|
+
if (hit2) return hit2;
|
|
26542
|
+
}
|
|
26543
|
+
}
|
|
26544
|
+
const { name, subpath } = splitBare(specifier);
|
|
26545
|
+
const pkg = workspacePackage(fromDir, name);
|
|
26546
|
+
return pkg ? resolvePackageSubpath(pkg, subpath) : null;
|
|
26547
|
+
};
|
|
26548
|
+
const seen = /* @__PURE__ */ new Set();
|
|
26549
|
+
const out = [];
|
|
26550
|
+
let frontier = entries.map((e) => path12__default.default.resolve(e));
|
|
26551
|
+
for (let depth = 0; depth <= maxDepth && frontier.length && out.length < maxFiles; depth++) {
|
|
26552
|
+
const next = [];
|
|
26553
|
+
for (const file of frontier) {
|
|
26554
|
+
if (seen.has(file) || out.length >= maxFiles) continue;
|
|
26555
|
+
seen.add(file);
|
|
26556
|
+
const raw = readText(file);
|
|
26557
|
+
if (raw === null) continue;
|
|
26558
|
+
const source = stripComments(raw);
|
|
26559
|
+
out.push({ file, source });
|
|
26560
|
+
if (depth === maxDepth) continue;
|
|
26561
|
+
for (const specifier of importSpecifiers(source)) {
|
|
26562
|
+
const hit = resolve(specifier, file);
|
|
26563
|
+
if (hit && !seen.has(hit)) next.push(hit);
|
|
26564
|
+
}
|
|
26565
|
+
}
|
|
26566
|
+
frontier = next;
|
|
26567
|
+
}
|
|
26568
|
+
return out;
|
|
26569
|
+
}
|
|
26570
|
+
function readWithImports(cwd, rel, options) {
|
|
26571
|
+
return readSourceGraph([path12__default.default.join(cwd, rel)], options).map((f) => f.source).join("\n");
|
|
26572
|
+
}
|
|
26573
|
+
|
|
26574
|
+
// src/og/wiring.ts
|
|
26353
26575
|
var CARD_FILE = /^(opengraph-image|twitter-image)\b.*\.(png|jpe?g|gif|webp|tsx|ts|jsx|js)$/i;
|
|
26354
26576
|
function safeExists(p) {
|
|
26355
26577
|
try {
|
|
26356
|
-
return
|
|
26578
|
+
return fs20__namespace.default.existsSync(p);
|
|
26357
26579
|
} catch {
|
|
26358
26580
|
return false;
|
|
26359
26581
|
}
|
|
@@ -26363,7 +26585,7 @@ function findPageCards(cwd) {
|
|
|
26363
26585
|
const walk = (dir) => {
|
|
26364
26586
|
let entries;
|
|
26365
26587
|
try {
|
|
26366
|
-
entries =
|
|
26588
|
+
entries = fs20__namespace.default.readdirSync(dir, { withFileTypes: true });
|
|
26367
26589
|
} catch {
|
|
26368
26590
|
return;
|
|
26369
26591
|
}
|
|
@@ -26374,28 +26596,86 @@ function findPageCards(cwd) {
|
|
|
26374
26596
|
else if (CARD_FILE.test(entry.name)) found.push(full);
|
|
26375
26597
|
}
|
|
26376
26598
|
};
|
|
26377
|
-
for (const rel of
|
|
26599
|
+
for (const rel of chunkSEP5D4MI_js.NEXT_APP_DIRS) walk(path12__default.default.join(cwd, rel));
|
|
26600
|
+
return found;
|
|
26601
|
+
}
|
|
26602
|
+
function findPageFiles(cwd) {
|
|
26603
|
+
const found = [];
|
|
26604
|
+
const pageFile = new RegExp(`^page\\.(${chunkSEP5D4MI_js.NEXT_SOURCE_EXTENSIONS.join("|")})$`);
|
|
26605
|
+
const walk = (dir) => {
|
|
26606
|
+
let entries;
|
|
26607
|
+
try {
|
|
26608
|
+
entries = fs20__namespace.default.readdirSync(dir, { withFileTypes: true });
|
|
26609
|
+
} catch {
|
|
26610
|
+
return;
|
|
26611
|
+
}
|
|
26612
|
+
for (const entry of entries) {
|
|
26613
|
+
if (entry.name.startsWith(".") || entry.name === "node_modules") continue;
|
|
26614
|
+
const full = path12__default.default.join(dir, entry.name);
|
|
26615
|
+
if (entry.isDirectory()) walk(full);
|
|
26616
|
+
else if (pageFile.test(entry.name)) found.push(full);
|
|
26617
|
+
}
|
|
26618
|
+
};
|
|
26619
|
+
for (const rel of chunkSEP5D4MI_js.NEXT_APP_DIRS) walk(path12__default.default.join(cwd, rel));
|
|
26378
26620
|
return found;
|
|
26379
26621
|
}
|
|
26380
|
-
function
|
|
26622
|
+
function routeOf(cwd, dir) {
|
|
26623
|
+
const appRoot = chunkSEP5D4MI_js.NEXT_APP_DIRS.map((rel2) => path12__default.default.join(cwd, rel2)).find((root) => dir === root || dir.startsWith(root + path12__default.default.sep));
|
|
26624
|
+
const rel = appRoot ? path12__default.default.relative(appRoot, dir) : dir;
|
|
26625
|
+
const segments = rel.split(path12__default.default.sep).filter((s) => s && !(s.startsWith("(") && s.endsWith(")"))).map((s) => s.startsWith("[") && s.endsWith("]") ? "*" : s);
|
|
26626
|
+
return `/${segments.join("/")}`;
|
|
26627
|
+
}
|
|
26628
|
+
function readCodeCards(cwd, pageCards) {
|
|
26629
|
+
const code = pageCards.filter((f) => /^opengraph-image\.(tsx|ts|jsx|js)$/.test(path12__default.default.basename(f)));
|
|
26630
|
+
return code.map((file) => {
|
|
26631
|
+
const dir = path12__default.default.dirname(file);
|
|
26632
|
+
const page = chunkSEP5D4MI_js.findConventionFile(dir, "page");
|
|
26633
|
+
const source = page ? readSourceGraph([page], { maxDepth: 2, maxFiles: 40 }).map((f) => f.source).join("\n") : "";
|
|
26634
|
+
const pageOwn = page ? readSourceGraph([page], { maxDepth: 0 })[0]?.source ?? "" : "";
|
|
26635
|
+
return {
|
|
26636
|
+
file: path12__default.default.relative(cwd, file),
|
|
26637
|
+
route: routeOf(cwd, dir),
|
|
26638
|
+
declaresUrl: /\bcodeCardImage\s*\(/.test(source),
|
|
26639
|
+
// A page that deletes the key itself (the pre-`images: false` workaround)
|
|
26640
|
+
// is fine too.
|
|
26641
|
+
blogDeclaresImages: /\bgenerateBlogPostMetadata\s*\(/.test(pageOwn) && !/\bimages\s*:\s*false\b/.test(pageOwn) && !/\bdelete\s+[\w.]+\.images\b/.test(pageOwn)
|
|
26642
|
+
};
|
|
26643
|
+
});
|
|
26644
|
+
}
|
|
26645
|
+
function readTrailingSlash(cwd) {
|
|
26646
|
+
const rel = chunkSEP5D4MI_js.findNextConfig(cwd);
|
|
26647
|
+
if (!rel) return false;
|
|
26648
|
+
try {
|
|
26649
|
+
return /\btrailingSlash\s*:\s*true\b/.test(fs20__namespace.default.readFileSync(path12__default.default.join(cwd, rel), "utf-8"));
|
|
26650
|
+
} catch {
|
|
26651
|
+
return false;
|
|
26652
|
+
}
|
|
26653
|
+
}
|
|
26654
|
+
function readOgWiring(cwd, known = {}) {
|
|
26381
26655
|
const siteCard = ["public/og.png", "public/og.jpg", "public/opengraph.png"].some(
|
|
26382
26656
|
(rel) => safeExists(path12__default.default.join(cwd, rel))
|
|
26383
26657
|
);
|
|
26384
|
-
const layoutPath =
|
|
26658
|
+
const layoutPath = chunkSEP5D4MI_js.findRootLayout(cwd);
|
|
26385
26659
|
let layout = "";
|
|
26386
26660
|
if (layoutPath) {
|
|
26387
26661
|
try {
|
|
26388
|
-
layout =
|
|
26662
|
+
layout = fs20__namespace.default.readFileSync(layoutPath, "utf-8");
|
|
26389
26663
|
} catch {
|
|
26390
26664
|
}
|
|
26391
26665
|
}
|
|
26666
|
+
const pageCards = findPageCards(cwd);
|
|
26667
|
+
const entries = [...layoutPath ? [layoutPath] : [], ...findPageFiles(cwd)];
|
|
26668
|
+
const largeCard = /summary_large_image/.test(layout) || pageCards.some((f) => /^twitter-image\b/.test(path12__default.default.basename(f))) || readSourceGraph(entries, { maxDepth: 3, maxFiles: 400 }).some((f) => /summary_large_image/.test(f.source));
|
|
26392
26669
|
return {
|
|
26393
26670
|
siteCard,
|
|
26394
|
-
pageCards
|
|
26671
|
+
pageCards,
|
|
26395
26672
|
layoutDeclaresImages: /images:\s*\[/.test(layout),
|
|
26396
|
-
largeCard
|
|
26673
|
+
largeCard,
|
|
26397
26674
|
referencesImage: /og\.png|opengraph-image|og:image|images:\s*\[/.test(layout),
|
|
26398
|
-
layoutFound: !!layoutPath
|
|
26675
|
+
layoutFound: !!layoutPath,
|
|
26676
|
+
trailingSlash: readTrailingSlash(cwd),
|
|
26677
|
+
codeCards: readCodeCards(cwd, pageCards),
|
|
26678
|
+
...known.managedOgImages && { managedOgImages: known.managedOgImages }
|
|
26399
26679
|
};
|
|
26400
26680
|
}
|
|
26401
26681
|
function judgeOgWiring(facts) {
|
|
@@ -26423,10 +26703,13 @@ function judgeOgWiring(facts) {
|
|
|
26423
26703
|
fix: "Remove the images arrays from the root layout metadata and let Next serve each route its own opengraph-image file."
|
|
26424
26704
|
});
|
|
26425
26705
|
}
|
|
26426
|
-
|
|
26427
|
-
|
|
26428
|
-
|
|
26429
|
-
|
|
26706
|
+
const managed = facts.managedOgImages ?? [];
|
|
26707
|
+
if (managed.length) {
|
|
26708
|
+
problems.push({
|
|
26709
|
+
message: `seo_pages.managed_og_image is set for ${managed.length} page${managed.length === 1 ? "" : "s"} (${managed.slice(0, 5).join(", ")}${managed.length > 5 ? ", \u2026" : ""}), which overrides ${managed.length === 1 ? "its" : "their"} own card`,
|
|
26710
|
+
fix: "Clear managed_og_image on those pages in Sonor so each serves its own card."
|
|
26711
|
+
});
|
|
26712
|
+
}
|
|
26430
26713
|
} else if (!facts.referencesImage) {
|
|
26431
26714
|
problems.push({
|
|
26432
26715
|
message: "card asset exists but layout metadata never references it",
|
|
@@ -26439,10 +26722,24 @@ function judgeOgWiring(facts) {
|
|
|
26439
26722
|
fix: "Set twitter: { card: 'summary_large_image' } in the root layout metadata."
|
|
26440
26723
|
});
|
|
26441
26724
|
}
|
|
26725
|
+
for (const card of facts.codeCards ?? []) {
|
|
26726
|
+
if (card.blogDeclaresImages) {
|
|
26727
|
+
problems.push({
|
|
26728
|
+
message: `${card.route} has its own card (${card.file}), but its page's generateBlogPostMetadata declares the featured image, which beats the card`,
|
|
26729
|
+
fix: "Pass images: false to generateBlogPostMetadata in that page."
|
|
26730
|
+
});
|
|
26731
|
+
}
|
|
26732
|
+
if (facts.trailingSlash && !card.declaresUrl) {
|
|
26733
|
+
problems.push({
|
|
26734
|
+
message: `${card.route}'s card (${card.file}) is served at \u2026/opengraph-image with no extension, which trailingSlash: true 308-redirects`,
|
|
26735
|
+
fix: "Declare the slashed URL from the page's metadata: openGraph.images = [codeCardImage(path)] from @sonordev/site-kit/og. Or, for cards that can be rendered ahead of time, key them in og.config.ts `cards` by URL and use paramCardImage."
|
|
26736
|
+
});
|
|
26737
|
+
}
|
|
26738
|
+
}
|
|
26442
26739
|
return problems;
|
|
26443
26740
|
}
|
|
26444
|
-
function checkOgWiring(cwd) {
|
|
26445
|
-
return judgeOgWiring(readOgWiring(cwd));
|
|
26741
|
+
function checkOgWiring(cwd, known = {}) {
|
|
26742
|
+
return judgeOgWiring(readOgWiring(cwd, known));
|
|
26446
26743
|
}
|
|
26447
26744
|
|
|
26448
26745
|
// src/cli/agent/ssr-bailout.ts
|
|
@@ -26547,7 +26844,7 @@ async function checkPackageInstalled(cwd) {
|
|
|
26547
26844
|
};
|
|
26548
26845
|
}
|
|
26549
26846
|
async function checkSiteKitLayout(cwd) {
|
|
26550
|
-
const layoutPath =
|
|
26847
|
+
const layoutPath = chunkSEP5D4MI_js.findRootLayout(cwd);
|
|
26551
26848
|
if (!layoutPath) {
|
|
26552
26849
|
return {
|
|
26553
26850
|
id: "layout.sitekit",
|
|
@@ -26591,7 +26888,7 @@ async function checkSiteKitLayout(cwd) {
|
|
|
26591
26888
|
};
|
|
26592
26889
|
}
|
|
26593
26890
|
async function checkSitemap(cwd) {
|
|
26594
|
-
const sitemapRel =
|
|
26891
|
+
const sitemapRel = chunkSEP5D4MI_js.findSitemapRoute(cwd);
|
|
26595
26892
|
if (!sitemapRel) {
|
|
26596
26893
|
return {
|
|
26597
26894
|
id: "sitemap.managed",
|
|
@@ -26649,6 +26946,90 @@ async function checkPostbuildSitemap(cwd) {
|
|
|
26649
26946
|
fix: 'Add "postbuild": "sonor-register-sitemap --auto-discover || true" to package.json scripts.'
|
|
26650
26947
|
};
|
|
26651
26948
|
}
|
|
26949
|
+
var TRAILING_SLASH_ON = /\btrailingSlash\s*:\s*true\b/;
|
|
26950
|
+
async function readBuiltSitemaps(cwd) {
|
|
26951
|
+
const appDir = path12__default.default.join(cwd, ".next", "server", "app");
|
|
26952
|
+
const single = await readFileOrNull(path12__default.default.join(appDir, "sitemap.xml.body"));
|
|
26953
|
+
if (single !== null) return [single];
|
|
26954
|
+
let shards;
|
|
26955
|
+
try {
|
|
26956
|
+
shards = (await fs3__default.default.readdir(path12__default.default.join(appDir, "sitemap"))).filter((f) => f.endsWith(".xml.body"));
|
|
26957
|
+
} catch {
|
|
26958
|
+
return null;
|
|
26959
|
+
}
|
|
26960
|
+
if (shards.length === 0) return null;
|
|
26961
|
+
const bodies = await Promise.all(shards.map((f) => readFileOrNull(path12__default.default.join(appDir, "sitemap", f))));
|
|
26962
|
+
return bodies.filter((b) => b !== null);
|
|
26963
|
+
}
|
|
26964
|
+
function locPath(loc) {
|
|
26965
|
+
try {
|
|
26966
|
+
return new URL(loc).pathname;
|
|
26967
|
+
} catch {
|
|
26968
|
+
return loc;
|
|
26969
|
+
}
|
|
26970
|
+
}
|
|
26971
|
+
async function checkSitemapTrailingSlash(cwd) {
|
|
26972
|
+
const id = "sitemap.trailing-slash";
|
|
26973
|
+
const title = "Sitemap trailing slash";
|
|
26974
|
+
const configRel = chunkSEP5D4MI_js.findNextConfig(cwd);
|
|
26975
|
+
const config2 = configRel ? await readFileOrNull(path12__default.default.join(cwd, configRel)) || "" : "";
|
|
26976
|
+
if (!TRAILING_SLASH_ON.test(config2)) {
|
|
26977
|
+
return { id, title, level: "ok", message: "next.config leaves trailingSlash off" };
|
|
26978
|
+
}
|
|
26979
|
+
const sitemapRel = chunkSEP5D4MI_js.findSitemapRoute(cwd);
|
|
26980
|
+
const source = sitemapRel ? await readFileOrNull(path12__default.default.join(cwd, sitemapRel)) || "" : "";
|
|
26981
|
+
const forcesOff = /\btrailingSlash\s*:\s*false\b/.test(source);
|
|
26982
|
+
const removeForcedOff = `Remove trailingSlash: false from ${sitemapRel}. createSitemap follows next.config.`;
|
|
26983
|
+
const built = await readBuiltSitemaps(cwd);
|
|
26984
|
+
if (built) {
|
|
26985
|
+
const locs = built.flatMap((xml) => [...xml.matchAll(/<loc>\s*([^<\s]+)\s*<\/loc>/g)].map((m) => m[1]));
|
|
26986
|
+
const unslashed = locs.filter((loc) => {
|
|
26987
|
+
const p = locPath(loc);
|
|
26988
|
+
return chunkR7GHP3FY_js.applyTrailingSlash(p, true) !== p;
|
|
26989
|
+
});
|
|
26990
|
+
if (unslashed.length === 0) {
|
|
26991
|
+
return { id, title, level: "ok", message: `All ${locs.length} URLs in the built sitemap match trailingSlash: true` };
|
|
26992
|
+
}
|
|
26993
|
+
const fix = forcesOff ? removeForcedOff : source.includes("createSitemap") ? "Upgrade @sonordev/site-kit: createSitemap now follows next.config trailingSlash. If it's already current, something loads the kit outside Next's bundler (serverExternalPackages), so pass createSitemap({ trailingSlash: true })." : `End every <loc> except / and files like /llms.txt in "/", or switch ${sitemapRel ?? "the sitemap route"} to createSitemap.`;
|
|
26994
|
+
return {
|
|
26995
|
+
id,
|
|
26996
|
+
title,
|
|
26997
|
+
level: "warn",
|
|
26998
|
+
message: `${unslashed.length} of ${locs.length} built sitemap URLs lack the trailing slash ${configRel} requires`,
|
|
26999
|
+
detail: `Each one 308-redirects. ${unslashed.slice(0, 5).join(", ")}`,
|
|
27000
|
+
fix: `${fix} Then rebuild.`
|
|
27001
|
+
};
|
|
27002
|
+
}
|
|
27003
|
+
if (!sitemapRel) {
|
|
27004
|
+
return { id, title, level: "skip", message: "No sitemap route to check" };
|
|
27005
|
+
}
|
|
27006
|
+
if (forcesOff) {
|
|
27007
|
+
return {
|
|
27008
|
+
id,
|
|
27009
|
+
title,
|
|
27010
|
+
level: "warn",
|
|
27011
|
+
message: `${sitemapRel} passes trailingSlash: false but ${configRel} sets trailingSlash: true`,
|
|
27012
|
+
detail: "Every sitemap URL except / will 308-redirect.",
|
|
27013
|
+
fix: removeForcedOff
|
|
27014
|
+
};
|
|
27015
|
+
}
|
|
27016
|
+
if (source.includes("createSitemap")) {
|
|
27017
|
+
return {
|
|
27018
|
+
id,
|
|
27019
|
+
title,
|
|
27020
|
+
level: "ok",
|
|
27021
|
+
message: "createSitemap follows next.config trailingSlash",
|
|
27022
|
+
detail: "No build to confirm against. Run `next build`, then doctor again to check the emitted URLs."
|
|
27023
|
+
};
|
|
27024
|
+
}
|
|
27025
|
+
return {
|
|
27026
|
+
id,
|
|
27027
|
+
title,
|
|
27028
|
+
level: "skip",
|
|
27029
|
+
message: "Custom sitemap and no build to check",
|
|
27030
|
+
fix: 'Run `next build`, then doctor again. Every <loc> except / and files like /llms.txt must end in "/".'
|
|
27031
|
+
};
|
|
27032
|
+
}
|
|
26652
27033
|
async function checkApiReachable(timeoutMs = 5e3) {
|
|
26653
27034
|
const key = process.env.SONOR_API_KEY;
|
|
26654
27035
|
try {
|
|
@@ -26980,7 +27361,7 @@ async function checkSsrRenderFromBuild(cwd) {
|
|
|
26980
27361
|
}
|
|
26981
27362
|
async function checkNetlifyMiddleware(cwd) {
|
|
26982
27363
|
const runtimeRe = /runtime\s*[:=]\s*['"](nodejs|edge)['"]/;
|
|
26983
|
-
for (const rel of
|
|
27364
|
+
for (const rel of chunkSEP5D4MI_js.NEXT_PROXY_FILES) {
|
|
26984
27365
|
const content = await readFileOrNull(path12__default.default.join(cwd, rel));
|
|
26985
27366
|
if (content === null) continue;
|
|
26986
27367
|
if (runtimeRe.test(content)) {
|
|
@@ -26996,7 +27377,7 @@ async function checkNetlifyMiddleware(cwd) {
|
|
|
26996
27377
|
}
|
|
26997
27378
|
return { id: "middleware.netlify", title: "Proxy / middleware", level: "ok", message: `${rel} present` };
|
|
26998
27379
|
}
|
|
26999
|
-
for (const rel of
|
|
27380
|
+
for (const rel of chunkSEP5D4MI_js.NEXT_MIDDLEWARE_FILES) {
|
|
27000
27381
|
const content = await readFileOrNull(path12__default.default.join(cwd, rel));
|
|
27001
27382
|
if (content === null) continue;
|
|
27002
27383
|
if (/runtime\s*[:=]\s*['"]nodejs['"]/.test(content)) {
|
|
@@ -27092,8 +27473,8 @@ async function checkImageDimsDrift(cwd) {
|
|
|
27092
27473
|
}
|
|
27093
27474
|
return { id: "images.dims-drift", title: "Image dims vs SVG", level: "ok", message: "Declared dims match SVG viewBoxes" };
|
|
27094
27475
|
}
|
|
27095
|
-
async function checkOgCard(cwd) {
|
|
27096
|
-
const problems = judgeOgWiring(readOgWiring(cwd));
|
|
27476
|
+
async function checkOgCard(cwd, known = {}) {
|
|
27477
|
+
const problems = judgeOgWiring(readOgWiring(cwd, known));
|
|
27097
27478
|
if (!problems.length) {
|
|
27098
27479
|
return { id: "og.card", title: "Open Graph card", level: "ok", message: "Cards present and wired" };
|
|
27099
27480
|
}
|
|
@@ -27114,12 +27495,59 @@ async function staticChecks(cwd) {
|
|
|
27114
27495
|
await checkSiteKitLayout(cwd),
|
|
27115
27496
|
await checkSitemap(cwd),
|
|
27116
27497
|
await checkPostbuildSitemap(cwd),
|
|
27498
|
+
await checkSitemapTrailingSlash(cwd),
|
|
27117
27499
|
await checkNetlifyMiddleware(cwd),
|
|
27118
27500
|
await checkImageDimsDrift(cwd),
|
|
27119
27501
|
await checkOgCard(cwd)
|
|
27120
27502
|
];
|
|
27121
27503
|
}
|
|
27122
27504
|
|
|
27505
|
+
// src/og/route-copy.ts
|
|
27506
|
+
var RENDER_CONCURRENCY = 4;
|
|
27507
|
+
async function pooled(items, limit, fn) {
|
|
27508
|
+
const results = new Array(items.length);
|
|
27509
|
+
let cursor = 0;
|
|
27510
|
+
const workers = Array.from({ length: Math.min(limit, items.length) }, async () => {
|
|
27511
|
+
while (cursor < items.length) {
|
|
27512
|
+
const i = cursor++;
|
|
27513
|
+
results[i] = await fn(items[i], i);
|
|
27514
|
+
}
|
|
27515
|
+
});
|
|
27516
|
+
await Promise.all(workers);
|
|
27517
|
+
return results;
|
|
27518
|
+
}
|
|
27519
|
+
async function resolveRouteCopy(paths) {
|
|
27520
|
+
let getSEOPageData = null;
|
|
27521
|
+
try {
|
|
27522
|
+
if (process.env.SONOR_API_KEY) {
|
|
27523
|
+
;
|
|
27524
|
+
({ getSEOPageData } = await import('../api-XR5APCH3.js'));
|
|
27525
|
+
}
|
|
27526
|
+
} catch {
|
|
27527
|
+
getSEOPageData = null;
|
|
27528
|
+
}
|
|
27529
|
+
if (!getSEOPageData) return paths.map((p) => ({ path: p }));
|
|
27530
|
+
return pooled(paths, RENDER_CONCURRENCY, async (p) => {
|
|
27531
|
+
try {
|
|
27532
|
+
const page = await getSEOPageData("", p);
|
|
27533
|
+
const title = page?.managed_title ?? page?.managed_og_title;
|
|
27534
|
+
const description = page?.managed_meta_description ?? page?.managed_og_description;
|
|
27535
|
+
const managedOgImage = page?.managed_og_image || void 0;
|
|
27536
|
+
return { path: p, title: title || void 0, description: description || void 0, managedOgImage };
|
|
27537
|
+
} catch {
|
|
27538
|
+
return { path: p };
|
|
27539
|
+
}
|
|
27540
|
+
});
|
|
27541
|
+
}
|
|
27542
|
+
async function readManagedOgImages(cwd) {
|
|
27543
|
+
if (!process.env.SONOR_API_KEY) return void 0;
|
|
27544
|
+
const appDir = chunkSEP5D4MI_js.findAppDirForDiscovery(cwd);
|
|
27545
|
+
if (!appDir) return void 0;
|
|
27546
|
+
const routes = [...new Set(chunkSEP5D4MI_js.discoverNextJsRoutes(appDir).map((r) => r.path))];
|
|
27547
|
+
const copy = await resolveRouteCopy(routes);
|
|
27548
|
+
return copy.filter((r) => r.managedOgImage).map((r) => r.path);
|
|
27549
|
+
}
|
|
27550
|
+
|
|
27123
27551
|
// src/cli/commands/doctor.ts
|
|
27124
27552
|
function countLevels(checks) {
|
|
27125
27553
|
return {
|
|
@@ -27132,6 +27560,11 @@ function countLevels(checks) {
|
|
|
27132
27560
|
async function collectChecks(cwd, online) {
|
|
27133
27561
|
const checks = await staticChecks(cwd);
|
|
27134
27562
|
if (online) {
|
|
27563
|
+
const managedOgImages = await readManagedOgImages(cwd).catch(() => void 0);
|
|
27564
|
+
if (managedOgImages) {
|
|
27565
|
+
const i = checks.findIndex((c) => c.id === "og.card");
|
|
27566
|
+
if (i !== -1) checks[i] = await checkOgCard(cwd, { managedOgImages });
|
|
27567
|
+
}
|
|
27135
27568
|
checks.push(await checkApiReachable(), await checkKeyValid(), await checkLlmsTxt());
|
|
27136
27569
|
checks.push(...await checkClientAuth());
|
|
27137
27570
|
}
|
|
@@ -27188,87 +27621,7 @@ async function statusCommand(options) {
|
|
|
27188
27621
|
const online = options.offline ? false : true;
|
|
27189
27622
|
await runCommand(ctx, (c) => run2(c, online), renderChecksHuman("Site-Kit Integration Status"));
|
|
27190
27623
|
}
|
|
27191
|
-
|
|
27192
|
-
// src/og/pages.ts
|
|
27193
|
-
var DYNAMIC = "*";
|
|
27194
|
-
function pathSegments(path30) {
|
|
27195
|
-
return path30.split("/").filter(Boolean);
|
|
27196
|
-
}
|
|
27197
|
-
function stripBrandSuffix(title, brand) {
|
|
27198
|
-
const cleaned = title.replace(/\s*[|–—-]\s*[^|–—-]+$/, "").trim();
|
|
27199
|
-
if (!cleaned) return title.trim();
|
|
27200
|
-
if (brand && cleaned.toLowerCase() === brand.toLowerCase()) return title.trim();
|
|
27201
|
-
return cleaned;
|
|
27202
|
-
}
|
|
27203
|
-
function titleFromPath(path30) {
|
|
27204
|
-
const last = pathSegments(path30).filter((s) => s !== DYNAMIC).pop();
|
|
27205
|
-
if (!last) return "Home";
|
|
27206
|
-
return last.replace(/[-_]+/g, " ").replace(/\b\w/g, (c) => c.toUpperCase()).trim();
|
|
27207
|
-
}
|
|
27208
|
-
function kickerFromPath(path30, fallback) {
|
|
27209
|
-
const parts = pathSegments(path30);
|
|
27210
|
-
const section = parts.includes(DYNAMIC) ? parts.filter((s) => s !== DYNAMIC) : parts.slice(0, -1);
|
|
27211
|
-
if (!section.length) return fallback;
|
|
27212
|
-
return section.join(" / ").replace(/[-_]+/g, " ");
|
|
27213
|
-
}
|
|
27214
|
-
function clampSubtitle(text, max = 100) {
|
|
27215
|
-
if (!text) return void 0;
|
|
27216
|
-
const flat = text.replace(/\s+/g, " ").trim();
|
|
27217
|
-
if (!flat) return void 0;
|
|
27218
|
-
if (flat.length <= max) return flat;
|
|
27219
|
-
const sentence = flat.slice(0, max + 1).match(/^.*[.!?](?=\s|$)/)?.[0];
|
|
27220
|
-
if (sentence && sentence.length >= 30) return sentence.trim();
|
|
27221
|
-
return void 0;
|
|
27222
|
-
}
|
|
27223
|
-
function kickerIsRedundant(kicker, title) {
|
|
27224
|
-
if (!kicker) return false;
|
|
27225
|
-
const norm = (s) => s.toLowerCase().replace(/[^a-z0-9]+/g, " ").trim();
|
|
27226
|
-
const k2 = norm(kicker);
|
|
27227
|
-
const t = norm(title);
|
|
27228
|
-
if (!k2) return true;
|
|
27229
|
-
if (t.includes(k2) || k2.includes(t)) return true;
|
|
27230
|
-
const titleWords = new Set(t.split(" "));
|
|
27231
|
-
return k2.split(" ").every((w) => titleWords.has(w));
|
|
27232
|
-
}
|
|
27233
|
-
function slugForPath(path30) {
|
|
27234
|
-
const segments = pathSegments(path30);
|
|
27235
|
-
if (!segments.length) return "home";
|
|
27236
|
-
return segments.map((s) => s === DYNAMIC ? "any" : s).join("-").replace(/[^a-zA-Z0-9]+/g, "-").replace(/^-+|-+$/g, "").toLowerCase();
|
|
27237
|
-
}
|
|
27238
|
-
function unmatchedCardKeys(cards, paths) {
|
|
27239
|
-
if (!cards) return [];
|
|
27240
|
-
const known = new Set(paths.flatMap((p) => [p, slugForPath(p)]));
|
|
27241
|
-
return Object.keys(cards).filter((key) => !known.has(key));
|
|
27242
|
-
}
|
|
27243
|
-
function pageCardConfig(base, route, brand) {
|
|
27244
|
-
const override = base.cards?.[route.path] ?? base.cards?.[slugForPath(route.path)];
|
|
27245
|
-
const isHome = route.path === "/";
|
|
27246
|
-
const derived = isHome ? { ...base, cards: void 0 } : (() => {
|
|
27247
|
-
const title = route.title ? stripBrandSuffix(route.title, brand) : titleFromPath(route.path);
|
|
27248
|
-
const kicker = kickerFromPath(route.path, base.content.kicker);
|
|
27249
|
-
return {
|
|
27250
|
-
...base,
|
|
27251
|
-
// `cards` is a build-time instruction, not part of a rendered card.
|
|
27252
|
-
cards: void 0,
|
|
27253
|
-
content: {
|
|
27254
|
-
...base.content,
|
|
27255
|
-
kicker: kickerIsRedundant(kicker, title) ? void 0 : kicker,
|
|
27256
|
-
title,
|
|
27257
|
-
subtitle: clampSubtitle(route.description) ?? base.content.subtitle
|
|
27258
|
-
}
|
|
27259
|
-
};
|
|
27260
|
-
})();
|
|
27261
|
-
if (!override) return derived;
|
|
27262
|
-
return {
|
|
27263
|
-
...derived,
|
|
27264
|
-
...override,
|
|
27265
|
-
content: { ...derived.content, ...override.content }
|
|
27266
|
-
};
|
|
27267
|
-
}
|
|
27268
|
-
|
|
27269
|
-
// src/cli/commands/og.ts
|
|
27270
27624
|
var execFileAsync5 = util.promisify(childProcess.execFile);
|
|
27271
|
-
var RENDER_CONCURRENCY = 4;
|
|
27272
27625
|
var CARD_KEY_FIX = "Key `cards` by route path (`/services/garage`) or slug (`services-garage`). A dynamic route is one `*` per dynamic level \u2014 `/services/*` for `[slug]`, plus a star for each nested `[param]`.";
|
|
27273
27626
|
var CHROME_CANDIDATES = [
|
|
27274
27627
|
process.env.SONOR_CHROME_PATH,
|
|
@@ -27281,7 +27634,7 @@ var CHROME_CANDIDATES = [
|
|
|
27281
27634
|
].filter((p) => !!p);
|
|
27282
27635
|
function findChrome() {
|
|
27283
27636
|
for (const candidate of CHROME_CANDIDATES) {
|
|
27284
|
-
if (
|
|
27637
|
+
if (fs20.existsSync(candidate)) return candidate;
|
|
27285
27638
|
}
|
|
27286
27639
|
return null;
|
|
27287
27640
|
}
|
|
@@ -27289,7 +27642,7 @@ async function loadConfig2(cwd) {
|
|
|
27289
27642
|
const candidates = ["og.config.ts", "og.config.mts", "og.config.mjs", "og.config.js"];
|
|
27290
27643
|
for (const rel of candidates) {
|
|
27291
27644
|
const full = path12__default.default.join(cwd, rel);
|
|
27292
|
-
if (!
|
|
27645
|
+
if (!fs20.existsSync(full)) continue;
|
|
27293
27646
|
try {
|
|
27294
27647
|
const mod = await import(
|
|
27295
27648
|
/* @vite-ignore */
|
|
@@ -27326,7 +27679,7 @@ async function seedConfig(cwd) {
|
|
|
27326
27679
|
} catch {
|
|
27327
27680
|
}
|
|
27328
27681
|
for (const candidate of ["/logo-mark.svg", "/logo.svg", "/logohorizontal.svg"]) {
|
|
27329
|
-
if (
|
|
27682
|
+
if (fs20.existsSync(path12__default.default.join(cwd, "public", candidate))) {
|
|
27330
27683
|
logo = candidate;
|
|
27331
27684
|
break;
|
|
27332
27685
|
}
|
|
@@ -27341,14 +27694,14 @@ async function seedConfig(cwd) {
|
|
|
27341
27694
|
function inlinePublicPaths(html, cwd) {
|
|
27342
27695
|
return html.replace(/src="(\/[^"]+)"/g, (_3, p) => {
|
|
27343
27696
|
const full = path12__default.default.join(cwd, "public", p);
|
|
27344
|
-
return
|
|
27697
|
+
return fs20.existsSync(full) ? `src="file://${full}"` : `src="${p}"`;
|
|
27345
27698
|
});
|
|
27346
27699
|
}
|
|
27347
27700
|
async function renderCard(config2, outPath, cwd, chrome, tmpSuffix) {
|
|
27348
27701
|
const tmpHtml = path12__default.default.join(cwd, `.sonor-og-${tmpSuffix}.html`);
|
|
27349
27702
|
try {
|
|
27350
27703
|
await fs3__default.default.mkdir(path12__default.default.dirname(outPath), { recursive: true });
|
|
27351
|
-
await fs3__default.default.writeFile(tmpHtml, inlinePublicPaths(
|
|
27704
|
+
await fs3__default.default.writeFile(tmpHtml, inlinePublicPaths(chunkOEW2LFOV_js.buildOgHtml(config2), cwd));
|
|
27352
27705
|
const { stdout } = await execFileAsync5(
|
|
27353
27706
|
chrome,
|
|
27354
27707
|
[
|
|
@@ -27369,15 +27722,15 @@ async function renderCard(config2, outPath, cwd, chrome, tmpSuffix) {
|
|
|
27369
27722
|
}
|
|
27370
27723
|
}
|
|
27371
27724
|
function parseReport(dom) {
|
|
27372
|
-
const raw = dom.match(new RegExp(`${
|
|
27725
|
+
const raw = dom.match(new RegExp(`${chunkCUNZAD46_js.OG_REPORT_ATTR}="([^"]*)"`))?.[1];
|
|
27373
27726
|
if (!raw) {
|
|
27374
|
-
return { fits: true, titlePx:
|
|
27727
|
+
return { fits: true, titlePx: chunkCUNZAD46_js.TITLE_MAX_PX, issues: ["card rendered but could not be measured (fitter did not run)"] };
|
|
27375
27728
|
}
|
|
27376
27729
|
try {
|
|
27377
27730
|
const decoded = raw.replace(/"/g, '"').replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
27378
27731
|
return JSON.parse(decoded);
|
|
27379
27732
|
} catch {
|
|
27380
|
-
return { fits: true, titlePx:
|
|
27733
|
+
return { fits: true, titlePx: chunkCUNZAD46_js.TITLE_MAX_PX, issues: ["card rendered but the fit report was unreadable"] };
|
|
27381
27734
|
}
|
|
27382
27735
|
}
|
|
27383
27736
|
async function compressCard(pngPath, cwd) {
|
|
@@ -27393,12 +27746,12 @@ async function compressCard(pngPath, cwd) {
|
|
|
27393
27746
|
}
|
|
27394
27747
|
}
|
|
27395
27748
|
function codeOgImageFile(dir) {
|
|
27396
|
-
return
|
|
27749
|
+
return chunkSEP5D4MI_js.findConventionFile(dir, "opengraph-image") ?? chunkSEP5D4MI_js.findConventionFile(path12__default.default.join(dir, "opengraph-image"), "route");
|
|
27397
27750
|
}
|
|
27398
27751
|
function discoverDynamicSegments(appDir) {
|
|
27399
27752
|
const found = [];
|
|
27400
27753
|
const walk = (dir, urlSegments, pattern) => {
|
|
27401
|
-
for (const entry of
|
|
27754
|
+
for (const entry of fs20.readdirSync(dir, { withFileTypes: true })) {
|
|
27402
27755
|
if (!entry.isDirectory()) continue;
|
|
27403
27756
|
if (entry.name.startsWith("_") || entry.name.startsWith(".")) continue;
|
|
27404
27757
|
if (entry.name === "api" || entry.name === "node_modules") continue;
|
|
@@ -27406,11 +27759,13 @@ function discoverDynamicSegments(appDir) {
|
|
|
27406
27759
|
const isGroup = entry.name.startsWith("(") && entry.name.endsWith(")");
|
|
27407
27760
|
const isDynamic = entry.name.startsWith("[") && entry.name.endsWith("]");
|
|
27408
27761
|
const nextUrl = isGroup || isDynamic ? urlSegments : [...urlSegments, entry.name];
|
|
27409
|
-
const nextPattern = isGroup ? pattern : [...pattern, isDynamic ? DYNAMIC : entry.name];
|
|
27762
|
+
const nextPattern = isGroup ? pattern : [...pattern, isDynamic ? chunkOEW2LFOV_js.DYNAMIC : entry.name];
|
|
27410
27763
|
if (isDynamic) {
|
|
27411
|
-
if (
|
|
27764
|
+
if (chunkSEP5D4MI_js.hasPageFile(full)) {
|
|
27412
27765
|
found.push({ dir: full, path: `/${nextPattern.join("/")}`, parent: `/${urlSegments.join("/")}` });
|
|
27413
27766
|
}
|
|
27767
|
+
} else if (!isGroup && nextPattern.includes(chunkOEW2LFOV_js.DYNAMIC) && chunkSEP5D4MI_js.hasPageFile(full)) {
|
|
27768
|
+
found.push({ dir: full, path: `/${nextPattern.join("/")}`, parent: null });
|
|
27414
27769
|
}
|
|
27415
27770
|
walk(full, nextUrl, nextPattern);
|
|
27416
27771
|
}
|
|
@@ -27418,43 +27773,9 @@ function discoverDynamicSegments(appDir) {
|
|
|
27418
27773
|
walk(appDir, [], []);
|
|
27419
27774
|
return found;
|
|
27420
27775
|
}
|
|
27421
|
-
async function pooled(items, limit, fn) {
|
|
27422
|
-
const results = new Array(items.length);
|
|
27423
|
-
let cursor = 0;
|
|
27424
|
-
const workers = Array.from({ length: Math.min(limit, items.length) }, async () => {
|
|
27425
|
-
while (cursor < items.length) {
|
|
27426
|
-
const i = cursor++;
|
|
27427
|
-
results[i] = await fn(items[i], i);
|
|
27428
|
-
}
|
|
27429
|
-
});
|
|
27430
|
-
await Promise.all(workers);
|
|
27431
|
-
return results;
|
|
27432
|
-
}
|
|
27433
|
-
async function resolveRouteCopy(paths) {
|
|
27434
|
-
let getSEOPageData = null;
|
|
27435
|
-
try {
|
|
27436
|
-
if (process.env.SONOR_API_KEY) {
|
|
27437
|
-
;
|
|
27438
|
-
({ getSEOPageData } = await import('../api-XR5APCH3.js'));
|
|
27439
|
-
}
|
|
27440
|
-
} catch {
|
|
27441
|
-
getSEOPageData = null;
|
|
27442
|
-
}
|
|
27443
|
-
if (!getSEOPageData) return paths.map((p) => ({ path: p }));
|
|
27444
|
-
return pooled(paths, RENDER_CONCURRENCY, async (p) => {
|
|
27445
|
-
try {
|
|
27446
|
-
const page = await getSEOPageData("", p);
|
|
27447
|
-
const title = page?.managed_title ?? page?.managed_og_title;
|
|
27448
|
-
const description = page?.managed_meta_description ?? page?.managed_og_description;
|
|
27449
|
-
return { path: p, title: title || void 0, description: description || void 0 };
|
|
27450
|
-
} catch {
|
|
27451
|
-
return { path: p };
|
|
27452
|
-
}
|
|
27453
|
-
});
|
|
27454
|
-
}
|
|
27455
27776
|
function reportCard(label, report) {
|
|
27456
27777
|
if (report.fits && !report.issues.length) {
|
|
27457
|
-
const shrunk = report.titlePx <
|
|
27778
|
+
const shrunk = report.titlePx < chunkCUNZAD46_js.TITLE_MAX_PX ? source_default.gray(` (title fitted to ${report.titlePx}px)`) : "";
|
|
27458
27779
|
console.log(` ${source_default.green("\u2713")} ${label}${shrunk}`);
|
|
27459
27780
|
return true;
|
|
27460
27781
|
}
|
|
@@ -27496,6 +27817,7 @@ async function runOg(options) {
|
|
|
27496
27817
|
let cardKeyFix = null;
|
|
27497
27818
|
let pageCardsWritten = 0;
|
|
27498
27819
|
let totalCardBytes = 0;
|
|
27820
|
+
let managedOgImages;
|
|
27499
27821
|
const spinner = ora("Rendering the site card...").start();
|
|
27500
27822
|
try {
|
|
27501
27823
|
const report = await renderCard(config2, outPath, cwd, chrome, "site");
|
|
@@ -27513,11 +27835,11 @@ async function runOg(options) {
|
|
|
27513
27835
|
};
|
|
27514
27836
|
}
|
|
27515
27837
|
if (options.pages !== false) {
|
|
27516
|
-
const appDir =
|
|
27838
|
+
const appDir = chunkSEP5D4MI_js.findAppDirForDiscovery(cwd);
|
|
27517
27839
|
if (!appDir) {
|
|
27518
27840
|
console.log(source_default.yellow(" ! No app/ directory found \u2014 skipped per-page cards."));
|
|
27519
27841
|
} else {
|
|
27520
|
-
const routes = [...new Set(
|
|
27842
|
+
const routes = [...new Set(chunkSEP5D4MI_js.discoverNextJsRoutes(appDir).map((r) => r.path))];
|
|
27521
27843
|
if (!routes.length) {
|
|
27522
27844
|
console.log(source_default.yellow(" ! No static routes discovered \u2014 skipped per-page cards."));
|
|
27523
27845
|
} else {
|
|
@@ -27527,6 +27849,9 @@ async function runOg(options) {
|
|
|
27527
27849
|
const withCopy = await resolveRouteCopy(routes);
|
|
27528
27850
|
const named = withCopy.filter((r) => r.title).length;
|
|
27529
27851
|
copySpinner.stop();
|
|
27852
|
+
if (process.env.SONOR_API_KEY) {
|
|
27853
|
+
managedOgImages = withCopy.filter((r) => r.managedOgImage).map((r) => r.path);
|
|
27854
|
+
}
|
|
27530
27855
|
if (named) {
|
|
27531
27856
|
console.log(source_default.gray(` ${named}/${routes.length} titled from Sonor, the rest from the route path`));
|
|
27532
27857
|
} else {
|
|
@@ -27535,14 +27860,16 @@ async function runOg(options) {
|
|
|
27535
27860
|
const brand = config2.content.title.replace(/\n/g, " ").trim();
|
|
27536
27861
|
const copyByPath = new Map(withCopy.map((r) => [r.path, r]));
|
|
27537
27862
|
const dynamic = discoverDynamicSegments(appDir).map((seg) => ({
|
|
27538
|
-
...copyByPath.get(seg.parent)
|
|
27863
|
+
...seg.parent !== null && copyByPath.get(seg.parent) || {},
|
|
27539
27864
|
path: seg.path,
|
|
27540
27865
|
dir: seg.dir
|
|
27541
27866
|
}));
|
|
27542
27867
|
const targets = [...withCopy, ...dynamic];
|
|
27543
|
-
const
|
|
27868
|
+
const paramKeys = chunkOEW2LFOV_js.paramCardKeys(config2.cards, targets.map((t) => t.path));
|
|
27869
|
+
const paramRoutes = paramKeys.length ? await resolveRouteCopy(paramKeys.map((k2) => k2.path)) : [];
|
|
27870
|
+
const strayKeys = chunkOEW2LFOV_js.unmatchedCardKeys(config2.cards, targets.map((t) => t.path));
|
|
27544
27871
|
if (strayKeys.length) {
|
|
27545
|
-
const patterns = targets.filter((t) => t.path.includes(DYNAMIC)).map((t) => t.path);
|
|
27872
|
+
const patterns = targets.filter((t) => t.path.includes(chunkOEW2LFOV_js.DYNAMIC)).map((t) => t.path);
|
|
27546
27873
|
console.log(
|
|
27547
27874
|
source_default.yellow(
|
|
27548
27875
|
` ! ${strayKeys.length} \`cards\` key${strayKeys.length === 1 ? "" : "s"} in og.config.ts matched no route: ${strayKeys.join(", ")}`
|
|
@@ -27572,7 +27899,7 @@ async function runOg(options) {
|
|
|
27572
27899
|
checks.push({ id: "og.code-card", title: route.path, level: "ok", message: `Code-based card kept: ${file}` });
|
|
27573
27900
|
}
|
|
27574
27901
|
const reports = await pooled(toRender, RENDER_CONCURRENCY, async (route, i) => {
|
|
27575
|
-
const pageConfig = pageCardConfig(config2, route, brand);
|
|
27902
|
+
const pageConfig = chunkOEW2LFOV_js.pageCardConfig(config2, route, brand);
|
|
27576
27903
|
const dir = route.dir;
|
|
27577
27904
|
for (const ext2 of ["png", "jpg", "jpeg"]) {
|
|
27578
27905
|
await fs3__default.default.rm(path12__default.default.join(dir, `opengraph-image.${ext2}`), { force: true });
|
|
@@ -27586,10 +27913,36 @@ async function runOg(options) {
|
|
|
27586
27913
|
clean = reportCard(`${route.path} ${source_default.gray(path12__default.default.relative(cwd, file))}`, report) && clean;
|
|
27587
27914
|
checks.push(cardCheck(route.path, path12__default.default.relative(cwd, file), report));
|
|
27588
27915
|
}
|
|
27589
|
-
|
|
27590
|
-
|
|
27916
|
+
const paramDir = path12__default.default.join(cwd, "public", chunkOEW2LFOV_js.PARAM_CARD_DIR);
|
|
27917
|
+
await fs3__default.default.rm(paramDir, { recursive: true, force: true });
|
|
27918
|
+
let paramReports = [];
|
|
27919
|
+
if (paramRoutes.length) {
|
|
27920
|
+
console.log("");
|
|
27921
|
+
console.log(source_default.bold(" Per-URL cards") + source_default.gray(` public/${chunkOEW2LFOV_js.PARAM_CARD_DIR}/, declare with paramCardImage()`));
|
|
27922
|
+
paramReports = await pooled(paramRoutes, RENDER_CONCURRENCY, async (route, i) => {
|
|
27923
|
+
const pageConfig = chunkOEW2LFOV_js.pageCardConfig(config2, route, brand);
|
|
27924
|
+
const jpg = path12__default.default.join(cwd, "public", chunkOEW2LFOV_js.paramCardUrl(route.path));
|
|
27925
|
+
const png = jpg.replace(/\.jpg$/, ".png");
|
|
27926
|
+
const report = await renderCard(pageConfig, png, cwd, chrome, `param-${i}`);
|
|
27927
|
+
const file = await compressCard(png, cwd);
|
|
27928
|
+
if (file !== jpg) {
|
|
27929
|
+
report.fits = false;
|
|
27930
|
+
report.issues = [...report.issues, "sharp is needed to write per-URL cards as .jpg. Add it: pnpm add -D sharp"];
|
|
27931
|
+
}
|
|
27932
|
+
return { route, file, report };
|
|
27933
|
+
});
|
|
27934
|
+
for (const { route, file, report } of paramReports) {
|
|
27935
|
+
clean = reportCard(`${route.path} ${source_default.gray(path12__default.default.relative(cwd, file))}`, report) && clean;
|
|
27936
|
+
checks.push(cardCheck(route.path, path12__default.default.relative(cwd, file), report));
|
|
27937
|
+
}
|
|
27938
|
+
}
|
|
27939
|
+
pageCardsWritten = reports.length + paramReports.length;
|
|
27940
|
+
const bytes = await totalBytes([...reports, ...paramReports].map((r) => r.file));
|
|
27591
27941
|
totalCardBytes = bytes;
|
|
27592
|
-
console.log(source_default.gray(` ${(bytes / 1024 / 1024).toFixed(1)} MB of cards. Next serves
|
|
27942
|
+
console.log(source_default.gray(` ${(bytes / 1024 / 1024).toFixed(1)} MB of cards. Next serves the route cards automatically \u2014 no per-page metadata needed.`));
|
|
27943
|
+
if (paramReports.length) {
|
|
27944
|
+
console.log(source_default.gray(" Per-URL cards need the page to declare them: openGraph.images = [paramCardImage(path, { config })]."));
|
|
27945
|
+
}
|
|
27593
27946
|
}
|
|
27594
27947
|
}
|
|
27595
27948
|
}
|
|
@@ -27606,7 +27959,7 @@ async function runOg(options) {
|
|
|
27606
27959
|
console.log(source_default.gray(" (sharp not resolvable \u2014 skipped the 300px preview)"));
|
|
27607
27960
|
}
|
|
27608
27961
|
}
|
|
27609
|
-
const problems = checkOgWiring(cwd);
|
|
27962
|
+
const problems = checkOgWiring(cwd, { managedOgImages });
|
|
27610
27963
|
console.log("");
|
|
27611
27964
|
if (problems.length) {
|
|
27612
27965
|
console.log(source_default.yellow(" Metadata wiring:"));
|
|
@@ -27661,12 +28014,12 @@ function routeOutputDir(appDir, urlPath) {
|
|
|
27661
28014
|
let dir = appDir;
|
|
27662
28015
|
for (const segment of segments) {
|
|
27663
28016
|
const direct = path12__default.default.join(dir, segment);
|
|
27664
|
-
if (
|
|
28017
|
+
if (fs20.existsSync(direct)) {
|
|
27665
28018
|
dir = direct;
|
|
27666
28019
|
continue;
|
|
27667
28020
|
}
|
|
27668
|
-
const group =
|
|
27669
|
-
(e) => e.isDirectory() && e.name.startsWith("(") && e.name.endsWith(")") &&
|
|
28021
|
+
const group = fs20.existsSync(dir) ? fs20.readdirSync(dir, { withFileTypes: true }).find(
|
|
28022
|
+
(e) => e.isDirectory() && e.name.startsWith("(") && e.name.endsWith(")") && fs20.existsSync(path12__default.default.join(dir, e.name, segment))
|
|
27670
28023
|
) : void 0;
|
|
27671
28024
|
dir = group ? path12__default.default.join(dir, group.name, segment) : direct;
|
|
27672
28025
|
}
|
|
@@ -27684,7 +28037,7 @@ async function totalBytes(files) {
|
|
|
27684
28037
|
}
|
|
27685
28038
|
async function siteDomain(cwd) {
|
|
27686
28039
|
const envFile = path12__default.default.join(cwd, ".env.local");
|
|
27687
|
-
if (
|
|
28040
|
+
if (fs20.existsSync(envFile)) {
|
|
27688
28041
|
const env3 = await fs3__default.default.readFile(envFile, "utf-8").catch(() => "");
|
|
27689
28042
|
const url = env3.match(/^NEXT_PUBLIC_SITE_URL=(.+)$/m)?.[1]?.trim();
|
|
27690
28043
|
if (url) return url.replace(/\/+$/, "");
|
|
@@ -27808,14 +28161,14 @@ var hs = new RegExp(pe, "g");
|
|
|
27808
28161
|
var as = /\\\\/g;
|
|
27809
28162
|
var ls = /\\{/g;
|
|
27810
28163
|
var cs = /\\}/g;
|
|
27811
|
-
var
|
|
28164
|
+
var fs23 = /\\,/g;
|
|
27812
28165
|
var us = /\\./g;
|
|
27813
28166
|
var ds = 1e5;
|
|
27814
28167
|
function Ht(n5) {
|
|
27815
28168
|
return isNaN(n5) ? n5.charCodeAt(0) : parseInt(n5, 10);
|
|
27816
28169
|
}
|
|
27817
28170
|
function ps(n5) {
|
|
27818
|
-
return n5.replace(as, fe).replace(ls, ue).replace(cs, qt).replace(
|
|
28171
|
+
return n5.replace(as, fe).replace(ls, ue).replace(cs, qt).replace(fs23, de).replace(us, pe);
|
|
27819
28172
|
}
|
|
27820
28173
|
function ms(n5) {
|
|
27821
28174
|
return n5.replace(is, "\\").replace(rs, "{").replace(ns, "}").replace(os5, ",").replace(hs, ".");
|
|
@@ -29435,9 +29788,9 @@ var V = class extends events.EventEmitter {
|
|
|
29435
29788
|
return oi;
|
|
29436
29789
|
}
|
|
29437
29790
|
};
|
|
29438
|
-
var vi =
|
|
29439
|
-
var wt = { lstatSync:
|
|
29440
|
-
var Ue = (n5) => !n5 || n5 === wt || n5 ===
|
|
29791
|
+
var vi = fs20.realpathSync.native;
|
|
29792
|
+
var wt = { lstatSync: fs20.lstatSync, readdir: fs20.readdir, readdirSync: fs20.readdirSync, readlinkSync: fs20.readlinkSync, realpathSync: vi, promises: { lstat: fs3.lstat, readdir: fs3.readdir, readlink: fs3.readlink, realpath: fs3.realpath } };
|
|
29793
|
+
var Ue = (n5) => !n5 || n5 === wt || n5 === fs20__namespace ? wt : { ...wt, ...n5, promises: { ...wt.promises, ...n5.promises || {} } };
|
|
29441
29794
|
var $e = /^\\\\\?\\([a-z]:)\\?$/i;
|
|
29442
29795
|
var Ri = (n5) => n5.replace(/\//g, "\\").replace($e, "$1\\");
|
|
29443
29796
|
var Oi = /[\\\/]/;
|
|
@@ -31166,7 +31519,7 @@ function findManifestPath() {
|
|
|
31166
31519
|
let dir = baseDir;
|
|
31167
31520
|
for (let i = 0; i < 8; i++) {
|
|
31168
31521
|
const candidate = path12__default.default.join(dir, "agent-manifest.json");
|
|
31169
|
-
if (
|
|
31522
|
+
if (fs20__namespace.default.existsSync(candidate)) return candidate;
|
|
31170
31523
|
const parent = path12__default.default.dirname(dir);
|
|
31171
31524
|
if (parent === dir) break;
|
|
31172
31525
|
dir = parent;
|
|
@@ -31182,7 +31535,7 @@ async function run5(ctx, options) {
|
|
|
31182
31535
|
"Reinstall @sonordev/site-kit, or run `npm run build` if working from source."
|
|
31183
31536
|
);
|
|
31184
31537
|
}
|
|
31185
|
-
const manifest = JSON.parse(
|
|
31538
|
+
const manifest = JSON.parse(fs20__namespace.default.readFileSync(manifestPath, "utf-8"));
|
|
31186
31539
|
if (options.section) {
|
|
31187
31540
|
const section = options.section;
|
|
31188
31541
|
if (!(section in manifest)) {
|
|
@@ -31246,7 +31599,7 @@ async function syncCommand2(options) {
|
|
|
31246
31599
|
}
|
|
31247
31600
|
async function syncPagesToPortal(apiUrl, apiKey, dryRun) {
|
|
31248
31601
|
const spinner = ora("Discovering pages...").start();
|
|
31249
|
-
const appDir =
|
|
31602
|
+
const appDir = chunkSEP5D4MI_js.findAppDirForDiscovery();
|
|
31250
31603
|
if (!appDir) {
|
|
31251
31604
|
spinner.fail("Could not find app directory");
|
|
31252
31605
|
return;
|
|
@@ -31309,10 +31662,10 @@ async function syncPagesToPortal(apiUrl, apiKey, dryRun) {
|
|
|
31309
31662
|
}
|
|
31310
31663
|
function discoverPages(appDir, currentPath = "", pages = []) {
|
|
31311
31664
|
const fullPath = path12__default.default.join(appDir, currentPath);
|
|
31312
|
-
if (!
|
|
31665
|
+
if (!fs20.existsSync(fullPath)) {
|
|
31313
31666
|
return pages;
|
|
31314
31667
|
}
|
|
31315
|
-
const entries =
|
|
31668
|
+
const entries = fs20.readdirSync(fullPath);
|
|
31316
31669
|
const hasPage = entries.some((entry) => PAGE_FILES.includes(entry));
|
|
31317
31670
|
if (hasPage) {
|
|
31318
31671
|
let urlPath = "/" + currentPath;
|
|
@@ -31331,7 +31684,7 @@ function discoverPages(appDir, currentPath = "", pages = []) {
|
|
|
31331
31684
|
}
|
|
31332
31685
|
for (const entry of entries) {
|
|
31333
31686
|
const entryPath = path12__default.default.join(fullPath, entry);
|
|
31334
|
-
const stat =
|
|
31687
|
+
const stat = fs20.statSync(entryPath);
|
|
31335
31688
|
if (stat.isDirectory()) {
|
|
31336
31689
|
const folderName = entry.toLowerCase();
|
|
31337
31690
|
if (IGNORED_FOLDERS.some((ignored) => folderName.includes(ignored))) {
|
|
@@ -31351,7 +31704,7 @@ function discoverPages(appDir, currentPath = "", pages = []) {
|
|
|
31351
31704
|
function findNextBuildDir() {
|
|
31352
31705
|
const cwd = process.cwd();
|
|
31353
31706
|
const candidate = path12__default.default.join(cwd, ".next", "server", "app");
|
|
31354
|
-
return
|
|
31707
|
+
return fs20.existsSync(candidate) ? candidate : null;
|
|
31355
31708
|
}
|
|
31356
31709
|
function extractPageContent(buildDir, pagePath) {
|
|
31357
31710
|
const baseName = pagePath === "/" ? "index" : pagePath.replace(/^\//, "");
|
|
@@ -31361,9 +31714,9 @@ function extractPageContent(buildDir, pagePath) {
|
|
|
31361
31714
|
];
|
|
31362
31715
|
let html = null;
|
|
31363
31716
|
for (const candidate of htmlCandidates) {
|
|
31364
|
-
if (
|
|
31717
|
+
if (fs20.existsSync(candidate)) {
|
|
31365
31718
|
try {
|
|
31366
|
-
html =
|
|
31719
|
+
html = fs20.readFileSync(candidate, "utf-8");
|
|
31367
31720
|
break;
|
|
31368
31721
|
} catch {
|
|
31369
31722
|
continue;
|
|
@@ -31376,9 +31729,9 @@ function extractPageContent(buildDir, pagePath) {
|
|
|
31376
31729
|
];
|
|
31377
31730
|
let rsc = null;
|
|
31378
31731
|
for (const candidate of rscCandidates) {
|
|
31379
|
-
if (
|
|
31732
|
+
if (fs20.existsSync(candidate)) {
|
|
31380
31733
|
try {
|
|
31381
|
-
rsc =
|
|
31734
|
+
rsc = fs20.readFileSync(candidate, "utf-8");
|
|
31382
31735
|
break;
|
|
31383
31736
|
} catch {
|
|
31384
31737
|
continue;
|
|
@@ -31484,17 +31837,17 @@ function findBlogDir() {
|
|
|
31484
31837
|
const cwd = process.cwd();
|
|
31485
31838
|
for (const dir of BLOG_DIRS) {
|
|
31486
31839
|
const full = path12__default.default.join(cwd, dir);
|
|
31487
|
-
if (
|
|
31840
|
+
if (fs20.existsSync(full)) return full;
|
|
31488
31841
|
}
|
|
31489
31842
|
return null;
|
|
31490
31843
|
}
|
|
31491
31844
|
async function discoverBlogPosts(dir) {
|
|
31492
31845
|
const posts = [];
|
|
31493
31846
|
async function walk(currentDir) {
|
|
31494
|
-
const entries =
|
|
31847
|
+
const entries = fs20.readdirSync(currentDir);
|
|
31495
31848
|
for (const entry of entries) {
|
|
31496
31849
|
const fullPath = path12__default.default.join(currentDir, entry);
|
|
31497
|
-
const stat =
|
|
31850
|
+
const stat = fs20.statSync(fullPath);
|
|
31498
31851
|
if (stat.isDirectory()) {
|
|
31499
31852
|
await walk(fullPath);
|
|
31500
31853
|
continue;
|
|
@@ -31558,10 +31911,10 @@ async function syncBlogToPortal(_apiUrl, _apiKey, _dryRun) {
|
|
|
31558
31911
|
async function discoverSchemaUsage(appDir) {
|
|
31559
31912
|
const usages = [];
|
|
31560
31913
|
async function walk(currentDir, currentPath = "") {
|
|
31561
|
-
const entries =
|
|
31914
|
+
const entries = fs20.readdirSync(currentDir);
|
|
31562
31915
|
for (const entry of entries) {
|
|
31563
31916
|
const fullPath = path12__default.default.join(currentDir, entry);
|
|
31564
|
-
const stat =
|
|
31917
|
+
const stat = fs20.statSync(fullPath);
|
|
31565
31918
|
if (stat.isDirectory()) {
|
|
31566
31919
|
if (entry.startsWith(".") || entry === "node_modules") continue;
|
|
31567
31920
|
await walk(fullPath, path12__default.default.join(currentPath, entry));
|
|
@@ -31606,7 +31959,7 @@ async function discoverSchemaUsage(appDir) {
|
|
|
31606
31959
|
return usages;
|
|
31607
31960
|
}
|
|
31608
31961
|
async function syncSchemasToPortal(apiUrl, apiKey, dryRun) {
|
|
31609
|
-
const appDir =
|
|
31962
|
+
const appDir = chunkSEP5D4MI_js.findAppDirForDiscovery();
|
|
31610
31963
|
if (!appDir) {
|
|
31611
31964
|
console.log(source_default.gray(" No app directory found"));
|
|
31612
31965
|
return;
|
|
@@ -31649,7 +32002,7 @@ async function apiRoutesCommand(options) {
|
|
|
31649
32002
|
console.log("");
|
|
31650
32003
|
console.log(source_default.bold(" Site-Kit API Routes"));
|
|
31651
32004
|
console.log("");
|
|
31652
|
-
const appDir =
|
|
32005
|
+
const appDir = chunkSEP5D4MI_js.findAppDirForDiscovery();
|
|
31653
32006
|
if (!appDir) {
|
|
31654
32007
|
console.log(source_default.red(" \u2717 Could not find app directory"));
|
|
31655
32008
|
console.log(source_default.gray(" Make sure you are in a Next.js project with an app directory"));
|
|
@@ -31658,7 +32011,7 @@ async function apiRoutesCommand(options) {
|
|
|
31658
32011
|
}
|
|
31659
32012
|
const routeDir = path12__default.default.join(appDir, "_uptrade", "api", "[...path]");
|
|
31660
32013
|
const routeFile = path12__default.default.join(routeDir, "route.ts");
|
|
31661
|
-
if (
|
|
32014
|
+
if (fs20.existsSync(routeFile) && !options.force) {
|
|
31662
32015
|
console.log(source_default.yellow(" \u26A0 API routes already exist"));
|
|
31663
32016
|
console.log(source_default.gray(` ${routeFile}`));
|
|
31664
32017
|
console.log("");
|
|
@@ -31796,12 +32149,12 @@ async function handleRequest(
|
|
|
31796
32149
|
`;
|
|
31797
32150
|
}
|
|
31798
32151
|
function detectPackageManager(cwd) {
|
|
31799
|
-
if (
|
|
31800
|
-
if (
|
|
32152
|
+
if (fs20.existsSync(path12__default.default.join(cwd, "pnpm-lock.yaml"))) return "pnpm";
|
|
32153
|
+
if (fs20.existsSync(path12__default.default.join(cwd, "yarn.lock"))) return "yarn";
|
|
31801
32154
|
return "npm";
|
|
31802
32155
|
}
|
|
31803
32156
|
async function run6(ctx, options) {
|
|
31804
|
-
if (!
|
|
32157
|
+
if (!fs20.existsSync(path12__default.default.join(ctx.cwd, "package.json"))) {
|
|
31805
32158
|
throw new UsageError(
|
|
31806
32159
|
"NO_PACKAGE_JSON",
|
|
31807
32160
|
"No package.json found",
|
|
@@ -31846,18 +32199,18 @@ async function installCommand(options) {
|
|
|
31846
32199
|
await runCommand(ctx, (c) => run6(c, options), renderHuman4);
|
|
31847
32200
|
}
|
|
31848
32201
|
function detectPackageManager2(cwd) {
|
|
31849
|
-
if (
|
|
31850
|
-
if (
|
|
32202
|
+
if (fs20.existsSync(path12__default.default.join(cwd, "pnpm-lock.yaml"))) return "pnpm";
|
|
32203
|
+
if (fs20.existsSync(path12__default.default.join(cwd, "yarn.lock"))) return "yarn";
|
|
31851
32204
|
return "npm";
|
|
31852
32205
|
}
|
|
31853
32206
|
async function run7(ctx, options) {
|
|
31854
32207
|
const pkgPath = path12__default.default.join(ctx.cwd, "package.json");
|
|
31855
|
-
if (!
|
|
32208
|
+
if (!fs20.existsSync(pkgPath)) {
|
|
31856
32209
|
throw new UsageError("NO_PACKAGE_JSON", "No package.json found", "Run this from your project root.");
|
|
31857
32210
|
}
|
|
31858
32211
|
let fromVersion = "unknown";
|
|
31859
32212
|
try {
|
|
31860
|
-
const pkg = JSON.parse(
|
|
32213
|
+
const pkg = JSON.parse(fs20.readFileSync(pkgPath, "utf-8"));
|
|
31861
32214
|
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
31862
32215
|
if (deps["@sonordev/site-kit"]) fromVersion = String(deps["@sonordev/site-kit"]).replace(/[\^~]/, "");
|
|
31863
32216
|
} catch {
|
|
@@ -31906,7 +32259,7 @@ async function scaffoldCommand(options) {
|
|
|
31906
32259
|
);
|
|
31907
32260
|
console.log("");
|
|
31908
32261
|
const cwd = process.cwd();
|
|
31909
|
-
const appDir =
|
|
32262
|
+
const appDir = chunkSEP5D4MI_js.findAppDirForDiscovery(cwd);
|
|
31910
32263
|
if (!appDir) {
|
|
31911
32264
|
console.log(source_default.red(" \u2717 No app directory found (app/ or src/app/)"));
|
|
31912
32265
|
process.exit(1);
|
|
@@ -32108,7 +32461,7 @@ SONOR_API_KEY=sonor_your-project-uuid_your-secret-key
|
|
|
32108
32461
|
console.log(source_default.yellow(" [DRY RUN] Would create:"));
|
|
32109
32462
|
for (const f of files) {
|
|
32110
32463
|
const rel = path12__default.default.relative(cwd, f.path);
|
|
32111
|
-
const exists2 =
|
|
32464
|
+
const exists2 = fs20.existsSync(f.path);
|
|
32112
32465
|
console.log(
|
|
32113
32466
|
source_default.gray(` ${rel}`) + (exists2 ? source_default.yellow(" (exists, would skip)") : "")
|
|
32114
32467
|
);
|
|
@@ -32121,7 +32474,7 @@ SONOR_API_KEY=sonor_your-project-uuid_your-secret-key
|
|
|
32121
32474
|
let skipped = 0;
|
|
32122
32475
|
for (const f of files) {
|
|
32123
32476
|
try {
|
|
32124
|
-
if (
|
|
32477
|
+
if (fs20.existsSync(f.path) && !options.force) {
|
|
32125
32478
|
spinner.warn(`Skipped (exists): ${path12__default.default.relative(cwd, f.path)}`);
|
|
32126
32479
|
skipped++;
|
|
32127
32480
|
continue;
|
|
@@ -32178,17 +32531,16 @@ var LLMS_FILES = [
|
|
|
32178
32531
|
{ path: "/llms.txt", handler: "createLLMsTxtHandler" },
|
|
32179
32532
|
{ path: "/llms-full.txt", handler: "createLLMsFullTxtHandler" }
|
|
32180
32533
|
];
|
|
32181
|
-
var NEXT_CONFIGS = ["next.config.ts", "next.config.mts", "next.config.mjs", "next.config.js", "next.config.cjs"];
|
|
32182
32534
|
function read(cwd, rel) {
|
|
32183
32535
|
try {
|
|
32184
|
-
return
|
|
32536
|
+
return fs20__namespace.default.readFileSync(path12__default.default.join(cwd, rel), "utf-8");
|
|
32185
32537
|
} catch {
|
|
32186
32538
|
return "";
|
|
32187
32539
|
}
|
|
32188
32540
|
}
|
|
32189
32541
|
function exists(cwd, rel) {
|
|
32190
32542
|
try {
|
|
32191
|
-
return
|
|
32543
|
+
return fs20__namespace.default.existsSync(path12__default.default.join(cwd, rel));
|
|
32192
32544
|
} catch {
|
|
32193
32545
|
return false;
|
|
32194
32546
|
}
|
|
@@ -32245,46 +32597,47 @@ function findHostNoindex(cwd, urlPath) {
|
|
|
32245
32597
|
if (vercel && vercelJsonNoindex(vercel, urlPath)) return "vercel.json";
|
|
32246
32598
|
return null;
|
|
32247
32599
|
}
|
|
32600
|
+
function readGraph(cwd, rel) {
|
|
32601
|
+
return exists(cwd, rel) ? readWithImports(cwd, rel, { maxDepth: 3, maxFiles: 60 }) : "";
|
|
32602
|
+
}
|
|
32248
32603
|
var LINK_DISCOVERY_LINE = /^.*\bLink\b.*(llms[^\n]*describedby|describedby[^\n]*llms).*$/im;
|
|
32249
32604
|
function findDiscoverySource(cwd) {
|
|
32250
|
-
for (const rel of
|
|
32251
|
-
const src =
|
|
32605
|
+
for (const rel of chunkSEP5D4MI_js.findProxyFiles(cwd)) {
|
|
32606
|
+
const src = readGraph(cwd, rel);
|
|
32252
32607
|
const viaFactory = /\bcreate(Proxy|Middleware)\s*\(/.test(src) && /\bllmsDiscovery\b(?!\s*:\s*false\b)/.test(src);
|
|
32253
32608
|
if (viaFactory) return `${rel} (createProxy llmsDiscovery)`;
|
|
32254
32609
|
if (src.includes("buildAiDiscoveryHeaders")) return `${rel} (buildAiDiscoveryHeaders)`;
|
|
32255
32610
|
}
|
|
32256
|
-
|
|
32257
|
-
|
|
32258
|
-
|
|
32259
|
-
if (/\bllmsTxtDiscoveryLink\s*:(?!\s*false\b)/.test(src)) return `${
|
|
32260
|
-
if (src.includes("buildAiDiscoveryHeaders")) return `${
|
|
32261
|
-
break;
|
|
32262
|
-
}
|
|
32263
|
-
const layout = chunkP4TB4ROG_js.findRootLayout(cwd);
|
|
32264
|
-
if (layout) {
|
|
32265
|
-
const src = read(cwd, path12__default.default.relative(cwd, layout));
|
|
32266
|
-
if (src.includes("buildAiDiscoveryHeaders") || src.includes("llmsTxtDiscoveryLink")) {
|
|
32267
|
-
return path12__default.default.relative(cwd, layout);
|
|
32268
|
-
}
|
|
32611
|
+
const nextConfig = chunkSEP5D4MI_js.findNextConfig(cwd);
|
|
32612
|
+
if (nextConfig) {
|
|
32613
|
+
const src = read(cwd, nextConfig);
|
|
32614
|
+
if (/\bllmsTxtDiscoveryLink\s*:(?!\s*false\b)/.test(src)) return `${nextConfig} (llmsTxtDiscoveryLink)`;
|
|
32615
|
+
if (src.includes("buildAiDiscoveryHeaders")) return `${nextConfig} (buildAiDiscoveryHeaders)`;
|
|
32269
32616
|
}
|
|
32270
32617
|
for (const rel of ["netlify.toml", "public/_headers"]) {
|
|
32271
32618
|
if (LINK_DISCOVERY_LINE.test(read(cwd, rel))) return rel;
|
|
32272
32619
|
}
|
|
32273
32620
|
return null;
|
|
32274
32621
|
}
|
|
32622
|
+
function findLayoutHeadersAttempt(cwd) {
|
|
32623
|
+
const layout = chunkSEP5D4MI_js.findRootLayout(cwd);
|
|
32624
|
+
if (!layout) return null;
|
|
32625
|
+
const src = read(cwd, path12__default.default.relative(cwd, layout));
|
|
32626
|
+
return src.includes("buildAiDiscoveryHeaders") || /\bexport\s+(async\s+)?function\s+headers\b/.test(src) ? path12__default.default.relative(cwd, layout) : null;
|
|
32627
|
+
}
|
|
32275
32628
|
function readGeoWiring(cwd) {
|
|
32276
|
-
const appDir =
|
|
32277
|
-
const sitemap =
|
|
32278
|
-
const sitemapSrc = sitemap ?
|
|
32629
|
+
const appDir = chunkSEP5D4MI_js.NEXT_APP_DIRS.find((rel) => exists(cwd, rel)) ?? null;
|
|
32630
|
+
const sitemap = chunkSEP5D4MI_js.findSitemapRoute(cwd);
|
|
32631
|
+
const sitemapSrc = sitemap ? readGraph(cwd, sitemap) : "";
|
|
32279
32632
|
const sitemapListsLlms = /\bincludeLlms(Full)?TxtInSitemap\s*:\s*true\b/.test(sitemapSrc) || /['"`/]llms(-full)?\.txt['"`]/.test(sitemapSrc);
|
|
32280
32633
|
const sitemapWritesStatic = /\bcreateSitemap\s*\(/.test(sitemapSrc);
|
|
32281
32634
|
const writesLlms = sitemapWritesStatic && !/\boptimizedLLMsTxt\s*:\s*false\b/.test(sitemapSrc);
|
|
32282
32635
|
const writesLlmsFull = writesLlms && /\boptimizedLLMsFullTxt\s*:\s*true\b/.test(sitemapSrc);
|
|
32283
32636
|
const llms = LLMS_FILES.map(({ path: urlPath, handler }) => {
|
|
32284
32637
|
const file = urlPath.slice(1);
|
|
32285
|
-
const routeAbs = appDir ?
|
|
32638
|
+
const routeAbs = appDir ? chunkSEP5D4MI_js.findConventionFile(path12__default.default.join(cwd, appDir, file), "route") : null;
|
|
32286
32639
|
const route = routeAbs ? path12__default.default.relative(cwd, routeAbs) : null;
|
|
32287
|
-
const routeSrc = route ?
|
|
32640
|
+
const routeSrc = route ? readGraph(cwd, route) : "";
|
|
32288
32641
|
const publicFile = exists(cwd, path12__default.default.join("public", file));
|
|
32289
32642
|
const built = urlPath === "/llms.txt" ? writesLlms : writesLlmsFull;
|
|
32290
32643
|
return {
|
|
@@ -32298,7 +32651,15 @@ function readGeoWiring(cwd) {
|
|
|
32298
32651
|
hostNoindex: findHostNoindex(cwd, urlPath)
|
|
32299
32652
|
};
|
|
32300
32653
|
});
|
|
32301
|
-
|
|
32654
|
+
const discovery = findDiscoverySource(cwd);
|
|
32655
|
+
return {
|
|
32656
|
+
appDir,
|
|
32657
|
+
llms,
|
|
32658
|
+
sitemap,
|
|
32659
|
+
sitemapListsLlms,
|
|
32660
|
+
discovery,
|
|
32661
|
+
layoutHeadersAttempt: discovery ? null : findLayoutHeadersAttempt(cwd)
|
|
32662
|
+
};
|
|
32302
32663
|
}
|
|
32303
32664
|
var DISCOVERY_FIX = "Add llmsDiscovery to the proxy: createProxy({ llmsDiscovery: { siteUrl } }) in proxy.ts. Or withSiteKitConfig({ llmsTxtDiscoveryLink: true }) in next.config.";
|
|
32304
32665
|
var SITEMAP_FIX = "Drop includeLlmsTxtInSitemap / includeLlmsFullTxtInSitemap (and any hand-added /llms*.txt entry) from the sitemap. A sitemap lists indexable HTML pages; AI crawlers find llms.txt at /llms.txt.";
|
|
@@ -32339,7 +32700,7 @@ function judgeGeoWiring(facts) {
|
|
|
32339
32700
|
id: "geo.discovery",
|
|
32340
32701
|
label: 'discovery header (Link rel="describedby")',
|
|
32341
32702
|
level: "fail",
|
|
32342
|
-
detail: "not wired in proxy, next.config,
|
|
32703
|
+
detail: facts.layoutHeadersAttempt ? `${facts.layoutHeadersAttempt} exports headers(), which is a next.config API: from a layout it's never called and sends nothing` : "not wired in proxy, next.config, or host config",
|
|
32343
32704
|
fix: DISCOVERY_FIX
|
|
32344
32705
|
}
|
|
32345
32706
|
);
|
|
@@ -32398,7 +32759,7 @@ async function ensureLlmsRouteFiles(appDir, dryRun) {
|
|
|
32398
32759
|
["llms.txt", LLMS_ROUTE],
|
|
32399
32760
|
["llms-full.txt", LLMS_FULL_ROUTE]
|
|
32400
32761
|
]) {
|
|
32401
|
-
if (
|
|
32762
|
+
if (chunkSEP5D4MI_js.findConventionFile(path12__default.default.join(appDir, dir), "route")) continue;
|
|
32402
32763
|
const file = path12__default.default.join(appDir, dir, "route.ts");
|
|
32403
32764
|
await fs3__default.default.mkdir(path12__default.default.dirname(file), { recursive: true });
|
|
32404
32765
|
await fs3__default.default.writeFile(file, source, "utf-8");
|
|
@@ -32408,7 +32769,7 @@ async function ensureLlmsRouteFiles(appDir, dryRun) {
|
|
|
32408
32769
|
}
|
|
32409
32770
|
async function geoCommand(options) {
|
|
32410
32771
|
if (options.forInstall) {
|
|
32411
|
-
const appDir2 =
|
|
32772
|
+
const appDir2 = chunkSEP5D4MI_js.findAppDirForDiscovery();
|
|
32412
32773
|
if (!appDir2) return;
|
|
32413
32774
|
const created = await ensureLlmsRouteFiles(appDir2, options.dryRun);
|
|
32414
32775
|
if (created > 0) {
|
|
@@ -32429,7 +32790,7 @@ async function geoCommand(options) {
|
|
|
32429
32790
|
)
|
|
32430
32791
|
);
|
|
32431
32792
|
console.log("");
|
|
32432
|
-
const appDir =
|
|
32793
|
+
const appDir = chunkSEP5D4MI_js.findAppDirForDiscovery();
|
|
32433
32794
|
if (!appDir) {
|
|
32434
32795
|
console.log(source_default.red(" \u2717 No app directory (app/ or src/app/)"));
|
|
32435
32796
|
process.exit(1);
|
|
@@ -32490,7 +32851,7 @@ async function geoCommand(options) {
|
|
|
32490
32851
|
(0, import_dotenv2.config)({ path: ".env.local", quiet: true });
|
|
32491
32852
|
(0, import_dotenv2.config)({ path: ".env", quiet: true });
|
|
32492
32853
|
var program2 = new Command();
|
|
32493
|
-
program2.name("sonor-setup").description("Setup + verification toolchain for @sonordev/site-kit").version(
|
|
32854
|
+
program2.name("sonor-setup").description("Setup + verification toolchain for @sonordev/site-kit").version(chunkNG2TTI7D_js.SITE_KIT_VERSION);
|
|
32494
32855
|
withAgentFlags(
|
|
32495
32856
|
program2.command("verify").description("Verify the integration actually works (health + key + SSR) \u2014 exit 0 = done").option("--url <url>", "Verify a running/deployed URL server-renders (recommended for agents)").option("--offline", "Skip the network key-validity ping").option("--strict", "Treat warnings as failures")
|
|
32496
32857
|
).action(verifyCommand);
|
|
@@ -32541,4 +32902,3 @@ program2.command("geo").description("Check llms.txt / GEO wiring (routes, sitema
|
|
|
32541
32902
|
}
|
|
32542
32903
|
program2.parse();
|
|
32543
32904
|
//# sourceMappingURL=index.js.map
|
|
32544
|
-
//# sourceMappingURL=index.js.map
|