@cimplify/cli 0.5.2 → 0.5.3

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.
Files changed (80) hide show
  1. package/dist/{add-BEJH4T3P.mjs → add-3DANJHCI.mjs} +1 -1
  2. package/dist/{chunk-MUG454RK.mjs → chunk-2547SIWD.mjs} +1 -1
  3. package/dist/{chunk-DZPR5L6H.mjs → chunk-BB7IBX6X.mjs} +1 -1
  4. package/dist/{chunk-TR65XHUE.mjs → chunk-ZEGSQVM5.mjs} +23 -23
  5. package/dist/dispatcher.mjs +9 -9
  6. package/dist/{doctor-QO2SRNH6.mjs → doctor-TD4RZCCM.mjs} +2 -2
  7. package/dist/{explain-CGWT7HMV.mjs → explain-7OSAQVJ6.mjs} +1 -1
  8. package/dist/{introspect-WDGC7BKQ.mjs → introspect-SKQMAYFJ.mjs} +2 -2
  9. package/dist/{list-NO5SPHSU.mjs → list-XLJOS2DK.mjs} +1 -1
  10. package/dist/{update-EEQ7JJTP.mjs → update-4GX2J3IB.mjs} +1 -1
  11. package/package.json +1 -1
  12. package/templates/manifest.json +2 -2
  13. package/templates/storefront-auto/.env.example +9 -22
  14. package/templates/storefront-auto/app/.well-known/ucp/route.ts +41 -15
  15. package/templates/storefront-auto/app/layout.tsx +31 -26
  16. package/templates/storefront-auto/app/llms.txt/route.ts +3 -5
  17. package/templates/storefront-auto/app/opensearch.xml/route.ts +5 -6
  18. package/templates/storefront-auto/app/products/[slug]/page.tsx +5 -5
  19. package/templates/storefront-auto/app/robots.ts +5 -6
  20. package/templates/storefront-auto/app/sitemap.ts +6 -7
  21. package/templates/storefront-auto/lib/site-url.ts +29 -0
  22. package/templates/storefront-bakery/.env.example +9 -13
  23. package/templates/storefront-bakery/app/.well-known/ucp/route.ts +41 -15
  24. package/templates/storefront-bakery/app/layout.tsx +40 -35
  25. package/templates/storefront-bakery/app/llms.txt/route.ts +3 -5
  26. package/templates/storefront-bakery/app/opensearch.xml/route.ts +5 -6
  27. package/templates/storefront-bakery/app/robots.ts +5 -6
  28. package/templates/storefront-bakery/app/sitemap.ts +6 -7
  29. package/templates/storefront-bakery/lib/site-url.ts +29 -0
  30. package/templates/storefront-fashion/.env.example +9 -22
  31. package/templates/storefront-fashion/app/.well-known/ucp/route.ts +41 -15
  32. package/templates/storefront-fashion/app/layout.tsx +31 -26
  33. package/templates/storefront-fashion/app/llms.txt/route.ts +3 -5
  34. package/templates/storefront-fashion/app/opensearch.xml/route.ts +5 -6
  35. package/templates/storefront-fashion/app/products/[slug]/page.tsx +5 -5
  36. package/templates/storefront-fashion/app/robots.ts +5 -6
  37. package/templates/storefront-fashion/app/sitemap.ts +6 -7
  38. package/templates/storefront-fashion/lib/site-url.ts +29 -0
  39. package/templates/storefront-grocery/.env.example +9 -22
  40. package/templates/storefront-grocery/app/.well-known/ucp/route.ts +41 -15
  41. package/templates/storefront-grocery/app/layout.tsx +31 -26
  42. package/templates/storefront-grocery/app/llms.txt/route.ts +3 -5
  43. package/templates/storefront-grocery/app/opensearch.xml/route.ts +5 -6
  44. package/templates/storefront-grocery/app/robots.ts +5 -6
  45. package/templates/storefront-grocery/app/sitemap.ts +6 -7
  46. package/templates/storefront-grocery/lib/site-url.ts +29 -0
  47. package/templates/storefront-pharmacy/.env.example +9 -22
  48. package/templates/storefront-pharmacy/app/.well-known/ucp/route.ts +41 -15
  49. package/templates/storefront-pharmacy/app/layout.tsx +31 -26
  50. package/templates/storefront-pharmacy/app/llms.txt/route.ts +3 -5
  51. package/templates/storefront-pharmacy/app/opensearch.xml/route.ts +5 -6
  52. package/templates/storefront-pharmacy/app/products/[slug]/page.tsx +5 -5
  53. package/templates/storefront-pharmacy/app/robots.ts +5 -6
  54. package/templates/storefront-pharmacy/app/sitemap.ts +6 -7
  55. package/templates/storefront-pharmacy/lib/site-url.ts +29 -0
  56. package/templates/storefront-restaurant/.env.example +9 -22
  57. package/templates/storefront-restaurant/app/.well-known/ucp/route.ts +41 -15
  58. package/templates/storefront-restaurant/app/layout.tsx +31 -26
  59. package/templates/storefront-restaurant/app/llms.txt/route.ts +3 -5
  60. package/templates/storefront-restaurant/app/opensearch.xml/route.ts +5 -6
  61. package/templates/storefront-restaurant/app/robots.ts +5 -6
  62. package/templates/storefront-restaurant/app/sitemap.ts +6 -7
  63. package/templates/storefront-restaurant/lib/site-url.ts +29 -0
  64. package/templates/storefront-retail/.env.example +9 -22
  65. package/templates/storefront-retail/app/.well-known/ucp/route.ts +41 -15
  66. package/templates/storefront-retail/app/layout.tsx +31 -26
  67. package/templates/storefront-retail/app/llms.txt/route.ts +3 -5
  68. package/templates/storefront-retail/app/opensearch.xml/route.ts +5 -6
  69. package/templates/storefront-retail/app/products/[slug]/page.tsx +5 -5
  70. package/templates/storefront-retail/app/robots.ts +5 -6
  71. package/templates/storefront-retail/app/sitemap.ts +6 -7
  72. package/templates/storefront-retail/lib/site-url.ts +29 -0
  73. package/templates/storefront-services/.env.example +9 -22
  74. package/templates/storefront-services/app/.well-known/ucp/route.ts +41 -15
  75. package/templates/storefront-services/app/layout.tsx +31 -26
  76. package/templates/storefront-services/app/llms.txt/route.ts +3 -5
  77. package/templates/storefront-services/app/opensearch.xml/route.ts +5 -6
  78. package/templates/storefront-services/app/robots.ts +5 -6
  79. package/templates/storefront-services/app/sitemap.ts +6 -7
  80. package/templates/storefront-services/lib/site-url.ts +29 -0
