bsmnt 0.9.0 → 0.10.0

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 (49) hide show
  1. package/dist/application/add-integration/index.d.ts.map +1 -1
  2. package/dist/application/add-integration/index.js +19 -2
  3. package/dist/application/add-integration/index.js.map +1 -1
  4. package/dist/infrastructure/integrations/ensure-studio-headers.d.ts +6 -0
  5. package/dist/infrastructure/integrations/ensure-studio-headers.d.ts.map +1 -0
  6. package/dist/infrastructure/integrations/ensure-studio-headers.js +153 -0
  7. package/dist/infrastructure/integrations/ensure-studio-headers.js.map +1 -0
  8. package/dist/modules/features/cms/sanity/config.d.ts.map +1 -1
  9. package/dist/modules/features/cms/sanity/config.js +2 -1
  10. package/dist/modules/features/cms/sanity/config.js.map +1 -1
  11. package/dist/modules/features/cms/sanity-pagebuilder/config.d.ts.map +1 -1
  12. package/dist/modules/features/cms/sanity-pagebuilder/config.js +2 -1
  13. package/dist/modules/features/cms/sanity-pagebuilder/config.js.map +1 -1
  14. package/package.json +2 -2
  15. package/src/modules/features/cms/sanity/files/app/api/blog/[slug]/route.ts +4 -1
  16. package/src/modules/features/cms/sanity/files/app/sitemap.md/route.ts +2 -1
  17. package/src/modules/features/cms/sanity/files/components/ui/sanity-image/index.tsx +19 -5
  18. package/src/modules/features/cms/sanity/files/lib/integrations/sanity/README.md +31 -0
  19. package/src/modules/features/cms/sanity/files/proxy.ts +9 -0
  20. package/src/modules/features/cms/sanity-pagebuilder/files/app/api/[[...slug]]/route.ts +8 -3
  21. package/src/modules/features/cms/sanity-pagebuilder/files/app/sitemap.md/route.ts +7 -1
  22. package/src/modules/features/cms/sanity-pagebuilder/files/components/ui/sanity-image/index.tsx +15 -5
  23. package/src/modules/features/cms/sanity-pagebuilder/files/lib/integrations/sanity/components/slug-field.tsx +13 -7
  24. package/src/modules/features/cms/sanity-pagebuilder/files/lib/integrations/sanity/components/slug-notices.tsx +135 -0
  25. package/src/modules/features/cms/sanity-pagebuilder/files/lib/integrations/sanity/live/index.tsx +1 -1
  26. package/src/modules/features/cms/sanity-pagebuilder/files/lib/integrations/sanity/markdown-proxy.config.ts +1 -1
  27. package/src/modules/features/cms/sanity-pagebuilder/files/lib/integrations/sanity/schemas/layout/redirect.ts +35 -4
  28. package/src/modules/features/cms/sanity-pagebuilder/files/proxy.ts +9 -0
  29. package/src/templates/next-default/.env.example +2 -0
  30. package/src/templates/next-default/app/robots.ts +2 -3
  31. package/src/templates/next-default/next.config.ts +36 -2
  32. package/src/templates/next-default/package.json +9 -9
  33. package/src/templates/next-experiments/.env.example +2 -0
  34. package/src/templates/next-experiments/app/robots.ts +2 -3
  35. package/src/templates/next-experiments/next.config.ts +36 -2
  36. package/src/templates/next-experiments/package.json +9 -9
  37. package/src/templates/next-pagebuilder/.env.example +2 -0
  38. package/src/templates/next-pagebuilder/README.md +31 -0
  39. package/src/templates/next-pagebuilder/app/(content)/[[...slug]]/page.tsx +24 -9
  40. package/src/templates/next-pagebuilder/app/robots.ts +2 -3
  41. package/src/templates/next-pagebuilder/app/sitemap.xml/route.ts +6 -3
  42. package/src/templates/next-pagebuilder/components/page-builder/components/content-collection/skeleton.tsx +53 -0
  43. package/src/templates/next-pagebuilder/components/page-builder/renderer.tsx +7 -1
  44. package/src/templates/next-pagebuilder/next.config.ts +33 -2
  45. package/src/templates/next-pagebuilder/package.json +4 -4
  46. package/src/templates/next-webgl/.env.example +2 -0
  47. package/src/templates/next-webgl/app/robots.ts +2 -3
  48. package/src/templates/next-webgl/next.config.ts +36 -2
  49. package/src/templates/next-webgl/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/application/add-integration/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAGN,KAAK,aAAa,EAClB,MAAM,6BAA6B,CAAC;AA6BrC,MAAM,WAAW,qBAAqB;IACrC,YAAY,CAAC,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;IAC/C,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AA2DD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACvC,WAAW,EAAE,aAAa,EAC1B,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,OAAO,EACtB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GACnD,OAAO,CAAC,IAAI,CAAC,CA8Jf;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,uBAAuB,CACtC,WAAW,EAAE,aAAa,EAC1B,IAAI,GAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,oBAAoB,CA6BtB;AA0ED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DvE;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CACnC,OAAO,GAAE,qBAA0B,GACjC,OAAO,CAAC,IAAI,CAAC,CAuFf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/application/add-integration/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAGN,KAAK,aAAa,EAClB,MAAM,6BAA6B,CAAC;AA8BrC,MAAM,WAAW,qBAAqB;IACrC,YAAY,CAAC,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;IAC/C,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AA2DD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACvC,WAAW,EAAE,aAAa,EAC1B,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,OAAO,EACtB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GACnD,OAAO,CAAC,IAAI,CAAC,CAoLf;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,uBAAuB,CACtC,WAAW,EAAE,aAAa,EAC1B,IAAI,GAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,oBAAoB,CAmCtB;AA0ED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DvE;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CACnC,OAAO,GAAE,qBAA0B,GACjC,OAAO,CAAC,IAAI,CAAC,CAuFf"}
