@cedarjs/cli 0.0.4

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 (360) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +706 -0
  3. package/dist/commands/build.js +54 -0
  4. package/dist/commands/buildHandler.js +134 -0
  5. package/dist/commands/check.js +28 -0
  6. package/dist/commands/console.js +13 -0
  7. package/dist/commands/consoleHandler.js +68 -0
  8. package/dist/commands/deploy/baremetal/SshExecutor.js +41 -0
  9. package/dist/commands/deploy/baremetal/baremetalHandler.js +558 -0
  10. package/dist/commands/deploy/baremetal.js +89 -0
  11. package/dist/commands/deploy/flightcontrol.js +40 -0
  12. package/dist/commands/deploy/flightcontrolHandler.js +58 -0
  13. package/dist/commands/deploy/helpers/deployBuilder.js +25 -0
  14. package/dist/commands/deploy/helpers/deployHandler.js +31 -0
  15. package/dist/commands/deploy/netlify.js +21 -0
  16. package/dist/commands/deploy/packing/nft.js +61 -0
  17. package/dist/commands/deploy/render.js +37 -0
  18. package/dist/commands/deploy/renderHandler.js +70 -0
  19. package/dist/commands/deploy/serverless.js +51 -0
  20. package/dist/commands/deploy/serverlessHandler.js +211 -0
  21. package/dist/commands/deploy/vercel.js +21 -0
  22. package/dist/commands/deploy.js +21 -0
  23. package/dist/commands/destroy/cell/cell.js +12 -0
  24. package/dist/commands/destroy/cell/cellHandler.js +10 -0
  25. package/dist/commands/destroy/component/component.js +15 -0
  26. package/dist/commands/destroy/component/componentHandler.js +10 -0
  27. package/dist/commands/destroy/directive/directive.js +14 -0
  28. package/dist/commands/destroy/directive/directiveHandler.js +12 -0
  29. package/dist/commands/destroy/function/function.js +20 -0
  30. package/dist/commands/destroy/function/functionHandler.js +10 -0
  31. package/dist/commands/destroy/handlerHelpers.js +34 -0
  32. package/dist/commands/destroy/helpers.js +22 -0
  33. package/dist/commands/destroy/layout/layout.js +12 -0
  34. package/dist/commands/destroy/layout/layoutHandler.js +10 -0
  35. package/dist/commands/destroy/page/page.js +20 -0
  36. package/dist/commands/destroy/page/pageHandler.js +51 -0
  37. package/dist/commands/destroy/scaffold/scaffold.js +16 -0
  38. package/dist/commands/destroy/scaffold/scaffoldHandler.js +105 -0
  39. package/dist/commands/destroy/sdl/sdl.js +16 -0
  40. package/dist/commands/destroy/sdl/sdlHandler.js +33 -0
  41. package/dist/commands/destroy/service/service.js +10 -0
  42. package/dist/commands/destroy/service/serviceHandler.js +17 -0
  43. package/dist/commands/destroy.js +25 -0
  44. package/dist/commands/dev.js +47 -0
  45. package/dist/commands/devHandler.js +202 -0
  46. package/dist/commands/exec.js +38 -0
  47. package/dist/commands/execHandler.js +180 -0
  48. package/dist/commands/experimental/setupInngest.js +28 -0
  49. package/dist/commands/experimental/setupInngestHandler.js +46 -0
  50. package/dist/commands/experimental/setupOpentelemetry.js +34 -0
  51. package/dist/commands/experimental/setupOpentelemetryHandler.js +215 -0
  52. package/dist/commands/experimental/setupReactCompiler.js +28 -0
  53. package/dist/commands/experimental/setupReactCompilerHandler.js +124 -0
  54. package/dist/commands/experimental/setupRsc.js +28 -0
  55. package/dist/commands/experimental/setupRscHandler.js +408 -0
  56. package/dist/commands/experimental/setupStreamingSsr.js +28 -0
  57. package/dist/commands/experimental/setupStreamingSsrHandler.js +208 -0
  58. package/dist/commands/experimental/templates/opentelemetry.ts.template +55 -0
  59. package/dist/commands/experimental/templates/rsc/AboutCounter.tsx.template +20 -0
  60. package/dist/commands/experimental/templates/rsc/AboutPage.css.template +2 -0
  61. package/dist/commands/experimental/templates/rsc/AboutPage.tsx.template +17 -0
  62. package/dist/commands/experimental/templates/rsc/Counter.css.template +7 -0
  63. package/dist/commands/experimental/templates/rsc/Counter.module.css.template +3 -0
  64. package/dist/commands/experimental/templates/rsc/Counter.tsx.template +18 -0
  65. package/dist/commands/experimental/templates/rsc/Document.tsx.template +27 -0
  66. package/dist/commands/experimental/templates/rsc/HomePage.css.template +2 -0
  67. package/dist/commands/experimental/templates/rsc/HomePage.module.css.template +3 -0
  68. package/dist/commands/experimental/templates/rsc/HomePage.tsx.template +19 -0
  69. package/dist/commands/experimental/templates/rsc/NavigationLayout.css.template +32 -0
  70. package/dist/commands/experimental/templates/rsc/NavigationLayout.tsx.template +31 -0
  71. package/dist/commands/experimental/templates/rsc/Routes.tsx.template +29 -0
  72. package/dist/commands/experimental/templates/rsc/entry.client.tsx.template +35 -0
  73. package/dist/commands/experimental/templates/rsc/entry.server.tsx.template +20 -0
  74. package/dist/commands/experimental/templates/rsc/index.css.template +4 -0
  75. package/dist/commands/experimental/templates/streamingSsr/Document.tsx.template +27 -0
  76. package/dist/commands/experimental/templates/streamingSsr/entry.client.tsx.template +40 -0
  77. package/dist/commands/experimental/templates/streamingSsr/entry.server.tsx.template +20 -0
  78. package/dist/commands/experimental/templates/streamingSsr/tsconfig.json.template +54 -0
  79. package/dist/commands/experimental/util.js +69 -0
  80. package/dist/commands/experimental.js +22 -0
  81. package/dist/commands/generate/cell/cell.js +35 -0
  82. package/dist/commands/generate/cell/cellHandler.js +153 -0
  83. package/dist/commands/generate/cell/templates/cell.tsx.template +34 -0
  84. package/dist/commands/generate/cell/templates/cellList.tsx.template +40 -0
  85. package/dist/commands/generate/cell/templates/mock.ts.template +7 -0
  86. package/dist/commands/generate/cell/templates/mockList.ts.template +14 -0
  87. package/dist/commands/generate/cell/templates/stories.tsx.template +35 -0
  88. package/dist/commands/generate/cell/templates/test.js.template +42 -0
  89. package/dist/commands/generate/cell/utils/utils.js +43 -0
  90. package/dist/commands/generate/component/component.js +15 -0
  91. package/dist/commands/generate/component/componentHandler.js +55 -0
  92. package/dist/commands/generate/component/templates/component.tsx.template +10 -0
  93. package/dist/commands/generate/component/templates/stories.jsx.template +17 -0
  94. package/dist/commands/generate/component/templates/stories.tsx.template +26 -0
  95. package/dist/commands/generate/component/templates/test.tsx.template +14 -0
  96. package/dist/commands/generate/dataMigration/dataMigration.js +105 -0
  97. package/dist/commands/generate/dataMigration/templates/dataMigration.js.template +7 -0
  98. package/dist/commands/generate/dataMigration/templates/dataMigration.ts.template +5 -0
  99. package/dist/commands/generate/dbAuth/dbAuth.js +55 -0
  100. package/dist/commands/generate/dbAuth/dbAuthHandler.js +375 -0
  101. package/dist/commands/generate/dbAuth/templates/forgotPassword.tsx.template +94 -0
  102. package/dist/commands/generate/dbAuth/templates/login.tsx.template +130 -0
  103. package/dist/commands/generate/dbAuth/templates/login.webAuthn.tsx.template +264 -0
  104. package/dist/commands/generate/dbAuth/templates/resetPassword.tsx.template +121 -0
  105. package/dist/commands/generate/dbAuth/templates/signup.tsx.template +123 -0
  106. package/dist/commands/generate/directive/directive.js +15 -0
  107. package/dist/commands/generate/directive/directiveHandler.js +159 -0
  108. package/dist/commands/generate/directive/templates/transformer.directive.test.ts.template +18 -0
  109. package/dist/commands/generate/directive/templates/transformer.directive.ts.template +38 -0
  110. package/dist/commands/generate/directive/templates/validator.directive.test.ts.template +17 -0
  111. package/dist/commands/generate/directive/templates/validator.directive.ts.template +39 -0
  112. package/dist/commands/generate/function/function.js +29 -0
  113. package/dist/commands/generate/function/functionHandler.js +131 -0
  114. package/dist/commands/generate/function/templates/function.ts.template +33 -0
  115. package/dist/commands/generate/function/templates/scenarios.ts.template +8 -0
  116. package/dist/commands/generate/function/templates/test.ts.template +30 -0
  117. package/dist/commands/generate/helpers.js +71 -0
  118. package/dist/commands/generate/job/job.js +39 -0
  119. package/dist/commands/generate/job/jobHandler.js +138 -0
  120. package/dist/commands/generate/job/templates/job.ts.template +8 -0
  121. package/dist/commands/generate/job/templates/scenarios.ts.template +8 -0
  122. package/dist/commands/generate/job/templates/test.ts.template +7 -0
  123. package/dist/commands/generate/layout/layout.js +25 -0
  124. package/dist/commands/generate/layout/layoutHandler.js +59 -0
  125. package/dist/commands/generate/layout/templates/layout.tsx.a11y.template +27 -0
  126. package/dist/commands/generate/layout/templates/layout.tsx.template +9 -0
  127. package/dist/commands/generate/layout/templates/stories.tsx.template +13 -0
  128. package/dist/commands/generate/layout/templates/test.tsx.template +14 -0
  129. package/dist/commands/generate/model/model.js +29 -0
  130. package/dist/commands/generate/model/modelHandler.js +63 -0
  131. package/dist/commands/generate/model/templates/model.js.template +3 -0
  132. package/dist/commands/generate/ogImage/ogImage.js +43 -0
  133. package/dist/commands/generate/ogImage/ogImageHandler.js +111 -0
  134. package/dist/commands/generate/ogImage/templates/ogImage.og.tsx.template +13 -0
  135. package/dist/commands/generate/page/page.js +22 -0
  136. package/dist/commands/generate/page/pageHandler.js +227 -0
  137. package/dist/commands/generate/page/templates/page.tsx.template +35 -0
  138. package/dist/commands/generate/page/templates/stories.tsx.parameters.template +13 -0
  139. package/dist/commands/generate/page/templates/stories.tsx.template +13 -0
  140. package/dist/commands/generate/page/templates/test.tsx.template +14 -0
  141. package/dist/commands/generate/realtime/realtime.js +41 -0
  142. package/dist/commands/generate/realtime/realtimeHandler.js +215 -0
  143. package/dist/commands/generate/realtime/templates/liveQueries/blank/blank.sdl.ts.template +27 -0
  144. package/dist/commands/generate/realtime/templates/liveQueries/blank/blank.service.ts.template +73 -0
  145. package/dist/commands/generate/realtime/templates/realtime.ts.template +42 -0
  146. package/dist/commands/generate/realtime/templates/subscriptions/blank/blank.sdl.ts.template +20 -0
  147. package/dist/commands/generate/realtime/templates/subscriptions/blank/blank.service.ts.template +19 -0
  148. package/dist/commands/generate/realtime/templates/subscriptions/blank/blank.ts.template +58 -0
  149. package/dist/commands/generate/scaffold/scaffold.js +38 -0
  150. package/dist/commands/generate/scaffold/scaffoldHandler.js +663 -0
  151. package/dist/commands/generate/scaffold/templates/assets/scaffold.css.template +398 -0
  152. package/dist/commands/generate/scaffold/templates/assets/scaffold.tailwind.css.template +243 -0
  153. package/dist/commands/generate/scaffold/templates/components/EditNameCell.tsx.template +74 -0
  154. package/dist/commands/generate/scaffold/templates/components/Name.tsx.template +79 -0
  155. package/dist/commands/generate/scaffold/templates/components/NameCell.tsx.template +32 -0
  156. package/dist/commands/generate/scaffold/templates/components/NameForm.tsx.template +123 -0
  157. package/dist/commands/generate/scaffold/templates/components/Names.tsx.template +88 -0
  158. package/dist/commands/generate/scaffold/templates/components/NamesCell.tsx.template +45 -0
  159. package/dist/commands/generate/scaffold/templates/components/NewName.tsx.template +55 -0
  160. package/dist/commands/generate/scaffold/templates/layouts/ScaffoldLayout.tsx.template +37 -0
  161. package/dist/commands/generate/scaffold/templates/lib/formatters.test.tsx.template +192 -0
  162. package/dist/commands/generate/scaffold/templates/lib/formatters.tsx.template +58 -0
  163. package/dist/commands/generate/scaffold/templates/pages/EditNamePage.tsx.template +11 -0
  164. package/dist/commands/generate/scaffold/templates/pages/NamePage.tsx.template +11 -0
  165. package/dist/commands/generate/scaffold/templates/pages/NamesPage.tsx.template +7 -0
  166. package/dist/commands/generate/scaffold/templates/pages/NewNamePage.tsx.template +7 -0
  167. package/dist/commands/generate/script/script.js +29 -0
  168. package/dist/commands/generate/script/scriptHandler.js +85 -0
  169. package/dist/commands/generate/script/templates/script.ts.template +15 -0
  170. package/dist/commands/generate/script/templates/tsconfig.json.template +33 -0
  171. package/dist/commands/generate/sdl/sdl.js +48 -0
  172. package/dist/commands/generate/sdl/sdlHandler.js +282 -0
  173. package/dist/commands/generate/sdl/templates/sdl.js.template +70 -0
  174. package/dist/commands/generate/sdl/templates/sdl.ts.template +70 -0
  175. package/dist/commands/generate/secret/secret.js +52 -0
  176. package/dist/commands/generate/service/service.js +50 -0
  177. package/dist/commands/generate/service/serviceHandler.js +301 -0
  178. package/dist/commands/generate/service/templates/scenarios.ts.template +7 -0
  179. package/dist/commands/generate/service/templates/service.ts.template +38 -0
  180. package/dist/commands/generate/service/templates/test.ts.template +84 -0
  181. package/dist/commands/generate/yargsCommandHelpers.js +77 -0
  182. package/dist/commands/generate/yargsHandlerHelpers.js +155 -0
  183. package/dist/commands/generate.js +44 -0
  184. package/dist/commands/info.js +36 -0
  185. package/dist/commands/jobs.js +17 -0
  186. package/dist/commands/jobsHandler.js +30 -0
  187. package/dist/commands/lint.js +57 -0
  188. package/dist/commands/prerender.js +34 -0
  189. package/dist/commands/prerenderHandler.js +282 -0
  190. package/dist/commands/prisma.js +17 -0
  191. package/dist/commands/prismaHandler.js +90 -0
  192. package/dist/commands/record/init.js +11 -0
  193. package/dist/commands/record.js +19 -0
  194. package/dist/commands/serve.js +139 -0
  195. package/dist/commands/serveApiHandler.js +15 -0
  196. package/dist/commands/serveBothHandler.js +95 -0
  197. package/dist/commands/serveWebHandler.js +17 -0
  198. package/dist/commands/setup/auth/auth.js +265 -0
  199. package/dist/commands/setup/cache/cache.js +37 -0
  200. package/dist/commands/setup/cache/cacheHandler.js +69 -0
  201. package/dist/commands/setup/cache/templates/memcached.ts.template +30 -0
  202. package/dist/commands/setup/cache/templates/redis.ts.template +24 -0
  203. package/dist/commands/setup/deploy/deploy.js +26 -0
  204. package/dist/commands/setup/deploy/helpers/helpers.js +9 -0
  205. package/dist/commands/setup/deploy/helpers/index.js +110 -0
  206. package/dist/commands/setup/deploy/providers/baremetal.js +9 -0
  207. package/dist/commands/setup/deploy/providers/baremetalHandler.js +64 -0
  208. package/dist/commands/setup/deploy/providers/coherence.js +24 -0
  209. package/dist/commands/setup/deploy/providers/coherenceHandler.js +203 -0
  210. package/dist/commands/setup/deploy/providers/flightcontrol.js +19 -0
  211. package/dist/commands/setup/deploy/providers/flightcontrolHandler.js +294 -0
  212. package/dist/commands/setup/deploy/providers/netlify.js +9 -0
  213. package/dist/commands/setup/deploy/providers/netlifyHandler.js +42 -0
  214. package/dist/commands/setup/deploy/providers/render.js +17 -0
  215. package/dist/commands/setup/deploy/providers/renderHandler.js +111 -0
  216. package/dist/commands/setup/deploy/providers/serverless.js +11 -0
  217. package/dist/commands/setup/deploy/providers/serverlessHandler.js +141 -0
  218. package/dist/commands/setup/deploy/providers/vercel.js +9 -0
  219. package/dist/commands/setup/deploy/providers/vercelHandler.js +56 -0
  220. package/dist/commands/setup/deploy/templates/baremetal.js +128 -0
  221. package/dist/commands/setup/deploy/templates/flightcontrol.js +85 -0
  222. package/dist/commands/setup/deploy/templates/netlify.js +32 -0
  223. package/dist/commands/setup/deploy/templates/render.js +72 -0
  224. package/dist/commands/setup/deploy/templates/serverless/api.js +78 -0
  225. package/dist/commands/setup/deploy/templates/serverless/web.js +32 -0
  226. package/dist/commands/setup/docker/docker.js +26 -0
  227. package/dist/commands/setup/docker/dockerHandler.js +265 -0
  228. package/dist/commands/setup/docker/templates/Dockerfile +154 -0
  229. package/dist/commands/setup/docker/templates/docker-compose.dev.yml +58 -0
  230. package/dist/commands/setup/docker/templates/docker-compose.prod.yml +63 -0
  231. package/dist/commands/setup/docker/templates/dockerignore +18 -0
  232. package/dist/commands/setup/generator/generator.js +49 -0
  233. package/dist/commands/setup/generator/generatorHandler.js +55 -0
  234. package/dist/commands/setup/graphql/features/fragments/appGqlConfigTransform.js +117 -0
  235. package/dist/commands/setup/graphql/features/fragments/appImportTransform.js +20 -0
  236. package/dist/commands/setup/graphql/features/fragments/fragments.js +25 -0
  237. package/dist/commands/setup/graphql/features/fragments/fragmentsHandler.js +89 -0
  238. package/dist/commands/setup/graphql/features/trustedDocuments/graphqlTransform.js +51 -0
  239. package/dist/commands/setup/graphql/features/trustedDocuments/trustedDocuments.js +25 -0
  240. package/dist/commands/setup/graphql/features/trustedDocuments/trustedDocumentsHandler.js +74 -0
  241. package/dist/commands/setup/graphql/graphql.js +18 -0
  242. package/dist/commands/setup/i18n/i18n.js +25 -0
  243. package/dist/commands/setup/i18n/i18nHandler.js +169 -0
  244. package/dist/commands/setup/i18n/templates/en.json.template +11 -0
  245. package/dist/commands/setup/i18n/templates/fr.json.template +11 -0
  246. package/dist/commands/setup/i18n/templates/i18n.js.template +52 -0
  247. package/dist/commands/setup/i18n/templates/storybook.preview.tsx.template +43 -0
  248. package/dist/commands/setup/jobs/jobs.js +31 -0
  249. package/dist/commands/setup/jobs/jobsHandler.js +122 -0
  250. package/dist/commands/setup/jobs/templates/jobs.ts.template +32 -0
  251. package/dist/commands/setup/mailer/mailer.js +30 -0
  252. package/dist/commands/setup/mailer/mailerHandler.js +106 -0
  253. package/dist/commands/setup/mailer/templates/mailer.ts.template +30 -0
  254. package/dist/commands/setup/mailer/templates/re-example.tsx.template +40 -0
  255. package/dist/commands/setup/middleware/middleware.js +17 -0
  256. package/dist/commands/setup/middleware/ogImage/__codemod_tests__/middleware.js +15 -0
  257. package/dist/commands/setup/middleware/ogImage/__codemod_tests__/vitePlugin.js +6 -0
  258. package/dist/commands/setup/middleware/ogImage/codemodMiddleware.js +97 -0
  259. package/dist/commands/setup/middleware/ogImage/codemodVitePlugin.js +65 -0
  260. package/dist/commands/setup/middleware/ogImage/ogImage.js +27 -0
  261. package/dist/commands/setup/middleware/ogImage/ogImageHandler.js +121 -0
  262. package/dist/commands/setup/monitoring/monitoring.js +17 -0
  263. package/dist/commands/setup/monitoring/sentry/sentry.js +25 -0
  264. package/dist/commands/setup/monitoring/sentry/sentryHandler.js +163 -0
  265. package/dist/commands/setup/monitoring/sentry/templates/sentryApi.ts.template +15 -0
  266. package/dist/commands/setup/monitoring/sentry/templates/sentryWeb.ts.template +31 -0
  267. package/dist/commands/setup/package/package.js +33 -0
  268. package/dist/commands/setup/package/packageHandler.js +134 -0
  269. package/dist/commands/setup/realtime/realtime.js +37 -0
  270. package/dist/commands/setup/realtime/realtimeHandler.js +309 -0
  271. package/dist/commands/setup/realtime/templates/defer/fastAndSlowFields/fastAndSlowFields.sdl.template +14 -0
  272. package/dist/commands/setup/realtime/templates/defer/fastAndSlowFields/fastAndSlowFields.ts.template +14 -0
  273. package/dist/commands/setup/realtime/templates/liveQueries/auctions/auctions.sdl.ts.template +27 -0
  274. package/dist/commands/setup/realtime/templates/liveQueries/auctions/auctions.ts.template +73 -0
  275. package/dist/commands/setup/realtime/templates/realtime.ts.template +46 -0
  276. package/dist/commands/setup/realtime/templates/stream/alphabet/alphabet.sdl.template +9 -0
  277. package/dist/commands/setup/realtime/templates/stream/alphabet/alphabet.ts.template +31 -0
  278. package/dist/commands/setup/realtime/templates/subscriptions/countdown/countdown.ts.template +58 -0
  279. package/dist/commands/setup/realtime/templates/subscriptions/newMessage/newMessage.ts.template +57 -0
  280. package/dist/commands/setup/realtime/templates/subscriptions/newMessage/rooms.sdl.ts.template +20 -0
  281. package/dist/commands/setup/realtime/templates/subscriptions/newMessage/rooms.ts.template +20 -0
  282. package/dist/commands/setup/server-file/serverFile.js +31 -0
  283. package/dist/commands/setup/server-file/serverFileHandler.js +56 -0
  284. package/dist/commands/setup/server-file/templates/server.ts.template +13 -0
  285. package/dist/commands/setup/tsconfig/tsconfig.js +25 -0
  286. package/dist/commands/setup/tsconfig/tsconfigHandler.js +59 -0
  287. package/dist/commands/setup/ui/helpers/helpers.js +9 -0
  288. package/dist/commands/setup/ui/libraries/chakra-ui.js +24 -0
  289. package/dist/commands/setup/ui/libraries/chakra-uiHandler.js +98 -0
  290. package/dist/commands/setup/ui/libraries/mantine.js +32 -0
  291. package/dist/commands/setup/ui/libraries/mantineHandler.js +138 -0
  292. package/dist/commands/setup/ui/libraries/tailwindcss.js +26 -0
  293. package/dist/commands/setup/ui/libraries/tailwindcssHandler.js +386 -0
  294. package/dist/commands/setup/ui/templates/chakra.storybook.preview.tsx.template +20 -0
  295. package/dist/commands/setup/ui/templates/mantine-postcss.config.js.template +35 -0
  296. package/dist/commands/setup/ui/templates/mantine.storybook.preview.tsx.template +18 -0
  297. package/dist/commands/setup/ui/templates/postcss.config.js.template +9 -0
  298. package/dist/commands/setup/ui/ui.js +17 -0
  299. package/dist/commands/setup/uploads/dbCodemod.js +28 -0
  300. package/dist/commands/setup/uploads/templates/signedUrl.ts.template +21 -0
  301. package/dist/commands/setup/uploads/templates/srcLibUploads.ts.template +25 -0
  302. package/dist/commands/setup/uploads/uploads.js +26 -0
  303. package/dist/commands/setup/uploads/uploadsHandler.js +147 -0
  304. package/dist/commands/setup/vite/templates/vite.config.ts.template +19 -0
  305. package/dist/commands/setup/vite/vite.js +38 -0
  306. package/dist/commands/setup/vite/viteHandler.js +83 -0
  307. package/dist/commands/setup.js +33 -0
  308. package/dist/commands/studio.js +23 -0
  309. package/dist/commands/studioHandler.js +61 -0
  310. package/dist/commands/test.js +44 -0
  311. package/dist/commands/testHandler.js +138 -0
  312. package/dist/commands/ts-to-js.js +20 -0
  313. package/dist/commands/type-check.js +41 -0
  314. package/dist/commands/type-checkHandler.js +71 -0
  315. package/dist/commands/upgrade.js +441 -0
  316. package/dist/index.d.js +0 -0
  317. package/dist/index.js +146 -0
  318. package/dist/lib/background.js +45 -0
  319. package/dist/lib/colors.js +18 -0
  320. package/dist/lib/configureStorybook.js +50 -0
  321. package/dist/lib/exec.js +85 -0
  322. package/dist/lib/exit.js +44 -0
  323. package/dist/lib/extendFile.js +114 -0
  324. package/dist/lib/generatePrismaClient.js +60 -0
  325. package/dist/lib/index.js +485 -0
  326. package/dist/lib/loadEnvFiles.js +12 -0
  327. package/dist/lib/locking.js +60 -0
  328. package/dist/lib/merge/algorithms.js +30 -0
  329. package/dist/lib/merge/index.js +163 -0
  330. package/dist/lib/merge/semanticIdentity.js +18 -0
  331. package/dist/lib/merge/strategy.js +136 -0
  332. package/dist/lib/mockTelemetry.js +7 -0
  333. package/dist/lib/packages.js +77 -0
  334. package/dist/lib/plugin.js +206 -0
  335. package/dist/lib/pluralHelpers.js +50 -0
  336. package/dist/lib/ports.js +17 -0
  337. package/dist/lib/project.js +30 -0
  338. package/dist/lib/rollback.js +72 -0
  339. package/dist/lib/runTransform.js +66 -0
  340. package/dist/lib/rwPluralize.js +56 -0
  341. package/dist/lib/schemaHelpers.js +95 -0
  342. package/dist/lib/templates/storybook.preview.tsx.template +19 -0
  343. package/dist/lib/test.js +106 -0
  344. package/dist/lib/updateCheck.js +202 -0
  345. package/dist/lib/updateCheckExecute.js +2 -0
  346. package/dist/middleware/checkNodeVersion.js +23 -0
  347. package/dist/middleware/detectProjectRxVersion.js +12 -0
  348. package/dist/plugin.js +223 -0
  349. package/dist/rwfw.js +47 -0
  350. package/dist/telemetry/exporter.js +63 -0
  351. package/dist/telemetry/index.js +84 -0
  352. package/dist/telemetry/resource.js +98 -0
  353. package/dist/telemetry/send.js +80 -0
  354. package/dist/testLib/cells.js +188 -0
  355. package/dist/testLib/fetchFileFromTemplate.js +9 -0
  356. package/dist/testLib/getFilesWithPattern.js +21 -0
  357. package/dist/testLib/getRootPackageJSON.js +14 -0
  358. package/dist/testLib/isTSProject.js +9 -0
  359. package/dist/testLib/runTransform.js +42 -0
  360. package/package.json +102 -0
