@sonordev/site-kit 5.6.0 → 5.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-manifest.json +11 -3
- package/dist/AnalyticsProvider-EWF7JN2X.mjs +11 -0
- package/dist/{AnalyticsProvider-FVQIYSLY.mjs.map → AnalyticsProvider-EWF7JN2X.mjs.map} +1 -1
- package/dist/AnalyticsProvider-GJFG7YXA.js +32 -0
- package/dist/{AnalyticsProvider-6PXC7UDP.js.map → AnalyticsProvider-GJFG7YXA.js.map} +1 -1
- package/dist/{BlogViewTracker-S4HSRCW7.js → BlogViewTracker-2D3IJPJK.js} +6 -6
- package/dist/{BlogViewTracker-S4HSRCW7.js.map → BlogViewTracker-2D3IJPJK.js.map} +1 -1
- package/dist/{BlogViewTracker-ZUGLBOVI.mjs → BlogViewTracker-CKYG6MYU.mjs} +5 -5
- package/dist/{BlogViewTracker-ZUGLBOVI.mjs.map → BlogViewTracker-CKYG6MYU.mjs.map} +1 -1
- package/dist/ChatWidget-AWP6GBVW.js +22 -0
- package/dist/{ChatWidget-2TQWCXWP.js.map → ChatWidget-AWP6GBVW.js.map} +1 -1
- package/dist/ChatWidget-Z5QXDZP3.mjs +13 -0
- package/dist/{ChatWidget-DG52ZIE6.mjs.map → ChatWidget-Z5QXDZP3.mjs.map} +1 -1
- package/dist/EngageWidget-BKEY5TPO.mjs +12 -0
- package/dist/{EngageWidget-2VUJADIU.mjs.map → EngageWidget-BKEY5TPO.mjs.map} +1 -1
- package/dist/EngageWidget-VT4DYXVO.js +21 -0
- package/dist/{EngageWidget-Z7RC2INM.js.map → EngageWidget-VT4DYXVO.js.map} +1 -1
- package/dist/{FileField-UOQHL25J.js → FileField-62ZWZMQK.js} +6 -6
- package/dist/{FileField-UOQHL25J.js.map → FileField-62ZWZMQK.js.map} +1 -1
- package/dist/{FileField-FSQ7W3A5.mjs → FileField-JJN5QKDL.mjs} +5 -5
- package/dist/{FileField-FSQ7W3A5.mjs.map → FileField-JJN5QKDL.mjs.map} +1 -1
- package/dist/{FormSpotlight-RHL5FWM2.mjs → FormSpotlight-OTFB6QM5.mjs} +3 -3
- package/dist/{FormSpotlight-RHL5FWM2.mjs.map → FormSpotlight-OTFB6QM5.mjs.map} +1 -1
- package/dist/{FormSpotlight-TED32NHP.js → FormSpotlight-URS4XRS7.js} +15 -15
- package/dist/{FormSpotlight-TED32NHP.js.map → FormSpotlight-URS4XRS7.js.map} +1 -1
- package/dist/{FormStage-PFEBKHGY.js → FormStage-FVKMIV73.js} +13 -13
- package/dist/{FormStage-PFEBKHGY.js.map → FormStage-FVKMIV73.js.map} +1 -1
- package/dist/{FormStage-DINIRFOX.mjs → FormStage-VPGOCMAV.mjs} +3 -3
- package/dist/{FormStage-DINIRFOX.mjs.map → FormStage-VPGOCMAV.mjs.map} +1 -1
- package/dist/ManagedForm-CXVDJMHN.mjs +14 -0
- package/dist/{ManagedForm-545YAUFC.mjs.map → ManagedForm-CXVDJMHN.mjs.map} +1 -1
- package/dist/ManagedForm-FGNTDGED.js +23 -0
- package/dist/{ManagedForm-43WLCUAK.js.map → ManagedForm-FGNTDGED.js.map} +1 -1
- package/dist/{ManagedNewsletterForm-I3QN57HB.js → ManagedNewsletterForm-3O5L44AZ.js} +8 -8
- package/dist/{ManagedNewsletterForm-I3QN57HB.js.map → ManagedNewsletterForm-3O5L44AZ.js.map} +1 -1
- package/dist/{ManagedNewsletterForm-ZPY5RRKX.mjs → ManagedNewsletterForm-SQYB4BZU.mjs} +7 -7
- package/dist/{ManagedNewsletterForm-ZPY5RRKX.mjs.map → ManagedNewsletterForm-SQYB4BZU.mjs.map} +1 -1
- package/dist/{SignalCore-EEH5IM4U.mjs → SignalCore-M2PKKIGH.mjs} +5 -5
- package/dist/{SignalCore-EEH5IM4U.mjs.map → SignalCore-M2PKKIGH.mjs.map} +1 -1
- package/dist/{SignalCore-M4AXIMV4.js → SignalCore-RFBOBNLQ.js} +11 -11
- package/dist/{SignalCore-M4AXIMV4.js.map → SignalCore-RFBOBNLQ.js.map} +1 -1
- package/dist/SitemapSync-4OVMIIGC.mjs +9 -0
- package/dist/{SitemapSync-46G7LVZS.mjs.map → SitemapSync-4OVMIIGC.mjs.map} +1 -1
- package/dist/SitemapSync-RK3SQ4M2.js +18 -0
- package/dist/{SitemapSync-XK4JKCS7.js.map → SitemapSync-RK3SQ4M2.js.map} +1 -1
- package/dist/analytics/index.js +9 -9
- package/dist/analytics/index.mjs +4 -4
- package/dist/blog/index.js +20 -20
- package/dist/blog/index.mjs +3 -3
- package/dist/blog/metadata-images.test.d.ts +2 -0
- package/dist/blog/metadata-images.test.d.ts.map +1 -0
- package/dist/blog/server-core.d.ts +31 -6
- package/dist/blog/server-core.d.ts.map +1 -1
- package/dist/blog/server-ui.js +16 -16
- package/dist/blog/server-ui.mjs +3 -3
- package/dist/blog/server.d.ts +31 -6
- package/dist/blog/server.d.ts.map +1 -1
- package/dist/blog/server.js +40 -40
- package/dist/blog/server.mjs +1 -1
- package/dist/blog/static-params.test.d.ts +2 -0
- package/dist/blog/static-params.test.d.ts.map +1 -0
- package/dist/{chunk-XR32C47O.js → chunk-2N27LCZH.js} +5 -5
- package/dist/{chunk-XR32C47O.js.map → chunk-2N27LCZH.js.map} +1 -1
- package/dist/{chunk-GPLCPMVD.mjs → chunk-3CLP35TT.mjs} +7 -7
- package/dist/{chunk-GPLCPMVD.mjs.map → chunk-3CLP35TT.mjs.map} +1 -1
- package/dist/{chunk-S4RC6VAQ.js → chunk-3S5JN6KL.js} +6 -6
- package/dist/{chunk-S4RC6VAQ.js.map → chunk-3S5JN6KL.js.map} +1 -1
- package/dist/chunk-3UC6JETG.js +32 -0
- package/dist/chunk-3UC6JETG.js.map +1 -0
- package/dist/{chunk-B64AZC6P.js → chunk-3YQILJKJ.js} +14 -14
- package/dist/{chunk-B64AZC6P.js.map → chunk-3YQILJKJ.js.map} +1 -1
- package/dist/{chunk-7C7XO5HX.mjs → chunk-47XQWV4S.mjs} +3 -3
- package/dist/{chunk-7C7XO5HX.mjs.map → chunk-47XQWV4S.mjs.map} +1 -1
- package/dist/{chunk-CQS5ZYI6.mjs → chunk-4A5V73SR.mjs} +8 -8
- package/dist/{chunk-CQS5ZYI6.mjs.map → chunk-4A5V73SR.mjs.map} +1 -1
- package/dist/{chunk-53KMRZT7.js → chunk-4UVM7E2W.js} +3 -3
- package/dist/{chunk-53KMRZT7.js.map → chunk-4UVM7E2W.js.map} +1 -1
- package/dist/{chunk-YYN4YZYZ.js → chunk-4WBTM6YE.js} +4 -4
- package/dist/{chunk-YYN4YZYZ.js.map → chunk-4WBTM6YE.js.map} +1 -1
- package/dist/{chunk-VHZ4LHQT.mjs → chunk-57AFHENV.mjs} +3 -3
- package/dist/{chunk-VHZ4LHQT.mjs.map → chunk-57AFHENV.mjs.map} +1 -1
- package/dist/chunk-5TXXTYXL.js +8 -0
- package/dist/{chunk-KSL3WA2I.js.map → chunk-5TXXTYXL.js.map} +1 -1
- package/dist/{chunk-RU54J2PY.mjs → chunk-6FC5Q4KU.mjs} +3 -3
- package/dist/{chunk-RU54J2PY.mjs.map → chunk-6FC5Q4KU.mjs.map} +1 -1
- package/dist/{chunk-AHZR4VGY.mjs → chunk-7ZX6TO6C.mjs} +4 -4
- package/dist/{chunk-AHZR4VGY.mjs.map → chunk-7ZX6TO6C.mjs.map} +1 -1
- package/dist/{chunk-K2V3ZW36.mjs → chunk-ABZGEHTC.mjs} +3 -3
- package/dist/{chunk-K2V3ZW36.mjs.map → chunk-ABZGEHTC.mjs.map} +1 -1
- package/dist/chunk-AWK57R5S.mjs +29 -0
- package/dist/chunk-AWK57R5S.mjs.map +1 -0
- package/dist/{chunk-EEQYKMGH.mjs → chunk-BFJOZ3MU.mjs} +23 -17
- package/dist/chunk-BFJOZ3MU.mjs.map +1 -0
- package/dist/{chunk-KY6M76JW.js → chunk-BFM5PEFV.js} +3 -3
- package/dist/{chunk-KY6M76JW.js.map → chunk-BFM5PEFV.js.map} +1 -1
- package/dist/{chunk-JNABXCLY.mjs → chunk-BQGEVMIR.mjs} +4 -4
- package/dist/{chunk-JNABXCLY.mjs.map → chunk-BQGEVMIR.mjs.map} +1 -1
- package/dist/{chunk-5KIEZHVK.mjs → chunk-BUJWXSYZ.mjs} +4 -4
- package/dist/{chunk-5KIEZHVK.mjs.map → chunk-BUJWXSYZ.mjs.map} +1 -1
- package/dist/{chunk-B6O7D5U4.js → chunk-C4PZ2R3B.js} +10 -10
- package/dist/{chunk-B6O7D5U4.js.map → chunk-C4PZ2R3B.js.map} +1 -1
- package/dist/{chunk-5UFDHGFE.mjs → chunk-C563AHZZ.mjs} +3 -3
- package/dist/{chunk-5UFDHGFE.mjs.map → chunk-C563AHZZ.mjs.map} +1 -1
- package/dist/{chunk-746RKQHA.js → chunk-CPY74A4F.js} +23 -17
- package/dist/chunk-CPY74A4F.js.map +1 -0
- package/dist/{chunk-N2PGTPWN.js → chunk-D553G64G.js} +11 -11
- package/dist/{chunk-N2PGTPWN.js.map → chunk-D553G64G.js.map} +1 -1
- package/dist/{chunk-KPKQKFT4.js → chunk-DOB37PV4.js} +3 -3
- package/dist/{chunk-KPKQKFT4.js.map → chunk-DOB37PV4.js.map} +1 -1
- package/dist/{chunk-H3D3ZGOJ.js → chunk-ELQ4SRRR.js} +15 -15
- package/dist/{chunk-H3D3ZGOJ.js.map → chunk-ELQ4SRRR.js.map} +1 -1
- package/dist/{chunk-X5TCH7VZ.js → chunk-F3AKYZOH.js} +3 -3
- package/dist/{chunk-X5TCH7VZ.js.map → chunk-F3AKYZOH.js.map} +1 -1
- package/dist/{chunk-LCSYJXIO.mjs → chunk-FBDHKYNF.mjs} +3 -3
- package/dist/{chunk-LCSYJXIO.mjs.map → chunk-FBDHKYNF.mjs.map} +1 -1
- package/dist/{chunk-JE5DWAE6.js → chunk-FEWWGEQF.js} +4 -4
- package/dist/{chunk-JE5DWAE6.js.map → chunk-FEWWGEQF.js.map} +1 -1
- package/dist/{chunk-NZSFOZJV.js → chunk-FO4KGPGF.js} +2 -2
- package/dist/{chunk-NZSFOZJV.js.map → chunk-FO4KGPGF.js.map} +1 -1
- package/dist/{chunk-OC7AO7XS.js → chunk-H65OX263.js} +15 -15
- package/dist/{chunk-OC7AO7XS.js.map → chunk-H65OX263.js.map} +1 -1
- package/dist/{chunk-46BMNWE6.js → chunk-H6YVT3BL.js} +2 -2
- package/dist/{chunk-46BMNWE6.js.map → chunk-H6YVT3BL.js.map} +1 -1
- package/dist/{chunk-GJ6NOLGC.mjs → chunk-HBN4A2N4.mjs} +3 -3
- package/dist/{chunk-GJ6NOLGC.mjs.map → chunk-HBN4A2N4.mjs.map} +1 -1
- package/dist/{chunk-AJQI3WTN.mjs → chunk-ILNCUSXW.mjs} +2 -2
- package/dist/{chunk-AJQI3WTN.mjs.map → chunk-ILNCUSXW.mjs.map} +1 -1
- package/dist/{chunk-473WDGQZ.mjs → chunk-JNAXDFC4.mjs} +3 -3
- package/dist/{chunk-473WDGQZ.mjs.map → chunk-JNAXDFC4.mjs.map} +1 -1
- package/dist/{chunk-7AUDKXY5.mjs → chunk-JQ7M6CVL.mjs} +3 -3
- package/dist/{chunk-7AUDKXY5.mjs.map → chunk-JQ7M6CVL.mjs.map} +1 -1
- package/dist/{chunk-BZLIOT7Q.js → chunk-JTCQJKJE.js} +18 -18
- package/dist/{chunk-BZLIOT7Q.js.map → chunk-JTCQJKJE.js.map} +1 -1
- package/dist/{chunk-OA7KKOAK.mjs → chunk-JTF4DFUF.mjs} +3 -3
- package/dist/{chunk-OA7KKOAK.mjs.map → chunk-JTF4DFUF.mjs.map} +1 -1
- package/dist/{chunk-5KIO6FXE.js → chunk-KXGD4E7G.js} +5 -5
- package/dist/{chunk-5KIO6FXE.js.map → chunk-KXGD4E7G.js.map} +1 -1
- package/dist/chunk-L4V6TKMJ.mjs +94 -0
- package/dist/chunk-L4V6TKMJ.mjs.map +1 -0
- package/dist/{chunk-DHIWR7CG.js → chunk-L7ACQ6PC.js} +4 -4
- package/dist/{chunk-DHIWR7CG.js.map → chunk-L7ACQ6PC.js.map} +1 -1
- package/dist/{chunk-RIYAMYLV.mjs → chunk-M5GY2AI3.mjs} +3 -3
- package/dist/{chunk-RIYAMYLV.mjs.map → chunk-M5GY2AI3.mjs.map} +1 -1
- package/dist/{chunk-YCI36ZUS.mjs → chunk-MW2M6O7A.mjs} +4 -4
- package/dist/{chunk-YCI36ZUS.mjs.map → chunk-MW2M6O7A.mjs.map} +1 -1
- package/dist/{chunk-BWSMUSDB.js → chunk-NOU3JQJK.js} +8 -8
- package/dist/{chunk-BWSMUSDB.js.map → chunk-NOU3JQJK.js.map} +1 -1
- package/dist/{chunk-IYCLN3XS.mjs → chunk-O2VJZOR2.mjs} +3 -3
- package/dist/{chunk-IYCLN3XS.mjs.map → chunk-O2VJZOR2.mjs.map} +1 -1
- package/dist/{chunk-T5VTQUNF.js → chunk-OYOO2OO5.js} +8 -8
- package/dist/{chunk-T5VTQUNF.js.map → chunk-OYOO2OO5.js.map} +1 -1
- package/dist/chunk-P4TB4ROG.js +110 -0
- package/dist/chunk-P4TB4ROG.js.map +1 -0
- package/dist/{chunk-6OP5XSMM.mjs → chunk-Q7347KP6.mjs} +3 -3
- package/dist/{chunk-6OP5XSMM.mjs.map → chunk-Q7347KP6.mjs.map} +1 -1
- package/dist/chunk-QRBPT6Z6.mjs +6 -0
- package/dist/{chunk-DQUBETXH.mjs.map → chunk-QRBPT6Z6.mjs.map} +1 -1
- package/dist/{chunk-USKIL6V6.mjs → chunk-R2SXXFXZ.mjs} +3 -3
- package/dist/{chunk-USKIL6V6.mjs.map → chunk-R2SXXFXZ.mjs.map} +1 -1
- package/dist/{chunk-UU47DGHE.js → chunk-RCSTDJUH.js} +5 -5
- package/dist/{chunk-UU47DGHE.js.map → chunk-RCSTDJUH.js.map} +1 -1
- package/dist/{chunk-SYGGZZMU.js → chunk-RNAGCAIB.js} +7 -7
- package/dist/{chunk-SYGGZZMU.js.map → chunk-RNAGCAIB.js.map} +1 -1
- package/dist/{chunk-AEARU24Q.mjs → chunk-RVRN5U7W.mjs} +2 -2
- package/dist/{chunk-AEARU24Q.mjs.map → chunk-RVRN5U7W.mjs.map} +1 -1
- package/dist/{chunk-C2MSD2UM.mjs → chunk-TDJKGN5Q.mjs} +4 -4
- package/dist/{chunk-C2MSD2UM.mjs.map → chunk-TDJKGN5Q.mjs.map} +1 -1
- package/dist/{chunk-R3KTBKSW.js → chunk-TSZIACRC.js} +4 -4
- package/dist/{chunk-R3KTBKSW.js.map → chunk-TSZIACRC.js.map} +1 -1
- package/dist/{chunk-H44XZUOV.mjs → chunk-UQ5YULFU.mjs} +4 -4
- package/dist/{chunk-H44XZUOV.mjs.map → chunk-UQ5YULFU.mjs.map} +1 -1
- package/dist/{chunk-QNPVVWR7.mjs → chunk-V5THCFPG.mjs} +3 -3
- package/dist/{chunk-QNPVVWR7.mjs.map → chunk-V5THCFPG.mjs.map} +1 -1
- package/dist/{chunk-CQRLKNHQ.js → chunk-VFGEY6FJ.js} +12 -12
- package/dist/{chunk-CQRLKNHQ.js.map → chunk-VFGEY6FJ.js.map} +1 -1
- package/dist/{chunk-HIHAXEPD.mjs → chunk-XLPU3TEE.mjs} +4 -4
- package/dist/{chunk-HIHAXEPD.mjs.map → chunk-XLPU3TEE.mjs.map} +1 -1
- package/dist/{chunk-AY7JBGYC.js → chunk-YKUEFRZI.js} +14 -14
- package/dist/{chunk-AY7JBGYC.js.map → chunk-YKUEFRZI.js.map} +1 -1
- package/dist/{chunk-XK5AIWQG.js → chunk-YYDZ2TYR.js} +3 -3
- package/dist/{chunk-XK5AIWQG.js.map → chunk-YYDZ2TYR.js.map} +1 -1
- package/dist/cli/agent/checks.d.ts.map +1 -1
- package/dist/cli/commands/api-routes.d.ts.map +1 -1
- package/dist/cli/commands/geo.d.ts +4 -0
- package/dist/cli/commands/geo.d.ts.map +1 -1
- package/dist/cli/commands/geo.test.d.ts +2 -0
- package/dist/cli/commands/geo.test.d.ts.map +1 -0
- package/dist/cli/commands/og.d.ts +10 -1
- package/dist/cli/commands/og.d.ts.map +1 -1
- package/dist/cli/commands/scaffold.d.ts +1 -2
- package/dist/cli/commands/scaffold.d.ts.map +1 -1
- package/dist/cli/commands/sync.d.ts.map +1 -1
- package/dist/cli/generators/index.d.ts +5 -0
- package/dist/cli/generators/index.d.ts.map +1 -1
- package/dist/cli/generators/index.test.d.ts +2 -0
- package/dist/cli/generators/index.test.d.ts.map +1 -0
- package/dist/cli/index.js +360 -266
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +356 -262
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/index.js +4 -4
- package/dist/client/index.mjs +3 -3
- package/dist/commerce/index.js +56 -56
- package/dist/commerce/index.mjs +5 -5
- package/dist/discover-FGTKWOL3.mjs +4 -0
- package/dist/{discover-BEJRYNFF.mjs.map → discover-FGTKWOL3.mjs.map} +1 -1
- package/dist/discover-NJZPWTDL.js +21 -0
- package/dist/{discover-WVDYDUJX.js.map → discover-NJZPWTDL.js.map} +1 -1
- package/dist/engage/index.js +10 -10
- package/dist/engage/index.mjs +7 -7
- package/dist/fleet/index.js +8 -8
- package/dist/fleet/index.mjs +4 -4
- package/dist/forms/index.js +16 -16
- package/dist/forms/index.mjs +9 -9
- package/dist/forms/server.js +10 -10
- package/dist/forms/server.mjs +8 -8
- package/dist/forms/static.js +7 -7
- package/dist/forms/static.mjs +6 -6
- package/dist/images/index.js +11 -11
- package/dist/images/index.mjs +4 -4
- package/dist/index.js +68 -68
- package/dist/index.mjs +10 -10
- package/dist/layout/client.js +8 -8
- package/dist/layout/client.mjs +7 -7
- package/dist/layout/index.js +10 -10
- package/dist/layout/index.mjs +8 -8
- package/dist/llms/aiRobots.d.ts +4 -1
- package/dist/llms/aiRobots.d.ts.map +1 -1
- package/dist/llms/handlers.d.ts +20 -2
- package/dist/llms/handlers.d.ts.map +1 -1
- package/dist/llms/index.js +25 -18
- package/dist/llms/index.js.map +1 -1
- package/dist/llms/index.mjs +15 -8
- package/dist/llms/index.mjs.map +1 -1
- package/dist/llms/wiring.d.ts +81 -0
- package/dist/llms/wiring.d.ts.map +1 -0
- package/dist/llms/wiring.test.d.ts +2 -0
- package/dist/llms/wiring.test.d.ts.map +1 -0
- package/dist/maps/index.js +5 -5
- package/dist/maps/index.mjs +3 -3
- package/dist/og/wiring.d.ts +5 -1
- package/dist/og/wiring.d.ts.map +1 -1
- package/dist/proxy/index.d.ts +16 -11
- package/dist/proxy/index.d.ts.map +1 -1
- package/dist/proxy/index.js +3 -3
- package/dist/proxy/index.js.map +1 -1
- package/dist/proxy/index.mjs +1 -1
- package/dist/proxy/index.mjs.map +1 -1
- package/dist/redirects/index.d.ts +1 -1
- package/dist/redirects/index.js +8 -8
- package/dist/redirects/index.mjs +1 -1
- package/dist/redirects/not-found.d.ts +14 -29
- package/dist/redirects/not-found.d.ts.map +1 -1
- package/dist/redirects/not-found.js +12 -5
- package/dist/redirects/not-found.js.map +1 -1
- package/dist/redirects/not-found.mjs +8 -1
- package/dist/redirects/not-found.mjs.map +1 -1
- package/dist/robots/index.d.ts +5 -1
- package/dist/robots/index.d.ts.map +1 -1
- package/dist/robots/index.js +7 -1
- package/dist/robots/index.js.map +1 -1
- package/dist/robots/index.mjs +4 -1
- package/dist/robots/index.mjs.map +1 -1
- package/dist/robots/index.test.d.ts +2 -0
- package/dist/robots/index.test.d.ts.map +1 -0
- package/dist/robots/next-internals.d.ts +22 -0
- package/dist/robots/next-internals.d.ts.map +1 -0
- package/dist/search/index.js +4 -4
- package/dist/search/index.mjs +3 -3
- package/dist/seo/client.js +5 -5
- package/dist/seo/client.mjs +4 -4
- package/dist/seo/index.js +14 -14
- package/dist/seo/index.mjs +6 -6
- package/dist/seo/register-sitemap-cli.js +4 -4
- package/dist/seo/register-sitemap-cli.mjs +1 -1
- package/dist/seo/server.js +5 -5
- package/dist/seo/server.mjs +1 -1
- package/dist/server/index.js +3 -3
- package/dist/server/index.mjs +2 -2
- package/dist/shared/next-files.d.ts +35 -0
- package/dist/shared/next-files.d.ts.map +1 -0
- package/dist/shared/next-files.test.d.ts +2 -0
- package/dist/shared/next-files.test.d.ts.map +1 -0
- package/dist/shared/version.d.ts +1 -1
- package/dist/signal/index.js +11 -11
- package/dist/signal/index.mjs +2 -2
- package/dist/sitemap/discover.d.ts.map +1 -1
- package/dist/sitemap/index.d.ts +6 -1
- package/dist/sitemap/index.d.ts.map +1 -1
- package/dist/sitemap/index.js +5 -12
- package/dist/sitemap/index.js.map +1 -1
- package/dist/sitemap/index.mjs +4 -11
- package/dist/sitemap/index.mjs.map +1 -1
- package/dist/sync/index.js +17 -17
- package/dist/sync/index.mjs +4 -4
- package/package.json +19 -21
- package/dist/AnalyticsProvider-6PXC7UDP.js +0 -32
- package/dist/AnalyticsProvider-FVQIYSLY.mjs +0 -11
- package/dist/ChatWidget-2TQWCXWP.js +0 -22
- package/dist/ChatWidget-DG52ZIE6.mjs +0 -13
- package/dist/EngageWidget-2VUJADIU.mjs +0 -12
- package/dist/EngageWidget-Z7RC2INM.js +0 -21
- package/dist/ManagedForm-43WLCUAK.js +0 -23
- package/dist/ManagedForm-545YAUFC.mjs +0 -14
- package/dist/SitemapSync-46G7LVZS.mjs +0 -9
- package/dist/SitemapSync-XK4JKCS7.js +0 -18
- package/dist/chunk-746RKQHA.js.map +0 -1
- package/dist/chunk-DQUBETXH.mjs +0 -6
- package/dist/chunk-EEQYKMGH.mjs.map +0 -1
- package/dist/chunk-KSL3WA2I.js +0 -8
- package/dist/chunk-LOS5D6B3.js +0 -72
- package/dist/chunk-LOS5D6B3.js.map +0 -1
- package/dist/chunk-XIJ4F6IE.mjs +0 -63
- package/dist/chunk-XIJ4F6IE.mjs.map +0 -1
- package/dist/discover-BEJRYNFF.mjs +0 -4
- package/dist/discover-WVDYDUJX.js +0 -21
package/dist/cli/index.js
CHANGED
|
@@ -5,8 +5,8 @@ var chunkJS75ORH7_js = require('../chunk-JS75ORH7.js');
|
|
|
5
5
|
var chunkI7AZC5ZQ_js = require('../chunk-I7AZC5ZQ.js');
|
|
6
6
|
var chunk6CJP7BFM_js = require('../chunk-6CJP7BFM.js');
|
|
7
7
|
var chunkNN2YE5WT_js = require('../chunk-NN2YE5WT.js');
|
|
8
|
-
var
|
|
9
|
-
var
|
|
8
|
+
var chunkP4TB4ROG_js = require('../chunk-P4TB4ROG.js');
|
|
9
|
+
var chunk5TXXTYXL_js = require('../chunk-5TXXTYXL.js');
|
|
10
10
|
var chunkSNAQBZPT_js = require('../chunk-SNAQBZPT.js');
|
|
11
11
|
var events = require('events');
|
|
12
12
|
var childProcess = require('child_process');
|
|
@@ -6234,10 +6234,10 @@ var require_lib2 = chunkSNAQBZPT_js.__commonJS({
|
|
|
6234
6234
|
exports.analyse = analyse;
|
|
6235
6235
|
var detectFile = (filepath, opts = {}) => new Promise((resolve, reject) => {
|
|
6236
6236
|
let fd;
|
|
6237
|
-
const
|
|
6237
|
+
const fs30 = (0, node_1.default)();
|
|
6238
6238
|
const handler = (err, buffer) => {
|
|
6239
6239
|
if (fd) {
|
|
6240
|
-
|
|
6240
|
+
fs30.closeSync(fd);
|
|
6241
6241
|
}
|
|
6242
6242
|
if (err) {
|
|
6243
6243
|
reject(err);
|
|
@@ -6249,9 +6249,9 @@ var require_lib2 = chunkSNAQBZPT_js.__commonJS({
|
|
|
6249
6249
|
};
|
|
6250
6250
|
const sampleSize = (opts === null || opts === void 0 ? void 0 : opts.sampleSize) || 0;
|
|
6251
6251
|
if (sampleSize > 0) {
|
|
6252
|
-
fd =
|
|
6252
|
+
fd = fs30.openSync(filepath, "r");
|
|
6253
6253
|
let sample = Buffer.allocUnsafe(sampleSize);
|
|
6254
|
-
|
|
6254
|
+
fs30.read(fd, sample, 0, sampleSize, opts.offset, (err, bytesRead) => {
|
|
6255
6255
|
if (err) {
|
|
6256
6256
|
handler(err, null);
|
|
6257
6257
|
} else {
|
|
@@ -6263,22 +6263,22 @@ var require_lib2 = chunkSNAQBZPT_js.__commonJS({
|
|
|
6263
6263
|
});
|
|
6264
6264
|
return;
|
|
6265
6265
|
}
|
|
6266
|
-
|
|
6266
|
+
fs30.readFile(filepath, handler);
|
|
6267
6267
|
});
|
|
6268
6268
|
exports.detectFile = detectFile;
|
|
6269
6269
|
var detectFileSync = (filepath, opts = {}) => {
|
|
6270
|
-
const
|
|
6270
|
+
const fs30 = (0, node_1.default)();
|
|
6271
6271
|
if (opts && opts.sampleSize) {
|
|
6272
|
-
const fd =
|
|
6272
|
+
const fd = fs30.openSync(filepath, "r");
|
|
6273
6273
|
let sample = Buffer.allocUnsafe(opts.sampleSize);
|
|
6274
|
-
const bytesRead =
|
|
6274
|
+
const bytesRead = fs30.readSync(fd, sample, 0, opts.sampleSize, opts.offset);
|
|
6275
6275
|
if (bytesRead < opts.sampleSize) {
|
|
6276
6276
|
sample = sample.subarray(0, bytesRead);
|
|
6277
6277
|
}
|
|
6278
|
-
|
|
6278
|
+
fs30.closeSync(fd);
|
|
6279
6279
|
return (0, exports.detect)(sample);
|
|
6280
6280
|
}
|
|
6281
|
-
return (0, exports.detect)(
|
|
6281
|
+
return (0, exports.detect)(fs30.readFileSync(filepath));
|
|
6282
6282
|
};
|
|
6283
6283
|
exports.detectFileSync = detectFileSync;
|
|
6284
6284
|
exports.default = {
|
|
@@ -13268,9 +13268,9 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
13268
13268
|
* @param {string} [path]
|
|
13269
13269
|
* @return {(string|null|Command)}
|
|
13270
13270
|
*/
|
|
13271
|
-
executableDir(
|
|
13272
|
-
if (
|
|
13273
|
-
this._executableDir =
|
|
13271
|
+
executableDir(path30) {
|
|
13272
|
+
if (path30 === void 0) return this._executableDir;
|
|
13273
|
+
this._executableDir = path30;
|
|
13274
13274
|
return this;
|
|
13275
13275
|
}
|
|
13276
13276
|
/**
|
|
@@ -13543,7 +13543,7 @@ function buildEnvelope(input, nowMs = Date.now()) {
|
|
|
13543
13543
|
ok: exitCode === 0 /* OK */,
|
|
13544
13544
|
command,
|
|
13545
13545
|
schemaVersion: 1,
|
|
13546
|
-
siteKitVersion:
|
|
13546
|
+
siteKitVersion: chunk5TXXTYXL_js.SITE_KIT_VERSION,
|
|
13547
13547
|
exitCode,
|
|
13548
13548
|
status: statusForCode(exitCode),
|
|
13549
13549
|
summary,
|
|
@@ -20377,9 +20377,9 @@ function observableToAsyncIterable(source) {
|
|
|
20377
20377
|
|
|
20378
20378
|
// node_modules/.pnpm/inquirer@14.0.2_@types+node@26.2.0/node_modules/inquirer/dist/ui/prompt.js
|
|
20379
20379
|
var _ = {
|
|
20380
|
-
set: (obj,
|
|
20380
|
+
set: (obj, path30 = "", value) => {
|
|
20381
20381
|
let pointer = obj;
|
|
20382
|
-
|
|
20382
|
+
path30.split(".").forEach((key, index, arr) => {
|
|
20383
20383
|
if (key === "__proto__" || key === "constructor")
|
|
20384
20384
|
return;
|
|
20385
20385
|
if (index === arr.length - 1) {
|
|
@@ -20390,8 +20390,8 @@ var _ = {
|
|
|
20390
20390
|
pointer = pointer[key];
|
|
20391
20391
|
});
|
|
20392
20392
|
},
|
|
20393
|
-
get: (obj,
|
|
20394
|
-
const travel = (regexp) => String.prototype.split.call(
|
|
20393
|
+
get: (obj, path30 = "", defaultValue) => {
|
|
20394
|
+
const travel = (regexp) => String.prototype.split.call(path30, regexp).filter(Boolean).reduce(
|
|
20395
20395
|
// @ts-expect-error implicit any on res[key]
|
|
20396
20396
|
(res, key) => res == null ? res : res[key],
|
|
20397
20397
|
obj
|
|
@@ -20748,18 +20748,18 @@ function scanForForms(ast, content, filePath) {
|
|
|
20748
20748
|
const forms = [];
|
|
20749
20749
|
content.split("\n");
|
|
20750
20750
|
chunkJS75ORH7_js.traverse(ast, {
|
|
20751
|
-
JSXElement(
|
|
20752
|
-
const opening =
|
|
20751
|
+
JSXElement(path30) {
|
|
20752
|
+
const opening = path30.node.openingElement;
|
|
20753
20753
|
if (chunkJS75ORH7_js.isJSXIdentifier(opening.name) && opening.name.name === "form") {
|
|
20754
|
-
const fields = extractFieldsFromForm(
|
|
20754
|
+
const fields = extractFieldsFromForm(path30);
|
|
20755
20755
|
const hasOnSubmit = opening.attributes.some(
|
|
20756
20756
|
(attr) => chunkJS75ORH7_js.isJSXAttribute(attr) && chunkJS75ORH7_js.isJSXIdentifier(attr.name) && attr.name.name === "onSubmit"
|
|
20757
20757
|
);
|
|
20758
20758
|
if (hasOnSubmit && fields.length > 0) {
|
|
20759
|
-
const startLine =
|
|
20760
|
-
const endLine =
|
|
20759
|
+
const startLine = path30.node.loc?.start.line || 0;
|
|
20760
|
+
const endLine = path30.node.loc?.end.line || 0;
|
|
20761
20761
|
let componentName = "UnknownForm";
|
|
20762
|
-
let current =
|
|
20762
|
+
let current = path30.parentPath;
|
|
20763
20763
|
while (current) {
|
|
20764
20764
|
if (chunkJS75ORH7_js.isFunctionDeclaration(current.node) && current.node.id) {
|
|
20765
20765
|
componentName = current.node.id.name;
|
|
@@ -20792,7 +20792,7 @@ function scanForForms(ast, content, filePath) {
|
|
|
20792
20792
|
}
|
|
20793
20793
|
if (chunkJS75ORH7_js.isJSXIdentifier(opening.name) && opening.name.name === "Form") {
|
|
20794
20794
|
if (content.includes("Formik") || content.includes("formik")) {
|
|
20795
|
-
const fields = extractFieldsFromFormik(
|
|
20795
|
+
const fields = extractFieldsFromFormik(path30);
|
|
20796
20796
|
if (fields.length > 0) {
|
|
20797
20797
|
forms.push({
|
|
20798
20798
|
filePath,
|
|
@@ -20803,8 +20803,8 @@ function scanForForms(ast, content, filePath) {
|
|
|
20803
20803
|
submitsTo: null,
|
|
20804
20804
|
complexity: "moderate",
|
|
20805
20805
|
suggestedAction: "assisted",
|
|
20806
|
-
startLine:
|
|
20807
|
-
endLine:
|
|
20806
|
+
startLine: path30.node.loc?.start.line || 0,
|
|
20807
|
+
endLine: path30.node.loc?.end.line || 0
|
|
20808
20808
|
});
|
|
20809
20809
|
}
|
|
20810
20810
|
}
|
|
@@ -20822,8 +20822,8 @@ function extractFieldsFromForm(formPath) {
|
|
|
20822
20822
|
const radioGroups = /* @__PURE__ */ new Map();
|
|
20823
20823
|
const checkboxGroups = /* @__PURE__ */ new Map();
|
|
20824
20824
|
formPath.traverse({
|
|
20825
|
-
JSXElement(
|
|
20826
|
-
const opening =
|
|
20825
|
+
JSXElement(path30) {
|
|
20826
|
+
const opening = path30.node.openingElement;
|
|
20827
20827
|
const tagName = chunkJS75ORH7_js.isJSXIdentifier(opening.name) ? opening.name.name : null;
|
|
20828
20828
|
if (["input", "textarea", "select"].includes(tagName || "")) {
|
|
20829
20829
|
const attrs = opening.attributes;
|
|
@@ -20870,7 +20870,7 @@ function extractFieldsFromForm(formPath) {
|
|
|
20870
20870
|
}
|
|
20871
20871
|
if (tagName === "select") {
|
|
20872
20872
|
const selectOptions = [];
|
|
20873
|
-
|
|
20873
|
+
path30.traverse({
|
|
20874
20874
|
JSXElement(optionPath) {
|
|
20875
20875
|
const optOpening = optionPath.node.openingElement;
|
|
20876
20876
|
const optTagName = chunkJS75ORH7_js.isJSXIdentifier(optOpening.name) ? optOpening.name.name : null;
|
|
@@ -20945,8 +20945,8 @@ function extractFieldsFromForm(formPath) {
|
|
|
20945
20945
|
function extractFieldsFromFormik(formPath, content) {
|
|
20946
20946
|
const fields = [];
|
|
20947
20947
|
formPath.traverse({
|
|
20948
|
-
JSXElement(
|
|
20949
|
-
const opening =
|
|
20948
|
+
JSXElement(path30) {
|
|
20949
|
+
const opening = path30.node.openingElement;
|
|
20950
20950
|
const tagName = chunkJS75ORH7_js.isJSXIdentifier(opening.name) ? opening.name.name : null;
|
|
20951
20951
|
if (tagName === "Field" || tagName === "FastField") {
|
|
20952
20952
|
const attrs = opening.attributes;
|
|
@@ -21065,11 +21065,11 @@ function scanForMetadata(ast, content, filePath) {
|
|
|
21065
21065
|
}
|
|
21066
21066
|
let hasHeadComponent = false;
|
|
21067
21067
|
chunkJS75ORH7_js.traverse(ast, {
|
|
21068
|
-
JSXElement(
|
|
21069
|
-
const opening =
|
|
21068
|
+
JSXElement(path30) {
|
|
21069
|
+
const opening = path30.node.openingElement;
|
|
21070
21070
|
if (chunkJS75ORH7_js.isJSXIdentifier(opening.name) && opening.name.name === "Head") {
|
|
21071
21071
|
hasHeadComponent = true;
|
|
21072
|
-
|
|
21072
|
+
path30.stop();
|
|
21073
21073
|
}
|
|
21074
21074
|
}
|
|
21075
21075
|
});
|
|
@@ -21104,8 +21104,8 @@ function scanForWidgets(ast, content, filePath) {
|
|
|
21104
21104
|
for (const { pattern, type } of widgetPatterns) {
|
|
21105
21105
|
if (pattern.test(content)) {
|
|
21106
21106
|
chunkJS75ORH7_js.traverse(ast, {
|
|
21107
|
-
JSXElement(
|
|
21108
|
-
const opening =
|
|
21107
|
+
JSXElement(path30) {
|
|
21108
|
+
const opening = path30.node.openingElement;
|
|
21109
21109
|
if (chunkJS75ORH7_js.isJSXIdentifier(opening.name) && (opening.name.name === "script" || opening.name.name === "Script")) {
|
|
21110
21110
|
const srcAttr = opening.attributes.find(
|
|
21111
21111
|
(attr) => chunkJS75ORH7_js.isJSXAttribute(attr) && chunkJS75ORH7_js.isJSXIdentifier(attr.name) && attr.name.name === "src"
|
|
@@ -21120,8 +21120,8 @@ function scanForWidgets(ast, content, filePath) {
|
|
|
21120
21120
|
filePath,
|
|
21121
21121
|
widgetType: type,
|
|
21122
21122
|
scriptTag: src,
|
|
21123
|
-
startLine:
|
|
21124
|
-
endLine:
|
|
21123
|
+
startLine: path30.node.loc?.start.line || 0,
|
|
21124
|
+
endLine: path30.node.loc?.end.line || 0
|
|
21125
21125
|
});
|
|
21126
21126
|
}
|
|
21127
21127
|
}
|
|
@@ -21260,8 +21260,8 @@ function scanForSchemas(ast, content, filePath) {
|
|
|
21260
21260
|
return schemas;
|
|
21261
21261
|
}
|
|
21262
21262
|
chunkJS75ORH7_js.traverse(ast, {
|
|
21263
|
-
JSXElement(
|
|
21264
|
-
const opening =
|
|
21263
|
+
JSXElement(path30) {
|
|
21264
|
+
const opening = path30.node.openingElement;
|
|
21265
21265
|
if (chunkJS75ORH7_js.isJSXIdentifier(opening.name) && (opening.name.name === "script" || opening.name.name === "Script")) {
|
|
21266
21266
|
const typeAttr = opening.attributes.find(
|
|
21267
21267
|
(attr) => chunkJS75ORH7_js.isJSXAttribute(attr) && chunkJS75ORH7_js.isJSXIdentifier(attr.name) && attr.name.name === "type"
|
|
@@ -21288,8 +21288,8 @@ function scanForSchemas(ast, content, filePath) {
|
|
|
21288
21288
|
filePath,
|
|
21289
21289
|
type: detectedType,
|
|
21290
21290
|
schemaType,
|
|
21291
|
-
startLine:
|
|
21292
|
-
endLine:
|
|
21291
|
+
startLine: path30.node.loc?.start.line || 0,
|
|
21292
|
+
endLine: path30.node.loc?.end.line || 0
|
|
21293
21293
|
});
|
|
21294
21294
|
}
|
|
21295
21295
|
}
|
|
@@ -21322,8 +21322,8 @@ function scanForFAQs(ast, content, filePath) {
|
|
|
21322
21322
|
/questions?\s*(?:and|&)?\s*answers?/i
|
|
21323
21323
|
];
|
|
21324
21324
|
chunkJS75ORH7_js.traverse(ast, {
|
|
21325
|
-
JSXElement(
|
|
21326
|
-
const opening =
|
|
21325
|
+
JSXElement(path30) {
|
|
21326
|
+
const opening = path30.node.openingElement;
|
|
21327
21327
|
let tagName = "";
|
|
21328
21328
|
if (chunkJS75ORH7_js.isJSXIdentifier(opening.name)) {
|
|
21329
21329
|
tagName = opening.name.name;
|
|
@@ -21336,8 +21336,8 @@ function scanForFAQs(ast, content, filePath) {
|
|
|
21336
21336
|
faqs.push({
|
|
21337
21337
|
filePath,
|
|
21338
21338
|
type: "details-summary",
|
|
21339
|
-
startLine:
|
|
21340
|
-
endLine:
|
|
21339
|
+
startLine: path30.node.loc?.start.line || 0,
|
|
21340
|
+
endLine: path30.node.loc?.end.line || 0,
|
|
21341
21341
|
hasSchema: content.includes("FAQPage") || content.includes("application/ld+json")
|
|
21342
21342
|
});
|
|
21343
21343
|
return;
|
|
@@ -21345,7 +21345,7 @@ function scanForFAQs(ast, content, filePath) {
|
|
|
21345
21345
|
for (const pattern of faqPatterns) {
|
|
21346
21346
|
if (pattern.test(tagName)) {
|
|
21347
21347
|
let itemCount = 0;
|
|
21348
|
-
|
|
21348
|
+
path30.traverse({
|
|
21349
21349
|
JSXElement(itemPath) {
|
|
21350
21350
|
const itemOpening = itemPath.node.openingElement;
|
|
21351
21351
|
if (chunkJS75ORH7_js.isJSXIdentifier(itemOpening.name)) {
|
|
@@ -21361,8 +21361,8 @@ function scanForFAQs(ast, content, filePath) {
|
|
|
21361
21361
|
type: "accordion",
|
|
21362
21362
|
componentName: tagName,
|
|
21363
21363
|
itemCount: itemCount || void 0,
|
|
21364
|
-
startLine:
|
|
21365
|
-
endLine:
|
|
21364
|
+
startLine: path30.node.loc?.start.line || 0,
|
|
21365
|
+
endLine: path30.node.loc?.end.line || 0,
|
|
21366
21366
|
hasSchema: content.includes("FAQPage") || content.includes("application/ld+json")
|
|
21367
21367
|
});
|
|
21368
21368
|
return;
|
|
@@ -21485,8 +21485,8 @@ function scanForImages(ast, content, filePath) {
|
|
|
21485
21485
|
return images;
|
|
21486
21486
|
}
|
|
21487
21487
|
chunkJS75ORH7_js.traverse(ast, {
|
|
21488
|
-
JSXElement(
|
|
21489
|
-
const opening =
|
|
21488
|
+
JSXElement(path30) {
|
|
21489
|
+
const opening = path30.node.openingElement;
|
|
21490
21490
|
if (!chunkJS75ORH7_js.isJSXIdentifier(opening.name)) return;
|
|
21491
21491
|
const tagName = opening.name.name;
|
|
21492
21492
|
if (tagName === "img" || tagName === "Image") {
|
|
@@ -21514,8 +21514,8 @@ function scanForImages(ast, content, filePath) {
|
|
|
21514
21514
|
src: src || void 0,
|
|
21515
21515
|
alt: alt || void 0,
|
|
21516
21516
|
isLocal,
|
|
21517
|
-
startLine:
|
|
21518
|
-
endLine:
|
|
21517
|
+
startLine: path30.node.loc?.start.line || 0,
|
|
21518
|
+
endLine: path30.node.loc?.end.line || 0
|
|
21519
21519
|
});
|
|
21520
21520
|
}
|
|
21521
21521
|
}
|
|
@@ -22406,18 +22406,18 @@ async function migrateFile(filePath, options) {
|
|
|
22406
22406
|
let componentName = "Form";
|
|
22407
22407
|
const traverse2 = (await import('../lib-BGAWCSUH.js')).default;
|
|
22408
22408
|
traverse2(ast, {
|
|
22409
|
-
ExportNamedDeclaration(
|
|
22410
|
-
const decl =
|
|
22409
|
+
ExportNamedDeclaration(path30) {
|
|
22410
|
+
const decl = path30.node.declaration;
|
|
22411
22411
|
if (decl && decl.type === "FunctionDeclaration" && decl.id) {
|
|
22412
22412
|
componentName = decl.id.name;
|
|
22413
|
-
|
|
22413
|
+
path30.stop();
|
|
22414
22414
|
}
|
|
22415
22415
|
},
|
|
22416
|
-
ExportDefaultDeclaration(
|
|
22417
|
-
const decl =
|
|
22416
|
+
ExportDefaultDeclaration(path30) {
|
|
22417
|
+
const decl = path30.node.declaration;
|
|
22418
22418
|
if (decl && decl.type === "FunctionDeclaration" && decl.id) {
|
|
22419
22419
|
componentName = decl.id.name;
|
|
22420
|
-
|
|
22420
|
+
path30.stop();
|
|
22421
22421
|
}
|
|
22422
22422
|
}
|
|
22423
22423
|
});
|
|
@@ -22533,7 +22533,7 @@ function addImportSafely2(content, importStatement) {
|
|
|
22533
22533
|
async function generateLayout() {
|
|
22534
22534
|
const layoutPath = await findLayoutFile();
|
|
22535
22535
|
if (!layoutPath) {
|
|
22536
|
-
throw new Error("Could not find layout.tsx
|
|
22536
|
+
throw new Error("Could not find a root layout (app/layout.tsx, .jsx, .ts or .js)");
|
|
22537
22537
|
}
|
|
22538
22538
|
const content = await fs3__default.default.readFile(layoutPath, "utf-8");
|
|
22539
22539
|
if (content.includes("SiteKitLayout") || content.includes("SiteKitProvider")) {
|
|
@@ -22567,22 +22567,7 @@ async function generateLayout() {
|
|
|
22567
22567
|
await fs3__default.default.writeFile(layoutPath, newContent, "utf-8");
|
|
22568
22568
|
}
|
|
22569
22569
|
async function findLayoutFile() {
|
|
22570
|
-
|
|
22571
|
-
"src/app/layout.tsx",
|
|
22572
|
-
"app/layout.tsx",
|
|
22573
|
-
"src/app/layout.jsx",
|
|
22574
|
-
"app/layout.jsx"
|
|
22575
|
-
];
|
|
22576
|
-
for (const relativePath of possiblePaths) {
|
|
22577
|
-
const fullPath = path12__default.default.join(process.cwd(), relativePath);
|
|
22578
|
-
try {
|
|
22579
|
-
await fs3__default.default.access(fullPath);
|
|
22580
|
-
return fullPath;
|
|
22581
|
-
} catch {
|
|
22582
|
-
continue;
|
|
22583
|
-
}
|
|
22584
|
-
}
|
|
22585
|
-
return null;
|
|
22570
|
+
return chunkP4TB4ROG_js.findRootLayout(process.cwd());
|
|
22586
22571
|
}
|
|
22587
22572
|
var isDockerCached;
|
|
22588
22573
|
function hasDockerEnv() {
|
|
@@ -22744,15 +22729,15 @@ var wslDefaultBrowser = async () => {
|
|
|
22744
22729
|
const { stdout } = await executePowerShell(command, { powerShellPath: psPath });
|
|
22745
22730
|
return stdout.trim();
|
|
22746
22731
|
};
|
|
22747
|
-
var convertWslPathToWindows = async (
|
|
22748
|
-
if (/^[a-z]+:\/\//i.test(
|
|
22749
|
-
return
|
|
22732
|
+
var convertWslPathToWindows = async (path30) => {
|
|
22733
|
+
if (/^[a-z]+:\/\//i.test(path30)) {
|
|
22734
|
+
return path30;
|
|
22750
22735
|
}
|
|
22751
22736
|
try {
|
|
22752
|
-
const { stdout } = await execFile2("wslpath", ["-aw",
|
|
22737
|
+
const { stdout } = await execFile2("wslpath", ["-aw", path30], { encoding: "utf8" });
|
|
22753
22738
|
return stdout.trim();
|
|
22754
22739
|
} catch {
|
|
22755
|
-
return
|
|
22740
|
+
return path30;
|
|
22756
22741
|
}
|
|
22757
22742
|
};
|
|
22758
22743
|
|
|
@@ -25240,8 +25225,8 @@ async function templateCommand(sourcePath, options) {
|
|
|
25240
25225
|
const slots = [];
|
|
25241
25226
|
const componentNames = [];
|
|
25242
25227
|
chunkJS75ORH7_js.traverse(ast, {
|
|
25243
|
-
JSXElement(
|
|
25244
|
-
const openingElement =
|
|
25228
|
+
JSXElement(path30) {
|
|
25229
|
+
const openingElement = path30.node.openingElement;
|
|
25245
25230
|
if (chunkJS75ORH7_js.isJSXIdentifier(openingElement.name)) {
|
|
25246
25231
|
const componentName = openingElement.name.name;
|
|
25247
25232
|
if (componentName[0] === componentName[0].toUpperCase()) {
|
|
@@ -26365,8 +26350,7 @@ async function uploadSchemas(pages, globalSchema, config2) {
|
|
|
26365
26350
|
}
|
|
26366
26351
|
}
|
|
26367
26352
|
}
|
|
26368
|
-
var
|
|
26369
|
-
var CARD_FILE = /^(opengraph-image|twitter-image)\b.*\.(png|jpe?g|gif|webp)$/i;
|
|
26353
|
+
var CARD_FILE = /^(opengraph-image|twitter-image)\b.*\.(png|jpe?g|gif|webp|tsx|ts|jsx|js)$/i;
|
|
26370
26354
|
function safeExists(p) {
|
|
26371
26355
|
try {
|
|
26372
26356
|
return fs__namespace.default.existsSync(p);
|
|
@@ -26390,14 +26374,14 @@ function findPageCards(cwd) {
|
|
|
26390
26374
|
else if (CARD_FILE.test(entry.name)) found.push(full);
|
|
26391
26375
|
}
|
|
26392
26376
|
};
|
|
26393
|
-
for (const rel of
|
|
26377
|
+
for (const rel of chunkP4TB4ROG_js.NEXT_APP_DIRS) walk(path12__default.default.join(cwd, rel));
|
|
26394
26378
|
return found;
|
|
26395
26379
|
}
|
|
26396
26380
|
function readOgWiring(cwd) {
|
|
26397
26381
|
const siteCard = ["public/og.png", "public/og.jpg", "public/opengraph.png"].some(
|
|
26398
26382
|
(rel) => safeExists(path12__default.default.join(cwd, rel))
|
|
26399
26383
|
);
|
|
26400
|
-
const layoutPath =
|
|
26384
|
+
const layoutPath = chunkP4TB4ROG_js.findRootLayout(cwd);
|
|
26401
26385
|
let layout = "";
|
|
26402
26386
|
if (layoutPath) {
|
|
26403
26387
|
try {
|
|
@@ -26417,7 +26401,12 @@ function readOgWiring(cwd) {
|
|
|
26417
26401
|
function judgeOgWiring(facts) {
|
|
26418
26402
|
const problems = [];
|
|
26419
26403
|
if (!facts.layoutFound) {
|
|
26420
|
-
return [
|
|
26404
|
+
return [
|
|
26405
|
+
{
|
|
26406
|
+
message: "no root layout (app/layout.{tsx,ts,jsx,js} or src/app/layout.*) found to verify metadata",
|
|
26407
|
+
fix: "Run this from the site root."
|
|
26408
|
+
}
|
|
26409
|
+
];
|
|
26421
26410
|
}
|
|
26422
26411
|
if (!facts.siteCard && !facts.pageCards.length) {
|
|
26423
26412
|
return [
|
|
@@ -26472,26 +26461,6 @@ async function readFileOrNull(p) {
|
|
|
26472
26461
|
return null;
|
|
26473
26462
|
}
|
|
26474
26463
|
}
|
|
26475
|
-
async function findFirst(cwd, candidates) {
|
|
26476
|
-
for (const rel of candidates) {
|
|
26477
|
-
const full = path12__default.default.join(cwd, rel);
|
|
26478
|
-
if (await readFileOrNull(full)) return full;
|
|
26479
|
-
}
|
|
26480
|
-
return null;
|
|
26481
|
-
}
|
|
26482
|
-
var LAYOUT_CANDIDATES = [
|
|
26483
|
-
"app/layout.tsx",
|
|
26484
|
-
"app/layout.jsx",
|
|
26485
|
-
"src/app/layout.tsx",
|
|
26486
|
-
"src/app/layout.jsx"
|
|
26487
|
-
];
|
|
26488
|
-
var SITEMAP_CANDIDATES = [
|
|
26489
|
-
"app/sitemap.ts",
|
|
26490
|
-
"app/sitemap.tsx",
|
|
26491
|
-
"app/sitemap.js",
|
|
26492
|
-
"src/app/sitemap.ts",
|
|
26493
|
-
"src/app/sitemap.tsx"
|
|
26494
|
-
];
|
|
26495
26464
|
function checkApiKeyEnv() {
|
|
26496
26465
|
const key = process.env.SONOR_API_KEY;
|
|
26497
26466
|
if (key && key.startsWith("sonor_")) {
|
|
@@ -26578,7 +26547,7 @@ async function checkPackageInstalled(cwd) {
|
|
|
26578
26547
|
};
|
|
26579
26548
|
}
|
|
26580
26549
|
async function checkSiteKitLayout(cwd) {
|
|
26581
|
-
const layoutPath =
|
|
26550
|
+
const layoutPath = chunkP4TB4ROG_js.findRootLayout(cwd);
|
|
26582
26551
|
if (!layoutPath) {
|
|
26583
26552
|
return {
|
|
26584
26553
|
id: "layout.sitekit",
|
|
@@ -26622,8 +26591,8 @@ async function checkSiteKitLayout(cwd) {
|
|
|
26622
26591
|
};
|
|
26623
26592
|
}
|
|
26624
26593
|
async function checkSitemap(cwd) {
|
|
26625
|
-
const
|
|
26626
|
-
if (!
|
|
26594
|
+
const sitemapRel = chunkP4TB4ROG_js.findSitemapRoute(cwd);
|
|
26595
|
+
if (!sitemapRel) {
|
|
26627
26596
|
return {
|
|
26628
26597
|
id: "sitemap.managed",
|
|
26629
26598
|
title: "Sitemap",
|
|
@@ -26633,7 +26602,7 @@ async function checkSitemap(cwd) {
|
|
|
26633
26602
|
fixCommand: "npx sonor-setup scaffold --yes"
|
|
26634
26603
|
};
|
|
26635
26604
|
}
|
|
26636
|
-
const content = await readFileOrNull(
|
|
26605
|
+
const content = await readFileOrNull(path12__default.default.join(cwd, sitemapRel)) || "";
|
|
26637
26606
|
if (content.includes("createSitemap") || content.includes("@sonordev/site-kit")) {
|
|
26638
26607
|
return { id: "sitemap.managed", title: "Sitemap", level: "ok", message: "Using Site-Kit sitemap" };
|
|
26639
26608
|
}
|
|
@@ -27011,8 +26980,7 @@ async function checkSsrRenderFromBuild(cwd) {
|
|
|
27011
26980
|
}
|
|
27012
26981
|
async function checkNetlifyMiddleware(cwd) {
|
|
27013
26982
|
const runtimeRe = /runtime\s*[:=]\s*['"](nodejs|edge)['"]/;
|
|
27014
|
-
const
|
|
27015
|
-
for (const rel of proxyFiles) {
|
|
26983
|
+
for (const rel of chunkP4TB4ROG_js.NEXT_PROXY_FILES) {
|
|
27016
26984
|
const content = await readFileOrNull(path12__default.default.join(cwd, rel));
|
|
27017
26985
|
if (content === null) continue;
|
|
27018
26986
|
if (runtimeRe.test(content)) {
|
|
@@ -27028,8 +26996,7 @@ async function checkNetlifyMiddleware(cwd) {
|
|
|
27028
26996
|
}
|
|
27029
26997
|
return { id: "middleware.netlify", title: "Proxy / middleware", level: "ok", message: `${rel} present` };
|
|
27030
26998
|
}
|
|
27031
|
-
const
|
|
27032
|
-
for (const rel of middlewareFiles) {
|
|
26999
|
+
for (const rel of chunkP4TB4ROG_js.NEXT_MIDDLEWARE_FILES) {
|
|
27033
27000
|
const content = await readFileOrNull(path12__default.default.join(cwd, rel));
|
|
27034
27001
|
if (content === null) continue;
|
|
27035
27002
|
if (/runtime\s*[:=]\s*['"]nodejs['"]/.test(content)) {
|
|
@@ -27224,8 +27191,8 @@ async function statusCommand(options) {
|
|
|
27224
27191
|
|
|
27225
27192
|
// src/og/pages.ts
|
|
27226
27193
|
var DYNAMIC = "*";
|
|
27227
|
-
function pathSegments(
|
|
27228
|
-
return
|
|
27194
|
+
function pathSegments(path30) {
|
|
27195
|
+
return path30.split("/").filter(Boolean);
|
|
27229
27196
|
}
|
|
27230
27197
|
function stripBrandSuffix(title, brand) {
|
|
27231
27198
|
const cleaned = title.replace(/\s*[|–—-]\s*[^|–—-]+$/, "").trim();
|
|
@@ -27233,13 +27200,13 @@ function stripBrandSuffix(title, brand) {
|
|
|
27233
27200
|
if (brand && cleaned.toLowerCase() === brand.toLowerCase()) return title.trim();
|
|
27234
27201
|
return cleaned;
|
|
27235
27202
|
}
|
|
27236
|
-
function titleFromPath(
|
|
27237
|
-
const last = pathSegments(
|
|
27203
|
+
function titleFromPath(path30) {
|
|
27204
|
+
const last = pathSegments(path30).filter((s) => s !== DYNAMIC).pop();
|
|
27238
27205
|
if (!last) return "Home";
|
|
27239
27206
|
return last.replace(/[-_]+/g, " ").replace(/\b\w/g, (c) => c.toUpperCase()).trim();
|
|
27240
27207
|
}
|
|
27241
|
-
function kickerFromPath(
|
|
27242
|
-
const parts = pathSegments(
|
|
27208
|
+
function kickerFromPath(path30, fallback) {
|
|
27209
|
+
const parts = pathSegments(path30);
|
|
27243
27210
|
const section = parts.includes(DYNAMIC) ? parts.filter((s) => s !== DYNAMIC) : parts.slice(0, -1);
|
|
27244
27211
|
if (!section.length) return fallback;
|
|
27245
27212
|
return section.join(" / ").replace(/[-_]+/g, " ");
|
|
@@ -27263,8 +27230,8 @@ function kickerIsRedundant(kicker, title) {
|
|
|
27263
27230
|
const titleWords = new Set(t.split(" "));
|
|
27264
27231
|
return k2.split(" ").every((w) => titleWords.has(w));
|
|
27265
27232
|
}
|
|
27266
|
-
function slugForPath(
|
|
27267
|
-
const segments = pathSegments(
|
|
27233
|
+
function slugForPath(path30) {
|
|
27234
|
+
const segments = pathSegments(path30);
|
|
27268
27235
|
if (!segments.length) return "home";
|
|
27269
27236
|
return segments.map((s) => s === DYNAMIC ? "any" : s).join("-").replace(/[^a-zA-Z0-9]+/g, "-").replace(/^-+|-+$/g, "").toLowerCase();
|
|
27270
27237
|
}
|
|
@@ -27425,6 +27392,9 @@ async function compressCard(pngPath, cwd) {
|
|
|
27425
27392
|
return pngPath;
|
|
27426
27393
|
}
|
|
27427
27394
|
}
|
|
27395
|
+
function codeOgImageFile(dir) {
|
|
27396
|
+
return chunkP4TB4ROG_js.findConventionFile(dir, "opengraph-image");
|
|
27397
|
+
}
|
|
27428
27398
|
function discoverDynamicSegments(appDir) {
|
|
27429
27399
|
const found = [];
|
|
27430
27400
|
const walk = (dir, urlSegments, pattern) => {
|
|
@@ -27438,8 +27408,7 @@ function discoverDynamicSegments(appDir) {
|
|
|
27438
27408
|
const nextUrl = isGroup || isDynamic ? urlSegments : [...urlSegments, entry.name];
|
|
27439
27409
|
const nextPattern = isGroup ? pattern : [...pattern, isDynamic ? DYNAMIC : entry.name];
|
|
27440
27410
|
if (isDynamic) {
|
|
27441
|
-
|
|
27442
|
-
if (hasPage) {
|
|
27411
|
+
if (chunkP4TB4ROG_js.hasPageFile(full)) {
|
|
27443
27412
|
found.push({ dir: full, path: `/${nextPattern.join("/")}`, parent: `/${urlSegments.join("/")}` });
|
|
27444
27413
|
}
|
|
27445
27414
|
}
|
|
@@ -27544,11 +27513,11 @@ async function runOg(options) {
|
|
|
27544
27513
|
};
|
|
27545
27514
|
}
|
|
27546
27515
|
if (options.pages !== false) {
|
|
27547
|
-
const appDir =
|
|
27516
|
+
const appDir = chunkP4TB4ROG_js.findAppDirForDiscovery(cwd);
|
|
27548
27517
|
if (!appDir) {
|
|
27549
27518
|
console.log(source_default.yellow(" ! No app/ directory found \u2014 skipped per-page cards."));
|
|
27550
27519
|
} else {
|
|
27551
|
-
const routes = [...new Set(
|
|
27520
|
+
const routes = [...new Set(chunkP4TB4ROG_js.discoverNextJsRoutes(appDir).map((r) => r.path))];
|
|
27552
27521
|
if (!routes.length) {
|
|
27553
27522
|
console.log(source_default.yellow(" ! No static routes discovered \u2014 skipped per-page cards."));
|
|
27554
27523
|
} else {
|
|
@@ -27592,9 +27561,19 @@ async function runOg(options) {
|
|
|
27592
27561
|
});
|
|
27593
27562
|
cardKeyFix = CARD_KEY_FIX;
|
|
27594
27563
|
}
|
|
27595
|
-
const
|
|
27564
|
+
const placed = targets.map((route) => ({ ...route, dir: route.dir ?? routeOutputDir(appDir, route.path) }));
|
|
27565
|
+
const toRender = placed.filter((route) => !codeOgImageFile(route.dir));
|
|
27566
|
+
for (const route of placed.filter((r) => codeOgImageFile(r.dir))) {
|
|
27567
|
+
for (const ext2 of ["png", "jpg", "jpeg"]) {
|
|
27568
|
+
await fs3__default.default.rm(path12__default.default.join(route.dir, `opengraph-image.${ext2}`), { force: true });
|
|
27569
|
+
}
|
|
27570
|
+
const file = path12__default.default.relative(cwd, codeOgImageFile(route.dir));
|
|
27571
|
+
console.log(source_default.gray(` \u21B7 ${route.path} keeps its own ${file}`));
|
|
27572
|
+
checks.push({ id: "og.code-card", title: route.path, level: "ok", message: `Code-based card kept: ${file}` });
|
|
27573
|
+
}
|
|
27574
|
+
const reports = await pooled(toRender, RENDER_CONCURRENCY, async (route, i) => {
|
|
27596
27575
|
const pageConfig = pageCardConfig(config2, route, brand);
|
|
27597
|
-
const dir = route.dir
|
|
27576
|
+
const dir = route.dir;
|
|
27598
27577
|
for (const ext2 of ["png", "jpg", "jpeg"]) {
|
|
27599
27578
|
await fs3__default.default.rm(path12__default.default.join(dir, `opengraph-image.${ext2}`), { force: true });
|
|
27600
27579
|
}
|
|
@@ -31267,7 +31246,7 @@ async function syncCommand2(options) {
|
|
|
31267
31246
|
}
|
|
31268
31247
|
async function syncPagesToPortal(apiUrl, apiKey, dryRun) {
|
|
31269
31248
|
const spinner = ora("Discovering pages...").start();
|
|
31270
|
-
const appDir =
|
|
31249
|
+
const appDir = chunkP4TB4ROG_js.findAppDirForDiscovery();
|
|
31271
31250
|
if (!appDir) {
|
|
31272
31251
|
spinner.fail("Could not find app directory");
|
|
31273
31252
|
return;
|
|
@@ -31328,18 +31307,6 @@ async function syncPagesToPortal(apiUrl, apiKey, dryRun) {
|
|
|
31328
31307
|
syncSpinner.fail(`Sync failed: ${error2.message}`);
|
|
31329
31308
|
}
|
|
31330
31309
|
}
|
|
31331
|
-
function findAppDir() {
|
|
31332
|
-
const candidates = [
|
|
31333
|
-
path12__default.default.join(process.cwd(), "app"),
|
|
31334
|
-
path12__default.default.join(process.cwd(), "src", "app")
|
|
31335
|
-
];
|
|
31336
|
-
for (const candidate of candidates) {
|
|
31337
|
-
if (fs.existsSync(candidate)) {
|
|
31338
|
-
return candidate;
|
|
31339
|
-
}
|
|
31340
|
-
}
|
|
31341
|
-
return null;
|
|
31342
|
-
}
|
|
31343
31310
|
function discoverPages(appDir, currentPath = "", pages = []) {
|
|
31344
31311
|
const fullPath = path12__default.default.join(appDir, currentPath);
|
|
31345
31312
|
if (!fs.existsSync(fullPath)) {
|
|
@@ -31639,7 +31606,7 @@ async function discoverSchemaUsage(appDir) {
|
|
|
31639
31606
|
return usages;
|
|
31640
31607
|
}
|
|
31641
31608
|
async function syncSchemasToPortal(apiUrl, apiKey, dryRun) {
|
|
31642
|
-
const appDir =
|
|
31609
|
+
const appDir = chunkP4TB4ROG_js.findAppDirForDiscovery();
|
|
31643
31610
|
if (!appDir) {
|
|
31644
31611
|
console.log(source_default.gray(" No app directory found"));
|
|
31645
31612
|
return;
|
|
@@ -31682,7 +31649,7 @@ async function apiRoutesCommand(options) {
|
|
|
31682
31649
|
console.log("");
|
|
31683
31650
|
console.log(source_default.bold(" Site-Kit API Routes"));
|
|
31684
31651
|
console.log("");
|
|
31685
|
-
const appDir =
|
|
31652
|
+
const appDir = chunkP4TB4ROG_js.findAppDirForDiscovery();
|
|
31686
31653
|
if (!appDir) {
|
|
31687
31654
|
console.log(source_default.red(" \u2717 Could not find app directory"));
|
|
31688
31655
|
console.log(source_default.gray(" Make sure you are in a Next.js project with an app directory"));
|
|
@@ -31725,18 +31692,6 @@ async function apiRoutesCommand(options) {
|
|
|
31725
31692
|
spinner.fail(`Failed to create API routes: ${error2.message}`);
|
|
31726
31693
|
}
|
|
31727
31694
|
}
|
|
31728
|
-
function findAppDir2() {
|
|
31729
|
-
const candidates = [
|
|
31730
|
-
path12__default.default.join(process.cwd(), "app"),
|
|
31731
|
-
path12__default.default.join(process.cwd(), "src", "app")
|
|
31732
|
-
];
|
|
31733
|
-
for (const candidate of candidates) {
|
|
31734
|
-
if (fs.existsSync(candidate)) {
|
|
31735
|
-
return candidate;
|
|
31736
|
-
}
|
|
31737
|
-
}
|
|
31738
|
-
return null;
|
|
31739
|
-
}
|
|
31740
31695
|
function generateRouteHandler() {
|
|
31741
31696
|
return `/**
|
|
31742
31697
|
* Sonor API Proxy
|
|
@@ -31951,7 +31906,7 @@ async function scaffoldCommand(options) {
|
|
|
31951
31906
|
);
|
|
31952
31907
|
console.log("");
|
|
31953
31908
|
const cwd = process.cwd();
|
|
31954
|
-
const appDir =
|
|
31909
|
+
const appDir = chunkP4TB4ROG_js.findAppDirForDiscovery(cwd);
|
|
31955
31910
|
if (!appDir) {
|
|
31956
31911
|
console.log(source_default.red(" \u2717 No app directory found (app/ or src/app/)"));
|
|
31957
31912
|
process.exit(1);
|
|
@@ -31964,8 +31919,8 @@ async function scaffoldCommand(options) {
|
|
|
31964
31919
|
|
|
31965
31920
|
export default createSitemap({
|
|
31966
31921
|
// baseUrl auto-resolved from Portal via API key
|
|
31967
|
-
|
|
31968
|
-
|
|
31922
|
+
// llms.txt stays out of the sitemap on purpose: it's a plain-text duplicate
|
|
31923
|
+
// of these pages, and AI crawlers find it at /llms.txt anyway.
|
|
31969
31924
|
// optimizedLLMsTxt: true, // optional: static build writes optimized llms (CI)
|
|
31970
31925
|
// llmsPublicSummaryOnly: true, // optional: page list from Portal public summaries only
|
|
31971
31926
|
// additionalPaths: async () => [...],
|
|
@@ -32001,13 +31956,13 @@ export const GET = createLLMsFullTxtHandler({ preferStatic: true })
|
|
|
32001
31956
|
files.push(
|
|
32002
31957
|
{
|
|
32003
31958
|
path: path12__default.default.join(cwd, "proxy.ts"),
|
|
32004
|
-
label: "Proxy (security headers
|
|
31959
|
+
label: "Proxy (security headers, managed redirects)",
|
|
32005
31960
|
content: `import { createProxy } from '@sonordev/site-kit/proxy'
|
|
32006
31961
|
|
|
32007
|
-
// redirects
|
|
32008
|
-
//
|
|
32009
|
-
//
|
|
32010
|
-
export default createProxy({ redirects:
|
|
31962
|
+
// Sonor-managed redirects apply here. The rule list is cached in memory for
|
|
31963
|
+
// five minutes, so page loads rarely wait on it. Don't move them into
|
|
31964
|
+
// app/not-found.tsx: reading request headers there makes every page dynamic.
|
|
31965
|
+
export default createProxy({ redirects: true })
|
|
32011
31966
|
|
|
32012
31967
|
// Inlined on purpose: Next statically parses \`config.matcher\` at build time
|
|
32013
31968
|
// and rejects an imported value (Turbopack build error). Keep in sync with
|
|
@@ -32029,18 +31984,11 @@ export const GET = createManifest()
|
|
|
32029
31984
|
},
|
|
32030
31985
|
{
|
|
32031
31986
|
path: path12__default.default.join(appDir, "not-found.tsx"),
|
|
32032
|
-
label: "404 Page
|
|
32033
|
-
content:
|
|
32034
|
-
|
|
32035
|
-
|
|
32036
|
-
export default
|
|
32037
|
-
// Sonor-managed redirects resolve here, at the only place they can matter:
|
|
32038
|
-
// a URL that would otherwise 404. Successful page loads pay nothing.
|
|
32039
|
-
const managed = await resolveManagedRedirect()
|
|
32040
|
-
if (managed) {
|
|
32041
|
-
;(managed.permanent ? permanentRedirect : redirect)(managed.destination)
|
|
32042
|
-
}
|
|
32043
|
-
|
|
31987
|
+
label: "404 Page",
|
|
31988
|
+
content: `// Keep this component free of request APIs (headers, cookies). Next
|
|
31989
|
+
// renders the root 404 inside every page, so one headers() call here makes
|
|
31990
|
+
// the whole site dynamic. Managed redirects run in proxy.ts instead.
|
|
31991
|
+
export default function NotFound() {
|
|
32044
31992
|
return (
|
|
32045
31993
|
<div style={{ textAlign: 'center', padding: '4rem 1rem' }}>
|
|
32046
31994
|
<h1 style={{ fontSize: '3rem', fontWeight: 700, marginBottom: '0.5rem' }}>404</h1>
|
|
@@ -32160,9 +32108,9 @@ SONOR_API_KEY=sonor_your-project-uuid_your-secret-key
|
|
|
32160
32108
|
console.log(source_default.yellow(" [DRY RUN] Would create:"));
|
|
32161
32109
|
for (const f of files) {
|
|
32162
32110
|
const rel = path12__default.default.relative(cwd, f.path);
|
|
32163
|
-
const
|
|
32111
|
+
const exists2 = fs.existsSync(f.path);
|
|
32164
32112
|
console.log(
|
|
32165
|
-
source_default.gray(` ${rel}`) + (
|
|
32113
|
+
source_default.gray(` ${rel}`) + (exists2 ? source_default.yellow(" (exists, would skip)") : "")
|
|
32166
32114
|
);
|
|
32167
32115
|
}
|
|
32168
32116
|
console.log("");
|
|
@@ -32226,17 +32174,209 @@ SONOR_API_KEY=sonor_your-project-uuid_your-secret-key
|
|
|
32226
32174
|
console.log("");
|
|
32227
32175
|
}
|
|
32228
32176
|
}
|
|
32229
|
-
|
|
32230
|
-
|
|
32231
|
-
|
|
32232
|
-
|
|
32233
|
-
|
|
32234
|
-
|
|
32235
|
-
|
|
32236
|
-
|
|
32177
|
+
var LLMS_FILES = [
|
|
32178
|
+
{ path: "/llms.txt", handler: "createLLMsTxtHandler" },
|
|
32179
|
+
{ path: "/llms-full.txt", handler: "createLLMsFullTxtHandler" }
|
|
32180
|
+
];
|
|
32181
|
+
var NEXT_CONFIGS = ["next.config.ts", "next.config.mts", "next.config.mjs", "next.config.js", "next.config.cjs"];
|
|
32182
|
+
function read(cwd, rel) {
|
|
32183
|
+
try {
|
|
32184
|
+
return fs__namespace.default.readFileSync(path12__default.default.join(cwd, rel), "utf-8");
|
|
32185
|
+
} catch {
|
|
32186
|
+
return "";
|
|
32187
|
+
}
|
|
32188
|
+
}
|
|
32189
|
+
function exists(cwd, rel) {
|
|
32190
|
+
try {
|
|
32191
|
+
return fs__namespace.default.existsSync(path12__default.default.join(cwd, rel));
|
|
32192
|
+
} catch {
|
|
32193
|
+
return false;
|
|
32237
32194
|
}
|
|
32195
|
+
}
|
|
32196
|
+
function patternMatches(pattern, urlPath) {
|
|
32197
|
+
const re2 = pattern.trim().split(/\(\.\*\)|:\w+\*|\*/).map((part) => part.replace(/[.+?^${}()|[\]\\]/g, "\\$&")).join(".*");
|
|
32198
|
+
return new RegExp(`^${re2}$`).test(urlPath);
|
|
32199
|
+
}
|
|
32200
|
+
var NOINDEX = /noindex/i;
|
|
32201
|
+
function netlifyTomlNoindex(toml, urlPath) {
|
|
32202
|
+
const blocks = [];
|
|
32203
|
+
for (const line of toml.split("\n")) {
|
|
32204
|
+
const header = line.match(/^\s*\[\[?\s*([^\]]+?)\s*\]\]?\s*$/);
|
|
32205
|
+
if (header && header[1] !== "headers.values") blocks.push(line);
|
|
32206
|
+
else if (blocks.length) blocks[blocks.length - 1] += `
|
|
32207
|
+
${line}`;
|
|
32208
|
+
}
|
|
32209
|
+
return blocks.some((block) => {
|
|
32210
|
+
if (!/^\s*\[\[\s*headers\s*\]\]/.test(block)) return false;
|
|
32211
|
+
const pattern = block.match(/^\s*for\s*=\s*["']([^"']+)["']/m)?.[1];
|
|
32212
|
+
const value = block.match(/^\s*["']?X-Robots-Tag["']?\s*=\s*["']([^"']*)["']/im)?.[1];
|
|
32213
|
+
return !!pattern && !!value && NOINDEX.test(value) && patternMatches(pattern, urlPath);
|
|
32214
|
+
});
|
|
32215
|
+
}
|
|
32216
|
+
function headersFileNoindex(text, urlPath) {
|
|
32217
|
+
let current = null;
|
|
32218
|
+
for (const line of text.split("\n")) {
|
|
32219
|
+
if (!line.trim() || line.trim().startsWith("#")) continue;
|
|
32220
|
+
if (!/^\s/.test(line)) {
|
|
32221
|
+
current = line.trim();
|
|
32222
|
+
continue;
|
|
32223
|
+
}
|
|
32224
|
+
const m = line.match(/^\s+X-Robots-Tag\s*:\s*(.+)$/i);
|
|
32225
|
+
if (current && m && NOINDEX.test(m[1]) && patternMatches(current, urlPath)) return true;
|
|
32226
|
+
}
|
|
32227
|
+
return false;
|
|
32228
|
+
}
|
|
32229
|
+
function vercelJsonNoindex(text, urlPath) {
|
|
32230
|
+
try {
|
|
32231
|
+
const json = JSON.parse(text);
|
|
32232
|
+
return (json.headers ?? []).some(
|
|
32233
|
+
(rule) => !!rule.source && patternMatches(rule.source, urlPath) && (rule.headers ?? []).some((h) => /^x-robots-tag$/i.test(h.key ?? "") && NOINDEX.test(h.value ?? ""))
|
|
32234
|
+
);
|
|
32235
|
+
} catch {
|
|
32236
|
+
return false;
|
|
32237
|
+
}
|
|
32238
|
+
}
|
|
32239
|
+
function findHostNoindex(cwd, urlPath) {
|
|
32240
|
+
const toml = read(cwd, "netlify.toml");
|
|
32241
|
+
if (toml && netlifyTomlNoindex(toml, urlPath)) return "netlify.toml";
|
|
32242
|
+
const headers = read(cwd, "public/_headers");
|
|
32243
|
+
if (headers && headersFileNoindex(headers, urlPath)) return "public/_headers";
|
|
32244
|
+
const vercel = read(cwd, "vercel.json");
|
|
32245
|
+
if (vercel && vercelJsonNoindex(vercel, urlPath)) return "vercel.json";
|
|
32238
32246
|
return null;
|
|
32239
32247
|
}
|
|
32248
|
+
var LINK_DISCOVERY_LINE = /^.*\bLink\b.*(llms[^\n]*describedby|describedby[^\n]*llms).*$/im;
|
|
32249
|
+
function findDiscoverySource(cwd) {
|
|
32250
|
+
for (const rel of chunkP4TB4ROG_js.findProxyFiles(cwd)) {
|
|
32251
|
+
const src = read(cwd, rel);
|
|
32252
|
+
const viaFactory = /\bcreate(Proxy|Middleware)\s*\(/.test(src) && /\bllmsDiscovery\b(?!\s*:\s*false\b)/.test(src);
|
|
32253
|
+
if (viaFactory) return `${rel} (createProxy llmsDiscovery)`;
|
|
32254
|
+
if (src.includes("buildAiDiscoveryHeaders")) return `${rel} (buildAiDiscoveryHeaders)`;
|
|
32255
|
+
}
|
|
32256
|
+
for (const rel of NEXT_CONFIGS) {
|
|
32257
|
+
const src = read(cwd, rel);
|
|
32258
|
+
if (!src) continue;
|
|
32259
|
+
if (/\bllmsTxtDiscoveryLink\s*:(?!\s*false\b)/.test(src)) return `${rel} (llmsTxtDiscoveryLink)`;
|
|
32260
|
+
if (src.includes("buildAiDiscoveryHeaders")) return `${rel} (buildAiDiscoveryHeaders)`;
|
|
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
|
+
}
|
|
32269
|
+
}
|
|
32270
|
+
for (const rel of ["netlify.toml", "public/_headers"]) {
|
|
32271
|
+
if (LINK_DISCOVERY_LINE.test(read(cwd, rel))) return rel;
|
|
32272
|
+
}
|
|
32273
|
+
return null;
|
|
32274
|
+
}
|
|
32275
|
+
function readGeoWiring(cwd) {
|
|
32276
|
+
const appDir = chunkP4TB4ROG_js.NEXT_APP_DIRS.find((rel) => exists(cwd, rel)) ?? null;
|
|
32277
|
+
const sitemap = chunkP4TB4ROG_js.findSitemapRoute(cwd);
|
|
32278
|
+
const sitemapSrc = sitemap ? read(cwd, sitemap) : "";
|
|
32279
|
+
const sitemapListsLlms = /\bincludeLlms(Full)?TxtInSitemap\s*:\s*true\b/.test(sitemapSrc) || /['"`/]llms(-full)?\.txt['"`]/.test(sitemapSrc);
|
|
32280
|
+
const sitemapWritesStatic = /\bcreateSitemap\s*\(/.test(sitemapSrc);
|
|
32281
|
+
const writesLlms = sitemapWritesStatic && !/\boptimizedLLMsTxt\s*:\s*false\b/.test(sitemapSrc);
|
|
32282
|
+
const writesLlmsFull = writesLlms && /\boptimizedLLMsFullTxt\s*:\s*true\b/.test(sitemapSrc);
|
|
32283
|
+
const llms = LLMS_FILES.map(({ path: urlPath, handler }) => {
|
|
32284
|
+
const file = urlPath.slice(1);
|
|
32285
|
+
const routeAbs = appDir ? chunkP4TB4ROG_js.findConventionFile(path12__default.default.join(cwd, appDir, file), "route") : null;
|
|
32286
|
+
const route = routeAbs ? path12__default.default.relative(cwd, routeAbs) : null;
|
|
32287
|
+
const routeSrc = route ? read(cwd, route) : "";
|
|
32288
|
+
const publicFile = exists(cwd, path12__default.default.join("public", file));
|
|
32289
|
+
const built = urlPath === "/llms.txt" ? writesLlms : writesLlmsFull;
|
|
32290
|
+
return {
|
|
32291
|
+
path: urlPath,
|
|
32292
|
+
route,
|
|
32293
|
+
routeUsesKitHandler: routeSrc.includes(handler),
|
|
32294
|
+
routeOptsOutOfNoindex: /\bnoindex\s*:\s*false\b/.test(routeSrc),
|
|
32295
|
+
routeSetsNoindex: /X-Robots-Tag/i.test(routeSrc) && NOINDEX.test(routeSrc),
|
|
32296
|
+
servedStatic: publicFile || built,
|
|
32297
|
+
staticReason: publicFile ? `public/${file}` : built ? `public/${file} (written by createSitemap at build)` : null,
|
|
32298
|
+
hostNoindex: findHostNoindex(cwd, urlPath)
|
|
32299
|
+
};
|
|
32300
|
+
});
|
|
32301
|
+
return { appDir, llms, sitemap, sitemapListsLlms, discovery: findDiscoverySource(cwd) };
|
|
32302
|
+
}
|
|
32303
|
+
var DISCOVERY_FIX = "Add llmsDiscovery to the proxy: createProxy({ llmsDiscovery: { siteUrl } }) in proxy.ts. Or withSiteKitConfig({ llmsTxtDiscoveryLink: true }) in next.config.";
|
|
32304
|
+
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.";
|
|
32305
|
+
function hostNoindexFix(urlPath) {
|
|
32306
|
+
return `The CDN serves it before any route handler runs, so set the header in host config. netlify.toml: [[headers]] for = "${urlPath}" [headers.values] X-Robots-Tag = "noindex"`;
|
|
32307
|
+
}
|
|
32308
|
+
function judgeGeoWiring(facts) {
|
|
32309
|
+
const rows = [];
|
|
32310
|
+
for (const f of facts.llms) {
|
|
32311
|
+
const name = f.path.slice(1);
|
|
32312
|
+
const id = f.path === "/llms.txt" ? "llms" : "llms-full";
|
|
32313
|
+
const served = !!f.route || f.servedStatic;
|
|
32314
|
+
rows.push(
|
|
32315
|
+
served ? { id: `${id}.served`, label: `${name} served`, level: "ok", detail: f.route ?? f.staticReason ?? void 0 } : {
|
|
32316
|
+
id: `${id}.served`,
|
|
32317
|
+
label: `${name} served`,
|
|
32318
|
+
level: "fail",
|
|
32319
|
+
detail: `no ${facts.appDir ?? "app"}/${name}/route.* and no public/${name}`,
|
|
32320
|
+
fix: "Run: sonor-setup geo --ensure-routes"
|
|
32321
|
+
}
|
|
32322
|
+
);
|
|
32323
|
+
}
|
|
32324
|
+
if (!facts.sitemap) {
|
|
32325
|
+
rows.push({ id: "geo.sitemap", label: "sitemap leaves llms files out", level: "info", detail: "no sitemap route to check" });
|
|
32326
|
+
} else if (facts.sitemapListsLlms) {
|
|
32327
|
+
rows.push({
|
|
32328
|
+
id: "geo.sitemap",
|
|
32329
|
+
label: "sitemap leaves llms files out",
|
|
32330
|
+
level: "warn",
|
|
32331
|
+
detail: `${facts.sitemap} lists /llms.txt, inviting search engines to index a thin plain-text duplicate`,
|
|
32332
|
+
fix: SITEMAP_FIX
|
|
32333
|
+
});
|
|
32334
|
+
} else {
|
|
32335
|
+
rows.push({ id: "geo.sitemap", label: "sitemap leaves llms files out", level: "ok", detail: facts.sitemap });
|
|
32336
|
+
}
|
|
32337
|
+
rows.push(
|
|
32338
|
+
facts.discovery ? { id: "geo.discovery", label: 'discovery header (Link rel="describedby")', level: "ok", detail: facts.discovery } : {
|
|
32339
|
+
id: "geo.discovery",
|
|
32340
|
+
label: 'discovery header (Link rel="describedby")',
|
|
32341
|
+
level: "fail",
|
|
32342
|
+
detail: "not wired in proxy, next.config, root layout, or host config",
|
|
32343
|
+
fix: DISCOVERY_FIX
|
|
32344
|
+
}
|
|
32345
|
+
);
|
|
32346
|
+
for (const f of facts.llms) {
|
|
32347
|
+
if (!f.route && !f.servedStatic) continue;
|
|
32348
|
+
const name = f.path.slice(1);
|
|
32349
|
+
const id = `${f.path === "/llms.txt" ? "llms" : "llms-full"}.noindex`;
|
|
32350
|
+
const label = `${name} sends X-Robots-Tag: noindex`;
|
|
32351
|
+
if (f.servedStatic) {
|
|
32352
|
+
rows.push(
|
|
32353
|
+
f.hostNoindex ? { id, label, level: "ok", detail: f.hostNoindex } : { id, label, level: "warn", detail: `${f.staticReason} is served without it`, fix: hostNoindexFix(f.path) }
|
|
32354
|
+
);
|
|
32355
|
+
continue;
|
|
32356
|
+
}
|
|
32357
|
+
if (f.hostNoindex) {
|
|
32358
|
+
rows.push({ id, label, level: "ok", detail: f.hostNoindex });
|
|
32359
|
+
} else if (f.routeUsesKitHandler && !f.routeOptsOutOfNoindex) {
|
|
32360
|
+
rows.push({ id, label, level: "ok", detail: `${f.route} (site-kit handler default)` });
|
|
32361
|
+
} else if (f.routeSetsNoindex) {
|
|
32362
|
+
rows.push({ id, label, level: "ok", detail: f.route });
|
|
32363
|
+
} else {
|
|
32364
|
+
rows.push({
|
|
32365
|
+
id,
|
|
32366
|
+
label,
|
|
32367
|
+
level: "warn",
|
|
32368
|
+
detail: f.routeOptsOutOfNoindex ? `${f.route} passes noindex: false` : `${f.route} doesn't set it`,
|
|
32369
|
+
fix: f.routeOptsOutOfNoindex ? "Drop noindex: false unless you want llms.txt in search results." : "Serve it with createLLMsTxtHandler (sends the header by default), or add X-Robots-Tag: noindex to the response."
|
|
32370
|
+
});
|
|
32371
|
+
}
|
|
32372
|
+
}
|
|
32373
|
+
return rows;
|
|
32374
|
+
}
|
|
32375
|
+
function checkGeoWiring(cwd) {
|
|
32376
|
+
return judgeGeoWiring(readGeoWiring(cwd));
|
|
32377
|
+
}
|
|
32378
|
+
|
|
32379
|
+
// src/cli/commands/geo.ts
|
|
32240
32380
|
var LLMS_ROUTE = `import { createLLMsTxtHandler } from '@sonordev/site-kit/llms'
|
|
32241
32381
|
|
|
32242
32382
|
export const GET = createLLMsTxtHandler({ preferStatic: true })
|
|
@@ -32245,40 +32385,36 @@ var LLMS_FULL_ROUTE = `import { createLLMsFullTxtHandler } from '@sonordev/site-
|
|
|
32245
32385
|
|
|
32246
32386
|
export const GET = createLLMsFullTxtHandler({ preferStatic: true })
|
|
32247
32387
|
`;
|
|
32248
|
-
|
|
32249
|
-
|
|
32250
|
-
|
|
32251
|
-
|
|
32252
|
-
|
|
32253
|
-
|
|
32254
|
-
}
|
|
32255
|
-
}
|
|
32388
|
+
var ICON = {
|
|
32389
|
+
ok: source_default.green(" \u2713 "),
|
|
32390
|
+
info: source_default.gray(" \xB7 "),
|
|
32391
|
+
warn: source_default.yellow(" ! "),
|
|
32392
|
+
fail: source_default.red(" \u2717 ")
|
|
32393
|
+
};
|
|
32256
32394
|
async function ensureLlmsRouteFiles(appDir, dryRun) {
|
|
32257
|
-
const llms = path12__default.default.join(appDir, "llms.txt", "route.ts");
|
|
32258
|
-
const llmsFull = path12__default.default.join(appDir, "llms-full.txt", "route.ts");
|
|
32259
32395
|
let n5 = 0;
|
|
32260
32396
|
if (dryRun) return 0;
|
|
32261
|
-
|
|
32262
|
-
|
|
32263
|
-
|
|
32264
|
-
|
|
32265
|
-
|
|
32266
|
-
|
|
32267
|
-
await fs3__default.default.mkdir(path12__default.default.dirname(
|
|
32268
|
-
await fs3__default.default.writeFile(
|
|
32397
|
+
for (const [dir, source] of [
|
|
32398
|
+
["llms.txt", LLMS_ROUTE],
|
|
32399
|
+
["llms-full.txt", LLMS_FULL_ROUTE]
|
|
32400
|
+
]) {
|
|
32401
|
+
if (chunkP4TB4ROG_js.findConventionFile(path12__default.default.join(appDir, dir), "route")) continue;
|
|
32402
|
+
const file = path12__default.default.join(appDir, dir, "route.ts");
|
|
32403
|
+
await fs3__default.default.mkdir(path12__default.default.dirname(file), { recursive: true });
|
|
32404
|
+
await fs3__default.default.writeFile(file, source, "utf-8");
|
|
32269
32405
|
n5++;
|
|
32270
32406
|
}
|
|
32271
32407
|
return n5;
|
|
32272
32408
|
}
|
|
32273
32409
|
async function geoCommand(options) {
|
|
32274
32410
|
if (options.forInstall) {
|
|
32275
|
-
const appDir2 =
|
|
32411
|
+
const appDir2 = chunkP4TB4ROG_js.findAppDirForDiscovery();
|
|
32276
32412
|
if (!appDir2) return;
|
|
32277
32413
|
const created = await ensureLlmsRouteFiles(appDir2, options.dryRun);
|
|
32278
32414
|
if (created > 0) {
|
|
32279
32415
|
console.log(
|
|
32280
32416
|
source_default.cyan(
|
|
32281
|
-
`[@sonordev/site-kit] Created ${created} llms route file(s). Set NEXT_PUBLIC_SITE_URL
|
|
32417
|
+
`[@sonordev/site-kit] Created ${created} llms route file(s). Set NEXT_PUBLIC_SITE_URL and add createProxy({ llmsDiscovery: { siteUrl } }) to proxy.ts when ready.`
|
|
32282
32418
|
)
|
|
32283
32419
|
);
|
|
32284
32420
|
}
|
|
@@ -32293,59 +32429,20 @@ async function geoCommand(options) {
|
|
|
32293
32429
|
)
|
|
32294
32430
|
);
|
|
32295
32431
|
console.log("");
|
|
32296
|
-
const appDir =
|
|
32432
|
+
const appDir = chunkP4TB4ROG_js.findAppDirForDiscovery();
|
|
32297
32433
|
if (!appDir) {
|
|
32298
32434
|
console.log(source_default.red(" \u2717 No app directory (app/ or src/app/)"));
|
|
32299
32435
|
process.exit(1);
|
|
32300
32436
|
}
|
|
32301
|
-
const llms = path12__default.default.join(appDir, "llms.txt", "route.ts");
|
|
32302
|
-
const llmsFull = path12__default.default.join(appDir, "llms-full.txt", "route.ts");
|
|
32303
|
-
const sitemap = path12__default.default.join(appDir, "sitemap.ts");
|
|
32304
32437
|
let allOk = true;
|
|
32305
|
-
const row
|
|
32306
|
-
if (
|
|
32307
|
-
|
|
32308
|
-
|
|
32309
|
-
)
|
|
32310
|
-
|
|
32311
|
-
row("llms.txt route", fs.existsSync(llms));
|
|
32312
|
-
row("llms-full.txt route", fs.existsSync(llmsFull));
|
|
32313
|
-
let sitemapHasLlms = false;
|
|
32314
|
-
if (fs.existsSync(sitemap)) {
|
|
32315
|
-
const txt = await readIfExists(sitemap);
|
|
32316
|
-
sitemapHasLlms = txt.includes("includeLlmsTxtInSitemap") || txt.includes("includeLlmsFullTxtInSitemap");
|
|
32317
|
-
row("sitemap.ts lists llms URLs", sitemapHasLlms);
|
|
32318
|
-
} else {
|
|
32319
|
-
row("sitemap.ts lists llms URLs", false);
|
|
32320
|
-
}
|
|
32321
|
-
const nextConfigs = [
|
|
32322
|
-
path12__default.default.join(cwd, "next.config.ts"),
|
|
32323
|
-
path12__default.default.join(cwd, "next.config.mjs"),
|
|
32324
|
-
path12__default.default.join(cwd, "next.config.js")
|
|
32325
|
-
];
|
|
32326
|
-
let nextCfg = "";
|
|
32327
|
-
for (const p of nextConfigs) {
|
|
32328
|
-
if (fs.existsSync(p)) {
|
|
32329
|
-
nextCfg = await readIfExists(p);
|
|
32330
|
-
break;
|
|
32438
|
+
for (const row of checkGeoWiring(cwd)) {
|
|
32439
|
+
if (row.level === "fail") allOk = false;
|
|
32440
|
+
const detail = row.detail ? source_default.gray(` ${row.detail}`) : "";
|
|
32441
|
+
console.log(`${ICON[row.level]}${row.label}${detail}`);
|
|
32442
|
+
if (row.fix && (row.level === "fail" || row.level === "warn")) {
|
|
32443
|
+
console.log(source_default.gray(` ${row.fix}`));
|
|
32331
32444
|
}
|
|
32332
32445
|
}
|
|
32333
|
-
const layoutCandidates = [
|
|
32334
|
-
path12__default.default.join(appDir, "layout.tsx"),
|
|
32335
|
-
path12__default.default.join(appDir, "layout.jsx"),
|
|
32336
|
-
path12__default.default.join(appDir, "layout.js")
|
|
32337
|
-
];
|
|
32338
|
-
let layoutTxt = "";
|
|
32339
|
-
for (const p of layoutCandidates) {
|
|
32340
|
-
layoutTxt = await readIfExists(p);
|
|
32341
|
-
if (layoutTxt) break;
|
|
32342
|
-
}
|
|
32343
|
-
const hasLayoutDiscovery = layoutTxt.includes("buildAiDiscoveryHeaders") || layoutTxt.includes("llmsTxtDiscoveryLink");
|
|
32344
|
-
const hasConfigDiscovery = nextCfg.includes("llmsTxtDiscoveryLink");
|
|
32345
|
-
row(
|
|
32346
|
-
"discovery header (next.config or root layout)",
|
|
32347
|
-
hasConfigDiscovery || hasLayoutDiscovery
|
|
32348
|
-
);
|
|
32349
32446
|
const siteUrl = process.env.NEXT_PUBLIC_SITE_URL?.trim() || process.env.SITE_BASE_URL?.trim() || (process.env.VERCEL_URL?.trim() ? `https://${process.env.VERCEL_URL.replace(/\/$/, "")}` : "");
|
|
32350
32447
|
if (siteUrl) {
|
|
32351
32448
|
console.log(source_default.gray(` Public origin (env): ${siteUrl}`));
|
|
@@ -32371,19 +32468,16 @@ async function geoCommand(options) {
|
|
|
32371
32468
|
console.log(source_default.bold(" Automation"));
|
|
32372
32469
|
console.log("");
|
|
32373
32470
|
console.log(
|
|
32374
|
-
source_default.gray(
|
|
32375
|
-
" \u2022 next.config: withSiteKitConfig({ llmsTxtDiscoveryLink: true })"
|
|
32376
|
-
)
|
|
32471
|
+
source_default.gray(' \u2022 proxy.ts: createProxy({ llmsDiscovery: { siteUrl } }) (Link rel="describedby")')
|
|
32377
32472
|
);
|
|
32378
32473
|
console.log(
|
|
32379
|
-
source_default.gray(
|
|
32380
|
-
" (If you define your own headers() on nextConfig, merge Link manually.)"
|
|
32381
|
-
)
|
|
32474
|
+
source_default.gray(" or next.config: withSiteKitConfig({ llmsTxtDiscoveryLink: true })")
|
|
32382
32475
|
);
|
|
32383
32476
|
console.log(
|
|
32384
|
-
source_default.gray(
|
|
32385
|
-
|
|
32386
|
-
|
|
32477
|
+
source_default.gray(" \u2022 createLLMsTxtHandler sends X-Robots-Tag: noindex; a static public/llms.txt needs it in netlify.toml")
|
|
32478
|
+
);
|
|
32479
|
+
console.log(
|
|
32480
|
+
source_default.gray(" \u2022 Keep llms.txt out of the sitemap: AI crawlers find it at /llms.txt")
|
|
32387
32481
|
);
|
|
32388
32482
|
console.log(
|
|
32389
32483
|
source_default.gray(" \u2022 npx sonor-setup scaffold --minimal (routes + sitemap template)")
|
|
@@ -32396,7 +32490,7 @@ async function geoCommand(options) {
|
|
|
32396
32490
|
(0, import_dotenv2.config)({ path: ".env.local", quiet: true });
|
|
32397
32491
|
(0, import_dotenv2.config)({ path: ".env", quiet: true });
|
|
32398
32492
|
var program2 = new Command();
|
|
32399
|
-
program2.name("sonor-setup").description("Setup + verification toolchain for @sonordev/site-kit").version(
|
|
32493
|
+
program2.name("sonor-setup").description("Setup + verification toolchain for @sonordev/site-kit").version(chunk5TXXTYXL_js.SITE_KIT_VERSION);
|
|
32400
32494
|
withAgentFlags(
|
|
32401
32495
|
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")
|
|
32402
32496
|
).action(verifyCommand);
|