aeo.js 0.0.7 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +119 -164
- package/dist/angular.d.mts +1 -1
- package/dist/angular.d.ts +1 -1
- package/dist/angular.js +69 -13
- package/dist/angular.js.map +1 -1
- package/dist/angular.mjs +69 -13
- package/dist/angular.mjs.map +1 -1
- package/dist/astro.d.mts +1 -1
- package/dist/astro.d.ts +1 -1
- package/dist/astro.js +78 -18
- package/dist/astro.js.map +1 -1
- package/dist/astro.mjs +78 -18
- package/dist/astro.mjs.map +1 -1
- package/dist/cli.js +84 -27
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +84 -27
- package/dist/cli.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +89 -29
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +89 -29
- package/dist/index.mjs.map +1 -1
- package/dist/next.d.mts +1 -1
- package/dist/next.d.ts +1 -1
- package/dist/next.js +71 -15
- package/dist/next.js.map +1 -1
- package/dist/next.mjs +71 -15
- package/dist/next.mjs.map +1 -1
- package/dist/nuxt.d.mts +1 -1
- package/dist/nuxt.d.ts +1 -1
- package/dist/nuxt.js +69 -13
- package/dist/nuxt.js.map +1 -1
- package/dist/nuxt.mjs +69 -13
- package/dist/nuxt.mjs.map +1 -1
- package/dist/react.d.mts +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +52 -7
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +52 -7
- package/dist/react.mjs.map +1 -1
- package/dist/{types-Cn_Qbkmg.d.mts → types-BlLNcw-X.d.mts} +2 -0
- package/dist/{types-Cn_Qbkmg.d.ts → types-BlLNcw-X.d.ts} +2 -0
- package/dist/vite.d.mts +1 -1
- package/dist/vite.d.ts +1 -1
- package/dist/vite.js +94 -20
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +94 -20
- package/dist/vite.mjs.map +1 -1
- package/dist/vue.d.mts +1 -1
- package/dist/vue.d.ts +1 -1
- package/dist/vue.js +52 -7
- package/dist/vue.js.map +1 -1
- package/dist/vue.mjs +52 -7
- package/dist/vue.mjs.map +1 -1
- package/dist/webpack.d.mts +1 -1
- package/dist/webpack.d.ts +1 -1
- package/dist/webpack.js +69 -13
- package/dist/webpack.js.map +1 -1
- package/dist/webpack.mjs +69 -13
- package/dist/webpack.mjs.map +1 -1
- package/dist/widget.d.mts +1 -1
- package/dist/widget.d.ts +1 -1
- package/dist/widget.js +52 -7
- package/dist/widget.js.map +1 -1
- package/dist/widget.mjs +52 -7
- package/dist/widget.mjs.map +1 -1
- package/package.json +1 -1
package/dist/nuxt.js
CHANGED
|
@@ -86,10 +86,19 @@ function generateRobotsTxt(config) {
|
|
|
86
86
|
}
|
|
87
87
|
lines.push("# Default for all other bots");
|
|
88
88
|
lines.push("User-agent: *");
|
|
89
|
-
|
|
89
|
+
for (const path of config.robots.allow.length > 0 ? config.robots.allow : ["/"]) {
|
|
90
|
+
lines.push(`Allow: ${path}`);
|
|
91
|
+
}
|
|
92
|
+
for (const path of config.robots.disallow) {
|
|
93
|
+
lines.push(`Disallow: ${path}`);
|
|
94
|
+
}
|
|
95
|
+
if (config.robots.crawlDelay > 0) {
|
|
96
|
+
lines.push(`Crawl-delay: ${config.robots.crawlDelay}`);
|
|
97
|
+
}
|
|
90
98
|
lines.push("");
|
|
91
|
-
|
|
92
|
-
|
|
99
|
+
const sitemapUrl = config.robots.sitemap || (config.url ? `${config.url}/sitemap.xml` : "");
|
|
100
|
+
if (sitemapUrl) {
|
|
101
|
+
lines.push(`Sitemap: ${sitemapUrl}`);
|
|
93
102
|
}
|
|
94
103
|
lines.push("");
|
|
95
104
|
lines.push("# AEO (Answer Engine Optimization) files");
|
|
@@ -171,7 +180,7 @@ function detectFramework(projectRoot = process.cwd()) {
|
|
|
171
180
|
};
|
|
172
181
|
}
|
|
173
182
|
function resolveConfig(config = {}) {
|
|
174
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M;
|
|
183
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N;
|
|
175
184
|
const frameworkInfo = detectFramework();
|
|
176
185
|
return {
|
|
177
186
|
title: config.title || "My Site",
|
|
@@ -215,15 +224,16 @@ function resolveConfig(config = {}) {
|
|
|
215
224
|
widget: {
|
|
216
225
|
enabled: ((_A = config.widget) == null ? void 0 : _A.enabled) !== false,
|
|
217
226
|
position: ((_B = config.widget) == null ? void 0 : _B.position) || "bottom-right",
|
|
227
|
+
size: ((_C = config.widget) == null ? void 0 : _C.size) || "default",
|
|
218
228
|
theme: {
|
|
219
|
-
background: ((
|
|
220
|
-
text: ((
|
|
221
|
-
accent: ((
|
|
222
|
-
badge: ((
|
|
229
|
+
background: ((_E = (_D = config.widget) == null ? void 0 : _D.theme) == null ? void 0 : _E.background) || "rgba(18, 18, 24, 0.9)",
|
|
230
|
+
text: ((_G = (_F = config.widget) == null ? void 0 : _F.theme) == null ? void 0 : _G.text) || "#C0C0C5",
|
|
231
|
+
accent: ((_I = (_H = config.widget) == null ? void 0 : _H.theme) == null ? void 0 : _I.accent) || "#E8E8EA",
|
|
232
|
+
badge: ((_K = (_J = config.widget) == null ? void 0 : _J.theme) == null ? void 0 : _K.badge) || "#4ADE80"
|
|
223
233
|
},
|
|
224
|
-
humanLabel: ((
|
|
225
|
-
aiLabel: ((
|
|
226
|
-
showBadge: ((
|
|
234
|
+
humanLabel: ((_L = config.widget) == null ? void 0 : _L.humanLabel) || "Human",
|
|
235
|
+
aiLabel: ((_M = config.widget) == null ? void 0 : _M.aiLabel) || "AI",
|
|
236
|
+
showBadge: ((_N = config.widget) == null ? void 0 : _N.showBadge) !== false
|
|
227
237
|
}
|
|
228
238
|
};
|
|
229
239
|
}
|
|
@@ -280,7 +290,8 @@ function collectMarkdownFiles(dir, base = dir) {
|
|
|
280
290
|
for (const entry of entries) {
|
|
281
291
|
const fullPath = path.join(dir, entry);
|
|
282
292
|
const stat = fs.statSync(fullPath);
|
|
283
|
-
|
|
293
|
+
const SKIP_DIRS = /* @__PURE__ */ new Set(["node_modules", "public", "dist", ".next", ".nuxt", ".output", ".open-next", "coverage", "__tests__", "__mocks__"]);
|
|
294
|
+
if (stat.isDirectory() && !entry.startsWith(".") && !SKIP_DIRS.has(entry)) {
|
|
284
295
|
files.push(...collectMarkdownFiles(fullPath, base));
|
|
285
296
|
} else if (stat.isFile() && (path.extname(entry) === ".md" || path.extname(entry) === ".mdx")) {
|
|
286
297
|
const content = fs.readFileSync(fullPath, "utf-8");
|
|
@@ -623,7 +634,8 @@ function collectUrls(dir, config, base = dir) {
|
|
|
623
634
|
for (const entry of entries) {
|
|
624
635
|
const fullPath = path.join(dir, entry);
|
|
625
636
|
const stat = fs.statSync(fullPath);
|
|
626
|
-
|
|
637
|
+
const SKIP_DIRS = /* @__PURE__ */ new Set(["node_modules", "public", "dist", ".next", ".nuxt", ".output", ".open-next", "coverage", "__tests__", "__mocks__"]);
|
|
638
|
+
if (stat.isDirectory() && !entry.startsWith(".") && !SKIP_DIRS.has(entry)) {
|
|
627
639
|
urls.push(...collectUrls(fullPath, config, base));
|
|
628
640
|
} else if (stat.isFile() && (path.extname(entry) === ".md" || path.extname(entry) === ".mdx" || path.extname(entry) === ".html")) {
|
|
629
641
|
const relativePath = path.relative(base, fullPath);
|
|
@@ -851,6 +863,22 @@ function generatePageSchemas(page, config) {
|
|
|
851
863
|
}))
|
|
852
864
|
});
|
|
853
865
|
}
|
|
866
|
+
if (faqItems.length === 0) {
|
|
867
|
+
const howToSteps = detectHowToSteps(page.content || "");
|
|
868
|
+
if (howToSteps.length > 0) {
|
|
869
|
+
schemas.push({
|
|
870
|
+
"@context": "https://schema.org",
|
|
871
|
+
"@type": "HowTo",
|
|
872
|
+
name: page.title || config.title,
|
|
873
|
+
step: howToSteps.map((s, i) => ({
|
|
874
|
+
"@type": "HowToStep",
|
|
875
|
+
position: i + 1,
|
|
876
|
+
name: s.name,
|
|
877
|
+
text: s.text
|
|
878
|
+
}))
|
|
879
|
+
});
|
|
880
|
+
}
|
|
881
|
+
}
|
|
854
882
|
const pageType = config.schema.defaultType;
|
|
855
883
|
const pageSchema = {
|
|
856
884
|
"@context": "https://schema.org",
|
|
@@ -927,6 +955,34 @@ function detectFaqPatterns(content) {
|
|
|
927
955
|
}
|
|
928
956
|
return items;
|
|
929
957
|
}
|
|
958
|
+
function detectHowToSteps(content) {
|
|
959
|
+
const steps = [];
|
|
960
|
+
const lines = content.split("\n");
|
|
961
|
+
for (let i = 0; i < lines.length; i++) {
|
|
962
|
+
const line = lines[i].trim();
|
|
963
|
+
const stepMatch = line.match(/^#{1,6}\s+(?:Step\s+\d+[\s:.-]*|(\d+)[.)]\s*)(.+)$/i);
|
|
964
|
+
if (stepMatch) {
|
|
965
|
+
const name = (stepMatch[2] || stepMatch[1] || "").trim();
|
|
966
|
+
const bodyLines = [];
|
|
967
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
968
|
+
const nextLine = lines[j].trim();
|
|
969
|
+
if (!nextLine) {
|
|
970
|
+
if (bodyLines.length > 0) break;
|
|
971
|
+
continue;
|
|
972
|
+
}
|
|
973
|
+
if (/^#{1,6}\s/.test(nextLine)) break;
|
|
974
|
+
bodyLines.push(nextLine);
|
|
975
|
+
}
|
|
976
|
+
if (name) {
|
|
977
|
+
steps.push({
|
|
978
|
+
name,
|
|
979
|
+
text: bodyLines.join(" ").slice(0, 500)
|
|
980
|
+
});
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
return steps.length >= 2 ? steps : [];
|
|
985
|
+
}
|
|
930
986
|
async function generateAEOFiles(configOrRoot, maybeConfig) {
|
|
931
987
|
var _a;
|
|
932
988
|
let config;
|