@@ -0,0 +1,265 @@
1
+ import { createRequire } from "node:module";
2
+ import path from "node:path";
3
+ import execa from "execa";
4
+ import fs from "fs-extra";
5
+ import { Listr } from "listr2";
6
+ import { writeFile } from "@cedarjs/cli-helpers";
7
+ import { getConfig, getConfigPath, getPaths } from "@cedarjs/project-config";
8
+ import { errorTelemetry } from "@cedarjs/telemetry";
9
+ import c from "../../../lib/colors.js";
10
+ async function handler({ force }) {
11
+ const TEMPLATE_DIR = path.join(import.meta.dirname, "templates");
12
+ let dockerfileTemplateContent = fs.readFileSync(
13
+ path.resolve(TEMPLATE_DIR, "Dockerfile"),
14
+ "utf-8"
15
+ );
16
+ const dockerComposeDevTemplateContent = fs.readFileSync(
17
+ path.resolve(TEMPLATE_DIR, "docker-compose.dev.yml"),
18
+ "utf-8"
19
+ );
20
+ const dockerComposeProdTemplateContent = fs.readFileSync(
21
+ path.resolve(TEMPLATE_DIR, "docker-compose.prod.yml"),
22
+ "utf-8"
23
+ );
24
+ const dockerignoreTemplateContent = fs.readFileSync(
25
+ path.resolve(TEMPLATE_DIR, "dockerignore"),
26
+ "utf-8"
27
+ );
28
+ const dockerfilePath = path.join(getPaths().base, "Dockerfile");
29
+ const dockerComposeDevFilePath = path.join(
30
+ getPaths().base,
31
+ "docker-compose.dev.yml"
32
+ );
33
+ const dockerComposeProdFilePath = path.join(
34
+ getPaths().base,
35
+ "docker-compose.prod.yml"
36
+ );
37
+ const dockerignoreFilePath = path.join(getPaths().base, ".dockerignore");
38
+ const tasks = new Listr(
39
+ [
40
+ {
41
+ title: "Adding the official yarn workspace-tools plugin...",
42
+ task: async (_ctx, task) => {
43
+ const { stdout } = await execa.command("yarn plugin runtime --json", {
44
+ cwd: getPaths().base
45
+ });
46
+ const hasWorkspaceToolsPlugin = stdout.trim().split("\n").map(JSON.parse).some(({ name }) => name === "@yarnpkg/plugin-workspace-tools");
47
+ if (hasWorkspaceToolsPlugin) {
48
+ task.skip(
49
+ "The official yarn workspace-tools plugin is already installed"
50
+ );
51
+ return;
52
+ }
53
+ return execa.command("yarn plugin import workspace-tools", {
54
+ cwd: getPaths().base
55
+ }).stdout;
56
+ }
57
+ },
58
+ {
59
+ title: "Adding @cedarjs/api-server and @cedarjs/web-server...",
60
+ task: async (_ctx, task) => {
61
+ const apiServerPackageName = "@cedarjs/api-server";
62
+ const { dependencies: apiDependencies } = fs.readJSONSync(
63
+ path.join(getPaths().api.base, "package.json")
64
+ );
65
+ const hasApiServerPackage = Object.keys(apiDependencies).includes(apiServerPackageName);
66
+ const webServerPackageName = "@cedarjs/web-server";
67
+ const { dependencies: webDependencies } = fs.readJSONSync(
68
+ path.join(getPaths().web.base, "package.json")
69
+ );
70
+ const hasWebServerPackage = Object.keys(webDependencies).includes(webServerPackageName);
71
+ if (hasApiServerPackage && hasWebServerPackage) {
72
+ task.skip(
73
+ `${apiServerPackageName} and ${webServerPackageName} are already installed`
74
+ );
75
+ return;
76
+ }
77
+ if (!hasApiServerPackage) {
78
+ const apiServerPackageVersion = await getVersionOfRedwoodPackageToInstall(apiServerPackageName);
79
+ await execa.command(
80
+ `yarn workspace api add ${apiServerPackageName}@${apiServerPackageVersion}`,
81
+ {
82
+ cwd: getPaths().base
83
+ }
84
+ );
85
+ }
86
+ if (!hasWebServerPackage) {
87
+ const webServerPackageVersion = await getVersionOfRedwoodPackageToInstall(webServerPackageName);
88
+ await execa.command(
89
+ `yarn workspace web add ${webServerPackageName}@${webServerPackageVersion}`,
90
+ {
91
+ cwd: getPaths().base
92
+ }
93
+ );
94
+ }
95
+ return execa.command(`yarn dedupe`, {
96
+ cwd: getPaths().base
97
+ }).stdout;
98
+ }
99
+ },
100
+ {
101
+ title: "Adding the Dockerfile and compose files...",
102
+ task: (_ctx, task) => {
103
+ const shouldSkip = [
104
+ dockerfilePath,
105
+ dockerComposeDevFilePath,
106
+ dockerComposeProdFilePath,
107
+ dockerignoreFilePath
108
+ ].every(fs.existsSync);
109
+ if (!force && shouldSkip) {
110
+ task.skip("The Dockerfile and compose files already exist");
111
+ return;
112
+ }
113
+ const config = getConfig();
114
+ const { includeEnvironmentVariables } = config.web;
115
+ if (includeEnvironmentVariables.length) {
116
+ const webBuildWithPrerenderStageDelimeter = "FROM api_build as web_build_with_prerender\n";
117
+ const webBuildStageDelimeter = "FROM base as web_build\n";
118
+ const [
119
+ beforeWebBuildWithPrerenderStageDelimeter,
120
+ afterWebBuildWithPrerenderStageDelimeter
121
+ ] = dockerfileTemplateContent.split(
122
+ webBuildWithPrerenderStageDelimeter
123
+ );
124
+ const [beforeWebBuildStageDelimeter, afterWebBuildStageDelimeter] = afterWebBuildWithPrerenderStageDelimeter.split(
125
+ webBuildStageDelimeter
126
+ );
127
+ dockerfileTemplateContent = [
128
+ beforeWebBuildWithPrerenderStageDelimeter.trim(),
129
+ webBuildWithPrerenderStageDelimeter,
130
+ ...includeEnvironmentVariables.map((envVar) => `ARG ${envVar}`),
131
+ "",
132
+ beforeWebBuildStageDelimeter.trim(),
133
+ webBuildStageDelimeter,
134
+ ...includeEnvironmentVariables.map((envVar) => `ARG ${envVar}`),
135
+ afterWebBuildStageDelimeter
136
+ ].join("\n");
137
+ }
138
+ writeFile(
139
+ dockerfilePath,
140
+ dockerfileTemplateContent,
141
+ {
142
+ existingFiles: force ? "OVERWRITE" : "SKIP"
143
+ },
144
+ task
145
+ );
146
+ writeFile(
147
+ dockerComposeDevFilePath,
148
+ dockerComposeDevTemplateContent,
149
+ {
150
+ existingFiles: force ? "OVERWRITE" : "SKIP"
151
+ },
152
+ task
153
+ );
154
+ writeFile(
155
+ dockerComposeProdFilePath,
156
+ dockerComposeProdTemplateContent,
157
+ { existingFiles: force ? "OVERWRITE" : "SKIP" },
158
+ task
159
+ );
160
+ writeFile(
161
+ dockerignoreFilePath,
162
+ dockerignoreTemplateContent,
163
+ {
164
+ existingFiles: force ? "OVERWRITE" : "SKIP"
165
+ },
166
+ task
167
+ );
168
+ }
169
+ },
170
+ {
171
+ title: "Adding postgres to .gitignore...",
172
+ task: (_ctx, task) => {
173
+ const gitignoreFilePath = path.join(getPaths().base, ".gitignore");
174
+ const gitignoreFileContent = fs.readFileSync(
175
+ gitignoreFilePath,
176
+ "utf-8"
177
+ );
178
+ if (gitignoreFileContent.includes("postgres")) {
179
+ task.skip("postgres is already ignored by git");
180
+ return;
181
+ }
182
+ writeFile(
183
+ gitignoreFilePath,
184
+ gitignoreFileContent.concat("\npostgres\n"),
185
+ { existingFiles: "OVERWRITE" }
186
+ );
187
+ }
188
+ },
189
+ {
190
+ title: "Adding config to redwood.toml...",
191
+ task: () => {
192
+ const redwoodTomlPath = getConfigPath();
193
+ let configContent = fs.readFileSync(redwoodTomlPath, "utf-8");
194
+ const browserOpenRegExp = /open\s*=\s*true/;
195
+ if (browserOpenRegExp.test(configContent)) {
196
+ configContent = configContent.replace(
197
+ /open\s*=\s*true/,
198
+ "open = false"
199
+ );
200
+ }
201
+ writeFile(redwoodTomlPath, configContent, {
202
+ existingFiles: "OVERWRITE"
203
+ });
204
+ }
205
+ }
206
+ ],
207
+ {
208
+ renderer: process.env.NODE_ENV === "test" ? "verbose" : "default"
209
+ }
210
+ );
211
+ try {
212
+ await tasks.run();
213
+ console.log(
214
+ [
215
+ "",
216
+ "We've written four files:",
217
+ "",
218
+ "- ./Dockerfile",
219
+ "- ./.dockerignore",
220
+ "- ./docker-compose.dev.yml",
221
+ "- ./docker-compose.prod.yml",
222
+ "",
223
+ "To start the docker compose dev:",
224
+ "",
225
+ " docker compose -f docker-compose.dev.yml up ",
226
+ "",
227
+ "Then, connect to the container and migrate your database:",
228
+ "",
229
+ " docker compose -f ./docker-compose.dev.yml run --rm -it console /bin/bash",
230
+ " root@...:/home/node/app# yarn rw prisma migrate dev",
231
+ "",
232
+ "We assume you're using Postgres. If you're not, you'll need to make other changes to switch over.",
233
+ "Lastly, ensure you have Docker. If you don't, see https://docs.docker.com/desktop/",
234
+ "",
235
+ "There's a lot in the Dockerfile and there's a reason for every line.",
236
+ "Be sure to check out the docs: https://redwoodjs.com/docs/docker"
237
+ ].join("\n")
238
+ );
239
+ } catch (e) {
240
+ errorTelemetry(process.argv, e.message);
241
+ console.error(c.error(e.message));
242
+ process.exit(e?.exitCode || 1);
243
+ }
244
+ }
245
+ async function getVersionOfRedwoodPackageToInstall(module) {
246
+ const createdRequire = createRequire(import.meta.url);
247
+ const packageJsonPath = createdRequire.resolve("@cedarjs/cli/package.json", {
248
+ paths: [getPaths().base]
249
+ });
250
+ let { version } = fs.readJSONSync(packageJsonPath);
251
+ const packumentP = await fetch(`https://registry.npmjs.org/${module}`);
252
+ const packument = await packumentP.json();
253
+ if (version.includes("+")) {
254
+ version = version.split("+")[0];
255
+ }
256
+ const versionIsPublished = Object.keys(packument.versions).includes(version);
257
+ if (!versionIsPublished) {
258
+ version = "canary";
259
+ }
260
+ return version;
261
+ }
262
+ export {
263
+ getVersionOfRedwoodPackageToInstall,
264
+ handler
265
+ };
@@ -0,0 +1,154 @@
1
+ # base
2
+ # ----
3
+ FROM node:20-bookworm-slim as base
4
+
5
+ RUN corepack enable
6
+
7
+ # We tried to make the Dockerfile as lean as possible. In some cases, that means we excluded a dependency your project needs.
8
+ # By far the most common is Python. If you're running into build errors because `python3` isn't available,
9
+ # add `python3 make gcc \` before the `openssl \` line below and in other stages as necessary:
10
+ RUN apt-get update && apt-get install -y \
11
+ openssl \
12
+ && rm -rf /var/lib/apt/lists/*
13
+
14
+ USER node
15
+ WORKDIR /home/node/app
16
+
17
+ COPY --chown=node:node .yarnrc.yml .
18
+ COPY --chown=node:node package.json .
19
+ COPY --chown=node:node api/package.json api/
20
+ COPY --chown=node:node web/package.json web/
21
+ COPY --chown=node:node yarn.lock .
22
+
23
+ RUN mkdir -p /home/node/.yarn/berry/index
24
+ RUN mkdir -p /home/node/.cache
25
+
26
+ RUN --mount=type=cache,target=/home/node/.yarn/berry/cache,uid=1000 \
27
+ --mount=type=cache,target=/home/node/.cache,uid=1000 \
28
+ CI=1 yarn install
29
+
30
+ COPY --chown=node:node redwood.toml .
31
+ COPY --chown=node:node graphql.config.js .
32
+ COPY --chown=node:node .env.defaults .env.defaults
33
+
34
+ # api build
35
+ # ---------
36
+ FROM base as api_build
37
+
38
+ # If your api side build relies on build-time environment variables,
39
+ # specify them here as ARGs. (But don't put secrets in your Dockerfile!)
40
+ #
41
+ # ARG MY_BUILD_TIME_ENV_VAR
42
+
43
+ COPY --chown=node:node api api
44
+ RUN yarn rw build api
45
+
46
+ # web prerender build
47
+ # -------------------
48
+ FROM api_build as web_build_with_prerender
49
+
50
+ COPY --chown=node:node web web
51
+ RUN yarn rw build web
52
+
53
+ # web build
54
+ # ---------
55
+ FROM base as web_build
56
+
57
+ COPY --chown=node:node web web
58
+ RUN yarn rw build web --no-prerender
59
+
60
+ # api serve
61
+ # ---------
62
+ FROM node:20-bookworm-slim as api_serve
63
+
64
+ RUN corepack enable
65
+
66
+ RUN apt-get update && apt-get install -y \
67
+ openssl \
68
+ && rm -rf /var/lib/apt/lists/*
69
+
70
+ USER node
71
+ WORKDIR /home/node/app
72
+
73
+ COPY --chown=node:node .yarnrc.yml .
74
+ COPY --chown=node:node package.json .
75
+ COPY --chown=node:node api/package.json api/
76
+ COPY --chown=node:node yarn.lock .
77
+
78
+ RUN mkdir -p /home/node/.yarn/berry/index
79
+ RUN mkdir -p /home/node/.cache
80
+
81
+ RUN --mount=type=cache,target=/home/node/.yarn/berry/cache,uid=1000 \
82
+ --mount=type=cache,target=/home/node/.cache,uid=1000 \
83
+ CI=1 yarn workspaces focus api --production
84
+
85
+ COPY --chown=node:node redwood.toml .
86
+ COPY --chown=node:node graphql.config.js .
87
+ COPY --chown=node:node .env.defaults .env.defaults
88
+
89
+ COPY --chown=node:node --from=api_build /home/node/app/api/dist /home/node/app/api/dist
90
+ COPY --chown=node:node --from=api_build /home/node/app/api/db /home/node/app/api/db
91
+ COPY --chown=node:node --from=api_build /home/node/app/node_modules/.prisma /home/node/app/node_modules/.prisma
92
+
93
+ ENV NODE_ENV=production
94
+
95
+ # default api serve command
96
+ # ---------
97
+ # If you are using a custom server file, you must use the following
98
+ # command to launch your server instead of the default api-server below.
99
+ # This is important if you intend to configure GraphQL to use Realtime.
100
+ #
101
+ # CMD [ "./api/dist/server.js" ]
102
+ CMD [ "node_modules/.bin/rw-server", "api" ]
103
+
104
+ # web serve
105
+ # ---------
106
+ FROM node:20-bookworm-slim as web_serve
107
+
108
+ RUN corepack enable
109
+
110
+ USER node
111
+ WORKDIR /home/node/app
112
+
113
+ COPY --chown=node:node .yarnrc.yml .
114
+ COPY --chown=node:node package.json .
115
+ COPY --chown=node:node web/package.json web/
116
+ COPY --chown=node:node yarn.lock .
117
+
118
+ RUN mkdir -p /home/node/.yarn/berry/index
119
+ RUN mkdir -p /home/node/.cache
120
+
121
+ RUN --mount=type=cache,target=/home/node/.yarn/berry/cache,uid=1000 \
122
+ --mount=type=cache,target=/home/node/.cache,uid=1000 \
123
+ CI=1 yarn workspaces focus web --production
124
+
125
+ COPY --chown=node:node redwood.toml .
126
+ COPY --chown=node:node graphql.config.js .
127
+ COPY --chown=node:node .env.defaults .env.defaults
128
+
129
+ COPY --chown=node:node --from=web_build /home/node/app/web/dist /home/node/app/web/dist
130
+
131
+ ENV NODE_ENV=production \
132
+ API_PROXY_TARGET=http://api:8911
133
+
134
+ # We use the shell form here for variable expansion.
135
+ CMD "node_modules/.bin/rw-web-server" "--api-proxy-target" "$API_PROXY_TARGET"
136
+
137
+ # console
138
+ # -------
139
+ FROM base as console
140
+
141
+ # To add more packages:
142
+ #
143
+ # ```
144
+ # USER root
145
+ #
146
+ # RUN apt-get update && apt-get install -y \
147
+ # curl
148
+ #
149
+ # USER node
150
+ # ```
151
+
152
+ COPY --chown=node:node api api
153
+ COPY --chown=node:node web web
154
+ COPY --chown=node:node scripts scripts
@@ -0,0 +1,58 @@
1
+ services:
2
+ redwood:
3
+ build:
4
+ context: .
5
+ dockerfile: ./Dockerfile
6
+ target: base
7
+ command: yarn rw dev
8
+ volumes:
9
+ - .:/home/node/app
10
+ - node_modules:/home/node/app/node_modules
11
+ ports:
12
+ - '8910:8910'
13
+ depends_on:
14
+ - db
15
+ environment:
16
+ - DATABASE_URL=postgresql://redwood:redwood@db:5432/redwood
17
+ - TEST_DATABASE_URL=postgresql://redwood:redwood@db:5432/redwood_test
18
+ - SESSION_SECRET=super_secret_session_key_change_me_in_production_please
19
+ - CI=
20
+ - NODE_ENV=development
21
+ - REDWOOD_API_HOST=0.0.0.0
22
+
23
+ db:
24
+ image: postgres:16-bookworm
25
+ environment:
26
+ POSTGRES_USER: redwood
27
+ POSTGRES_PASSWORD: redwood
28
+ POSTGRES_DB: redwood
29
+ ports:
30
+ - '5432:5432'
31
+ volumes:
32
+ - postgres:/var/lib/postgresql/data
33
+
34
+ # After starting with `docker compose -f ./docker-compose.dev.yml up`,
35
+ # use the console to run commands in the container:
36
+ #
37
+ # ```
38
+ # docker compose -f ./docker-compose.dev.yml run --rm -it console /bin/bash
39
+ # root@...:/home/node/app# yarn rw prisma migrate dev
40
+ # ```
41
+ console:
42
+ user: root
43
+ build:
44
+ context: .
45
+ dockerfile: ./Dockerfile
46
+ target: console
47
+ tmpfs:
48
+ - /tmp
49
+ command: 'true'
50
+ environment:
51
+ - DATABASE_URL=postgresql://redwood:redwood@db:5432/redwood
52
+ - TEST_DATABASE_URL=postgresql://redwood:redwood@db:5432/redwood_test
53
+ depends_on:
54
+ - db
55
+
56
+ volumes:
57
+ node_modules:
58
+ postgres:
@@ -0,0 +1,63 @@
1
+ services:
2
+ api:
3
+ build:
4
+ context: .
5
+ dockerfile: ./Dockerfile
6
+ target: api_serve
7
+ # Without a command specified, the Dockerfile's api_serve CMD will be used.
8
+ # If you are using a custom server file, you should either use the following
9
+ # command to launch your server or update the Dockerfile to do so.
10
+ # This is important if you intend to configure GraphQL to use Realtime.
11
+ # command: "./api/dist/server.js"
12
+ ports:
13
+ - '8911:8911'
14
+ depends_on:
15
+ - db
16
+ environment:
17
+ - DATABASE_URL=postgresql://redwood:redwood@db:5432/redwood
18
+ - TEST_DATABASE_URL=postgresql://redwood:redwood@db:5432/redwood_test
19
+ - SESSION_SECRET=super_secret_session_key_change_me_in_production_please
20
+
21
+ web:
22
+ build:
23
+ context: .
24
+ dockerfile: ./Dockerfile
25
+ target: web_serve
26
+ ports:
27
+ - '8910:8910'
28
+ depends_on:
29
+ - api
30
+ environment:
31
+ - API_PROXY_TARGET=http://api:8911
32
+
33
+ db:
34
+ image: postgres:16-bookworm
35
+ environment:
36
+ POSTGRES_USER: redwood
37
+ POSTGRES_PASSWORD: redwood
38
+ POSTGRES_DB: redwood
39
+ ports:
40
+ - '5432:5432'
41
+ volumes:
42
+ - ./postgres:/var/lib/postgresql/data
43
+
44
+ # After starting with `docker compose -f ./docker-compose.prod.yml up`,
45
+ # use the console to run commands in the container:
46
+ #
47
+ # ```
48
+ # docker compose -f ./docker-compose.prod.yml run --rm -it console /bin/bash
49
+ # ```
50
+ console:
51
+ user: root
52
+ build:
53
+ context: .
54
+ dockerfile: ./Dockerfile
55
+ target: console
56
+ tmpfs:
57
+ - /tmp
58
+ command: 'true'
59
+ environment:
60
+ - DATABASE_URL=postgresql://redwood:redwood@db:5432/redwood
61
+ - TEST_DATABASE_URL=postgresql://redwood:redwood@db:5432/redwood_test
62
+ depends_on:
63
+ - db
@@ -0,0 +1,18 @@
1
+ **/node_modules
2
+ **/dist
3
+ .redwood
4
+
5
+ .env
6
+
7
+ README.md
8
+ LICENSE
9
+
10
+ .git
11
+ .gitignore
12
+
13
+ .vscode
14
+ .editorconfig
15
+
16
+ Dockerfile
17
+ docker-compose*
18
+ .dockerignore
@@ -0,0 +1,49 @@
1
+ import path from "path";
2
+ import fs from "fs-extra";
3
+ import terminalLink from "terminal-link";
4
+ import { recordTelemetryAttributes } from "@cedarjs/cli-helpers";
5
+ const command = "generator <name>";
6
+ const description = "Copies generator templates locally for customization";
7
+ const EXCLUDE_GENERATORS = [
8
+ "dataMigration",
9
+ "dbAuth",
10
+ "generator",
11
+ "script",
12
+ "secret"
13
+ ];
14
+ const builder = (yargs) => {
15
+ const availableGenerators = fs.readdirSync(path.join(import.meta.dirname, "../../generate"), {
16
+ withFileTypes: true
17
+ }).filter((dir) => dir.isDirectory() && !dir.name.match(/__/)).map((dir) => dir.name);
18
+ yargs.positional("name", {
19
+ description: "Name of the generator to copy templates from",
20
+ choices: availableGenerators.filter(
21
+ (dir) => !EXCLUDE_GENERATORS.includes(dir)
22
+ )
23
+ }).option("force", {
24
+ alias: "f",
25
+ default: false,
26
+ description: "Overwrite existing files",
27
+ type: "boolean"
28
+ }).epilogue(
29
+ `Also see the ${terminalLink(
30
+ "Redwood CLI Reference",
31
+ "https://redwoodjs.com/docs/cli-commands#setup-generator"
32
+ )}`
33
+ );
34
+ };
35
+ const handler = async (options) => {
36
+ recordTelemetryAttributes({
37
+ command: "setup generator",
38
+ name: options.name,
39
+ force: options.force
40
+ });
41
+ const { handler: handler2 } = await import("./generatorHandler.js");
42
+ return handler2(options);
43
+ };
44
+ export {
45
+ builder,
46
+ command,
47
+ description,
48
+ handler
49
+ };
@@ -0,0 +1,55 @@
1
+ import path from "path";
2
+ import fse from "fs-extra";
3
+ import { Listr } from "listr2";
4
+ import c from "../../../lib/colors.js";
5
+ import { getPaths } from "../../../lib/index.js";
6
+ const SIDE_MAP = {
7
+ web: ["cell", "component", "layout", "page", "scaffold"],
8
+ api: ["function", "sdl", "service"]
9
+ };
10
+ const copyGenerator = (name, { force }) => {
11
+ const side = SIDE_MAP["web"].includes(name) ? "web" : "api";
12
+ const from = path.join(
13
+ import.meta.dirname,
14
+ "../../generate",
15
+ name,
16
+ "templates"
17
+ );
18
+ const to = path.join(getPaths()[side].generators, name);
19
+ fse.copySync(from, to, { overwrite: force, errorOnExist: true });
20
+ return to;
21
+ };
22
+ let destination;
23
+ const tasks = ({ name, force }) => {
24
+ return new Listr(
25
+ [
26
+ {
27
+ title: "Copying generator templates...",
28
+ task: () => {
29
+ destination = copyGenerator(name, { force });
30
+ }
31
+ },
32
+ {
33
+ title: "Destination:",
34
+ task: (ctx, task) => {
35
+ task.title = ` Wrote templates to ${destination.replace(
36
+ getPaths().base,
37
+ ""
38
+ )}`;
39
+ }
40
+ }
41
+ ],
42
+ { rendererOptions: { collapseSubtasks: false }, errorOnExist: true }
43
+ );
44
+ };
45
+ const handler = async ({ name, force }) => {
46
+ const t = tasks({ name, force });
47
+ try {
48
+ await t.run();
49
+ } catch (e) {
50
+ console.log(c.error(e.message));
51
+ }
52
+ };
53
+ export {
54
+ handler
55
+ };