bsmnt 0.1.3 → 0.2.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 (406) hide show
  1. package/README.md +18 -18
  2. package/dist/configs/animations.d.ts +25 -0
  3. package/dist/configs/animations.d.ts.map +1 -0
  4. package/dist/configs/animations.js +29 -0
  5. package/dist/configs/animations.js.map +1 -0
  6. package/dist/helpers/add/hooks-config.d.ts +22 -0
  7. package/dist/helpers/add/hooks-config.d.ts.map +1 -0
  8. package/dist/helpers/add/hooks-config.js +37 -0
  9. package/dist/helpers/add/hooks-config.js.map +1 -0
  10. package/dist/helpers/add/index.d.ts +18 -0
  11. package/dist/helpers/add/index.d.ts.map +1 -0
  12. package/dist/helpers/add/index.js +152 -0
  13. package/dist/helpers/add/index.js.map +1 -0
  14. package/dist/helpers/create/copy-template.d.ts +11 -0
  15. package/dist/helpers/create/copy-template.d.ts.map +1 -0
  16. package/dist/helpers/create/copy-template.js +19 -0
  17. package/dist/helpers/create/copy-template.js.map +1 -0
  18. package/dist/helpers/create/index.d.ts +22 -0
  19. package/dist/helpers/create/index.d.ts.map +1 -0
  20. package/dist/helpers/create/index.js +81 -0
  21. package/dist/helpers/create/index.js.map +1 -0
  22. package/dist/helpers/create/install.d.ts +8 -0
  23. package/dist/helpers/create/install.d.ts.map +1 -0
  24. package/dist/helpers/create/install.js +20 -0
  25. package/dist/helpers/create/install.js.map +1 -0
  26. package/dist/helpers/create/rename-files.d.ts +10 -0
  27. package/dist/helpers/create/rename-files.d.ts.map +1 -0
  28. package/dist/helpers/create/rename-files.js +17 -0
  29. package/dist/helpers/create/rename-files.js.map +1 -0
  30. package/dist/helpers/create/setup-agent.d.ts +21 -0
  31. package/dist/helpers/create/setup-agent.d.ts.map +1 -0
  32. package/dist/helpers/create/setup-agent.js +65 -0
  33. package/dist/helpers/create/setup-agent.js.map +1 -0
  34. package/dist/helpers/create/setup-sanity.d.ts +23 -0
  35. package/dist/helpers/create/setup-sanity.d.ts.map +1 -0
  36. package/dist/helpers/create/setup-sanity.js +354 -0
  37. package/dist/helpers/create/setup-sanity.js.map +1 -0
  38. package/dist/helpers/create/update-package.d.ts +20 -0
  39. package/dist/helpers/create/update-package.d.ts.map +1 -0
  40. package/dist/helpers/create/update-package.js +87 -0
  41. package/dist/helpers/create/update-package.js.map +1 -0
  42. package/dist/helpers/integrate/index.d.ts +13 -0
  43. package/dist/helpers/integrate/index.d.ts.map +1 -0
  44. package/dist/helpers/integrate/index.js +204 -0
  45. package/dist/helpers/integrate/index.js.map +1 -0
  46. package/dist/helpers/integrate/merge-config.d.ts +21 -0
  47. package/dist/helpers/integrate/merge-config.d.ts.map +1 -0
  48. package/dist/helpers/integrate/merge-config.js +38 -0
  49. package/dist/helpers/integrate/merge-config.js.map +1 -0
  50. package/dist/helpers/integrate/merge-orchestrator.d.ts +10 -0
  51. package/dist/helpers/integrate/merge-orchestrator.d.ts.map +1 -0
  52. package/dist/helpers/integrate/merge-orchestrator.js +188 -0
  53. package/dist/helpers/integrate/merge-orchestrator.js.map +1 -0
  54. package/dist/helpers/integrate/sanity/config.d.ts +14 -0
  55. package/dist/helpers/integrate/sanity/config.d.ts.map +1 -0
  56. package/dist/helpers/integrate/sanity/config.js +38 -0
  57. package/dist/helpers/integrate/sanity/config.js.map +1 -0
  58. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.d.ts +13 -0
  59. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.d.ts.map +1 -0
  60. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.js +84 -0
  61. package/dist/helpers/integrate/sanity/mergers/check-integration-merger.js.map +1 -0
  62. package/dist/helpers/integrate/sanity/mergers/layout-merger.d.ts +23 -0
  63. package/dist/helpers/integrate/sanity/mergers/layout-merger.d.ts.map +1 -0
  64. package/dist/helpers/integrate/sanity/mergers/layout-merger.js +161 -0
  65. package/dist/helpers/integrate/sanity/mergers/layout-merger.js.map +1 -0
  66. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.d.ts +13 -0
  67. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.d.ts.map +1 -0
  68. package/{packages/create-basement-app/src → dist/helpers/integrate/sanity}/mergers/sitemap-merger.js +33 -45
  69. package/dist/helpers/integrate/sanity/mergers/sitemap-merger.js.map +1 -0
  70. package/dist/index.d.ts +3 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +337 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/paths.d.ts +14 -0
  75. package/dist/paths.d.ts.map +1 -0
  76. package/dist/paths.js +24 -0
  77. package/dist/paths.js.map +1 -0
  78. package/dist/utils/detect-project.d.ts +40 -0
  79. package/dist/utils/detect-project.d.ts.map +1 -0
  80. package/dist/utils/detect-project.js +69 -0
  81. package/dist/utils/detect-project.js.map +1 -0
  82. package/dist/utils/format-results.d.ts +24 -0
  83. package/dist/utils/format-results.d.ts.map +1 -0
  84. package/dist/utils/format-results.js +27 -0
  85. package/dist/utils/format-results.js.map +1 -0
  86. package/index.js +25 -0
  87. package/package.json +23 -15
  88. package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/package.json +1 -1
  89. package/src/templates/next-webgl/lib/renderer.ts +7 -0
  90. package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/package.json +1 -1
  91. package/packages/cli/bin/index.js +0 -259
  92. package/packages/cli/src/commands/add-integration.js +0 -310
  93. package/packages/cli/src/commands/create.js +0 -409
  94. package/packages/cli/src/commands/setup-sanity.js +0 -426
  95. package/packages/cli/src/commands/worktree.js +0 -805
  96. package/packages/create-basement-app/integrations/sanity/config.js +0 -46
  97. package/packages/create-basement-app/integrations/sanity/files/app/api/draft-mode/disable/route.ts +0 -7
  98. package/packages/create-basement-app/integrations/sanity/files/app/api/draft-mode/enable/route.ts +0 -21
  99. package/packages/create-basement-app/integrations/sanity/files/app/api/revalidate/route.ts +0 -37
  100. package/packages/create-basement-app/integrations/sanity/files/app/layout.tsx +0 -111
  101. package/packages/create-basement-app/integrations/sanity/files/app/sitemap.ts +0 -80
  102. package/packages/create-basement-app/integrations/sanity/files/app/studio/[[...tool]]/page.tsx +0 -8
  103. package/packages/create-basement-app/integrations/sanity/files/app/studio/layout.tsx +0 -7
  104. package/packages/create-basement-app/integrations/sanity/files/components/ui/sanity-image/index.tsx +0 -37
  105. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/README.md +0 -58
  106. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/check-integration.ts +0 -62
  107. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/README.md +0 -144
  108. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/client.ts +0 -30
  109. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -29
  110. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/components/rich-text.tsx +0 -73
  111. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/env.ts +0 -38
  112. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/live/index.tsx +0 -34
  113. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/queries.ts +0 -99
  114. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.cli.ts +0 -20
  115. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.config.ts +0 -94
  116. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.types.ts +0 -337
  117. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schema.json +0 -1850
  118. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/article.ts +0 -132
  119. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/example.ts +0 -203
  120. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/index.ts +0 -37
  121. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/link.ts +0 -127
  122. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/metadata.ts +0 -68
  123. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/navigation.ts +0 -39
  124. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/page.ts +0 -77
  125. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/richText.ts +0 -59
  126. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/structure.ts +0 -5
  127. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/utils/image.ts +0 -11
  128. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/utils/link.ts +0 -61
  129. package/packages/create-basement-app/integrations/sanity/files/lib/scripts/copy-sanity-mcp.ts +0 -23
  130. package/packages/create-basement-app/integrations/sanity/files/lib/scripts/generate-page.ts +0 -310
  131. package/packages/create-basement-app/integrations/sanity/files/lib/utils/metadata.ts +0 -190
  132. package/packages/create-basement-app/integrations/sanity/mergers/check-integration-merger.js +0 -105
  133. package/packages/create-basement-app/integrations/sanity/mergers/layout-merger.js +0 -223
  134. package/packages/create-basement-app/integrations/sanity/mergers/sitemap-merger.js +0 -121
  135. package/packages/create-basement-app/package.json +0 -10
  136. package/packages/create-basement-app/src/configs/animations.js +0 -28
  137. package/packages/create-basement-app/src/index.js +0 -15
  138. package/packages/create-basement-app/src/mergers/check-integration-merger.js +0 -105
  139. package/packages/create-basement-app/src/mergers/config.js +0 -109
  140. package/packages/create-basement-app/src/mergers/index.js +0 -346
  141. package/packages/create-basement-app/src/mergers/layout-merger.js +0 -223
  142. package/packages/create-basement-app/templates/experiment/app/page.tsx +0 -275
  143. package/packages/create-basement-app/templates/webgl/.biome/plugins/README.md +0 -21
  144. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-anchor-element.grit +0 -12
  145. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-relative-parent-imports.grit +0 -10
  146. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-unnecessary-forwardref.grit +0 -9
  147. package/packages/create-basement-app/templates/webgl/.cursor/rules/README.md +0 -184
  148. package/packages/create-basement-app/templates/webgl/.cursor/rules/architecture.mdc +0 -437
  149. package/packages/create-basement-app/templates/webgl/.cursor/rules/components.mdc +0 -436
  150. package/packages/create-basement-app/templates/webgl/.cursor/rules/integrations.mdc +0 -447
  151. package/packages/create-basement-app/templates/webgl/.cursor/rules/main.mdc +0 -278
  152. package/packages/create-basement-app/templates/webgl/.cursor/rules/styling.mdc +0 -433
  153. package/packages/create-basement-app/templates/webgl/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  154. package/packages/create-basement-app/templates/webgl/.github/workflows/lighthouse-to-slack.yml +0 -136
  155. package/packages/create-basement-app/templates/webgl/.vscode/extensions.json +0 -20
  156. package/packages/create-basement-app/templates/webgl/.vscode/settings.json +0 -105
  157. package/packages/create-basement-app/templates/webgl/app/favicon.ico +0 -0
  158. package/packages/create-basement-app/templates/webgl/app/layout.tsx +0 -104
  159. package/packages/create-basement-app/templates/webgl/app/robots.ts +0 -15
  160. package/packages/create-basement-app/templates/webgl/app/sitemap.ts +0 -16
  161. package/packages/create-basement-app/templates/webgl/components/layout/footer/index.tsx +0 -27
  162. package/packages/create-basement-app/templates/webgl/components/layout/header/index.tsx +0 -11
  163. package/packages/create-basement-app/templates/webgl/components/layout/theme/index.tsx +0 -66
  164. package/packages/create-basement-app/templates/webgl/components/layout/wrapper/index.tsx +0 -65
  165. package/packages/create-basement-app/templates/webgl/components/ui/README.md +0 -77
  166. package/packages/create-basement-app/templates/webgl/components/ui/image/README.md +0 -37
  167. package/packages/create-basement-app/templates/webgl/components/ui/image/index.tsx +0 -224
  168. package/packages/create-basement-app/templates/webgl/components/ui/link/index.tsx +0 -146
  169. package/packages/create-basement-app/templates/webgl/public/fonts/geist/Geist-Mono.woff2 +0 -0
  170. /package/{packages/create-basement-app/plugins → plugins}/no-anchor-element.grit +0 -0
  171. /package/{packages/create-basement-app/plugins → plugins}/no-relative-parent-imports.grit +0 -0
  172. /package/{packages/create-basement-app/plugins → plugins}/no-unnecessary-forwardref.grit +0 -0
  173. /package/{packages/create-basement-app → src}/template-hooks/config.js +0 -0
  174. /package/{packages/create-basement-app → src}/template-hooks/use-battery.ts +0 -0
  175. /package/{packages/create-basement-app → src}/template-hooks/use-device-perf.ts +0 -0
  176. /package/{packages/create-basement-app → src}/template-hooks/use-intersection-observer.ts +0 -0
  177. /package/{packages/create-basement-app → src}/template-hooks/use-media.ts +0 -0
  178. /package/{packages/create-basement-app → src/templates/next-default/.biome}/plugins/README.md +0 -0
  179. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.editorconfig +0 -0
  180. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.env.example +0 -0
  181. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.gitattributes +0 -0
  182. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/README.md +0 -0
  183. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/_gitignore +0 -0
  184. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/biome.json +0 -0
  185. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/components/basement.svg +0 -0
  186. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/README.md +0 -0
  187. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/index.ts +0 -0
  188. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-device-detection.ts +0 -0
  189. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-media-breakpoint.ts +0 -0
  190. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-prefetch.ts +0 -0
  191. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/integrations/.gitkeep +0 -0
  192. /package/{packages/create-basement-app/templates/webgl → src/templates/next-default}/lib/renderer.ts +0 -0
  193. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/dev.ts +0 -0
  194. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate-component.ts +0 -0
  195. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate-page.ts +0 -0
  196. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate.ts +0 -0
  197. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/utils.ts +0 -0
  198. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/store/app.ts +0 -0
  199. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/store/index.ts +0 -0
  200. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/README.md +0 -0
  201. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/cn.ts +0 -0
  202. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/colors.ts +0 -0
  203. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/config.ts +0 -0
  204. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/global.css +0 -0
  205. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/index.css +0 -0
  206. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/reset.css +0 -0
  207. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/root.css +0 -0
  208. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/tailwind.css +0 -0
  209. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/easings.ts +0 -0
  210. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/fonts.ts +0 -0
  211. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/index.ts +0 -0
  212. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/layout.mjs +0 -0
  213. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/README.md +0 -0
  214. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/generate-root.ts +0 -0
  215. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/generate-tailwind.ts +0 -0
  216. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/postcss-functions.mjs +0 -0
  217. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/setup-styles.ts +0 -0
  218. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/utils.ts +0 -0
  219. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/typography.ts +0 -0
  220. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/README.md +0 -0
  221. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/css.d.ts +0 -0
  222. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/easings.ts +0 -0
  223. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/fetch.ts +0 -0
  224. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/math.test.ts +0 -0
  225. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/math.ts +0 -0
  226. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/metadata.ts +0 -0
  227. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/strings.test.ts +0 -0
  228. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/strings.ts +0 -0
  229. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/types.d.ts +0 -0
  230. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/viewport.test.ts +0 -0
  231. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/viewport.ts +0 -0
  232. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/next.config.ts +0 -0
  233. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/package.json +0 -0
  234. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/postcss.config.mjs +0 -0
  235. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/tsconfig.json +0 -0
  236. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/README.md +0 -0
  237. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/no-anchor-element.grit +0 -0
  238. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/no-relative-parent-imports.grit +0 -0
  239. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/no-unnecessary-forwardref.grit +0 -0
  240. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.cursor/rules/README.md +0 -0
  241. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.cursor/rules/architecture.mdc +0 -0
  242. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.cursor/rules/components.mdc +0 -0
  243. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.cursor/rules/integrations.mdc +0 -0
  244. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.cursor/rules/main.mdc +0 -0
  245. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.cursor/rules/styling.mdc +0 -0
  246. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.editorconfig +0 -0
  247. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.env.example +0 -0
  248. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.gitattributes +0 -0
  249. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  250. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.github/workflows/lighthouse-to-slack.yml +0 -0
  251. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.vscode/extensions.json +0 -0
  252. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.vscode/settings.json +0 -0
  253. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/README.md +0 -0
  254. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/_gitignore +0 -0
  255. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/favicon.ico +0 -0
  256. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/layout.tsx +0 -0
  257. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/page.tsx +0 -0
  258. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/robots.ts +0 -0
  259. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/sitemap.ts +0 -0
  260. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/biome.json +0 -0
  261. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/basement.svg +0 -0
  262. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/footer/index.tsx +0 -0
  263. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/header/index.tsx +0 -0
  264. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/navigation-menu.tsx +0 -0
  265. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/theme/index.tsx +0 -0
  266. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/wrapper/index.tsx +0 -0
  267. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/README.md +0 -0
  268. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/image/README.md +0 -0
  269. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/image/index.tsx +0 -0
  270. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/link/index.tsx +0 -0
  271. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/README.md +0 -0
  272. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/constants.ts +0 -0
  273. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/index.ts +0 -0
  274. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-device-detection.ts +0 -0
  275. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-media-breakpoint.ts +0 -0
  276. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-prefetch.ts +0 -0
  277. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/integrations/.gitkeep +0 -0
  278. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/dev.ts +0 -0
  279. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate-component.ts +0 -0
  280. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate-page.ts +0 -0
  281. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate.ts +0 -0
  282. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/utils.ts +0 -0
  283. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/store/app.ts +0 -0
  284. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/store/index.ts +0 -0
  285. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/README.md +0 -0
  286. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/cn.ts +0 -0
  287. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/colors.ts +0 -0
  288. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/config.ts +0 -0
  289. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/global.css +0 -0
  290. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/index.css +0 -0
  291. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/reset.css +0 -0
  292. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/root.css +0 -0
  293. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/tailwind.css +0 -0
  294. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/easings.ts +0 -0
  295. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/fonts.ts +0 -0
  296. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/index.ts +0 -0
  297. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/layout.mjs +0 -0
  298. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/README.md +0 -0
  299. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/generate-root.ts +0 -0
  300. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/generate-tailwind.ts +0 -0
  301. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/postcss-functions.mjs +0 -0
  302. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/setup-styles.ts +0 -0
  303. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/utils.ts +0 -0
  304. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/typography.ts +0 -0
  305. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/README.md +0 -0
  306. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/css.d.ts +0 -0
  307. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/easings.ts +0 -0
  308. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/fetch.ts +0 -0
  309. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/math.test.ts +0 -0
  310. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/math.ts +0 -0
  311. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/metadata.ts +0 -0
  312. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/strings.test.ts +0 -0
  313. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/strings.ts +0 -0
  314. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/types.d.ts +0 -0
  315. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/viewport.test.ts +0 -0
  316. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/viewport.ts +0 -0
  317. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/next.config.ts +0 -0
  318. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/postcss.config.mjs +0 -0
  319. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/public/fonts/geist/Geist-Mono.woff2 +0 -0
  320. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/tsconfig.json +0 -0
  321. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/README.md +0 -0
  322. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/no-anchor-element.grit +0 -0
  323. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/no-relative-parent-imports.grit +0 -0
  324. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/no-unnecessary-forwardref.grit +0 -0
  325. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.cursor/rules/README.md +0 -0
  326. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.cursor/rules/architecture.mdc +0 -0
  327. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.cursor/rules/components.mdc +0 -0
  328. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.cursor/rules/integrations.mdc +0 -0
  329. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.cursor/rules/main.mdc +0 -0
  330. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.cursor/rules/styling.mdc +0 -0
  331. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.editorconfig +0 -0
  332. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.env.example +0 -0
  333. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.gitattributes +0 -0
  334. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  335. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.github/workflows/lighthouse-to-slack.yml +0 -0
  336. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.vscode/extensions.json +0 -0
  337. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.vscode/settings.json +0 -0
  338. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/README.md +0 -0
  339. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/_gitignore +0 -0
  340. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/favicon.ico +0 -0
  341. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/layout.tsx +0 -0
  342. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/app/page.tsx +0 -0
  343. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/robots.ts +0 -0
  344. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/sitemap.ts +0 -0
  345. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/biome.json +0 -0
  346. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/basement.svg +0 -0
  347. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/footer/index.tsx +0 -0
  348. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/components/layout/header/index.tsx +0 -0
  349. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/theme/index.tsx +0 -0
  350. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/wrapper/index.tsx +0 -0
  351. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/README.md +0 -0
  352. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/image/README.md +0 -0
  353. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/image/index.tsx +0 -0
  354. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/link/index.tsx +0 -0
  355. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/canvas/dynamic.tsx +0 -0
  356. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/canvas/index.tsx +0 -0
  357. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/components/scene/index.tsx +0 -0
  358. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/README.md +0 -0
  359. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/index.ts +0 -0
  360. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-device-detection.ts +0 -0
  361. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-media-breakpoint.ts +0 -0
  362. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-prefetch.ts +0 -0
  363. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/integrations/.gitkeep +0 -0
  364. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/dev.ts +0 -0
  365. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate-component.ts +0 -0
  366. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate-page.ts +0 -0
  367. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate.ts +0 -0
  368. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/utils.ts +0 -0
  369. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/store/app.ts +0 -0
  370. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/store/index.ts +0 -0
  371. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/README.md +0 -0
  372. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/cn.ts +0 -0
  373. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/colors.ts +0 -0
  374. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/config.ts +0 -0
  375. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/global.css +0 -0
  376. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/index.css +0 -0
  377. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/reset.css +0 -0
  378. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/root.css +0 -0
  379. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/tailwind.css +0 -0
  380. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/easings.ts +0 -0
  381. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/fonts.ts +0 -0
  382. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/index.ts +0 -0
  383. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/layout.mjs +0 -0
  384. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/README.md +0 -0
  385. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/generate-root.ts +0 -0
  386. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/generate-tailwind.ts +0 -0
  387. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/postcss-functions.mjs +0 -0
  388. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/setup-styles.ts +0 -0
  389. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/utils.ts +0 -0
  390. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/typography.ts +0 -0
  391. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/README.md +0 -0
  392. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/css.d.ts +0 -0
  393. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/easings.ts +0 -0
  394. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/fetch.ts +0 -0
  395. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/math.test.ts +0 -0
  396. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/math.ts +0 -0
  397. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/metadata.ts +0 -0
  398. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/strings.test.ts +0 -0
  399. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/strings.ts +0 -0
  400. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/types.d.ts +0 -0
  401. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/viewport.test.ts +0 -0
  402. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/viewport.ts +0 -0
  403. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/next.config.ts +0 -0
  404. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/postcss.config.mjs +0 -0
  405. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/public/fonts/geist/Geist-Mono.woff2 +0 -0
  406. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/tsconfig.json +0 -0
