tanstack-start-sitemap 0.0.2 → 0.0.5

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 CHANGED
@@ -31,7 +31,8 @@ export default defineConfig({
31
31
  projects: ["./tsconfig.json"],
32
32
  }),
33
33
  sitemapPlugin({
34
- hostname: 'https://example.com'
34
+ hostname: 'https://example.com',
35
+
35
36
  }),
36
37
  ],
37
38
  },
package/dist/index.cjs.js CHANGED
@@ -1,13 +1,13 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=n=>{const s=n.match(/ROUTE_MANIFEST_START([\s\S]*?)ROUTE_MANIFEST_END/);if(!s)return[];try{const e=JSON.parse(s[1]);return Object.keys(e.routes).filter(t=>t!=="__root__").map(t=>t==="/"?t:t.replace(/\/$/,""))}catch(e){return console.error("Error parsing route manifest:",e),[]}},T=n=>{const{hostname:s,routeTreePath:e="app/routeTree.gen.ts",routes:t={},defaultChangefreq:f="weekly",defaultPriority:d=.5}=n;return{name:"vite-plugin-sitemap",apply:"build",closeBundle:async()=>{try{const{promises:r}=await Promise.resolve().then(()=>m),{resolve:u}=await Promise.resolve().then(()=>m),p=[e,`src/${e}`,`${process.cwd()}/${e}`,`${process.cwd()}/src/${e}`];let a=null,i=null;for(const o of p)try{a=await r.readFile(o,"utf-8"),i=o;break}catch{}if(!a||!i)throw new Error(`Could not find route tree file. Tried the following paths:
2
- ${p.join(`
3
- `)}`);console.log(`Found route tree at: ${i}`);const g=y(a),h=new Date().toISOString().split("T")[0],w=`<?xml version="1.0" encoding="UTF-8"?>
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("fs"),p=require("path"),w=a=>{const o=a.match(/ROUTE_MANIFEST_START([\s\S]*?)ROUTE_MANIFEST_END/);if(!o)return[];try{const e=JSON.parse(o[1]);return Object.keys(e.routes).filter(t=>t!=="__root__").map(t=>t==="/"?t:t.replace(/\/$/,""))}catch(e){return console.error("Error parsing route manifest:",e),[]}},y=a=>{const{hostname:o,routeTreePath:e="app/routeTree.gen.ts",routes:t={},defaultChangefreq:m="weekly",defaultPriority:f=.5}=a;return{name:"vite-plugin-sitemap",apply:"build",closeBundle:async()=>{try{const s=[e,`src/${e}`,`${process.cwd()}/${e}`,`${process.cwd()}/src/${e}`];let i=null,c=null;for(const r of s)try{i=await n.promises.readFile(r,"utf-8"),c=r;break}catch{}if(!i||!c)throw new Error(`Could not find route tree file. Tried the following paths:
2
+ ${s.join(`
3
+ `)}`);console.log(`Found route tree at: ${c}`);const d=w(i),g=new Date().toISOString().split("T")[0],h=`<?xml version="1.0" encoding="UTF-8"?>
4
4
  <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
5
- ${g.map(o=>{const c=t[o]||{};return` <url>
6
- <loc>${s}${o}</loc>
7
- <lastmod>${c.lastmod||h}</lastmod>
8
- <changefreq>${c.changefreq||f}</changefreq>
9
- <priority>${c.priority||d}</priority>
5
+ ${d.map(r=>{const u=t[r]||{};return` <url>
6
+ <loc>${o}${r}</loc>
7
+ <lastmod>${u.lastmod||g}</lastmod>
8
+ <changefreq>${u.changefreq||m}</changefreq>
9
+ <priority>${u.priority||f}</priority>
10
10
  </url>`}).join(`
11
11
  `)}
12
- </urlset>`,l=u(process.cwd(),"public");try{await r.access(l)}catch{await r.mkdir(l,{recursive:!0})}await r.writeFile(u(l,"sitemap.xml"),w),console.log("✓ Sitemap generated successfully")}catch(r){console.error("Error generating sitemap:",r)}}}},m=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));exports.sitemapPlugin=T;
12
+ </urlset>`,l=p.resolve(process.cwd(),"public");try{await n.promises.access(l)}catch{await n.promises.mkdir(l,{recursive:!0})}await n.promises.writeFile(p.resolve(l,"sitemap.xml"),h),console.log("✓ Sitemap generated successfully")}catch(s){console.error("Error generating sitemap:",s)}}}};exports.sitemapPlugin=y;
13
13
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/lib/gen-sitemap.ts"],"sourcesContent":["// vite-sitemap-plugin.ts\nimport type { Plugin } from \"vite\";\n\nexport interface SitemapOptions {\n hostname: string;\n routeTreePath?: string;\n routes?: {\n [key: string]: {\n changefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n priority?: number;\n lastmod?: string;\n };\n };\n defaultChangefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n defaultPriority?: number;\n}\n\nconst extractRoutesFromManifest = (content: string): string[] => {\n const manifestMatch = content.match(\n /ROUTE_MANIFEST_START([\\s\\S]*?)ROUTE_MANIFEST_END/\n );\n if (!manifestMatch) return [];\n\n try {\n const manifest = JSON.parse(manifestMatch[1]);\n return Object.keys(manifest.routes)\n .filter((route) => route !== \"__root__\")\n .map((route) => (route === \"/\" ? route : route.replace(/\\/$/, \"\")));\n } catch (e) {\n console.error(\"Error parsing route manifest:\", e);\n return [];\n }\n};\n\nexport const sitemapPlugin = (options: SitemapOptions): Plugin => {\n const {\n hostname,\n routeTreePath = \"app/routeTree.gen.ts\",\n routes = {},\n defaultChangefreq = \"weekly\",\n defaultPriority = 0.5,\n } = options;\n\n return {\n name: \"vite-plugin-sitemap\",\n apply: \"build\",\n closeBundle: async () => {\n try {\n // Dynamically import Node built-in modules to avoid bundling issues\n const { promises: fsPromises } = await import(\"fs\");\n const { resolve } = await import(\"path\");\n\n const possiblePaths = [\n routeTreePath,\n `src/${routeTreePath}`,\n `${process.cwd()}/${routeTreePath}`,\n `${process.cwd()}/src/${routeTreePath}`,\n ];\n\n let routeTreeContent: string | null = null;\n let foundPath: string | null = null;\n\n // Attempt to read the route tree file from the possible paths\n for (const testPath of possiblePaths) {\n try {\n routeTreeContent = await fsPromises.readFile(testPath, \"utf-8\");\n foundPath = testPath;\n break;\n } catch {\n // Try the next path if this one fails\n }\n }\n\n if (!routeTreeContent || !foundPath) {\n throw new Error(\n `Could not find route tree file. Tried the following paths:\\n${possiblePaths.join(\n \"\\n\"\n )}`\n );\n }\n\n console.log(`Found route tree at: ${foundPath}`);\n\n const allRoutes = extractRoutesFromManifest(routeTreeContent);\n const today = new Date().toISOString().split(\"T\")[0];\n\n const sitemapContent = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n${allRoutes\n .map((route) => {\n const routeConfig = routes[route] || {};\n return ` <url>\n <loc>${hostname}${route}</loc>\n <lastmod>${routeConfig.lastmod || today}</lastmod>\n <changefreq>${routeConfig.changefreq || defaultChangefreq}</changefreq>\n <priority>${routeConfig.priority || defaultPriority}</priority>\n </url>`;\n })\n .join(\"\\n\")}\n</urlset>`;\n\n const publicDir = resolve(process.cwd(), \"public\");\n\n // Ensure the public directory exists\n try {\n await fsPromises.access(publicDir);\n } catch {\n await fsPromises.mkdir(publicDir, { recursive: true });\n }\n\n // Write the sitemap.xml file to the public directory\n await fsPromises.writeFile(\n resolve(publicDir, \"sitemap.xml\"),\n sitemapContent\n );\n\n console.log(\"✓ Sitemap generated successfully\");\n } catch (error) {\n console.error(\"Error generating sitemap:\", error);\n }\n },\n };\n};\n\nexport default sitemapPlugin;\n"],"names":["extractRoutesFromManifest","content","manifestMatch","manifest","route","sitemapPlugin","options","hostname","routeTreePath","routes","defaultChangefreq","defaultPriority","fsPromises","__viteBrowserExternal","resolve","possiblePaths","routeTreeContent","foundPath","testPath","allRoutes","today","sitemapContent","routeConfig","publicDir","error"],"mappings":"gFA+BA,MAAMA,EAA6BC,GAA8B,CAC/D,MAAMC,EAAgBD,EAAQ,MAC5B,kDACF,EACI,GAAA,CAACC,EAAe,MAAO,CAAC,EAExB,GAAA,CACF,MAAMC,EAAW,KAAK,MAAMD,EAAc,CAAC,CAAC,EACrC,OAAA,OAAO,KAAKC,EAAS,MAAM,EAC/B,OAAQC,GAAUA,IAAU,UAAU,EACtC,IAAKA,GAAWA,IAAU,IAAMA,EAAQA,EAAM,QAAQ,MAAO,EAAE,CAAE,QAC7D,EAAG,CACF,eAAA,MAAM,gCAAiC,CAAC,EACzC,CAAC,CAAA,CAEZ,EAEaC,EAAiBC,GAAoC,CAC1D,KAAA,CACJ,SAAAC,EACA,cAAAC,EAAgB,uBAChB,OAAAC,EAAS,CAAC,EACV,kBAAAC,EAAoB,SACpB,gBAAAC,EAAkB,EAAA,EAChBL,EAEG,MAAA,CACL,KAAM,sBACN,MAAO,QACP,YAAa,SAAY,CACnB,GAAA,CAEF,KAAM,CAAE,SAAUM,CAAe,EAAA,MAAM,QAAW,QAAA,EAAA,KAAA,IAAAC,CAAA,EAC5C,CAAE,QAAAC,CAAY,EAAA,MAAM,QAAa,QAAA,EAAA,KAAA,IAAAD,CAAA,EAEjCE,EAAgB,CACpBP,EACA,OAAOA,CAAa,GACpB,GAAG,QAAQ,IAAK,CAAA,IAAIA,CAAa,GACjC,GAAG,QAAQ,KAAK,QAAQA,CAAa,EACvC,EAEA,IAAIQ,EAAkC,KAClCC,EAA2B,KAG/B,UAAWC,KAAYH,EACjB,GAAA,CACFC,EAAmB,MAAMJ,EAAW,SAASM,EAAU,OAAO,EAClDD,EAAAC,EACZ,KAAA,MACM,CAAA,CAKN,GAAA,CAACF,GAAoB,CAACC,EACxB,MAAM,IAAI,MACR;AAAA,EAA+DF,EAAc,KAC3E;AAAA,CAAA,CACD,EACH,EAGM,QAAA,IAAI,wBAAwBE,CAAS,EAAE,EAEzC,MAAAE,EAAYnB,EAA0BgB,CAAgB,EACtDI,MAAY,KAAK,EAAE,cAAc,MAAM,GAAG,EAAE,CAAC,EAE7CC,EAAiB;AAAA;AAAA,EAE7BF,EACC,IAAKf,GAAU,CACd,MAAMkB,EAAcb,EAAOL,CAAK,GAAK,CAAC,EAC/B,MAAA;AAAA,WACAG,CAAQ,GAAGH,CAAK;AAAA,eACZkB,EAAY,SAAWF,CAAK;AAAA,kBACzBE,EAAY,YAAcZ,CAAiB;AAAA,gBAC7CY,EAAY,UAAYX,CAAe;AAAA,SAAA,CAEpD,EACA,KAAK;AAAA,CAAI,CAAC;AAAA,WAGCY,EAAYT,EAAQ,QAAQ,IAAA,EAAO,QAAQ,EAG7C,GAAA,CACI,MAAAF,EAAW,OAAOW,CAAS,CAAA,MAC3B,CACN,MAAMX,EAAW,MAAMW,EAAW,CAAE,UAAW,GAAM,CAAA,CAIvD,MAAMX,EAAW,UACfE,EAAQS,EAAW,aAAa,EAChCF,CACF,EAEA,QAAQ,IAAI,kCAAkC,QACvCG,EAAO,CACN,QAAA,MAAM,4BAA6BA,CAAK,CAAA,CAClD,CAEJ,CACF"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/lib/gen-sitemap.ts"],"sourcesContent":["import type { Plugin } from \"vite\";\nimport { promises as fsPromises } from \"fs\";\nimport { resolve } from \"path\";\n\nexport interface SitemapOptions {\n hostname: string;\n routeTreePath?: string;\n routes?: {\n [key: string]: {\n changefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n priority?: number;\n lastmod?: string;\n };\n };\n defaultChangefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n defaultPriority?: number;\n}\n\nconst extractRoutesFromManifest = (content: string): string[] => {\n const manifestMatch = content.match(\n /ROUTE_MANIFEST_START([\\s\\S]*?)ROUTE_MANIFEST_END/\n );\n if (!manifestMatch) return [];\n\n try {\n const manifest = JSON.parse(manifestMatch[1]);\n return Object.keys(manifest.routes)\n .filter((route) => route !== \"__root__\")\n .map((route) => (route === \"/\" ? route : route.replace(/\\/$/, \"\")));\n } catch (e) {\n console.error(\"Error parsing route manifest:\", e);\n return [];\n }\n};\n\nexport const sitemapPlugin = (options: SitemapOptions): Plugin => {\n const {\n hostname,\n routeTreePath = \"app/routeTree.gen.ts\",\n routes = {},\n defaultChangefreq = \"weekly\",\n defaultPriority = 0.5,\n } = options;\n\n return {\n name: \"vite-plugin-sitemap\",\n apply: \"build\",\n closeBundle: async () => {\n try {\n const possiblePaths = [\n routeTreePath,\n `src/${routeTreePath}`,\n `${process.cwd()}/${routeTreePath}`,\n `${process.cwd()}/src/${routeTreePath}`,\n ];\n\n let routeTreeContent: string | null = null;\n let foundPath: string | null = null;\n\n // Attempt to read the route tree file from the possible paths\n for (const testPath of possiblePaths) {\n try {\n routeTreeContent = await fsPromises.readFile(testPath, \"utf-8\");\n foundPath = testPath;\n break;\n } catch {\n // Try the next path if this one fails\n }\n }\n\n if (!routeTreeContent || !foundPath) {\n throw new Error(\n `Could not find route tree file. Tried the following paths:\\n${possiblePaths.join(\n \"\\n\"\n )}`\n );\n }\n\n console.log(`Found route tree at: ${foundPath}`);\n\n const allRoutes = extractRoutesFromManifest(routeTreeContent);\n const today = new Date().toISOString().split(\"T\")[0];\n\n const sitemapContent = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n${allRoutes\n .map((route) => {\n const routeConfig = routes[route] || {};\n return ` <url>\n <loc>${hostname}${route}</loc>\n <lastmod>${routeConfig.lastmod || today}</lastmod>\n <changefreq>${routeConfig.changefreq || defaultChangefreq}</changefreq>\n <priority>${routeConfig.priority || defaultPriority}</priority>\n </url>`;\n })\n .join(\"\\n\")}\n</urlset>`;\n\n const publicDir = resolve(process.cwd(), \"public\");\n\n // Ensure the public directory exists\n try {\n await fsPromises.access(publicDir);\n } catch {\n await fsPromises.mkdir(publicDir, { recursive: true });\n }\n\n // Write the sitemap.xml file to the public directory\n await fsPromises.writeFile(\n resolve(publicDir, \"sitemap.xml\"),\n sitemapContent\n );\n\n console.log(\"✓ Sitemap generated successfully\");\n } catch (error) {\n console.error(\"Error generating sitemap:\", error);\n }\n },\n };\n};\n"],"names":["extractRoutesFromManifest","content","manifestMatch","manifest","route","sitemapPlugin","options","hostname","routeTreePath","routes","defaultChangefreq","defaultPriority","possiblePaths","routeTreeContent","foundPath","testPath","fsPromises","allRoutes","today","sitemapContent","routeConfig","publicDir","resolve","error"],"mappings":"wHAgCMA,EAA6BC,GAA8B,CAC/D,MAAMC,EAAgBD,EAAQ,MAC5B,kDACF,EACI,GAAA,CAACC,EAAe,MAAO,CAAC,EAExB,GAAA,CACF,MAAMC,EAAW,KAAK,MAAMD,EAAc,CAAC,CAAC,EACrC,OAAA,OAAO,KAAKC,EAAS,MAAM,EAC/B,OAAQC,GAAUA,IAAU,UAAU,EACtC,IAAKA,GAAWA,IAAU,IAAMA,EAAQA,EAAM,QAAQ,MAAO,EAAE,CAAE,QAC7D,EAAG,CACF,eAAA,MAAM,gCAAiC,CAAC,EACzC,CAAC,CAAA,CAEZ,EAEaC,EAAiBC,GAAoC,CAC1D,KAAA,CACJ,SAAAC,EACA,cAAAC,EAAgB,uBAChB,OAAAC,EAAS,CAAC,EACV,kBAAAC,EAAoB,SACpB,gBAAAC,EAAkB,EAAA,EAChBL,EAEG,MAAA,CACL,KAAM,sBACN,MAAO,QACP,YAAa,SAAY,CACnB,GAAA,CACF,MAAMM,EAAgB,CACpBJ,EACA,OAAOA,CAAa,GACpB,GAAG,QAAQ,IAAK,CAAA,IAAIA,CAAa,GACjC,GAAG,QAAQ,KAAK,QAAQA,CAAa,EACvC,EAEA,IAAIK,EAAkC,KAClCC,EAA2B,KAG/B,UAAWC,KAAYH,EACjB,GAAA,CACFC,EAAmB,MAAMG,EAAA,SAAW,SAASD,EAAU,OAAO,EAClDD,EAAAC,EACZ,KAAA,MACM,CAAA,CAKN,GAAA,CAACF,GAAoB,CAACC,EACxB,MAAM,IAAI,MACR;AAAA,EAA+DF,EAAc,KAC3E;AAAA,CAAA,CACD,EACH,EAGM,QAAA,IAAI,wBAAwBE,CAAS,EAAE,EAEzC,MAAAG,EAAYjB,EAA0Ba,CAAgB,EACtDK,MAAY,KAAK,EAAE,cAAc,MAAM,GAAG,EAAE,CAAC,EAE7CC,EAAiB;AAAA;AAAA,EAE7BF,EACC,IAAKb,GAAU,CACd,MAAMgB,EAAcX,EAAOL,CAAK,GAAK,CAAC,EAC/B,MAAA;AAAA,WACAG,CAAQ,GAAGH,CAAK;AAAA,eACZgB,EAAY,SAAWF,CAAK;AAAA,kBACzBE,EAAY,YAAcV,CAAiB;AAAA,gBAC7CU,EAAY,UAAYT,CAAe;AAAA,SAAA,CAEpD,EACA,KAAK;AAAA,CAAI,CAAC;AAAA,WAGCU,EAAYC,EAAA,QAAQ,QAAQ,IAAA,EAAO,QAAQ,EAG7C,GAAA,CACI,MAAAN,EAAA,SAAW,OAAOK,CAAS,CAAA,MAC3B,CACN,MAAML,EAAAA,SAAW,MAAMK,EAAW,CAAE,UAAW,GAAM,CAAA,CAIvD,MAAML,EAAW,SAAA,UACfM,EAAA,QAAQD,EAAW,aAAa,EAChCF,CACF,EAEA,QAAQ,IAAI,kCAAkC,QACvCI,EAAO,CACN,QAAA,MAAM,4BAA6BA,CAAK,CAAA,CAClD,CAEJ,CACF"}
package/dist/index.es.js CHANGED
@@ -1,80 +1,80 @@
1
- const y = (n) => {
2
- const s = n.match(
1
+ import { promises as n } from "fs";
2
+ import { resolve as p } from "path";
3
+ const w = (a) => {
4
+ const o = a.match(
3
5
  /ROUTE_MANIFEST_START([\s\S]*?)ROUTE_MANIFEST_END/
4
6
  );
5
- if (!s) return [];
7
+ if (!o) return [];
6
8
  try {
7
- const e = JSON.parse(s[1]);
9
+ const e = JSON.parse(o[1]);
8
10
  return Object.keys(e.routes).filter((t) => t !== "__root__").map((t) => t === "/" ? t : t.replace(/\/$/, ""));
9
11
  } catch (e) {
10
12
  return console.error("Error parsing route manifest:", e), [];
11
13
  }
12
- }, _ = (n) => {
14
+ }, T = (a) => {
13
15
  const {
14
- hostname: s,
16
+ hostname: o,
15
17
  routeTreePath: e = "app/routeTree.gen.ts",
16
18
  routes: t = {},
17
- defaultChangefreq: f = "weekly",
18
- defaultPriority: d = 0.5
19
- } = n;
19
+ defaultChangefreq: m = "weekly",
20
+ defaultPriority: f = 0.5
21
+ } = a;
20
22
  return {
21
23
  name: "vite-plugin-sitemap",
22
24
  apply: "build",
23
25
  closeBundle: async () => {
24
26
  try {
25
- const { promises: r } = await Promise.resolve().then(() => m), { resolve: u } = await Promise.resolve().then(() => m), p = [
27
+ const s = [
26
28
  e,
27
29
  `src/${e}`,
28
30
  `${process.cwd()}/${e}`,
29
31
  `${process.cwd()}/src/${e}`
30
32
  ];
31
- let a = null, i = null;
32
- for (const o of p)
33
+ let i = null, c = null;
34
+ for (const r of s)
33
35
  try {
34
- a = await r.readFile(o, "utf-8"), i = o;
36
+ i = await n.readFile(r, "utf-8"), c = r;
35
37
  break;
36
38
  } catch {
37
39
  }
38
- if (!a || !i)
40
+ if (!i || !c)
39
41
  throw new Error(
40
42
  `Could not find route tree file. Tried the following paths:
41
- ${p.join(
43
+ ${s.join(
42
44
  `
43
45
  `
44
46
  )}`
45
47
  );
46
- console.log(`Found route tree at: ${i}`);
47
- const h = y(a), g = (/* @__PURE__ */ new Date()).toISOString().split("T")[0], w = `<?xml version="1.0" encoding="UTF-8"?>
48
+ console.log(`Found route tree at: ${c}`);
49
+ const d = w(i), h = (/* @__PURE__ */ new Date()).toISOString().split("T")[0], g = `<?xml version="1.0" encoding="UTF-8"?>
48
50
  <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
49
- ${h.map((o) => {
50
- const l = t[o] || {};
51
+ ${d.map((r) => {
52
+ const u = t[r] || {};
51
53
  return ` <url>
52
- <loc>${s}${o}</loc>
53
- <lastmod>${l.lastmod || g}</lastmod>
54
- <changefreq>${l.changefreq || f}</changefreq>
55
- <priority>${l.priority || d}</priority>
54
+ <loc>${o}${r}</loc>
55
+ <lastmod>${u.lastmod || h}</lastmod>
56
+ <changefreq>${u.changefreq || m}</changefreq>
57
+ <priority>${u.priority || f}</priority>
56
58
  </url>`;
57
59
  }).join(`
58
60
  `)}
59
- </urlset>`, c = u(process.cwd(), "public");
61
+ </urlset>`, l = p(process.cwd(), "public");
60
62
  try {
61
- await r.access(c);
63
+ await n.access(l);
62
64
  } catch {
63
- await r.mkdir(c, { recursive: !0 });
65
+ await n.mkdir(l, { recursive: !0 });
64
66
  }
65
- await r.writeFile(
66
- u(c, "sitemap.xml"),
67
- w
67
+ await n.writeFile(
68
+ p(l, "sitemap.xml"),
69
+ g
68
70
  ), console.log("✓ Sitemap generated successfully");
69
- } catch (r) {
70
- console.error("Error generating sitemap:", r);
71
+ } catch (s) {
72
+ console.error("Error generating sitemap:", s);
71
73
  }
72
74
  }
73
75
  };
74
- }, m = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
75
- __proto__: null
76
- }, Symbol.toStringTag, { value: "Module" }));
76
+ };
77
77
  export {
78
- _ as sitemapPlugin
78
+ T as sitemapPlugin
79
79
  };
80
80
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/lib/gen-sitemap.ts"],"sourcesContent":["// vite-sitemap-plugin.ts\nimport type { Plugin } from \"vite\";\n\nexport interface SitemapOptions {\n hostname: string;\n routeTreePath?: string;\n routes?: {\n [key: string]: {\n changefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n priority?: number;\n lastmod?: string;\n };\n };\n defaultChangefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n defaultPriority?: number;\n}\n\nconst extractRoutesFromManifest = (content: string): string[] => {\n const manifestMatch = content.match(\n /ROUTE_MANIFEST_START([\\s\\S]*?)ROUTE_MANIFEST_END/\n );\n if (!manifestMatch) return [];\n\n try {\n const manifest = JSON.parse(manifestMatch[1]);\n return Object.keys(manifest.routes)\n .filter((route) => route !== \"__root__\")\n .map((route) => (route === \"/\" ? route : route.replace(/\\/$/, \"\")));\n } catch (e) {\n console.error(\"Error parsing route manifest:\", e);\n return [];\n }\n};\n\nexport const sitemapPlugin = (options: SitemapOptions): Plugin => {\n const {\n hostname,\n routeTreePath = \"app/routeTree.gen.ts\",\n routes = {},\n defaultChangefreq = \"weekly\",\n defaultPriority = 0.5,\n } = options;\n\n return {\n name: \"vite-plugin-sitemap\",\n apply: \"build\",\n closeBundle: async () => {\n try {\n // Dynamically import Node built-in modules to avoid bundling issues\n const { promises: fsPromises } = await import(\"fs\");\n const { resolve } = await import(\"path\");\n\n const possiblePaths = [\n routeTreePath,\n `src/${routeTreePath}`,\n `${process.cwd()}/${routeTreePath}`,\n `${process.cwd()}/src/${routeTreePath}`,\n ];\n\n let routeTreeContent: string | null = null;\n let foundPath: string | null = null;\n\n // Attempt to read the route tree file from the possible paths\n for (const testPath of possiblePaths) {\n try {\n routeTreeContent = await fsPromises.readFile(testPath, \"utf-8\");\n foundPath = testPath;\n break;\n } catch {\n // Try the next path if this one fails\n }\n }\n\n if (!routeTreeContent || !foundPath) {\n throw new Error(\n `Could not find route tree file. Tried the following paths:\\n${possiblePaths.join(\n \"\\n\"\n )}`\n );\n }\n\n console.log(`Found route tree at: ${foundPath}`);\n\n const allRoutes = extractRoutesFromManifest(routeTreeContent);\n const today = new Date().toISOString().split(\"T\")[0];\n\n const sitemapContent = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n${allRoutes\n .map((route) => {\n const routeConfig = routes[route] || {};\n return ` <url>\n <loc>${hostname}${route}</loc>\n <lastmod>${routeConfig.lastmod || today}</lastmod>\n <changefreq>${routeConfig.changefreq || defaultChangefreq}</changefreq>\n <priority>${routeConfig.priority || defaultPriority}</priority>\n </url>`;\n })\n .join(\"\\n\")}\n</urlset>`;\n\n const publicDir = resolve(process.cwd(), \"public\");\n\n // Ensure the public directory exists\n try {\n await fsPromises.access(publicDir);\n } catch {\n await fsPromises.mkdir(publicDir, { recursive: true });\n }\n\n // Write the sitemap.xml file to the public directory\n await fsPromises.writeFile(\n resolve(publicDir, \"sitemap.xml\"),\n sitemapContent\n );\n\n console.log(\"✓ Sitemap generated successfully\");\n } catch (error) {\n console.error(\"Error generating sitemap:\", error);\n }\n },\n };\n};\n\nexport default sitemapPlugin;\n"],"names":["extractRoutesFromManifest","content","manifestMatch","manifest","route","sitemapPlugin","options","hostname","routeTreePath","routes","defaultChangefreq","defaultPriority","fsPromises","__viteBrowserExternal","resolve","possiblePaths","routeTreeContent","foundPath","testPath","allRoutes","today","sitemapContent","routeConfig","publicDir","error"],"mappings":"AA+BA,MAAMA,IAA4B,CAACC,MAA8B;AAC/D,QAAMC,IAAgBD,EAAQ;AAAA,IAC5B;AAAA,EACF;AACI,MAAA,CAACC,EAAe,QAAO,CAAC;AAExB,MAAA;AACF,UAAMC,IAAW,KAAK,MAAMD,EAAc,CAAC,CAAC;AACrC,WAAA,OAAO,KAAKC,EAAS,MAAM,EAC/B,OAAO,CAACC,MAAUA,MAAU,UAAU,EACtC,IAAI,CAACA,MAAWA,MAAU,MAAMA,IAAQA,EAAM,QAAQ,OAAO,EAAE,CAAE;AAAA,WAC7D,GAAG;AACF,mBAAA,MAAM,iCAAiC,CAAC,GACzC,CAAC;AAAA,EAAA;AAEZ,GAEaC,IAAgB,CAACC,MAAoC;AAC1D,QAAA;AAAA,IACJ,UAAAC;AAAA,IACA,eAAAC,IAAgB;AAAA,IAChB,QAAAC,IAAS,CAAC;AAAA,IACV,mBAAAC,IAAoB;AAAA,IACpB,iBAAAC,IAAkB;AAAA,EAAA,IAChBL;AAEG,SAAA;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa,YAAY;AACnB,UAAA;AAEF,cAAM,EAAE,UAAUM,EAAe,IAAA,MAAM,QAAW,QAAA,EAAA,KAAA,MAAAC,CAAA,GAC5C,EAAE,SAAAC,EAAY,IAAA,MAAM,QAAa,QAAA,EAAA,KAAA,MAAAD,CAAA,GAEjCE,IAAgB;AAAA,UACpBP;AAAA,UACA,OAAOA,CAAa;AAAA,UACpB,GAAG,QAAQ,IAAK,CAAA,IAAIA,CAAa;AAAA,UACjC,GAAG,QAAQ,KAAK,QAAQA,CAAa;AAAA,QACvC;AAEA,YAAIQ,IAAkC,MAClCC,IAA2B;AAG/B,mBAAWC,KAAYH;AACjB,cAAA;AACF,YAAAC,IAAmB,MAAMJ,EAAW,SAASM,GAAU,OAAO,GAClDD,IAAAC;AACZ;AAAA,UAAA,QACM;AAAA,UAAA;AAKN,YAAA,CAACF,KAAoB,CAACC;AACxB,gBAAM,IAAI;AAAA,YACR;AAAA,EAA+DF,EAAc;AAAA,cAC3E;AAAA;AAAA,YAAA,CACD;AAAA,UACH;AAGM,gBAAA,IAAI,wBAAwBE,CAAS,EAAE;AAEzC,cAAAE,IAAYnB,EAA0BgB,CAAgB,GACtDI,yBAAY,KAAK,GAAE,cAAc,MAAM,GAAG,EAAE,CAAC,GAE7CC,IAAiB;AAAA;AAAA,EAE7BF,EACC,IAAI,CAACf,MAAU;AACd,gBAAMkB,IAAcb,EAAOL,CAAK,KAAK,CAAC;AAC/B,iBAAA;AAAA,WACAG,CAAQ,GAAGH,CAAK;AAAA,eACZkB,EAAY,WAAWF,CAAK;AAAA,kBACzBE,EAAY,cAAcZ,CAAiB;AAAA,gBAC7CY,EAAY,YAAYX,CAAe;AAAA;AAAA,QAAA,CAEpD,EACA,KAAK;AAAA,CAAI,CAAC;AAAA,YAGCY,IAAYT,EAAQ,QAAQ,IAAA,GAAO,QAAQ;AAG7C,YAAA;AACI,gBAAAF,EAAW,OAAOW,CAAS;AAAA,QAAA,QAC3B;AACN,gBAAMX,EAAW,MAAMW,GAAW,EAAE,WAAW,IAAM;AAAA,QAAA;AAIvD,cAAMX,EAAW;AAAA,UACfE,EAAQS,GAAW,aAAa;AAAA,UAChCF;AAAA,QACF,GAEA,QAAQ,IAAI,kCAAkC;AAAA,eACvCG,GAAO;AACN,gBAAA,MAAM,6BAA6BA,CAAK;AAAA,MAAA;AAAA,IAClD;AAAA,EAEJ;AACF;;;"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/lib/gen-sitemap.ts"],"sourcesContent":["import type { Plugin } from \"vite\";\nimport { promises as fsPromises } from \"fs\";\nimport { resolve } from \"path\";\n\nexport interface SitemapOptions {\n hostname: string;\n routeTreePath?: string;\n routes?: {\n [key: string]: {\n changefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n priority?: number;\n lastmod?: string;\n };\n };\n defaultChangefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n defaultPriority?: number;\n}\n\nconst extractRoutesFromManifest = (content: string): string[] => {\n const manifestMatch = content.match(\n /ROUTE_MANIFEST_START([\\s\\S]*?)ROUTE_MANIFEST_END/\n );\n if (!manifestMatch) return [];\n\n try {\n const manifest = JSON.parse(manifestMatch[1]);\n return Object.keys(manifest.routes)\n .filter((route) => route !== \"__root__\")\n .map((route) => (route === \"/\" ? route : route.replace(/\\/$/, \"\")));\n } catch (e) {\n console.error(\"Error parsing route manifest:\", e);\n return [];\n }\n};\n\nexport const sitemapPlugin = (options: SitemapOptions): Plugin => {\n const {\n hostname,\n routeTreePath = \"app/routeTree.gen.ts\",\n routes = {},\n defaultChangefreq = \"weekly\",\n defaultPriority = 0.5,\n } = options;\n\n return {\n name: \"vite-plugin-sitemap\",\n apply: \"build\",\n closeBundle: async () => {\n try {\n const possiblePaths = [\n routeTreePath,\n `src/${routeTreePath}`,\n `${process.cwd()}/${routeTreePath}`,\n `${process.cwd()}/src/${routeTreePath}`,\n ];\n\n let routeTreeContent: string | null = null;\n let foundPath: string | null = null;\n\n // Attempt to read the route tree file from the possible paths\n for (const testPath of possiblePaths) {\n try {\n routeTreeContent = await fsPromises.readFile(testPath, \"utf-8\");\n foundPath = testPath;\n break;\n } catch {\n // Try the next path if this one fails\n }\n }\n\n if (!routeTreeContent || !foundPath) {\n throw new Error(\n `Could not find route tree file. Tried the following paths:\\n${possiblePaths.join(\n \"\\n\"\n )}`\n );\n }\n\n console.log(`Found route tree at: ${foundPath}`);\n\n const allRoutes = extractRoutesFromManifest(routeTreeContent);\n const today = new Date().toISOString().split(\"T\")[0];\n\n const sitemapContent = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n${allRoutes\n .map((route) => {\n const routeConfig = routes[route] || {};\n return ` <url>\n <loc>${hostname}${route}</loc>\n <lastmod>${routeConfig.lastmod || today}</lastmod>\n <changefreq>${routeConfig.changefreq || defaultChangefreq}</changefreq>\n <priority>${routeConfig.priority || defaultPriority}</priority>\n </url>`;\n })\n .join(\"\\n\")}\n</urlset>`;\n\n const publicDir = resolve(process.cwd(), \"public\");\n\n // Ensure the public directory exists\n try {\n await fsPromises.access(publicDir);\n } catch {\n await fsPromises.mkdir(publicDir, { recursive: true });\n }\n\n // Write the sitemap.xml file to the public directory\n await fsPromises.writeFile(\n resolve(publicDir, \"sitemap.xml\"),\n sitemapContent\n );\n\n console.log(\"✓ Sitemap generated successfully\");\n } catch (error) {\n console.error(\"Error generating sitemap:\", error);\n }\n },\n };\n};\n"],"names":["extractRoutesFromManifest","content","manifestMatch","manifest","route","sitemapPlugin","options","hostname","routeTreePath","routes","defaultChangefreq","defaultPriority","possiblePaths","routeTreeContent","foundPath","testPath","fsPromises","allRoutes","today","sitemapContent","routeConfig","publicDir","resolve","error"],"mappings":";;AAgCA,MAAMA,IAA4B,CAACC,MAA8B;AAC/D,QAAMC,IAAgBD,EAAQ;AAAA,IAC5B;AAAA,EACF;AACI,MAAA,CAACC,EAAe,QAAO,CAAC;AAExB,MAAA;AACF,UAAMC,IAAW,KAAK,MAAMD,EAAc,CAAC,CAAC;AACrC,WAAA,OAAO,KAAKC,EAAS,MAAM,EAC/B,OAAO,CAACC,MAAUA,MAAU,UAAU,EACtC,IAAI,CAACA,MAAWA,MAAU,MAAMA,IAAQA,EAAM,QAAQ,OAAO,EAAE,CAAE;AAAA,WAC7D,GAAG;AACF,mBAAA,MAAM,iCAAiC,CAAC,GACzC,CAAC;AAAA,EAAA;AAEZ,GAEaC,IAAgB,CAACC,MAAoC;AAC1D,QAAA;AAAA,IACJ,UAAAC;AAAA,IACA,eAAAC,IAAgB;AAAA,IAChB,QAAAC,IAAS,CAAC;AAAA,IACV,mBAAAC,IAAoB;AAAA,IACpB,iBAAAC,IAAkB;AAAA,EAAA,IAChBL;AAEG,SAAA;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa,YAAY;AACnB,UAAA;AACF,cAAMM,IAAgB;AAAA,UACpBJ;AAAA,UACA,OAAOA,CAAa;AAAA,UACpB,GAAG,QAAQ,IAAK,CAAA,IAAIA,CAAa;AAAA,UACjC,GAAG,QAAQ,KAAK,QAAQA,CAAa;AAAA,QACvC;AAEA,YAAIK,IAAkC,MAClCC,IAA2B;AAG/B,mBAAWC,KAAYH;AACjB,cAAA;AACF,YAAAC,IAAmB,MAAMG,EAAW,SAASD,GAAU,OAAO,GAClDD,IAAAC;AACZ;AAAA,UAAA,QACM;AAAA,UAAA;AAKN,YAAA,CAACF,KAAoB,CAACC;AACxB,gBAAM,IAAI;AAAA,YACR;AAAA,EAA+DF,EAAc;AAAA,cAC3E;AAAA;AAAA,YAAA,CACD;AAAA,UACH;AAGM,gBAAA,IAAI,wBAAwBE,CAAS,EAAE;AAEzC,cAAAG,IAAYjB,EAA0Ba,CAAgB,GACtDK,yBAAY,KAAK,GAAE,cAAc,MAAM,GAAG,EAAE,CAAC,GAE7CC,IAAiB;AAAA;AAAA,EAE7BF,EACC,IAAI,CAACb,MAAU;AACd,gBAAMgB,IAAcX,EAAOL,CAAK,KAAK,CAAC;AAC/B,iBAAA;AAAA,WACAG,CAAQ,GAAGH,CAAK;AAAA,eACZgB,EAAY,WAAWF,CAAK;AAAA,kBACzBE,EAAY,cAAcV,CAAiB;AAAA,gBAC7CU,EAAY,YAAYT,CAAe;AAAA;AAAA,QAAA,CAEpD,EACA,KAAK;AAAA,CAAI,CAAC;AAAA,YAGCU,IAAYC,EAAQ,QAAQ,IAAA,GAAO,QAAQ;AAG7C,YAAA;AACI,gBAAAN,EAAW,OAAOK,CAAS;AAAA,QAAA,QAC3B;AACN,gBAAML,EAAW,MAAMK,GAAW,EAAE,WAAW,IAAM;AAAA,QAAA;AAIvD,cAAML,EAAW;AAAA,UACfM,EAAQD,GAAW,aAAa;AAAA,UAChCF;AAAA,QACF,GAEA,QAAQ,IAAI,kCAAkC;AAAA,eACvCI,GAAO;AACN,gBAAA,MAAM,6BAA6BA,CAAK;AAAA,MAAA;AAAA,IAClD;AAAA,EAEJ;AACF;"}
package/dist/index.umd.js CHANGED
@@ -1,13 +1,13 @@
1
- (function(r,s){typeof exports=="object"&&typeof module<"u"?s(exports):typeof define=="function"&&define.amd?define(["exports"],s):(r=typeof globalThis<"u"?globalThis:r||self,s(r["tanstack-start-sitemap"]={}))})(this,function(r){"use strict";const s=a=>{const i=a.match(/ROUTE_MANIFEST_START([\s\S]*?)ROUTE_MANIFEST_END/);if(!i)return[];try{const e=JSON.parse(i[1]);return Object.keys(e.routes).filter(t=>t!=="__root__").map(t=>t==="/"?t:t.replace(/\/$/,""))}catch(e){return console.error("Error parsing route manifest:",e),[]}},h=a=>{const{hostname:i,routeTreePath:e="app/routeTree.gen.ts",routes:t={},defaultChangefreq:g="weekly",defaultPriority:y=.5}=a;return{name:"vite-plugin-sitemap",apply:"build",closeBundle:async()=>{try{const{promises:o}=await Promise.resolve().then(()=>f),{resolve:m}=await Promise.resolve().then(()=>f),d=[e,`src/${e}`,`${process.cwd()}/${e}`,`${process.cwd()}/src/${e}`];let l=null,c=null;for(const n of d)try{l=await o.readFile(n,"utf-8"),c=n;break}catch{}if(!l||!c)throw new Error(`Could not find route tree file. Tried the following paths:
2
- ${d.join(`
3
- `)}`);console.log(`Found route tree at: ${c}`);const w=s(l),T=new Date().toISOString().split("T")[0],_=`<?xml version="1.0" encoding="UTF-8"?>
1
+ (function(e,t){typeof exports=="object"&&typeof module<"u"?t(exports,require("fs"),require("path")):typeof define=="function"&&define.amd?define(["exports","fs","path"],t):(e=typeof globalThis<"u"?globalThis:e||self,t(e["tanstack-start-sitemap"]={},e.fs,e.path))})(this,function(e,t,f){"use strict";const m=a=>{const n=a.match(/ROUTE_MANIFEST_START([\s\S]*?)ROUTE_MANIFEST_END/);if(!n)return[];try{const r=JSON.parse(n[1]);return Object.keys(r.routes).filter(s=>s!=="__root__").map(s=>s==="/"?s:s.replace(/\/$/,""))}catch(r){return console.error("Error parsing route manifest:",r),[]}},d=a=>{const{hostname:n,routeTreePath:r="app/routeTree.gen.ts",routes:s={},defaultChangefreq:h="weekly",defaultPriority:g=.5}=a;return{name:"vite-plugin-sitemap",apply:"build",closeBundle:async()=>{try{const i=[r,`src/${r}`,`${process.cwd()}/${r}`,`${process.cwd()}/src/${r}`];let c=null,l=null;for(const o of i)try{c=await t.promises.readFile(o,"utf-8"),l=o;break}catch{}if(!c||!l)throw new Error(`Could not find route tree file. Tried the following paths:
2
+ ${i.join(`
3
+ `)}`);console.log(`Found route tree at: ${l}`);const y=m(c),w=new Date().toISOString().split("T")[0],T=`<?xml version="1.0" encoding="UTF-8"?>
4
4
  <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
5
- ${w.map(n=>{const p=t[n]||{};return` <url>
6
- <loc>${i}${n}</loc>
7
- <lastmod>${p.lastmod||T}</lastmod>
8
- <changefreq>${p.changefreq||g}</changefreq>
9
- <priority>${p.priority||y}</priority>
5
+ ${y.map(o=>{const p=s[o]||{};return` <url>
6
+ <loc>${n}${o}</loc>
7
+ <lastmod>${p.lastmod||w}</lastmod>
8
+ <changefreq>${p.changefreq||h}</changefreq>
9
+ <priority>${p.priority||g}</priority>
10
10
  </url>`}).join(`
11
11
  `)}
12
- </urlset>`,u=m(process.cwd(),"public");try{await o.access(u)}catch{await o.mkdir(u,{recursive:!0})}await o.writeFile(m(u,"sitemap.xml"),_),console.log("✓ Sitemap generated successfully")}catch(o){console.error("Error generating sitemap:",o)}}}},f=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));r.sitemapPlugin=h,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})});
12
+ </urlset>`,u=f.resolve(process.cwd(),"public");try{await t.promises.access(u)}catch{await t.promises.mkdir(u,{recursive:!0})}await t.promises.writeFile(f.resolve(u,"sitemap.xml"),T),console.log("✓ Sitemap generated successfully")}catch(i){console.error("Error generating sitemap:",i)}}}};e.sitemapPlugin=d,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
13
13
  //# sourceMappingURL=index.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/lib/gen-sitemap.ts"],"sourcesContent":["// vite-sitemap-plugin.ts\nimport type { Plugin } from \"vite\";\n\nexport interface SitemapOptions {\n hostname: string;\n routeTreePath?: string;\n routes?: {\n [key: string]: {\n changefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n priority?: number;\n lastmod?: string;\n };\n };\n defaultChangefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n defaultPriority?: number;\n}\n\nconst extractRoutesFromManifest = (content: string): string[] => {\n const manifestMatch = content.match(\n /ROUTE_MANIFEST_START([\\s\\S]*?)ROUTE_MANIFEST_END/\n );\n if (!manifestMatch) return [];\n\n try {\n const manifest = JSON.parse(manifestMatch[1]);\n return Object.keys(manifest.routes)\n .filter((route) => route !== \"__root__\")\n .map((route) => (route === \"/\" ? route : route.replace(/\\/$/, \"\")));\n } catch (e) {\n console.error(\"Error parsing route manifest:\", e);\n return [];\n }\n};\n\nexport const sitemapPlugin = (options: SitemapOptions): Plugin => {\n const {\n hostname,\n routeTreePath = \"app/routeTree.gen.ts\",\n routes = {},\n defaultChangefreq = \"weekly\",\n defaultPriority = 0.5,\n } = options;\n\n return {\n name: \"vite-plugin-sitemap\",\n apply: \"build\",\n closeBundle: async () => {\n try {\n // Dynamically import Node built-in modules to avoid bundling issues\n const { promises: fsPromises } = await import(\"fs\");\n const { resolve } = await import(\"path\");\n\n const possiblePaths = [\n routeTreePath,\n `src/${routeTreePath}`,\n `${process.cwd()}/${routeTreePath}`,\n `${process.cwd()}/src/${routeTreePath}`,\n ];\n\n let routeTreeContent: string | null = null;\n let foundPath: string | null = null;\n\n // Attempt to read the route tree file from the possible paths\n for (const testPath of possiblePaths) {\n try {\n routeTreeContent = await fsPromises.readFile(testPath, \"utf-8\");\n foundPath = testPath;\n break;\n } catch {\n // Try the next path if this one fails\n }\n }\n\n if (!routeTreeContent || !foundPath) {\n throw new Error(\n `Could not find route tree file. Tried the following paths:\\n${possiblePaths.join(\n \"\\n\"\n )}`\n );\n }\n\n console.log(`Found route tree at: ${foundPath}`);\n\n const allRoutes = extractRoutesFromManifest(routeTreeContent);\n const today = new Date().toISOString().split(\"T\")[0];\n\n const sitemapContent = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n${allRoutes\n .map((route) => {\n const routeConfig = routes[route] || {};\n return ` <url>\n <loc>${hostname}${route}</loc>\n <lastmod>${routeConfig.lastmod || today}</lastmod>\n <changefreq>${routeConfig.changefreq || defaultChangefreq}</changefreq>\n <priority>${routeConfig.priority || defaultPriority}</priority>\n </url>`;\n })\n .join(\"\\n\")}\n</urlset>`;\n\n const publicDir = resolve(process.cwd(), \"public\");\n\n // Ensure the public directory exists\n try {\n await fsPromises.access(publicDir);\n } catch {\n await fsPromises.mkdir(publicDir, { recursive: true });\n }\n\n // Write the sitemap.xml file to the public directory\n await fsPromises.writeFile(\n resolve(publicDir, \"sitemap.xml\"),\n sitemapContent\n );\n\n console.log(\"✓ Sitemap generated successfully\");\n } catch (error) {\n console.error(\"Error generating sitemap:\", error);\n }\n },\n };\n};\n\nexport default sitemapPlugin;\n"],"names":["extractRoutesFromManifest","content","manifestMatch","manifest","route","sitemapPlugin","options","hostname","routeTreePath","routes","defaultChangefreq","defaultPriority","fsPromises","__viteBrowserExternal","resolve","possiblePaths","routeTreeContent","foundPath","testPath","allRoutes","today","sitemapContent","routeConfig","publicDir","error"],"mappings":"iPA+BA,MAAMA,EAA6BC,GAA8B,CAC/D,MAAMC,EAAgBD,EAAQ,MAC5B,kDACF,EACI,GAAA,CAACC,EAAe,MAAO,CAAC,EAExB,GAAA,CACF,MAAMC,EAAW,KAAK,MAAMD,EAAc,CAAC,CAAC,EACrC,OAAA,OAAO,KAAKC,EAAS,MAAM,EAC/B,OAAQC,GAAUA,IAAU,UAAU,EACtC,IAAKA,GAAWA,IAAU,IAAMA,EAAQA,EAAM,QAAQ,MAAO,EAAE,CAAE,QAC7D,EAAG,CACF,eAAA,MAAM,gCAAiC,CAAC,EACzC,CAAC,CAAA,CAEZ,EAEaC,EAAiBC,GAAoC,CAC1D,KAAA,CACJ,SAAAC,EACA,cAAAC,EAAgB,uBAChB,OAAAC,EAAS,CAAC,EACV,kBAAAC,EAAoB,SACpB,gBAAAC,EAAkB,EAAA,EAChBL,EAEG,MAAA,CACL,KAAM,sBACN,MAAO,QACP,YAAa,SAAY,CACnB,GAAA,CAEF,KAAM,CAAE,SAAUM,CAAe,EAAA,MAAM,QAAW,QAAA,EAAA,KAAA,IAAAC,CAAA,EAC5C,CAAE,QAAAC,CAAY,EAAA,MAAM,QAAa,QAAA,EAAA,KAAA,IAAAD,CAAA,EAEjCE,EAAgB,CACpBP,EACA,OAAOA,CAAa,GACpB,GAAG,QAAQ,IAAK,CAAA,IAAIA,CAAa,GACjC,GAAG,QAAQ,KAAK,QAAQA,CAAa,EACvC,EAEA,IAAIQ,EAAkC,KAClCC,EAA2B,KAG/B,UAAWC,KAAYH,EACjB,GAAA,CACFC,EAAmB,MAAMJ,EAAW,SAASM,EAAU,OAAO,EAClDD,EAAAC,EACZ,KAAA,MACM,CAAA,CAKN,GAAA,CAACF,GAAoB,CAACC,EACxB,MAAM,IAAI,MACR;AAAA,EAA+DF,EAAc,KAC3E;AAAA,CAAA,CACD,EACH,EAGM,QAAA,IAAI,wBAAwBE,CAAS,EAAE,EAEzC,MAAAE,EAAYnB,EAA0BgB,CAAgB,EACtDI,MAAY,KAAK,EAAE,cAAc,MAAM,GAAG,EAAE,CAAC,EAE7CC,EAAiB;AAAA;AAAA,EAE7BF,EACC,IAAKf,GAAU,CACd,MAAMkB,EAAcb,EAAOL,CAAK,GAAK,CAAC,EAC/B,MAAA;AAAA,WACAG,CAAQ,GAAGH,CAAK;AAAA,eACZkB,EAAY,SAAWF,CAAK;AAAA,kBACzBE,EAAY,YAAcZ,CAAiB;AAAA,gBAC7CY,EAAY,UAAYX,CAAe;AAAA,SAAA,CAEpD,EACA,KAAK;AAAA,CAAI,CAAC;AAAA,WAGCY,EAAYT,EAAQ,QAAQ,IAAA,EAAO,QAAQ,EAG7C,GAAA,CACI,MAAAF,EAAW,OAAOW,CAAS,CAAA,MAC3B,CACN,MAAMX,EAAW,MAAMW,EAAW,CAAE,UAAW,GAAM,CAAA,CAIvD,MAAMX,EAAW,UACfE,EAAQS,EAAW,aAAa,EAChCF,CACF,EAEA,QAAQ,IAAI,kCAAkC,QACvCG,EAAO,CACN,QAAA,MAAM,4BAA6BA,CAAK,CAAA,CAClD,CAEJ,CACF"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/lib/gen-sitemap.ts"],"sourcesContent":["import type { Plugin } from \"vite\";\nimport { promises as fsPromises } from \"fs\";\nimport { resolve } from \"path\";\n\nexport interface SitemapOptions {\n hostname: string;\n routeTreePath?: string;\n routes?: {\n [key: string]: {\n changefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n priority?: number;\n lastmod?: string;\n };\n };\n defaultChangefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n defaultPriority?: number;\n}\n\nconst extractRoutesFromManifest = (content: string): string[] => {\n const manifestMatch = content.match(\n /ROUTE_MANIFEST_START([\\s\\S]*?)ROUTE_MANIFEST_END/\n );\n if (!manifestMatch) return [];\n\n try {\n const manifest = JSON.parse(manifestMatch[1]);\n return Object.keys(manifest.routes)\n .filter((route) => route !== \"__root__\")\n .map((route) => (route === \"/\" ? route : route.replace(/\\/$/, \"\")));\n } catch (e) {\n console.error(\"Error parsing route manifest:\", e);\n return [];\n }\n};\n\nexport const sitemapPlugin = (options: SitemapOptions): Plugin => {\n const {\n hostname,\n routeTreePath = \"app/routeTree.gen.ts\",\n routes = {},\n defaultChangefreq = \"weekly\",\n defaultPriority = 0.5,\n } = options;\n\n return {\n name: \"vite-plugin-sitemap\",\n apply: \"build\",\n closeBundle: async () => {\n try {\n const possiblePaths = [\n routeTreePath,\n `src/${routeTreePath}`,\n `${process.cwd()}/${routeTreePath}`,\n `${process.cwd()}/src/${routeTreePath}`,\n ];\n\n let routeTreeContent: string | null = null;\n let foundPath: string | null = null;\n\n // Attempt to read the route tree file from the possible paths\n for (const testPath of possiblePaths) {\n try {\n routeTreeContent = await fsPromises.readFile(testPath, \"utf-8\");\n foundPath = testPath;\n break;\n } catch {\n // Try the next path if this one fails\n }\n }\n\n if (!routeTreeContent || !foundPath) {\n throw new Error(\n `Could not find route tree file. Tried the following paths:\\n${possiblePaths.join(\n \"\\n\"\n )}`\n );\n }\n\n console.log(`Found route tree at: ${foundPath}`);\n\n const allRoutes = extractRoutesFromManifest(routeTreeContent);\n const today = new Date().toISOString().split(\"T\")[0];\n\n const sitemapContent = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n${allRoutes\n .map((route) => {\n const routeConfig = routes[route] || {};\n return ` <url>\n <loc>${hostname}${route}</loc>\n <lastmod>${routeConfig.lastmod || today}</lastmod>\n <changefreq>${routeConfig.changefreq || defaultChangefreq}</changefreq>\n <priority>${routeConfig.priority || defaultPriority}</priority>\n </url>`;\n })\n .join(\"\\n\")}\n</urlset>`;\n\n const publicDir = resolve(process.cwd(), \"public\");\n\n // Ensure the public directory exists\n try {\n await fsPromises.access(publicDir);\n } catch {\n await fsPromises.mkdir(publicDir, { recursive: true });\n }\n\n // Write the sitemap.xml file to the public directory\n await fsPromises.writeFile(\n resolve(publicDir, \"sitemap.xml\"),\n sitemapContent\n );\n\n console.log(\"✓ Sitemap generated successfully\");\n } catch (error) {\n console.error(\"Error generating sitemap:\", error);\n }\n },\n };\n};\n"],"names":["extractRoutesFromManifest","content","manifestMatch","manifest","route","e","sitemapPlugin","options","hostname","routeTreePath","routes","defaultChangefreq","defaultPriority","possiblePaths","routeTreeContent","foundPath","testPath","fsPromises","allRoutes","today","sitemapContent","routeConfig","publicDir","resolve","error"],"mappings":"2SAgCA,MAAMA,EAA6BC,GAA8B,CAC/D,MAAMC,EAAgBD,EAAQ,MAC5B,kDACF,EACI,GAAA,CAACC,EAAe,MAAO,CAAC,EAExB,GAAA,CACF,MAAMC,EAAW,KAAK,MAAMD,EAAc,CAAC,CAAC,EACrC,OAAA,OAAO,KAAKC,EAAS,MAAM,EAC/B,OAAQC,GAAUA,IAAU,UAAU,EACtC,IAAKA,GAAWA,IAAU,IAAMA,EAAQA,EAAM,QAAQ,MAAO,EAAE,CAAE,QAC7DC,EAAG,CACF,eAAA,MAAM,gCAAiCA,CAAC,EACzC,CAAC,CAAA,CAEZ,EAEaC,EAAiBC,GAAoC,CAC1D,KAAA,CACJ,SAAAC,EACA,cAAAC,EAAgB,uBAChB,OAAAC,EAAS,CAAC,EACV,kBAAAC,EAAoB,SACpB,gBAAAC,EAAkB,EAAA,EAChBL,EAEG,MAAA,CACL,KAAM,sBACN,MAAO,QACP,YAAa,SAAY,CACnB,GAAA,CACF,MAAMM,EAAgB,CACpBJ,EACA,OAAOA,CAAa,GACpB,GAAG,QAAQ,IAAK,CAAA,IAAIA,CAAa,GACjC,GAAG,QAAQ,KAAK,QAAQA,CAAa,EACvC,EAEA,IAAIK,EAAkC,KAClCC,EAA2B,KAG/B,UAAWC,KAAYH,EACjB,GAAA,CACFC,EAAmB,MAAMG,EAAA,SAAW,SAASD,EAAU,OAAO,EAClDD,EAAAC,EACZ,KAAA,MACM,CAAA,CAKN,GAAA,CAACF,GAAoB,CAACC,EACxB,MAAM,IAAI,MACR;AAAA,EAA+DF,EAAc,KAC3E;AAAA,CAAA,CACD,EACH,EAGM,QAAA,IAAI,wBAAwBE,CAAS,EAAE,EAEzC,MAAAG,EAAYlB,EAA0Bc,CAAgB,EACtDK,MAAY,KAAK,EAAE,cAAc,MAAM,GAAG,EAAE,CAAC,EAE7CC,EAAiB;AAAA;AAAA,EAE7BF,EACC,IAAKd,GAAU,CACd,MAAMiB,EAAcX,EAAON,CAAK,GAAK,CAAC,EAC/B,MAAA;AAAA,WACAI,CAAQ,GAAGJ,CAAK;AAAA,eACZiB,EAAY,SAAWF,CAAK;AAAA,kBACzBE,EAAY,YAAcV,CAAiB;AAAA,gBAC7CU,EAAY,UAAYT,CAAe;AAAA,SAAA,CAEpD,EACA,KAAK;AAAA,CAAI,CAAC;AAAA,WAGCU,EAAYC,EAAA,QAAQ,QAAQ,IAAA,EAAO,QAAQ,EAG7C,GAAA,CACI,MAAAN,EAAA,SAAW,OAAOK,CAAS,CAAA,MAC3B,CACN,MAAML,EAAAA,SAAW,MAAMK,EAAW,CAAE,UAAW,GAAM,CAAA,CAIvD,MAAML,EAAW,SAAA,UACfM,EAAA,QAAQD,EAAW,aAAa,EAChCF,CACF,EAEA,QAAQ,IAAI,kCAAkC,QACvCI,EAAO,CACN,QAAA,MAAM,4BAA6BA,CAAK,CAAA,CAClD,CAEJ,CACF"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tanstack-start-sitemap",
3
3
  "private": false,
4
- "version": "0.0.2",
4
+ "version": "0.0.5",
5
5
  "type": "module",
6
6
  "types": "dist/index.d.ts",
7
7
  "license": "MIT",