@@ -10,6 +10,7 @@ import { buildLocalSkillInstallCommand, buildSkillInstallCommand, getSkillInstal
10
10
  import { getSanityMcpManualInstruction, registerSanityMcp, } from "../../infrastructure/agents/register-sanity-mcp.js";
11
11
  import { applyDotenvxArtifacts, ensureNextConfigTracing, setupDotenvx, } from "../../infrastructure/create/setup-dotenvx.js";
12
12
  import { setupSanity } from "../../infrastructure/create/setup-sanity.js";
13
+ import { ensureStudioHeaders } from "../../infrastructure/integrations/ensure-studio-headers.js";
13
14
  import { injectIntegration } from "../../infrastructure/integrations/inject-integration.js";
14
15
  import { sanityConfig } from "../../modules/features/cms/sanity/config.js";
15
16
  import { hubspotConfig } from "../../modules/features/forms/hubspot/config.js";
@@ -154,6 +155,16 @@ export async function installIntegration(integration, targetDir, usesSrcPrefix,
154
155
  console.log(pc.yellow(`\n Sanity auto-setup skipped: ${message}`));
155
156
  console.log(pc.dim(" You can set up Sanity manually later.\n"));
156
157
  }
158
+ // Templates already ship the split; an existing project won't, and
159
+ // next.config.ts has no merger to do it.
160
+ const studioHeaders = await ensureStudioHeaders(targetDir);
161
+ if (studioHeaders === "patched") {
162
+ console.log(pc.green(" Split next.config's headers() to allow the Sanity Dashboard iframe."));
163
+ }
164
+ else if (studioHeaders === "manual") {
165
+ console.log(pc.yellow(" ⚠ Add a /studio/:path* headers() rule so the Sanity Dashboard can embed the Studio:"));
166
+ console.log(pc.dim(' { source: "/studio/:path*", headers: [{ key: "Content-Security-Policy", value: "frame-ancestors \'self\' https://*.sanity.io;" }] } — and drop X-Frame-Options for that rule entirely.'));
167
+ }
157
168
  }
158
169
  // Next steps. Suppressed when another flow (e.g. create) aggregates them into
159
170
  // a single block.
@@ -182,7 +193,10 @@ export function getIntegrationNextSteps(integration, opts = {}) {
182
193
  if (opts.sanitySetupDone) {
183
194
  return {
184
195
  setup: ["Run: bun sanity:typegen"],
185
- postLaunch: ["Open Sanity Studio at /studio"],
196
+ postLaunch: [
197
+ "Open Sanity Studio at /studio",
198
+ "To embed the Studio in the Sanity Dashboard, register its full URL (e.g. https://example.com/studio) in Manage — see the README's Sanity Dashboard section",
199
+ ],
186
200
  };
187
201
  }
188
202
  return {
@@ -190,7 +204,10 @@ export function getIntegrationNextSteps(integration, opts = {}) {
190
204
  "Create a Sanity project at https://sanity.io/manage and add credentials to .env.local (NEXT_PUBLIC_SANITY_PROJECT_ID, NEXT_PUBLIC_SANITY_DATASET, SANITY_API_READ_TOKEN)",
191
205
  "Run: bun sanity:typegen",
192
206
  ],
193
- postLaunch: ["Open Sanity Studio at /studio"],
207
+ postLaunch: [
208
+ "Open Sanity Studio at /studio",
209
+ "To embed the Studio in the Sanity Dashboard, register its full URL (e.g. https://example.com/studio) in Manage — see the README's Sanity Dashboard section",
210
+ ],
194
211
  };
195
212
  }