@@ -1,105 +0,0 @@
1
- // packages/create-basement-app/src/mergers/check-integration-merger.js
2
- import fs from "fs-extra";
3
-
4
- /**
5
- * Sanity configuration check function to add
6
- */
7
- const SANITY_FUNCTION = `
8
- /**
9
- * Check if Sanity CMS is configured
10
- * Requires: NEXT_PUBLIC_SANITY_PROJECT_ID and NEXT_PUBLIC_SANITY_DATASET
11
- */
12
- export function isSanityConfigured(): boolean {
13
- return Boolean(
14
- process.env.NEXT_PUBLIC_SANITY_PROJECT_ID &&
15
- process.env.NEXT_PUBLIC_SANITY_DATASET
16
- )
17
- }
18
- `;
19
-
20
- /**
21
- * Update to getConfiguredIntegrations to include Sanity
22
- */
23
- const SANITY_CONFIGURED_CHECK = ` if (isSanityConfigured()) integrations.push("Sanity")`;
24
-
25
- /**
26
- * Update to getUnconfiguredIntegrations to include Sanity
27
- */
28
- const SANITY_UNCONFIGURED_CHECK = ` if (!isSanityConfigured()) integrations.push("Sanity")`;
29
-
30
- /**
31
- * Merge Sanity integration into template check-integration
32
- * @param {string} templatePath - Path to the template's check-integration.ts
33
- * @returns {Promise<{skipped?: boolean, reason?: string, success?: boolean}>}
34
- */
35
- export async function mergeCheckIntegration(templatePath) {
36
- let content = await fs.readFile(templatePath, "utf-8");
37
-
38
- // Skip if already has isSanityConfigured
39
- if (content.includes("isSanityConfigured")) {
40
- return { skipped: true, reason: "Already has isSanityConfigured" };
41
- }
42
-
43
- // 1. Add isSanityConfigured function after isAnalyticsConfigured
44
- const analyticsMatch = content.match(
45
- /(export function isAnalyticsConfigured\(\)[^}]+\})/s,
46
- );
47
- if (analyticsMatch) {
48
- const insertPos = analyticsMatch.index + analyticsMatch[0].length;
49
- content =
50
- content.slice(0, insertPos) +
51
- "\n" +
52
- SANITY_FUNCTION +
53
- content.slice(insertPos);
54
- } else {
55
- // If no isAnalyticsConfigured, add before getConfiguredIntegrations
56
- const getConfiguredMatch = content.match(
57
- /export function getConfiguredIntegrations/,
58
- );
59
- if (getConfiguredMatch) {
60
- content =
61
- content.slice(0, getConfiguredMatch.index) +
62
- SANITY_FUNCTION +
63
- "\n" +
64
- content.slice(getConfiguredMatch.index);
65
- } else {
66
- // Fallback: append to end
67
- content = `${content.trimEnd()}\n${SANITY_FUNCTION}`;
68
- }
69
- }
70
-
71
- // 2. Update getConfiguredIntegrations to include Sanity check
72
- const configuredFnMatch = content.match(
73
- /(export function getConfiguredIntegrations\(\)[^{]*\{[\s\S]*?)(if \(isAnalyticsConfigured\(\)\))/m,
74
- );
75
- if (configuredFnMatch) {
76
- const insertPos = content.indexOf(
77
- configuredFnMatch[2],
78
- configuredFnMatch.index,
79
- );
80
- content =
81
- content.slice(0, insertPos) +
82
- SANITY_CONFIGURED_CHECK +
83
- "\n " +
84
- content.slice(insertPos);
85
- }
86
-
87
- // 3. Update getUnconfiguredIntegrations to include Sanity check
88
- const unconfiguredFnMatch = content.match(
89
- /(export function getUnconfiguredIntegrations\(\)[^{]*\{[\s\S]*?)(if \(!isAnalyticsConfigured\(\)\))/m,
90
- );
91
- if (unconfiguredFnMatch) {
92
- const insertPos = content.indexOf(
93
- unconfiguredFnMatch[2],
94
- unconfiguredFnMatch.index,
95
- );
96
- content =
97
- content.slice(0, insertPos) +
98
- SANITY_UNCONFIGURED_CHECK +
99
- "\n " +
100
- content.slice(insertPos);
101
- }
102
-
103
- await fs.writeFile(templatePath, content);
104
- return { success: true };
105
- }
@@ -1,223 +0,0 @@
1
- // packages/create-basement-app/src/mergers/layout-merger.js
2
-
3
- import path from "node:path";
4
- import fs from "fs-extra";
5
-
6
- /**
7
- * Sanity-specific imports to inject into layout.
8
- * Only two lightweight components — no dynamic functions (draftMode, headers, etc.)
9
- */
10
- const SANITY_IMPORTS = `import { SanityStudioGuard } from "@/components/sanity/studio-guard"
11
- import { SanityVisualEditing } from "@/components/sanity/visual-editing"`;
12
-
13
- /**
14
- * Client component that hides site chrome on /studio routes.
15
- * Uses useSelectedLayoutSegment() — a stable Next.js client API.
16
- */
17
- const STUDIO_GUARD_COMPONENT = `"use client"
18
-
19
- import { useSelectedLayoutSegment } from "next/navigation"
20
-
21
- export function SanityStudioGuard({ children }: { children: React.ReactNode }) {
22
- const segment = useSelectedLayoutSegment()
23
- if (segment === "studio") return null
24
- return <>{children}</>
25
- }
26
- `;
27
-
28
- /**
29
- * Server component that handles Sanity visual editing.
30
- * Keeps draftMode() inside its own <Suspense> boundary so the root layout
31
- * never calls dynamic functions directly — preserving static rendering.
32
- */
33
- const VISUAL_EDITING_COMPONENT = `import { Suspense } from "react"
34
- import { draftMode } from "next/headers"
35
- import { VisualEditing } from "next-sanity/visual-editing"
36
- import { isSanityConfigured } from "@/lib/integrations/check-integration"
37
- import { SanityLive } from "@/lib/integrations/sanity/live"
38
-
39
- async function VisualEditingInner() {
40
- const { isEnabled: isDraftMode } = await draftMode()
41
- const sanityConfigured = isSanityConfigured()
42
-
43
- if (!sanityConfigured || !isDraftMode) return null
44
-
45
- return (
46
- <>
47
- <VisualEditing />
48
- <SanityLive />
49
- </>
50
- )
51
- }
52
-
53
- export function SanityVisualEditing() {
54
- return (
55
- <Suspense fallback={null}>
56
- <VisualEditingInner />
57
- </Suspense>
58
- )
59
- }
60
- `;
61
-
62
- /**
63
- * Merge Sanity integration into template layout.
64
- * The layout itself stays free of dynamic functions (draftMode, headers, etc.)
65
- * All dynamic behavior is encapsulated in generated components.
66
- *
67
- * Strategy:
68
- * 1. Inject two imports (SanityStudioGuard, SanityVisualEditing)
69
- * 2. Wrap body chrome in <SanityStudioGuard>
70
- * 3. Add <SanityVisualEditing /> before </body>
71
- * 4. Generate the two component files
72
- *
73
- * @param {string} templatePath - Path to the template's layout.tsx
74
- * @param {object} options - Options from the merge orchestrator
75
- * @param {string} options.targetDir - The project root directory
76
- * @param {string} options.pathPrefix - Path prefix (e.g., 'src/' or '')
77
- * @returns {Promise<{skipped?: boolean, reason?: string, success?: boolean}>}
78
- */
79
- export async function mergeLayout(
80
- templatePath,
81
- { targetDir, pathPrefix } = {},
82
- ) {
83
- let content = await fs.readFile(templatePath, "utf-8");
84
-
85
- // Skip if already has Sanity integration
86
- if (
87
- content.includes("SanityStudioGuard") ||
88
- content.includes("isSanityConfigured")
89
- ) {
90
- return { skipped: true, reason: "Already has Sanity integration" };
91
- }
92
-
93
- // 1. Add Sanity imports after existing imports
94
- const importMatches = [...content.matchAll(/^import .+$/gm)];
95
- if (importMatches.length > 0) {
96
- const lastImport = importMatches[importMatches.length - 1];
97
- const insertPos = lastImport.index + lastImport[0].length;
98
- content =
99
- content.slice(0, insertPos) +
100
- "\n" +
101
- SANITY_IMPORTS +
102
- content.slice(insertPos);
103
- }
104
-
105
- // 2. Ensure Suspense is imported from react
106
- if (!content.match(/import\s+.*Suspense.*from\s+["']react["']/)) {
107
- const reactImportMatch = content.match(
108
- /import\s+\{([^}]*)\}\s+from\s+["']react["']/,
109
- );
110
- if (reactImportMatch) {
111
- if (!reactImportMatch[1].includes("Suspense")) {
112
- content = content.replace(
113
- reactImportMatch[0],
114
- reactImportMatch[0].replace(
115
- reactImportMatch[1],
116
- `${reactImportMatch[1].trim()}, Suspense`,
117
- ),
118
- );
119
- }
120
- } else {
121
- const lastImportMatch = content.match(/^(import\s+.+\n)/gm);
122
- if (lastImportMatch) {
123
- const lastImport = lastImportMatch[lastImportMatch.length - 1];
124
- content = content.replace(
125
- lastImport,
126
- `${lastImport}import { Suspense } from "react"\n`,
127
- );
128
- }
129
- }
130
- }
131
-
132
- // 3. Wrap body chrome in <SanityStudioGuard> and add <SanityVisualEditing />
133
- content = content.replace(
134
- /(\s*)(<body[^>]*>)([\s\S]*?)(\{children\})([\s\S]*?)(<\/body>)/m,
135
- (
136
- _match,
137
- bodyIndent,
138
- bodyOpen,
139
- beforeChildren,
140
- _childrenExpr,
141
- afterChildren,
142
- bodyClose,
143
- ) => {
144
- const baseIndent = bodyIndent || " ";
145
- const indent = `${baseIndent} `;
146
- const innerIndent = `${indent} `;
147
-
148
- const trimmedBefore = beforeChildren.trim();
149
- const trimmedAfter = afterChildren.trim();
150
- const hasChrome = trimmedBefore.length > 0 || trimmedAfter.length > 0;
151
-
152
- // Preserve relative indentation of chrome content
153
- const reindent = (text, targetIndent) => {
154
- const lines = text.split("\n").filter((line) => line.trim());
155
- if (lines.length === 0) return "";
156
- const minIndent = Math.min(
157
- ...lines
158
- .map((line) => line.match(/^(\s*)/)[1].length)
159
- .filter((n) => n > 0),
160
- Infinity,
161
- );
162
- return lines
163
- .map((line) => {
164
- const currentIndent = line.match(/^(\s*)/)[1].length;
165
- const relativeIndent = Math.max(
166
- 0,
167
- currentIndent - (minIndent === Infinity ? 0 : minIndent),
168
- );
169
- return targetIndent + " ".repeat(relativeIndent) + line.trim();
170
- })
171
- .join("\n");
172
- };
173
-
174
- let result = `${baseIndent}${bodyOpen}\n`;
175
-
176
- if (hasChrome && trimmedBefore) {
177
- result += `${indent}<Suspense fallback={null}>\n`;
178
- result += `${innerIndent}<SanityStudioGuard>\n`;
179
- result += reindent(trimmedBefore, `${innerIndent} `);
180
- result += `\n${innerIndent}</SanityStudioGuard>\n`;
181
- result += `${indent}</Suspense>\n\n`;
182
- }
183
-
184
- result += `${indent}{children}\n`;
185
-
186
- if (hasChrome && trimmedAfter) {
187
- result += `\n${indent}<Suspense fallback={null}>\n`;
188
- result += `${innerIndent}<SanityStudioGuard>\n`;
189
- result += reindent(trimmedAfter, `${innerIndent} `);
190
- result += `\n${innerIndent}</SanityStudioGuard>\n`;
191
- result += `${indent}</Suspense>\n`;
192
- }
193
-
194
- result += `\n${indent}<SanityVisualEditing />\n${baseIndent}${bodyClose}`;
195
- return result;
196
- },
197
- );
198
-
199
- await fs.writeFile(templatePath, content);
200
-
201
- // 3. Generate component files
202
- if (targetDir) {
203
- const sanityDir = path.join(
204
- targetDir,
205
- pathPrefix || "",
206
- "components",
207
- "sanity",
208
- );
209
- await fs.ensureDir(sanityDir);
210
-
211
- const guardPath = path.join(sanityDir, "studio-guard.tsx");
212
- if (!(await fs.pathExists(guardPath))) {
213
- await fs.writeFile(guardPath, STUDIO_GUARD_COMPONENT);
214
- }
215
-
216
- const visualEditingPath = path.join(sanityDir, "visual-editing.tsx");
217
- if (!(await fs.pathExists(visualEditingPath))) {
218
- await fs.writeFile(visualEditingPath, VISUAL_EDITING_COMPONENT);
219
- }
220
- }
221
-
222
- return { success: true };
223
- }
@@ -1,121 +0,0 @@
1
- // packages/create-basement-app/src/mergers/sitemap-merger.js
2
- import fs from "fs-extra";
3
-
4
- /**
5
- * Sanity-specific import to add
6
- */
7
- const SANITY_IMPORT = `import { isSanityConfigured } from "@/lib/integrations/check-integration"`;
8
-
9
- /**
10
- * Sanity fetch logic to inject before return statement
11
- * Uses early return pattern and spread operator for cleaner code
12
- */
13
- const SANITY_FETCH_LOGIC = `
14
- // Only fetch Sanity pages if Sanity is configured
15
- if (isSanityConfigured()) {
16
- try {
17
- const sanityModule = await import("@/lib/integrations/sanity/client")
18
- const sanityGroq = await import("next-sanity")
19
-
20
- const client = sanityModule?.client
21
- const groq = sanityGroq?.groq
22
-
23
- // Skip if client is null (shouldn't happen since we check isSanityConfigured)
24
- if (!(client && groq)) return baseRoutes
25
-
26
- type SanityDocument = {
27
- slug: { current: string }
28
- _updatedAt: string
29
- metadata?: { noIndex?: boolean }
30
- }
31
-
32
- // Fetch all published pages and articles
33
- const pages = (await client.fetch(
34
- groq\`*[_type == "page" && defined(slug.current)] {
35
- slug,
36
- _updatedAt,
37
- metadata
38
- }\`
39
- )) as SanityDocument[]
40
-
41
- const articles = (await client.fetch(
42
- groq\`*[_type == "article" && defined(slug.current)] {
43
- slug,
44
- _updatedAt,
45
- metadata
46
- }\`
47
- )) as SanityDocument[]
48
-
49
- // Add pages to sitemap (exclude noIndex pages)
50
- const pageEntries: MetadataRoute.Sitemap = pages
51
- .filter((page: SanityDocument) => !page.metadata?.noIndex)
52
- .map((page: SanityDocument) => ({
53
- url: \`\${APP_BASE_URL}/\${page.slug.current}\`,
54
- lastModified: new Date(page._updatedAt),
55
- changeFrequency: "weekly" as const,
56
- priority: 0.8,
57
- }))
58
-
59
- // Add articles to sitemap (exclude noIndex articles)
60
- const articleEntries: MetadataRoute.Sitemap = articles
61
- .filter((article: SanityDocument) => !article.metadata?.noIndex)
62
- .map((article: SanityDocument) => ({
63
- url: \`\${APP_BASE_URL}/blog/\${article.slug.current}\`,
64
- lastModified: new Date(article._updatedAt),
65
- changeFrequency: "weekly" as const,
66
- priority: 0.7,
67
- }))
68
-
69
- return [...baseRoutes, ...pageEntries, ...articleEntries]
70
- } catch (error) {
71
- console.error("Error generating sitemap from Sanity:", error)
72
- return baseRoutes
73
- }
74
- }
75
-
76
- `;
77
-
78
- /**
79
- * Merge Sanity integration into template sitemap
80
- * Preserves all existing agnostic code (routes, baseRoutes structure)
81
- * and injects Sanity-specific fetching logic
82
- *
83
- * @param {string} templatePath - Path to the template's sitemap.ts
84
- * @returns {Promise<{skipped?: boolean, reason?: string, success?: boolean}>}
85
- */
86
- export async function mergeSitemap(templatePath) {
87
- let content = await fs.readFile(templatePath, "utf-8");
88
-
89
- // Skip if already has Sanity integration
90
- if (content.includes("isSanityConfigured")) {
91
- return { skipped: true, reason: "Already has Sanity integration" };
92
- }
93
-
94
- // 1. Add Sanity import after existing imports
95
- const importMatches = [...content.matchAll(/^import .+$/gm)];
96
- if (importMatches.length > 0) {
97
- const lastImport = importMatches[importMatches.length - 1];
98
- const insertPos = lastImport.index + lastImport[0].length;
99
- content =
100
- content.slice(0, insertPos) +
101
- "\n" +
102
- SANITY_IMPORT +
103
- content.slice(insertPos);
104
- }
105
-
106
- // 2. Add Sanity fetch logic before the final return statement
107
- // Find the last "return baseRoutes" or "return [...baseRoutes" pattern
108
- const returnMatch = content.match(
109
- /(\n)([ \t]*)(return\s+(?:baseRoutes|\[\.\.\.baseRoutes))/m,
110
- );
111
- if (returnMatch) {
112
- const returnIndex = content.indexOf(returnMatch[0]);
113
- content =
114
- content.slice(0, returnIndex) +
115
- SANITY_FETCH_LOGIC +
116
- content.slice(returnIndex);
117
- }
118
-
119
- await fs.writeFile(templatePath, content);
120
- return { success: true };
121
- }
@@ -1,10 +0,0 @@
1
- {
2
- "name": "@basementstudio/create-basement-app",
3
- "version": "0.1.0",
4
- "description": "Template scaffolding and merge logic for basement projects",
5
- "type": "module",
6
- "main": "src/index.js",
7
- "dependencies": {
8
- "fs-extra": "^11.3.3"
9
- }
10
- }
@@ -1,28 +0,0 @@
1
- // packages/create-basement-app/src/configs/animations.js
2
-
3
- /**
4
- * Animation library configuration manifest.
5
- * Single source of truth for animation library dependencies.
6
- */
7
- export const ANIMATION_CONFIG = {
8
- gsap: {
9
- dependencies: {
10
- gsap: "^3.12.0",
11
- "@gsap/react": "^2.0.0",
12
- },
13
- },
14
- motion: {
15
- dependencies: {
16
- motion: "^12.0.0",
17
- },
18
- },
19
- };
20
-
21
- /**
22
- * Get configuration for a specific animation library
23
- * @param {string} name - The animation library name (e.g., 'gsap', 'motion')
24
- * @returns {object|null} Animation configuration or null if not found
25
- */
26
- export function getAnimationConfig(name) {
27
- return ANIMATION_CONFIG[name] || null;
28
- }
@@ -1,15 +0,0 @@
1
- // packages/create-basement-app/src/index.js
2
-
3
- export { ANIMATION_CONFIG, getAnimationConfig } from "./configs/animations.js";
4
- export {
5
- CMS_CONFIG,
6
- getCmsConfig,
7
- getLayerConfig,
8
- isCmsSupported,
9
- LAYER_CONFIG,
10
- } from "./mergers/config.js";
11
- export {
12
- formatMergeResults,
13
- injectIntegration,
14
- injectLayer,
15
- } from "./mergers/index.js";
@@ -1,105 +0,0 @@
1
- // packages/create-basement-app/src/mergers/check-integration-merger.js
2
- import fs from "fs-extra";
3
-
4
- /**
5
- * Sanity configuration check function to add
6
- */
7
- const SANITY_FUNCTION = `
8
- /**
9
- * Check if Sanity CMS is configured
10
- * Requires: NEXT_PUBLIC_SANITY_PROJECT_ID and NEXT_PUBLIC_SANITY_DATASET
11
- */
12
- export function isSanityConfigured(): boolean {
13
- return Boolean(
14
- process.env.NEXT_PUBLIC_SANITY_PROJECT_ID &&
15
- process.env.NEXT_PUBLIC_SANITY_DATASET
16
- )
17
- }
18
- `;
19
-
20
- /**
21
- * Update to getConfiguredIntegrations to include Sanity
22
- */
23
- const SANITY_CONFIGURED_CHECK = ` if (isSanityConfigured()) integrations.push("Sanity")`;
24
-
25
- /**
26
- * Update to getUnconfiguredIntegrations to include Sanity
27
- */
28
- const SANITY_UNCONFIGURED_CHECK = ` if (!isSanityConfigured()) integrations.push("Sanity")`;
29
-
30
- /**
31
- * Merge Sanity integration into template check-integration
32
- * @param {string} templatePath - Path to the template's check-integration.ts
33
- * @returns {Promise<{skipped?: boolean, reason?: string, success?: boolean}>}
34
- */
35
- export async function mergeCheckIntegration(templatePath) {
36
- let content = await fs.readFile(templatePath, "utf-8");
37
-
38
- // Skip if already has isSanityConfigured
39
- if (content.includes("isSanityConfigured")) {
40
- return { skipped: true, reason: "Already has isSanityConfigured" };
41
- }
42
-
43
- // 1. Add isSanityConfigured function after isAnalyticsConfigured
44
- const analyticsMatch = content.match(
45
- /(export function isAnalyticsConfigured\(\)[^}]+\})/s,
46
- );
47
- if (analyticsMatch) {
48
- const insertPos = analyticsMatch.index + analyticsMatch[0].length;
49
- content =
50
- content.slice(0, insertPos) +
51
- "\n" +
52
- SANITY_FUNCTION +
53
- content.slice(insertPos);
54
- } else {
55
- // If no isAnalyticsConfigured, add before getConfiguredIntegrations
56
- const getConfiguredMatch = content.match(
57
- /export function getConfiguredIntegrations/,
58
- );
59
- if (getConfiguredMatch) {
60
- content =
61
- content.slice(0, getConfiguredMatch.index) +
62
- SANITY_FUNCTION +
63
- "\n" +
64
- content.slice(getConfiguredMatch.index);
65
- } else {
66
- // Fallback: append to end
67
- content = `${content.trimEnd()}\n${SANITY_FUNCTION}`;
68
- }
69
- }
70
-
71
- // 2. Update getConfiguredIntegrations to include Sanity check
72
- const configuredFnMatch = content.match(
73
- /(export function getConfiguredIntegrations\(\)[^{]*\{[\s\S]*?)(if \(isAnalyticsConfigured\(\)\))/m,
74
- );
75
- if (configuredFnMatch) {
76
- const insertPos = content.indexOf(
77
- configuredFnMatch[2],
78
- configuredFnMatch.index,
79
- );
80
- content =
81
- content.slice(0, insertPos) +
82
- SANITY_CONFIGURED_CHECK +
83
- "\n " +
84
- content.slice(insertPos);
85
- }
86
-
87
- // 3. Update getUnconfiguredIntegrations to include Sanity check
88
- const unconfiguredFnMatch = content.match(
89
- /(export function getUnconfiguredIntegrations\(\)[^{]*\{[\s\S]*?)(if \(!isAnalyticsConfigured\(\)\))/m,
90
- );
91
- if (unconfiguredFnMatch) {
92
- const insertPos = content.indexOf(
93
- unconfiguredFnMatch[2],
94
- unconfiguredFnMatch.index,
95
- );
96
- content =
97
- content.slice(0, insertPos) +
98
- SANITY_UNCONFIGURED_CHECK +
99
- "\n " +
100
- content.slice(insertPos);
101
- }
102
-
103
- await fs.writeFile(templatePath, content);
104
- return { success: true };
105
- }