create-nextblock 0.12.9 → 0.12.12

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 (293) hide show
  1. package/docker-template/.dockerignore +23 -23
  2. package/docker-template/.env.docker.example +69 -69
  3. package/docker-template/docker/db/init/99-jwt.sql +6 -6
  4. package/docker-template/docker/db/init/99-roles.sql +25 -25
  5. package/docker-template/docker/kong/kong.yml +112 -112
  6. package/docker-template/scripts/docker-setup.mjs +310 -310
  7. package/libs/db/tsconfig.lib.json +3 -3
  8. package/libs/editor/tsconfig.lib.json +3 -3
  9. package/libs/ui/tsconfig.lib.json +3 -3
  10. package/libs/utils/tsconfig.json +3 -3
  11. package/package.json +1 -1
  12. package/project.json +19 -19
  13. package/templates/nextblock-template/.browserslistrc +11 -11
  14. package/templates/nextblock-template/.dockerignore +23 -23
  15. package/templates/nextblock-template/README.md +34 -34
  16. package/templates/nextblock-template/app/(auth-pages)/layout.tsx +9 -9
  17. package/templates/nextblock-template/app/(auth-pages)/post-sign-in/page.tsx +27 -27
  18. package/templates/nextblock-template/app/(auth-pages)/sign-up/SignUpForm.tsx +141 -141
  19. package/templates/nextblock-template/app/(auth-pages)/sign-up/page.tsx +46 -46
  20. package/templates/nextblock-template/app/(auth-pages)/two-factor/actions.ts +91 -91
  21. package/templates/nextblock-template/app/(auth-pages)/two-factor/components/TwoFactorForm.tsx +123 -123
  22. package/templates/nextblock-template/app/(auth-pages)/two-factor/page.tsx +51 -51
  23. package/templates/nextblock-template/app/ToasterProvider.tsx +17 -17
  24. package/templates/nextblock-template/app/[slug]/pageClientActions.ts +7 -7
  25. package/templates/nextblock-template/app/actions/consent.ts +57 -57
  26. package/templates/nextblock-template/app/actions/interactions.test.ts +301 -301
  27. package/templates/nextblock-template/app/actions/interactions.ts +373 -373
  28. package/templates/nextblock-template/app/actions/postActions.ts +146 -146
  29. package/templates/nextblock-template/app/actions/twoFactorEmail.ts +22 -22
  30. package/templates/nextblock-template/app/api/ai/cortex/build-widget/route.ts +153 -153
  31. package/templates/nextblock-template/app/api/ai/generate-blocks/route.ts +96 -96
  32. package/templates/nextblock-template/app/api/ai/global-agent/route.ts +964 -964
  33. package/templates/nextblock-template/app/api/brand/email-logo/route.ts +48 -48
  34. package/templates/nextblock-template/app/api/cms/check-updates/route.ts +44 -44
  35. package/templates/nextblock-template/app/api/cms/full-backup/export/route.ts +33 -33
  36. package/templates/nextblock-template/app/api/cms/full-backup/restore/route.ts +63 -63
  37. package/templates/nextblock-template/app/api/cron/reset-sandbox/route.ts +3490 -3490
  38. package/templates/nextblock-template/app/api/cron/reset-sandbox/sandboxResetSql.ts +5597 -5597
  39. package/templates/nextblock-template/app/api/cron/sync-currencies/route.ts +39 -39
  40. package/templates/nextblock-template/app/api/custom-blocks/db-relations/route.ts +92 -92
  41. package/templates/nextblock-template/app/api/custom-blocks/editor-definitions/route.ts +43 -43
  42. package/templates/nextblock-template/app/api/media/library/route.ts +69 -69
  43. package/templates/nextblock-template/app/api/media/r2-presigned/route.ts +53 -53
  44. package/templates/nextblock-template/app/api/media/record/route.ts +160 -160
  45. package/templates/nextblock-template/app/api/search/route.ts +43 -43
  46. package/templates/nextblock-template/app/article/[slug]/PostClientContent.tsx +441 -441
  47. package/templates/nextblock-template/app/auth/callback/route.ts +31 -31
  48. package/templates/nextblock-template/app/cart/page.tsx +7 -7
  49. package/templates/nextblock-template/app/cms/blocks/components/CustomBlockEditorPreview.tsx +160 -160
  50. package/templates/nextblock-template/app/cms/blocks/components/MediaLibraryModal.tsx +149 -149
  51. package/templates/nextblock-template/app/cms/blocks/editors/DynamicCustomBlockEditor.tsx +167 -167
  52. package/templates/nextblock-template/app/cms/blocks/editors/ImageBlockEditor.tsx +29 -29
  53. package/templates/nextblock-template/app/cms/blocks/editors/TextBlockEditor.tsx +90 -90
  54. package/templates/nextblock-template/app/cms/components/ConnectGitHubButton.tsx +122 -122
  55. package/templates/nextblock-template/app/cms/components/CortexAiPageContext.tsx +58 -58
  56. package/templates/nextblock-template/app/cms/components/FeatureImageField.tsx +244 -244
  57. package/templates/nextblock-template/app/cms/components/FeedbackModal.tsx +36 -36
  58. package/templates/nextblock-template/app/cms/components/SystemAlertsBanner.tsx +112 -112
  59. package/templates/nextblock-template/app/cms/components/TwoFactorReminderBanner.tsx +45 -45
  60. package/templates/nextblock-template/app/cms/components/github-connect-actions.ts +102 -102
  61. package/templates/nextblock-template/app/cms/components/system-alerts-actions.ts +31 -31
  62. package/templates/nextblock-template/app/cms/custom-blocks/[id]/edit/page.tsx +66 -66
  63. package/templates/nextblock-template/app/cms/custom-blocks/actions.ts +519 -519
  64. package/templates/nextblock-template/app/cms/custom-blocks/components/BlockComposer.tsx +1522 -1522
  65. package/templates/nextblock-template/app/cms/custom-blocks/components/BlocksLibraryTransferControls.tsx +256 -256
  66. package/templates/nextblock-template/app/cms/custom-blocks/components/DBRelationSelect.tsx +384 -384
  67. package/templates/nextblock-template/app/cms/custom-blocks/components/ImageR2Picker.tsx +221 -221
  68. package/templates/nextblock-template/app/cms/custom-blocks/new/page.tsx +12 -12
  69. package/templates/nextblock-template/app/cms/custom-blocks/page.tsx +438 -438
  70. package/templates/nextblock-template/app/cms/dashboard/actions.ts +228 -228
  71. package/templates/nextblock-template/app/cms/dashboard/components/DashboardOnboarding.tsx +130 -130
  72. package/templates/nextblock-template/app/cms/import-export/ContentTransferControls.tsx +431 -391
  73. package/templates/nextblock-template/app/cms/import-export/actions.ts +226 -226
  74. package/templates/nextblock-template/app/cms/interactions/InteractionsModerationClient.tsx +408 -408
  75. package/templates/nextblock-template/app/cms/interactions/page.tsx +51 -51
  76. package/templates/nextblock-template/app/cms/layout.tsx +73 -73
  77. package/templates/nextblock-template/app/cms/media/components/FolderNavigator.tsx +273 -273
  78. package/templates/nextblock-template/app/cms/media/components/FolderTree.tsx +122 -122
  79. package/templates/nextblock-template/app/cms/media/components/MediaEditForm.tsx +26 -26
  80. package/templates/nextblock-template/app/cms/media/components/MediaGridClient.tsx +69 -69
  81. package/templates/nextblock-template/app/cms/media/components/MediaPickerDialog.tsx +149 -158
  82. package/templates/nextblock-template/app/cms/media/components/MediaUploadForm.tsx +101 -101
  83. package/templates/nextblock-template/app/cms/navigation/components/NavigationMenuDnd.tsx +3 -3
  84. package/templates/nextblock-template/app/cms/pages/page.tsx +18 -17
  85. package/templates/nextblock-template/app/cms/posts/page.tsx +19 -18
  86. package/templates/nextblock-template/app/cms/products/[id]/edit/page.tsx +12 -0
  87. package/templates/nextblock-template/app/cms/products/attributes/page.tsx +12 -12
  88. package/templates/nextblock-template/app/cms/products/categories/page.tsx +12 -12
  89. package/templates/nextblock-template/app/cms/products/inventory/page.tsx +13 -13
  90. package/templates/nextblock-template/app/cms/products/new/page.tsx +135 -135
  91. package/templates/nextblock-template/app/cms/products/page.tsx +39 -27
  92. package/templates/nextblock-template/app/cms/products/productFormData.ts +133 -133
  93. package/templates/nextblock-template/app/cms/products/settings/page.tsx +5 -5
  94. package/templates/nextblock-template/app/cms/promotions/PromotionsWorkspace.tsx +456 -456
  95. package/templates/nextblock-template/app/cms/promotions/actions.ts +115 -115
  96. package/templates/nextblock-template/app/cms/promotions/page.tsx +31 -31
  97. package/templates/nextblock-template/app/cms/revisions/service.ts +19 -19
  98. package/templates/nextblock-template/app/cms/revisions/utils.ts +132 -132
  99. package/templates/nextblock-template/app/cms/settings/backup-restore/BackupRestoreWorkspace.tsx +1004 -1004
  100. package/templates/nextblock-template/app/cms/settings/backup-restore/page.tsx +29 -29
  101. package/templates/nextblock-template/app/cms/settings/bot-protection/actions.ts +93 -93
  102. package/templates/nextblock-template/app/cms/settings/bot-protection/components/BotProtectionForm.tsx +129 -129
  103. package/templates/nextblock-template/app/cms/settings/bot-protection/page.tsx +24 -24
  104. package/templates/nextblock-template/app/cms/settings/cortex-ai/SandboxCortexAiSettingsClient.tsx +497 -497
  105. package/templates/nextblock-template/app/cms/settings/cortex-ai/StoredCortexAiSettingsClient.tsx +410 -410
  106. package/templates/nextblock-template/app/cms/settings/cortex-ai/actions.ts +246 -246
  107. package/templates/nextblock-template/app/cms/settings/cortex-ai/page.tsx +80 -80
  108. package/templates/nextblock-template/app/cms/settings/currencies/actions.ts +331 -331
  109. package/templates/nextblock-template/app/cms/settings/currencies/page.tsx +494 -494
  110. package/templates/nextblock-template/app/cms/settings/email/actions.ts +64 -64
  111. package/templates/nextblock-template/app/cms/settings/email/components/EmailForm.tsx +181 -181
  112. package/templates/nextblock-template/app/cms/settings/email/page.tsx +28 -28
  113. package/templates/nextblock-template/app/cms/settings/extra-translations/ExtraTranslationsWorkspace.tsx +767 -767
  114. package/templates/nextblock-template/app/cms/settings/extra-translations/page.tsx +93 -93
  115. package/templates/nextblock-template/app/cms/settings/google-analytics/actions.ts +60 -60
  116. package/templates/nextblock-template/app/cms/settings/google-analytics/components/GoogleAnalyticsForm.tsx +129 -129
  117. package/templates/nextblock-template/app/cms/settings/google-analytics/page.tsx +26 -26
  118. package/templates/nextblock-template/app/cms/settings/languages/actions.ts +16 -16
  119. package/templates/nextblock-template/app/cms/settings/logos/[id]/edit/page.tsx +7 -7
  120. package/templates/nextblock-template/app/cms/settings/logos/components/BrandingSettingsForm.tsx +339 -339
  121. package/templates/nextblock-template/app/cms/settings/logos/components/DeleteLogoButton.tsx +21 -21
  122. package/templates/nextblock-template/app/cms/settings/logos/components/LogoForm.tsx +20 -20
  123. package/templates/nextblock-template/app/cms/settings/logos/components/SetActiveLogoButton.tsx +42 -42
  124. package/templates/nextblock-template/app/cms/settings/logos/components/SiteSeoSettingsForm.tsx +133 -133
  125. package/templates/nextblock-template/app/cms/settings/logos/new/page.tsx +8 -8
  126. package/templates/nextblock-template/app/cms/settings/packages/package-card.tsx +122 -122
  127. package/templates/nextblock-template/app/cms/settings/privacy/actions.ts +52 -52
  128. package/templates/nextblock-template/app/cms/settings/privacy/components/PrivacyForm.tsx +148 -148
  129. package/templates/nextblock-template/app/cms/settings/privacy/page.tsx +27 -27
  130. package/templates/nextblock-template/app/cms/settings/registration/actions.ts +44 -44
  131. package/templates/nextblock-template/app/cms/settings/registration/components/RegistrationForm.tsx +65 -65
  132. package/templates/nextblock-template/app/cms/settings/registration/page.tsx +27 -27
  133. package/templates/nextblock-template/app/cms/settings/security/actions.ts +284 -284
  134. package/templates/nextblock-template/app/cms/settings/security/components/SecurityPanel.tsx +522 -522
  135. package/templates/nextblock-template/app/cms/settings/security/page.tsx +33 -33
  136. package/templates/nextblock-template/app/cms/settings/taxes/page.tsx +21 -21
  137. package/templates/nextblock-template/app/cms/shipping/page.tsx +20 -20
  138. package/templates/nextblock-template/app/cms/users/actions.ts +222 -222
  139. package/templates/nextblock-template/app/cms/users/components/DeleteUserButton.tsx +12 -12
  140. package/templates/nextblock-template/app/cms/users/components/UserForm.tsx +44 -44
  141. package/templates/nextblock-template/app/lib/site-settings.ts +105 -105
  142. package/templates/nextblock-template/app/lib/sitemap-utils.ts +253 -253
  143. package/templates/nextblock-template/app/profile/ProfileAccountSidebar.tsx +73 -73
  144. package/templates/nextblock-template/app/profile/ProfilePageHeader.tsx +16 -16
  145. package/templates/nextblock-template/app/profile/ProfilePageMissingState.tsx +9 -9
  146. package/templates/nextblock-template/app/profile/account-data.ts +37 -37
  147. package/templates/nextblock-template/app/profile/account-links.ts +22 -22
  148. package/templates/nextblock-template/app/profile/account-types.ts +11 -11
  149. package/templates/nextblock-template/app/profile/orders/CustomerOrdersPageClient.tsx +124 -124
  150. package/templates/nextblock-template/app/profile/orders/[id]/CustomerOrderDetailPageClient.tsx +79 -79
  151. package/templates/nextblock-template/app/profile/orders/[id]/page.tsx +32 -32
  152. package/templates/nextblock-template/app/profile/orders/page.tsx +19 -19
  153. package/templates/nextblock-template/app/profile/page.tsx +42 -42
  154. package/templates/nextblock-template/app/profile/password/PasswordSettingsPageClient.tsx +128 -128
  155. package/templates/nextblock-template/app/profile/password/actions.ts +59 -59
  156. package/templates/nextblock-template/app/profile/password/page.tsx +27 -27
  157. package/templates/nextblock-template/app/setup/SetupWizard.tsx +678 -678
  158. package/templates/nextblock-template/app/setup/layout.tsx +13 -13
  159. package/templates/nextblock-template/app/setup/page.tsx +111 -111
  160. package/templates/nextblock-template/app/sitemap.ts +130 -130
  161. package/templates/nextblock-template/components/CartDrawerLoader.tsx +7 -7
  162. package/templates/nextblock-template/components/DeferredCartDrawer.tsx +23 -23
  163. package/templates/nextblock-template/components/DeferredGoogleAnalytics.tsx +70 -70
  164. package/templates/nextblock-template/components/DeferredGoogleTagManager.tsx +70 -70
  165. package/templates/nextblock-template/components/DeferredSpeedInsights.tsx +69 -69
  166. package/templates/nextblock-template/components/FeatureImageHero.tsx +47 -47
  167. package/templates/nextblock-template/components/FooterNavigation.tsx +32 -32
  168. package/templates/nextblock-template/components/GitHubLoginButton.tsx +15 -15
  169. package/templates/nextblock-template/components/HtmlScriptExecutor.tsx +47 -47
  170. package/templates/nextblock-template/components/LanguageSwitcher.tsx +2 -2
  171. package/templates/nextblock-template/components/PostCommentsSection.tsx +369 -369
  172. package/templates/nextblock-template/components/ProductReviewsSection.tsx +419 -419
  173. package/templates/nextblock-template/components/PublicEnvBootstrap.tsx +30 -30
  174. package/templates/nextblock-template/components/ResponsiveNav.tsx +14 -14
  175. package/templates/nextblock-template/components/auth/AuthBotProtection.tsx +182 -182
  176. package/templates/nextblock-template/components/blocks/PostCardSkeleton.tsx +12 -12
  177. package/templates/nextblock-template/components/blocks/PostsGridBlock.tsx +12 -12
  178. package/templates/nextblock-template/components/blocks/ecommerceRendererLoaders.ts +23 -23
  179. package/templates/nextblock-template/components/blocks/renderers/FormBlockRenderer.tsx +249 -249
  180. package/templates/nextblock-template/components/blocks/types.ts +7 -7
  181. package/templates/nextblock-template/components/env-var-warning.tsx +3 -3
  182. package/templates/nextblock-template/components/form-message.tsx +32 -32
  183. package/templates/nextblock-template/components/privacy/ConsentBanner.tsx +170 -170
  184. package/templates/nextblock-template/components/privacy/ConsentGatedAnalytics.tsx +70 -70
  185. package/templates/nextblock-template/components/renderers/CachedDynamicLayoutEngine.tsx +28 -28
  186. package/templates/nextblock-template/components/renderers/DynamicLayoutEngine.test.tsx +166 -166
  187. package/templates/nextblock-template/components/renderers/DynamicLayoutEngine.tsx +464 -464
  188. package/templates/nextblock-template/components/submit-button.tsx +23 -23
  189. package/templates/nextblock-template/components/theme-switcher.tsx +8 -8
  190. package/templates/nextblock-template/components/visual-editing/DeferredVisualEditing.tsx +21 -21
  191. package/templates/nextblock-template/context/AuthContext.tsx +23 -23
  192. package/templates/nextblock-template/context/LanguageContext.tsx +16 -16
  193. package/templates/nextblock-template/context/language-rest-client.ts +32 -32
  194. package/templates/nextblock-template/docker/db/init/99-jwt.sql +6 -6
  195. package/templates/nextblock-template/docker/db/init/99-roles.sql +25 -25
  196. package/templates/nextblock-template/docker/kong/kong.yml +112 -112
  197. package/templates/nextblock-template/docs/01-PROJECT-OVERVIEW.md +94 -94
  198. package/templates/nextblock-template/docs/02-ECOMMERCE-CAPABILITIES.md +364 -364
  199. package/templates/nextblock-template/docs/03-CMS-AND-EDITOR.md +202 -202
  200. package/templates/nextblock-template/docs/04-DATABASE-AND-AUTH.md +246 -246
  201. package/templates/nextblock-template/docs/06-CLI-AND-SCAFFOLDING.md +176 -176
  202. package/templates/nextblock-template/docs/07-BLOCK-SDK-AND-EXTENSIBILITY.md +146 -146
  203. package/templates/nextblock-template/docs/08-NEXTBLOCK-CORTEX-AI-ARCHITECTURE.md +1319 -1319
  204. package/templates/nextblock-template/docs/10-CUSTOM-BLOCKS.md +222 -222
  205. package/templates/nextblock-template/docs/11-SELF-HOSTED-DOCKER.md +173 -173
  206. package/templates/nextblock-template/docs/12-VERCEL-DEPLOYMENT.md +170 -170
  207. package/templates/nextblock-template/docs/13-STAYING-UP-TO-DATE.md +151 -151
  208. package/templates/nextblock-template/docs/README.md +39 -39
  209. package/templates/nextblock-template/docs/TECHNICAL_SPECIFICATION.md +12505 -12505
  210. package/templates/nextblock-template/hooks/use-hotkeys.ts +21 -21
  211. package/templates/nextblock-template/hooks/useGlobalSearch.ts +101 -101
  212. package/templates/nextblock-template/index.d.ts +7 -7
  213. package/templates/nextblock-template/lib/app-secrets.ts +39 -39
  214. package/templates/nextblock-template/lib/auth/cookies.ts +47 -47
  215. package/templates/nextblock-template/lib/auth/crypto.ts +45 -45
  216. package/templates/nextblock-template/lib/auth/trustedDevices.ts +92 -92
  217. package/templates/nextblock-template/lib/auth/twoFactor.ts +208 -208
  218. package/templates/nextblock-template/lib/auth-redirects.ts +46 -46
  219. package/templates/nextblock-template/lib/blocks/README.md +13 -13
  220. package/templates/nextblock-template/lib/blocks/blockRegistry.ts +6 -6
  221. package/templates/nextblock-template/lib/blocks/blockTypes.ts +18 -18
  222. package/templates/nextblock-template/lib/botProtection/verify.ts +134 -134
  223. package/templates/nextblock-template/lib/cms-transfer/csv.test.ts +100 -77
  224. package/templates/nextblock-template/lib/cms-transfer/csv.ts +403 -399
  225. package/templates/nextblock-template/lib/cms-transfer/server.ts +2243 -2243
  226. package/templates/nextblock-template/lib/cms-transfer/types.ts +145 -145
  227. package/templates/nextblock-template/lib/config/email-settings.ts +217 -217
  228. package/templates/nextblock-template/lib/custom-block-definitions.ts +87 -87
  229. package/templates/nextblock-template/lib/custom-block-r2-upload-shared.ts +178 -178
  230. package/templates/nextblock-template/lib/custom-block-r2-upload.test.ts +140 -140
  231. package/templates/nextblock-template/lib/custom-block-r2-upload.ts +88 -88
  232. package/templates/nextblock-template/lib/custom-block-relation-registry.ts +256 -256
  233. package/templates/nextblock-template/lib/custom-block-relations.test.ts +227 -227
  234. package/templates/nextblock-template/lib/custom-block-relations.ts +279 -279
  235. package/templates/nextblock-template/lib/custom-block-safelist.ts +14 -14
  236. package/templates/nextblock-template/lib/editor/dynamic-extension-core.test.ts +172 -172
  237. package/templates/nextblock-template/lib/editor/dynamic-extension-core.ts +213 -213
  238. package/templates/nextblock-template/lib/editor/dynamic-extension-loader.ts +22 -22
  239. package/templates/nextblock-template/lib/editor/dynamic-extensions.tsx +193 -193
  240. package/templates/nextblock-template/lib/email/branding-format.test.ts +133 -133
  241. package/templates/nextblock-template/lib/email/branding-format.ts +123 -123
  242. package/templates/nextblock-template/lib/email/branding.ts +76 -76
  243. package/templates/nextblock-template/lib/full-backup/manifest.test.ts +121 -121
  244. package/templates/nextblock-template/lib/full-backup/manifest.ts +206 -206
  245. package/templates/nextblock-template/lib/full-backup/server.ts +743 -743
  246. package/templates/nextblock-template/lib/logos/active-logo.ts +53 -53
  247. package/templates/nextblock-template/lib/media/resolveMediaUrl.ts +54 -54
  248. package/templates/nextblock-template/lib/onboarding/actions.ts +31 -31
  249. package/templates/nextblock-template/lib/onboarding/status.ts +222 -222
  250. package/templates/nextblock-template/lib/posts/readTime.ts +60 -60
  251. package/templates/nextblock-template/lib/privacy/consent-client.ts +57 -57
  252. package/templates/nextblock-template/lib/privacy/contact-emails.ts +64 -64
  253. package/templates/nextblock-template/lib/privacy/settings.ts +115 -115
  254. package/templates/nextblock-template/lib/privacy/types.ts +69 -69
  255. package/templates/nextblock-template/lib/promotions/server.test.ts +74 -74
  256. package/templates/nextblock-template/lib/promotions/server.ts +741 -741
  257. package/templates/nextblock-template/lib/resolve-block-relations.test.ts +142 -142
  258. package/templates/nextblock-template/lib/resolve-block-relations.ts +255 -255
  259. package/templates/nextblock-template/lib/search/server.ts +585 -585
  260. package/templates/nextblock-template/lib/search/types.ts +27 -27
  261. package/templates/nextblock-template/lib/setup/actions.ts +460 -460
  262. package/templates/nextblock-template/lib/setup/env-status.ts +125 -125
  263. package/templates/nextblock-template/lib/setup/env-write.ts +111 -111
  264. package/templates/nextblock-template/lib/setup/migrations-bundle.ts +37 -37
  265. package/templates/nextblock-template/lib/setup/provisioning.ts +59 -59
  266. package/templates/nextblock-template/lib/setup/schema-apply.ts +408 -408
  267. package/templates/nextblock-template/lib/setup/system-config.ts +105 -105
  268. package/templates/nextblock-template/lib/setup/types.ts +18 -18
  269. package/templates/nextblock-template/lib/site-url.ts +48 -48
  270. package/templates/nextblock-template/lib/storage/provider.ts +66 -66
  271. package/templates/nextblock-template/lib/storage/supabase-storage.ts +103 -103
  272. package/templates/nextblock-template/lib/updates/check-upstream.ts +441 -441
  273. package/templates/nextblock-template/lib/updates/github-device.ts +206 -206
  274. package/templates/nextblock-template/lib/updates/repo-identity.ts +56 -56
  275. package/templates/nextblock-template/package.json +1 -1
  276. package/templates/nextblock-template/postcss.config.js +6 -6
  277. package/templates/nextblock-template/scripts/backup.js +115 -115
  278. package/templates/nextblock-template/scripts/docker-setup.mjs +310 -310
  279. package/templates/nextblock-template/scripts/restore.js +385 -385
  280. package/templates/nextblock-template/scripts/verify-cortex-ai-build-widget.tsx +98 -98
  281. package/templates/nextblock-template/scripts/verify-cortex-ai-generate-blocks.ts +62 -62
  282. package/templates/nextblock-template/scripts/verify-cortex-ai-global-tools.ts +537 -537
  283. package/templates/nextblock-template/scripts/verify-cortex-ai-routing.ts +58 -58
  284. package/templates/nextblock-template/scripts/verify-custom-block-definitions.ts +188 -188
  285. package/templates/nextblock-template/scripts/verify-dynamic-custom-block-extensions.ts +123 -123
  286. package/templates/nextblock-template/scripts/verify-dynamic-layout-engine.tsx +133 -133
  287. package/templates/nextblock-template/scripts/verify-milestone-2-custom-blocks.ts +65 -65
  288. package/templates/nextblock-template/tailwind.config.js +25 -25
  289. package/templates/nextblock-template/tools/build-migrate.mjs +209 -209
  290. package/templates/nextblock-template/tools/configure-supabase-auth.js +282 -282
  291. package/templates/nextblock-template/types/jsdom.d.ts +6 -6
  292. package/tsconfig.base.json +3 -3
  293. package/templates/nextblock-template/tsconfig.tsbuildinfo +0 -1
