@sonordev/site-kit 5.7.0 → 5.8.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/README.md +3 -3
- package/agent-manifest.json +14 -2
- package/dist/AnalyticsProvider-OCXRNIVE.js +33 -0
- package/dist/{AnalyticsProvider-GJFG7YXA.js.map → AnalyticsProvider-OCXRNIVE.js.map} +1 -1
- package/dist/AnalyticsProvider-ZAUONQCX.mjs +12 -0
- package/dist/{AnalyticsProvider-EWF7JN2X.mjs.map → AnalyticsProvider-ZAUONQCX.mjs.map} +1 -1
- package/dist/{BlogViewTracker-2D3IJPJK.js → BlogViewTracker-HK5C7PU6.js} +14 -11
- package/dist/BlogViewTracker-HK5C7PU6.js.map +1 -0
- package/dist/{BlogViewTracker-CKYG6MYU.mjs → BlogViewTracker-KXRZHN3U.mjs} +13 -10
- package/dist/BlogViewTracker-KXRZHN3U.mjs.map +1 -0
- package/dist/ChatWidget-3OW5LY37.js +24 -0
- package/dist/{ChatWidget-AWP6GBVW.js.map → ChatWidget-3OW5LY37.js.map} +1 -1
- package/dist/ChatWidget-54GVS27I.mjs +15 -0
- package/dist/{ChatWidget-Z5QXDZP3.mjs.map → ChatWidget-54GVS27I.mjs.map} +1 -1
- package/dist/EngageWidget-7EUP76WE.mjs +12 -0
- package/dist/{EngageWidget-BKEY5TPO.mjs.map → EngageWidget-7EUP76WE.mjs.map} +1 -1
- package/dist/EngageWidget-DDP5UFA4.js +21 -0
- package/dist/{EngageWidget-VT4DYXVO.js.map → EngageWidget-DDP5UFA4.js.map} +1 -1
- package/dist/{FileField-JJN5QKDL.mjs → FileField-IQLN6E3C.mjs} +5 -5
- package/dist/{FileField-JJN5QKDL.mjs.map → FileField-IQLN6E3C.mjs.map} +1 -1
- package/dist/{FileField-62ZWZMQK.js → FileField-SBPL4JHP.js} +6 -6
- package/dist/{FileField-62ZWZMQK.js.map → FileField-SBPL4JHP.js.map} +1 -1
- package/dist/{FormSpotlight-OTFB6QM5.mjs → FormSpotlight-E2LKKHGV.mjs} +11 -7
- package/dist/FormSpotlight-E2LKKHGV.mjs.map +1 -0
- package/dist/{FormSpotlight-URS4XRS7.js → FormSpotlight-YTACNE57.js} +25 -21
- package/dist/FormSpotlight-YTACNE57.js.map +1 -0
- package/dist/{FormStage-FVKMIV73.js → FormStage-S277U2CP.js} +20 -15
- package/dist/FormStage-S277U2CP.js.map +1 -0
- package/dist/{FormStage-VPGOCMAV.mjs → FormStage-YSBN5XKL.mjs} +9 -4
- package/dist/FormStage-YSBN5XKL.mjs.map +1 -0
- package/dist/ManagedForm-I3QVRQ53.mjs +16 -0
- package/dist/{ManagedForm-CXVDJMHN.mjs.map → ManagedForm-I3QVRQ53.mjs.map} +1 -1
- package/dist/ManagedForm-TSYKQFLJ.js +25 -0
- package/dist/{ManagedForm-FGNTDGED.js.map → ManagedForm-TSYKQFLJ.js.map} +1 -1
- package/dist/{ManagedNewsletterForm-SQYB4BZU.mjs → ManagedNewsletterForm-T3YRAWKZ.mjs} +9 -7
- package/dist/ManagedNewsletterForm-T3YRAWKZ.mjs.map +1 -0
- package/dist/{ManagedNewsletterForm-3O5L44AZ.js → ManagedNewsletterForm-YSOPPKS6.js} +10 -8
- package/dist/ManagedNewsletterForm-YSOPPKS6.js.map +1 -0
- package/dist/{SignalCore-M2PKKIGH.mjs → SignalCore-PPSIQ4BW.mjs} +8 -14
- package/dist/SignalCore-PPSIQ4BW.mjs.map +1 -0
- package/dist/{SignalCore-RFBOBNLQ.js → SignalCore-SUZH3XWZ.js} +14 -20
- package/dist/SignalCore-SUZH3XWZ.js.map +1 -0
- package/dist/SitemapSync-HSHCOKCL.mjs +9 -0
- package/dist/{SitemapSync-4OVMIIGC.mjs.map → SitemapSync-HSHCOKCL.mjs.map} +1 -1
- package/dist/SitemapSync-LH6UVP4P.js +18 -0
- package/dist/{SitemapSync-RK3SQ4M2.js.map → SitemapSync-LH6UVP4P.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/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/not-found.test.d.ts +2 -0
- package/dist/blog/not-found.test.d.ts.map +1 -0
- 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/blog/site-scope.test.d.ts +2 -0
- package/dist/blog/site-scope.test.d.ts.map +1 -0
- package/dist/brand/extract-brand-profile.d.ts +36 -2
- package/dist/brand/extract-brand-profile.d.ts.map +1 -1
- package/dist/brand/extract-brand-profile.test.d.ts +2 -0
- package/dist/brand/extract-brand-profile.test.d.ts.map +1 -0
- package/dist/{chunk-3YQILJKJ.js → chunk-2FQG2AHJ.js} +60 -35
- package/dist/chunk-2FQG2AHJ.js.map +1 -0
- package/dist/{chunk-D553G64G.js → chunk-2OQWLXDO.js} +13 -13
- package/dist/{chunk-D553G64G.js.map → chunk-2OQWLXDO.js.map} +1 -1
- package/dist/{chunk-OYOO2OO5.js → chunk-2SCDUVFJ.js} +10 -10
- package/dist/{chunk-OYOO2OO5.js.map → chunk-2SCDUVFJ.js.map} +1 -1
- package/dist/{chunk-3S5JN6KL.js → chunk-35ERUUH3.js} +6 -6
- package/dist/{chunk-3S5JN6KL.js.map → chunk-35ERUUH3.js.map} +1 -1
- package/dist/{chunk-57AFHENV.mjs → chunk-3AUFD7KR.mjs} +3 -3
- package/dist/{chunk-57AFHENV.mjs.map → chunk-3AUFD7KR.mjs.map} +1 -1
- package/dist/{chunk-L7ACQ6PC.js → chunk-3BVCF4ZF.js} +4 -4
- package/dist/{chunk-L7ACQ6PC.js.map → chunk-3BVCF4ZF.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-BQGEVMIR.mjs → chunk-3SLFT453.mjs} +5 -5
- package/dist/{chunk-BQGEVMIR.mjs.map → chunk-3SLFT453.mjs.map} +1 -1
- 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-TSZIACRC.js → chunk-4OS6M3V4.js} +6 -12
- package/dist/chunk-4OS6M3V4.js.map +1 -0
- package/dist/{chunk-YKUEFRZI.js → chunk-4RY7JETY.js} +14 -14
- package/dist/{chunk-YKUEFRZI.js.map → chunk-4RY7JETY.js.map} +1 -1
- package/dist/chunk-4TLFZ6NR.mjs +16 -0
- package/dist/chunk-4TLFZ6NR.mjs.map +1 -0
- package/dist/{chunk-4B4S56WJ.mjs → chunk-5B4J3IBX.mjs} +75 -21
- package/dist/chunk-5B4J3IBX.mjs.map +1 -0
- package/dist/chunk-5O7JSWT6.js +8 -0
- package/dist/{chunk-5TXXTYXL.js.map → chunk-5O7JSWT6.js.map} +1 -1
- package/dist/chunk-5SANRSX3.mjs +17 -0
- package/dist/chunk-5SANRSX3.mjs.map +1 -0
- package/dist/{chunk-FBDHKYNF.mjs → chunk-5WGMXSCB.mjs} +3 -3
- package/dist/{chunk-FBDHKYNF.mjs.map → chunk-5WGMXSCB.mjs.map} +1 -1
- package/dist/chunk-5XFFUP6D.js +100 -0
- package/dist/chunk-5XFFUP6D.js.map +1 -0
- package/dist/{chunk-7ZX6TO6C.mjs → chunk-6HFFTGFP.mjs} +50 -26
- package/dist/chunk-6HFFTGFP.mjs.map +1 -0
- package/dist/{chunk-R2SXXFXZ.mjs → chunk-6SBTHS6C.mjs} +3 -3
- package/dist/{chunk-R2SXXFXZ.mjs.map → chunk-6SBTHS6C.mjs.map} +1 -1
- package/dist/{chunk-FO4KGPGF.js → chunk-7TC3GRXQ.js} +73 -38
- package/dist/chunk-7TC3GRXQ.js.map +1 -0
- package/dist/{chunk-XLPU3TEE.mjs → chunk-7THZOAUR.mjs} +4 -4
- package/dist/{chunk-XLPU3TEE.mjs.map → chunk-7THZOAUR.mjs.map} +1 -1
- package/dist/{chunk-MW2M6O7A.mjs → chunk-AOWJP25J.mjs} +4 -4
- package/dist/{chunk-MW2M6O7A.mjs.map → chunk-AOWJP25J.mjs.map} +1 -1
- package/dist/{chunk-UQ5YULFU.mjs → chunk-B2VFMPVJ.mjs} +4 -4
- package/dist/{chunk-UQ5YULFU.mjs.map → chunk-B2VFMPVJ.mjs.map} +1 -1
- package/dist/{chunk-JTF4DFUF.mjs → chunk-B35OJ7FR.mjs} +4 -4
- package/dist/{chunk-JTF4DFUF.mjs.map → chunk-B35OJ7FR.mjs.map} +1 -1
- package/dist/{chunk-2N27LCZH.js → chunk-BER36QXU.js} +9 -9
- package/dist/{chunk-2N27LCZH.js.map → chunk-BER36QXU.js.map} +1 -1
- package/dist/{chunk-47XQWV4S.mjs → chunk-BFZNLTWK.mjs} +3 -3
- package/dist/{chunk-47XQWV4S.mjs.map → chunk-BFZNLTWK.mjs.map} +1 -1
- package/dist/chunk-BQP6JIE2.mjs +28 -0
- package/dist/chunk-BQP6JIE2.mjs.map +1 -0
- package/dist/{chunk-KXGD4E7G.js → chunk-C3WU45JT.js} +7 -7
- package/dist/{chunk-KXGD4E7G.js.map → chunk-C3WU45JT.js.map} +1 -1
- package/dist/chunk-CUNZAD46.js +53 -0
- package/dist/chunk-CUNZAD46.js.map +1 -0
- 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-NOU3JQJK.js → chunk-EIW6YEPY.js} +8 -8
- package/dist/{chunk-NOU3JQJK.js.map → chunk-EIW6YEPY.js.map} +1 -1
- package/dist/{chunk-RCSTDJUH.js → chunk-F6SKG34N.js} +8 -13
- package/dist/chunk-F6SKG34N.js.map +1 -0
- 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-BFM5PEFV.js → chunk-GNDWTXLU.js} +56 -177
- package/dist/chunk-GNDWTXLU.js.map +1 -0
- package/dist/{chunk-OZ3FU4BT.js → chunk-H5NBFNND.js} +2 -2
- package/dist/chunk-H5NBFNND.js.map +1 -0
- package/dist/{chunk-RNAGCAIB.js → chunk-HAKD27AZ.js} +7 -7
- package/dist/{chunk-RNAGCAIB.js.map → chunk-HAKD27AZ.js.map} +1 -1
- package/dist/chunk-HCN3IKMW.mjs +106 -0
- package/dist/chunk-HCN3IKMW.mjs.map +1 -0
- package/dist/{chunk-V5THCFPG.mjs → chunk-HCX343AS.mjs} +4 -4
- package/dist/{chunk-V5THCFPG.mjs.map → chunk-HCX343AS.mjs.map} +1 -1
- package/dist/{chunk-TDJKGN5Q.mjs → chunk-HEOQT5SM.mjs} +216 -103
- package/dist/chunk-HEOQT5SM.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-ELQ4SRRR.js → chunk-HQOHB6QF.js} +15 -15
- package/dist/{chunk-ELQ4SRRR.js.map → chunk-HQOHB6QF.js.map} +1 -1
- package/dist/chunk-HRMGITUZ.mjs +6 -0
- package/dist/{chunk-QRBPT6Z6.mjs.map → chunk-HRMGITUZ.mjs.map} +1 -1
- package/dist/{chunk-JQ7M6CVL.mjs → chunk-HYVEIP2N.mjs} +3 -3
- package/dist/{chunk-JQ7M6CVL.mjs.map → chunk-HYVEIP2N.mjs.map} +1 -1
- package/dist/{chunk-H6YVT3BL.js → chunk-I3ND4XYW.js} +12 -9
- package/dist/chunk-I3ND4XYW.js.map +1 -0
- package/dist/{chunk-4UVM7E2W.js → chunk-JDTU2RWC.js} +3 -3
- package/dist/{chunk-4UVM7E2W.js.map → chunk-JDTU2RWC.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-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-C563AHZZ.mjs → chunk-L24RDT6Q.mjs} +3 -3
- package/dist/{chunk-C563AHZZ.mjs.map → chunk-L24RDT6Q.mjs.map} +1 -1
- package/dist/{chunk-FEWWGEQF.js → chunk-LBZGYF3B.js} +4 -4
- package/dist/{chunk-FEWWGEQF.js.map → chunk-LBZGYF3B.js.map} +1 -1
- package/dist/{chunk-CPY74A4F.js → chunk-LMEUYRRR.js} +72 -106
- package/dist/chunk-LMEUYRRR.js.map +1 -0
- 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-YYDZ2TYR.js → chunk-MHX6TOAS.js} +3 -3
- package/dist/{chunk-YYDZ2TYR.js.map → chunk-MHX6TOAS.js.map} +1 -1
- package/dist/chunk-MLVHVKFT.mjs +148 -0
- package/dist/chunk-MLVHVKFT.mjs.map +1 -0
- package/dist/{chunk-M5GY2AI3.mjs → chunk-N2NZBPQ5.mjs} +4 -10
- package/dist/chunk-N2NZBPQ5.mjs.map +1 -0
- package/dist/chunk-NRBITVDK.js +114 -0
- package/dist/chunk-NRBITVDK.js.map +1 -0
- package/dist/{chunk-O2VJZOR2.mjs → chunk-O4YBWJHP.mjs} +6 -11
- package/dist/chunk-O4YBWJHP.mjs.map +1 -0
- package/dist/{chunk-BUJWXSYZ.mjs → chunk-O5ZSGBQD.mjs} +4 -4
- package/dist/{chunk-BUJWXSYZ.mjs.map → chunk-O5ZSGBQD.mjs.map} +1 -1
- package/dist/{chunk-TP7H6BSK.mjs → chunk-OE7CTIOU.mjs} +73 -30
- package/dist/chunk-OE7CTIOU.mjs.map +1 -0
- 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-Q7347KP6.mjs → chunk-PK2OTGW5.mjs} +6 -12
- package/dist/chunk-PK2OTGW5.mjs.map +1 -0
- package/dist/{chunk-H65OX263.js → chunk-PRTXAIIC.js} +15 -15
- package/dist/{chunk-H65OX263.js.map → chunk-PRTXAIIC.js.map} +1 -1
- package/dist/{chunk-ABZGEHTC.mjs → chunk-PUAXHYBL.mjs} +3 -3
- package/dist/{chunk-ABZGEHTC.mjs.map → chunk-PUAXHYBL.mjs.map} +1 -1
- package/dist/chunk-QRHVMTHF.mjs +94 -0
- package/dist/chunk-QRHVMTHF.mjs.map +1 -0
- package/dist/{chunk-JTCQJKJE.js → chunk-QTJTDQYR.js} +76 -111
- package/dist/chunk-QTJTDQYR.js.map +1 -0
- package/dist/{chunk-HBN4A2N4.mjs → chunk-QVHVL7EX.mjs} +3 -3
- package/dist/{chunk-HBN4A2N4.mjs.map → chunk-QVHVL7EX.mjs.map} +1 -1
- package/dist/chunk-R7GHP3FY.js +81 -0
- package/dist/chunk-R7GHP3FY.js.map +1 -0
- package/dist/{chunk-P4TB4ROG.js → chunk-SEP5D4MI.js} +8 -2
- package/dist/chunk-SEP5D4MI.js.map +1 -0
- package/dist/{chunk-3CLP35TT.mjs → chunk-TXMVU4EY.mjs} +62 -97
- package/dist/chunk-TXMVU4EY.mjs.map +1 -0
- package/dist/{chunk-L4V6TKMJ.mjs → chunk-U2V542EO.mjs} +7 -3
- package/dist/chunk-U2V542EO.mjs.map +1 -0
- package/dist/{chunk-4WBTM6YE.js → chunk-UWHCHYCX.js} +4 -4
- package/dist/{chunk-4WBTM6YE.js.map → chunk-UWHCHYCX.js.map} +1 -1
- package/dist/{chunk-JNAXDFC4.mjs → chunk-VJ74275U.mjs} +38 -156
- package/dist/chunk-VJ74275U.mjs.map +1 -0
- package/dist/{chunk-H7274TKR.mjs → chunk-VJV7WUR2.mjs} +12 -4
- package/dist/chunk-VJV7WUR2.mjs.map +1 -0
- package/dist/{chunk-4A5V73SR.mjs → chunk-VYL6IHJA.mjs} +9 -9
- package/dist/{chunk-4A5V73SR.mjs.map → chunk-VYL6IHJA.mjs.map} +1 -1
- package/dist/{chunk-5B4FABFK.js → chunk-WS7MH3GD.js} +14 -2
- package/dist/chunk-WS7MH3GD.js.map +1 -0
- 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-F3AKYZOH.js → chunk-XCYKM2SA.js} +6 -13
- package/dist/chunk-XCYKM2SA.js.map +1 -0
- 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-C4PZ2R3B.js → chunk-YECDJDDD.js} +10 -10
- package/dist/{chunk-C4PZ2R3B.js.map → chunk-YECDJDDD.js.map} +1 -1
- package/dist/chunk-YN7QHLWF.js +19 -0
- package/dist/chunk-YN7QHLWF.js.map +1 -0
- package/dist/chunk-YU7QZ3PP.mjs +45 -0
- package/dist/chunk-YU7QZ3PP.mjs.map +1 -0
- package/dist/{chunk-VFGEY6FJ.js → chunk-ZEOC26LZ.js} +223 -110
- package/dist/chunk-ZEOC26LZ.js.map +1 -0
- 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/agent/sitemap-trailing-slash.test.d.ts +2 -0
- package/dist/cli/agent/sitemap-trailing-slash.test.d.ts.map +1 -0
- 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 -322
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +604 -243
- package/dist/cli/index.mjs.map +1 -1
- 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/discount-checkout.test.d.ts +2 -0
- package/dist/commerce/discount-checkout.test.d.ts.map +1 -0
- 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-interactions.test.d.ts +8 -0
- package/dist/forms/field-interactions.test.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/field-rules.test.d.ts +8 -0
- package/dist/forms/field-rules.test.d.ts.map +1 -0
- package/dist/forms/form-field-focus.test.d.ts +8 -0
- package/dist/forms/form-field-focus.test.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/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/links.test.d.ts +2 -0
- package/dist/llms/links.test.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/motion/gsap.test.d.ts +2 -0
- package/dist/motion/gsap.test.d.ts.map +1 -0
- 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/route.test.d.ts +2 -0
- package/dist/og/route.test.d.ts.map +1 -0
- 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/proxy/llms-discovery.test.d.ts +2 -0
- package/dist/proxy/llms-discovery.test.d.ts.map +1 -0
- 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/index.test.d.ts +2 -0
- package/dist/redirects/index.test.d.ts.map +1 -0
- 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/getManagedMetadata.test.d.ts +2 -0
- package/dist/seo/getManagedMetadata.test.d.ts.map +1 -0
- 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/managed-schema-filter.test.d.ts +2 -0
- package/dist/seo/managed-schema-filter.test.d.ts.map +1 -0
- 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 -56
- package/dist/seo/register-sitemap-cli.js.map +1 -1
- package/dist/seo/register-sitemap-cli.mjs +269 -52
- package/dist/seo/register-sitemap-cli.mjs.map +1 -1
- package/dist/seo/register-sitemap-request.d.ts +36 -0
- package/dist/seo/register-sitemap-request.d.ts.map +1 -0
- package/dist/seo/register-sitemap-request.test.d.ts +2 -0
- package/dist/seo/register-sitemap-request.test.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/schema-filter.test.d.ts +2 -0
- package/dist/seo/schema-filter.test.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/site-scope.test.d.ts +2 -0
- package/dist/seo/site-scope.test.d.ts.map +1 -0
- 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/seo-meta/contract.test.d.ts +2 -0
- package/dist/seo-meta/contract.test.d.ts.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/fresh-fetch.test.d.ts +2 -0
- package/dist/shared/fresh-fetch.test.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/page-leave.test.d.ts +2 -0
- package/dist/shared/page-leave.test.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/source-graph.test.d.ts +2 -0
- package/dist/shared/source-graph.test.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/sitemap/trailing-slash.test.d.ts +2 -0
- package/dist/sitemap/trailing-slash.test.d.ts.map +1 -0
- 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 +20 -0
- package/dist/writeLLMsTxt-CQ7A4AAL.js.map +1 -0
- package/dist/writeLLMsTxt-NX5MSPYX.mjs +11 -0
- package/dist/writeLLMsTxt-NX5MSPYX.mjs.map +1 -0
- package/package.json +8 -3
- 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/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-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-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-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-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/discover-FGTKWOL3.mjs +0 -4
- package/dist/discover-NJZPWTDL.js +0 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/seo/register-sitemap-cli.ts","../../src/brand/extract-brand-profile.ts","../../src/seo/register-sitemap-cli-impl.ts"],"names":["cwd","path","dotenvConfig"],"mappings":"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","file":"register-sitemap-cli.mjs","sourcesContent":["#!/usr/bin/env node\n/**\n * CLI script to register sitemap entries at build time\n *\n * Usage:\n * npx sonor-register-sitemap\n * npx sonor-register-sitemap --auto-discover\n * npx sonor-register-sitemap --no-optimize # Skip Signal AI meta optimization\n * npx sonor-register-sitemap --auto-discover --full-replace # Prune removed pages (pure-static sites only)\n *\n * Or in package.json:\n * {\n * \"scripts\": {\n * \"postbuild\": \"sonor-register-sitemap --auto-discover\"\n * }\n * }\n *\n * SAFETY: --auto-discover self-skips when the app has an app/sitemap.{ts,js}\n * route (createSitemap owns authoritative build-time sync, and site-kit's\n * runtime SitemapSync mirrors it) — so this line is safe to leave in any\n * postbuild. When it does run (no sitemap route), it syncs ADDITIVELY: a\n * filesystem scan can't see dynamic routes, so it must never delete. Pass\n * --full-replace to prune removed pages on a pure-static site that wants it.\n */\n\nimport path from 'path'\nimport { config as dotenvConfig } from 'dotenv'\nimport { registerLocalSitemap } from './register-sitemap-cli-impl'\n\n// npm postbuild runs outside Next.js — env from .env* is not loaded automatically\nconst cwd = process.cwd()\ndotenvConfig({ path: path.join(cwd, '.env') })\ndotenvConfig({ path: path.join(cwd, '.env.local'), override: true })\nif (process.env.NODE_ENV === 'production') {\n dotenvConfig({ path: path.join(cwd, '.env.production') })\n dotenvConfig({ path: path.join(cwd, '.env.production.local'), override: true })\n}\n\nasync function main() {\n const args = process.argv.slice(2)\n const autoDiscover = args.includes('--auto-discover') || args.includes('-a')\n const skipOptimize = args.includes('--no-optimize') || args.includes('--skip-optimize')\n // Opt-in: prune pages missing from the discovered set. Only honored on\n // pure-static sites with no sitemap route (a filesystem scan is otherwise\n // incomplete — see register-sitemap-cli-impl for why full-replace is unsafe).\n const fullReplace = args.includes('--full-replace')\n\n console.log('[Sonor] Registering sitemap entries...')\n\n try {\n const result = await registerLocalSitemap({\n autoDiscover,\n optimize_meta: !skipOptimize,\n ...(fullReplace ? { mode: 'full-replace' as const } : {}),\n })\n\n if (result.skipped) {\n // A sitemap route already owns build-time sync — nothing to report.\n process.exit(0)\n }\n\n if (result.success) {\n console.log(`[Sonor] ✓ Sitemap registered successfully`)\n console.log(`[Sonor] Created: ${result.created}`)\n console.log(`[Sonor] Updated: ${result.updated}`)\n if (result.removed !== undefined && result.removed > 0) {\n console.log(`[Sonor] Removed: ${result.removed}`)\n }\n if (result.meta_optimization?.triggered) {\n console.log(`[Sonor] ✓ Signal AI meta optimization triggered for ${result.meta_optimization.pages_queued} pages`)\n console.log(`[Sonor] (Running in background - check Portal SEO module for results)`)\n }\n process.exit(0)\n } else {\n console.error('[Sonor] ✗ Failed to register sitemap')\n process.exit(1)\n }\n } catch (error) {\n console.error('[Sonor] ✗ Error:', error)\n process.exit(1)\n }\n}\n\nmain()\n","/**\n * Brand Profile Extraction\n *\n * Extracts the visual design DNA from a Next.js project's source files:\n * - globals.css: CSS custom properties (colors, fonts, theme)\n * - tailwind.config.js/ts: extended colors, fontFamily\n * - design-system.ts: explicit color palettes (if present)\n *\n * The extracted profile is pushed to Sonor alongside sitemap registration,\n * giving Signal AI full brand awareness for image generation, blog context,\n * and portfolio design decisions.\n *\n * This is static file analysis (regex, not AST) — runs at build time in Node.\n */\n\nimport fs from 'fs'\nimport path from 'path'\n\nexport interface BrandProfile {\n colors: {\n primary?: string\n secondary?: string\n accent?: string\n background?: string\n surface?: string\n text?: string\n gradient?: string\n }\n typography: {\n heading?: string\n body?: string\n mono?: string\n }\n theme: 'dark' | 'light'\n style_keywords: string[]\n border_radius?: string\n captured_at: string\n}\n\n/**\n * Detect whether a hex color is \"dark\" (luminance < 0.5)\n */\nfunction isDarkColor(hex: string): boolean {\n const c = hex.replace('#', '')\n if (c.length < 6) return false\n const r = parseInt(c.substring(0, 2), 16) / 255\n const g = parseInt(c.substring(2, 4), 16) / 255\n const b = parseInt(c.substring(4, 6), 16) / 255\n // Relative luminance (ITU-R BT.709)\n const luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b\n return luminance < 0.35\n}\n\n/**\n * Extract CSS custom properties from a CSS file's :root block\n */\nfunction extractCssVariables(css: string): Record<string, string> {\n const vars: Record<string, string> = {}\n // Match :root { ... } blocks (may be multiple)\n const rootBlocks = css.match(/:root\\s*\\{[^}]+\\}/g)\n if (!rootBlocks) return vars\n\n for (const block of rootBlocks) {\n const matches = block.matchAll(/--([a-zA-Z0-9_-]+)\\s*:\\s*([^;]+)/g)\n for (const m of matches) {\n const name = m[1].trim()\n const value = m[2].trim()\n // Skip var() references and rgb() values — we want hex/named colors\n if (!value.startsWith('var(')) {\n vars[name] = value\n }\n }\n }\n return vars\n}\n\n/**\n * Try to find the \"primary\" brand color from CSS variables\n */\nfunction findColor(vars: Record<string, string>, ...keys: string[]): string | undefined {\n for (const key of keys) {\n const val = vars[key]\n if (val && val.startsWith('#')) return val\n }\n return undefined\n}\n\n/**\n * Extract font family from CSS variable or Tailwind config\n */\nfunction extractFontFromCss(vars: Record<string, string>, ...keys: string[]): string | undefined {\n for (const key of keys) {\n const val = vars[key]\n if (val) {\n // Extract first font name: \"'Inter', system-ui\" -> \"Inter\"\n const match = val.match(/['\"]?([A-Za-z][A-Za-z0-9 _-]+)['\"]?/)\n return match?.[1]?.trim()\n }\n }\n return undefined\n}\n\n/**\n * Extract from Tailwind config — reads as text, uses regex (no require/import)\n */\nfunction extractFromTailwindConfig(configPath: string): {\n colors: Record<string, string>\n fonts: Record<string, string>\n} {\n const colors: Record<string, string> = {}\n const fonts: Record<string, string> = {}\n\n if (!fs.existsSync(configPath)) return { colors, fonts }\n\n const content = fs.readFileSync(configPath, 'utf-8')\n\n // Extract fontFamily entries: fontFamily: { sans: ['var(--font-satoshi)', ...] }\n const fontMatches = content.matchAll(/(?:fontFamily|font-family)\\s*:\\s*\\{([^}]+)\\}/g)\n for (const m of fontMatches) {\n const block = m[1]\n // Match: sans: ['Satoshi', ...] or sans: ['var(--font-satoshi)', ...]\n const entries = block.matchAll(/(\\w+)\\s*:\\s*\\[([^\\]]+)\\]/g)\n for (const e of entries) {\n const key = e[1] // sans, serif, mono\n const values = e[2]\n // Extract first real font name (not var())\n const varMatch = values.match(/var\\(--font-([a-z0-9-]+)\\)/)\n if (varMatch) {\n fonts[key] = varMatch[1].charAt(0).toUpperCase() + varMatch[1].slice(1) // capitalize\n } else {\n const nameMatch = values.match(/['\"]([A-Za-z][A-Za-z0-9 -]+)['\"]/)\n if (nameMatch) fonts[key] = nameMatch[1]\n }\n }\n }\n\n return { colors, fonts }\n}\n\n/**\n * Extract from design-system.ts if it exists\n */\nfunction extractFromDesignSystem(filePath: string): {\n primary?: string\n secondary?: string\n accent?: string\n gradient?: string\n} {\n if (!fs.existsSync(filePath)) return {}\n\n const content = fs.readFileSync(filePath, 'utf-8')\n\n // Look for default/fallback color definitions\n const result: Record<string, string> = {}\n\n // Match: primary: '#54b948'\n const colorMatches = content.matchAll(/(primary|secondary|accent)\\s*:\\s*['\"]([#a-fA-F0-9]+)['\"]/g)\n for (const m of colorMatches) {\n // Take the LAST match (usually the default/fallback)\n result[m[1]] = m[2]\n }\n\n // Match gradient: 'linear-gradient(...)'\n const gradientMatch = content.match(/gradient(?:Css)?\\s*:\\s*['\"]([^'\"]+)['\"]/)\n if (gradientMatch) {\n result.gradient = gradientMatch[1]\n }\n\n return result\n}\n\n/**\n * Infer style keywords from the extracted data\n */\nfunction inferStyleKeywords(\n theme: 'dark' | 'light',\n vars: Record<string, string>,\n tailwindContent?: string,\n): string[] {\n const keywords: string[] = []\n\n keywords.push(theme === 'dark' ? 'dark' : 'light')\n keywords.push('modern')\n\n // Check for specific patterns\n if (tailwindContent) {\n if (tailwindContent.includes('backdrop-blur') || tailwindContent.includes('glass')) keywords.push('glass')\n if (tailwindContent.includes('gradient')) keywords.push('gradient')\n if (tailwindContent.includes('rounded-full') || tailwindContent.includes('rounded-3xl')) keywords.push('rounded')\n if (tailwindContent.includes('animate-') || tailwindContent.includes('framer-motion')) keywords.push('animated')\n }\n\n // Check font styles\n const allVars = Object.values(vars).join(' ').toLowerCase()\n if (allVars.includes('mono') || allVars.includes('code') || allVars.includes('jetbrains')) keywords.push('tech')\n if (allVars.includes('serif') || allVars.includes('georgia') || allVars.includes('playfair')) keywords.push('editorial')\n\n return [...new Set(keywords)]\n}\n\n/**\n * Main extraction function — scans the project directory\n */\nexport function extractBrandProfile(projectDir?: string): BrandProfile | null {\n const cwd = projectDir || process.cwd()\n\n // Find globals.css\n const globalsLocations = [\n path.join(cwd, 'app', 'globals.css'),\n path.join(cwd, 'src', 'app', 'globals.css'),\n path.join(cwd, 'styles', 'globals.css'),\n ]\n\n let cssVars: Record<string, string> = {}\n let globalsCss = ''\n for (const loc of globalsLocations) {\n if (fs.existsSync(loc)) {\n globalsCss = fs.readFileSync(loc, 'utf-8')\n cssVars = extractCssVariables(globalsCss)\n break\n }\n }\n\n // Find tailwind config\n const tailwindLocations = [\n path.join(cwd, 'tailwind.config.js'),\n path.join(cwd, 'tailwind.config.ts'),\n path.join(cwd, 'tailwind.config.mjs'),\n ]\n\n let tailwindResult = { colors: {} as Record<string, string>, fonts: {} as Record<string, string> }\n let tailwindContent = ''\n for (const loc of tailwindLocations) {\n if (fs.existsSync(loc)) {\n tailwindContent = fs.readFileSync(loc, 'utf-8')\n tailwindResult = extractFromTailwindConfig(loc)\n break\n }\n }\n\n // Find design-system.ts\n const designSystemLocations = [\n path.join(cwd, 'design-system.ts'),\n path.join(cwd, 'src', 'design-system.ts'),\n path.join(cwd, 'lib', 'design-system.ts'),\n ]\n\n let designSystem: ReturnType<typeof extractFromDesignSystem> = {}\n for (const loc of designSystemLocations) {\n if (fs.existsSync(loc)) {\n designSystem = extractFromDesignSystem(loc)\n break\n }\n }\n\n // If we found nothing at all, skip\n if (Object.keys(cssVars).length === 0 && !tailwindContent && Object.keys(designSystem).length === 0) {\n return null\n }\n\n // === Build the profile ===\n\n // Colors — priority: CSS vars > design-system > tailwind\n const primary = findColor(cssVars,\n 'color-accent', 'sk-primary', 'color-primary', 'color-brand', 'brand-primary',\n ) || designSystem.primary\n\n const secondary = findColor(cssVars,\n 'color-accent-dark', 'sk-secondary', 'color-secondary',\n ) || designSystem.secondary\n\n const accent = findColor(cssVars,\n 'color-accent-light', 'sk-accent', 'color-accent-light',\n ) || designSystem.accent\n\n const background = findColor(cssVars,\n 'color-charcoal', 'sk-bg', 'color-bg', 'color-background',\n 'background', 'bg',\n )\n\n const surface = findColor(cssVars,\n 'color-charcoal-light', 'sk-surface', 'color-surface', 'sk-bg-elevated',\n )\n\n const textColor = findColor(cssVars,\n 'sk-text-primary', 'color-text', 'color-text-primary',\n )\n\n const gradient = designSystem.gradient || undefined\n\n // Typography — priority: tailwind fontFamily > CSS vars\n const headingFont = tailwindResult.fonts.sans || tailwindResult.fonts.heading ||\n extractFontFromCss(cssVars, 'font-heading', 'font-display', 'font-sans')\n const bodyFont = tailwindResult.fonts.sans || tailwindResult.fonts.body ||\n extractFontFromCss(cssVars, 'font-body', 'font-sans')\n const monoFont = tailwindResult.fonts.mono ||\n extractFontFromCss(cssVars, 'font-mono', 'font-code')\n\n // Theme detection — check if background is dark\n const theme: 'dark' | 'light' = (background && isDarkColor(background)) ? 'dark' :\n globalsCss.includes('.dark') || globalsCss.includes('dark:') ? 'dark' : 'light'\n\n // Style keywords\n const styleKeywords = inferStyleKeywords(theme, cssVars, tailwindContent + globalsCss)\n\n // Border radius — look for common patterns\n const radiusMatch = globalsCss.match(/border-radius\\s*:\\s*([^;]+)/) ||\n tailwindContent.match(/borderRadius\\s*:\\s*\\{[^}]*DEFAULT\\s*:\\s*['\"]([^'\"]+)['\"]/)\n const borderRadius = radiusMatch?.[1]?.trim()\n\n const profile: BrandProfile = {\n colors: {\n ...(primary && { primary }),\n ...(secondary && { secondary }),\n ...(accent && { accent }),\n ...(background && { background }),\n ...(surface && { surface }),\n ...(textColor && { text: textColor }),\n ...(gradient && { gradient }),\n },\n typography: {\n ...(headingFont && { heading: headingFont }),\n ...(bodyFont && { body: bodyFont }),\n ...(monoFont && { mono: monoFont }),\n },\n theme,\n style_keywords: styleKeywords,\n ...(borderRadius && { border_radius: borderRadius }),\n captured_at: new Date().toISOString(),\n }\n\n // Only return if we got meaningful data\n const hasColors = Object.keys(profile.colors).length > 0\n const hasTypography = Object.keys(profile.typography).length > 0\n\n if (!hasColors && !hasTypography) return null\n\n return profile\n}\n\n/**\n * Push brand profile to Sonor API\n */\nexport async function pushBrandProfile(profile: BrandProfile): Promise<boolean> {\n const apiUrl = process.env.SONOR_API_URL || 'https://api.sonor.io'\n const apiKey = process.env.SONOR_API_KEY || ''\n\n if (!apiKey) {\n console.warn('[Sonor] No API key — skipping brand profile push')\n return false\n }\n\n try {\n const response = await fetch(`${apiUrl}/api/public/seo/brand-profile`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n },\n body: JSON.stringify(profile),\n })\n\n if (!response.ok) {\n console.warn(`[Sonor] Brand profile push failed: ${response.status}`)\n return false\n }\n\n const result = await response.json()\n console.log(`[Sonor] Brand profile pushed: theme=${profile.theme}, ${Object.keys(profile.colors).length} colors`)\n return result.success\n } catch (err) {\n console.warn(`[Sonor] Brand profile push error: ${err}`)\n return false\n }\n}\n","/**\n * Standalone implementation for the sonor-register-sitemap CLI.\n * Does NOT import from server-api or routing, so it can run in Node without\n * pulling in server-only (which throws when required outside Next.js server context).\n *\n * Route discovery + page classification live in `../sitemap/discover` and\n * `../sitemap/shared` (shared with createSitemap, SitemapSync, and the routing\n * helper) — see those files for the sitemap-oscillation background.\n */\n\nimport path from 'path'\nimport { extractBrandProfile, pushBrandProfile } from '../brand/extract-brand-profile'\nimport { inferPageType } from '../sitemap/shared'\nimport {\n discoverNextJsRoutes,\n findAppDirForDiscovery,\n findSitemapRoute,\n} from '../sitemap/discover'\n\nfunction getApiConfig(): { apiUrl: string; apiKey: string } {\n const apiUrl =\n process.env.SONOR_API_URL ||\n 'https://api.sonor.io'\n const apiKey =\n process.env.SONOR_API_KEY ||\n ''\n return { apiUrl, apiKey }\n}\n\nasync function registerSitemapViaApi(\n entries: Array<{\n path: string\n title?: string\n priority?: number\n changefreq?: string\n description?: string\n pageType?: string\n }>,\n optimizeMeta: boolean,\n mode: 'additive' | 'full-replace',\n): Promise<{\n success: boolean\n created: number\n updated: number\n removed?: number\n meta_optimization?: { triggered: boolean; pages_queued: number } | null\n}> {\n const { apiUrl, apiKey } = getApiConfig()\n if (!apiKey) {\n console.warn(\n '[Sonor] No API key (SONOR_API_KEY)',\n )\n return { success: false, created: 0, updated: 0 }\n }\n\n try {\n const response = await fetch(`${apiUrl}/api/public/seo/register-sitemap`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n },\n body: JSON.stringify({ entries, optimize_meta: optimizeMeta, mode }),\n })\n\n if (!response.ok) {\n console.error(`[Sonor] Sitemap registration failed: ${response.status} ${response.statusText}`)\n return { success: false, created: 0, updated: 0 }\n }\n\n return await response.json()\n } catch (error) {\n console.error('[Sonor] Sitemap registration error:', error)\n return { success: false, created: 0, updated: 0 }\n }\n}\n\nexport type RegisterLocalSitemapOptions = {\n entries?: Array<{\n path: string\n title?: string\n priority?: number\n changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never'\n description?: string\n pageType?: string\n }>\n autoDiscover?: boolean\n optimize_meta?: boolean\n /**\n * Sync mode. Defaults to `'additive'` for auto-discovered route sets — a\n * filesystem scan is structurally incomplete (it can't enumerate dynamic\n * route params and ignores the app's sitemap exclude config), so it must\n * never drive a `'full-replace'` that would delete the pages it can't see.\n * Pure-static sites that want removed pages pruned can opt back in with\n * `'full-replace'`.\n */\n mode?: 'additive' | 'full-replace'\n}\n\nexport type RegisterLocalSitemapResult = {\n success: boolean\n created: number\n updated: number\n removed?: number\n /** True when the sync was intentionally skipped (a sitemap route owns it). */\n skipped?: boolean\n meta_optimization?: {\n triggered: boolean\n pages_queued: number\n } | null\n}\n\nexport async function registerLocalSitemap(\n options: RegisterLocalSitemapOptions\n): Promise<RegisterLocalSitemapResult> {\n let entries = options.entries || []\n const usingAutoDiscover = !!options.autoDiscover && entries.length === 0\n\n let result: RegisterLocalSitemapResult\n\n // SAFETY GUARD: never let a filesystem scan fight an authoritative sitemap.\n // If the app has a Next.js sitemap route (app/sitemap.{ts,js}, which\n // createSitemap syncs as a full-replace, and which site-kit's runtime\n // SitemapSync mirrors additively), an --auto-discover full-replace from an\n // incomplete fs scan would delete every dynamic-route page on every build and\n // the two syncs would oscillate — destroying managed metadata, Signal\n // optimizations, LLM schemas, and GSC history. Skip and let the route own it.\n const sitemapRoute = usingAutoDiscover ? findSitemapRoute() : null\n\n if (sitemapRoute) {\n console.warn(\n `[Sonor] Skipping --auto-discover: ${sitemapRoute} already handles build-time ` +\n `sitemap sync, and its /sitemap.xml is mirrored to Sonor at runtime. A ` +\n `filesystem scan can't see dynamic routes, so syncing it here would delete ` +\n `real pages and fight the route on every build. Nothing to do — this line ` +\n `is safe to leave in your postbuild.`,\n )\n result = { success: true, created: 0, updated: 0, skipped: true }\n } else {\n if (usingAutoDiscover) {\n const appDir = findAppDirForDiscovery()\n if (appDir) {\n entries = discoverNextJsRoutes(appDir)\n console.log(`[Sonor] Auto-discovered ${entries.length} routes from ${path.relative(process.cwd(), appDir)}`)\n }\n }\n\n if (entries.length === 0) {\n console.warn('[Sonor] No sitemap entries to register')\n result = { success: true, created: 0, updated: 0 }\n } else {\n // Auto-discovered sets are additive by default (incomplete → never delete).\n // Explicit entry lists keep the caller-provided mode, defaulting to\n // full-replace only when the caller asserts a complete set via `mode`.\n const mode: 'additive' | 'full-replace' =\n options.mode ?? (usingAutoDiscover ? 'additive' : 'full-replace')\n\n console.log(`[Sonor] Registering ${entries.length} sitemap entries (mode: ${mode})...`)\n const payload = entries.map((e) => ({\n path: e.path,\n title: e.title,\n priority: e.priority,\n changefreq: e.changefreq,\n ...(e.description ? { description: e.description } : {}),\n pageType: e.pageType ?? inferPageType(e.path),\n }))\n result = await registerSitemapViaApi(\n payload,\n options.optimize_meta !== false,\n mode,\n )\n\n if (result.success) {\n console.log(`[Sonor] Sitemap registered: ${result.created} new, ${result.updated} updated`)\n }\n }\n }\n\n // Push brand profile whenever the CLI did real work — a sync ran, or we\n // skipped because a sitemap route owns the sync — but not on the degenerate\n // \"nothing to register\" path (preserving prior behavior). It's an independent\n // side effect (a separate endpoint), so it must survive the skip path: keeping\n // the postbuild line shouldn't silently stop refreshing brand awareness.\n // Fire-and-forget, non-blocking.\n const didMeaningfulWork = result.skipped === true || entries.length > 0\n if (result.success && didMeaningfulWork) {\n try {\n const brandProfile = extractBrandProfile()\n if (brandProfile) {\n await pushBrandProfile(brandProfile)\n }\n } catch (brandErr) {\n // Non-fatal — brand profile is supplementary\n console.debug(`[Sonor] Brand profile extraction skipped: ${brandErr}`)\n }\n }\n\n return result\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/seo/register-sitemap-cli.ts","../../src/brand/extract-brand-profile.ts","../../src/seo/register-sitemap-cli-impl.ts"],"names":["main","cwd","path","dotenvConfig"],"mappings":"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","file":"register-sitemap-cli.mjs","sourcesContent":["#!/usr/bin/env node\n/**\n * CLI script to register sitemap entries at build time\n *\n * Usage:\n * npx sonor-register-sitemap\n * npx sonor-register-sitemap --auto-discover\n * npx sonor-register-sitemap --no-optimize # Skip Signal AI meta optimization\n * npx sonor-register-sitemap --auto-discover --full-replace # Prune removed pages (pure-static sites only)\n * npx sonor-register-sitemap --auto-discover --brand-profile # Also push the brand profile (opt-in)\n * npx sonor-register-sitemap --write-llms # Also write public/llms.txt (no 60s route ceiling here)\n * npx sonor-register-sitemap --write-llms-full # ...and public/llms-full.txt\n * npx sonor-register-sitemap --auto-discover --site ohiopowerstudies.com # Tag the pages with a sub-site host\n *\n * The sub-site host defaults to NEXT_PUBLIC_SITE_URL's (from .env / .env.local),\n * so a multi-site project's microsites tag their pages with no flag.\n *\n * Or in package.json:\n * {\n * \"scripts\": {\n * \"postbuild\": \"sonor-register-sitemap --auto-discover\"\n * }\n * }\n *\n * SAFETY: --auto-discover self-skips when the app has an app/sitemap.{ts,js}\n * route (createSitemap owns authoritative build-time sync, and site-kit's\n * runtime SitemapSync mirrors it) — so this line is safe to leave in any\n * postbuild. When it does run (no sitemap route), it syncs ADDITIVELY: a\n * filesystem scan can't see dynamic routes, so it must never delete. Pass\n * --full-replace to prune removed pages on a pure-static site that wants it.\n */\n\nimport path from 'path'\nimport { config as dotenvConfig } from 'dotenv'\nimport { registerLocalSitemap } from './register-sitemap-cli-impl'\n\n// npm postbuild runs outside Next.js — env from .env* is not loaded automatically\nconst cwd = process.cwd()\ndotenvConfig({ path: path.join(cwd, '.env') })\ndotenvConfig({ path: path.join(cwd, '.env.local'), override: true })\nif (process.env.NODE_ENV === 'production') {\n dotenvConfig({ path: path.join(cwd, '.env.production') })\n dotenvConfig({ path: path.join(cwd, '.env.production.local'), override: true })\n}\n\nasync function main() {\n const args = process.argv.slice(2)\n const autoDiscover = args.includes('--auto-discover') || args.includes('-a')\n const skipOptimize = args.includes('--no-optimize') || args.includes('--skip-optimize')\n // Opt-in: prune pages missing from the discovered set. Only honored on\n // pure-static sites with no sitemap route (a filesystem scan is otherwise\n // incomplete — see register-sitemap-cli-impl for why full-replace is unsafe).\n const fullReplace = args.includes('--full-replace')\n // Opt-in: extract the brand profile from the site's CSS and push it too.\n const brandProfile = args.includes('--brand-profile')\n // Opt-in: write public/llms.txt here, where no 60s route ceiling applies.\n const writeLlmsFull = args.includes('--write-llms-full')\n const writeLlms = writeLlmsFull || args.includes('--write-llms')\n // Sub-site host for multi-site projects: `--site host` or `--site=host`.\n const siteFlag = args.findIndex((a) => a === '--site' || a.startsWith('--site='))\n const site =\n siteFlag === -1\n ? undefined\n : args[siteFlag].includes('=')\n ? args[siteFlag].slice('--site='.length)\n : args[siteFlag + 1]\n\n console.log('[Sonor] Registering sitemap entries...')\n\n try {\n const result = await registerLocalSitemap({\n autoDiscover,\n optimize_meta: !skipOptimize,\n ...(fullReplace ? { mode: 'full-replace' as const } : {}),\n brandProfile,\n writeLlms,\n writeLlmsFull,\n site,\n })\n\n if (result.skipped) {\n // A sitemap route already owns build-time sync — nothing to report.\n process.exit(0)\n }\n\n if (result.success) {\n console.log(`[Sonor] ✓ Sitemap registered successfully`)\n console.log(`[Sonor] Created: ${result.created}`)\n console.log(`[Sonor] Updated: ${result.updated}`)\n if (result.removed !== undefined && result.removed > 0) {\n console.log(`[Sonor] Removed: ${result.removed}`)\n }\n if (result.meta_optimization?.triggered) {\n console.log(`[Sonor] ✓ Signal AI meta optimization triggered for ${result.meta_optimization.pages_queued} pages`)\n console.log(`[Sonor] (Running in background - check Portal SEO module for results)`)\n }\n process.exit(0)\n } else {\n console.error('[Sonor] ✗ Failed to register sitemap')\n process.exit(1)\n }\n } catch (error) {\n console.error('[Sonor] ✗ Error:', error)\n process.exit(1)\n }\n}\n\nmain()\n","/**\n * Brand Profile Extraction\n *\n * Extracts the visual design DNA from a Next.js project's source files:\n * - globals.css: CSS custom properties (colors, fonts, theme)\n * - tailwind.config.js/ts: extended colors, fontFamily\n * - design-system.ts: explicit color palettes (if present)\n *\n * The extracted profile is pushed to Sonor alongside sitemap registration,\n * giving Signal AI full brand awareness for image generation, blog context,\n * and portfolio design decisions.\n *\n * This is static file analysis (a brace-aware scan plus regex, not a full CSS\n * parser) — runs at build time in Node.\n */\n\nimport fs from 'fs'\nimport path from 'path'\n\n/**\n * Version of the extraction contract, sent with every push. Version 1 (no\n * field) labelled any site whose CSS merely *mentioned* dark — a Tailwind\n * `dark:` variant, a `.dark` selector, even a `--surface-dark:` variable — as\n * a dark site. The API treats a push without this field as that extractor and\n * doesn't trust its `theme`.\n */\nexport const BRAND_PROFILE_EXTRACTOR_VERSION = 2\n\nexport interface BrandProfile {\n colors: {\n primary?: string\n secondary?: string\n accent?: string\n background?: string\n surface?: string\n text?: string\n gradient?: string\n }\n typography: {\n heading?: string\n body?: string\n mono?: string\n }\n /**\n * The site's default look, from the luminance of its resolved page\n * background (or, failing that, its text color). Omitted when neither\n * resolves: an unknown theme is better than a guessed one.\n */\n theme?: 'dark' | 'light'\n /**\n * The CSS ships a dark variant (`.dark` selector, Tailwind `dark:`,\n * `prefers-color-scheme: dark`). Says nothing about the default look.\n */\n supports_dark_mode: boolean\n style_keywords: string[]\n border_radius?: string\n extractor_version: number\n captured_at: string\n}\n\n// ---------------------------------------------------------------------------\n// Colors\n// ---------------------------------------------------------------------------\n\ntype Rgb = { r: number; g: number; b: number }\n\nconst HEX_COLOR = /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i\n\n/**\n * WCAG relative luminance below which a color reads as dark — the point where\n * it contrasts more with white than with black.\n */\nconst DARK_LUMINANCE = 0.179\n\nfunction channel(v: number): number {\n const c = v / 255\n return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4\n}\n\nfunction rgbLuminance({ r, g, b }: Rgb): number {\n return 0.2126 * channel(r) + 0.7152 * channel(g) + 0.0722 * channel(b)\n}\n\nfunction hexToRgb(hex: string): Rgb | null {\n if (!HEX_COLOR.test(hex)) return null\n let c = hex.slice(1)\n if (c.length <= 4) c = c.split('').map((ch) => ch + ch).join('')\n // An 8-digit hex with zero alpha paints nothing.\n if (c.length === 8 && c.slice(6) === '00') return null\n return {\n r: parseInt(c.slice(0, 2), 16),\n g: parseInt(c.slice(2, 4), 16),\n b: parseInt(c.slice(4, 6), 16),\n }\n}\n\nfunction hslToRgb(h: number, s: number, l: number): Rgb {\n // h in degrees, s/l in 0..1\n const k = (n: number) => (n + h / 30) % 12\n const a = s * Math.min(l, 1 - l)\n const f = (n: number) => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)))\n return { r: Math.round(f(0) * 255), g: Math.round(f(8) * 255), b: Math.round(f(4) * 255) }\n}\n\n/** Split a CSS color function's arguments: commas or spaces, with an optional `/ alpha`. */\nfunction colorArgs(inner: string): { parts: string[]; alpha?: string } {\n const [main, alpha] = inner.split('/')\n const parts = main.split(/[\\s,]+/).filter(Boolean)\n // Legacy comma syntax carries alpha as a 4th argument.\n if (alpha === undefined && parts.length === 4) return { parts: parts.slice(0, 3), alpha: parts[3] }\n return { parts, alpha: alpha?.trim() }\n}\n\nfunction isTransparentAlpha(alpha?: string): boolean {\n if (!alpha) return false\n const n = alpha.endsWith('%') ? parseFloat(alpha) / 100 : parseFloat(alpha)\n return n === 0\n}\n\n/**\n * Relative luminance (0 = black, 1 = white) of a resolved CSS color, or null\n * when the value isn't a color this can read. Covers hex, rgb(), hsl(), a\n * bare shadcn-style HSL triple (`0 0% 100%`), oklch()/oklab()/lab()/lch()\n * (from their lightness), and white/black.\n */\nexport function colorLuminance(value: string): number | null {\n const v = value.trim().toLowerCase()\n if (!v || v === 'transparent') return null\n if (v === 'white') return 1\n if (v === 'black') return 0\n\n if (v.startsWith('#')) {\n const rgb = hexToRgb(v)\n return rgb ? rgbLuminance(rgb) : null\n }\n\n const fn = v.match(/^([a-z]+)\\((.*)\\)$/)\n if (fn) {\n const [, name, inner] = fn\n const { parts, alpha } = colorArgs(inner)\n if (isTransparentAlpha(alpha) || parts.length < 3) return null\n const num = (p: string, scale: number) => (p.endsWith('%') ? (parseFloat(p) / 100) * scale : parseFloat(p))\n\n if (name === 'rgb' || name === 'rgba') {\n const [r, g, b] = parts.map((p) => num(p, 255))\n if ([r, g, b].some(Number.isNaN)) return null\n return rgbLuminance({ r, g, b })\n }\n if (name === 'hsl' || name === 'hsla') {\n const h = parseFloat(parts[0])\n const s = num(parts[1], 1)\n const l = num(parts[2], 1)\n if ([h, s, l].some(Number.isNaN)) return null\n return rgbLuminance(hslToRgb(h, s, l))\n }\n if (name === 'oklch' || name === 'oklab') {\n // OKLab lightness is perceptual; luminance is roughly its cube.\n const L = num(parts[0], 1)\n return Number.isNaN(L) ? null : Math.min(1, Math.max(0, L)) ** 3\n }\n if (name === 'lab' || name === 'lch') {\n const L = num(parts[0], 100)\n if (Number.isNaN(L)) return null\n const f = (L + 16) / 116\n return Math.min(1, Math.max(0, L > 8 ? f ** 3 : L / 903.3))\n }\n return null\n }\n\n // shadcn/ui (Tailwind v3) tokens store a bare HSL triple: `0 0% 100%`.\n const triple = v.match(/^(-?[\\d.]+)(?:deg)?\\s+([\\d.]+)%\\s+([\\d.]+)%$/)\n if (triple) {\n return rgbLuminance(hslToRgb(parseFloat(triple[1]), parseFloat(triple[2]) / 100, parseFloat(triple[3]) / 100))\n }\n return null\n}\n\n/**\n * The site's default theme. The page background decides it; the text color is\n * the fallback (light text means a dark page). Neither resolved → undefined,\n * never a guess. Dark-mode *support* has no say here.\n */\nexport function decideTheme(background?: string, text?: string): 'dark' | 'light' | undefined {\n const bg = background ? colorLuminance(background) : null\n if (bg !== null) return bg < DARK_LUMINANCE ? 'dark' : 'light'\n const fg = text ? colorLuminance(text) : null\n if (fg !== null) return fg < DARK_LUMINANCE ? 'light' : 'dark'\n return undefined\n}\n\n/**\n * Does the CSS ship a dark variant? The word boundaries keep `--surface-dark:`\n * and `.btn-outline-dark:hover` out: those name a dark *color*, not a dark\n * mode, and they are exactly what made v1 call light sites dark.\n */\nconst DARK_MODE_SIGNALS = [\n /\\.dark(?![\\w-])/, // .dark / html.dark selector (next-themes, shadcn's @custom-variant)\n /(?<![\\w-])dark:[\\w[]/, // Tailwind dark: variant, e.g. @apply dark:bg-black\n /prefers-color-scheme\\s*:\\s*dark/,\n /\\[data-(?:theme|mode)=[\"']?dark[\"']?\\]/,\n]\n\nexport function detectDarkModeSupport(css: string, tailwindConfig = ''): boolean {\n const src = stripCssComments(css)\n return DARK_MODE_SIGNALS.some((re) => re.test(src)) || /\\bdarkMode\\s*:/.test(tailwindConfig)\n}\n\n// ---------------------------------------------------------------------------\n// CSS scan\n// ---------------------------------------------------------------------------\n\ninterface CssScan {\n /** Custom properties from the default scope: :root / html / :host, @layer, and Tailwind v4 @theme. */\n vars: Record<string, string>\n /** :root / html / :host only (not @theme) — the names the color/font lookups have always read. */\n rootVars: Record<string, string>\n /** background / color declared on html or body. */\n element: { background?: string; color?: string }\n}\n\nfunction stripCssComments(css: string): string {\n return css.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')\n}\n\nfunction matchingBrace(css: string, open: number): number {\n let depth = 0\n for (let i = open; i < css.length; i++) {\n if (css[i] === '{') depth++\n else if (css[i] === '}' && --depth === 0) return i\n }\n return css.length\n}\n\n/** Top-level declarations of a block body, with nested rules removed. */\nfunction declarations(body: string): Array<[string, string]> {\n let flat = ''\n let depth = 0\n for (const ch of body) {\n if (ch === '{') depth++\n else if (ch === '}') depth--\n else if (depth === 0) flat += ch\n }\n const out: Array<[string, string]> = []\n for (const decl of flat.split(';')) {\n const colon = decl.indexOf(':')\n if (colon === -1) continue\n const name = decl.slice(0, colon).trim()\n const value = decl.slice(colon + 1).replace(/!important/i, '').trim()\n if (name && value) out.push([name, value])\n }\n return out\n}\n\nconst ROOT_SELECTORS = new Set([':root', 'html', ':host', 'html:root'])\nconst ELEMENT_SELECTORS = new Set(['html', 'body', ':root'])\n\nfunction walkCss(css: string, scan: CssScan): void {\n let i = 0\n while (i < css.length) {\n const open = css.indexOf('{', i)\n if (open === -1) return\n const close = matchingBrace(css, open)\n // Statements like `@import …;` or `@custom-variant …;` precede the prelude.\n const raw = css.slice(i, open)\n const prelude = raw.slice(Math.max(raw.lastIndexOf(';'), raw.lastIndexOf('}')) + 1).trim()\n const body = css.slice(open + 1, close)\n i = close + 1\n\n if (prelude.startsWith('@')) {\n // @layer is still the default scope; @theme holds Tailwind v4 tokens.\n // Everything else (@media — including prefers-color-scheme: dark —\n // @supports, @container, @keyframes) is conditional: skip it.\n if (/^@layer\\b/.test(prelude)) walkCss(body, scan)\n else if (/^@theme\\b/.test(prelude)) {\n for (const [name, value] of declarations(body)) {\n if (name.startsWith('--')) scan.vars[name.slice(2)] = value\n }\n }\n continue\n }\n\n // A selector list only counts when every selector in it is a root /\n // element selector — `:root.dark`, `html[data-theme=dark]` and `.dark`\n // are dark-mode overrides, never the default look.\n const selectors = prelude.split(',').map((s) => s.trim())\n const isRoot = selectors.every((s) => ROOT_SELECTORS.has(s))\n const isElement = selectors.every((s) => ELEMENT_SELECTORS.has(s))\n if (!isRoot && !isElement) continue\n\n for (const [name, value] of declarations(body)) {\n if (name.startsWith('--')) {\n if (isRoot) {\n scan.vars[name.slice(2)] = value\n scan.rootVars[name.slice(2)] = value\n }\n } else if (name === 'background' || name === 'background-color') {\n scan.element.background = value\n } else if (name === 'color') {\n scan.element.color = value\n }\n }\n }\n}\n\nfunction scanCss(css: string): CssScan {\n const scan: CssScan = { vars: {}, rootVars: {}, element: {} }\n walkCss(stripCssComments(css), scan)\n return scan\n}\n\n/**\n * Resolve `var(--x)` / `var(--x, fallback)` references against the scanned\n * variables. Returns undefined when a reference can't be resolved (it's set at\n * runtime, e.g. by next/font on a className, or lives in an unread file).\n */\nfunction resolveValue(value: string, vars: Record<string, string>): string | undefined {\n const VAR_REF = /var\\(\\s*--([\\w-]+)\\s*(?:,\\s*((?:[^()]|\\([^()]*\\))*))?\\)/\n let out = value\n for (let depth = 0; depth < 10; depth++) {\n const m = out.match(VAR_REF)\n if (!m) return out.trim()\n const replacement = vars[m[1]] ?? m[2]?.trim()\n if (replacement === undefined) return undefined\n out = out.replace(m[0], replacement)\n }\n return undefined // a reference cycle\n}\n\n/** Resolve a declared value to a single color token (a background shorthand may carry an image too). */\nfunction resolveColorValue(value: string | undefined, vars: Record<string, string>): string | undefined {\n if (!value) return undefined\n const resolved = resolveValue(value, vars)\n if (!resolved || /gradient|url\\(/i.test(resolved)) return undefined\n if (colorLuminance(resolved) !== null) return resolved\n const token = resolved.match(/#[0-9a-f]{3,8}\\b|(?:rgba?|hsla?|oklch|oklab|lab|lch)\\([^)]*\\)/i)\n return token && colorLuminance(token[0]) !== null ? token[0] : undefined\n}\n\n/** First of `keys` that resolves to a color (any readable CSS color). */\nfunction findResolvedColor(vars: Record<string, string>, ...keys: string[]): string | undefined {\n for (const key of keys) {\n const color = resolveColorValue(vars[key], vars)\n if (color) return color\n }\n return undefined\n}\n\n/**\n * Try to find a brand color from CSS variables. Hex only — these values are\n * stored as brand colors, and everything downstream (emails, widgets) expects hex.\n */\nfunction findColor(vars: Record<string, string>, ...keys: string[]): string | undefined {\n for (const key of keys) {\n const val = vars[key]\n if (val && HEX_COLOR.test(val)) return val\n }\n return undefined\n}\n\n/**\n * Extract font family from CSS variable or Tailwind config\n */\nfunction extractFontFromCss(vars: Record<string, string>, ...keys: string[]): string | undefined {\n for (const key of keys) {\n const val = vars[key]\n if (val) {\n // Extract first font name: \"'Inter', system-ui\" -> \"Inter\"\n const match = val.match(/['\"]?([A-Za-z][A-Za-z0-9 _-]+)['\"]?/)\n return match?.[1]?.trim()\n }\n }\n return undefined\n}\n\n/**\n * Extract from Tailwind config — reads as text, uses regex (no require/import)\n */\nfunction extractFromTailwindConfig(configPath: string): {\n colors: Record<string, string>\n fonts: Record<string, string>\n} {\n const colors: Record<string, string> = {}\n const fonts: Record<string, string> = {}\n\n if (!fs.existsSync(configPath)) return { colors, fonts }\n\n const content = fs.readFileSync(configPath, 'utf-8')\n\n // Extract fontFamily entries: fontFamily: { sans: ['var(--font-satoshi)', ...] }\n const fontMatches = content.matchAll(/(?:fontFamily|font-family)\\s*:\\s*\\{([^}]+)\\}/g)\n for (const m of fontMatches) {\n const block = m[1]\n // Match: sans: ['Satoshi', ...] or sans: ['var(--font-satoshi)', ...]\n const entries = block.matchAll(/(\\w+)\\s*:\\s*\\[([^\\]]+)\\]/g)\n for (const e of entries) {\n const key = e[1] // sans, serif, mono\n const values = e[2]\n // Extract first real font name (not var())\n const varMatch = values.match(/var\\(--font-([a-z0-9-]+)\\)/)\n if (varMatch) {\n fonts[key] = varMatch[1].charAt(0).toUpperCase() + varMatch[1].slice(1) // capitalize\n } else {\n const nameMatch = values.match(/['\"]([A-Za-z][A-Za-z0-9 -]+)['\"]/)\n if (nameMatch) fonts[key] = nameMatch[1]\n }\n }\n }\n\n return { colors, fonts }\n}\n\n/**\n * Extract from design-system.ts if it exists\n */\nfunction extractFromDesignSystem(filePath: string): {\n primary?: string\n secondary?: string\n accent?: string\n gradient?: string\n} {\n if (!fs.existsSync(filePath)) return {}\n\n const content = fs.readFileSync(filePath, 'utf-8')\n\n // Look for default/fallback color definitions\n const result: Record<string, string> = {}\n\n // Match: primary: '#54b948'\n const colorMatches = content.matchAll(/(primary|secondary|accent)\\s*:\\s*['\"]([#a-fA-F0-9]+)['\"]/g)\n for (const m of colorMatches) {\n // Take the LAST match (usually the default/fallback)\n result[m[1]] = m[2]\n }\n\n // Match gradient: 'linear-gradient(...)'\n const gradientMatch = content.match(/gradient(?:Css)?\\s*:\\s*['\"]([^'\"]+)['\"]/)\n if (gradientMatch) {\n result.gradient = gradientMatch[1]\n }\n\n return result\n}\n\n/**\n * Infer style keywords from the extracted data\n */\nfunction inferStyleKeywords(\n theme: 'dark' | 'light' | undefined,\n vars: Record<string, string>,\n tailwindContent?: string,\n): string[] {\n const keywords: string[] = []\n\n if (theme) keywords.push(theme)\n keywords.push('modern')\n\n // Check for specific patterns\n if (tailwindContent) {\n if (tailwindContent.includes('backdrop-blur') || tailwindContent.includes('glass')) keywords.push('glass')\n if (tailwindContent.includes('gradient')) keywords.push('gradient')\n if (tailwindContent.includes('rounded-full') || tailwindContent.includes('rounded-3xl')) keywords.push('rounded')\n if (tailwindContent.includes('animate-') || tailwindContent.includes('framer-motion')) keywords.push('animated')\n }\n\n // Check font styles\n const allVars = Object.values(vars).join(' ').toLowerCase()\n if (allVars.includes('mono') || allVars.includes('code') || allVars.includes('jetbrains')) keywords.push('tech')\n if (allVars.includes('serif') || allVars.includes('georgia') || allVars.includes('playfair')) keywords.push('editorial')\n\n return [...new Set(keywords)]\n}\n\n/**\n * Main extraction function — scans the project directory\n */\nexport function extractBrandProfile(projectDir?: string): BrandProfile | null {\n const cwd = projectDir || process.cwd()\n\n // Find globals.css\n const globalsLocations = [\n path.join(cwd, 'app', 'globals.css'),\n path.join(cwd, 'src', 'app', 'globals.css'),\n path.join(cwd, 'styles', 'globals.css'),\n ]\n\n let globalsCss = ''\n for (const loc of globalsLocations) {\n if (fs.existsSync(loc)) {\n globalsCss = fs.readFileSync(loc, 'utf-8')\n break\n }\n }\n const scan = scanCss(globalsCss)\n // The :root variables the color/font lookups read, with var() references\n // resolved. One that can't resolve (set at runtime, e.g. by next/font) is\n // dropped rather than read as a literal \"var(...)\".\n const cssVars: Record<string, string> = {}\n for (const [name, raw] of Object.entries(scan.rootVars)) {\n const resolved = resolveValue(raw, scan.vars)\n if (resolved !== undefined) cssVars[name] = resolved\n }\n\n // Find tailwind config\n const tailwindLocations = [\n path.join(cwd, 'tailwind.config.js'),\n path.join(cwd, 'tailwind.config.ts'),\n path.join(cwd, 'tailwind.config.mjs'),\n ]\n\n let tailwindResult = { colors: {} as Record<string, string>, fonts: {} as Record<string, string> }\n let tailwindContent = ''\n for (const loc of tailwindLocations) {\n if (fs.existsSync(loc)) {\n tailwindContent = fs.readFileSync(loc, 'utf-8')\n tailwindResult = extractFromTailwindConfig(loc)\n break\n }\n }\n\n // Find design-system.ts\n const designSystemLocations = [\n path.join(cwd, 'design-system.ts'),\n path.join(cwd, 'src', 'design-system.ts'),\n path.join(cwd, 'lib', 'design-system.ts'),\n ]\n\n let designSystem: ReturnType<typeof extractFromDesignSystem> = {}\n for (const loc of designSystemLocations) {\n if (fs.existsSync(loc)) {\n designSystem = extractFromDesignSystem(loc)\n break\n }\n }\n\n // If we found nothing at all, skip\n if (Object.keys(cssVars).length === 0 && !tailwindContent && Object.keys(designSystem).length === 0) {\n return null\n }\n\n // === Build the profile ===\n\n // Colors — priority: CSS vars > design-system > tailwind\n const primary = findColor(cssVars,\n 'color-accent', 'sk-primary', 'color-primary', 'color-brand', 'brand-primary',\n ) || designSystem.primary\n\n const secondary = findColor(cssVars,\n 'color-accent-dark', 'sk-secondary', 'color-secondary',\n ) || designSystem.secondary\n\n const accent = findColor(cssVars,\n 'color-accent-light', 'sk-accent', 'color-accent-light',\n ) || designSystem.accent\n\n // The page background and text color as painted: what html/body declare,\n // else the usual tokens (Tailwind v4 @theme included), var() chains resolved.\n const pageBackground =\n resolveColorValue(scan.element.background, scan.vars) ||\n findResolvedColor(scan.vars,\n 'color-charcoal', 'sk-bg', 'color-bg', 'color-background',\n 'background', 'bg', 'bg-color',\n )\n const pageText =\n resolveColorValue(scan.element.color, scan.vars) ||\n findResolvedColor(scan.vars,\n 'sk-text-primary', 'color-text', 'color-text-primary',\n 'foreground', 'color-foreground', 'text-color',\n )\n\n const background = pageBackground && HEX_COLOR.test(pageBackground) ? pageBackground : undefined\n\n const surface = findColor(cssVars,\n 'color-charcoal-light', 'sk-surface', 'color-surface', 'sk-bg-elevated',\n )\n\n const textColor = pageText && HEX_COLOR.test(pageText) ? pageText : undefined\n\n const gradient = designSystem.gradient || undefined\n\n // Typography — priority: tailwind fontFamily > CSS vars\n const headingFont = tailwindResult.fonts.sans || tailwindResult.fonts.heading ||\n extractFontFromCss(cssVars, 'font-heading', 'font-display', 'font-sans')\n const bodyFont = tailwindResult.fonts.sans || tailwindResult.fonts.body ||\n extractFontFromCss(cssVars, 'font-body', 'font-sans')\n const monoFont = tailwindResult.fonts.mono ||\n extractFontFromCss(cssVars, 'font-mono', 'font-code')\n\n // Theme = the default look, from luminance. A `dark:` variant or `.dark`\n // selector only means the site *offers* a dark mode.\n const theme = decideTheme(pageBackground, pageText)\n const supportsDarkMode = detectDarkModeSupport(globalsCss, tailwindContent)\n\n // Style keywords\n const styleKeywords = inferStyleKeywords(theme, cssVars, tailwindContent + globalsCss)\n\n // Border radius — look for common patterns\n const radiusMatch = globalsCss.match(/border-radius\\s*:\\s*([^;]+)/) ||\n tailwindContent.match(/borderRadius\\s*:\\s*\\{[^}]*DEFAULT\\s*:\\s*['\"]([^'\"]+)['\"]/)\n const borderRadius = radiusMatch?.[1]?.trim()\n\n const profile: BrandProfile = {\n colors: {\n ...(primary && { primary }),\n ...(secondary && { secondary }),\n ...(accent && { accent }),\n ...(background && { background }),\n ...(surface && { surface }),\n ...(textColor && { text: textColor }),\n ...(gradient && { gradient }),\n },\n typography: {\n ...(headingFont && { heading: headingFont }),\n ...(bodyFont && { body: bodyFont }),\n ...(monoFont && { mono: monoFont }),\n },\n ...(theme && { theme }),\n supports_dark_mode: supportsDarkMode,\n style_keywords: styleKeywords,\n ...(borderRadius && { border_radius: borderRadius }),\n extractor_version: BRAND_PROFILE_EXTRACTOR_VERSION,\n captured_at: new Date().toISOString(),\n }\n\n // Only return if we got meaningful data\n const hasColors = Object.keys(profile.colors).length > 0\n const hasTypography = Object.keys(profile.typography).length > 0\n\n if (!hasColors && !hasTypography) return null\n\n return profile\n}\n\n/**\n * Push brand profile to Sonor API\n */\nexport async function pushBrandProfile(profile: BrandProfile): Promise<boolean> {\n const apiUrl = process.env.SONOR_API_URL || 'https://api.sonor.io'\n const apiKey = process.env.SONOR_API_KEY || ''\n\n if (!apiKey) {\n console.warn('[Sonor] No API key — skipping brand profile push')\n return false\n }\n\n try {\n const response = await fetch(`${apiUrl}/api/public/seo/brand-profile`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n },\n body: JSON.stringify(profile),\n })\n\n if (!response.ok) {\n console.warn(`[Sonor] Brand profile push failed: ${response.status}`)\n return false\n }\n\n const result = await response.json()\n const theme = `theme=${profile.theme ?? 'unknown'}${profile.supports_dark_mode ? ' (has a dark mode)' : ''}`\n console.log(\n result.unchanged\n ? `[Sonor] Brand profile unchanged: ${theme}`\n : `[Sonor] Brand profile pushed: ${theme}, ${Object.keys(profile.colors).length} colors`,\n )\n return result.success\n } catch (err) {\n console.warn(`[Sonor] Brand profile push error: ${err}`)\n return false\n }\n}\n","/**\n * Standalone implementation for the sonor-register-sitemap CLI.\n * Does NOT import from server-api or routing, so it can run in Node without\n * pulling in server-only (which throws when required outside Next.js server context).\n *\n * Route discovery + page classification live in `../sitemap/discover` and\n * `../sitemap/shared` (shared with createSitemap, SitemapSync, and the routing\n * helper) — see those files for the sitemap-oscillation background.\n */\n\nimport path from 'path'\nimport { extractBrandProfile, pushBrandProfile } from '../brand/extract-brand-profile'\nimport { inferPageType } from '../sitemap/shared'\n// One request body for every register-sitemap caller, `site` included.\nimport { postRegisterSitemap, resolveSyncSite } from './register-sitemap-request'\nimport {\n discoverNextJsRoutes,\n findAppDirForDiscovery,\n findSitemapRoute,\n} from '../sitemap/discover'\n\nexport { resolveSyncSite }\n\nfunction getApiConfig(): { apiUrl: string; apiKey: string } {\n const apiUrl =\n process.env.SONOR_API_URL ||\n 'https://api.sonor.io'\n const apiKey =\n process.env.SONOR_API_KEY ||\n ''\n return { apiUrl, apiKey }\n}\n\nasync function registerSitemapViaApi(\n entries: Array<{\n path: string\n title?: string\n priority?: number\n changefreq?: string\n description?: string\n pageType?: string\n }>,\n optimizeMeta: boolean,\n mode: 'additive' | 'full-replace',\n site: string,\n): Promise<{\n success: boolean\n created: number\n updated: number\n removed?: number\n meta_optimization?: { triggered: boolean; pages_queued: number } | null\n}> {\n const { apiUrl, apiKey } = getApiConfig()\n if (!apiKey) {\n console.warn(\n '[Sonor] No API key (SONOR_API_KEY)',\n )\n return { success: false, created: 0, updated: 0 }\n }\n\n try {\n const response = await postRegisterSitemap({ apiUrl, apiKey, entries, mode, site, optimizeMeta })\n\n if (!response.ok) {\n console.error(`[Sonor] Sitemap registration failed: ${response.status} ${response.statusText}`)\n return { success: false, created: 0, updated: 0 }\n }\n\n return await response.json()\n } catch (error) {\n console.error('[Sonor] Sitemap registration error:', error)\n return { success: false, created: 0, updated: 0 }\n }\n}\n\nexport type RegisterLocalSitemapOptions = {\n entries?: Array<{\n path: string\n title?: string\n priority?: number\n changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never'\n description?: string\n pageType?: string\n }>\n autoDiscover?: boolean\n optimize_meta?: boolean\n /**\n * Sync mode. Defaults to `'additive'` for auto-discovered route sets — a\n * filesystem scan is structurally incomplete (it can't enumerate dynamic\n * route params and ignores the app's sitemap exclude config), so it must\n * never drive a `'full-replace'` that would delete the pages it can't see.\n * Pure-static sites that want removed pages pruned can opt back in with\n * `'full-replace'`.\n */\n mode?: 'additive' | 'full-replace'\n /**\n * Also extract the site's brand profile from its CSS and push it to Sonor\n * (`--brand-profile`). Off by default: brand data has nothing to do with the\n * sitemap, and a heuristic that runs on every build of every site is how a\n * bad extraction relabelled seven light sites as dark (2026-09-15).\n */\n brandProfile?: boolean\n /**\n * The sub-site host these pages belong to (`--site ohiopowerstudies.com`).\n * Omit to resolve it the way every other build-time read does:\n * `NEXT_PUBLIC_SITE_URL`'s host (the CLI loads `.env` / `.env.local`).\n *\n * `site` is part of seo_pages identity, so on a multi-site project a sync\n * with no site tags every page as unattributed instead of this host's, and\n * the API skips deletions for a site-less full-replace. createSitemap always\n * sent it; this CLI didn't (found 2026-09-15).\n */\n site?: string\n /**\n * Also write public/llms.txt after the sync (`--write-llms`).\n *\n * Sonor generates llms.txt with an LLM call that often takes longer than the\n * 60s Next allows a prerendered route, so createSitemap's in-route write\n * frequently times out and keeps the old file. Here there's no ceiling, and\n * the sync this CLI just ran is what the generation reads. Pair it with\n * `optimizedLLMsTxt: false` in createSitemap so only one writer owns the file.\n */\n writeLlms?: boolean\n /** With writeLlms: also write public/llms-full.txt (`--write-llms-full`). */\n writeLlmsFull?: boolean\n}\n\nexport type RegisterLocalSitemapResult = {\n success: boolean\n created: number\n updated: number\n removed?: number\n /** True when the sync was intentionally skipped (a sitemap route owns it). */\n skipped?: boolean\n meta_optimization?: {\n triggered: boolean\n pages_queued: number\n } | null\n}\n\nexport async function registerLocalSitemap(\n options: RegisterLocalSitemapOptions\n): Promise<RegisterLocalSitemapResult> {\n let entries = options.entries || []\n const usingAutoDiscover = !!options.autoDiscover && entries.length === 0\n\n let result: RegisterLocalSitemapResult\n\n // SAFETY GUARD: never let a filesystem scan fight an authoritative sitemap.\n // If the app has a Next.js sitemap route (app/sitemap.{ts,js}, which\n // createSitemap syncs as a full-replace, and which site-kit's runtime\n // SitemapSync mirrors additively), an --auto-discover full-replace from an\n // incomplete fs scan would delete every dynamic-route page on every build and\n // the two syncs would oscillate — destroying managed metadata, Signal\n // optimizations, LLM schemas, and GSC history. Skip and let the route own it.\n const sitemapRoute = usingAutoDiscover ? findSitemapRoute() : null\n\n if (sitemapRoute) {\n console.warn(\n `[Sonor] Skipping --auto-discover: ${sitemapRoute} already handles build-time ` +\n `sitemap sync, and its /sitemap.xml is mirrored to Sonor at runtime. A ` +\n `filesystem scan can't see dynamic routes, so syncing it here would delete ` +\n `real pages and fight the route on every build. Nothing to do — this line ` +\n `is safe to leave in your postbuild.`,\n )\n result = { success: true, created: 0, updated: 0, skipped: true }\n } else {\n if (usingAutoDiscover) {\n const appDir = findAppDirForDiscovery()\n if (appDir) {\n entries = discoverNextJsRoutes(appDir)\n console.log(`[Sonor] Auto-discovered ${entries.length} routes from ${path.relative(process.cwd(), appDir)}`)\n }\n }\n\n if (entries.length === 0) {\n console.warn('[Sonor] No sitemap entries to register')\n result = { success: true, created: 0, updated: 0 }\n } else {\n // Auto-discovered sets are additive by default (incomplete → never delete).\n // Explicit entry lists keep the caller-provided mode, defaulting to\n // full-replace only when the caller asserts a complete set via `mode`.\n const mode: 'additive' | 'full-replace' =\n options.mode ?? (usingAutoDiscover ? 'additive' : 'full-replace')\n\n const site = resolveSyncSite(options.site)\n console.log(\n `[Sonor] Registering ${entries.length} sitemap entries (mode: ${mode}${site ? `, site: ${site}` : ''})...`,\n )\n const payload = entries.map((e) => ({\n path: e.path,\n title: e.title,\n priority: e.priority,\n changefreq: e.changefreq,\n ...(e.description ? { description: e.description } : {}),\n pageType: e.pageType ?? inferPageType(e.path),\n }))\n result = await registerSitemapViaApi(\n payload,\n options.optimize_meta !== false,\n mode,\n site,\n )\n\n if (result.success) {\n console.log(`[Sonor] Sitemap registered: ${result.created} new, ${result.updated} updated`)\n }\n }\n }\n\n // llms.txt write: opt-in (`--write-llms`), and only once the pages this\n // build produced are in Sonor, since that's what the generation reads.\n // Non-fatal: writeLLMsTxtToPublic never persists a failure stub, so a bad\n // run leaves the existing file serving.\n if (options.writeLlms && result.success) {\n try {\n const { writeLLMsTxtToPublic } = await import('../llms/writeLLMsTxt')\n const written = await writeLLMsTxtToPublic({\n // Resolved here too: the sync's own `site` is scoped to the branch that\n // posts, and this runs on the skip path as well.\n site: resolveSyncSite(options.site),\n full: options.writeLlmsFull === true,\n })\n if (written.success) {\n console.log(`[Sonor] Wrote llms.txt (optimized=${written.optimized})`)\n }\n } catch (llmsErr) {\n console.warn(`[Sonor] llms.txt write failed: ${(llmsErr as Error).message}`)\n }\n }\n\n // Brand profile push: opt-in only (`--brand-profile`). It's an independent\n // side effect on a separate endpoint, so when asked for it runs on the skip\n // path too. Non-fatal either way.\n if (options.brandProfile && result.success) {\n try {\n const brandProfile = extractBrandProfile()\n if (brandProfile) {\n await pushBrandProfile(brandProfile)\n }\n } catch (brandErr) {\n // Non-fatal — brand profile is supplementary\n console.debug(`[Sonor] Brand profile extraction skipped: ${brandErr}`)\n }\n }\n\n return result\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @sonordev/site-kit/seo — the one POST to /api/public/seo/register-sitemap.
|
|
3
|
+
*
|
|
4
|
+
* SINGLE SOURCE OF TRUTH for the request body, used by createSitemap's
|
|
5
|
+
* build-time sync (`syncSitemapToPortal`), the `sonor-register-sitemap` CLI
|
|
6
|
+
* and `registerSitemap` / `registerLocalSitemap` on `seo/server`. There were
|
|
7
|
+
* three hand-built bodies, and only createSitemap's carried `site`: on a
|
|
8
|
+
* multi-site project the CLI and the seo/server helpers synced every page as
|
|
9
|
+
* unattributed instead of this host's (found 2026-09-15). `site` is part of
|
|
10
|
+
* seo_pages identity, so a missing one is a different page, not a no-op.
|
|
11
|
+
*
|
|
12
|
+
* A leaf: no `server-only`, no Node built-ins, so the plain-Node CLI can use
|
|
13
|
+
* it as well as Next server code.
|
|
14
|
+
*/
|
|
15
|
+
export interface RegisterSitemapRequest {
|
|
16
|
+
apiUrl: string;
|
|
17
|
+
apiKey: string;
|
|
18
|
+
entries: unknown[];
|
|
19
|
+
mode: 'additive' | 'full-replace';
|
|
20
|
+
/** Sub-site host, already resolved. Empty or undefined leaves `site` off. */
|
|
21
|
+
site?: string;
|
|
22
|
+
optimizeMeta?: boolean;
|
|
23
|
+
awaitMeta?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The host a sync is tagged with: an explicit `site`, else
|
|
27
|
+
* NEXT_PUBLIC_SITE_URL's. Empty when neither resolves (a single-site project
|
|
28
|
+
* doesn't need one). `example.com` is the kit's placeholder origin and never a
|
|
29
|
+
* real host, so it's never sent, same as createSitemap.
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveSyncSite(explicit?: string): string;
|
|
32
|
+
/** The request body. Exported for tests. */
|
|
33
|
+
export declare function registerSitemapBody(req: Omit<RegisterSitemapRequest, 'apiUrl' | 'apiKey'>): Record<string, unknown>;
|
|
34
|
+
/** POST the entries. Callers keep their own response and error handling. */
|
|
35
|
+
export declare function postRegisterSitemap(req: RegisterSitemapRequest): Promise<Response>;
|
|
36
|
+
//# sourceMappingURL=register-sitemap-request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-sitemap-request.d.ts","sourceRoot":"","sources":["../../src/seo/register-sitemap-request.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,EAAE,CAAA;IAClB,IAAI,EAAE,UAAU,GAAG,cAAc,CAAA;IACjC,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,4CAA4C;AAC5C,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,sBAAsB,EAAE,QAAQ,GAAG,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOnH;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,QAAQ,CAAC,CASlF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-sitemap-request.test.d.ts","sourceRoot":"","sources":["../../src/seo/register-sitemap-request.test.ts"],"names":[],"mappings":""}
|
package/dist/seo/routing.d.ts
CHANGED
|
@@ -89,6 +89,8 @@ export declare function registerLocalSitemap(options: {
|
|
|
89
89
|
* autoDiscover (which enumerates the complete route set).
|
|
90
90
|
*/
|
|
91
91
|
mode?: 'additive' | 'full-replace';
|
|
92
|
+
/** Sub-site host on a multi-site project. Defaults to NEXT_PUBLIC_SITE_URL's host. */
|
|
93
|
+
site?: string;
|
|
92
94
|
}): Promise<{
|
|
93
95
|
success: boolean;
|
|
94
96
|
created: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/seo/routing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,YAAY,EACb,MAAM,SAAS,CAAA;AAEhB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAuBhC;AAkCD;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAW1B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,YAAY,EAAE,CAAC,CAczB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;KACvF,CAAC,CAAA;IACF,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,uFAAuF;IACvF,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/seo/routing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,YAAY,EACb,MAAM,SAAS,CAAA;AAEhB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAuBhC;AAkCD;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAW1B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,YAAY,EAAE,CAAC,CAczB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;KACvF,CAAC,CAAA;IACF,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,uFAAuF;IACvF,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,cAAc,CAAA;IAClC,sFAAsF;IACtF,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,GAAG,OAAO,CAAC;IACV,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iBAAiB,CAAC,EAAE;QAClB,SAAS,EAAE,OAAO,CAAA;QAClB,YAAY,EAAE,MAAM,CAAA;KACrB,GAAG,IAAI,CAAA;CACT,CAAC,CA4CD;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAGlB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @sonordev/site-kit/seo — `includeTypes` / `excludeTypes` for JSON-LD.
|
|
3
|
+
*
|
|
4
|
+
* SINGLE SOURCE OF TRUTH for the ManagedSchema type filter, used for Sonor's
|
|
5
|
+
* schema-markup rows (`getSchemaMarkups`) and for the page's
|
|
6
|
+
* `managed_schema` and entity-graph nodes (`ManagedSchema`).
|
|
7
|
+
*
|
|
8
|
+
* `excludeTypes` used to drop a row only when its `schema_type` matched
|
|
9
|
+
* exactly, so a node of that type nested INSIDE a row got through. Found
|
|
10
|
+
* 2026-09-15 on the MDG Green Bay site: the Georgetown and Westbrooke pages
|
|
11
|
+
* carry a page-level row whose JSON-LD embeds a FAQPage for questions the
|
|
12
|
+
* page doesn't show, and structured data has to describe visible content.
|
|
13
|
+
* `excludeTypes: ['FAQPage']` couldn't touch it; the site template dropped
|
|
14
|
+
* FAQPage nodes by hand and re-added the rows. Now an excluded type goes
|
|
15
|
+
* wherever it sits: a whole row, an `@graph` member, or a nested value
|
|
16
|
+
* (`mainEntity`, `hasPart`). A row left with nothing in it is dropped.
|
|
17
|
+
*
|
|
18
|
+
* `includeTypes` stays a row-level allow list on `schema_type`.
|
|
19
|
+
*
|
|
20
|
+
* Pure: no I/O.
|
|
21
|
+
*/
|
|
22
|
+
type Json = unknown;
|
|
23
|
+
/**
|
|
24
|
+
* The same JSON-LD with every node whose `@type` is in `deny` removed, at any
|
|
25
|
+
* depth. Returns null when the value itself is removed or nothing is left.
|
|
26
|
+
* Doesn't mutate its input.
|
|
27
|
+
*/
|
|
28
|
+
export declare function pruneSchemaTypes(value: Json, deny: ReadonlySet<string>): Json | null;
|
|
29
|
+
export interface SchemaTypeFilter {
|
|
30
|
+
includeTypes?: string[];
|
|
31
|
+
excludeTypes?: string[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Apply the filter to Sonor's schema-markup rows: `includeTypes` keeps rows
|
|
35
|
+
* whose `schema_type` it names; `excludeTypes` drops matching rows and prunes
|
|
36
|
+
* matching nodes out of the rest.
|
|
37
|
+
*/
|
|
38
|
+
export declare function filterSchemaRows<T extends {
|
|
39
|
+
schema_type?: string;
|
|
40
|
+
schema_json?: unknown;
|
|
41
|
+
}>(rows: T[], { includeTypes, excludeTypes }?: SchemaTypeFilter): T[];
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=schema-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-filter.d.ts","sourceRoot":"","sources":["../../src/seo/schema-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,KAAK,IAAI,GAAG,OAAO,CAAA;AAmBnB;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAoBpF;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,EACxF,IAAI,EAAE,CAAC,EAAE,EACT,EAAE,YAAY,EAAE,YAAY,EAAE,GAAE,gBAAqB,GACpD,CAAC,EAAE,CAgBL"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-filter.test.d.ts","sourceRoot":"","sources":["../../src/seo/schema-filter.test.ts"],"names":[],"mappings":""}
|
package/dist/seo/server-api.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export type PageSeoContext = {
|
|
|
14
14
|
project: {
|
|
15
15
|
id: string;
|
|
16
16
|
title?: string | null;
|
|
17
|
+
/** Resolved site brand (settings.business_name → title/org name). Grounds the managed-title quality gate. */
|
|
18
|
+
brand?: string | null;
|
|
17
19
|
domain?: string | null;
|
|
18
20
|
logo_url?: string | null;
|
|
19
21
|
site_url?: string | null;
|
|
@@ -28,6 +30,8 @@ export declare const getSEOPageData: (path: string) => Promise<{
|
|
|
28
30
|
project: {
|
|
29
31
|
id: string;
|
|
30
32
|
title?: string | null;
|
|
33
|
+
/** Resolved site brand (settings.business_name → title/org name). Grounds the managed-title quality gate. */
|
|
34
|
+
brand?: string | null;
|
|
31
35
|
domain?: string | null;
|
|
32
36
|
logo_url?: string | null;
|
|
33
37
|
site_url?: string | null;
|
|
@@ -43,22 +47,26 @@ export declare const getSchemaMarkups: (path: string, options?: {
|
|
|
43
47
|
}) => Promise<any[]>;
|
|
44
48
|
/**
|
|
45
49
|
* Fetch FAQ data for a page - cached per request
|
|
50
|
+
* @param site Sub-site host override; resolves from NEXT_PUBLIC_SITE_URL when omitted
|
|
46
51
|
* @server-only
|
|
47
52
|
*/
|
|
48
|
-
export declare const getFAQData: (path: string) => Promise<any>;
|
|
53
|
+
export declare const getFAQData: (path: string, site?: string) => Promise<any>;
|
|
49
54
|
/**
|
|
50
55
|
* Fetch internal links for a page - cached per request
|
|
56
|
+
* `options.site`: sub-site host override; resolves from NEXT_PUBLIC_SITE_URL when omitted
|
|
51
57
|
* @server-only
|
|
52
58
|
*/
|
|
53
59
|
export declare const getInternalLinks: (sourcePath: string, options?: {
|
|
54
60
|
position?: string;
|
|
55
61
|
limit?: number;
|
|
62
|
+
site?: string;
|
|
56
63
|
}) => Promise<any[]>;
|
|
57
64
|
/**
|
|
58
65
|
* Fetch content block - cached per request
|
|
66
|
+
* @param site Sub-site host override; resolves from NEXT_PUBLIC_SITE_URL when omitted
|
|
59
67
|
* @server-only
|
|
60
68
|
*/
|
|
61
|
-
export declare const getContentBlock: (path: string, section: string) => Promise<any>;
|
|
69
|
+
export declare const getContentBlock: (path: string, section: string, site?: string) => Promise<any>;
|
|
62
70
|
/**
|
|
63
71
|
* Fetch A/B test and determine variant - cached per request
|
|
64
72
|
* @server-only
|
|
@@ -125,6 +133,11 @@ export declare function registerSitemap(entries: Array<{
|
|
|
125
133
|
* - 'additive': adds/updates pages but never deletes existing ones
|
|
126
134
|
*/
|
|
127
135
|
mode?: 'additive' | 'full-replace';
|
|
136
|
+
/**
|
|
137
|
+
* Sub-site host these pages belong to, on a multi-site project. Defaults
|
|
138
|
+
* to NEXT_PUBLIC_SITE_URL's host; left off when nothing resolves.
|
|
139
|
+
*/
|
|
140
|
+
site?: string;
|
|
128
141
|
}): Promise<{
|
|
129
142
|
success: boolean;
|
|
130
143
|
created: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-api.d.ts","sourceRoot":"","sources":["../../src/seo/server-api.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"server-api.d.ts","sourceRoot":"","sources":["../../src/seo/server-api.ts"],"names":[],"mappings":"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"}
|
package/dist/seo/server.js
CHANGED
|
@@ -1,75 +1,80 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkM45AL7EA_js = require('../chunk-M45AL7EA.js');
|
|
4
|
+
var chunkFVW6FT6L_js = require('../chunk-FVW6FT6L.js');
|
|
5
|
+
require('../chunk-CXAXZFFW.js');
|
|
6
|
+
require('../chunk-YN7QHLWF.js');
|
|
5
7
|
require('../chunk-O5GHP7UO.js');
|
|
8
|
+
require('../chunk-XBX2K3GA.js');
|
|
9
|
+
require('../chunk-H5NBFNND.js');
|
|
10
|
+
require('../chunk-SWIKKSKL.js');
|
|
6
11
|
require('../chunk-SNAQBZPT.js');
|
|
7
12
|
|
|
8
13
|
|
|
9
14
|
|
|
10
15
|
Object.defineProperty(exports, "generateSitemap", {
|
|
11
16
|
enumerable: true,
|
|
12
|
-
get: function () { return
|
|
17
|
+
get: function () { return chunkM45AL7EA_js.generateSitemap; }
|
|
13
18
|
});
|
|
14
19
|
Object.defineProperty(exports, "getManagedMetadata", {
|
|
15
20
|
enumerable: true,
|
|
16
|
-
get: function () { return
|
|
21
|
+
get: function () { return chunkM45AL7EA_js.getManagedMetadata; }
|
|
17
22
|
});
|
|
18
23
|
Object.defineProperty(exports, "getManagedMetadataWithAB", {
|
|
19
24
|
enumerable: true,
|
|
20
|
-
get: function () { return
|
|
25
|
+
get: function () { return chunkM45AL7EA_js.getManagedMetadataWithAB; }
|
|
21
26
|
});
|
|
22
27
|
Object.defineProperty(exports, "registerLocalSitemap", {
|
|
23
28
|
enumerable: true,
|
|
24
|
-
get: function () { return
|
|
29
|
+
get: function () { return chunkM45AL7EA_js.registerLocalSitemap; }
|
|
25
30
|
});
|
|
26
31
|
Object.defineProperty(exports, "getABTest", {
|
|
27
32
|
enumerable: true,
|
|
28
|
-
get: function () { return
|
|
33
|
+
get: function () { return chunkFVW6FT6L_js.getABTest; }
|
|
29
34
|
});
|
|
30
35
|
Object.defineProperty(exports, "getContentBlock", {
|
|
31
36
|
enumerable: true,
|
|
32
|
-
get: function () { return
|
|
37
|
+
get: function () { return chunkFVW6FT6L_js.getContentBlock; }
|
|
33
38
|
});
|
|
34
39
|
Object.defineProperty(exports, "getFAQData", {
|
|
35
40
|
enumerable: true,
|
|
36
|
-
get: function () { return
|
|
41
|
+
get: function () { return chunkFVW6FT6L_js.getFAQData; }
|
|
37
42
|
});
|
|
38
43
|
Object.defineProperty(exports, "getInternalLinks", {
|
|
39
44
|
enumerable: true,
|
|
40
|
-
get: function () { return
|
|
45
|
+
get: function () { return chunkFVW6FT6L_js.getInternalLinks; }
|
|
41
46
|
});
|
|
42
47
|
Object.defineProperty(exports, "getManagedScripts", {
|
|
43
48
|
enumerable: true,
|
|
44
|
-
get: function () { return
|
|
49
|
+
get: function () { return chunkFVW6FT6L_js.getManagedScripts; }
|
|
45
50
|
});
|
|
46
51
|
Object.defineProperty(exports, "getRedirectData", {
|
|
47
52
|
enumerable: true,
|
|
48
|
-
get: function () { return
|
|
53
|
+
get: function () { return chunkFVW6FT6L_js.getRedirectData; }
|
|
49
54
|
});
|
|
50
55
|
Object.defineProperty(exports, "getRobotsData", {
|
|
51
56
|
enumerable: true,
|
|
52
|
-
get: function () { return
|
|
57
|
+
get: function () { return chunkFVW6FT6L_js.getRobotsData; }
|
|
53
58
|
});
|
|
54
59
|
Object.defineProperty(exports, "getSEOPageData", {
|
|
55
60
|
enumerable: true,
|
|
56
|
-
get: function () { return
|
|
61
|
+
get: function () { return chunkFVW6FT6L_js.getSEOPageData; }
|
|
57
62
|
});
|
|
58
63
|
Object.defineProperty(exports, "getSchemaMarkups", {
|
|
59
64
|
enumerable: true,
|
|
60
|
-
get: function () { return
|
|
65
|
+
get: function () { return chunkFVW6FT6L_js.getSchemaMarkups; }
|
|
61
66
|
});
|
|
62
67
|
Object.defineProperty(exports, "getSitemapEntries", {
|
|
63
68
|
enumerable: true,
|
|
64
|
-
get: function () { return
|
|
69
|
+
get: function () { return chunkFVW6FT6L_js.getSitemapEntries; }
|
|
65
70
|
});
|
|
66
71
|
Object.defineProperty(exports, "recordABImpression", {
|
|
67
72
|
enumerable: true,
|
|
68
|
-
get: function () { return
|
|
73
|
+
get: function () { return chunkFVW6FT6L_js.recordABImpression; }
|
|
69
74
|
});
|
|
70
75
|
Object.defineProperty(exports, "registerSitemap", {
|
|
71
76
|
enumerable: true,
|
|
72
|
-
get: function () { return
|
|
77
|
+
get: function () { return chunkFVW6FT6L_js.registerSitemap; }
|
|
73
78
|
});
|
|
74
79
|
//# sourceMappingURL=server.js.map
|
|
75
80
|
//# sourceMappingURL=server.js.map
|
package/dist/seo/server.mjs
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
export { generateSitemap, getManagedMetadata, getManagedMetadataWithAB, registerLocalSitemap } from '../chunk-
|
|
2
|
-
export { getABTest, getContentBlock, getFAQData, getInternalLinks, getManagedScripts, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, recordABImpression, registerSitemap } from '../chunk-
|
|
1
|
+
export { generateSitemap, getManagedMetadata, getManagedMetadataWithAB, registerLocalSitemap } from '../chunk-HOJ4J4X2.mjs';
|
|
2
|
+
export { getABTest, getContentBlock, getFAQData, getInternalLinks, getManagedScripts, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, recordABImpression, registerSitemap } from '../chunk-OE7CTIOU.mjs';
|
|
3
|
+
import '../chunk-MLVHVKFT.mjs';
|
|
4
|
+
import '../chunk-4TLFZ6NR.mjs';
|
|
3
5
|
import '../chunk-6XNEGG5B.mjs';
|
|
6
|
+
import '../chunk-KV7XXLJV.mjs';
|
|
7
|
+
import '../chunk-JLVCWC6A.mjs';
|
|
8
|
+
import '../chunk-ZN4HBK5C.mjs';
|
|
4
9
|
import '../chunk-BEXTDHO4.mjs';
|
|
5
10
|
//# sourceMappingURL=server.mjs.map
|
|
6
11
|
//# sourceMappingURL=server.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"site-scope.test.d.ts","sourceRoot":"","sources":["../../src/seo/site-scope.test.tsx"],"names":[],"mappings":""}
|