@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.
- package/LICENSE +21 -0
- package/README.md +706 -0
- package/dist/commands/build.js +54 -0
- package/dist/commands/buildHandler.js +134 -0
- package/dist/commands/check.js +28 -0
- package/dist/commands/console.js +13 -0
- package/dist/commands/consoleHandler.js +68 -0
- package/dist/commands/deploy/baremetal/SshExecutor.js +41 -0
- package/dist/commands/deploy/baremetal/baremetalHandler.js +558 -0
- package/dist/commands/deploy/baremetal.js +89 -0
- package/dist/commands/deploy/flightcontrol.js +40 -0
- package/dist/commands/deploy/flightcontrolHandler.js +58 -0
- package/dist/commands/deploy/helpers/deployBuilder.js +25 -0
- package/dist/commands/deploy/helpers/deployHandler.js +31 -0
- package/dist/commands/deploy/netlify.js +21 -0
- package/dist/commands/deploy/packing/nft.js +61 -0
- package/dist/commands/deploy/render.js +37 -0
- package/dist/commands/deploy/renderHandler.js +70 -0
- package/dist/commands/deploy/serverless.js +51 -0
- package/dist/commands/deploy/serverlessHandler.js +211 -0
- package/dist/commands/deploy/vercel.js +21 -0
- package/dist/commands/deploy.js +21 -0
- package/dist/commands/destroy/cell/cell.js +12 -0
- package/dist/commands/destroy/cell/cellHandler.js +10 -0
- package/dist/commands/destroy/component/component.js +15 -0
- package/dist/commands/destroy/component/componentHandler.js +10 -0
- package/dist/commands/destroy/directive/directive.js +14 -0
- package/dist/commands/destroy/directive/directiveHandler.js +12 -0
- package/dist/commands/destroy/function/function.js +20 -0
- package/dist/commands/destroy/function/functionHandler.js +10 -0
- package/dist/commands/destroy/handlerHelpers.js +34 -0
- package/dist/commands/destroy/helpers.js +22 -0
- package/dist/commands/destroy/layout/layout.js +12 -0
- package/dist/commands/destroy/layout/layoutHandler.js +10 -0
- package/dist/commands/destroy/page/page.js +20 -0
- package/dist/commands/destroy/page/pageHandler.js +51 -0
- package/dist/commands/destroy/scaffold/scaffold.js +16 -0
- package/dist/commands/destroy/scaffold/scaffoldHandler.js +105 -0
- package/dist/commands/destroy/sdl/sdl.js +16 -0
- package/dist/commands/destroy/sdl/sdlHandler.js +33 -0
- package/dist/commands/destroy/service/service.js +10 -0
- package/dist/commands/destroy/service/serviceHandler.js +17 -0
- package/dist/commands/destroy.js +25 -0
- package/dist/commands/dev.js +47 -0
- package/dist/commands/devHandler.js +202 -0
- package/dist/commands/exec.js +38 -0
- package/dist/commands/execHandler.js +180 -0
- package/dist/commands/experimental/setupInngest.js +28 -0
- package/dist/commands/experimental/setupInngestHandler.js +46 -0
- package/dist/commands/experimental/setupOpentelemetry.js +34 -0
- package/dist/commands/experimental/setupOpentelemetryHandler.js +215 -0
- package/dist/commands/experimental/setupReactCompiler.js +28 -0
- package/dist/commands/experimental/setupReactCompilerHandler.js +124 -0
- package/dist/commands/experimental/setupRsc.js +28 -0
- package/dist/commands/experimental/setupRscHandler.js +408 -0
- package/dist/commands/experimental/setupStreamingSsr.js +28 -0
- package/dist/commands/experimental/setupStreamingSsrHandler.js +208 -0
- package/dist/commands/experimental/templates/opentelemetry.ts.template +55 -0
- package/dist/commands/experimental/templates/rsc/AboutCounter.tsx.template +20 -0
- package/dist/commands/experimental/templates/rsc/AboutPage.css.template +2 -0
- package/dist/commands/experimental/templates/rsc/AboutPage.tsx.template +17 -0
- package/dist/commands/experimental/templates/rsc/Counter.css.template +7 -0
- package/dist/commands/experimental/templates/rsc/Counter.module.css.template +3 -0
- package/dist/commands/experimental/templates/rsc/Counter.tsx.template +18 -0
- package/dist/commands/experimental/templates/rsc/Document.tsx.template +27 -0
- package/dist/commands/experimental/templates/rsc/HomePage.css.template +2 -0
- package/dist/commands/experimental/templates/rsc/HomePage.module.css.template +3 -0
- package/dist/commands/experimental/templates/rsc/HomePage.tsx.template +19 -0
- package/dist/commands/experimental/templates/rsc/NavigationLayout.css.template +32 -0
- package/dist/commands/experimental/templates/rsc/NavigationLayout.tsx.template +31 -0
- package/dist/commands/experimental/templates/rsc/Routes.tsx.template +29 -0
- package/dist/commands/experimental/templates/rsc/entry.client.tsx.template +35 -0
- package/dist/commands/experimental/templates/rsc/entry.server.tsx.template +20 -0
- package/dist/commands/experimental/templates/rsc/index.css.template +4 -0
- package/dist/commands/experimental/templates/streamingSsr/Document.tsx.template +27 -0
- package/dist/commands/experimental/templates/streamingSsr/entry.client.tsx.template +40 -0
- package/dist/commands/experimental/templates/streamingSsr/entry.server.tsx.template +20 -0
- package/dist/commands/experimental/templates/streamingSsr/tsconfig.json.template +54 -0
- package/dist/commands/experimental/util.js +69 -0
- package/dist/commands/experimental.js +22 -0
- package/dist/commands/generate/cell/cell.js +35 -0
- package/dist/commands/generate/cell/cellHandler.js +153 -0
- package/dist/commands/generate/cell/templates/cell.tsx.template +34 -0
- package/dist/commands/generate/cell/templates/cellList.tsx.template +40 -0
- package/dist/commands/generate/cell/templates/mock.ts.template +7 -0
- package/dist/commands/generate/cell/templates/mockList.ts.template +14 -0
- package/dist/commands/generate/cell/templates/stories.tsx.template +35 -0
- package/dist/commands/generate/cell/templates/test.js.template +42 -0
- package/dist/commands/generate/cell/utils/utils.js +43 -0
- package/dist/commands/generate/component/component.js +15 -0
- package/dist/commands/generate/component/componentHandler.js +55 -0
- package/dist/commands/generate/component/templates/component.tsx.template +10 -0
- package/dist/commands/generate/component/templates/stories.jsx.template +17 -0
- package/dist/commands/generate/component/templates/stories.tsx.template +26 -0
- package/dist/commands/generate/component/templates/test.tsx.template +14 -0
- package/dist/commands/generate/dataMigration/dataMigration.js +105 -0
- package/dist/commands/generate/dataMigration/templates/dataMigration.js.template +7 -0
- package/dist/commands/generate/dataMigration/templates/dataMigration.ts.template +5 -0
- package/dist/commands/generate/dbAuth/dbAuth.js +55 -0
- package/dist/commands/generate/dbAuth/dbAuthHandler.js +375 -0
- package/dist/commands/generate/dbAuth/templates/forgotPassword.tsx.template +94 -0
- package/dist/commands/generate/dbAuth/templates/login.tsx.template +130 -0
- package/dist/commands/generate/dbAuth/templates/login.webAuthn.tsx.template +264 -0
- package/dist/commands/generate/dbAuth/templates/resetPassword.tsx.template +121 -0
- package/dist/commands/generate/dbAuth/templates/signup.tsx.template +123 -0
- package/dist/commands/generate/directive/directive.js +15 -0
- package/dist/commands/generate/directive/directiveHandler.js +159 -0
- package/dist/commands/generate/directive/templates/transformer.directive.test.ts.template +18 -0
- package/dist/commands/generate/directive/templates/transformer.directive.ts.template +38 -0
- package/dist/commands/generate/directive/templates/validator.directive.test.ts.template +17 -0
- package/dist/commands/generate/directive/templates/validator.directive.ts.template +39 -0
- package/dist/commands/generate/function/function.js +29 -0
- package/dist/commands/generate/function/functionHandler.js +131 -0
- package/dist/commands/generate/function/templates/function.ts.template +33 -0
- package/dist/commands/generate/function/templates/scenarios.ts.template +8 -0
- package/dist/commands/generate/function/templates/test.ts.template +30 -0
- package/dist/commands/generate/helpers.js +71 -0
- package/dist/commands/generate/job/job.js +39 -0
- package/dist/commands/generate/job/jobHandler.js +138 -0
- package/dist/commands/generate/job/templates/job.ts.template +8 -0
- package/dist/commands/generate/job/templates/scenarios.ts.template +8 -0
- package/dist/commands/generate/job/templates/test.ts.template +7 -0
- package/dist/commands/generate/layout/layout.js +25 -0
- package/dist/commands/generate/layout/layoutHandler.js +59 -0
- package/dist/commands/generate/layout/templates/layout.tsx.a11y.template +27 -0
- package/dist/commands/generate/layout/templates/layout.tsx.template +9 -0
- package/dist/commands/generate/layout/templates/stories.tsx.template +13 -0
- package/dist/commands/generate/layout/templates/test.tsx.template +14 -0
- package/dist/commands/generate/model/model.js +29 -0
- package/dist/commands/generate/model/modelHandler.js +63 -0
- package/dist/commands/generate/model/templates/model.js.template +3 -0
- package/dist/commands/generate/ogImage/ogImage.js +43 -0
- package/dist/commands/generate/ogImage/ogImageHandler.js +111 -0
- package/dist/commands/generate/ogImage/templates/ogImage.og.tsx.template +13 -0
- package/dist/commands/generate/page/page.js +22 -0
- package/dist/commands/generate/page/pageHandler.js +227 -0
- package/dist/commands/generate/page/templates/page.tsx.template +35 -0
- package/dist/commands/generate/page/templates/stories.tsx.parameters.template +13 -0
- package/dist/commands/generate/page/templates/stories.tsx.template +13 -0
- package/dist/commands/generate/page/templates/test.tsx.template +14 -0
- package/dist/commands/generate/realtime/realtime.js +41 -0
- package/dist/commands/generate/realtime/realtimeHandler.js +215 -0
- package/dist/commands/generate/realtime/templates/liveQueries/blank/blank.sdl.ts.template +27 -0
- package/dist/commands/generate/realtime/templates/liveQueries/blank/blank.service.ts.template +73 -0
- package/dist/commands/generate/realtime/templates/realtime.ts.template +42 -0
- package/dist/commands/generate/realtime/templates/subscriptions/blank/blank.sdl.ts.template +20 -0
- package/dist/commands/generate/realtime/templates/subscriptions/blank/blank.service.ts.template +19 -0
- package/dist/commands/generate/realtime/templates/subscriptions/blank/blank.ts.template +58 -0
- package/dist/commands/generate/scaffold/scaffold.js +38 -0
- package/dist/commands/generate/scaffold/scaffoldHandler.js +663 -0
- package/dist/commands/generate/scaffold/templates/assets/scaffold.css.template +398 -0
- package/dist/commands/generate/scaffold/templates/assets/scaffold.tailwind.css.template +243 -0
- package/dist/commands/generate/scaffold/templates/components/EditNameCell.tsx.template +74 -0
- package/dist/commands/generate/scaffold/templates/components/Name.tsx.template +79 -0
- package/dist/commands/generate/scaffold/templates/components/NameCell.tsx.template +32 -0
- package/dist/commands/generate/scaffold/templates/components/NameForm.tsx.template +123 -0
- package/dist/commands/generate/scaffold/templates/components/Names.tsx.template +88 -0
- package/dist/commands/generate/scaffold/templates/components/NamesCell.tsx.template +45 -0
- package/dist/commands/generate/scaffold/templates/components/NewName.tsx.template +55 -0
- package/dist/commands/generate/scaffold/templates/layouts/ScaffoldLayout.tsx.template +37 -0
- package/dist/commands/generate/scaffold/templates/lib/formatters.test.tsx.template +192 -0
- package/dist/commands/generate/scaffold/templates/lib/formatters.tsx.template +58 -0
- package/dist/commands/generate/scaffold/templates/pages/EditNamePage.tsx.template +11 -0
- package/dist/commands/generate/scaffold/templates/pages/NamePage.tsx.template +11 -0
- package/dist/commands/generate/scaffold/templates/pages/NamesPage.tsx.template +7 -0
- package/dist/commands/generate/scaffold/templates/pages/NewNamePage.tsx.template +7 -0
- package/dist/commands/generate/script/script.js +29 -0
- package/dist/commands/generate/script/scriptHandler.js +85 -0
- package/dist/commands/generate/script/templates/script.ts.template +15 -0
- package/dist/commands/generate/script/templates/tsconfig.json.template +33 -0
- package/dist/commands/generate/sdl/sdl.js +48 -0
- package/dist/commands/generate/sdl/sdlHandler.js +282 -0
- package/dist/commands/generate/sdl/templates/sdl.js.template +70 -0
- package/dist/commands/generate/sdl/templates/sdl.ts.template +70 -0
- package/dist/commands/generate/secret/secret.js +52 -0
- package/dist/commands/generate/service/service.js +50 -0
- package/dist/commands/generate/service/serviceHandler.js +301 -0
- package/dist/commands/generate/service/templates/scenarios.ts.template +7 -0
- package/dist/commands/generate/service/templates/service.ts.template +38 -0
- package/dist/commands/generate/service/templates/test.ts.template +84 -0
- package/dist/commands/generate/yargsCommandHelpers.js +77 -0
- package/dist/commands/generate/yargsHandlerHelpers.js +155 -0
- package/dist/commands/generate.js +44 -0
- package/dist/commands/info.js +36 -0
- package/dist/commands/jobs.js +17 -0
- package/dist/commands/jobsHandler.js +30 -0
- package/dist/commands/lint.js +57 -0
- package/dist/commands/prerender.js +34 -0
- package/dist/commands/prerenderHandler.js +282 -0
- package/dist/commands/prisma.js +17 -0
- package/dist/commands/prismaHandler.js +90 -0
- package/dist/commands/record/init.js +11 -0
- package/dist/commands/record.js +19 -0
- package/dist/commands/serve.js +139 -0
- package/dist/commands/serveApiHandler.js +15 -0
- package/dist/commands/serveBothHandler.js +95 -0
- package/dist/commands/serveWebHandler.js +17 -0
- package/dist/commands/setup/auth/auth.js +265 -0
- package/dist/commands/setup/cache/cache.js +37 -0
- package/dist/commands/setup/cache/cacheHandler.js +69 -0
- package/dist/commands/setup/cache/templates/memcached.ts.template +30 -0
- package/dist/commands/setup/cache/templates/redis.ts.template +24 -0
- package/dist/commands/setup/deploy/deploy.js +26 -0
- package/dist/commands/setup/deploy/helpers/helpers.js +9 -0
- package/dist/commands/setup/deploy/helpers/index.js +110 -0
- package/dist/commands/setup/deploy/providers/baremetal.js +9 -0
- package/dist/commands/setup/deploy/providers/baremetalHandler.js +64 -0
- package/dist/commands/setup/deploy/providers/coherence.js +24 -0
- package/dist/commands/setup/deploy/providers/coherenceHandler.js +203 -0
- package/dist/commands/setup/deploy/providers/flightcontrol.js +19 -0
- package/dist/commands/setup/deploy/providers/flightcontrolHandler.js +294 -0
- package/dist/commands/setup/deploy/providers/netlify.js +9 -0
- package/dist/commands/setup/deploy/providers/netlifyHandler.js +42 -0
- package/dist/commands/setup/deploy/providers/render.js +17 -0
- package/dist/commands/setup/deploy/providers/renderHandler.js +111 -0
- package/dist/commands/setup/deploy/providers/serverless.js +11 -0
- package/dist/commands/setup/deploy/providers/serverlessHandler.js +141 -0
- package/dist/commands/setup/deploy/providers/vercel.js +9 -0
- package/dist/commands/setup/deploy/providers/vercelHandler.js +56 -0
- package/dist/commands/setup/deploy/templates/baremetal.js +128 -0
- package/dist/commands/setup/deploy/templates/flightcontrol.js +85 -0
- package/dist/commands/setup/deploy/templates/netlify.js +32 -0
- package/dist/commands/setup/deploy/templates/render.js +72 -0
- package/dist/commands/setup/deploy/templates/serverless/api.js +78 -0
- package/dist/commands/setup/deploy/templates/serverless/web.js +32 -0
- package/dist/commands/setup/docker/docker.js +26 -0
- package/dist/commands/setup/docker/dockerHandler.js +265 -0
- package/dist/commands/setup/docker/templates/Dockerfile +154 -0
- package/dist/commands/setup/docker/templates/docker-compose.dev.yml +58 -0
- package/dist/commands/setup/docker/templates/docker-compose.prod.yml +63 -0
- package/dist/commands/setup/docker/templates/dockerignore +18 -0
- package/dist/commands/setup/generator/generator.js +49 -0
- package/dist/commands/setup/generator/generatorHandler.js +55 -0
- package/dist/commands/setup/graphql/features/fragments/appGqlConfigTransform.js +117 -0
- package/dist/commands/setup/graphql/features/fragments/appImportTransform.js +20 -0
- package/dist/commands/setup/graphql/features/fragments/fragments.js +25 -0
- package/dist/commands/setup/graphql/features/fragments/fragmentsHandler.js +89 -0
- package/dist/commands/setup/graphql/features/trustedDocuments/graphqlTransform.js +51 -0
- package/dist/commands/setup/graphql/features/trustedDocuments/trustedDocuments.js +25 -0
- package/dist/commands/setup/graphql/features/trustedDocuments/trustedDocumentsHandler.js +74 -0
- package/dist/commands/setup/graphql/graphql.js +18 -0
- package/dist/commands/setup/i18n/i18n.js +25 -0
- package/dist/commands/setup/i18n/i18nHandler.js +169 -0
- package/dist/commands/setup/i18n/templates/en.json.template +11 -0
- package/dist/commands/setup/i18n/templates/fr.json.template +11 -0
- package/dist/commands/setup/i18n/templates/i18n.js.template +52 -0
- package/dist/commands/setup/i18n/templates/storybook.preview.tsx.template +43 -0
- package/dist/commands/setup/jobs/jobs.js +31 -0
- package/dist/commands/setup/jobs/jobsHandler.js +122 -0
- package/dist/commands/setup/jobs/templates/jobs.ts.template +32 -0
- package/dist/commands/setup/mailer/mailer.js +30 -0
- package/dist/commands/setup/mailer/mailerHandler.js +106 -0
- package/dist/commands/setup/mailer/templates/mailer.ts.template +30 -0
- package/dist/commands/setup/mailer/templates/re-example.tsx.template +40 -0
- package/dist/commands/setup/middleware/middleware.js +17 -0
- package/dist/commands/setup/middleware/ogImage/__codemod_tests__/middleware.js +15 -0
- package/dist/commands/setup/middleware/ogImage/__codemod_tests__/vitePlugin.js +6 -0
- package/dist/commands/setup/middleware/ogImage/codemodMiddleware.js +97 -0
- package/dist/commands/setup/middleware/ogImage/codemodVitePlugin.js +65 -0
- package/dist/commands/setup/middleware/ogImage/ogImage.js +27 -0
- package/dist/commands/setup/middleware/ogImage/ogImageHandler.js +121 -0
- package/dist/commands/setup/monitoring/monitoring.js +17 -0
- package/dist/commands/setup/monitoring/sentry/sentry.js +25 -0
- package/dist/commands/setup/monitoring/sentry/sentryHandler.js +163 -0
- package/dist/commands/setup/monitoring/sentry/templates/sentryApi.ts.template +15 -0
- package/dist/commands/setup/monitoring/sentry/templates/sentryWeb.ts.template +31 -0
- package/dist/commands/setup/package/package.js +33 -0
- package/dist/commands/setup/package/packageHandler.js +134 -0
- package/dist/commands/setup/realtime/realtime.js +37 -0
- package/dist/commands/setup/realtime/realtimeHandler.js +309 -0
- package/dist/commands/setup/realtime/templates/defer/fastAndSlowFields/fastAndSlowFields.sdl.template +14 -0
- package/dist/commands/setup/realtime/templates/defer/fastAndSlowFields/fastAndSlowFields.ts.template +14 -0
- package/dist/commands/setup/realtime/templates/liveQueries/auctions/auctions.sdl.ts.template +27 -0
- package/dist/commands/setup/realtime/templates/liveQueries/auctions/auctions.ts.template +73 -0
- package/dist/commands/setup/realtime/templates/realtime.ts.template +46 -0
- package/dist/commands/setup/realtime/templates/stream/alphabet/alphabet.sdl.template +9 -0
- package/dist/commands/setup/realtime/templates/stream/alphabet/alphabet.ts.template +31 -0
- package/dist/commands/setup/realtime/templates/subscriptions/countdown/countdown.ts.template +58 -0
- package/dist/commands/setup/realtime/templates/subscriptions/newMessage/newMessage.ts.template +57 -0
- package/dist/commands/setup/realtime/templates/subscriptions/newMessage/rooms.sdl.ts.template +20 -0
- package/dist/commands/setup/realtime/templates/subscriptions/newMessage/rooms.ts.template +20 -0
- package/dist/commands/setup/server-file/serverFile.js +31 -0
- package/dist/commands/setup/server-file/serverFileHandler.js +56 -0
- package/dist/commands/setup/server-file/templates/server.ts.template +13 -0
- package/dist/commands/setup/tsconfig/tsconfig.js +25 -0
- package/dist/commands/setup/tsconfig/tsconfigHandler.js +59 -0
- package/dist/commands/setup/ui/helpers/helpers.js +9 -0
- package/dist/commands/setup/ui/libraries/chakra-ui.js +24 -0
- package/dist/commands/setup/ui/libraries/chakra-uiHandler.js +98 -0
- package/dist/commands/setup/ui/libraries/mantine.js +32 -0
- package/dist/commands/setup/ui/libraries/mantineHandler.js +138 -0
- package/dist/commands/setup/ui/libraries/tailwindcss.js +26 -0
- package/dist/commands/setup/ui/libraries/tailwindcssHandler.js +386 -0
- package/dist/commands/setup/ui/templates/chakra.storybook.preview.tsx.template +20 -0
- package/dist/commands/setup/ui/templates/mantine-postcss.config.js.template +35 -0
- package/dist/commands/setup/ui/templates/mantine.storybook.preview.tsx.template +18 -0
- package/dist/commands/setup/ui/templates/postcss.config.js.template +9 -0
- package/dist/commands/setup/ui/ui.js +17 -0
- package/dist/commands/setup/uploads/dbCodemod.js +28 -0
- package/dist/commands/setup/uploads/templates/signedUrl.ts.template +21 -0
- package/dist/commands/setup/uploads/templates/srcLibUploads.ts.template +25 -0
- package/dist/commands/setup/uploads/uploads.js +26 -0
- package/dist/commands/setup/uploads/uploadsHandler.js +147 -0
- package/dist/commands/setup/vite/templates/vite.config.ts.template +19 -0
- package/dist/commands/setup/vite/vite.js +38 -0
- package/dist/commands/setup/vite/viteHandler.js +83 -0
- package/dist/commands/setup.js +33 -0
- package/dist/commands/studio.js +23 -0
- package/dist/commands/studioHandler.js +61 -0
- package/dist/commands/test.js +44 -0
- package/dist/commands/testHandler.js +138 -0
- package/dist/commands/ts-to-js.js +20 -0
- package/dist/commands/type-check.js +41 -0
- package/dist/commands/type-checkHandler.js +71 -0
- package/dist/commands/upgrade.js +441 -0
- package/dist/index.d.js +0 -0
- package/dist/index.js +146 -0
- package/dist/lib/background.js +45 -0
- package/dist/lib/colors.js +18 -0
- package/dist/lib/configureStorybook.js +50 -0
- package/dist/lib/exec.js +85 -0
- package/dist/lib/exit.js +44 -0
- package/dist/lib/extendFile.js +114 -0
- package/dist/lib/generatePrismaClient.js +60 -0
- package/dist/lib/index.js +485 -0
- package/dist/lib/loadEnvFiles.js +12 -0
- package/dist/lib/locking.js +60 -0
- package/dist/lib/merge/algorithms.js +30 -0
- package/dist/lib/merge/index.js +163 -0
- package/dist/lib/merge/semanticIdentity.js +18 -0
- package/dist/lib/merge/strategy.js +136 -0
- package/dist/lib/mockTelemetry.js +7 -0
- package/dist/lib/packages.js +77 -0
- package/dist/lib/plugin.js +206 -0
- package/dist/lib/pluralHelpers.js +50 -0
- package/dist/lib/ports.js +17 -0
- package/dist/lib/project.js +30 -0
- package/dist/lib/rollback.js +72 -0
- package/dist/lib/runTransform.js +66 -0
- package/dist/lib/rwPluralize.js +56 -0
- package/dist/lib/schemaHelpers.js +95 -0
- package/dist/lib/templates/storybook.preview.tsx.template +19 -0
- package/dist/lib/test.js +106 -0
- package/dist/lib/updateCheck.js +202 -0
- package/dist/lib/updateCheckExecute.js +2 -0
- package/dist/middleware/checkNodeVersion.js +23 -0
- package/dist/middleware/detectProjectRxVersion.js +12 -0
- package/dist/plugin.js +223 -0
- package/dist/rwfw.js +47 -0
- package/dist/telemetry/exporter.js +63 -0
- package/dist/telemetry/index.js +84 -0
- package/dist/telemetry/resource.js +98 -0
- package/dist/telemetry/send.js +80 -0
- package/dist/testLib/cells.js +188 -0
- package/dist/testLib/fetchFileFromTemplate.js +9 -0
- package/dist/testLib/getFilesWithPattern.js +21 -0
- package/dist/testLib/getRootPackageJSON.js +14 -0
- package/dist/testLib/isTSProject.js +9 -0
- package/dist/testLib/runTransform.js +42 -0
- 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,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
|
+
};
|