@sonordev/site-kit 1.5.0 → 1.5.2
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/dist/AnalyticsProvider-BBLU4U2T.mjs +4 -0
- package/dist/{AnalyticsProvider-OXX23PK5.mjs.map → AnalyticsProvider-BBLU4U2T.mjs.map} +1 -1
- package/dist/AnalyticsProvider-EMDIAAWR.js +25 -0
- package/dist/{AnalyticsProvider-KJWDN6YO.js.map → AnalyticsProvider-EMDIAAWR.js.map} +1 -1
- package/dist/SitemapSync-FKYWGDAD.js +13 -0
- package/dist/{SitemapSync-6I5JTLER.js.map → SitemapSync-FKYWGDAD.js.map} +1 -1
- package/dist/SitemapSync-YK6IXOSY.mjs +4 -0
- package/dist/{SitemapSync-6L45DHRH.mjs.map → SitemapSync-YK6IXOSY.mjs.map} +1 -1
- package/dist/analytics/index.js +9 -9
- package/dist/analytics/index.mjs +2 -2
- package/dist/{chunk-XTRXH5OL.mjs → chunk-35MALWVX.mjs} +4 -4
- package/dist/{chunk-XTRXH5OL.mjs.map → chunk-35MALWVX.mjs.map} +1 -1
- package/dist/{chunk-7URAOG2M.js → chunk-4MOJJSNA.js} +5 -2
- package/dist/chunk-4MOJJSNA.js.map +1 -0
- package/dist/{chunk-CYZYPWGW.mjs → chunk-4X5TFGKD.mjs} +3 -3
- package/dist/{chunk-CYZYPWGW.mjs.map → chunk-4X5TFGKD.mjs.map} +1 -1
- package/dist/{chunk-RRBBMEDL.js → chunk-ELDJDBQL.js} +7 -7
- package/dist/{chunk-RRBBMEDL.js.map → chunk-ELDJDBQL.js.map} +1 -1
- package/dist/{chunk-KMLCQYEV.mjs → chunk-FI2ME55T.mjs} +3 -3
- package/dist/{chunk-KMLCQYEV.mjs.map → chunk-FI2ME55T.mjs.map} +1 -1
- package/dist/{chunk-3QKTOTWS.mjs → chunk-FMB2RZDH.mjs} +77 -37
- package/dist/chunk-FMB2RZDH.mjs.map +1 -0
- package/dist/{chunk-DKSHZ7TG.js → chunk-FTSXKDP3.js} +24 -20
- package/dist/chunk-FTSXKDP3.js.map +1 -0
- package/dist/{chunk-5NXUENL3.js → chunk-GJD4CFHN.js} +3 -3
- package/dist/{chunk-5NXUENL3.js.map → chunk-GJD4CFHN.js.map} +1 -1
- package/dist/{chunk-JGNQK2G6.mjs → chunk-JFTGG6HK.mjs} +5 -2
- package/dist/chunk-JFTGG6HK.mjs.map +1 -0
- package/dist/{chunk-LTTTIJPN.js → chunk-KJN2C6YE.js} +5 -5
- package/dist/{chunk-LTTTIJPN.js.map → chunk-KJN2C6YE.js.map} +1 -1
- package/dist/{chunk-35L6FXF5.mjs → chunk-KRPFLF62.mjs} +24 -20
- package/dist/chunk-KRPFLF62.mjs.map +1 -0
- package/dist/{chunk-J4K335PQ.mjs → chunk-M5FLRLHI.mjs} +3 -3
- package/dist/{chunk-J4K335PQ.mjs.map → chunk-M5FLRLHI.mjs.map} +1 -1
- package/dist/{chunk-WY346LOO.mjs → chunk-MCGLYYAR.mjs} +3 -3
- package/dist/{chunk-WY346LOO.mjs.map → chunk-MCGLYYAR.mjs.map} +1 -1
- package/dist/{chunk-RJTBSSZB.mjs → chunk-NRNK7LXK.mjs} +4 -4
- package/dist/{chunk-RJTBSSZB.mjs.map → chunk-NRNK7LXK.mjs.map} +1 -1
- package/dist/{chunk-466AL5CC.js → chunk-OE5DEMCV.js} +4 -4
- package/dist/{chunk-466AL5CC.js.map → chunk-OE5DEMCV.js.map} +1 -1
- package/dist/{chunk-BPXMOHVH.mjs → chunk-PM2KQ6YK.mjs} +3 -3
- package/dist/{chunk-BPXMOHVH.mjs.map → chunk-PM2KQ6YK.mjs.map} +1 -1
- package/dist/{chunk-PJKHCYI5.js → chunk-PTTDKFL7.js} +77 -37
- package/dist/chunk-PTTDKFL7.js.map +1 -0
- package/dist/{chunk-YBQT623Y.js → chunk-QW4RQHSK.js} +9 -7
- package/dist/chunk-QW4RQHSK.js.map +1 -0
- package/dist/{chunk-AWSVC7SP.js → chunk-TC6TOW2T.js} +4 -4
- package/dist/{chunk-AWSVC7SP.js.map → chunk-TC6TOW2T.js.map} +1 -1
- package/dist/{chunk-HNCSTGVK.mjs → chunk-TSK35UHV.mjs} +9 -7
- package/dist/chunk-TSK35UHV.mjs.map +1 -0
- package/dist/{chunk-YP5YVWAG.js → chunk-WW7UM7XY.js} +5 -5
- package/dist/{chunk-YP5YVWAG.js.map → chunk-WW7UM7XY.js.map} +1 -1
- package/dist/{chunk-6YW6EWMH.js → chunk-ZQO6FZZB.js} +3 -3
- package/dist/{chunk-6YW6EWMH.js.map → chunk-ZQO6FZZB.js.map} +1 -1
- package/dist/cli/index.js +10 -10
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +4 -4
- package/dist/cli/index.mjs.map +1 -1
- package/dist/commerce/index.js +47 -47
- package/dist/commerce/index.mjs +3 -3
- package/dist/index.js +30 -30
- package/dist/index.mjs +4 -4
- package/dist/layout/client.js +2 -2
- package/dist/layout/client.mjs +1 -1
- package/dist/layout/index.js +6 -6
- package/dist/layout/index.mjs +3 -3
- package/dist/llms/index.js +12 -12
- package/dist/llms/index.mjs +2 -2
- package/dist/{scanner-LKJKW7IT.mjs → scanner-AF7YUCFG.mjs} +3 -3
- package/dist/{scanner-LKJKW7IT.mjs.map → scanner-AF7YUCFG.mjs.map} +1 -1
- package/dist/{scanner-GAF5PO5F.js → scanner-DBD5K6F7.js} +14 -14
- package/dist/{scanner-GAF5PO5F.js.map → scanner-DBD5K6F7.js.map} +1 -1
- package/dist/seo/client.d.mts +7 -1
- package/dist/seo/client.d.ts +7 -1
- package/dist/seo/client.js +2 -2
- package/dist/seo/client.mjs +1 -1
- package/dist/seo/index.d.mts +29 -4
- package/dist/seo/index.d.ts +29 -4
- package/dist/seo/index.js +42 -42
- package/dist/seo/index.mjs +5 -5
- package/dist/seo/register-sitemap-cli.js +1 -1
- package/dist/seo/register-sitemap-cli.js.map +1 -1
- package/dist/seo/register-sitemap-cli.mjs +1 -1
- package/dist/seo/register-sitemap-cli.mjs.map +1 -1
- package/dist/seo/server.js +4 -4
- package/dist/seo/server.mjs +2 -2
- package/dist/{server-api-FCTEQOTK.mjs → server-api-COVFLFZ2.mjs} +3 -3
- package/dist/{server-api-FCTEQOTK.mjs.map → server-api-COVFLFZ2.mjs.map} +1 -1
- package/dist/{server-api-SYINXTN7.js → server-api-XGKRGUMG.js} +21 -21
- package/dist/{server-api-SYINXTN7.js.map → server-api-XGKRGUMG.js.map} +1 -1
- package/dist/setup/index.js +2 -2
- package/dist/setup/index.mjs +1 -1
- package/dist/setup/server.js +2 -2
- package/dist/setup/server.mjs +1 -1
- package/dist/sitemap/index.d.mts +9 -0
- package/dist/sitemap/index.d.ts +9 -0
- package/dist/sitemap/index.js +157 -17
- package/dist/sitemap/index.js.map +1 -1
- package/dist/sitemap/index.mjs +157 -17
- package/dist/sitemap/index.mjs.map +1 -1
- package/package.json +3 -1
- package/dist/AnalyticsProvider-KJWDN6YO.js +0 -25
- package/dist/AnalyticsProvider-OXX23PK5.mjs +0 -4
- package/dist/SitemapSync-6I5JTLER.js +0 -13
- package/dist/SitemapSync-6L45DHRH.mjs +0 -4
- package/dist/chunk-35L6FXF5.mjs.map +0 -1
- package/dist/chunk-3QKTOTWS.mjs.map +0 -1
- package/dist/chunk-7URAOG2M.js.map +0 -1
- package/dist/chunk-DKSHZ7TG.js.map +0 -1
- package/dist/chunk-HNCSTGVK.mjs.map +0 -1
- package/dist/chunk-JGNQK2G6.mjs.map +0 -1
- package/dist/chunk-PJKHCYI5.js.map +0 -1
- package/dist/chunk-YBQT623Y.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/seo/register-sitemap-cli-impl.ts","../../src/seo/register-sitemap-cli.ts"],"names":["cwd","dotenvConfig","path"],"mappings":";;;;;;AASA,SAAS,YAAA,GAAmD;AAC1D,EAAA,MAAM,MAAA,GACJ,OAAA,CAAQ,GAAA,CAAI,aAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,eAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,yBAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,2BAAA,IACZ,sBAAA;AACF,EAAA,MAAM,MAAA,GACJ,OAAA,CAAQ,GAAA,CAAI,aAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,eAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,yBAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,2BAAA,IACZ,EAAA;AACF,EAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAC1B;AAEA,SAAS,oBAAA,CACP,MAAA,EACA,QAAA,GAAmB,EAAA,EACwB;AAC3C,EAAA,MAAM,UAAqD,EAAC;AAE5D,EAAA,MAAM,QAAQ,EAAA,CAAG,WAAA,CAAY,QAAQ,EAAE,aAAA,EAAe,MAAM,CAAA;AAE5D,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,CAAK,KAAK,UAAA,CAAW,GAAG,KAAK,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AAC5D,IAAA,IAAI,IAAA,CAAK,SAAS,KAAA,EAAO;AACzB,IAAA,IAAI,IAAA,CAAK,SAAS,cAAA,EAAgB;AAElC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,KAAK,IAAI,CAAA;AAE5C,IAAA,IAAI,IAAA,CAAK,aAAY,EAAG;AACtB,MAAA,MAAM,OAAA,GACJ,GAAG,UAAA,CAAW,IAAA,CAAK,KAAK,QAAA,EAAU,UAAU,CAAC,CAAA,IAC7C,EAAA,CAAG,UAAA,CAAW,KAAK,IAAA,CAAK,QAAA,EAAU,SAAS,CAAC,CAAA,IAC5C,EAAA,CAAG,WAAW,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,UAAU,CAAC,CAAA;AAE/C,MAAA,MAAM,YAAA,GAAe,KAAK,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA;AACxE,MAAA,MAAM,SAAA,GAAY,KAAK,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA;AAErE,MAAA,IAAI,SAAA,GAAY,QAAA;AAChB,MAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,SAAA,EAAW;AAC/B,QAAA,SAAA,GAAY,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,MACtC;AAEA,MAAA,IAAI,OAAA,IAAW,CAAC,SAAA,EAAW;AACzB,QAAA,MAAM,QAAA,GAAW,SAAA,KAAc,EAAA,GAAK,CAAA,GAAM,GAAA;AAC1C,QAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,SAAA,IAAa,GAAA,EAAK,UAAU,CAAA;AAAA,MACnD;AAEA,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAM,UAAA,GAAa,oBAAA;AAAA,UACjB,QAAA;AAAA,UACA,eAAe,QAAA,GAAW;AAAA,SAC5B;AACA,QAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,UAAU,CAAA;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,aAAa,EAAA,EAAI;AACnB,IAAA,MAAM,WAAA,GACJ,GAAG,UAAA,CAAW,IAAA,CAAK,KAAK,MAAA,EAAQ,UAAU,CAAC,CAAA,IAC3C,EAAA,CAAG,UAAA,CAAW,KAAK,IAAA,CAAK,MAAA,EAAQ,SAAS,CAAC,CAAA,IAC1C,EAAA,CAAG,WAAW,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,UAAU,CAAC,CAAA;AAC7C,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,OAAA,CAAQ,QAAQ,EAAE,IAAA,EAAM,GAAA,EAAK,QAAA,EAAU,GAAK,CAAA;AAAA,IAC9C;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,eAAe,qBAAA,CACb,SAMA,YAAA,EAOC;AACD,EAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAO,GAAI,YAAA,EAAa;AACxC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,EAClD;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,gCAAA,CAAA,EAAoC;AAAA,MACxE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,WAAA,EAAa;AAAA,OACf;AAAA,MACA,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,aAAA,EAAe,cAAc;AAAA,KAC9D,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAA,CAAQ,MAAM,CAAA,qCAAA,EAAwC,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAC9F,MAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,IAClD;AAEA,IAAA,OAAO,MAAM,SAAS,IAAA,EAAK;AAAA,EAC7B,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,uCAAuC,KAAK,CAAA;AAC1D,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,EAClD;AACF;AAwBA,eAAsB,qBACpB,OAAA,EACqC;AACrC,EAAA,IAAI,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,EAAC;AAElC,EAAA,IAAI,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AAChD,IAAA,MAAMA,IAAAA,GAAM,QAAQ,GAAA,EAAI;AACxB,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,IAAA,CAAK,IAAA,CAAKA,IAAAA,EAAK,KAAK,CAAA;AAAA,MACpB,IAAA,CAAK,IAAA,CAAKA,IAAAA,EAAK,KAAA,EAAO,KAAK;AAAA,KAC7B;AACA,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,IAAI,EAAA,CAAG,UAAA,CAAW,MAAM,CAAA,EAAG;AACzB,QAAA,OAAA,GAAU,qBAAqB,MAAM,CAAA;AACrC,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,wBAAA,EAA2B,OAAA,CAAQ,MAAM,CAAA,aAAA,EAAgB,KAAK,QAAA,CAASA,IAAAA,EAAK,MAAM,CAAC,CAAA,CAAE,CAAA;AACjG,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAA,CAAQ,KAAK,wCAAwC,CAAA;AACrD,IAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,EACjD;AAEA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,oBAAA,EAAuB,OAAA,CAAQ,MAAM,CAAA,mBAAA,CAAqB,CAAA;AACtE,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IAClC,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,OAAO,CAAA,CAAE,KAAA;AAAA,IACT,UAAU,CAAA,CAAE,QAAA;AAAA,IACZ,YAAY,CAAA,CAAE;AAAA,GAChB,CAAE,CAAA;AACF,EAAA,MAAM,SAAS,MAAM,qBAAA;AAAA,IACnB,OAAA;AAAA,IACA,QAAQ,aAAA,KAAkB;AAAA,GAC5B;AAEA,EAAA,IAAI,OAAO,OAAA,EAAS;AAClB,IAAA,OAAA,CAAQ,IAAI,CAAA,4BAAA,EAA+B,MAAA,CAAO,OAAO,CAAA,MAAA,EAAS,MAAA,CAAO,OAAO,CAAA,QAAA,CAAU,CAAA;AAAA,EAC5F;AAEA,EAAA,OAAO,MAAA;AACT;;;ACzKA,IAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AACxBC,MAAA,CAAa,EAAE,IAAA,EAAMC,IAAAA,CAAK,KAAK,GAAA,EAAK,MAAM,GAAG,CAAA;AAC7CD,MAAA,CAAa,EAAE,MAAMC,IAAAA,CAAK,IAAA,CAAK,KAAK,YAAY,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,CAAA;AACnE,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,EAAAD,MAAA,CAAa,EAAE,IAAA,EAAMC,IAAAA,CAAK,KAAK,GAAA,EAAK,iBAAiB,GAAG,CAAA;AACxD,EAAAD,MAAA,CAAa,EAAE,MAAMC,IAAAA,CAAK,IAAA,CAAK,KAAK,uBAAuB,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,CAAA;AAChF;AAEA,eAAe,IAAA,GAAO;AACpB,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACjC,EAAA,MAAM,eAAe,IAAA,CAAK,QAAA,CAAS,iBAAiB,CAAA,IAAK,IAAA,CAAK,SAAS,IAAI,CAAA;AAC3E,EAAA,MAAM,eAAe,IAAA,CAAK,QAAA,CAAS,eAAe,CAAA,IAAK,IAAA,CAAK,SAAS,iBAAiB,CAAA;AAEtF,EAAA,OAAA,CAAQ,IAAI,wCAAwC,CAAA;AAEpD,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,oBAAA,CAAqB;AAAA,MACxC,YAAA;AAAA,MACA,eAAe,CAAC;AAAA,KACjB,CAAA;AAED,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,OAAA,CAAQ,IAAI,CAAA,8CAAA,CAA2C,CAAA;AACvD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAClD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAClD,MAAA,IAAI,MAAA,CAAO,OAAA,KAAY,KAAA,CAAA,IAAa,MAAA,CAAO,UAAU,CAAA,EAAG;AACtD,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAAA,MACpD;AACA,MAAA,IAAI,MAAA,CAAO,mBAAmB,SAAA,EAAW;AACvC,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,yDAAA,EAAuD,MAAA,CAAO,iBAAA,CAAkB,YAAY,CAAA,MAAA,CAAQ,CAAA;AAChH,QAAA,OAAA,CAAQ,IAAI,CAAA,uEAAA,CAAyE,CAAA;AAAA,MACvF;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,MAAM,2CAAsC,CAAA;AACpD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,yBAAoB,KAAK,CAAA;AACvC,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF;AAEA,IAAA,EAAK","file":"register-sitemap-cli.mjs","sourcesContent":["/**\n * Standalone implementation for uptrade-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\nimport fs from 'fs'\nimport path from 'path'\n\nfunction getApiConfig(): { apiUrl: string; apiKey: string } {\n const apiUrl =\n process.env.SONOR_API_URL ||\n process.env.UPTRADE_API_URL ||\n process.env.NEXT_PUBLIC_SONOR_API_URL ||\n process.env.NEXT_PUBLIC_UPTRADE_API_URL ||\n 'https://api.sonor.io'\n const apiKey =\n process.env.SONOR_API_KEY ||\n process.env.UPTRADE_API_KEY ||\n process.env.NEXT_PUBLIC_SONOR_API_KEY ||\n process.env.NEXT_PUBLIC_UPTRADE_API_KEY ||\n ''\n return { apiUrl, apiKey }\n}\n\nfunction discoverNextJsRoutes(\n appDir: string,\n basePath: string = ''\n): Array<{ path: string; priority: number }> {\n const entries: Array<{ path: string; priority: number }> = []\n\n const items = fs.readdirSync(appDir, { withFileTypes: true })\n\n for (const item of items) {\n if (item.name.startsWith('_') || item.name.startsWith('.')) continue\n if (item.name === 'api') continue\n if (item.name === 'node_modules') continue\n\n const itemPath = path.join(appDir, item.name)\n\n if (item.isDirectory()) {\n const hasPage =\n fs.existsSync(path.join(itemPath, 'page.tsx')) ||\n fs.existsSync(path.join(itemPath, 'page.js')) ||\n fs.existsSync(path.join(itemPath, 'page.jsx'))\n\n const isRouteGroup = item.name.startsWith('(') && item.name.endsWith(')')\n const isDynamic = item.name.startsWith('[') && item.name.endsWith(']')\n\n let routePath = basePath\n if (!isRouteGroup && !isDynamic) {\n routePath = `${basePath}/${item.name}`\n }\n\n if (hasPage && !isDynamic) {\n const priority = routePath === '' ? 1.0 : 0.8\n entries.push({ path: routePath || '/', priority })\n }\n\n if (!isDynamic) {\n const subEntries = discoverNextJsRoutes(\n itemPath,\n isRouteGroup ? basePath : routePath\n )\n entries.push(...subEntries)\n }\n }\n }\n\n if (basePath === '') {\n const hasRootPage =\n fs.existsSync(path.join(appDir, 'page.tsx')) ||\n fs.existsSync(path.join(appDir, 'page.js')) ||\n fs.existsSync(path.join(appDir, 'page.jsx'))\n if (hasRootPage) {\n entries.unshift({ path: '/', priority: 1.0 })\n }\n }\n\n return entries\n}\n\nasync function registerSitemapViaApi(\n entries: Array<{\n path: string\n title?: string\n priority?: number\n changefreq?: string\n }>,\n optimizeMeta: boolean\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, UPTRADE_API_KEY, NEXT_PUBLIC_SONOR_API_KEY, or NEXT_PUBLIC_UPTRADE_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 }),\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 }>\n autoDiscover?: boolean\n optimize_meta?: boolean\n}\n\nexport type RegisterLocalSitemapResult = {\n success: boolean\n created: number\n updated: number\n removed?: number\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\n if (options.autoDiscover && entries.length === 0) {\n const cwd = process.cwd()\n const appDirs = [\n path.join(cwd, 'app'),\n path.join(cwd, 'src', 'app'),\n ]\n for (const appDir of appDirs) {\n if (fs.existsSync(appDir)) {\n entries = discoverNextJsRoutes(appDir)\n console.log(`[Sonor] Auto-discovered ${entries.length} routes from ${path.relative(cwd, appDir)}`)\n break\n }\n }\n }\n\n if (entries.length === 0) {\n console.warn('[Sonor] No sitemap entries to register')\n return { success: true, created: 0, updated: 0 }\n }\n\n console.log(`[Sonor] Registering ${entries.length} sitemap entries...`)\n const payload = entries.map((e) => ({\n path: e.path,\n title: e.title,\n priority: e.priority,\n changefreq: e.changefreq,\n }))\n const result = await registerSitemapViaApi(\n payload,\n options.optimize_meta !== false\n )\n\n if (result.success) {\n console.log(`[Sonor] Sitemap registered: ${result.created} new, ${result.updated} updated`)\n }\n\n return result\n}\n","#!/usr/bin/env node\n/**\n * CLI script to register sitemap entries at build time\n * \n * Usage:\n * npx uptrade-register-sitemap\n * npx uptrade-register-sitemap --auto-discover\n * npx uptrade-register-sitemap --no-optimize # Skip Signal AI meta optimization\n * \n * Or in package.json:\n * {\n * \"scripts\": {\n * \"postbuild\": \"uptrade-register-sitemap --auto-discover\"\n * }\n * }\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 \n console.log('[Sonor] Registering sitemap entries...')\n \n try {\n const result = await registerLocalSitemap({\n autoDiscover,\n optimize_meta: !skipOptimize,\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"]}
|
|
1
|
+
{"version":3,"sources":["../../src/seo/register-sitemap-cli-impl.ts","../../src/seo/register-sitemap-cli.ts"],"names":["cwd","dotenvConfig","path"],"mappings":"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","file":"register-sitemap-cli.mjs","sourcesContent":["/**\n * Standalone implementation for uptrade-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\nimport fs from 'fs'\nimport path from 'path'\n\nfunction getApiConfig(): { apiUrl: string; apiKey: string } {\n const apiUrl =\n process.env.SONOR_API_URL ||\n process.env.UPTRADE_API_URL ||\n process.env.NEXT_PUBLIC_SONOR_API_URL ||\n process.env.NEXT_PUBLIC_UPTRADE_API_URL ||\n 'https://api.sonor.io'\n const apiKey =\n process.env.SONOR_API_KEY ||\n process.env.UPTRADE_API_KEY ||\n process.env.NEXT_PUBLIC_SONOR_API_KEY ||\n process.env.NEXT_PUBLIC_UPTRADE_API_KEY ||\n ''\n return { apiUrl, apiKey }\n}\n\nfunction discoverNextJsRoutes(\n appDir: string,\n basePath: string = ''\n): Array<{ path: string; priority: number }> {\n const entries: Array<{ path: string; priority: number }> = []\n\n const items = fs.readdirSync(appDir, { withFileTypes: true })\n\n for (const item of items) {\n if (item.name.startsWith('_') || item.name.startsWith('.')) continue\n if (item.name === 'api') continue\n if (item.name === 'node_modules') continue\n\n const itemPath = path.join(appDir, item.name)\n\n if (item.isDirectory()) {\n const hasPage =\n fs.existsSync(path.join(itemPath, 'page.tsx')) ||\n fs.existsSync(path.join(itemPath, 'page.js')) ||\n fs.existsSync(path.join(itemPath, 'page.jsx'))\n\n const isRouteGroup = item.name.startsWith('(') && item.name.endsWith(')')\n const isDynamic = item.name.startsWith('[') && item.name.endsWith(']')\n\n let routePath = basePath\n if (!isRouteGroup && !isDynamic) {\n routePath = `${basePath}/${item.name}`\n }\n\n if (hasPage && !isDynamic) {\n const priority = routePath === '' ? 1.0 : 0.8\n entries.push({ path: routePath || '/', priority })\n }\n\n if (!isDynamic) {\n const subEntries = discoverNextJsRoutes(\n itemPath,\n isRouteGroup ? basePath : routePath\n )\n entries.push(...subEntries)\n }\n }\n }\n\n if (basePath === '') {\n const hasRootPage =\n fs.existsSync(path.join(appDir, 'page.tsx')) ||\n fs.existsSync(path.join(appDir, 'page.js')) ||\n fs.existsSync(path.join(appDir, 'page.jsx'))\n if (hasRootPage) {\n entries.unshift({ path: '/', priority: 1.0 })\n }\n }\n\n return entries\n}\n\nasync function registerSitemapViaApi(\n entries: Array<{\n path: string\n title?: string\n priority?: number\n changefreq?: string\n }>,\n optimizeMeta: boolean\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, UPTRADE_API_KEY, NEXT_PUBLIC_SONOR_API_KEY, or NEXT_PUBLIC_UPTRADE_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: 'full-replace' }),\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 }>\n autoDiscover?: boolean\n optimize_meta?: boolean\n}\n\nexport type RegisterLocalSitemapResult = {\n success: boolean\n created: number\n updated: number\n removed?: number\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\n if (options.autoDiscover && entries.length === 0) {\n const cwd = process.cwd()\n const appDirs = [\n path.join(cwd, 'app'),\n path.join(cwd, 'src', 'app'),\n ]\n for (const appDir of appDirs) {\n if (fs.existsSync(appDir)) {\n entries = discoverNextJsRoutes(appDir)\n console.log(`[Sonor] Auto-discovered ${entries.length} routes from ${path.relative(cwd, appDir)}`)\n break\n }\n }\n }\n\n if (entries.length === 0) {\n console.warn('[Sonor] No sitemap entries to register')\n return { success: true, created: 0, updated: 0 }\n }\n\n console.log(`[Sonor] Registering ${entries.length} sitemap entries...`)\n const payload = entries.map((e) => ({\n path: e.path,\n title: e.title,\n priority: e.priority,\n changefreq: e.changefreq,\n }))\n const result = await registerSitemapViaApi(\n payload,\n options.optimize_meta !== false\n )\n\n if (result.success) {\n console.log(`[Sonor] Sitemap registered: ${result.created} new, ${result.updated} updated`)\n }\n\n return result\n}\n","#!/usr/bin/env node\n/**\n * CLI script to register sitemap entries at build time\n * \n * Usage:\n * npx uptrade-register-sitemap\n * npx uptrade-register-sitemap --auto-discover\n * npx uptrade-register-sitemap --no-optimize # Skip Signal AI meta optimization\n * \n * Or in package.json:\n * {\n * \"scripts\": {\n * \"postbuild\": \"uptrade-register-sitemap --auto-discover\"\n * }\n * }\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 \n console.log('[Sonor] Registering sitemap entries...')\n \n try {\n const result = await registerLocalSitemap({\n autoDiscover,\n optimize_meta: !skipOptimize,\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"]}
|
package/dist/seo/server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
3
|
+
var chunkELDJDBQL_js = require('../chunk-ELDJDBQL.js');
|
|
4
|
+
require('../chunk-PTTDKFL7.js');
|
|
5
5
|
require('../chunk-ZSMWDLMK.js');
|
|
6
6
|
var react = require('react');
|
|
7
7
|
|
|
@@ -185,11 +185,11 @@ react.cache(async (projectId) => {
|
|
|
185
185
|
|
|
186
186
|
Object.defineProperty(exports, "generateSitemap", {
|
|
187
187
|
enumerable: true,
|
|
188
|
-
get: function () { return
|
|
188
|
+
get: function () { return chunkELDJDBQL_js.generateSitemap; }
|
|
189
189
|
});
|
|
190
190
|
Object.defineProperty(exports, "registerLocalSitemap", {
|
|
191
191
|
enumerable: true,
|
|
192
|
-
get: function () { return
|
|
192
|
+
get: function () { return chunkELDJDBQL_js.registerLocalSitemap; }
|
|
193
193
|
});
|
|
194
194
|
exports.getABTest = getABTest;
|
|
195
195
|
exports.getContentBlock = getContentBlock;
|
package/dist/seo/server.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { generateSitemap, registerLocalSitemap } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { generateSitemap, registerLocalSitemap } from '../chunk-NRNK7LXK.mjs';
|
|
2
|
+
import '../chunk-FMB2RZDH.mjs';
|
|
3
3
|
import '../chunk-4XPGGLVP.mjs';
|
|
4
4
|
import { cache } from 'react';
|
|
5
5
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ensureMetadata, getABTest, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap } from './chunk-
|
|
1
|
+
export { ensureMetadata, getABTest, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap } from './chunk-FMB2RZDH.mjs';
|
|
2
2
|
import './chunk-4XPGGLVP.mjs';
|
|
3
|
-
//# sourceMappingURL=server-api-
|
|
4
|
-
//# sourceMappingURL=server-api-
|
|
3
|
+
//# sourceMappingURL=server-api-COVFLFZ2.mjs.map
|
|
4
|
+
//# sourceMappingURL=server-api-COVFLFZ2.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"server-api-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"server-api-COVFLFZ2.mjs"}
|
|
@@ -1,81 +1,81 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkPTTDKFL7_js = require('./chunk-PTTDKFL7.js');
|
|
4
4
|
require('./chunk-ZSMWDLMK.js');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "ensureMetadata", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunkPTTDKFL7_js.ensureMetadata; }
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, "getABTest", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
14
|
+
get: function () { return chunkPTTDKFL7_js.getABTest; }
|
|
15
15
|
});
|
|
16
16
|
Object.defineProperty(exports, "getContentBlock", {
|
|
17
17
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunkPTTDKFL7_js.getContentBlock; }
|
|
19
19
|
});
|
|
20
20
|
Object.defineProperty(exports, "getEntities", {
|
|
21
21
|
enumerable: true,
|
|
22
|
-
get: function () { return
|
|
22
|
+
get: function () { return chunkPTTDKFL7_js.getEntities; }
|
|
23
23
|
});
|
|
24
24
|
Object.defineProperty(exports, "getEntityEnhancedSchema", {
|
|
25
25
|
enumerable: true,
|
|
26
|
-
get: function () { return
|
|
26
|
+
get: function () { return chunkPTTDKFL7_js.getEntityEnhancedSchema; }
|
|
27
27
|
});
|
|
28
28
|
Object.defineProperty(exports, "getFAQData", {
|
|
29
29
|
enumerable: true,
|
|
30
|
-
get: function () { return
|
|
30
|
+
get: function () { return chunkPTTDKFL7_js.getFAQData; }
|
|
31
31
|
});
|
|
32
32
|
Object.defineProperty(exports, "getInternalLinks", {
|
|
33
33
|
enumerable: true,
|
|
34
|
-
get: function () { return
|
|
34
|
+
get: function () { return chunkPTTDKFL7_js.getInternalLinks; }
|
|
35
35
|
});
|
|
36
36
|
Object.defineProperty(exports, "getManagedScripts", {
|
|
37
37
|
enumerable: true,
|
|
38
|
-
get: function () { return
|
|
38
|
+
get: function () { return chunkPTTDKFL7_js.getManagedScripts; }
|
|
39
39
|
});
|
|
40
40
|
Object.defineProperty(exports, "getPrimaryEntity", {
|
|
41
41
|
enumerable: true,
|
|
42
|
-
get: function () { return
|
|
42
|
+
get: function () { return chunkPTTDKFL7_js.getPrimaryEntity; }
|
|
43
43
|
});
|
|
44
44
|
Object.defineProperty(exports, "getRedirectData", {
|
|
45
45
|
enumerable: true,
|
|
46
|
-
get: function () { return
|
|
46
|
+
get: function () { return chunkPTTDKFL7_js.getRedirectData; }
|
|
47
47
|
});
|
|
48
48
|
Object.defineProperty(exports, "getRobotsData", {
|
|
49
49
|
enumerable: true,
|
|
50
|
-
get: function () { return
|
|
50
|
+
get: function () { return chunkPTTDKFL7_js.getRobotsData; }
|
|
51
51
|
});
|
|
52
52
|
Object.defineProperty(exports, "getSEOPageData", {
|
|
53
53
|
enumerable: true,
|
|
54
|
-
get: function () { return
|
|
54
|
+
get: function () { return chunkPTTDKFL7_js.getSEOPageData; }
|
|
55
55
|
});
|
|
56
56
|
Object.defineProperty(exports, "getSchemaMarkups", {
|
|
57
57
|
enumerable: true,
|
|
58
|
-
get: function () { return
|
|
58
|
+
get: function () { return chunkPTTDKFL7_js.getSchemaMarkups; }
|
|
59
59
|
});
|
|
60
60
|
Object.defineProperty(exports, "getSitemapEntries", {
|
|
61
61
|
enumerable: true,
|
|
62
|
-
get: function () { return
|
|
62
|
+
get: function () { return chunkPTTDKFL7_js.getSitemapEntries; }
|
|
63
63
|
});
|
|
64
64
|
Object.defineProperty(exports, "getVisibilityScore", {
|
|
65
65
|
enumerable: true,
|
|
66
|
-
get: function () { return
|
|
66
|
+
get: function () { return chunkPTTDKFL7_js.getVisibilityScore; }
|
|
67
67
|
});
|
|
68
68
|
Object.defineProperty(exports, "getVisibilitySummary", {
|
|
69
69
|
enumerable: true,
|
|
70
|
-
get: function () { return
|
|
70
|
+
get: function () { return chunkPTTDKFL7_js.getVisibilitySummary; }
|
|
71
71
|
});
|
|
72
72
|
Object.defineProperty(exports, "recordABImpression", {
|
|
73
73
|
enumerable: true,
|
|
74
|
-
get: function () { return
|
|
74
|
+
get: function () { return chunkPTTDKFL7_js.recordABImpression; }
|
|
75
75
|
});
|
|
76
76
|
Object.defineProperty(exports, "registerSitemap", {
|
|
77
77
|
enumerable: true,
|
|
78
|
-
get: function () { return
|
|
78
|
+
get: function () { return chunkPTTDKFL7_js.registerSitemap; }
|
|
79
79
|
});
|
|
80
|
-
//# sourceMappingURL=server-api-
|
|
81
|
-
//# sourceMappingURL=server-api-
|
|
80
|
+
//# sourceMappingURL=server-api-XGKRGUMG.js.map
|
|
81
|
+
//# sourceMappingURL=server-api-XGKRGUMG.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"server-api-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"server-api-XGKRGUMG.js"}
|
package/dist/setup/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chunkGVXZWXQ7_js = require('../chunk-GVXZWXQ7.js');
|
|
4
|
-
var
|
|
4
|
+
var chunkZQO6FZZB_js = require('../chunk-ZQO6FZZB.js');
|
|
5
5
|
var chunkIFAW7JFO_js = require('../chunk-IFAW7JFO.js');
|
|
6
6
|
require('../chunk-ZSMWDLMK.js');
|
|
7
7
|
|
|
@@ -21,7 +21,7 @@ Object.defineProperty(exports, "getSnippetsByModule", {
|
|
|
21
21
|
});
|
|
22
22
|
Object.defineProperty(exports, "handleRequest", {
|
|
23
23
|
enumerable: true,
|
|
24
|
-
get: function () { return
|
|
24
|
+
get: function () { return chunkZQO6FZZB_js.handleRequest; }
|
|
25
25
|
});
|
|
26
26
|
Object.defineProperty(exports, "SetupWizard", {
|
|
27
27
|
enumerable: true,
|
package/dist/setup/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { IntegrationCodeView, generateIntegrationCode, getSnippetsByModule } from '../chunk-5YDPPOUU.mjs';
|
|
2
|
-
export { handleRequest } from '../chunk-
|
|
2
|
+
export { handleRequest } from '../chunk-MCGLYYAR.mjs';
|
|
3
3
|
export { SetupWizard, SetupWizard as UptradeSetup } from '../chunk-IKIJEKU3.mjs';
|
|
4
4
|
import '../chunk-4XPGGLVP.mjs';
|
|
5
5
|
//# sourceMappingURL=index.mjs.map
|
package/dist/setup/server.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkZQO6FZZB_js = require('../chunk-ZQO6FZZB.js');
|
|
4
4
|
require('../chunk-ZSMWDLMK.js');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "handleRequest", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunkZQO6FZZB_js.handleRequest; }
|
|
11
11
|
});
|
|
12
12
|
//# sourceMappingURL=server.js.map
|
|
13
13
|
//# sourceMappingURL=server.js.map
|
package/dist/setup/server.mjs
CHANGED
package/dist/sitemap/index.d.mts
CHANGED
|
@@ -43,6 +43,15 @@ interface SitemapConfig {
|
|
|
43
43
|
priority?: number;
|
|
44
44
|
changeFrequency?: SitemapEntry['changeFrequency'];
|
|
45
45
|
}>>;
|
|
46
|
+
/**
|
|
47
|
+
* Explicit values for dynamic route segments.
|
|
48
|
+
* Keys are the segment names (e.g. '[slug]') and values are arrays of param values.
|
|
49
|
+
* This is a simpler alternative to relying on generateStaticParams auto-discovery.
|
|
50
|
+
* @example { '[slug]': ['seo', 'analytics', 'crm', 'echo'] }
|
|
51
|
+
*/
|
|
52
|
+
dynamicRoutes?: Record<string, string[]>;
|
|
53
|
+
/** When true (default), attempt to import generateStaticParams from dynamic route pages at build time */
|
|
54
|
+
resolveGenerateStaticParams?: boolean;
|
|
46
55
|
/** Priority overrides by path pattern */
|
|
47
56
|
priorities?: Record<string, number>;
|
|
48
57
|
/** Portal API URL for syncing (defaults to SONOR_API_URL or https://api.sonor.io) */
|
package/dist/sitemap/index.d.ts
CHANGED
|
@@ -43,6 +43,15 @@ interface SitemapConfig {
|
|
|
43
43
|
priority?: number;
|
|
44
44
|
changeFrequency?: SitemapEntry['changeFrequency'];
|
|
45
45
|
}>>;
|
|
46
|
+
/**
|
|
47
|
+
* Explicit values for dynamic route segments.
|
|
48
|
+
* Keys are the segment names (e.g. '[slug]') and values are arrays of param values.
|
|
49
|
+
* This is a simpler alternative to relying on generateStaticParams auto-discovery.
|
|
50
|
+
* @example { '[slug]': ['seo', 'analytics', 'crm', 'echo'] }
|
|
51
|
+
*/
|
|
52
|
+
dynamicRoutes?: Record<string, string[]>;
|
|
53
|
+
/** When true (default), attempt to import generateStaticParams from dynamic route pages at build time */
|
|
54
|
+
resolveGenerateStaticParams?: boolean;
|
|
46
55
|
/** Priority overrides by path pattern */
|
|
47
56
|
priorities?: Record<string, number>;
|
|
48
57
|
/** Portal API URL for syncing (defaults to SONOR_API_URL or https://api.sonor.io) */
|
package/dist/sitemap/index.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkGJD4CFHN_js = require('../chunk-GJD4CFHN.js');
|
|
4
4
|
var chunkEUNL6GAL_js = require('../chunk-EUNL6GAL.js');
|
|
5
5
|
require('../chunk-ZSMWDLMK.js');
|
|
6
6
|
var fs = require('fs');
|
|
7
7
|
var path = require('path');
|
|
8
|
+
var url = require('url');
|
|
8
9
|
|
|
9
10
|
var IGNORED_FOLDERS = [
|
|
10
11
|
"api",
|
|
@@ -29,7 +30,42 @@ function isExcluded(path, patterns) {
|
|
|
29
30
|
return path === pattern;
|
|
30
31
|
});
|
|
31
32
|
}
|
|
32
|
-
function
|
|
33
|
+
function toUrlPath(fsPath) {
|
|
34
|
+
let urlPath = "/" + fsPath;
|
|
35
|
+
urlPath = urlPath.replace(/\/\([^)]+\)/g, "");
|
|
36
|
+
urlPath = urlPath.replace(/\/+/g, "/");
|
|
37
|
+
if (urlPath !== "/" && urlPath.endsWith("/")) {
|
|
38
|
+
urlPath = urlPath.slice(0, -1);
|
|
39
|
+
}
|
|
40
|
+
return urlPath;
|
|
41
|
+
}
|
|
42
|
+
async function tryGenerateStaticParams(pageFilePath) {
|
|
43
|
+
try {
|
|
44
|
+
const fileUrl = url.pathToFileURL(pageFilePath).href;
|
|
45
|
+
const importPromise = import(fileUrl);
|
|
46
|
+
const timeoutPromise = new Promise(
|
|
47
|
+
(_, reject) => setTimeout(() => reject(new Error("generateStaticParams import timed out (5s)")), 5e3)
|
|
48
|
+
);
|
|
49
|
+
const mod = await Promise.race([importPromise, timeoutPromise]);
|
|
50
|
+
if (typeof mod.generateStaticParams === "function") {
|
|
51
|
+
const resultPromise = Promise.resolve(mod.generateStaticParams());
|
|
52
|
+
const resultTimeout = new Promise(
|
|
53
|
+
(_, reject) => setTimeout(() => reject(new Error("generateStaticParams call timed out (10s)")), 1e4)
|
|
54
|
+
);
|
|
55
|
+
const params = await Promise.race([resultPromise, resultTimeout]);
|
|
56
|
+
if (Array.isArray(params)) {
|
|
57
|
+
return params;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
} catch (err) {
|
|
61
|
+
console.warn(
|
|
62
|
+
`[site-kit] Could not resolve generateStaticParams from ${pageFilePath}:`,
|
|
63
|
+
err.message
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
async function discoverPages(appDir, currentPath = "", pages = [], options = {}) {
|
|
33
69
|
const fullPath = path.join(appDir, currentPath);
|
|
34
70
|
if (!fs.existsSync(fullPath)) {
|
|
35
71
|
return pages;
|
|
@@ -37,13 +73,10 @@ function discoverPages(appDir, currentPath = "", pages = []) {
|
|
|
37
73
|
const entries = fs.readdirSync(fullPath);
|
|
38
74
|
const hasPage = entries.some((entry) => PAGE_FILES.includes(entry));
|
|
39
75
|
if (hasPage) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
if (urlPath !== "/" && urlPath.endsWith("/")) {
|
|
44
|
-
urlPath = urlPath.slice(0, -1);
|
|
76
|
+
const urlPath = toUrlPath(currentPath);
|
|
77
|
+
if (!urlPath.includes("[")) {
|
|
78
|
+
pages.push(urlPath);
|
|
45
79
|
}
|
|
46
|
-
pages.push(urlPath);
|
|
47
80
|
}
|
|
48
81
|
for (const entry of entries) {
|
|
49
82
|
const entryPath = path.join(fullPath, entry);
|
|
@@ -53,17 +86,118 @@ function discoverPages(appDir, currentPath = "", pages = []) {
|
|
|
53
86
|
if (IGNORED_FOLDERS.some((ignored) => folderName.includes(ignored))) {
|
|
54
87
|
continue;
|
|
55
88
|
}
|
|
56
|
-
if (entry.startsWith("
|
|
89
|
+
if (entry.startsWith("_")) {
|
|
57
90
|
continue;
|
|
58
91
|
}
|
|
59
|
-
if (entry.startsWith("
|
|
92
|
+
if (entry.startsWith("[") && entry.endsWith("]")) {
|
|
93
|
+
const paramName = entry.slice(1, -1);
|
|
94
|
+
let paramValues = null;
|
|
95
|
+
if (options.dynamicRoutes) {
|
|
96
|
+
paramValues = options.dynamicRoutes[entry] ?? options.dynamicRoutes[paramName] ?? null;
|
|
97
|
+
}
|
|
98
|
+
if (!paramValues && options.resolveGenerateStaticParams !== false) {
|
|
99
|
+
const dynamicDirPath = path.join(fullPath, entry);
|
|
100
|
+
const pageFile = PAGE_FILES.find((pf) => fs.existsSync(path.join(dynamicDirPath, pf)));
|
|
101
|
+
if (pageFile) {
|
|
102
|
+
const pageFilePath = path.resolve(dynamicDirPath, pageFile);
|
|
103
|
+
const params = await tryGenerateStaticParams(pageFilePath);
|
|
104
|
+
if (params && params.length > 0) {
|
|
105
|
+
paramValues = params.map((p) => p[paramName]).filter((v) => typeof v === "string");
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (paramValues && paramValues.length > 0) {
|
|
110
|
+
const dynamicDirPath = path.join(fullPath, entry);
|
|
111
|
+
const dynamicEntries = fs.readdirSync(dynamicDirPath);
|
|
112
|
+
const dynamicHasPage = dynamicEntries.some((e) => PAGE_FILES.includes(e));
|
|
113
|
+
for (const value of paramValues) {
|
|
114
|
+
if (dynamicHasPage) {
|
|
115
|
+
const resolvedPath = toUrlPath(path.join(currentPath, value));
|
|
116
|
+
if (!resolvedPath.includes("[")) {
|
|
117
|
+
pages.push(resolvedPath);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
for (const subEntry of dynamicEntries) {
|
|
121
|
+
if (PAGE_FILES.includes(subEntry)) continue;
|
|
122
|
+
const subEntryPath = path.join(dynamicDirPath, subEntry);
|
|
123
|
+
if (fs.statSync(subEntryPath).isDirectory()) {
|
|
124
|
+
await discoverPagesFromDisk(
|
|
125
|
+
dynamicDirPath,
|
|
126
|
+
subEntry,
|
|
127
|
+
path.join(currentPath, value),
|
|
128
|
+
pages,
|
|
129
|
+
options
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
} else {
|
|
135
|
+
console.warn(
|
|
136
|
+
`[site-kit] Skipping dynamic segment "${entry}" at /${currentPath} \u2014 no params resolved. Provide dynamicRoutes config or export generateStaticParams from the page.`
|
|
137
|
+
);
|
|
138
|
+
}
|
|
60
139
|
continue;
|
|
61
140
|
}
|
|
62
|
-
discoverPages(appDir, path.join(currentPath, entry), pages);
|
|
141
|
+
await discoverPages(appDir, path.join(currentPath, entry), pages, options);
|
|
63
142
|
}
|
|
64
143
|
}
|
|
65
144
|
return pages;
|
|
66
145
|
}
|
|
146
|
+
async function discoverPagesFromDisk(diskParent, diskEntry, urlParentPath, pages, options) {
|
|
147
|
+
const diskPath = path.join(diskParent, diskEntry);
|
|
148
|
+
if (!fs.existsSync(diskPath) || !fs.statSync(diskPath).isDirectory()) return;
|
|
149
|
+
const entries = fs.readdirSync(diskPath);
|
|
150
|
+
const hasPage = entries.some((e) => PAGE_FILES.includes(e));
|
|
151
|
+
const urlPath = toUrlPath(path.join(urlParentPath, diskEntry));
|
|
152
|
+
if (hasPage && !urlPath.includes("[")) {
|
|
153
|
+
pages.push(urlPath);
|
|
154
|
+
}
|
|
155
|
+
for (const sub of entries) {
|
|
156
|
+
if (PAGE_FILES.includes(sub)) continue;
|
|
157
|
+
const subPath = path.join(diskPath, sub);
|
|
158
|
+
if (!fs.statSync(subPath).isDirectory()) continue;
|
|
159
|
+
const folderName = sub.toLowerCase();
|
|
160
|
+
if (IGNORED_FOLDERS.some((ignored) => folderName.includes(ignored))) continue;
|
|
161
|
+
if (sub.startsWith("_")) continue;
|
|
162
|
+
if (sub.startsWith("[") && sub.endsWith("]")) {
|
|
163
|
+
const nestedParam = sub.slice(1, -1);
|
|
164
|
+
let nestedValues = null;
|
|
165
|
+
if (options.dynamicRoutes) {
|
|
166
|
+
nestedValues = options.dynamicRoutes[sub] ?? options.dynamicRoutes[nestedParam] ?? null;
|
|
167
|
+
}
|
|
168
|
+
if (!nestedValues && options.resolveGenerateStaticParams !== false) {
|
|
169
|
+
const nestedDir = path.join(diskPath, sub);
|
|
170
|
+
const pageFile = PAGE_FILES.find((pf) => fs.existsSync(path.join(nestedDir, pf)));
|
|
171
|
+
if (pageFile) {
|
|
172
|
+
const params = await tryGenerateStaticParams(path.resolve(nestedDir, pageFile));
|
|
173
|
+
if (params && params.length > 0) {
|
|
174
|
+
nestedValues = params.map((p) => p[nestedParam]).filter((v) => typeof v === "string");
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (nestedValues && nestedValues.length > 0) {
|
|
179
|
+
const nestedDir = path.join(diskPath, sub);
|
|
180
|
+
const nestedEntries = fs.readdirSync(nestedDir);
|
|
181
|
+
const nestedHasPage = nestedEntries.some((e) => PAGE_FILES.includes(e));
|
|
182
|
+
for (const val of nestedValues) {
|
|
183
|
+
if (nestedHasPage) {
|
|
184
|
+
const resolved = toUrlPath(path.join(urlParentPath, diskEntry, val));
|
|
185
|
+
if (!resolved.includes("[")) pages.push(resolved);
|
|
186
|
+
}
|
|
187
|
+
for (const nestedSub of nestedEntries) {
|
|
188
|
+
if (PAGE_FILES.includes(nestedSub)) continue;
|
|
189
|
+
const nestedSubPath = path.join(nestedDir, nestedSub);
|
|
190
|
+
if (fs.statSync(nestedSubPath).isDirectory()) {
|
|
191
|
+
await discoverPagesFromDisk(nestedDir, nestedSub, path.join(urlParentPath, diskEntry, val), pages, options);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
await discoverPagesFromDisk(diskPath, sub, path.join(urlParentPath, diskEntry), pages, options);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
67
201
|
function findAppDir() {
|
|
68
202
|
const cwd = process.cwd();
|
|
69
203
|
const candidates = [
|
|
@@ -116,7 +250,7 @@ async function syncSitemapToPortal(entries, apiUrl, apiKey, options) {
|
|
|
116
250
|
};
|
|
117
251
|
});
|
|
118
252
|
try {
|
|
119
|
-
const body = { entries: normalizedEntries };
|
|
253
|
+
const body = { entries: normalizedEntries, mode: "full-replace" };
|
|
120
254
|
if (options?.optimizeMeta !== void 0) body.optimize_meta = options.optimizeMeta;
|
|
121
255
|
if (options?.awaitMeta !== void 0) body.await_meta = options.awaitMeta;
|
|
122
256
|
const response = await fetch(`${apiUrl}/api/public/seo/register-sitemap`, {
|
|
@@ -163,12 +297,15 @@ function createSitemap(config) {
|
|
|
163
297
|
let pages = [];
|
|
164
298
|
try {
|
|
165
299
|
const appDir = findAppDir();
|
|
166
|
-
pages = discoverPages(appDir
|
|
300
|
+
pages = await discoverPages(appDir, "", [], {
|
|
301
|
+
dynamicRoutes: config.dynamicRoutes,
|
|
302
|
+
resolveGenerateStaticParams: config.resolveGenerateStaticParams
|
|
303
|
+
});
|
|
167
304
|
} catch (error) {
|
|
168
305
|
console.warn("[site-kit] Failed to discover pages:", error);
|
|
169
306
|
pages = ["/"];
|
|
170
307
|
}
|
|
171
|
-
pages = pages.filter((page) => !isExcluded(page, allExclusions));
|
|
308
|
+
pages = Array.from(new Set(pages)).filter((page) => !isExcluded(page, allExclusions));
|
|
172
309
|
const entries = pages.map((path) => ({
|
|
173
310
|
url: `${normalizedBaseUrl}${path}`,
|
|
174
311
|
lastModified: /* @__PURE__ */ new Date(),
|
|
@@ -177,15 +314,18 @@ function createSitemap(config) {
|
|
|
177
314
|
}));
|
|
178
315
|
if (config.additionalPaths) {
|
|
179
316
|
try {
|
|
317
|
+
const existingUrls = new Set(entries.map((e) => e.url));
|
|
180
318
|
const additional = await config.additionalPaths();
|
|
181
319
|
for (const item of additional) {
|
|
182
|
-
|
|
320
|
+
const fullUrl = `${normalizedBaseUrl}${item.path}`;
|
|
321
|
+
if (!isExcluded(item.path, allExclusions) && !existingUrls.has(fullUrl)) {
|
|
183
322
|
entries.push({
|
|
184
|
-
url:
|
|
323
|
+
url: fullUrl,
|
|
185
324
|
lastModified: /* @__PURE__ */ new Date(),
|
|
186
325
|
changeFrequency: item.changeFrequency ?? defaultChangeFrequency,
|
|
187
326
|
priority: item.priority ?? getPriority(item.path, config)
|
|
188
327
|
});
|
|
328
|
+
existingUrls.add(fullUrl);
|
|
189
329
|
}
|
|
190
330
|
}
|
|
191
331
|
} catch (error) {
|
|
@@ -257,7 +397,7 @@ function createSitemap(config) {
|
|
|
257
397
|
}
|
|
258
398
|
if (config.optimizedLLMsTxt !== false) {
|
|
259
399
|
try {
|
|
260
|
-
const writeResult = await
|
|
400
|
+
const writeResult = await chunkGJD4CFHN_js.writeLLMsTxtToPublic({
|
|
261
401
|
apiUrl,
|
|
262
402
|
apiKey,
|
|
263
403
|
full: config.optimizedLLMsFullTxt ?? false,
|