one 1.2.35 → 1.2.36
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/cjs/cli/build.cjs +16 -2
- package/dist/cjs/cli/build.js +14 -3
- package/dist/cjs/cli/build.js.map +1 -1
- package/dist/cjs/cli/build.native.js +20 -5
- package/dist/cjs/cli/build.native.js.map +1 -1
- package/dist/cjs/cli/generateSitemap.cjs +86 -0
- package/dist/cjs/cli/generateSitemap.js +69 -0
- package/dist/cjs/cli/generateSitemap.js.map +6 -0
- package/dist/cjs/cli/generateSitemap.native.js +112 -0
- package/dist/cjs/cli/generateSitemap.native.js.map +1 -0
- package/dist/cjs/cli/generateSitemap.test.cjs +156 -0
- package/dist/cjs/cli/generateSitemap.test.js +103 -0
- package/dist/cjs/cli/generateSitemap.test.js.map +6 -0
- package/dist/cjs/cli/generateSitemap.test.native.js +200 -0
- package/dist/cjs/cli/generateSitemap.test.native.js.map +1 -0
- package/dist/cjs/vite/one.cjs +30 -14
- package/dist/cjs/vite/one.js +30 -14
- package/dist/cjs/vite/one.js.map +1 -1
- package/dist/cjs/vite/one.native.js +30 -14
- package/dist/cjs/vite/one.native.js.map +1 -1
- package/dist/esm/cli/build.js +14 -2
- package/dist/esm/cli/build.js.map +1 -1
- package/dist/esm/cli/build.mjs +16 -2
- package/dist/esm/cli/build.mjs.map +1 -1
- package/dist/esm/cli/build.native.js +20 -5
- package/dist/esm/cli/build.native.js.map +1 -1
- package/dist/esm/cli/generateSitemap.js +45 -0
- package/dist/esm/cli/generateSitemap.js.map +6 -0
- package/dist/esm/cli/generateSitemap.mjs +52 -0
- package/dist/esm/cli/generateSitemap.mjs.map +1 -0
- package/dist/esm/cli/generateSitemap.native.js +75 -0
- package/dist/esm/cli/generateSitemap.native.js.map +1 -0
- package/dist/esm/cli/generateSitemap.test.js +104 -0
- package/dist/esm/cli/generateSitemap.test.js.map +6 -0
- package/dist/esm/cli/generateSitemap.test.mjs +157 -0
- package/dist/esm/cli/generateSitemap.test.mjs.map +1 -0
- package/dist/esm/cli/generateSitemap.test.native.js +198 -0
- package/dist/esm/cli/generateSitemap.test.native.js.map +1 -0
- package/dist/esm/vite/one.js +30 -14
- package/dist/esm/vite/one.js.map +1 -1
- package/dist/esm/vite/one.mjs +30 -14
- package/dist/esm/vite/one.mjs.map +1 -1
- package/dist/esm/vite/one.native.js +30 -14
- package/dist/esm/vite/one.native.js.map +1 -1
- package/package.json +13 -10
- package/src/cli/build.ts +31 -0
- package/src/cli/generateSitemap.test.ts +207 -0
- package/src/cli/generateSitemap.ts +93 -0
- package/src/vite/one.ts +28 -11
- package/src/vite/types.ts +73 -0
- package/types/cli/build.d.ts.map +1 -1
- package/types/cli/generateSitemap.d.ts +13 -0
- package/types/cli/generateSitemap.d.ts.map +1 -0
- package/types/cli/generateSitemap.test.d.ts +2 -0
- package/types/cli/generateSitemap.test.d.ts.map +1 -0
- package/types/env.d.ts +43 -0
- package/types/vite/one.d.ts.map +1 -1
- package/types/vite/types.d.ts +62 -0
- package/types/vite/types.d.ts.map +1 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import MicroMatch from "micromatch";
|
|
2
|
+
function generateSitemap(routes, options) {
|
|
3
|
+
const envUrl = process.env.ONE_SERVER_URL, baseUrl = options.baseUrl ?? (envUrl && envUrl !== "undefined" ? envUrl : ""), defaultPriority = options.priority ?? 0.5, defaultChangefreq = options.changefreq, excludePatterns = options.exclude || [], entries = [];
|
|
4
|
+
for (const route of routes) {
|
|
5
|
+
const { path, routeExport } = route;
|
|
6
|
+
if (routeExport?.exclude || excludePatterns.length > 0 && MicroMatch.isMatch(path, excludePatterns))
|
|
7
|
+
continue;
|
|
8
|
+
const priority = routeExport?.priority ?? defaultPriority, changefreq = routeExport?.changefreq ?? defaultChangefreq, lastmod = routeExport?.lastmod;
|
|
9
|
+
entries.push({
|
|
10
|
+
path,
|
|
11
|
+
priority,
|
|
12
|
+
changefreq,
|
|
13
|
+
lastmod
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return buildSitemapXml(entries, baseUrl);
|
|
17
|
+
}
|
|
18
|
+
function buildSitemapXml(entries, baseUrl) {
|
|
19
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
20
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
21
|
+
${entries.map((entry) => {
|
|
22
|
+
const loc = baseUrl ? `${baseUrl.replace(/\/$/, "")}${entry.path}` : entry.path;
|
|
23
|
+
let xml = ` <url>
|
|
24
|
+
<loc>${escapeXml(loc)}</loc>`;
|
|
25
|
+
if (entry.lastmod) {
|
|
26
|
+
const date = entry.lastmod instanceof Date ? entry.lastmod.toISOString().split("T")[0] : entry.lastmod;
|
|
27
|
+
xml += `
|
|
28
|
+
<lastmod>${escapeXml(date)}</lastmod>`;
|
|
29
|
+
}
|
|
30
|
+
return entry.changefreq && (xml += `
|
|
31
|
+
<changefreq>${entry.changefreq}</changefreq>`), entry.priority !== void 0 && (xml += `
|
|
32
|
+
<priority>${entry.priority.toFixed(1)}</priority>`), xml += `
|
|
33
|
+
</url>`, xml;
|
|
34
|
+
}).join(`
|
|
35
|
+
`)}
|
|
36
|
+
</urlset>
|
|
37
|
+
`;
|
|
38
|
+
}
|
|
39
|
+
function escapeXml(str) {
|
|
40
|
+
return str.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
41
|
+
}
|
|
42
|
+
export {
|
|
43
|
+
generateSitemap
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=generateSitemap.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/cli/generateSitemap.ts"],
|
|
4
|
+
"mappings": "AAAA,OAAO,gBAAgB;AAehB,SAAS,gBAAgB,QAA4B,SAAqC;AAC/F,QAAM,SAAS,QAAQ,IAAI,gBACrB,UAAU,QAAQ,YAAY,UAAU,WAAW,cAAc,SAAS,KAC1E,kBAAkB,QAAQ,YAAY,KACtC,oBAAoB,QAAQ,YAC5B,kBAAkB,QAAQ,WAAW,CAAC,GAEtC,UAA0B,CAAC;AAEjC,aAAW,SAAS,QAAQ;AAC1B,UAAM,EAAE,MAAM,YAAY,IAAI;AAQ9B,QALI,aAAa,WAKb,gBAAgB,SAAS,KAAK,WAAW,QAAQ,MAAM,eAAe;AACxE;AAGF,UAAM,WAAW,aAAa,YAAY,iBACpC,aAAa,aAAa,cAAc,mBACxC,UAAU,aAAa;AAE7B,YAAQ,KAAK;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,gBAAgB,SAAS,OAAO;AACzC;AAEA,SAAS,gBAAgB,SAAyB,SAAyB;AA0BzE,SAAO;AAAA;AAAA,EAzBY,QAChB,IAAI,CAAC,UAAU;AACd,UAAM,MAAM,UAAU,GAAG,QAAQ,QAAQ,OAAO,EAAE,CAAC,GAAG,MAAM,IAAI,KAAK,MAAM;AAE3E,QAAI,MAAM;AAAA,WAAqB,UAAU,GAAG,CAAC;AAE7C,QAAI,MAAM,SAAS;AACjB,YAAM,OACJ,MAAM,mBAAmB,OAAO,MAAM,QAAQ,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC,IAAI,MAAM;AACpF,aAAO;AAAA,eAAkB,UAAU,IAAI,CAAC;AAAA,IAC1C;AAEA,WAAI,MAAM,eACR,OAAO;AAAA,kBAAqB,MAAM,UAAU,kBAG1C,MAAM,aAAa,WACrB,OAAO;AAAA,gBAAmB,MAAM,SAAS,QAAQ,CAAC,CAAC,gBAGrD,OAAO;AAAA,WACA;AAAA,EACT,CAAC,EACA,KAAK;AAAA,CAAI,CAIF;AAAA;AAAA;AAGZ;AAEA,SAAS,UAAU,KAAqB;AACtC,SAAO,IACJ,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,QAAQ;AAC3B;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import MicroMatch from "micromatch";
|
|
2
|
+
function generateSitemap(routes, options) {
|
|
3
|
+
const envUrl = process.env.ONE_SERVER_URL,
|
|
4
|
+
baseUrl = options.baseUrl ?? (envUrl && envUrl !== "undefined" ? envUrl : ""),
|
|
5
|
+
defaultPriority = options.priority ?? 0.5,
|
|
6
|
+
defaultChangefreq = options.changefreq,
|
|
7
|
+
excludePatterns = options.exclude || [],
|
|
8
|
+
entries = [];
|
|
9
|
+
for (const route of routes) {
|
|
10
|
+
const {
|
|
11
|
+
path,
|
|
12
|
+
routeExport
|
|
13
|
+
} = route;
|
|
14
|
+
if (routeExport?.exclude || excludePatterns.length > 0 && MicroMatch.isMatch(path, excludePatterns)) continue;
|
|
15
|
+
const priority = routeExport?.priority ?? defaultPriority,
|
|
16
|
+
changefreq = routeExport?.changefreq ?? defaultChangefreq,
|
|
17
|
+
lastmod = routeExport?.lastmod;
|
|
18
|
+
entries.push({
|
|
19
|
+
path,
|
|
20
|
+
priority,
|
|
21
|
+
changefreq,
|
|
22
|
+
lastmod
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return buildSitemapXml(entries, baseUrl);
|
|
26
|
+
}
|
|
27
|
+
function buildSitemapXml(entries, baseUrl) {
|
|
28
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
29
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
30
|
+
${entries.map(entry => {
|
|
31
|
+
const loc = baseUrl ? `${baseUrl.replace(/\/$/, "")}${entry.path}` : entry.path;
|
|
32
|
+
let xml = ` <url>
|
|
33
|
+
<loc>${escapeXml(loc)}</loc>`;
|
|
34
|
+
if (entry.lastmod) {
|
|
35
|
+
const date = entry.lastmod instanceof Date ? entry.lastmod.toISOString().split("T")[0] : entry.lastmod;
|
|
36
|
+
xml += `
|
|
37
|
+
<lastmod>${escapeXml(date)}</lastmod>`;
|
|
38
|
+
}
|
|
39
|
+
return entry.changefreq && (xml += `
|
|
40
|
+
<changefreq>${entry.changefreq}</changefreq>`), entry.priority !== void 0 && (xml += `
|
|
41
|
+
<priority>${entry.priority.toFixed(1)}</priority>`), xml += `
|
|
42
|
+
</url>`, xml;
|
|
43
|
+
}).join(`
|
|
44
|
+
`)}
|
|
45
|
+
</urlset>
|
|
46
|
+
`;
|
|
47
|
+
}
|
|
48
|
+
function escapeXml(str) {
|
|
49
|
+
return str.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
50
|
+
}
|
|
51
|
+
export { generateSitemap };
|
|
52
|
+
//# sourceMappingURL=generateSitemap.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MicroMatch","generateSitemap","routes","options","envUrl","process","env","ONE_SERVER_URL","baseUrl","defaultPriority","priority","defaultChangefreq","changefreq","excludePatterns","exclude","entries","route","path","routeExport","length","isMatch","lastmod","push","buildSitemapXml","map","entry","loc","replace","xml","escapeXml","date","Date","toISOString","split","toFixed","join","str"],"sources":["../../../src/cli/generateSitemap.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,UAAA,MAAgB;AAehB,SAASC,gBAAgBC,MAAA,EAA4BC,OAAA,EAAqC;EAC/F,MAAMC,MAAA,GAASC,OAAA,CAAQC,GAAA,CAAIC,cAAA;IACrBC,OAAA,GAAUL,OAAA,CAAQK,OAAA,KAAYJ,MAAA,IAAUA,MAAA,KAAW,cAAcA,MAAA,GAAS;IAC1EK,eAAA,GAAkBN,OAAA,CAAQO,QAAA,IAAY;IACtCC,iBAAA,GAAoBR,OAAA,CAAQS,UAAA;IAC5BC,eAAA,GAAkBV,OAAA,CAAQW,OAAA,IAAW,EAAC;IAEtCC,OAAA,GAA0B,EAAC;EAEjC,WAAWC,KAAA,IAASd,MAAA,EAAQ;IAC1B,MAAM;MAAEe,IAAA;MAAMC;IAAY,IAAIF,KAAA;IAQ9B,IALIE,WAAA,EAAaJ,OAAA,IAKbD,eAAA,CAAgBM,MAAA,GAAS,KAAKnB,UAAA,CAAWoB,OAAA,CAAQH,IAAA,EAAMJ,eAAe,GACxE;IAGF,MAAMH,QAAA,GAAWQ,WAAA,EAAaR,QAAA,IAAYD,eAAA;MACpCG,UAAA,GAAaM,WAAA,EAAaN,UAAA,IAAcD,iBAAA;MACxCU,OAAA,GAAUH,WAAA,EAAaG,OAAA;IAE7BN,OAAA,CAAQO,IAAA,CAAK;MACXL,IAAA;MACAP,QAAA;MACAE,UAAA;MACAS;IACF,CAAC;EACH;EAEA,OAAOE,eAAA,CAAgBR,OAAA,EAASP,OAAO;AACzC;AAEA,SAASe,gBAAgBR,OAAA,EAAyBP,OAAA,EAAyB;EA0BzE,OAAO;AAAA;AAAA,EAzBYO,OAAA,CAChBS,GAAA,CAAKC,KAAA,IAAU;IACd,MAAMC,GAAA,GAAMlB,OAAA,GAAU,GAAGA,OAAA,CAAQmB,OAAA,CAAQ,OAAO,EAAE,CAAC,GAAGF,KAAA,CAAMR,IAAI,KAAKQ,KAAA,CAAMR,IAAA;IAE3E,IAAIW,GAAA,GAAM;AAAA,WAAqBC,SAAA,CAAUH,GAAG,CAAC;IAE7C,IAAID,KAAA,CAAMJ,OAAA,EAAS;MACjB,MAAMS,IAAA,GACJL,KAAA,CAAMJ,OAAA,YAAmBU,IAAA,GAAON,KAAA,CAAMJ,OAAA,CAAQW,WAAA,CAAY,EAAEC,KAAA,CAAM,GAAG,EAAE,CAAC,IAAIR,KAAA,CAAMJ,OAAA;MACpFO,GAAA,IAAO;AAAA,eAAkBC,SAAA,CAAUC,IAAI,CAAC;IAC1C;IAEA,OAAIL,KAAA,CAAMb,UAAA,KACRgB,GAAA,IAAO;AAAA,kBAAqBH,KAAA,CAAMb,UAAU,kBAG1Ca,KAAA,CAAMf,QAAA,KAAa,WACrBkB,GAAA,IAAO;AAAA,gBAAmBH,KAAA,CAAMf,QAAA,CAASwB,OAAA,CAAQ,CAAC,CAAC,gBAGrDN,GAAA,IAAO;AAAA,WACAA,GAAA;EACT,CAAC,EACAO,IAAA,CAAK;AAAA,CAAI,CAIF;AAAA;AAAA;AAGZ;AAEA,SAASN,UAAUO,GAAA,EAAqB;EACtC,OAAOA,GAAA,CACJT,OAAA,CAAQ,MAAM,OAAO,EACrBA,OAAA,CAAQ,MAAM,MAAM,EACpBA,OAAA,CAAQ,MAAM,MAAM,EACpBA,OAAA,CAAQ,MAAM,QAAQ,EACtBA,OAAA,CAAQ,MAAM,QAAQ;AAC3B","ignoreList":[]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import MicroMatch from "micromatch";
|
|
2
|
+
function _instanceof(left, right) {
|
|
3
|
+
return right != null && typeof Symbol < "u" && right[Symbol.hasInstance] ? !!right[Symbol.hasInstance](left) : left instanceof right;
|
|
4
|
+
}
|
|
5
|
+
function generateSitemap(routes, options) {
|
|
6
|
+
var envUrl = process.env.ONE_SERVER_URL,
|
|
7
|
+
_options_baseUrl,
|
|
8
|
+
baseUrl = (_options_baseUrl = options.baseUrl) !== null && _options_baseUrl !== void 0 ? _options_baseUrl : envUrl && envUrl !== "undefined" ? envUrl : "",
|
|
9
|
+
_options_priority,
|
|
10
|
+
defaultPriority = (_options_priority = options.priority) !== null && _options_priority !== void 0 ? _options_priority : 0.5,
|
|
11
|
+
defaultChangefreq = options.changefreq,
|
|
12
|
+
excludePatterns = options.exclude || [],
|
|
13
|
+
entries = [],
|
|
14
|
+
_iteratorNormalCompletion = !0,
|
|
15
|
+
_didIteratorError = !1,
|
|
16
|
+
_iteratorError = void 0;
|
|
17
|
+
try {
|
|
18
|
+
for (var _iterator = routes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
|
|
19
|
+
var route = _step.value,
|
|
20
|
+
{
|
|
21
|
+
path,
|
|
22
|
+
routeExport
|
|
23
|
+
} = route;
|
|
24
|
+
if (!routeExport?.exclude && !(excludePatterns.length > 0 && MicroMatch.isMatch(path, excludePatterns))) {
|
|
25
|
+
var _routeExport_priority,
|
|
26
|
+
priority = (_routeExport_priority = routeExport?.priority) !== null && _routeExport_priority !== void 0 ? _routeExport_priority : defaultPriority,
|
|
27
|
+
_routeExport_changefreq,
|
|
28
|
+
changefreq = (_routeExport_changefreq = routeExport?.changefreq) !== null && _routeExport_changefreq !== void 0 ? _routeExport_changefreq : defaultChangefreq,
|
|
29
|
+
lastmod = routeExport?.lastmod;
|
|
30
|
+
entries.push({
|
|
31
|
+
path,
|
|
32
|
+
priority,
|
|
33
|
+
changefreq,
|
|
34
|
+
lastmod
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
} catch (err) {
|
|
39
|
+
_didIteratorError = !0, _iteratorError = err;
|
|
40
|
+
} finally {
|
|
41
|
+
try {
|
|
42
|
+
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
|
|
43
|
+
} finally {
|
|
44
|
+
if (_didIteratorError) throw _iteratorError;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return buildSitemapXml(entries, baseUrl);
|
|
48
|
+
}
|
|
49
|
+
function buildSitemapXml(entries, baseUrl) {
|
|
50
|
+
var urlEntries = entries.map(function (entry) {
|
|
51
|
+
var loc = baseUrl ? `${baseUrl.replace(/\/$/, "")}${entry.path}` : entry.path,
|
|
52
|
+
xml = ` <url>
|
|
53
|
+
<loc>${escapeXml(loc)}</loc>`;
|
|
54
|
+
if (entry.lastmod) {
|
|
55
|
+
var date = _instanceof(entry.lastmod, Date) ? entry.lastmod.toISOString().split("T")[0] : entry.lastmod;
|
|
56
|
+
xml += `
|
|
57
|
+
<lastmod>${escapeXml(date)}</lastmod>`;
|
|
58
|
+
}
|
|
59
|
+
return entry.changefreq && (xml += `
|
|
60
|
+
<changefreq>${entry.changefreq}</changefreq>`), entry.priority !== void 0 && (xml += `
|
|
61
|
+
<priority>${entry.priority.toFixed(1)}</priority>`), xml += `
|
|
62
|
+
</url>`, xml;
|
|
63
|
+
}).join(`
|
|
64
|
+
`);
|
|
65
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
66
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
67
|
+
${urlEntries}
|
|
68
|
+
</urlset>
|
|
69
|
+
`;
|
|
70
|
+
}
|
|
71
|
+
function escapeXml(str) {
|
|
72
|
+
return str.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
73
|
+
}
|
|
74
|
+
export { generateSitemap };
|
|
75
|
+
//# sourceMappingURL=generateSitemap.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MicroMatch","_instanceof","left","right","Symbol","hasInstance","generateSitemap","routes","options","envUrl","process","env","ONE_SERVER_URL","_options_baseUrl","baseUrl","_options_priority","defaultPriority","priority","defaultChangefreq","changefreq","excludePatterns","exclude","entries","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","iterator","_step","next","done","route","value","path","routeExport","length","isMatch","_routeExport_priority","_routeExport_changefreq","lastmod","push","err","return","buildSitemapXml","urlEntries","map","entry","loc","replace","xml","escapeXml","date","Date","toISOString","split"],"sources":["../../../src/cli/generateSitemap.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,UAAA,MAAgB;AAehB,SAASC,YAAAC,IAAgB,EAAAC,KAAA,EAA4B;EAC1D,OAAMA,KAAA,IAAS,QAAQ,OAAIC,MAAA,MACrB,IAAAD,KAAA,CAAUC,MAAA,CAAAC,WAAQ,IAAY,EAAAF,KAAA,CAAUC,MAAA,CAAAC,WAAW,EAAAH,IAAA,CAAc,GAAAA,IAAA,YACjEC,KAAA;AAMN;AACE,SAAAG,eAAcA,CAAAC,MAAY,EAAAC,OAAI;EAQ9B,IAAAC,MALI,GAAAC,OAAa,CAAAC,GAAA,CAAAC,cAKb;IAAAC,gBAAyB;IAAAC,OAAK,IAAAD,gBAAyB,GAAAL,OAAA,CAAAM,OAAe,cAAAD,gBAAA,cAAAA,gBAAA,GAAAJ,MAAA,IAAAA,MAAA,mBAAAA,MAAA;IAAAM,iBAAA;IAAAC,eAAA,IAAAD,iBAAA,GAAAP,OAAA,CAAAS,QAAA,cAAAF,iBAAA,cAAAA,iBAAA;IAAAG,iBAAA,GAAAV,OAAA,CAAAW,UAAA;IAAAC,eAAA,GAAAZ,OAAA,CAAAa,OAAA;IAAAC,OAAA;IAAAC,yBAAA;IAAAC,iBAAA;IAAAC,cAAA;EACxE;IAGF,SAAMC,SAAW,GAAAnB,MAAA,CAAAH,MAAa,CAAAuB,QAAY,KAAAC,KAAA,IAAAL,yBACvB,GAAa,CAAAK,KAAA,GAAAF,SAAc,CAAAG,IAAA,IAAAC,IAAA,GACxCP,yBAAuB;MAE7B,IAAAQ,KAAQ,GAAKH,KAAA,CAAAI,KAAA;QAAA;UAAAC,IAAA;UAAAC;QAAA,IAAAH,KAAA;MACX,KAAAG,WAAA,EAAAb,OAAA,MAAAD,eAAA,CAAAe,MAAA,QAAAnC,UAAA,CAAAoC,OAAA,CAAAH,IAAA,EAAAb,eAAA;QACA,IAAAiB,qBAAA;UAAApB,QAAA,IAAAoB,qBAAA,GAAAH,WAAA,EAAAjB,QAAA,cAAAoB,qBAAA,cAAAA,qBAAA,GAAArB,eAAA;UAAAsB,uBAAA;UAAAnB,UAAA,IAAAmB,uBAAA,GAAAJ,WAAA,EAAAf,UAAA,cAAAmB,uBAAA,cAAAA,uBAAA,GAAApB,iBAAA;UAAAqB,OAAA,GAAAL,WAAA,EAAAK,OAAA;QACAjB,OAAA,CAAAkB,IAAA;UACAP,IAAA;UACDhB,QAAA;UACHE,UAAA;UAEOoB;QACT;MAEA;IA0BE;EAAO,SAAAE,GAAA;IAzBYjB,iBACX,IAAU,GAAAC,cAAA,GAAAgB,GAAA;EACd,UAAM;IAEN,IAAI;MAAM,CAAAlB,yBAAmC,IAAAG,SAAA,CAAAgB,MAAA,YAAAhB,SAAA,CAAAgB,MAAA;IAE7C,UAAU;MACR,IAAAlB,iBACQ,EACR,MAAOC,cAAA;IAAA;EAAiC;EAG1C,OAAAkB,eAAU,CAAArB,OACR,EAAAR,OAAO;AAAA;AAIA,SAAA6B,eAAyBA,CAAArB,OAAS,EAAAR,OAAU;EAG9C,IAAA8B,UACA,GAAAtB,OAAA,CAAAuB,GAAA,WAAAC,KAAA;IACR,IACAC,GAAK,GAAAjC,OAAA,MAAAA,OAAA,CAAAkC,OAAA,cAAAF,KAAA,CAAAb,IAAA,KAAAa,KAAA,CAAAb,IAAA;MAAAgB,GAAA;AAAA,WAIEC,SAAA,CAAAH,GAAA;IAAA,IAAAD,KAAA,CAAAP,OAAA;MAAA,IAAAY,IAAA,GAAAlD,WAAA,CAAA6C,KAAA,CAAAP,OAAA,EAAAa,IAAA,IAAAN,KAAA,CAAAP,OAAA,CAAAc,WAAA,GAAAC,KAAA,WAAAR,KAAA,CAAAP,OAAA;MAGZU,GAAA;AAEA,eAASC,SAA+B,CAAAC,IAAA;IACtC;IAMF,OAAAL,KAAA,CAAA3B,UAAA,KAAA8B,GAAA","ignoreList":[]}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { generateSitemap } from "./generateSitemap";
|
|
3
|
+
describe("generateSitemap", () => {
|
|
4
|
+
it("generates basic sitemap XML", () => {
|
|
5
|
+
const result = generateSitemap([{ path: "/" }, { path: "/about" }, { path: "/blog" }], {});
|
|
6
|
+
expect(result).toContain('<?xml version="1.0" encoding="UTF-8"?>'), expect(result).toContain('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'), expect(result).toContain("<loc>/</loc>"), expect(result).toContain("<loc>/about</loc>"), expect(result).toContain("<loc>/blog</loc>"), expect(result).toContain("</urlset>");
|
|
7
|
+
}), it("uses baseUrl when provided", () => {
|
|
8
|
+
const result = generateSitemap([{ path: "/" }, { path: "/about" }], {
|
|
9
|
+
baseUrl: "https://example.com"
|
|
10
|
+
});
|
|
11
|
+
expect(result).toContain("<loc>https://example.com/</loc>"), expect(result).toContain("<loc>https://example.com/about</loc>");
|
|
12
|
+
}), it("strips trailing slash from baseUrl", () => {
|
|
13
|
+
const result = generateSitemap([{ path: "/about" }], {
|
|
14
|
+
baseUrl: "https://example.com/"
|
|
15
|
+
});
|
|
16
|
+
expect(result).toContain("<loc>https://example.com/about</loc>"), expect(result).not.toContain("https://example.com//about");
|
|
17
|
+
}), it("uses ONE_SERVER_URL env var when baseUrl not provided", () => {
|
|
18
|
+
const originalEnv = process.env.ONE_SERVER_URL;
|
|
19
|
+
process.env.ONE_SERVER_URL = "https://env-url.com";
|
|
20
|
+
try {
|
|
21
|
+
const result = generateSitemap([{ path: "/test" }], {});
|
|
22
|
+
expect(result).toContain("<loc>https://env-url.com/test</loc>");
|
|
23
|
+
} finally {
|
|
24
|
+
process.env.ONE_SERVER_URL = originalEnv;
|
|
25
|
+
}
|
|
26
|
+
}), it("applies default priority to all routes", () => {
|
|
27
|
+
const result = generateSitemap([{ path: "/" }, { path: "/about" }], {
|
|
28
|
+
priority: 0.8
|
|
29
|
+
});
|
|
30
|
+
expect(result).toMatch(/<url>\s*<loc>\/about<\/loc>\s*<priority>0\.8<\/priority>\s*<\/url>/s);
|
|
31
|
+
}), it("applies default changefreq to all routes", () => {
|
|
32
|
+
const result = generateSitemap([{ path: "/" }, { path: "/about" }], {
|
|
33
|
+
changefreq: "weekly"
|
|
34
|
+
});
|
|
35
|
+
expect(result).toContain("<changefreq>weekly</changefreq>");
|
|
36
|
+
}), it("respects route-level sitemap exports", () => {
|
|
37
|
+
const result = generateSitemap([
|
|
38
|
+
{ path: "/", routeExport: { priority: 1, changefreq: "daily" } },
|
|
39
|
+
{ path: "/about", routeExport: { priority: 0.5, changefreq: "monthly" } }
|
|
40
|
+
], {
|
|
41
|
+
priority: 0.7,
|
|
42
|
+
changefreq: "weekly"
|
|
43
|
+
});
|
|
44
|
+
expect(result).toMatch(
|
|
45
|
+
/<url>\s*<loc>\/<\/loc>\s*<changefreq>daily<\/changefreq>\s*<priority>1\.0<\/priority>\s*<\/url>/s
|
|
46
|
+
), expect(result).toMatch(
|
|
47
|
+
/<url>\s*<loc>\/about<\/loc>\s*<changefreq>monthly<\/changefreq>\s*<priority>0\.5<\/priority>\s*<\/url>/s
|
|
48
|
+
);
|
|
49
|
+
}), it("excludes routes with routeExport.exclude = true", () => {
|
|
50
|
+
const result = generateSitemap([
|
|
51
|
+
{ path: "/" },
|
|
52
|
+
{ path: "/admin", routeExport: { exclude: !0 } },
|
|
53
|
+
{ path: "/about" }
|
|
54
|
+
], {});
|
|
55
|
+
expect(result).toContain("<loc>/</loc>"), expect(result).toContain("<loc>/about</loc>"), expect(result).not.toContain("/admin");
|
|
56
|
+
}), it("excludes routes matching exclude glob patterns", () => {
|
|
57
|
+
const result = generateSitemap([
|
|
58
|
+
{ path: "/" },
|
|
59
|
+
{ path: "/admin/dashboard" },
|
|
60
|
+
{ path: "/admin/users" },
|
|
61
|
+
{ path: "/about" },
|
|
62
|
+
{ path: "/api/health" }
|
|
63
|
+
], {
|
|
64
|
+
exclude: ["/admin/*", "/api/*"]
|
|
65
|
+
});
|
|
66
|
+
expect(result).toContain("<loc>/</loc>"), expect(result).toContain("<loc>/about</loc>"), expect(result).not.toContain("/admin"), expect(result).not.toContain("/api");
|
|
67
|
+
}), it("includes lastmod when provided in route export", () => {
|
|
68
|
+
const result = generateSitemap([
|
|
69
|
+
{ path: "/", routeExport: { lastmod: "2024-01-15" } },
|
|
70
|
+
{ path: "/about", routeExport: { lastmod: /* @__PURE__ */ new Date("2024-06-20") } }
|
|
71
|
+
], {});
|
|
72
|
+
expect(result).toContain("<lastmod>2024-01-15</lastmod>"), expect(result).toContain("<lastmod>2024-06-20</lastmod>");
|
|
73
|
+
}), it("escapes XML special characters in URLs", () => {
|
|
74
|
+
const result = generateSitemap([{ path: "/search?q=foo&bar=baz" }], {
|
|
75
|
+
baseUrl: "https://example.com"
|
|
76
|
+
});
|
|
77
|
+
expect(result).toContain("&"), expect(result).not.toContain("&bar");
|
|
78
|
+
}), it("generates empty sitemap when no routes", () => {
|
|
79
|
+
const result = generateSitemap([], {});
|
|
80
|
+
expect(result).toContain('<?xml version="1.0" encoding="UTF-8"?>'), expect(result).toContain('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'), expect(result).toContain("</urlset>"), expect(result).not.toContain("<url>");
|
|
81
|
+
}), it("handles all valid changefreq values", () => {
|
|
82
|
+
const changefreqs = [
|
|
83
|
+
"always",
|
|
84
|
+
"hourly",
|
|
85
|
+
"daily",
|
|
86
|
+
"weekly",
|
|
87
|
+
"monthly",
|
|
88
|
+
"yearly",
|
|
89
|
+
"never"
|
|
90
|
+
];
|
|
91
|
+
for (const changefreq of changefreqs) {
|
|
92
|
+
const result = generateSitemap([{ path: "/", routeExport: { changefreq } }], {});
|
|
93
|
+
expect(result).toContain(`<changefreq>${changefreq}</changefreq>`);
|
|
94
|
+
}
|
|
95
|
+
}), it("formats priority with one decimal place", () => {
|
|
96
|
+
const result = generateSitemap([
|
|
97
|
+
{ path: "/", routeExport: { priority: 1 } },
|
|
98
|
+
{ path: "/about", routeExport: { priority: 0.5 } },
|
|
99
|
+
{ path: "/blog", routeExport: { priority: 0.75 } }
|
|
100
|
+
], {});
|
|
101
|
+
expect(result).toContain("<priority>1.0</priority>"), expect(result).toContain("<priority>0.5</priority>"), expect(result).toContain("<priority>0.8</priority>");
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=generateSitemap.test.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/cli/generateSitemap.test.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { generateSitemap } from "./generateSitemap.mjs";
|
|
3
|
+
describe("generateSitemap", () => {
|
|
4
|
+
it("generates basic sitemap XML", () => {
|
|
5
|
+
const result = generateSitemap([{
|
|
6
|
+
path: "/"
|
|
7
|
+
}, {
|
|
8
|
+
path: "/about"
|
|
9
|
+
}, {
|
|
10
|
+
path: "/blog"
|
|
11
|
+
}], {});
|
|
12
|
+
expect(result).toContain('<?xml version="1.0" encoding="UTF-8"?>'), expect(result).toContain('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'), expect(result).toContain("<loc>/</loc>"), expect(result).toContain("<loc>/about</loc>"), expect(result).toContain("<loc>/blog</loc>"), expect(result).toContain("</urlset>");
|
|
13
|
+
}), it("uses baseUrl when provided", () => {
|
|
14
|
+
const result = generateSitemap([{
|
|
15
|
+
path: "/"
|
|
16
|
+
}, {
|
|
17
|
+
path: "/about"
|
|
18
|
+
}], {
|
|
19
|
+
baseUrl: "https://example.com"
|
|
20
|
+
});
|
|
21
|
+
expect(result).toContain("<loc>https://example.com/</loc>"), expect(result).toContain("<loc>https://example.com/about</loc>");
|
|
22
|
+
}), it("strips trailing slash from baseUrl", () => {
|
|
23
|
+
const result = generateSitemap([{
|
|
24
|
+
path: "/about"
|
|
25
|
+
}], {
|
|
26
|
+
baseUrl: "https://example.com/"
|
|
27
|
+
});
|
|
28
|
+
expect(result).toContain("<loc>https://example.com/about</loc>"), expect(result).not.toContain("https://example.com//about");
|
|
29
|
+
}), it("uses ONE_SERVER_URL env var when baseUrl not provided", () => {
|
|
30
|
+
const originalEnv = process.env.ONE_SERVER_URL;
|
|
31
|
+
process.env.ONE_SERVER_URL = "https://env-url.com";
|
|
32
|
+
try {
|
|
33
|
+
const result = generateSitemap([{
|
|
34
|
+
path: "/test"
|
|
35
|
+
}], {});
|
|
36
|
+
expect(result).toContain("<loc>https://env-url.com/test</loc>");
|
|
37
|
+
} finally {
|
|
38
|
+
process.env.ONE_SERVER_URL = originalEnv;
|
|
39
|
+
}
|
|
40
|
+
}), it("applies default priority to all routes", () => {
|
|
41
|
+
const result = generateSitemap([{
|
|
42
|
+
path: "/"
|
|
43
|
+
}, {
|
|
44
|
+
path: "/about"
|
|
45
|
+
}], {
|
|
46
|
+
priority: 0.8
|
|
47
|
+
});
|
|
48
|
+
expect(result).toMatch(/<url>\s*<loc>\/about<\/loc>\s*<priority>0\.8<\/priority>\s*<\/url>/s);
|
|
49
|
+
}), it("applies default changefreq to all routes", () => {
|
|
50
|
+
const result = generateSitemap([{
|
|
51
|
+
path: "/"
|
|
52
|
+
}, {
|
|
53
|
+
path: "/about"
|
|
54
|
+
}], {
|
|
55
|
+
changefreq: "weekly"
|
|
56
|
+
});
|
|
57
|
+
expect(result).toContain("<changefreq>weekly</changefreq>");
|
|
58
|
+
}), it("respects route-level sitemap exports", () => {
|
|
59
|
+
const result = generateSitemap([{
|
|
60
|
+
path: "/",
|
|
61
|
+
routeExport: {
|
|
62
|
+
priority: 1,
|
|
63
|
+
changefreq: "daily"
|
|
64
|
+
}
|
|
65
|
+
}, {
|
|
66
|
+
path: "/about",
|
|
67
|
+
routeExport: {
|
|
68
|
+
priority: 0.5,
|
|
69
|
+
changefreq: "monthly"
|
|
70
|
+
}
|
|
71
|
+
}], {
|
|
72
|
+
priority: 0.7,
|
|
73
|
+
changefreq: "weekly"
|
|
74
|
+
});
|
|
75
|
+
expect(result).toMatch(/<url>\s*<loc>\/<\/loc>\s*<changefreq>daily<\/changefreq>\s*<priority>1\.0<\/priority>\s*<\/url>/s), expect(result).toMatch(/<url>\s*<loc>\/about<\/loc>\s*<changefreq>monthly<\/changefreq>\s*<priority>0\.5<\/priority>\s*<\/url>/s);
|
|
76
|
+
}), it("excludes routes with routeExport.exclude = true", () => {
|
|
77
|
+
const result = generateSitemap([{
|
|
78
|
+
path: "/"
|
|
79
|
+
}, {
|
|
80
|
+
path: "/admin",
|
|
81
|
+
routeExport: {
|
|
82
|
+
exclude: !0
|
|
83
|
+
}
|
|
84
|
+
}, {
|
|
85
|
+
path: "/about"
|
|
86
|
+
}], {});
|
|
87
|
+
expect(result).toContain("<loc>/</loc>"), expect(result).toContain("<loc>/about</loc>"), expect(result).not.toContain("/admin");
|
|
88
|
+
}), it("excludes routes matching exclude glob patterns", () => {
|
|
89
|
+
const result = generateSitemap([{
|
|
90
|
+
path: "/"
|
|
91
|
+
}, {
|
|
92
|
+
path: "/admin/dashboard"
|
|
93
|
+
}, {
|
|
94
|
+
path: "/admin/users"
|
|
95
|
+
}, {
|
|
96
|
+
path: "/about"
|
|
97
|
+
}, {
|
|
98
|
+
path: "/api/health"
|
|
99
|
+
}], {
|
|
100
|
+
exclude: ["/admin/*", "/api/*"]
|
|
101
|
+
});
|
|
102
|
+
expect(result).toContain("<loc>/</loc>"), expect(result).toContain("<loc>/about</loc>"), expect(result).not.toContain("/admin"), expect(result).not.toContain("/api");
|
|
103
|
+
}), it("includes lastmod when provided in route export", () => {
|
|
104
|
+
const result = generateSitemap([{
|
|
105
|
+
path: "/",
|
|
106
|
+
routeExport: {
|
|
107
|
+
lastmod: "2024-01-15"
|
|
108
|
+
}
|
|
109
|
+
}, {
|
|
110
|
+
path: "/about",
|
|
111
|
+
routeExport: {
|
|
112
|
+
lastmod: /* @__PURE__ */new Date("2024-06-20")
|
|
113
|
+
}
|
|
114
|
+
}], {});
|
|
115
|
+
expect(result).toContain("<lastmod>2024-01-15</lastmod>"), expect(result).toContain("<lastmod>2024-06-20</lastmod>");
|
|
116
|
+
}), it("escapes XML special characters in URLs", () => {
|
|
117
|
+
const result = generateSitemap([{
|
|
118
|
+
path: "/search?q=foo&bar=baz"
|
|
119
|
+
}], {
|
|
120
|
+
baseUrl: "https://example.com"
|
|
121
|
+
});
|
|
122
|
+
expect(result).toContain("&"), expect(result).not.toContain("&bar");
|
|
123
|
+
}), it("generates empty sitemap when no routes", () => {
|
|
124
|
+
const result = generateSitemap([], {});
|
|
125
|
+
expect(result).toContain('<?xml version="1.0" encoding="UTF-8"?>'), expect(result).toContain('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'), expect(result).toContain("</urlset>"), expect(result).not.toContain("<url>");
|
|
126
|
+
}), it("handles all valid changefreq values", () => {
|
|
127
|
+
const changefreqs = ["always", "hourly", "daily", "weekly", "monthly", "yearly", "never"];
|
|
128
|
+
for (const changefreq of changefreqs) {
|
|
129
|
+
const result = generateSitemap([{
|
|
130
|
+
path: "/",
|
|
131
|
+
routeExport: {
|
|
132
|
+
changefreq
|
|
133
|
+
}
|
|
134
|
+
}], {});
|
|
135
|
+
expect(result).toContain(`<changefreq>${changefreq}</changefreq>`);
|
|
136
|
+
}
|
|
137
|
+
}), it("formats priority with one decimal place", () => {
|
|
138
|
+
const result = generateSitemap([{
|
|
139
|
+
path: "/",
|
|
140
|
+
routeExport: {
|
|
141
|
+
priority: 1
|
|
142
|
+
}
|
|
143
|
+
}, {
|
|
144
|
+
path: "/about",
|
|
145
|
+
routeExport: {
|
|
146
|
+
priority: 0.5
|
|
147
|
+
}
|
|
148
|
+
}, {
|
|
149
|
+
path: "/blog",
|
|
150
|
+
routeExport: {
|
|
151
|
+
priority: 0.75
|
|
152
|
+
}
|
|
153
|
+
}], {});
|
|
154
|
+
expect(result).toContain("<priority>1.0</priority>"), expect(result).toContain("<priority>0.5</priority>"), expect(result).toContain("<priority>0.8</priority>");
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
//# sourceMappingURL=generateSitemap.test.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","expect","it","generateSitemap","result","path","toContain","baseUrl","not","originalEnv","process","env","ONE_SERVER_URL","priority","toMatch","changefreq","routeExport","exclude","lastmod","Date","changefreqs"],"sources":["../../../src/cli/generateSitemap.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|