bsmnt 0.1.2 → 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 (447) 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 +25 -12
  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/.changeset/README.md +0 -10
  92. package/.changeset/config.json +0 -16
  93. package/.github/workflows/ci.yml +0 -37
  94. package/.github/workflows/release.yml +0 -56
  95. package/.tldr/cache/call_graph.json +0 -7
  96. package/.tldr/languages.json +0 -6
  97. package/.tldr/status +0 -1
  98. package/.tldrignore +0 -84
  99. package/.vscode/settings.json +0 -98
  100. package/CHANGELOG.md +0 -68
  101. package/CLAUDE.md +0 -156
  102. package/biome.json +0 -45
  103. package/bun.lock +0 -496
  104. package/changelog/04-02-26.md +0 -86
  105. package/changelog/05-02-26.md +0 -101
  106. package/changelog/09-02-26.md +0 -83
  107. package/docs/architecture.drawio +0 -250
  108. package/docs/architecture.mermaid +0 -85
  109. package/docs/fix-studio-hydration.md +0 -46
  110. package/docs/plans/2026-01-29-sanity-smart-merge-design.md +0 -196
  111. package/docs/plans/2026-01-29-sanity-smart-merge-implementation.md +0 -695
  112. package/docs/sanity-setup-steps.md +0 -199
  113. package/packages/cli/bin/index.js +0 -259
  114. package/packages/cli/package.json +0 -16
  115. package/packages/cli/src/commands/add-integration.js +0 -310
  116. package/packages/cli/src/commands/create.js +0 -409
  117. package/packages/cli/src/commands/setup-sanity.js +0 -426
  118. package/packages/cli/src/commands/worktree.js +0 -805
  119. package/packages/create-basement-app/integrations/sanity/config.js +0 -46
  120. package/packages/create-basement-app/integrations/sanity/files/app/api/draft-mode/disable/route.ts +0 -7
  121. package/packages/create-basement-app/integrations/sanity/files/app/api/draft-mode/enable/route.ts +0 -21
  122. package/packages/create-basement-app/integrations/sanity/files/app/api/revalidate/route.ts +0 -37
  123. package/packages/create-basement-app/integrations/sanity/files/app/layout.tsx +0 -111
  124. package/packages/create-basement-app/integrations/sanity/files/app/sitemap.ts +0 -80
  125. package/packages/create-basement-app/integrations/sanity/files/app/studio/[[...tool]]/page.tsx +0 -8
  126. package/packages/create-basement-app/integrations/sanity/files/app/studio/layout.tsx +0 -7
  127. package/packages/create-basement-app/integrations/sanity/files/components/ui/sanity-image/index.tsx +0 -37
  128. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/README.md +0 -58
  129. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/check-integration.ts +0 -62
  130. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/README.md +0 -144
  131. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/client.ts +0 -30
  132. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/components/disable-draft-mode.tsx +0 -29
  133. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/components/rich-text.tsx +0 -73
  134. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/env.ts +0 -38
  135. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/live/index.tsx +0 -34
  136. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/queries.ts +0 -99
  137. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.cli.ts +0 -20
  138. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.config.ts +0 -94
  139. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/sanity.types.ts +0 -337
  140. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schema.json +0 -1850
  141. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/article.ts +0 -132
  142. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/example.ts +0 -203
  143. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/index.ts +0 -37
  144. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/link.ts +0 -127
  145. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/metadata.ts +0 -68
  146. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/navigation.ts +0 -39
  147. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/page.ts +0 -77
  148. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/schemas/richText.ts +0 -59
  149. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/structure.ts +0 -5
  150. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/utils/image.ts +0 -11
  151. package/packages/create-basement-app/integrations/sanity/files/lib/integrations/sanity/utils/link.ts +0 -61
  152. package/packages/create-basement-app/integrations/sanity/files/lib/scripts/copy-sanity-mcp.ts +0 -23
  153. package/packages/create-basement-app/integrations/sanity/files/lib/scripts/generate-page.ts +0 -310
  154. package/packages/create-basement-app/integrations/sanity/files/lib/utils/metadata.ts +0 -190
  155. package/packages/create-basement-app/integrations/sanity/mergers/check-integration-merger.js +0 -105
  156. package/packages/create-basement-app/integrations/sanity/mergers/layout-merger.js +0 -223
  157. package/packages/create-basement-app/integrations/sanity/mergers/sitemap-merger.js +0 -121
  158. package/packages/create-basement-app/package.json +0 -10
  159. package/packages/create-basement-app/src/configs/animations.js +0 -28
  160. package/packages/create-basement-app/src/index.js +0 -15
  161. package/packages/create-basement-app/src/mergers/check-integration-merger.js +0 -105
  162. package/packages/create-basement-app/src/mergers/config.js +0 -109
  163. package/packages/create-basement-app/src/mergers/index.js +0 -346
  164. package/packages/create-basement-app/src/mergers/layout-merger.js +0 -223
  165. package/packages/create-basement-app/templates/experiment/.cursor/rules/README.md +0 -184
  166. package/packages/create-basement-app/templates/experiment/.cursor/rules/architecture.mdc +0 -437
  167. package/packages/create-basement-app/templates/experiment/.cursor/rules/components.mdc +0 -436
  168. package/packages/create-basement-app/templates/experiment/.cursor/rules/integrations.mdc +0 -447
  169. package/packages/create-basement-app/templates/experiment/.cursor/rules/main.mdc +0 -278
  170. package/packages/create-basement-app/templates/experiment/.cursor/rules/styling.mdc +0 -433
  171. package/packages/create-basement-app/templates/experiment/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  172. package/packages/create-basement-app/templates/experiment/.vscode/extensions.json +0 -20
  173. package/packages/create-basement-app/templates/experiment/app/page.tsx +0 -275
  174. package/packages/create-basement-app/templates/webgl/.biome/plugins/README.md +0 -21
  175. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-anchor-element.grit +0 -12
  176. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-relative-parent-imports.grit +0 -10
  177. package/packages/create-basement-app/templates/webgl/.biome/plugins/no-unnecessary-forwardref.grit +0 -9
  178. package/packages/create-basement-app/templates/webgl/.cursor/rules/README.md +0 -184
  179. package/packages/create-basement-app/templates/webgl/.cursor/rules/architecture.mdc +0 -437
  180. package/packages/create-basement-app/templates/webgl/.cursor/rules/components.mdc +0 -436
  181. package/packages/create-basement-app/templates/webgl/.cursor/rules/integrations.mdc +0 -447
  182. package/packages/create-basement-app/templates/webgl/.cursor/rules/main.mdc +0 -278
  183. package/packages/create-basement-app/templates/webgl/.cursor/rules/styling.mdc +0 -433
  184. package/packages/create-basement-app/templates/webgl/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  185. package/packages/create-basement-app/templates/webgl/.github/workflows/lighthouse-to-slack.yml +0 -136
  186. package/packages/create-basement-app/templates/webgl/.vscode/extensions.json +0 -20
  187. package/packages/create-basement-app/templates/webgl/.vscode/settings.json +0 -105
  188. package/packages/create-basement-app/templates/webgl/app/favicon.ico +0 -0
  189. package/packages/create-basement-app/templates/webgl/app/layout.tsx +0 -104
  190. package/packages/create-basement-app/templates/webgl/app/robots.ts +0 -15
  191. package/packages/create-basement-app/templates/webgl/app/sitemap.ts +0 -16
  192. package/packages/create-basement-app/templates/webgl/components/layout/footer/index.tsx +0 -27
  193. package/packages/create-basement-app/templates/webgl/components/layout/header/index.tsx +0 -11
  194. package/packages/create-basement-app/templates/webgl/components/layout/theme/index.tsx +0 -66
  195. package/packages/create-basement-app/templates/webgl/components/layout/wrapper/index.tsx +0 -65
  196. package/packages/create-basement-app/templates/webgl/components/ui/README.md +0 -77
  197. package/packages/create-basement-app/templates/webgl/components/ui/image/README.md +0 -37
  198. package/packages/create-basement-app/templates/webgl/components/ui/image/index.tsx +0 -224
  199. package/packages/create-basement-app/templates/webgl/components/ui/link/index.tsx +0 -146
  200. package/packages/create-basement-app/templates/webgl/lib/integrations/.gitkeep +0 -0
  201. package/packages/create-basement-app/templates/webgl/public/fonts/geist/Geist-Mono.woff2 +0 -0
  202. package/tasks/.last-branch +0 -1
  203. package/tasks/CLAUDE.md +0 -104
  204. package/tasks/archive/2026-02-09-next-starter-dynamic-layers/prd.json +0 -153
  205. package/tasks/archive/2026-02-09-next-starter-dynamic-layers/progress.txt +0 -115
  206. package/tasks/prd-next-starter-dynamic-layers.md +0 -184
  207. package/tasks/prd-project-restructure.md +0 -375
  208. package/tasks/prd.json +0 -289
  209. package/tasks/progress.txt +0 -309
  210. package/tasks/ralph.sh +0 -113
  211. /package/{packages/create-basement-app/plugins → plugins}/no-anchor-element.grit +0 -0
  212. /package/{packages/create-basement-app/plugins → plugins}/no-relative-parent-imports.grit +0 -0
  213. /package/{packages/create-basement-app/plugins → plugins}/no-unnecessary-forwardref.grit +0 -0
  214. /package/{packages/create-basement-app → src}/template-hooks/config.js +0 -0
  215. /package/{packages/create-basement-app → src}/template-hooks/use-battery.ts +0 -0
  216. /package/{packages/create-basement-app → src}/template-hooks/use-device-perf.ts +0 -0
  217. /package/{packages/create-basement-app → src}/template-hooks/use-intersection-observer.ts +0 -0
  218. /package/{packages/create-basement-app → src}/template-hooks/use-media.ts +0 -0
  219. /package/{packages/create-basement-app → src/templates/next-default/.biome}/plugins/README.md +0 -0
  220. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.editorconfig +0 -0
  221. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.env.example +0 -0
  222. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/.gitattributes +0 -0
  223. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/README.md +0 -0
  224. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/_gitignore +0 -0
  225. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/biome.json +0 -0
  226. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/components/basement.svg +0 -0
  227. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/README.md +0 -0
  228. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/index.ts +0 -0
  229. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-device-detection.ts +0 -0
  230. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-media-breakpoint.ts +0 -0
  231. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/hooks/use-prefetch.ts +0 -0
  232. /package/{.github/workflows → src/templates/next-default/lib/integrations}/.gitkeep +0 -0
  233. /package/{packages/create-basement-app/templates/webgl → src/templates/next-default}/lib/renderer.ts +0 -0
  234. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/dev.ts +0 -0
  235. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate-component.ts +0 -0
  236. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate-page.ts +0 -0
  237. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/generate.ts +0 -0
  238. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/scripts/utils.ts +0 -0
  239. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/store/app.ts +0 -0
  240. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/store/index.ts +0 -0
  241. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/README.md +0 -0
  242. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/cn.ts +0 -0
  243. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/colors.ts +0 -0
  244. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/config.ts +0 -0
  245. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/global.css +0 -0
  246. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/index.css +0 -0
  247. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/reset.css +0 -0
  248. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/root.css +0 -0
  249. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/css/tailwind.css +0 -0
  250. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/easings.ts +0 -0
  251. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/fonts.ts +0 -0
  252. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/index.ts +0 -0
  253. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/layout.mjs +0 -0
  254. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/README.md +0 -0
  255. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/generate-root.ts +0 -0
  256. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/generate-tailwind.ts +0 -0
  257. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/postcss-functions.mjs +0 -0
  258. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/setup-styles.ts +0 -0
  259. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/scripts/utils.ts +0 -0
  260. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/styles/typography.ts +0 -0
  261. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/README.md +0 -0
  262. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/css.d.ts +0 -0
  263. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/easings.ts +0 -0
  264. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/fetch.ts +0 -0
  265. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/math.test.ts +0 -0
  266. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/math.ts +0 -0
  267. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/metadata.ts +0 -0
  268. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/strings.test.ts +0 -0
  269. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/strings.ts +0 -0
  270. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/types.d.ts +0 -0
  271. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/viewport.test.ts +0 -0
  272. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/lib/utils/viewport.ts +0 -0
  273. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/next.config.ts +0 -0
  274. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/package.json +0 -0
  275. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/postcss.config.mjs +0 -0
  276. /package/{packages/create-basement-app/templates/default → src/templates/next-default}/tsconfig.json +0 -0
  277. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/README.md +0 -0
  278. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/no-anchor-element.grit +0 -0
  279. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/no-relative-parent-imports.grit +0 -0
  280. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.biome/plugins/no-unnecessary-forwardref.grit +0 -0
  281. /package/{.cursor → src/templates/next-experiments/.cursor}/rules/README.md +0 -0
  282. /package/{.cursor → src/templates/next-experiments/.cursor}/rules/architecture.mdc +0 -0
  283. /package/{.cursor → src/templates/next-experiments/.cursor}/rules/components.mdc +0 -0
  284. /package/{.cursor → src/templates/next-experiments/.cursor}/rules/integrations.mdc +0 -0
  285. /package/{.cursor → src/templates/next-experiments/.cursor}/rules/main.mdc +0 -0
  286. /package/{.cursor → src/templates/next-experiments/.cursor}/rules/styling.mdc +0 -0
  287. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.editorconfig +0 -0
  288. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.env.example +0 -0
  289. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/.gitattributes +0 -0
  290. /package/{.github → src/templates/next-experiments/.github}/PULL_REQUEST_TEMPLATE.md +0 -0
  291. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.github/workflows/lighthouse-to-slack.yml +0 -0
  292. /package/{.vscode → src/templates/next-experiments/.vscode}/extensions.json +0 -0
  293. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/.vscode/settings.json +0 -0
  294. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/README.md +0 -0
  295. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/_gitignore +0 -0
  296. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/favicon.ico +0 -0
  297. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/layout.tsx +0 -0
  298. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/page.tsx +0 -0
  299. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/robots.ts +0 -0
  300. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/app/sitemap.ts +0 -0
  301. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/biome.json +0 -0
  302. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/basement.svg +0 -0
  303. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/footer/index.tsx +0 -0
  304. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/header/index.tsx +0 -0
  305. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/components/layout/navigation-menu.tsx +0 -0
  306. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/theme/index.tsx +0 -0
  307. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/layout/wrapper/index.tsx +0 -0
  308. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/README.md +0 -0
  309. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/image/README.md +0 -0
  310. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/image/index.tsx +0 -0
  311. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/components/ui/link/index.tsx +0 -0
  312. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/README.md +0 -0
  313. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/constants.ts +0 -0
  314. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/index.ts +0 -0
  315. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-device-detection.ts +0 -0
  316. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-media-breakpoint.ts +0 -0
  317. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/hooks/use-prefetch.ts +0 -0
  318. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/lib/integrations/.gitkeep +0 -0
  319. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/dev.ts +0 -0
  320. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate-component.ts +0 -0
  321. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate-page.ts +0 -0
  322. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/generate.ts +0 -0
  323. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/scripts/utils.ts +0 -0
  324. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/store/app.ts +0 -0
  325. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/store/index.ts +0 -0
  326. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/README.md +0 -0
  327. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/cn.ts +0 -0
  328. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/colors.ts +0 -0
  329. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/config.ts +0 -0
  330. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/global.css +0 -0
  331. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/index.css +0 -0
  332. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/reset.css +0 -0
  333. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/root.css +0 -0
  334. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/css/tailwind.css +0 -0
  335. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/easings.ts +0 -0
  336. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/fonts.ts +0 -0
  337. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/index.ts +0 -0
  338. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/layout.mjs +0 -0
  339. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/README.md +0 -0
  340. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/generate-root.ts +0 -0
  341. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/generate-tailwind.ts +0 -0
  342. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/postcss-functions.mjs +0 -0
  343. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/setup-styles.ts +0 -0
  344. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/scripts/utils.ts +0 -0
  345. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/styles/typography.ts +0 -0
  346. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/README.md +0 -0
  347. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/css.d.ts +0 -0
  348. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/easings.ts +0 -0
  349. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/fetch.ts +0 -0
  350. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/math.test.ts +0 -0
  351. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/math.ts +0 -0
  352. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/metadata.ts +0 -0
  353. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/strings.test.ts +0 -0
  354. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/strings.ts +0 -0
  355. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/types.d.ts +0 -0
  356. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/viewport.test.ts +0 -0
  357. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/lib/utils/viewport.ts +0 -0
  358. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/next.config.ts +0 -0
  359. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/postcss.config.mjs +0 -0
  360. /package/{packages/create-basement-app/templates/default → src/templates/next-experiments}/public/fonts/geist/Geist-Mono.woff2 +0 -0
  361. /package/{packages/create-basement-app/templates/experiment → src/templates/next-experiments}/tsconfig.json +0 -0
  362. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/README.md +0 -0
  363. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/no-anchor-element.grit +0 -0
  364. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/no-relative-parent-imports.grit +0 -0
  365. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.biome/plugins/no-unnecessary-forwardref.grit +0 -0
  366. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/README.md +0 -0
  367. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/architecture.mdc +0 -0
  368. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/components.mdc +0 -0
  369. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/integrations.mdc +0 -0
  370. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/main.mdc +0 -0
  371. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.cursor/rules/styling.mdc +0 -0
  372. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.editorconfig +0 -0
  373. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.env.example +0 -0
  374. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/.gitattributes +0 -0
  375. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  376. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.github/workflows/lighthouse-to-slack.yml +0 -0
  377. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/.vscode/extensions.json +0 -0
  378. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/.vscode/settings.json +0 -0
  379. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/README.md +0 -0
  380. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/_gitignore +0 -0
  381. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/favicon.ico +0 -0
  382. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/layout.tsx +0 -0
  383. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/app/page.tsx +0 -0
  384. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/robots.ts +0 -0
  385. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/app/sitemap.ts +0 -0
  386. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/biome.json +0 -0
  387. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/basement.svg +0 -0
  388. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/footer/index.tsx +0 -0
  389. /package/{packages/create-basement-app/templates/default → src/templates/next-webgl}/components/layout/header/index.tsx +0 -0
  390. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/theme/index.tsx +0 -0
  391. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/layout/wrapper/index.tsx +0 -0
  392. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/README.md +0 -0
  393. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/image/README.md +0 -0
  394. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/image/index.tsx +0 -0
  395. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/components/ui/link/index.tsx +0 -0
  396. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/canvas/dynamic.tsx +0 -0
  397. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/canvas/index.tsx +0 -0
  398. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/components/webgl/components/scene/index.tsx +0 -0
  399. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/README.md +0 -0
  400. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/index.ts +0 -0
  401. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-device-detection.ts +0 -0
  402. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-media-breakpoint.ts +0 -0
  403. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/hooks/use-prefetch.ts +0 -0
  404. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/lib/integrations/.gitkeep +0 -0
  405. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/dev.ts +0 -0
  406. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate-component.ts +0 -0
  407. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate-page.ts +0 -0
  408. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/generate.ts +0 -0
  409. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/scripts/utils.ts +0 -0
  410. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/store/app.ts +0 -0
  411. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/store/index.ts +0 -0
  412. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/README.md +0 -0
  413. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/cn.ts +0 -0
  414. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/colors.ts +0 -0
  415. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/config.ts +0 -0
  416. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/global.css +0 -0
  417. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/index.css +0 -0
  418. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/reset.css +0 -0
  419. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/root.css +0 -0
  420. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/css/tailwind.css +0 -0
  421. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/easings.ts +0 -0
  422. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/fonts.ts +0 -0
  423. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/index.ts +0 -0
  424. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/layout.mjs +0 -0
  425. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/README.md +0 -0
  426. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/generate-root.ts +0 -0
  427. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/generate-tailwind.ts +0 -0
  428. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/postcss-functions.mjs +0 -0
  429. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/setup-styles.ts +0 -0
  430. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/scripts/utils.ts +0 -0
  431. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/styles/typography.ts +0 -0
  432. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/README.md +0 -0
  433. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/css.d.ts +0 -0
  434. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/easings.ts +0 -0
  435. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/fetch.ts +0 -0
  436. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/math.test.ts +0 -0
  437. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/math.ts +0 -0
  438. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/metadata.ts +0 -0
  439. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/strings.test.ts +0 -0
  440. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/strings.ts +0 -0
  441. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/types.d.ts +0 -0
  442. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/viewport.test.ts +0 -0
  443. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/lib/utils/viewport.ts +0 -0
  444. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/next.config.ts +0 -0
  445. /package/{packages/create-basement-app/templates/webgl → src/templates/next-webgl}/postcss.config.mjs +0 -0
  446. /package/{packages/create-basement-app/templates/experiment → src/templates/next-webgl}/public/fonts/geist/Geist-Mono.woff2 +0 -0
  447. /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
- }