@sonordev/site-kit 2.0.0 → 2.0.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/SitemapSync-DXIV5TXI.mjs +4 -0
- package/dist/{SitemapSync-YK6IXOSY.mjs.map → SitemapSync-DXIV5TXI.mjs.map} +1 -1
- package/dist/SitemapSync-Z4NDW2S7.js +13 -0
- package/dist/{SitemapSync-FKYWGDAD.js.map → SitemapSync-Z4NDW2S7.js.map} +1 -1
- package/dist/blog/index.d.mts +6 -4
- package/dist/blog/index.d.ts +6 -4
- package/dist/blog/index.js +305 -20
- package/dist/blog/index.js.map +1 -1
- package/dist/blog/index.mjs +305 -21
- package/dist/blog/index.mjs.map +1 -1
- package/dist/blog/server.d.mts +41 -2
- package/dist/blog/server.d.ts +41 -2
- package/dist/blog/server.js +126 -685
- package/dist/blog/server.js.map +1 -1
- package/dist/blog/server.mjs +1 -663
- package/dist/blog/server.mjs.map +1 -1
- package/dist/{chunk-UD5447TC.js → chunk-6LZEGXDE.js} +3 -3
- package/dist/{chunk-UD5447TC.js.map → chunk-6LZEGXDE.js.map} +1 -1
- package/dist/{chunk-BVUOATPG.js → chunk-A7RCX6OI.js} +7 -7
- package/dist/{chunk-BVUOATPG.js.map → chunk-A7RCX6OI.js.map} +1 -1
- package/dist/{chunk-QW4RQHSK.js → chunk-ACBDH4RK.js} +15 -3
- package/dist/chunk-ACBDH4RK.js.map +1 -0
- package/dist/{chunk-TSK35UHV.mjs → chunk-HA5OXTXW.mjs} +15 -3
- package/dist/chunk-HA5OXTXW.mjs.map +1 -0
- package/dist/{chunk-RLNG67S5.js → chunk-ITPVKQB6.js} +74 -4
- package/dist/chunk-ITPVKQB6.js.map +1 -0
- package/dist/{chunk-DWI5ZKPM.mjs → chunk-IYQUFQYM.mjs} +4 -4
- package/dist/{chunk-DWI5ZKPM.mjs.map → chunk-IYQUFQYM.mjs.map} +1 -1
- package/dist/chunk-JUWYIDIA.js +823 -0
- package/dist/chunk-JUWYIDIA.js.map +1 -0
- package/dist/{chunk-OM6R7CDP.mjs → chunk-L7XPPFSS.mjs} +3 -3
- package/dist/{chunk-OM6R7CDP.mjs.map → chunk-L7XPPFSS.mjs.map} +1 -1
- package/dist/{chunk-I34XL5VJ.js → chunk-PKUTYMN7.js} +5 -5
- package/dist/{chunk-I34XL5VJ.js.map → chunk-PKUTYMN7.js.map} +1 -1
- package/dist/{chunk-WN2PUL6B.mjs → chunk-RVAFAOBA.mjs} +3 -3
- package/dist/{chunk-WN2PUL6B.mjs.map → chunk-RVAFAOBA.mjs.map} +1 -1
- package/dist/chunk-S2WK4LL7.mjs +791 -0
- package/dist/chunk-S2WK4LL7.mjs.map +1 -0
- package/dist/{chunk-J4U3IEXL.mjs → chunk-TUFP3FGI.mjs} +4 -4
- package/dist/chunk-TUFP3FGI.mjs.map +1 -0
- package/dist/{chunk-FCXQECM7.js → chunk-VU4GL5ZG.js} +4 -4
- package/dist/chunk-VU4GL5ZG.js.map +1 -0
- package/dist/{chunk-W7RZ3OTA.mjs → chunk-Z6EHHJWU.mjs} +74 -4
- package/dist/chunk-Z6EHHJWU.mjs.map +1 -0
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- 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.d.mts +2 -2
- package/dist/llms/index.d.ts +2 -2
- package/dist/llms/index.js +12 -12
- package/dist/llms/index.mjs +2 -2
- package/dist/seo/client.js +2 -2
- package/dist/seo/client.mjs +1 -1
- package/dist/seo/index.js +42 -42
- package/dist/seo/index.mjs +5 -5
- package/dist/seo/register-sitemap-cli.js +14 -1
- package/dist/seo/register-sitemap-cli.js.map +1 -1
- package/dist/seo/register-sitemap-cli.mjs +14 -1
- package/dist/seo/register-sitemap-cli.mjs.map +1 -1
- package/dist/seo/server.js +6 -6
- package/dist/seo/server.js.map +1 -1
- package/dist/seo/server.mjs +4 -4
- package/dist/seo/server.mjs.map +1 -1
- package/dist/{server-api-UIZU4JM3.mjs → server-api-O7SSHYQS.mjs} +3 -3
- package/dist/{server-api-UIZU4JM3.mjs.map → server-api-O7SSHYQS.mjs.map} +1 -1
- package/dist/{server-api-36R24YWN.js → server-api-W4BXUFCT.js} +21 -21
- package/dist/{server-api-36R24YWN.js.map → server-api-W4BXUFCT.js.map} +1 -1
- package/dist/sitemap/index.d.mts +34 -2
- package/dist/sitemap/index.d.ts +34 -2
- package/dist/sitemap/index.js +53 -6
- package/dist/sitemap/index.js.map +1 -1
- package/dist/sitemap/index.mjs +52 -6
- package/dist/sitemap/index.mjs.map +1 -1
- package/dist/{types-Blb2QNkV.d.ts → types-BxzT7yhf.d.mts} +22 -1
- package/dist/{types-Blb2QNkV.d.mts → types-BxzT7yhf.d.ts} +22 -1
- package/dist/{types-D08004rU.d.mts → types-DuvkNnu0.d.mts} +25 -1
- package/dist/{types-D08004rU.d.ts → types-DuvkNnu0.d.ts} +25 -1
- package/package.json +1 -1
- package/dist/SitemapSync-FKYWGDAD.js +0 -13
- package/dist/SitemapSync-YK6IXOSY.mjs +0 -4
- package/dist/chunk-FCXQECM7.js.map +0 -1
- package/dist/chunk-J4U3IEXL.mjs.map +0 -1
- package/dist/chunk-QW4RQHSK.js.map +0 -1
- package/dist/chunk-RLNG67S5.js.map +0 -1
- package/dist/chunk-TSK35UHV.mjs.map +0 -1
- package/dist/chunk-W7RZ3OTA.mjs.map +0 -1
package/dist/layout/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk6LZEGXDE_js = require('../chunk-6LZEGXDE.js');
|
|
4
4
|
var chunkGCPPXUAI_js = require('../chunk-GCPPXUAI.js');
|
|
5
|
-
var
|
|
6
|
-
require('../chunk-
|
|
5
|
+
var chunkPKUTYMN7_js = require('../chunk-PKUTYMN7.js');
|
|
6
|
+
require('../chunk-VU4GL5ZG.js');
|
|
7
7
|
require('../chunk-ZSMWDLMK.js');
|
|
8
8
|
var jsxRuntime = require('react/jsx-runtime');
|
|
9
9
|
|
|
@@ -39,9 +39,9 @@ async function SiteKitLayout({
|
|
|
39
39
|
/* @__PURE__ */ jsxRuntime.jsx("link", { rel: "preconnect", href: apiOrigin, crossOrigin: "anonymous" }),
|
|
40
40
|
/* @__PURE__ */ jsxRuntime.jsx("link", { rel: "dns-prefetch", href: apiOrigin }),
|
|
41
41
|
favicon && /* @__PURE__ */ jsxRuntime.jsx(chunkGCPPXUAI_js.ManagedFavicon, { apiKey: resolvedApiKey, apiUrl: resolvedApiUrl }),
|
|
42
|
-
managedScripts && /* @__PURE__ */ jsxRuntime.jsx(
|
|
42
|
+
managedScripts && /* @__PURE__ */ jsxRuntime.jsx(chunkPKUTYMN7_js.ManagedScripts, { position: "head" }),
|
|
43
43
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
44
|
-
|
|
44
|
+
chunk6LZEGXDE_js.SiteKitClientProviders,
|
|
45
45
|
{
|
|
46
46
|
apiKey: resolvedApiKey,
|
|
47
47
|
apiUrl: resolvedApiUrl,
|
|
@@ -54,7 +54,7 @@ async function SiteKitLayout({
|
|
|
54
54
|
children
|
|
55
55
|
}
|
|
56
56
|
),
|
|
57
|
-
managedScripts && /* @__PURE__ */ jsxRuntime.jsx(
|
|
57
|
+
managedScripts && /* @__PURE__ */ jsxRuntime.jsx(chunkPKUTYMN7_js.ManagedScripts, { position: "body-end" })
|
|
58
58
|
] });
|
|
59
59
|
}
|
|
60
60
|
|
package/dist/layout/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { SiteKitClientProviders } from '../chunk-
|
|
1
|
+
import { SiteKitClientProviders } from '../chunk-RVAFAOBA.mjs';
|
|
2
2
|
import { ManagedFavicon } from '../chunk-CU6OGBKK.mjs';
|
|
3
|
-
import { ManagedScripts } from '../chunk-
|
|
4
|
-
import '../chunk-
|
|
3
|
+
import { ManagedScripts } from '../chunk-L7XPPFSS.mjs';
|
|
4
|
+
import '../chunk-TUFP3FGI.mjs';
|
|
5
5
|
import '../chunk-4XPGGLVP.mjs';
|
|
6
6
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
7
7
|
|
package/dist/llms/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { G as GenerateLLMSTxtOptions, a as LLMSTxtContent, S as SpeakableSchemaProps, b as SpeakableConfig, A as AEOBlockProps, c as AEOSummaryProps, d as AEODefinitionProps, e as AEOClaimProps, L as LLMsDataResponse, f as LLMBusinessInfo, g as LLMService, h as LLMFAQItem, i as LLMPageSummary } from '../types-
|
|
2
|
-
export { m as AEOCitedContentProps, k as AEOEntityProps, l as AEOProvenanceListProps, C as ContentProvenance, j as LLMContactInfo } from '../types-
|
|
1
|
+
import { G as GenerateLLMSTxtOptions, a as LLMSTxtContent, S as SpeakableSchemaProps, b as SpeakableConfig, A as AEOBlockProps, c as AEOSummaryProps, d as AEODefinitionProps, e as AEOClaimProps, L as LLMsDataResponse, f as LLMBusinessInfo, g as LLMService, h as LLMFAQItem, i as LLMPageSummary } from '../types-BxzT7yhf.mjs';
|
|
2
|
+
export { m as AEOCitedContentProps, k as AEOEntityProps, l as AEOProvenanceListProps, C as ContentProvenance, j as LLMContactInfo, n as LLMPortfolioItem } from '../types-BxzT7yhf.mjs';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
|
|
5
5
|
/**
|
package/dist/llms/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { G as GenerateLLMSTxtOptions, a as LLMSTxtContent, S as SpeakableSchemaProps, b as SpeakableConfig, A as AEOBlockProps, c as AEOSummaryProps, d as AEODefinitionProps, e as AEOClaimProps, L as LLMsDataResponse, f as LLMBusinessInfo, g as LLMService, h as LLMFAQItem, i as LLMPageSummary } from '../types-
|
|
2
|
-
export { m as AEOCitedContentProps, k as AEOEntityProps, l as AEOProvenanceListProps, C as ContentProvenance, j as LLMContactInfo } from '../types-
|
|
1
|
+
import { G as GenerateLLMSTxtOptions, a as LLMSTxtContent, S as SpeakableSchemaProps, b as SpeakableConfig, A as AEOBlockProps, c as AEOSummaryProps, d as AEODefinitionProps, e as AEOClaimProps, L as LLMsDataResponse, f as LLMBusinessInfo, g as LLMService, h as LLMFAQItem, i as LLMPageSummary } from '../types-BxzT7yhf.js';
|
|
2
|
+
export { m as AEOCitedContentProps, k as AEOEntityProps, l as AEOProvenanceListProps, C as ContentProvenance, j as LLMContactInfo, n as LLMPortfolioItem } from '../types-BxzT7yhf.js';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
|
|
5
5
|
/**
|
package/dist/llms/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkITPVKQB6_js = require('../chunk-ITPVKQB6.js');
|
|
4
4
|
require('../chunk-ZSMWDLMK.js');
|
|
5
5
|
var fs = require('fs');
|
|
6
6
|
var path = require('path');
|
|
@@ -23,7 +23,7 @@ function createLLMsTxtHandler(options = {}) {
|
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
-
const { markdown, metadata } = await
|
|
26
|
+
const { markdown, metadata } = await chunkITPVKQB6_js.generateLLMsTxt(generateOptions);
|
|
27
27
|
return new Response(markdown, {
|
|
28
28
|
status: 200,
|
|
29
29
|
headers: {
|
|
@@ -59,7 +59,7 @@ function createLLMsFullTxtHandler(options = {}) {
|
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
const { markdown, metadata } = await
|
|
62
|
+
const { markdown, metadata } = await chunkITPVKQB6_js.generateLLMsFullTxt(generateOptions);
|
|
63
63
|
return new Response(markdown, {
|
|
64
64
|
status: 200,
|
|
65
65
|
headers: {
|
|
@@ -527,39 +527,39 @@ function AEOCitedContent({
|
|
|
527
527
|
|
|
528
528
|
Object.defineProperty(exports, "generateLLMsFullTxt", {
|
|
529
529
|
enumerable: true,
|
|
530
|
-
get: function () { return
|
|
530
|
+
get: function () { return chunkITPVKQB6_js.generateLLMsFullTxt; }
|
|
531
531
|
});
|
|
532
532
|
Object.defineProperty(exports, "generateLLMsTxt", {
|
|
533
533
|
enumerable: true,
|
|
534
|
-
get: function () { return
|
|
534
|
+
get: function () { return chunkITPVKQB6_js.generateLLMsTxt; }
|
|
535
535
|
});
|
|
536
536
|
Object.defineProperty(exports, "getBusinessInfo", {
|
|
537
537
|
enumerable: true,
|
|
538
|
-
get: function () { return
|
|
538
|
+
get: function () { return chunkITPVKQB6_js.getBusinessInfo; }
|
|
539
539
|
});
|
|
540
540
|
Object.defineProperty(exports, "getFAQItems", {
|
|
541
541
|
enumerable: true,
|
|
542
|
-
get: function () { return
|
|
542
|
+
get: function () { return chunkITPVKQB6_js.getFAQItems; }
|
|
543
543
|
});
|
|
544
544
|
Object.defineProperty(exports, "getLLMsData", {
|
|
545
545
|
enumerable: true,
|
|
546
|
-
get: function () { return
|
|
546
|
+
get: function () { return chunkITPVKQB6_js.getLLMsData; }
|
|
547
547
|
});
|
|
548
548
|
Object.defineProperty(exports, "getOptimizedLLMsTxt", {
|
|
549
549
|
enumerable: true,
|
|
550
|
-
get: function () { return
|
|
550
|
+
get: function () { return chunkITPVKQB6_js.getOptimizedLLMsTxt; }
|
|
551
551
|
});
|
|
552
552
|
Object.defineProperty(exports, "getPageSummaries", {
|
|
553
553
|
enumerable: true,
|
|
554
|
-
get: function () { return
|
|
554
|
+
get: function () { return chunkITPVKQB6_js.getPageSummaries; }
|
|
555
555
|
});
|
|
556
556
|
Object.defineProperty(exports, "getServices", {
|
|
557
557
|
enumerable: true,
|
|
558
|
-
get: function () { return
|
|
558
|
+
get: function () { return chunkITPVKQB6_js.getServices; }
|
|
559
559
|
});
|
|
560
560
|
Object.defineProperty(exports, "writeLLMsTxtToPublic", {
|
|
561
561
|
enumerable: true,
|
|
562
|
-
get: function () { return
|
|
562
|
+
get: function () { return chunkITPVKQB6_js.writeLLMsTxtToPublic; }
|
|
563
563
|
});
|
|
564
564
|
exports.AEOBlock = AEOBlock;
|
|
565
565
|
exports.AEOCitedContent = AEOCitedContent;
|
package/dist/llms/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { generateLLMsTxt, generateLLMsFullTxt } from '../chunk-
|
|
2
|
-
export { generateLLMsFullTxt, generateLLMsTxt, getBusinessInfo, getFAQItems, getLLMsData, getOptimizedLLMsTxt, getPageSummaries, getServices, writeLLMsTxtToPublic } from '../chunk-
|
|
1
|
+
import { generateLLMsTxt, generateLLMsFullTxt } from '../chunk-Z6EHHJWU.mjs';
|
|
2
|
+
export { generateLLMsFullTxt, generateLLMsTxt, getBusinessInfo, getFAQItems, getLLMsData, getOptimizedLLMsTxt, getPageSummaries, getServices, writeLLMsTxtToPublic } from '../chunk-Z6EHHJWU.mjs';
|
|
3
3
|
import '../chunk-4XPGGLVP.mjs';
|
|
4
4
|
import { existsSync, readFileSync } from 'fs';
|
|
5
5
|
import { join } from 'path';
|
package/dist/seo/client.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkACBDH4RK_js = require('../chunk-ACBDH4RK.js');
|
|
5
5
|
require('../chunk-ZSMWDLMK.js');
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
Object.defineProperty(exports, "SitemapSync", {
|
|
10
10
|
enumerable: true,
|
|
11
|
-
get: function () { return
|
|
11
|
+
get: function () { return chunkACBDH4RK_js.SitemapSync; }
|
|
12
12
|
});
|
|
13
13
|
//# sourceMappingURL=client.js.map
|
|
14
14
|
//# sourceMappingURL=client.js.map
|
package/dist/seo/client.mjs
CHANGED
package/dist/seo/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
3
|
+
var chunkPKUTYMN7_js = require('../chunk-PKUTYMN7.js');
|
|
4
|
+
var chunkACBDH4RK_js = require('../chunk-ACBDH4RK.js');
|
|
5
|
+
var chunkA7RCX6OI_js = require('../chunk-A7RCX6OI.js');
|
|
6
|
+
var chunkVU4GL5ZG_js = require('../chunk-VU4GL5ZG.js');
|
|
7
7
|
require('../chunk-ZSMWDLMK.js');
|
|
8
8
|
var react = require('react');
|
|
9
9
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -12,7 +12,7 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
12
12
|
async function getManagedMetadata(options) {
|
|
13
13
|
const { path, fallback = {}, overrides = {}, favicon: faviconMode = "metadata" } = options;
|
|
14
14
|
const omitIcons = faviconMode === "component";
|
|
15
|
-
const result = await
|
|
15
|
+
const result = await chunkVU4GL5ZG_js.getSEOPageData(path);
|
|
16
16
|
const pageData = result?.page;
|
|
17
17
|
const projectData = result?.project;
|
|
18
18
|
if (!pageData) {
|
|
@@ -41,7 +41,7 @@ async function getManagedMetadata(options) {
|
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
43
|
if (!pageData.managed_title && !pageData.managed_meta_description && !pageData.managed_description) {
|
|
44
|
-
|
|
44
|
+
chunkVU4GL5ZG_js.ensureMetadata(path).catch(() => {
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
47
|
if (pageData.managed_title) {
|
|
@@ -95,7 +95,7 @@ async function getManagedMetadata(options) {
|
|
|
95
95
|
}
|
|
96
96
|
async function getABVariant(options) {
|
|
97
97
|
const { path, field, sessionId } = options;
|
|
98
|
-
const test = await
|
|
98
|
+
const test = await chunkVU4GL5ZG_js.getABTest(path, field);
|
|
99
99
|
if (!test) {
|
|
100
100
|
return null;
|
|
101
101
|
}
|
|
@@ -108,7 +108,7 @@ async function getABVariant(options) {
|
|
|
108
108
|
} else {
|
|
109
109
|
variant = Math.random() < test.traffic_split ? "a" : "b";
|
|
110
110
|
}
|
|
111
|
-
|
|
111
|
+
chunkVU4GL5ZG_js.recordABImpression(test.id, variant, sessionId).catch(() => {
|
|
112
112
|
});
|
|
113
113
|
return {
|
|
114
114
|
testId: test.id,
|
|
@@ -180,9 +180,9 @@ async function ManagedSchemaAsync({
|
|
|
180
180
|
includeEntityGraph = true
|
|
181
181
|
}) {
|
|
182
182
|
const [schemas, pageData, entitySchemas] = await Promise.all([
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
includeEntityGraph ?
|
|
183
|
+
chunkVU4GL5ZG_js.getSchemaMarkups(path, { includeTypes, excludeTypes }),
|
|
184
|
+
chunkVU4GL5ZG_js.getSEOPageData(path),
|
|
185
|
+
includeEntityGraph ? chunkVU4GL5ZG_js.getEntityEnhancedSchema(path).catch(() => []) : Promise.resolve([])
|
|
186
186
|
]);
|
|
187
187
|
const page = pageData?.page;
|
|
188
188
|
const siteUrl = pageData?.project?.site_url || "";
|
|
@@ -210,7 +210,7 @@ async function ManagedSchemaAsync({
|
|
|
210
210
|
}
|
|
211
211
|
if (allSchemas.length === 0 && !includeEntityGraph) {
|
|
212
212
|
try {
|
|
213
|
-
const fallbackSchemas = await
|
|
213
|
+
const fallbackSchemas = await chunkVU4GL5ZG_js.getEntityEnhancedSchema(path);
|
|
214
214
|
allSchemas.push(...fallbackSchemas);
|
|
215
215
|
} catch {
|
|
216
216
|
}
|
|
@@ -240,7 +240,7 @@ async function ManagedSchemaAsync({
|
|
|
240
240
|
async function LLMSchemaAsync({
|
|
241
241
|
path
|
|
242
242
|
}) {
|
|
243
|
-
const { page: pageData } = await
|
|
243
|
+
const { page: pageData } = await chunkVU4GL5ZG_js.getSEOPageData(path);
|
|
244
244
|
if (!pageData?.managed_llm_schema) {
|
|
245
245
|
return null;
|
|
246
246
|
}
|
|
@@ -454,7 +454,7 @@ async function ManagedFAQAsync({
|
|
|
454
454
|
includeSchema = true,
|
|
455
455
|
showTitle = true
|
|
456
456
|
}) {
|
|
457
|
-
const faqData = await
|
|
457
|
+
const faqData = await chunkVU4GL5ZG_js.getFAQData(path);
|
|
458
458
|
if (!faqData || !faqData.items?.length) {
|
|
459
459
|
return null;
|
|
460
460
|
}
|
|
@@ -506,7 +506,7 @@ async function ManagedInternalLinksAsync({
|
|
|
506
506
|
className,
|
|
507
507
|
renderLink
|
|
508
508
|
}) {
|
|
509
|
-
const links = await
|
|
509
|
+
const links = await chunkVU4GL5ZG_js.getInternalLinks(path, { position, limit });
|
|
510
510
|
if (!links.length) {
|
|
511
511
|
return null;
|
|
512
512
|
}
|
|
@@ -582,7 +582,7 @@ async function ManagedContentAsync({
|
|
|
582
582
|
components = {},
|
|
583
583
|
injectEntityAnnotations: shouldInjectEntities = false
|
|
584
584
|
}) {
|
|
585
|
-
const block = await
|
|
585
|
+
const block = await chunkVU4GL5ZG_js.getContentBlock(path, section);
|
|
586
586
|
if (!block) {
|
|
587
587
|
if (fallback) {
|
|
588
588
|
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: fallback });
|
|
@@ -592,7 +592,7 @@ async function ManagedContentAsync({
|
|
|
592
592
|
let entities = [];
|
|
593
593
|
if (shouldInjectEntities) {
|
|
594
594
|
try {
|
|
595
|
-
entities = await
|
|
595
|
+
entities = await chunkVU4GL5ZG_js.getEntities();
|
|
596
596
|
} catch (err) {
|
|
597
597
|
console.warn("@sonordev/seo: Failed to fetch entities for annotation:", err);
|
|
598
598
|
}
|
|
@@ -653,7 +653,7 @@ async function ManagedContentAsync({
|
|
|
653
653
|
}
|
|
654
654
|
}
|
|
655
655
|
async function getManagedContentData(path, section) {
|
|
656
|
-
return
|
|
656
|
+
return chunkVU4GL5ZG_js.getContentBlock(path, section);
|
|
657
657
|
}
|
|
658
658
|
function ManagedContent(props) {
|
|
659
659
|
return /* @__PURE__ */ jsxRuntime.jsx(react.Suspense, { fallback: null, children: /* @__PURE__ */ jsxRuntime.jsx(ManagedContentAsync, { ...props }) });
|
|
@@ -771,99 +771,99 @@ function LocationPageContent(props) {
|
|
|
771
771
|
|
|
772
772
|
Object.defineProperty(exports, "ManagedNoScripts", {
|
|
773
773
|
enumerable: true,
|
|
774
|
-
get: function () { return
|
|
774
|
+
get: function () { return chunkPKUTYMN7_js.ManagedNoScripts; }
|
|
775
775
|
});
|
|
776
776
|
Object.defineProperty(exports, "ManagedScripts", {
|
|
777
777
|
enumerable: true,
|
|
778
|
-
get: function () { return
|
|
778
|
+
get: function () { return chunkPKUTYMN7_js.ManagedScripts; }
|
|
779
779
|
});
|
|
780
780
|
Object.defineProperty(exports, "SitemapSync", {
|
|
781
781
|
enumerable: true,
|
|
782
|
-
get: function () { return
|
|
782
|
+
get: function () { return chunkACBDH4RK_js.SitemapSync; }
|
|
783
783
|
});
|
|
784
784
|
Object.defineProperty(exports, "generateSitemap", {
|
|
785
785
|
enumerable: true,
|
|
786
|
-
get: function () { return
|
|
786
|
+
get: function () { return chunkA7RCX6OI_js.generateSitemap; }
|
|
787
787
|
});
|
|
788
788
|
Object.defineProperty(exports, "getRedirect", {
|
|
789
789
|
enumerable: true,
|
|
790
|
-
get: function () { return
|
|
790
|
+
get: function () { return chunkA7RCX6OI_js.getRedirect; }
|
|
791
791
|
});
|
|
792
792
|
Object.defineProperty(exports, "getRobotsDirective", {
|
|
793
793
|
enumerable: true,
|
|
794
|
-
get: function () { return
|
|
794
|
+
get: function () { return chunkA7RCX6OI_js.getRobotsDirective; }
|
|
795
795
|
});
|
|
796
796
|
Object.defineProperty(exports, "isIndexable", {
|
|
797
797
|
enumerable: true,
|
|
798
|
-
get: function () { return
|
|
798
|
+
get: function () { return chunkA7RCX6OI_js.isIndexable; }
|
|
799
799
|
});
|
|
800
800
|
Object.defineProperty(exports, "getABTest", {
|
|
801
801
|
enumerable: true,
|
|
802
|
-
get: function () { return
|
|
802
|
+
get: function () { return chunkVU4GL5ZG_js.getABTest; }
|
|
803
803
|
});
|
|
804
804
|
Object.defineProperty(exports, "getContentBlock", {
|
|
805
805
|
enumerable: true,
|
|
806
|
-
get: function () { return
|
|
806
|
+
get: function () { return chunkVU4GL5ZG_js.getContentBlock; }
|
|
807
807
|
});
|
|
808
808
|
Object.defineProperty(exports, "getEntities", {
|
|
809
809
|
enumerable: true,
|
|
810
|
-
get: function () { return
|
|
810
|
+
get: function () { return chunkVU4GL5ZG_js.getEntities; }
|
|
811
811
|
});
|
|
812
812
|
Object.defineProperty(exports, "getEntityEnhancedSchema", {
|
|
813
813
|
enumerable: true,
|
|
814
|
-
get: function () { return
|
|
814
|
+
get: function () { return chunkVU4GL5ZG_js.getEntityEnhancedSchema; }
|
|
815
815
|
});
|
|
816
816
|
Object.defineProperty(exports, "getFAQData", {
|
|
817
817
|
enumerable: true,
|
|
818
|
-
get: function () { return
|
|
818
|
+
get: function () { return chunkVU4GL5ZG_js.getFAQData; }
|
|
819
819
|
});
|
|
820
820
|
Object.defineProperty(exports, "getInternalLinks", {
|
|
821
821
|
enumerable: true,
|
|
822
|
-
get: function () { return
|
|
822
|
+
get: function () { return chunkVU4GL5ZG_js.getInternalLinks; }
|
|
823
823
|
});
|
|
824
824
|
Object.defineProperty(exports, "getManagedScripts", {
|
|
825
825
|
enumerable: true,
|
|
826
|
-
get: function () { return
|
|
826
|
+
get: function () { return chunkVU4GL5ZG_js.getManagedScripts; }
|
|
827
827
|
});
|
|
828
828
|
Object.defineProperty(exports, "getPrimaryEntity", {
|
|
829
829
|
enumerable: true,
|
|
830
|
-
get: function () { return
|
|
830
|
+
get: function () { return chunkVU4GL5ZG_js.getPrimaryEntity; }
|
|
831
831
|
});
|
|
832
832
|
Object.defineProperty(exports, "getRedirectData", {
|
|
833
833
|
enumerable: true,
|
|
834
|
-
get: function () { return
|
|
834
|
+
get: function () { return chunkVU4GL5ZG_js.getRedirectData; }
|
|
835
835
|
});
|
|
836
836
|
Object.defineProperty(exports, "getRobotsData", {
|
|
837
837
|
enumerable: true,
|
|
838
|
-
get: function () { return
|
|
838
|
+
get: function () { return chunkVU4GL5ZG_js.getRobotsData; }
|
|
839
839
|
});
|
|
840
840
|
Object.defineProperty(exports, "getSEOPageData", {
|
|
841
841
|
enumerable: true,
|
|
842
|
-
get: function () { return
|
|
842
|
+
get: function () { return chunkVU4GL5ZG_js.getSEOPageData; }
|
|
843
843
|
});
|
|
844
844
|
Object.defineProperty(exports, "getSchemaMarkups", {
|
|
845
845
|
enumerable: true,
|
|
846
|
-
get: function () { return
|
|
846
|
+
get: function () { return chunkVU4GL5ZG_js.getSchemaMarkups; }
|
|
847
847
|
});
|
|
848
848
|
Object.defineProperty(exports, "getSitemapEntries", {
|
|
849
849
|
enumerable: true,
|
|
850
|
-
get: function () { return
|
|
850
|
+
get: function () { return chunkVU4GL5ZG_js.getSitemapEntries; }
|
|
851
851
|
});
|
|
852
852
|
Object.defineProperty(exports, "getVisibilityScore", {
|
|
853
853
|
enumerable: true,
|
|
854
|
-
get: function () { return
|
|
854
|
+
get: function () { return chunkVU4GL5ZG_js.getVisibilityScore; }
|
|
855
855
|
});
|
|
856
856
|
Object.defineProperty(exports, "getVisibilitySummary", {
|
|
857
857
|
enumerable: true,
|
|
858
|
-
get: function () { return
|
|
858
|
+
get: function () { return chunkVU4GL5ZG_js.getVisibilitySummary; }
|
|
859
859
|
});
|
|
860
860
|
Object.defineProperty(exports, "recordABImpression", {
|
|
861
861
|
enumerable: true,
|
|
862
|
-
get: function () { return
|
|
862
|
+
get: function () { return chunkVU4GL5ZG_js.recordABImpression; }
|
|
863
863
|
});
|
|
864
864
|
Object.defineProperty(exports, "registerSitemap", {
|
|
865
865
|
enumerable: true,
|
|
866
|
-
get: function () { return
|
|
866
|
+
get: function () { return chunkVU4GL5ZG_js.registerSitemap; }
|
|
867
867
|
});
|
|
868
868
|
exports.LLMSchema = LLMSchema;
|
|
869
869
|
exports.LocationPageContent = LocationPageContent;
|
package/dist/seo/index.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { ManagedNoScripts, ManagedScripts } from '../chunk-
|
|
2
|
-
export { SitemapSync } from '../chunk-
|
|
3
|
-
export { generateSitemap, getRedirect, getRobotsDirective, isIndexable } from '../chunk-
|
|
4
|
-
import { getSEOPageData, ensureMetadata, getABTest, recordABImpression, getContentBlock, getSchemaMarkups, getEntityEnhancedSchema, getFAQData, getInternalLinks, getEntities } from '../chunk-
|
|
5
|
-
export { getABTest, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap } from '../chunk-
|
|
1
|
+
export { ManagedNoScripts, ManagedScripts } from '../chunk-L7XPPFSS.mjs';
|
|
2
|
+
export { SitemapSync } from '../chunk-HA5OXTXW.mjs';
|
|
3
|
+
export { generateSitemap, getRedirect, getRobotsDirective, isIndexable } from '../chunk-IYQUFQYM.mjs';
|
|
4
|
+
import { getSEOPageData, ensureMetadata, getABTest, recordABImpression, getContentBlock, getSchemaMarkups, getEntityEnhancedSchema, getFAQData, getInternalLinks, getEntities } from '../chunk-TUFP3FGI.mjs';
|
|
5
|
+
export { getABTest, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap } from '../chunk-TUFP3FGI.mjs';
|
|
6
6
|
import '../chunk-4XPGGLVP.mjs';
|
|
7
7
|
import { cache, Suspense } from 'react';
|
|
8
8
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
@@ -11,6 +11,17 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
11
11
|
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
12
12
|
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
13
13
|
|
|
14
|
+
function inferPageTypeFromPath(urlPath) {
|
|
15
|
+
if (urlPath === "/" || urlPath === "") return "homepage";
|
|
16
|
+
if (/^\/services(\/|$)/i.test(urlPath)) return "service";
|
|
17
|
+
if (/^\/compare(\/|$)/i.test(urlPath)) return "comparison";
|
|
18
|
+
if (/^\/(insights|blog)(\/|$)/i.test(urlPath)) return "blog";
|
|
19
|
+
if (/^\/industries(\/|$)/i.test(urlPath)) return "industry";
|
|
20
|
+
if (/^\/work(\/|$)/i.test(urlPath)) return "portfolio";
|
|
21
|
+
if (/^\/faq(\/|$)/i.test(urlPath)) return "faq";
|
|
22
|
+
if (/^\/pricing(\/|$)/i.test(urlPath)) return "pricing";
|
|
23
|
+
return "page";
|
|
24
|
+
}
|
|
14
25
|
function getApiConfig() {
|
|
15
26
|
const apiUrl = process.env.SONOR_API_URL || "https://api.sonor.io";
|
|
16
27
|
const apiKey = process.env.SONOR_API_KEY || "";
|
|
@@ -105,7 +116,9 @@ async function registerLocalSitemap(options) {
|
|
|
105
116
|
path: e.path,
|
|
106
117
|
title: e.title,
|
|
107
118
|
priority: e.priority,
|
|
108
|
-
changefreq: e.changefreq
|
|
119
|
+
changefreq: e.changefreq,
|
|
120
|
+
...e.description ? { description: e.description } : {},
|
|
121
|
+
pageType: e.pageType ?? inferPageTypeFromPath(e.path)
|
|
109
122
|
}));
|
|
110
123
|
const result = await registerSitemapViaApi(
|
|
111
124
|
payload,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/seo/register-sitemap-cli-impl.ts","../../src/seo/register-sitemap-cli.ts"],"names":["fs","path","cwd","dotenvConfig"],"mappings":"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","file":"register-sitemap-cli.js","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 'https://api.sonor.io'\n const apiKey =\n process.env.SONOR_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)',\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 sonor-register-sitemap\n * npx sonor-register-sitemap --auto-discover\n * npx sonor-register-sitemap --no-optimize # Skip Signal AI meta optimization\n *\n * Or in package.json:\n * {\n * \"scripts\": {\n * \"postbuild\": \"sonor-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":["fs","path","cwd","dotenvConfig"],"mappings":"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","file":"register-sitemap-cli.js","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\n/**\n * Infer page type from URL path pattern for Signal context.\n */\nfunction inferPageTypeFromPath(urlPath: string): string {\n if (urlPath === '/' || urlPath === '') return 'homepage'\n if (/^\\/services(\\/|$)/i.test(urlPath)) return 'service'\n if (/^\\/compare(\\/|$)/i.test(urlPath)) return 'comparison'\n if (/^\\/(insights|blog)(\\/|$)/i.test(urlPath)) return 'blog'\n if (/^\\/industries(\\/|$)/i.test(urlPath)) return 'industry'\n if (/^\\/work(\\/|$)/i.test(urlPath)) return 'portfolio'\n if (/^\\/faq(\\/|$)/i.test(urlPath)) return 'faq'\n if (/^\\/pricing(\\/|$)/i.test(urlPath)) return 'pricing'\n return 'page'\n}\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\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 description?: string\n pageType?: 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)',\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 description?: string\n pageType?: string\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 ...(e.description ? { description: e.description } : {}),\n pageType: e.pageType ?? inferPageTypeFromPath(e.path),\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 sonor-register-sitemap\n * npx sonor-register-sitemap --auto-discover\n * npx sonor-register-sitemap --no-optimize # Skip Signal AI meta optimization\n *\n * Or in package.json:\n * {\n * \"scripts\": {\n * \"postbuild\": \"sonor-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"]}
|
|
@@ -4,6 +4,17 @@ import path from 'path';
|
|
|
4
4
|
import { config } from 'dotenv';
|
|
5
5
|
import fs from 'fs';
|
|
6
6
|
|
|
7
|
+
function inferPageTypeFromPath(urlPath) {
|
|
8
|
+
if (urlPath === "/" || urlPath === "") return "homepage";
|
|
9
|
+
if (/^\/services(\/|$)/i.test(urlPath)) return "service";
|
|
10
|
+
if (/^\/compare(\/|$)/i.test(urlPath)) return "comparison";
|
|
11
|
+
if (/^\/(insights|blog)(\/|$)/i.test(urlPath)) return "blog";
|
|
12
|
+
if (/^\/industries(\/|$)/i.test(urlPath)) return "industry";
|
|
13
|
+
if (/^\/work(\/|$)/i.test(urlPath)) return "portfolio";
|
|
14
|
+
if (/^\/faq(\/|$)/i.test(urlPath)) return "faq";
|
|
15
|
+
if (/^\/pricing(\/|$)/i.test(urlPath)) return "pricing";
|
|
16
|
+
return "page";
|
|
17
|
+
}
|
|
7
18
|
function getApiConfig() {
|
|
8
19
|
const apiUrl = process.env.SONOR_API_URL || "https://api.sonor.io";
|
|
9
20
|
const apiKey = process.env.SONOR_API_KEY || "";
|
|
@@ -98,7 +109,9 @@ async function registerLocalSitemap(options) {
|
|
|
98
109
|
path: e.path,
|
|
99
110
|
title: e.title,
|
|
100
111
|
priority: e.priority,
|
|
101
|
-
changefreq: e.changefreq
|
|
112
|
+
changefreq: e.changefreq,
|
|
113
|
+
...e.description ? { description: e.description } : {},
|
|
114
|
+
pageType: e.pageType ?? inferPageTypeFromPath(e.path)
|
|
102
115
|
}));
|
|
103
116
|
const result = await registerSitemapViaApi(
|
|
104
117
|
payload,
|