196
213
  if (integration === "hubspot") {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/application/add-integration/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/application/add-integration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAgB,MAAM,wBAAwB,CAAC;AACrE,OAAO,EACN,cAAc,EACd,mBAAmB,GAEnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACN,6BAA6B,EAC7B,wBAAwB,EACxB,yBAAyB,EACzB,YAAY,GAGZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,6BAA6B,EAC7B,iBAAiB,GACjB,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EACN,qBAAqB,EACrB,uBAAuB,EACvB,YAAY,GACZ,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4DAA4D,CAAC;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,yDAAyD,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,6CAA6C,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACN,wBAAwB,EACxB,mBAAmB,GACnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAQzD,gFAAgF;AAChF,MAAM,cAAc,GAAG,SAAkB,CAAC;AAe1C;;GAEG;AACH,KAAK,UAAU,eAAe,CAC7B,SAAiB,EACjB,WAA0B;IAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAoB,CAAC;IAE5D,MAAM,kBAAkB,GAAsC;QAC7D,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,aAAa;KACtB,CAAC;IACF,MAAM,MAAM,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAE/C,IAAI,MAAM,EAAE,CAAC;QACZ,GAAG,CAAC,YAAY,GAAG;YAClB,GAAG,GAAG,CAAC,YAAY;YACnB,GAAG,MAAM,CAAC,YAAY;SACtB,CAAC;QACF,IACC,MAAM,CAAC,eAAe;YACtB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAC7C,CAAC;YACF,GAAG,CAAC,eAAe,GAAG;gBACrB,GAAG,GAAG,CAAC,eAAe;gBACtB,GAAG,MAAM,CAAC,eAAe;aACzB,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,OAAO,GAAG;gBACb,GAAG,GAAG,CAAC,OAAO;gBACd,GAAG,MAAM,CAAC,OAAO;aACjB,CAAC;QACH,CAAC;IACF,CAAC;IAED,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,WAA0B,EAC1B,SAAiB,EACjB,aAAsB,EACtB,UAAmD,EAAE;IAErD,sCAAsC;IACtC,MAAM,aAAa,GAAG,MAAM,wBAAwB,CACnD,SAAS,EACT,WAAW,EACX,aAAa,CACb,CAAC;IACF,IAAI,aAAa,EAAE,CAAC;QACnB,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,OAAO,CAAC;YACpC,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,yCAAyC;YAC3E,OAAO,EAAE,KAAK;SACd,CAAC,CAA4B,CAAC;QAE/B,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,WAAW,GAAG,CAAC,CAAC,CAAC;YAClD,OAAO;QACR,CAAC;IACF,CAAC;IAED,wDAAwD;IACxD,MAAM,kBAAkB,GAAG,GAAG,CAC7B,UAAU,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAC/C,CAAC,KAAK,EAAE,CAAC;IAEV,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,iBAAiB,CACtC,SAAS,EACT,WAAW,EACX,kBAAkB,CAClB,CAAC;QAEF,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAEhD,IAAI,SAAS,EAAE,CAAC;YACf,kBAAkB,CAAC,IAAI,CACtB,EAAE,CAAC,MAAM,CAAC,GAAG,WAAW,uCAAuC,CAAC,CAChE,CAAC;QACH,CAAC;aAAM,CAAC;YACP,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,WAAW,qBAAqB,CAAC,CAAC,CAAC;QAC3E,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3B,CAAC;IACF,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3D,kBAAkB,CAAC,IAAI,CACtB,EAAE,CAAC,GAAG,CAAC,oBAAoB,WAAW,iBAAiB,OAAO,EAAE,CAAC,CACjE,CAAC;QACF,OAAO;IACR,CAAC;IAED,mCAAmC;IACnC,MAAM,WAAW,GAAG,GAAG,CAAC,wCAAwC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC1E,IAAI,CAAC;QACJ,MAAM,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC9C,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3D,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,gDAAgD;IAChD,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CACxD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CACjD,CAAC;QAEF,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,OAAO,CAAC;gBACpC,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,+CAA+C;gBACxD,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAC1C,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,KAAK,EAAE,KAAK,CAAC,EAAE;oBACf,QAAQ,EAAE,IAAI;iBACd,CAAC,CAAC;gBACH,GAAG,EAAE,CAAC;gBACN,YAAY,EAAE,KAAK;aACnB,CAAC,CAA8B,CAAC;YAEjC,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvC,MAAM,UAAU,GAAG,GAAG,CAAC,kCAAkC,CAAC,CAAC,KAAK,EAAE,CAAC;gBACnE,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBAEhE,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACnC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;gBAC/D,CAAC;qBAAM,CAAC;oBACP,UAAU,CAAC,IAAI,CACd,EAAE,CAAC,MAAM,CAAC,2CAA2C,CAAC,CACtD,CAAC;oBACF,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;wBACxC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAC/B,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,OAAO,CAAC,KAAK,CAC7C,CAAC;wBACF,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;wBAC5C,OAAO,CAAC,GAAG,CACV,EAAE,CAAC,MAAM,CACR,OAAO,KAAK,KAAK,OAAO,CAAC,MAAM,IAAI,oCAAoC,EAAE,CACzE,CACD,CAAC;wBACF,OAAO,CAAC,GAAG,CACV,EAAE,CAAC,GAAG,CACL,eAAe,6BAA6B,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAC7D,CACD,CAAC;oBACH,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,2EAA2E;IAC3E,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAC/C,cAAc,CAAC,WAAW,CAAC,CAAC;IAC7B,+BAA+B,CAAC,SAAS,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;IAE3E,iCAAiC;IACjC,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACJ,eAAe,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE;gBAC9C,OAAO,EAAE,OAAO,CAAC,OAAO;aACxB,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,mEAAmE;QACnE,yCAAyC;QACzC,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CACV,EAAE,CAAC,KAAK,CACP,uEAAuE,CACvE,CACD,CAAC;QACH,CAAC;aAAM,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CACV,EAAE,CAAC,MAAM,CACR,uFAAuF,CACvF,CACD,CAAC;YACF,OAAO,CAAC,GAAG,CACV,EAAE,CAAC,GAAG,CACL,4LAA4L,CAC5L,CACD,CAAC;QACH,CAAC;IACF,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CACV,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,qCAAqC,CAC/F,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC7C,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,uBAAuB,CAAC,WAAW,EAAE;YAClE,eAAe;SACf,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,kEAAkE;QAClE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAC1D,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;QACF,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IACf,CAAC;AACF,CAAC;AAYD,MAAM,UAAU,uBAAuB,CACtC,WAA0B,EAC1B,OAAsC,EAAE;IAExC,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,OAAO;gBACN,KAAK,EAAE,CAAC,yBAAyB,CAAC;gBAClC,UAAU,EAAE;oBACX,+BAA+B;oBAC/B,4JAA4J;iBAC5J;aACD,CAAC;QACH,CAAC;QACD,OAAO;YACN,KAAK,EAAE;gBACN,0KAA0K;gBAC1K,yBAAyB;aACzB;YACD,UAAU,EAAE;gBACX,+BAA+B;gBAC/B,4JAA4J;aAC5J;SACD,CAAC;IACH,CAAC;IAED,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;YACN,KAAK,EAAE;gBACN,uFAAuF;gBACvF,wCAAwC;gBACxC,8EAA8E;aAC9E;YACD,UAAU,EAAE,EAAE;SACd,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,SAAS,+BAA+B,CACvC,SAAiB,EACjB,WAA+B,EAAE,EACjC,gBAAyC,EAAE;IAE3C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEhE,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CACrD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CACjD,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAExC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,aAAa,GAAG,GAAG,CAAC,cAAc,OAAO,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;QACpE,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM,OAAO,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;QACnD,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;YACvC,IAAI,CAAC;gBACJ,QAAQ,CAAC,wBAAwB,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;oBACzD,GAAG,EAAE,SAAS;oBACd,KAAK,EAAE,QAAQ;iBACf,CAAC,CAAC;gBACH,SAAS,GAAG,IAAI,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACR,sBAAsB;YACvB,CAAC;QACF,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACf,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,mBAAmB,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACP,aAAa,CAAC,IAAI,CACjB,EAAE,CAAC,MAAM,CACR,qBAAqB,OAAO,mCAAmC,OAAO,CAAC,MAAM,EAAE,CAC/E,CACD,CAAC;QACH,CAAC;IACF,CAAC;IAED,2EAA2E;IAC3E,sDAAsD;IACtD,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,aAAa,GAAG,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;QACvE,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;YACvC,IAAI,CAAC;gBACJ,QAAQ,CACP,6BAA6B,CAAC,KAAK,EAAE;oBACpC,SAAS,EAAE,gBAAgB;oBAC3B,QAAQ;iBACR,CAAC,EACF,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CACnC,CAAC;gBACF,SAAS,GAAG,IAAI,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC;gBACR,sBAAsB;YACvB,CAAC;QACF,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACf,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACP,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,qBAAqB,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;QACzE,CAAC;IACF,CAAC;AACF,CAAC;AAED,kEAAkE;AAClE,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IACvD,MAAM,gBAAgB,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/D,IAAI,CAAC;QACJ,MAAM,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACvC,gBAAgB,CAAC,OAAO,CACvB,EAAE,CAAC,KAAK,CACP,6EAA6E,CAC7E,CACD,CAAC;IACH,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3D,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzE,OAAO;IACR,CAAC;IAED,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACzD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CACV,EAAE,CAAC,KAAK,CAAC,wCAAwC,OAAO,CAAC,IAAI,GAAG,CAAC,CACjE,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CACV,EAAE,CAAC,MAAM,CACR,4EAA4E,CAC5E,CACD,CAAC;QACF,OAAO,CAAC,GAAG,CACV,EAAE,CAAC,GAAG,CACL,6FAA6F,CAC7F,CACD,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,MAAM,cAAc,GAAG,GAAG,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;IACrE,IAAI,CAAC;QACJ,QAAQ,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3D,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACR,cAAc,CAAC,IAAI,CAClB,EAAE,CAAC,MAAM,CACR,yFAAyF,CACzF,CACD,CAAC;IACH,CAAC;IAED,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;IAE9B,6EAA6E;IAC7E,qCAAqC;IACrC,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAAE,SAAS;QACjE,MAAM,EAAE,CAAC,IAAI,CACZ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG,CAAC,EAC1C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,CAC3D,CAAC;IACH,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,UAAiC,EAAE;IAEnC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEhC,qDAAqD;IACrD,MAAM,iBAAiB,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/D,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAExD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACvB,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CACV,EAAE,CAAC,MAAM,CACR,iEAAiE,CACjE,CACD,CAAC;QACF,OAAO;IACR,CAAC;IAED,MAAM,gBAAgB,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACpE,iBAAiB,CAAC,OAAO,CACxB,EAAE,CAAC,KAAK,CACP,0BAA0B,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,KAAK,gBAAgB,aAAa,CACrG,CACD,CAAC;IAEF,2EAA2E;IAC3E,uBAAuB;IACvB,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY;QACrC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;YACpC,CAAC,CAAC,OAAO,CAAC,YAAY;YACtB,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;QACzB,CAAC,CAAC,SAAS,CAAC;IAEb,IAAI,SAA0B,CAAC;IAC/B,IAAI,gBAAgB,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC;IAEhD,MAAM,QAAQ,GACb,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC;IACjE,IAAI,QAAQ,EAAE,CAAC;QACd,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;IAC7B,CAAC;SAAM,CAAC;QACP,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,OAAO,CAAC;YACnC,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,2CAA2C;YACpD,OAAO,EAAE;gBACR,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACtC,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,KAAK,EAAE,KAAK,CAAC,EAA2C;iBACxD,CAAC,CAAC;gBACH;oBACC,KAAK,EAAE,SAAS;oBAChB,WAAW,EAAE,iDAAiD;oBAC9D,KAAK,EAAE,cAAc;iBACrB;aACD;YACD,GAAG,EAAE,CAAC;YACN,YAAY,EAAE,KAAK;SACnB,CAAC,CAA6D,CAAC;QAEhE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACnD,OAAO;QACR,CAAC;QACD,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACrD,SAAS,GAAG,QAAQ,CAAC,MAAM,CAC1B,CAAC,EAAE,EAAuB,EAAE,CAAC,EAAE,KAAK,cAAc,CAClD,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,+EAA+E;IAC/E,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAC1E,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CACtB,CAAC;IAEF,KAAK,MAAM,WAAW,IAAI,OAAO,EAAE,CAAC;QACnC,MAAM,kBAAkB,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,aAAa,EAAE;YAC1E,OAAO,EAAE,gBAAgB;SACzB,CAAC,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,uCAAuC;IACvC,IAAI,gBAAgB,EAAE,CAAC;QACtB,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;AACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ /** Split the old site-wide rule in two. Null when the shape isn't an exact match — never guesses. */
2
+ export declare function patchStudioHeaders(content: string): string | null;
3
+ export type EnsureStudioHeadersResult = "patched" | "already" | "manual";
4
+ /** Patch a project's next.config in place. "manual" means the caller should print guidance instead. */
5
+ export declare function ensureStudioHeaders(targetDir: string): Promise<EnsureStudioHeadersResult>;
6
+ //# sourceMappingURL=ensure-studio-headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-studio-headers.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/integrations/ensure-studio-headers.ts"],"names":[],"mappings":"AAqHA,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGjE;AAyBD,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEzE,uGAAuG;AACvG,wBAAsB,mBAAmB,CACxC,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,yBAAyB,CAAC,CAepC"}
@@ -0,0 +1,153 @@
1
+ import path from "node:path";
2
+ import fs from "fs-extra";
3
+ const NEXT_CONFIG_CANDIDATES = [
4
+ "next.config.ts",
5
+ "next.config.mts",
6
+ "next.config.js",
7
+ "next.config.mjs",
8
+ "next.config.cjs",
9
+ ];
10
+ const SANITY_FRAME_ANCESTORS = "frame-ancestors 'self' https://*.sanity.io";
11
+ const STUDIO_SOURCE = 'source: "/studio/:path*"';
12
+ const X_FRAME_OPTIONS_KEY = 'key: "X-Frame-Options"';
13
+ // Matched verbatim rather than by regex, so we only ever rewrite a shape bsmnt
14
+ // itself produced.
15
+ const OLD_RULE = ` {
16
+ source: "/(.*)",
17
+ headers: [
18
+ {
19
+ key: "X-Content-Type-Options",
20
+ value: "nosniff",
21
+ },
22
+ {
23
+ key: "Content-Security-Policy",
24
+ value: "frame-ancestors 'self';",
25
+ },
26
+ {
27
+ key: "X-Frame-Options",
28
+ value: "SAMEORIGIN",
29
+ },
30
+ {
31
+ key: "X-XSS-Protection",
32
+ value: "1; mode=block",
33
+ },
34
+ {
35
+ key: "X-DNS-Prefetch-Control",
36
+ value: "on",
37
+ },
38
+ {
39
+ key: "Strict-Transport-Security",
40
+ value: "max-age=63072000; includeSubDomains; preload",
41
+ },
42
+ {
43
+ key: "Permissions-Policy",
44
+ value: "camera=(), microphone=(), geolocation=()",
45
+ },
46
+ ],
47
+ },`;
48
+ const NEW_RULES = ` {
49
+ // Excludes /studio* — must stay mutually exclusive with the rule below.
50
+ source: "/((?!studio(?:/|$)).*)",
51
+ headers: [
52
+ {
53
+ key: "X-Content-Type-Options",
54
+ value: "nosniff",
55
+ },
56
+ {
57
+ key: "Content-Security-Policy",
58
+ value: "frame-ancestors 'self';",
59
+ },
60
+ {
61
+ key: "X-Frame-Options",
62
+ value: "SAMEORIGIN",
63
+ },
64
+ {
65
+ key: "X-XSS-Protection",
66
+ value: "1; mode=block",
67
+ },
68
+ {
69
+ key: "X-DNS-Prefetch-Control",
70
+ value: "on",
71
+ },
72
+ {
73
+ key: "Strict-Transport-Security",
74
+ value: "max-age=63072000; includeSubDomains; preload",
75
+ },
76
+ {
77
+ key: "Permissions-Policy",
78
+ value: "camera=(), microphone=(), geolocation=()",
79
+ },
80
+ ],
81
+ },
82
+ {
83
+ // X-Frame-Options can't allow a third-party origin, and Next can't unset
84
+ // it from another rule — the iframe needs it absent, not overridden.
85
+ ${STUDIO_SOURCE},
86
+ headers: [
87
+ {
88
+ key: "X-Content-Type-Options",
89
+ value: "nosniff",
90
+ },
91
+ {
92
+ key: "Content-Security-Policy",
93
+ value: "${SANITY_FRAME_ANCESTORS};",
94
+ },
95
+ {
96
+ key: "X-XSS-Protection",
97
+ value: "1; mode=block",
98
+ },
99
+ {
100
+ key: "X-DNS-Prefetch-Control",
101
+ value: "on",
102
+ },
103
+ {
104
+ key: "Strict-Transport-Security",
105
+ value: "max-age=63072000; includeSubDomains; preload",
106
+ },
107
+ {
108
+ key: "Permissions-Policy",
109
+ value: "camera=(), microphone=(), geolocation=()",
110
+ },
111
+ ],
112
+ },`;
113
+ /** Split the old site-wide rule in two. Null when the shape isn't an exact match — never guesses. */
114
+ export function patchStudioHeaders(content) {
115
+ if (!content.includes(OLD_RULE))
116
+ return null;
117
+ return content.replace(OLD_RULE, NEW_RULES);
118
+ }
119
+ async function findNextConfig(targetDir) {
120
+ for (const name of NEXT_CONFIG_CANDIDATES) {
121
+ const candidate = path.join(targetDir, name);
122
+ if (await fs.pathExists(candidate))
123
+ return candidate;
124
+ }
125
+ return null;
126
+ }
127
+ // Scoped to the rule's own span: the CSP alone isn't enough, since an
128
+ // X-Frame-Options on that same rule still blocks the iframe.
129
+ function hasStudioExemption(content) {
130
+ const start = content.indexOf(STUDIO_SOURCE);
131
+ if (start === -1)
132
+ return false;
133
+ const rest = content.slice(start + STUDIO_SOURCE.length);
134
+ const nextRule = rest.indexOf("source:");
135
+ const rule = nextRule === -1 ? rest : rest.slice(0, nextRule);
136
+ return (rule.includes(SANITY_FRAME_ANCESTORS) && !rule.includes(X_FRAME_OPTIONS_KEY));
137
+ }
138
+ /** Patch a project's next.config in place. "manual" means the caller should print guidance instead. */
139
+ export async function ensureStudioHeaders(targetDir) {
140
+ const configPath = await findNextConfig(targetDir);
141
+ if (!configPath)
142
+ return "manual";
143
+ const content = await fs.readFile(configPath, "utf-8");
144
+ // Known shape first: a leftover site-wide rule still re-adds X-Frame-Options
145
+ // to /studio, even when a hand-written studio rule sits alongside it.
146
+ const patched = patchStudioHeaders(content);
147
+ if (patched !== null) {
148
+ await fs.writeFile(configPath, patched);
149
+ return "patched";
150
+ }
151
+ return hasStudioExemption(content) ? "already" : "manual";
152
+ }
153
+ //# sourceMappingURL=ensure-studio-headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-studio-headers.js","sourceRoot":"","sources":["../../../src/infrastructure/integrations/ensure-studio-headers.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,MAAM,sBAAsB,GAAG;IAC9B,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;CACjB,CAAC;AAEF,MAAM,sBAAsB,GAAG,4CAA4C,CAAC;AAC5E,MAAM,aAAa,GAAG,0BAA0B,CAAC;AACjD,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AAErD,+EAA+E;AAC/E,mBAAmB;AACnB,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCV,CAAC;AAER,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqCV,aAAa;;;;;;;;oBAQD,sBAAsB;;;;;;;;;;;;;;;;;;;OAmBnC,CAAC;AAER,qGAAqG;AACrG,MAAM,UAAU,kBAAkB,CAAC,OAAe;IACjD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,SAAiB;IAC9C,KAAK,MAAM,IAAI,IAAI,sBAAsB,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IACtD,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,sEAAsE;AACtE,6DAA6D;AAC7D,SAAS,kBAAkB,CAAC,OAAe;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAE/B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAE9D,OAAO,CACN,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAC5E,CAAC;AACH,CAAC;AAID,uGAAuG;AACvG,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,SAAiB;IAEjB,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,CAAC,UAAU;QAAE,OAAO,QAAQ,CAAC;IAEjC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAEvD,6EAA6E;IAC7E,sEAAsE;IACtE,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACxC,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC3D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../src/modules/features/cms/sanity/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,EAAE,uBA8D1B,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../src/modules/features/cms/sanity/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,EAAE,uBA+D1B,CAAC"}
@@ -13,11 +13,12 @@ export const sanityConfig = {
13
13
  "@sanity/image-url": "^2.1.1",
14
14
  "@sanity/visual-editing": "^5.4.3",
15
15
  "@sanity/vision": "^5.30.0",
16
- "next-sanity": "^13.0.10",
16
+ "next-sanity": "^13.3.1",
17
17
  sanity: "^5.30.0",
18
18
  "sanity-plugin-media": "^2.3.0",
19
19
  },
20
20
  devDependencies: {
21
+ "@sanity/browserslist-config": "^1.0.5",
21
22
  "schema-dts": "^2.0.0",
22
23
  },
23
24
  scripts: {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../src/modules/features/cms/sanity/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,CAAC,MAAM,YAAY,GAA4B;IACpD,IAAI,EAAE,QAAQ;IAEd,YAAY,EAAE;QACb,gBAAgB,EAAE,QAAQ;QAC1B,wBAAwB,EAAE,QAAQ;QAClC,qBAAqB,EAAE,SAAS;QAChC,qBAAqB,EAAE,QAAQ;QAC/B,eAAe,EAAE,QAAQ;QACzB,mBAAmB,EAAE,QAAQ;QAC7B,wBAAwB,EAAE,QAAQ;QAClC,gBAAgB,EAAE,SAAS;QAC3B,aAAa,EAAE,UAAU;QACzB,MAAM,EAAE,SAAS;QACjB,qBAAqB,EAAE,QAAQ;KAC/B;IAED,eAAe,EAAE;QAChB,YAAY,EAAE,QAAQ;KACtB;IAED,OAAO,EAAE;QACR,gBAAgB,EACf,wFAAwF;QACzF,gBAAgB,EACf,0LAA0L;QAC3L,MAAM,EAAE,wBAAwB;QAChC,GAAG,EAAE,0BAA0B;QAC/B,QAAQ,EAAE,wBAAwB;QAClC,KAAK,EAAE,YAAY;QACnB,YAAY,EAAE,uCAAuC;KACrD;IAED,aAAa,EAAE;QACd,yBAAyB;QACzB,mBAAmB;QACnB,4BAA4B;QAC5B,oBAAoB;QACpB,oBAAoB;QACpB,YAAY;QACZ,cAAc;QACd,UAAU;QACV,cAAc;QACd,gBAAgB;QAChB,kBAAkB;QAClB,kBAAkB;QAClB,uBAAuB;QACvB,wCAAwC;QACxC,8BAA8B;QAC9B,gCAAgC;QAChC,iCAAiC;QACjC,4BAA4B;QAC5B,UAAU;KACV;IAED,UAAU,EAAE;QACX,gBAAgB;QAChB,0BAA0B;QAC1B,uCAAuC;QACvC,0BAA0B;QAC1B,WAAW;KACX;CACD,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../src/modules/features/cms/sanity/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,CAAC,MAAM,YAAY,GAA4B;IACpD,IAAI,EAAE,QAAQ;IAEd,YAAY,EAAE;QACb,gBAAgB,EAAE,QAAQ;QAC1B,wBAAwB,EAAE,QAAQ;QAClC,qBAAqB,EAAE,SAAS;QAChC,qBAAqB,EAAE,QAAQ;QAC/B,eAAe,EAAE,QAAQ;QACzB,mBAAmB,EAAE,QAAQ;QAC7B,wBAAwB,EAAE,QAAQ;QAClC,gBAAgB,EAAE,SAAS;QAC3B,aAAa,EAAE,SAAS;QACxB,MAAM,EAAE,SAAS;QACjB,qBAAqB,EAAE,QAAQ;KAC/B;IAED,eAAe,EAAE;QAChB,6BAA6B,EAAE,QAAQ;QACvC,YAAY,EAAE,QAAQ;KACtB;IAED,OAAO,EAAE;QACR,gBAAgB,EACf,wFAAwF;QACzF,gBAAgB,EACf,0LAA0L;QAC3L,MAAM,EAAE,wBAAwB;QAChC,GAAG,EAAE,0BAA0B;QAC/B,QAAQ,EAAE,wBAAwB;QAClC,KAAK,EAAE,YAAY;QACnB,YAAY,EAAE,uCAAuC;KACrD;IAED,aAAa,EAAE;QACd,yBAAyB;QACzB,mBAAmB;QACnB,4BAA4B;QAC5B,oBAAoB;QACpB,oBAAoB;QACpB,YAAY;QACZ,cAAc;QACd,UAAU;QACV,cAAc;QACd,gBAAgB;QAChB,kBAAkB;QAClB,kBAAkB;QAClB,uBAAuB;QACvB,wCAAwC;QACxC,8BAA8B;QAC9B,gCAAgC;QAChC,iCAAiC;QACjC,4BAA4B;QAC5B,UAAU;KACV;IAED,UAAU,EAAE;QACX,gBAAgB;QAChB,0BAA0B;QAC1B,uCAAuC;QACvC,0BAA0B;QAC1B,WAAW;KACX;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../src/modules/features/cms/sanity-pagebuilder/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,kCAAkC;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,eAAO,MAAM,uBAAuB,EAAE,kCA+CrC,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../src/modules/features/cms/sanity-pagebuilder/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,kCAAkC;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,eAAO,MAAM,uBAAuB,EAAE,kCAgDrC,CAAC"}
@@ -15,11 +15,12 @@ export const sanityPagebuilderConfig = {
15
15
  "@sanity/ui": "^3.1.14",
16
16
  "@sanity/vision": "^5.30.0",
17
17
  "@sanity/visual-editing": "^5.4.3",
18
- "next-sanity": "^13.0.10",
18
+ "next-sanity": "^13.3.1",
19
19
  sanity: "^5.30.0",
20
20
  "sanity-plugin-media": "^4.1.1",
21
21
  },
22
22
  devDependencies: {
23
+ "@sanity/browserslist-config": "^1.0.5",
23
24
  "schema-dts": "^2.0.0",
24
25
  },
25
26
  scripts: {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../src/modules/features/cms/sanity-pagebuilder/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,MAAM,CAAC,MAAM,uBAAuB,GAAuC;IAC1E,IAAI,EAAE,oBAAoB;IAE1B,YAAY,EAAE;QACb,uBAAuB,EAAE,SAAS;QAClC,qBAAqB,EAAE,QAAQ;QAC/B,qBAAqB,EAAE,QAAQ;QAC/B,eAAe,EAAE,QAAQ;QACzB,mBAAmB,EAAE,QAAQ;QAC7B,eAAe,EAAE,QAAQ;QACzB,YAAY,EAAE,SAAS;QACvB,gBAAgB,EAAE,SAAS;QAC3B,wBAAwB,EAAE,QAAQ;QAClC,aAAa,EAAE,UAAU;QACzB,MAAM,EAAE,SAAS;QACjB,qBAAqB,EAAE,QAAQ;KAC/B;IAED,eAAe,EAAE;QAChB,YAAY,EAAE,QAAQ;KACtB;IAED,OAAO,EAAE;QACR,gBAAgB,EACf,wFAAwF;QACzF,gBAAgB,EAAE,qCAAqC;QACvD,MAAM,EAAE,wBAAwB;QAChC,QAAQ,EAAE,wBAAwB;KAClC;IAED,aAAa,EAAE;QACd,yBAAyB;QACzB,uCAAuC;QACvC,6BAA6B;QAC7B,uBAAuB;QACvB,uBAAuB;QACvB,kBAAkB;QAClB,sBAAsB;QACtB,+BAA+B;QAC/B,YAAY;QACZ,SAAS;QACT,cAAc;QACd,gBAAgB;QAChB,UAAU;QACV,mBAAmB;QACnB,4BAA4B;KAC5B;CACD,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../src/modules/features/cms/sanity-pagebuilder/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,MAAM,CAAC,MAAM,uBAAuB,GAAuC;IAC1E,IAAI,EAAE,oBAAoB;IAE1B,YAAY,EAAE;QACb,uBAAuB,EAAE,SAAS;QAClC,qBAAqB,EAAE,QAAQ;QAC/B,qBAAqB,EAAE,QAAQ;QAC/B,eAAe,EAAE,QAAQ;QACzB,mBAAmB,EAAE,QAAQ;QAC7B,eAAe,EAAE,QAAQ;QACzB,YAAY,EAAE,SAAS;QACvB,gBAAgB,EAAE,SAAS;QAC3B,wBAAwB,EAAE,QAAQ;QAClC,aAAa,EAAE,SAAS;QACxB,MAAM,EAAE,SAAS;QACjB,qBAAqB,EAAE,QAAQ;KAC/B;IAED,eAAe,EAAE;QAChB,6BAA6B,EAAE,QAAQ;QACvC,YAAY,EAAE,QAAQ;KACtB;IAED,OAAO,EAAE;QACR,gBAAgB,EACf,wFAAwF;QACzF,gBAAgB,EAAE,qCAAqC;QACvD,MAAM,EAAE,wBAAwB;QAChC,QAAQ,EAAE,wBAAwB;KAClC;IAED,aAAa,EAAE;QACd,yBAAyB;QACzB,uCAAuC;QACvC,6BAA6B;QAC7B,uBAAuB;QACvB,uBAAuB;QACvB,kBAAkB;QAClB,sBAAsB;QACtB,+BAA+B;QAC/B,YAAY;QACZ,SAAS;QACT,cAAc;QACd,gBAAgB;QAChB,UAAU;QACV,mBAAmB;QACnB,4BAA4B;KAC5B;CACD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bsmnt",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "packageManager": "bun@1.3.14",
5
5
  "description": "CLI to scaffold basement projects and add integrations",
6
6
  "type": "module",
@@ -81,7 +81,7 @@
81
81
  "commander": "^13.1.0",
82
82
  "dotenv": "^17.4.2",
83
83
  "fs-extra": "^11.3.3",
84
- "next-sanity": "^13.0.10",
84
+ "next-sanity": "^13.3.1",
85
85
  "ora": "^9.1.0",
86
86
  "picocolors": "^1.1.1",
87
87
  "prompts": "^2.4.2",
@@ -4,6 +4,7 @@ import { SanityFetch } from "@/lib/integrations/sanity/live";
4
4
  import { ARTICLE_QUERY } from "@/lib/integrations/sanity/queries";
5
5
  import type { Article } from "@/lib/integrations/sanity/sanity.types";
6
6
  import { portableTextToMarkdown } from "@/lib/utils/portable-text-to-markdown";
7
+ import { getBaseUrl } from "@/lib/utils/url";
7
8
 
8
9
  export async function GET(
9
10
  _request: Request,
@@ -16,7 +17,8 @@ export async function GET(
16
17
  }
17
18
 
18
19
  const slug = rawSlug.slice(0, -3);
19
- const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || "http://localhost:3000";
20
+ const baseUrl = getBaseUrl().replace(/\/$/, "");
21
+ const canonicalPath = `/blog/${slug}`;
20
22
 
21
23
  if (!isSanityConfigured()) {
22
24
  return new NextResponse("# 404 Not Found\n\nCMS not configured.", {
@@ -64,6 +66,7 @@ export async function GET(
64
66
  "Content-Type": "text/markdown; charset=utf-8",
65
67
  Vary: "Accept",
66
68
  "X-Content-Type-Options": "nosniff",
69
+ Link: `<${baseUrl}${canonicalPath}>; rel="canonical"`,
67
70
  },
68
71
  });
69
72
  } catch (error) {
@@ -1,8 +1,9 @@
1
1
  import { NextResponse } from "next/server";
2
2
  import { isSanityConfigured } from "@/lib/integrations/check-integration";
3
+ import { getBaseUrl } from "@/lib/utils/url";
3
4
 
4
5
  export async function GET() {
5
- const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || "http://localhost:3000";
6
+ const baseUrl = getBaseUrl();
6
7
 
7
8
  if (!isSanityConfigured()) {
8
9
  return new NextResponse(
@@ -4,13 +4,13 @@ import { urlForImage } from "@/lib/integrations/sanity/utils/image";
4
4
 
5
5
  interface SanityImageProps extends Omit<ImageProps, "src" | "aspectRatio"> {
6
6
  image: {
7
- asset: {
7
+ asset?: {
8
8
  _ref: string;
9
9
  _type: "reference";
10
10
  };
11
11
  alt?: string;
12
12
  hotspot?: object;
13
- crop?: object;
13
+ crop?: { left?: number; right?: number; top?: number; bottom?: number };
14
14
  };
15
15
  maxWidth?: number;
16
16
  }
@@ -19,18 +19,32 @@ export function SanityImage({
19
19
  image,
20
20
  maxWidth = 1920,
21
21
  alt,
22
+ fill,
22
23
  ...props
23
24
  }: SanityImageProps) {
24
25
  if (!image?.asset) return null;
25
26
 
27
+ // getImageDimensions is uncropped; the URL builder applies the crop.
28
+ // Rounding order must match @sanity/image-url: origin first, then subtract.
26
29
  const { width, height } = getImageDimensions(image.asset);
27
- const aspectRatio = width / height;
30
+ const { left = 0, right = 0, top = 0, bottom = 0 } = image.crop ?? {};
31
+ const cropLeft = Math.round(left * width);
32
+ const cropTop = Math.round(top * height);
33
+ const sourceWidth = Math.round(width - right * width - cropLeft);
34
+ const sourceHeight = Math.round(height - bottom * height - cropTop);
35
+
36
+ const imageProps = fill
37
+ ? { fill: true }
38
+ : { width: sourceWidth, height: sourceHeight };
28
39
 
29
40
  return (
30
41
  <Image
31
- src={urlForImage(image).width(maxWidth).url()}
42
+ src={urlForImage(image)
43
+ .width(Math.min(maxWidth, sourceWidth))
44
+ .url()}
32
45
  alt={alt || image.alt || ""}
33
- aspectRatio={aspectRatio}
46
+ aspectRatio={sourceWidth / sourceHeight}
47
+ {...imageProps}
34
48
  {...props}
35
49
  />
36
50
  );
@@ -128,6 +128,37 @@ export const landing = defineType({
128
128
 
129
129
  See [ARCHITECTURE.md](../../../ARCHITECTURE.md) for cache gotchas.
130
130
 
131
+ ## Sanity Dashboard (Studio in an iframe)
132
+
133
+ The Studio at `/studio` can be embedded in the Sanity Dashboard
134
+ (`https://www.sanity.io/@<org>/studio/<appId>/<workspace>`), which loads it in an
135
+ iframe from `www.sanity.io`. Three things have to be true for that to work:
136
+
137
+ 1. **Headers.** `next.config.ts` already exempts `/studio/:path*` from the
138
+ site-wide `X-Frame-Options` / `frame-ancestors 'self'` headers, sending
139
+ `frame-ancestors 'self' https://*.sanity.io` there instead and dropping
140
+ `X-Frame-Options` entirely for that path (it has no "allow this origin"
141
+ form — it must be absent, not overridden). Nothing to do here unless
142
+ you've hand-edited `headers()`.
143
+ 2. **Bridge script.** Already wired in: `next-sanity/studio`'s `NextStudio`
144
+ re-exports `NextStudioWithBridge`, which renders the
145
+ `core.sanity-cdn.com/bridge.js` tag the Dashboard needs. Don't hand-roll
146
+ that script tag, and don't switch the Studio route to
147
+ `next-sanity/studio/client-component` (the bridge-less variant).
148
+ 3. **Registered URL.** In [Sanity Manage](https://sanity.io/manage), the
149
+ Studio application's URL must be the **full path**
150
+ (`https://example.com/studio`), not just the domain. This can't be set
151
+ from code — either click through Manage, or run
152
+ `sanity deploy --external --url https://example.com/studio --yes` from
153
+ `lib/integrations/sanity`. Writing it via the API needs the
154
+ `sanity.project.deployStudio` grant, which read/write tokens don't have.
155
+
156
+ Verify against a production build (`bun build && bun start`), not dev. One trap:
157
+ the Dashboard reports `Failed to load iframe due to X-Frame-Options: SAMEORIGIN`
158
+ for *any* framing failure, including a wrong registered URL with already-correct
159
+ headers. Trust the browser console's `Framing '<url>' violates …` line instead —
160
+ it names the URL actually being framed.
161
+
131
162
  ## Troubleshooting
132
163
 
133
164
  **Visual editor not loading:**
@@ -14,6 +14,15 @@ export function proxy(request: NextRequest) {
14
14
  return NextResponse.next();
15
15
  }
16
16
 
17
+ // Collapse repeated slashes before any rewrite, or the rewrite below would
18
+ // mask the alias (e.g. /blog//foo.md silently resolving to /blog/foo.md).
19
+ const collapsedPathname = pathname.replace(/\/{2,}/g, "/");
20
+ if (collapsedPathname !== pathname) {
21
+ const url = request.nextUrl.clone();
22
+ url.pathname = collapsedPathname;
23
+ return NextResponse.redirect(url, 308);
24
+ }
25
+
17
26
  // 1. Rewrite .md extension URLs to API routes
18
27
  // e.g. /blog/my-post.md → /api/blog/my-post.md
19
28
  for (const route of mdExtensionRoutes) {
@@ -8,6 +8,9 @@ import { getBaseUrl } from "@/lib/utils/base-url";
8
8
 
9
9
  type PageResult = NonNullable<PAGE_QUERY_RESULT>;
10
10
 
11
+ const isValidSegment = (segment: string) =>
12
+ segment.length > 0 && segment !== "." && segment !== "..";
13
+
11
14
  const getSlugPath = (slugParts?: string[]) => {
12
15
  if (!slugParts?.length) return null;
13
16
 
@@ -18,8 +21,9 @@ const getSlugPath = (slugParts?: string[]) => {
18
21
  const pathSegments = [...slugParts];
19
22
  pathSegments[pathSegments.length - 1] = lastSegment.slice(0, -3);
20
23
 
21
- const slug = pathSegments.filter(Boolean).join("/");
22
- if (!slug) return null;
24
+ if (!pathSegments.every(isValidSegment)) return null;
25
+
26
+ const slug = pathSegments.join("/");
23
27
 
24
28
  return slug === "index" ? null : slug;
25
29
  };
@@ -57,7 +61,7 @@ export async function GET(
57
61
 
58
62
  const page = data as PageResult | null;
59
63
 
60
- const baseUrl = getBaseUrl();
64
+ const baseUrl = getBaseUrl().replace(/\/$/, "");
61
65
 
62
66
  if (!page) {
63
67
  return new NextResponse("# 404 Not Found\n\nPage not found.", {
@@ -94,6 +98,7 @@ export async function GET(
94
98
  "Content-Type": "text/markdown; charset=utf-8",
95
99
  Vary: "Accept",
96
100
  "X-Content-Type-Options": "nosniff",
101
+ Link: `<${baseUrl}${canonicalPath}>; rel="canonical"`,
97
102
  },
98
103
  },
99
104
  );
@@ -113,7 +113,13 @@ export const GET = async () => {
113
113
 
114
114
  if (pages.length === 0) parts.push("No content published yet.", "");
115
115
 
116
- return new NextResponse(parts.join("\n"));
116
+ return new NextResponse(parts.join("\n"), {
117
+ headers: {
118
+ "Content-Type": "text/markdown; charset=utf-8",
119
+ "X-Content-Type-Options": "nosniff",
120
+ "Cache-Control": "public, s-maxage=3600, stale-while-revalidate=600",
121
+ },
122
+ });
117
123
  } catch (error) {
118
124
  console.error("Error generating sitemap.md:", error);
119
125
  return new NextResponse("# Sitemap\n\nError fetching content.", {
@@ -10,7 +10,7 @@ interface SanityImageProps extends Omit<ImageProps, "src" | "aspectRatio"> {
10
10
  };
11
11
  alt?: string;
12
12
  hotspot?: object;
13
- crop?: object;
13
+ crop?: { left?: number; right?: number; top?: number; bottom?: number };
14
14
  };
15
15
  maxWidth?: number;
16
16
  }
@@ -24,16 +24,26 @@ export function SanityImage({
24
24
  }: SanityImageProps) {
25
25
  if (!image?.asset) return null;
26
26
 
27
+ // getImageDimensions is uncropped; the URL builder applies the crop.
28
+ // Rounding order must match @sanity/image-url: origin first, then subtract.
27
29
  const { width, height } = getImageDimensions(image.asset);
28
- const aspectRatio = width / height;
30
+ const { left = 0, right = 0, top = 0, bottom = 0 } = image.crop ?? {};
31
+ const cropLeft = Math.round(left * width);
32
+ const cropTop = Math.round(top * height);
33
+ const sourceWidth = Math.round(width - right * width - cropLeft);
34
+ const sourceHeight = Math.round(height - bottom * height - cropTop);
29
35
 
30
- const imageProps = fill ? { fill: true } : { width, height };
36
+ const imageProps = fill
37
+ ? { fill: true }
38
+ : { width: sourceWidth, height: sourceHeight };
31
39
 
32
40
  return (
33
41
  <Image
34
- src={urlForImage(image).width(maxWidth).url()}
42
+ src={urlForImage(image)
43
+ .width(Math.min(maxWidth, sourceWidth))
44
+ .url()}
35
45
  alt={alt || image.alt || ""}
36
- aspectRatio={aspectRatio}
46
+ aspectRatio={sourceWidth / sourceHeight}
37
47
  {...imageProps}
38
48
  {...props}
39
49
  />