@@ -1,226 +1,226 @@
1
- "use server";
2
-
3
- import {
4
- applyBundleImport,
5
- applyCsvImport,
6
- buildCsvTemplate,
7
- dryRunBundleImport,
8
- dryRunCsvImport,
9
- exportBackupBundle,
10
- exportCsv,
11
- } from "../../../lib/cms-transfer/server";
12
- import type {
13
- CmsContentType,
14
- CmsImportApplyMode,
15
- CmsImportConflictMode,
16
- CmsTransferActionResult,
17
- } from "../../../lib/cms-transfer/types";
18
-
19
- function dateStamp() {
20
- return new Date().toISOString().slice(0, 10);
21
- }
22
-
23
- function contentLabel(contentType: CmsContentType) {
24
- return contentType === "pages" ? "pages" : contentType === "posts" ? "posts" : "products";
25
- }
26
-
27
- export async function getCmsCsvTemplateAction(
28
- contentType: CmsContentType
29
- ): Promise<CmsTransferActionResult> {
30
- try {
31
- return {
32
- success: true,
33
- fileName: `nextblock-${contentLabel(contentType)}-import-template.csv`,
34
- mimeType: "text/csv",
35
- content: buildCsvTemplate(contentType),
36
- };
37
- } catch (error) {
38
- return {
39
- success: false,
40
- error: error instanceof Error ? error.message : "Failed to build template.",
41
- };
42
- }
43
- }
44
-
45
- export async function exportCmsCsvAction(params: {
46
- contentType: CmsContentType;
47
- languageId?: number;
48
- }): Promise<CmsTransferActionResult> {
49
- try {
50
- return {
51
- success: true,
52
- fileName: `nextblock-${contentLabel(params.contentType)}-${dateStamp()}.csv`,
53
- mimeType: "text/csv",
54
- content: await exportCsv(params),
55
- };
56
- } catch (error) {
57
- return {
58
- success: false,
59
- error: error instanceof Error ? error.message : "Failed to export CSV.",
60
- };
61
- }
62
- }
63
-
64
- export async function dryRunCmsCsvImportAction(params: {
65
- contentType: CmsContentType;
66
- csv: string;
67
- conflictMode: CmsImportConflictMode;
68
- applyMode: CmsImportApplyMode;
69
- ignoreBlankFields?: boolean;
70
- }) {
71
- try {
72
- return await dryRunCsvImport({
73
- contentType: params.contentType,
74
- csv: params.csv,
75
- options: {
76
- conflictMode: params.conflictMode,
77
- applyMode: params.applyMode,
78
- ignoreBlankFields: params.ignoreBlankFields,
79
- },
80
- });
81
- } catch (error) {
82
- return {
83
- success: false,
84
- totalRows: 0,
85
- created: 0,
86
- updated: 0,
87
- skipped: 0,
88
- preview: [],
89
- warnings: [],
90
- errors: [
91
- {
92
- row: 0,
93
- type: "error" as const,
94
- message: error instanceof Error ? error.message : "Failed to dry-run import.",
95
- },
96
- ],
97
- };
98
- }
99
- }
100
-
101
- export async function applyCmsCsvImportAction(params: {
102
- contentType: CmsContentType;
103
- csv: string;
104
- conflictMode: CmsImportConflictMode;
105
- applyMode: CmsImportApplyMode;
106
- ignoreBlankFields?: boolean;
107
- }) {
108
- try {
109
- return await applyCsvImport({
110
- contentType: params.contentType,
111
- csv: params.csv,
112
- options: {
113
- conflictMode: params.conflictMode,
114
- applyMode: params.applyMode,
115
- ignoreBlankFields: params.ignoreBlankFields,
116
- },
117
- });
118
- } catch (error) {
119
- return {
120
- success: false,
121
- totalRows: 0,
122
- created: 0,
123
- updated: 0,
124
- skipped: 0,
125
- preview: [],
126
- warnings: [],
127
- errors: [
128
- {
129
- row: 0,
130
- type: "error" as const,
131
- message: error instanceof Error ? error.message : "Failed to apply import.",
132
- },
133
- ],
134
- };
135
- }
136
- }
137
-
138
- export async function exportCmsBackupBundleAction(): Promise<CmsTransferActionResult> {
139
- try {
140
- return {
141
- success: true,
142
- fileName: `nextblock-content-backup-${dateStamp()}.json`,
143
- mimeType: "application/json",
144
- content: await exportBackupBundle(),
145
- };
146
- } catch (error) {
147
- return {
148
- success: false,
149
- error: error instanceof Error ? error.message : "Failed to export backup bundle.",
150
- };
151
- }
152
- }
153
-
154
- export async function dryRunCmsBackupBundleImportAction(params: {
155
- bundleJson: string;
156
- contentTypes: CmsContentType[];
157
- conflictMode: CmsImportConflictMode;
158
- applyMode: CmsImportApplyMode;
159
- includeBlocks?: boolean;
160
- }) {
161
- try {
162
- return await dryRunBundleImport({
163
- bundleJson: params.bundleJson,
164
- contentTypes: params.contentTypes,
165
- includeBlocks: params.includeBlocks,
166
- options: {
167
- conflictMode: params.conflictMode,
168
- applyMode: params.applyMode,
169
- },
170
- });
171
- } catch (error) {
172
- return {
173
- success: false,
174
- totalRows: 0,
175
- created: 0,
176
- updated: 0,
177
- skipped: 0,
178
- preview: [],
179
- warnings: [],
180
- errors: [
181
- {
182
- row: 0,
183
- type: "error" as const,
184
- message: error instanceof Error ? error.message : "Failed to dry-run backup import.",
185
- },
186
- ],
187
- };
188
- }
189
- }
190
-
191
- export async function applyCmsBackupBundleImportAction(params: {
192
- bundleJson: string;
193
- contentTypes: CmsContentType[];
194
- conflictMode: CmsImportConflictMode;
195
- applyMode: CmsImportApplyMode;
196
- includeBlocks?: boolean;
197
- }) {
198
- try {
199
- return await applyBundleImport({
200
- bundleJson: params.bundleJson,
201
- contentTypes: params.contentTypes,
202
- includeBlocks: params.includeBlocks,
203
- options: {
204
- conflictMode: params.conflictMode,
205
- applyMode: params.applyMode,
206
- },
207
- });
208
- } catch (error) {
209
- return {
210
- success: false,
211
- totalRows: 0,
212
- created: 0,
213
- updated: 0,
214
- skipped: 0,
215
- preview: [],
216
- warnings: [],
217
- errors: [
218
- {
219
- row: 0,
220
- type: "error" as const,
221
- message: error instanceof Error ? error.message : "Failed to apply backup import.",
222
- },
223
- ],
224
- };
225
- }
226
- }
1
+ "use server";
2
+
3
+ import {
4
+ applyBundleImport,
5
+ applyCsvImport,
6
+ buildCsvTemplate,
7
+ dryRunBundleImport,
8
+ dryRunCsvImport,
9
+ exportBackupBundle,
10
+ exportCsv,
11
+ } from "../../../lib/cms-transfer/server";
12
+ import type {
13
+ CmsContentType,
14
+ CmsImportApplyMode,
15
+ CmsImportConflictMode,
16
+ CmsTransferActionResult,
17
+ } from "../../../lib/cms-transfer/types";
18
+
19
+ function dateStamp() {
20
+ return new Date().toISOString().slice(0, 10);
21
+ }
22
+
23
+ function contentLabel(contentType: CmsContentType) {
24
+ return contentType === "pages" ? "pages" : contentType === "posts" ? "posts" : "products";
25
+ }
26
+
27
+ export async function getCmsCsvTemplateAction(
28
+ contentType: CmsContentType
29
+ ): Promise<CmsTransferActionResult> {
30
+ try {
31
+ return {
32
+ success: true,
33
+ fileName: `nextblock-${contentLabel(contentType)}-import-template.csv`,
34
+ mimeType: "text/csv",
35
+ content: buildCsvTemplate(contentType),
36
+ };
37
+ } catch (error) {
38
+ return {
39
+ success: false,
40
+ error: error instanceof Error ? error.message : "Failed to build template.",
41
+ };
42
+ }
43
+ }
44
+
45
+ export async function exportCmsCsvAction(params: {
46
+ contentType: CmsContentType;
47
+ languageId?: number;
48
+ }): Promise<CmsTransferActionResult> {
49
+ try {
50
+ return {
51
+ success: true,
52
+ fileName: `nextblock-${contentLabel(params.contentType)}-${dateStamp()}.csv`,
53
+ mimeType: "text/csv",
54
+ content: await exportCsv(params),
55
+ };
56
+ } catch (error) {
57
+ return {
58
+ success: false,
59
+ error: error instanceof Error ? error.message : "Failed to export CSV.",
60
+ };
61
+ }
62
+ }
63
+
64
+ export async function dryRunCmsCsvImportAction(params: {
65
+ contentType: CmsContentType;
66
+ csv: string;
67
+ conflictMode: CmsImportConflictMode;
68
+ applyMode: CmsImportApplyMode;
69
+ ignoreBlankFields?: boolean;
70
+ }) {
71
+ try {
72
+ return await dryRunCsvImport({
73
+ contentType: params.contentType,
74
+ csv: params.csv,
75
+ options: {
76
+ conflictMode: params.conflictMode,
77
+ applyMode: params.applyMode,
78
+ ignoreBlankFields: params.ignoreBlankFields,
79
+ },
80
+ });
81
+ } catch (error) {
82
+ return {
83
+ success: false,
84
+ totalRows: 0,
85
+ created: 0,
86
+ updated: 0,
87
+ skipped: 0,
88
+ preview: [],
89
+ warnings: [],
90
+ errors: [
91
+ {
92
+ row: 0,
93
+ type: "error" as const,
94
+ message: error instanceof Error ? error.message : "Failed to dry-run import.",
95
+ },
96
+ ],
97
+ };
98
+ }
99
+ }
100
+
101
+ export async function applyCmsCsvImportAction(params: {
102
+ contentType: CmsContentType;
103
+ csv: string;
104
+ conflictMode: CmsImportConflictMode;
105
+ applyMode: CmsImportApplyMode;
106
+ ignoreBlankFields?: boolean;
107
+ }) {
108
+ try {
109
+ return await applyCsvImport({
110
+ contentType: params.contentType,
111
+ csv: params.csv,
112
+ options: {
113
+ conflictMode: params.conflictMode,
114
+ applyMode: params.applyMode,
115
+ ignoreBlankFields: params.ignoreBlankFields,
116
+ },
117
+ });
118
+ } catch (error) {
119
+ return {
120
+ success: false,
121
+ totalRows: 0,
122
+ created: 0,
123
+ updated: 0,
124
+ skipped: 0,
125
+ preview: [],
126
+ warnings: [],
127
+ errors: [
128
+ {
129
+ row: 0,
130
+ type: "error" as const,
131
+ message: error instanceof Error ? error.message : "Failed to apply import.",
132
+ },
133
+ ],
134
+ };
135
+ }
136
+ }
137
+
138
+ export async function exportCmsBackupBundleAction(): Promise<CmsTransferActionResult> {
139
+ try {
140
+ return {
141
+ success: true,
142
+ fileName: `nextblock-content-backup-${dateStamp()}.json`,
143
+ mimeType: "application/json",
144
+ content: await exportBackupBundle(),
145
+ };
146
+ } catch (error) {
147
+ return {
148
+ success: false,
149
+ error: error instanceof Error ? error.message : "Failed to export backup bundle.",
150
+ };
151
+ }
152
+ }
153
+
154
+ export async function dryRunCmsBackupBundleImportAction(params: {
155
+ bundleJson: string;
156
+ contentTypes: CmsContentType[];
157
+ conflictMode: CmsImportConflictMode;
158
+ applyMode: CmsImportApplyMode;
159
+ includeBlocks?: boolean;
160
+ }) {
161
+ try {
162
+ return await dryRunBundleImport({
163
+ bundleJson: params.bundleJson,
164
+ contentTypes: params.contentTypes,
165
+ includeBlocks: params.includeBlocks,
166
+ options: {
167
+ conflictMode: params.conflictMode,
168
+ applyMode: params.applyMode,
169
+ },
170
+ });
171
+ } catch (error) {
172
+ return {
173
+ success: false,
174
+ totalRows: 0,
175
+ created: 0,
176
+ updated: 0,
177
+ skipped: 0,
178
+ preview: [],
179
+ warnings: [],
180
+ errors: [
181
+ {
182
+ row: 0,
183
+ type: "error" as const,
184
+ message: error instanceof Error ? error.message : "Failed to dry-run backup import.",
185
+ },
186
+ ],
187
+ };
188
+ }
189
+ }
190
+
191
+ export async function applyCmsBackupBundleImportAction(params: {
192
+ bundleJson: string;
193
+ contentTypes: CmsContentType[];
194
+ conflictMode: CmsImportConflictMode;
195
+ applyMode: CmsImportApplyMode;
196
+ includeBlocks?: boolean;
197
+ }) {
198
+ try {
199
+ return await applyBundleImport({
200
+ bundleJson: params.bundleJson,
201
+ contentTypes: params.contentTypes,
202
+ includeBlocks: params.includeBlocks,
203
+ options: {
204
+ conflictMode: params.conflictMode,
205
+ applyMode: params.applyMode,
206
+ },
207
+ });
208
+ } catch (error) {
209
+ return {
210
+ success: false,
211
+ totalRows: 0,
212
+ created: 0,
213
+ updated: 0,
214
+ skipped: 0,
215
+ preview: [],
216
+ warnings: [],
217
+ errors: [
218
+ {
219
+ row: 0,
220
+ type: "error" as const,
221
+ message: error instanceof Error ? error.message : "Failed to apply backup import.",
222
+ },
223
+ ],
224
+ };
225
+ }
226
+ }