@@ -1,8 +1,6 @@
1
1
  import type { MetadataRoute } from "next";
2
2
  import { getServerClient, type Product } from "@cimplify/sdk/server";
3
-
4
- const SITE_URL =
5
- process.env.NEXT_PUBLIC_SITE_URL?.trim() || "https://example.com";
3
+ import { getSiteUrl } from "@/lib/site-url";
6
4
 
7
5
  const STATIC_ROUTES: { path: string; priority: number; changeFrequency: "daily" | "weekly" | "monthly" }[] = [
8
6
  { path: "/", priority: 1.0, changeFrequency: "daily" },
@@ -15,6 +13,7 @@ const STATIC_ROUTES: { path: string; priority: number; changeFrequency: "daily"
15
13
 
16
14
  export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
17
15
  const now = new Date();
16
+ const siteUrl = await getSiteUrl();
18
17
  const client = getServerClient();
19
18
 
20
19
  const [productsRes, categoriesRes, collectionsRes] = await Promise.all([
@@ -28,7 +27,7 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
28
27
  const collections = collectionsRes.ok ? collectionsRes.value : [];
29
28
 
30
29
  const staticEntries: MetadataRoute.Sitemap = STATIC_ROUTES.map((r) => ({
31
- url: `${SITE_URL}${r.path}`,
30
+ url: `${siteUrl}${r.path}`,
32
31
  lastModified: now,
33
32
  changeFrequency: r.changeFrequency,
34
33
  priority: r.priority,
@@ -38,21 +37,21 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
38
37
  // shop pages). Emit those as deep-linkable URLs so search engines and LLMs
39
38
  // can index each product canonically.
40
39
  const productEntries: MetadataRoute.Sitemap = products.map((p: Product) => ({
41
- url: `${SITE_URL}/shop?product=${encodeURIComponent(p.slug ?? p.id)}`,
40
+ url: `${siteUrl}/shop?product=${encodeURIComponent(p.slug ?? p.id)}`,
42
41
  lastModified: p.updated_at ? new Date(p.updated_at) : now,
43
42
  changeFrequency: "weekly",
44
43
  priority: 0.7,
45
44
  }));
46
45
 
47
46
  const categoryEntries: MetadataRoute.Sitemap = categories.map((c) => ({
48
- url: `${SITE_URL}/categories/${c.slug}`,
47
+ url: `${siteUrl}/categories/${c.slug}`,
49
48
  lastModified: now,
50
49
  changeFrequency: "weekly",
51
50
  priority: 0.6,
52
51
  }));
53
52
 
54
53
  const collectionEntries: MetadataRoute.Sitemap = collections.map((c) => ({
55
- url: `${SITE_URL}/collections/${c.slug}`,
54
+ url: `${siteUrl}/collections/${c.slug}`,
56
55
  lastModified: now,
57
56
  changeFrequency: "weekly",
58
57
  priority: 0.6,
@@ -0,0 +1,29 @@
1
+ import { headers } from "next/headers";
2
+
3
+ /**
4
+ * Canonical absolute URL for this storefront, derived at request time.
5
+ *
6
+ * Resolution order:
7
+ * 1. `NEXT_PUBLIC_SITE_URL` — set when you need a fixed canonical
8
+ * (multiple domains, www-vs-apex preference, etc.).
9
+ * 2. The request `Host` header — works automatically on every deploy,
10
+ * including preview URLs and custom domains.
11
+ * 3. `https://example.com` — only ever returned during prerender of
12
+ * a page that has no live request (rare in App Router).
13
+ */
14
+ export async function getSiteUrl(): Promise<string> {
15
+ const explicit = process.env.NEXT_PUBLIC_SITE_URL?.trim();
16
+ if (explicit) return explicit;
17
+
18
+ try {
19
+ const h = await headers();
20
+ const host = h.get("host");
21
+ if (host) {
22
+ const isLocal = host.startsWith("localhost") || host.startsWith("127.");
23
+ return `${isLocal ? "http" : "https"}://${host}`;
24
+ }
25
+ } catch {
26
+ // `headers()` is unavailable in some build contexts — fall through.
27
+ }
28
+ return "https://example.com";
29
+ }