@cedarjs/cli 3.1.1 → 3.1.2-next.126

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 (83) hide show
  1. package/dist/commands/build/buildHandler.js +23 -5
  2. package/dist/commands/build/buildPackagesTask.js +2 -2
  3. package/dist/commands/build.js +1 -1
  4. package/dist/commands/check.js +1 -2
  5. package/dist/commands/consoleHandler.js +1 -1
  6. package/dist/commands/deploy/baremetal/baremetalHandler.js +1 -2
  7. package/dist/commands/deploy/helpers/deployHandler.js +1 -1
  8. package/dist/commands/deploy/serverlessHandler.js +1 -2
  9. package/dist/commands/destroy/page/pageHandler.js +1 -2
  10. package/dist/commands/destroy/scaffold/scaffoldHandler.js +1 -2
  11. package/dist/commands/destroy/sdl/sdlHandler.js +1 -2
  12. package/dist/commands/dev/devHandler.js +12 -4
  13. package/dist/commands/dev/packageWatchCommands.js +1 -1
  14. package/dist/commands/dev.js +1 -1
  15. package/dist/commands/execHandler.js +10 -7
  16. package/dist/commands/{setup → experimental}/live-queries/liveQueries.js +5 -4
  17. package/dist/commands/{setup → experimental}/live-queries/liveQueriesHandler.js +80 -27
  18. package/dist/commands/{setup → experimental}/live-queries/templates/liveQueriesListener.ts.template +14 -3
  19. package/dist/commands/experimental/setupInngestHandler.js +1 -1
  20. package/dist/commands/experimental/setupOpentelemetryHandler.js +1 -2
  21. package/dist/commands/experimental/setupReactCompilerHandler.js +1 -1
  22. package/dist/commands/experimental/setupRscHandler.js +1 -2
  23. package/dist/commands/experimental/setupStreamingSsrHandler.js +1 -2
  24. package/dist/commands/experimental/templates/streamingSsr/tsconfig.json.template +6 -6
  25. package/dist/commands/experimental/util.js +24 -23
  26. package/dist/commands/experimental.js +2 -1
  27. package/dist/commands/generate/dataMigration/dataMigration.js +1 -2
  28. package/dist/commands/generate/dbAuth/dbAuthHandler.js +1 -2
  29. package/dist/commands/generate/directive/directiveHandler.js +3 -4
  30. package/dist/commands/generate/function/functionHandler.js +1 -2
  31. package/dist/commands/generate/job/jobHandler.js +1 -2
  32. package/dist/commands/generate/model/modelHandler.js +1 -2
  33. package/dist/commands/generate/ogImage/ogImageHandler.js +1 -2
  34. package/dist/commands/generate/package/packageHandler.js +1 -2
  35. package/dist/commands/generate/page/pageHandler.js +1 -2
  36. package/dist/commands/generate/realtime/realtimeHandler.js +1 -1
  37. package/dist/commands/generate/scaffold/scaffoldHandler.js +1 -2
  38. package/dist/commands/generate/script/scriptHandler.js +1 -2
  39. package/dist/commands/generate/script/templates/tsconfig.json.template +2 -2
  40. package/dist/commands/generate/sdl/sdlHandler.js +1 -2
  41. package/dist/commands/generate/yargsHandlerHelpers.js +1 -2
  42. package/dist/commands/generate.js +1 -1
  43. package/dist/commands/lint.js +12 -5
  44. package/dist/commands/prerenderHandler.js +6 -4
  45. package/dist/commands/prismaHandler.js +1 -2
  46. package/dist/commands/serve.js +1 -2
  47. package/dist/commands/setup/cache/cacheHandler.js +3 -3
  48. package/dist/commands/setup/deploy/providers/baremetalHandler.js +1 -2
  49. package/dist/commands/setup/deploy/providers/flightcontrolHandler.js +1 -2
  50. package/dist/commands/setup/deploy/providers/netlifyHandler.js +1 -2
  51. package/dist/commands/setup/deploy/providers/renderHandler.js +1 -2
  52. package/dist/commands/setup/deploy/providers/serverlessHandler.js +1 -2
  53. package/dist/commands/setup/deploy/providers/vercelHandler.js +1 -2
  54. package/dist/commands/setup/docker/dockerHandler.js +1 -2
  55. package/dist/commands/setup/docker/templates/dockerignore +1 -0
  56. package/dist/commands/setup/generator/generatorHandler.js +1 -1
  57. package/dist/commands/setup/i18n/i18nHandler.js +3 -2
  58. package/dist/commands/setup/jobs/jobsHandler.js +3 -3
  59. package/dist/commands/setup/mailer/mailerHandler.js +1 -2
  60. package/dist/commands/setup/realtime/realtimeHandler.js +3 -4
  61. package/dist/commands/setup/server-file/serverFileHandler.js +1 -2
  62. package/dist/commands/setup/tsconfig/tsconfigHandler.js +3 -2
  63. package/dist/commands/setup/ui/libraries/chakra-uiHandler.js +1 -2
  64. package/dist/commands/setup/ui/libraries/mantineHandler.js +1 -2
  65. package/dist/commands/setup/ui/libraries/tailwindcssHandler.js +1 -2
  66. package/dist/commands/setup/uploads/uploadsHandler.js +7 -4
  67. package/dist/commands/setup/vite/viteHandler.js +1 -2
  68. package/dist/commands/setup.js +1 -2
  69. package/dist/commands/test/testHandler.js +1 -2
  70. package/dist/commands/test.js +1 -1
  71. package/dist/commands/testEsm.js +1 -1
  72. package/dist/commands/type-checkHandler.js +1 -1
  73. package/dist/commands/upgrade/upgrade.js +1 -1
  74. package/dist/commands/upgrade/upgradeHandler.js +1 -2
  75. package/dist/index.js +5 -2
  76. package/dist/lib/exec.js +8 -4
  77. package/dist/lib/index.js +1 -1
  78. package/dist/lib/merge/index.js +2 -0
  79. package/dist/lib/test.js +4 -4
  80. package/dist/middleware/checkNodeVersion.js +1 -1
  81. package/package.json +16 -16
  82. package/dist/lib/colors.js +0 -18
  83. /package/dist/commands/{setup → experimental}/live-queries/templates/migration.sql.template +0 -0
@@ -4,13 +4,19 @@ import path from "node:path";
4
4
  import execa from "execa";
5
5
  import { Listr } from "listr2";
6
6
  import { terminalLink } from "termi-link";
7
- import { recordTelemetryAttributes } from "@cedarjs/cli-helpers";
7
+ import { recordTelemetryAttributes, colors as c } from "@cedarjs/cli-helpers";
8
+ import {
9
+ formatCedarCommand,
10
+ formatRunWorkspaceScriptCommand
11
+ } from "@cedarjs/cli-helpers/packageManager/display";
12
+ import { runBin } from "@cedarjs/cli-helpers/packageManager/exec";
8
13
  import { buildApi, cleanApiBuild } from "@cedarjs/internal/dist/build/api";
9
14
  import { generate } from "@cedarjs/internal/dist/generate/generate";
15
+ import { generateGqlormArtifacts } from "@cedarjs/internal/dist/generate/gqlormSchema";
10
16
  import { loadAndValidateSdls } from "@cedarjs/internal/dist/validateSchema";
11
17
  import { detectPrerenderRoutes } from "@cedarjs/prerender/detection";
18
+ import {} from "@cedarjs/project-config";
12
19
  import { timedTelemetry } from "@cedarjs/telemetry";
13
- import c from "../../lib/colors.js";
14
20
  import { generatePrismaCommand } from "../../lib/generatePrismaClient.js";
15
21
  import { getPaths, getConfig } from "../../lib/index.js";
16
22
  import { buildPackagesTask } from "./buildPackagesTask.js";
@@ -124,7 +130,9 @@ const handler = async ({
124
130
  ${details}
125
131
 
126
132
  This usually means the package has not been built yet.
127
- Run ` + c.info("yarn cedar build") + " (without specifying a workspace) to build everything,\nor build the package manually first, e.g. " + c.info(`yarn workspace ${problems[0].pkgName} build`)
133
+ Run ` + c.info(formatCedarCommand(["build"])) + " (without specifying a workspace) to build everything,\nor build the package manually first, e.g. " + c.info(
134
+ formatRunWorkspaceScriptCommand(problems[0].pkgName, "build")
135
+ )
128
136
  );
129
137
  }
130
138
  },
@@ -135,6 +143,17 @@ Run ` + c.info("yarn cedar build") + " (without specifying a workspace) to build
135
143
  title: gqlFeaturesTaskTitle,
136
144
  task: generate
137
145
  },
146
+ workspace.includes("web") && cedarConfig.experimental?.gqlorm?.enabled && {
147
+ title: "Generating gqlorm schema...",
148
+ task: async () => {
149
+ const { errors } = await generateGqlormArtifacts();
150
+ if (errors.length > 0) {
151
+ for (const { message } of errors) {
152
+ console.warn(`Warning: ${message}`);
153
+ }
154
+ }
155
+ }
156
+ },
138
157
  workspace.includes("api") && {
139
158
  title: "Verifying graphql schema...",
140
159
  task: loadAndValidateSdls
@@ -193,9 +212,8 @@ Run ` + c.info("yarn cedar build") + " (without specifying a workspace) to build
193
212
  );
194
213
  return;
195
214
  }
196
- await execa("yarn cedar prerender", {
215
+ await runBin("cedar", ["prerender"], {
197
216
  stdio: "inherit",
198
- shell: true,
199
217
  cwd: cedarPaths.web.base
200
218
  });
201
219
  };
@@ -1,6 +1,6 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
- import execa from "execa";
3
+ import { runScript } from "@cedarjs/cli-helpers/packageManager/exec";
4
4
  import { importStatementPath } from "@cedarjs/project-config";
5
5
  import { errorTelemetry } from "@cedarjs/telemetry";
6
6
  import { getPaths } from "../../lib/index.js";
@@ -28,7 +28,7 @@ async function buildPackagesTask(task, nonApiWebWorkspaces) {
28
28
  title: name,
29
29
  task: async () => {
30
30
  try {
31
- await execa("yarn", ["build"], { cwd: workspacePath });
31
+ await runScript("build", [], { cwd: workspacePath });
32
32
  } catch (e) {
33
33
  errorTelemetry(
34
34
  process.argv,
@@ -1,5 +1,5 @@
1
1
  import { terminalLink } from "termi-link";
2
- import c from "../lib/colors.js";
2
+ import { colors as c } from "@cedarjs/cli-helpers";
3
3
  import { exitWithError } from "../lib/exit.js";
4
4
  import { workspaces } from "../lib/project.js";
5
5
  import { checkNodeVersion } from "../middleware/checkNodeVersion.js";
@@ -1,5 +1,4 @@
1
- import { recordTelemetryAttributes } from "@cedarjs/cli-helpers";
2
- import c from "../lib/colors.js";
1
+ import { recordTelemetryAttributes, colors as c } from "@cedarjs/cli-helpers";
3
2
  const command = "check";
4
3
  const aliases = ["diagnostics"];
5
4
  const description = "Get structural diagnostics for a Redwood project (experimental)";
@@ -12,7 +12,7 @@ function isREPLServerWithHistory(replServer) {
12
12
  const loadPrismaClient = (replContext) => {
13
13
  const createdRequire = createRequire(import.meta.url);
14
14
  const { db } = createdRequire(path.join(paths.api.lib, "db"));
15
- db[Symbol.for("nodejs.util.inspect.custom")] = "PrismaClient";
15
+ db[/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")] = "PrismaClient";
16
16
  replContext.db = db;
17
17
  };
18
18
  const consoleHistoryFile = path.join(paths.generated.base, "console_history");
@@ -5,8 +5,7 @@ import { Listr } from "listr2";
5
5
  import * as toml from "smol-toml";
6
6
  import { env as envInterpolation } from "string-env-interpolation";
7
7
  import { titleCase } from "title-case";
8
- import { recordTelemetryAttributes } from "@cedarjs/cli-helpers";
9
- import c from "../../../lib/colors.js";
8
+ import { colors as c, recordTelemetryAttributes } from "@cedarjs/cli-helpers";
10
9
  import { getPaths } from "../../../lib/index.js";
11
10
  import { SshExecutor } from "./SshExecutor.js";
12
11
  const CONFIG_FILENAME = "deploy.toml";
@@ -1,6 +1,6 @@
1
1
  import execa from "execa";
2
+ import { colors as c } from "@cedarjs/cli-helpers";
2
3
  import { getPaths } from "@cedarjs/project-config";
3
- import c from "../../../lib/colors.js";
4
4
  const deployHandler = ({ build, prisma, dm: dataMigrate }) => {
5
5
  const paths = getPaths();
6
6
  let commandSet = [];
@@ -6,8 +6,7 @@ import { config } from "dotenv-defaults";
6
6
  import execa from "execa";
7
7
  import { Listr } from "listr2";
8
8
  import prompts from "prompts";
9
- import { recordTelemetryAttributes } from "@cedarjs/cli-helpers";
10
- import c from "../../lib/colors.js";
9
+ import { recordTelemetryAttributes, colors as c } from "@cedarjs/cli-helpers";
11
10
  import { getPaths } from "../../lib/index.js";
12
11
  const preRequisites = () => [
13
12
  {
@@ -1,7 +1,6 @@
1
1
  import camelcase from "camelcase";
2
2
  import { Listr } from "listr2";
3
- import { recordTelemetryAttributes } from "@cedarjs/cli-helpers";
4
- import c from "../../../lib/colors.js";
3
+ import { recordTelemetryAttributes, colors as c } from "@cedarjs/cli-helpers";
5
4
  import {
6
5
  deleteFilesTask,
7
6
  removeRoutesFromRouterTask
@@ -1,8 +1,7 @@
1
1
  import { Listr } from "listr2";
2
2
  import pascalcase from "pascalcase";
3
- import { recordTelemetryAttributes } from "@cedarjs/cli-helpers";
3
+ import { recordTelemetryAttributes, colors as c } from "@cedarjs/cli-helpers";
4
4
  import { pluralize } from "@cedarjs/utils/cedarPluralize";
5
- import c from "../../../lib/colors.js";
6
5
  import {
7
6
  deleteFilesTask,
8
7
  getPaths,
@@ -1,6 +1,5 @@
1
1
  import { Listr } from "listr2";
2
- import { recordTelemetryAttributes } from "@cedarjs/cli-helpers";
3
- import c from "../../../lib/colors.js";
2
+ import { recordTelemetryAttributes, colors as c } from "@cedarjs/cli-helpers";
4
3
  import { deleteFilesTask } from "../../../lib/index.js";
5
4
  import { verifyModelName } from "../../../lib/schemaHelpers.js";
6
5
  import { files } from "../../generate/sdl/sdlHandler.js";
@@ -2,11 +2,11 @@ import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import { Writable } from "node:stream";
4
4
  import concurrently from "concurrently";
5
- import { recordTelemetryAttributes } from "@cedarjs/cli-helpers";
5
+ import { recordTelemetryAttributes, colors as c } from "@cedarjs/cli-helpers";
6
6
  import { shutdownPort } from "@cedarjs/internal/dist/dev";
7
+ import { generateGqlormArtifacts } from "@cedarjs/internal/dist/generate/gqlormSchema";
7
8
  import { getConfig, getConfigPath } from "@cedarjs/project-config";
8
9
  import { errorTelemetry } from "@cedarjs/telemetry";
9
- import c from "../../lib/colors.js";
10
10
  import { exitWithError } from "../../lib/exit.js";
11
11
  import { generatePrismaClient } from "../../lib/generatePrismaClient.js";
12
12
  import { getPaths } from "../../lib/index.js";
@@ -112,6 +112,14 @@ const handler = async ({
112
112
  );
113
113
  }
114
114
  }
115
+ if (generate && workspace.includes("web") && getConfig().experimental?.gqlorm?.enabled) {
116
+ try {
117
+ await generateGqlormArtifacts();
118
+ } catch (e) {
119
+ const message = getErrorMessage(e);
120
+ console.error(c.error(`Error generating gqlorm schema: ${message}`));
121
+ }
122
+ }
115
123
  const cedarConfigPath = getConfigPath();
116
124
  const streamingSsrEnabled = getConfig().experimental?.streamingSsr?.enabled;
117
125
  process.env.VITE_CJS_IGNORE_WARNING = "true";
@@ -158,7 +166,7 @@ const handler = async ({
158
166
  if (generate) {
159
167
  jobs.push({
160
168
  name: "gen",
161
- command: "yarn rw-gen-watch",
169
+ command: "yarn cedar-gen-watch",
162
170
  prefixColor: "green"
163
171
  });
164
172
  }
@@ -208,7 +216,7 @@ const handler = async ({
208
216
  handleInput: true,
209
217
  outputStream
210
218
  });
211
- result.catch((e) => {
219
+ result.then(() => process.exit(0)).catch((e) => {
212
220
  if (e?.message) {
213
221
  errorTelemetry(
214
222
  process.argv,
@@ -1,7 +1,7 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
+ import { colors as c } from "@cedarjs/cli-helpers";
3
4
  import { importStatementPath } from "@cedarjs/project-config";
4
- import c from "../../lib/colors.js";
5
5
  import { getPaths } from "../../lib/index.js";
6
6
  async function getPackageWatchCommands(packageWorkspaces) {
7
7
  const cedarPaths = getPaths();
@@ -1,5 +1,5 @@
1
1
  import { terminalLink } from "termi-link";
2
- import c from "../lib/colors.js";
2
+ import { colors as c } from "@cedarjs/cli-helpers";
3
3
  import { workspaces } from "../lib/project.js";
4
4
  import { checkNodeVersion } from "../middleware/checkNodeVersion.js";
5
5
  const command = "dev [workspace..]";
@@ -3,9 +3,8 @@ import path from "node:path";
3
3
  import { context } from "@opentelemetry/api";
4
4
  import { suppressTracing } from "@opentelemetry/core";
5
5
  import { Listr } from "listr2";
6
- import { recordTelemetryAttributes } from "@cedarjs/cli-helpers";
6
+ import { recordTelemetryAttributes, colors as c } from "@cedarjs/cli-helpers";
7
7
  import { findScripts } from "@cedarjs/internal/dist/files";
8
- import c from "../lib/colors.js";
9
8
  import { runScriptFunction } from "../lib/exec.js";
10
9
  import { generatePrismaClient } from "../lib/generatePrismaClient.js";
11
10
  import { getPaths } from "../lib/index.js";
@@ -81,8 +80,8 @@ No script called \`${name}\` in the ./scripts folder.
81
80
  args: { args: scriptArgs }
82
81
  });
83
82
  } catch (error) {
84
- const message = error instanceof Error ? error.message : String(error);
85
- console.error(c.error(`Error in script: ${message}`));
83
+ console.error(c.error("\nError in script:"));
84
+ console.error(error);
86
85
  throw error;
87
86
  }
88
87
  }
@@ -91,9 +90,13 @@ No script called \`${name}\` in the ./scripts folder.
91
90
  const tasks = new Listr(scriptTasks, {
92
91
  renderer: args.silent ? "silent" : "verbose"
93
92
  });
94
- await context.with(suppressTracing(context.active()), async () => {
95
- await tasks.run();
96
- });
93
+ try {
94
+ await context.with(suppressTracing(context.active()), async () => {
95
+ await tasks.run();
96
+ });
97
+ } catch {
98
+ process.exit(1);
99
+ }
97
100
  };
98
101
  function resolveScriptPath(name) {
99
102
  const scriptPath = path.join(getPaths().scripts, name);
@@ -1,8 +1,9 @@
1
1
  import { recordTelemetryAttributes } from "@cedarjs/cli-helpers";
2
- const command = "live-queries";
2
+ import { getEpilogue } from "../util.js";
3
+ const command = "setup-live-queries";
3
4
  const description = "Setup live query invalidation with Postgres notifications";
4
5
  function builder(yargs) {
5
- yargs.option("force", {
6
+ return yargs.option("force", {
6
7
  alias: "f",
7
8
  default: false,
8
9
  description: "Overwrite existing configuration",
@@ -12,11 +13,11 @@ function builder(yargs) {
12
13
  default: false,
13
14
  description: "Print more logs",
14
15
  type: "boolean"
15
- });
16
+ }).epilogue(getEpilogue(command, description));
16
17
  }
17
18
  async function handler(options) {
18
19
  recordTelemetryAttributes({
19
- command: "setup live-queries",
20
+ command: `experimental ${command}`,
20
21
  force: options.force,
21
22
  verbose: options.verbose
22
23
  });
@@ -1,22 +1,25 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import { Listr } from "listr2";
4
- import { addApiPackages } from "@cedarjs/cli-helpers";
5
- import { getMigrationsPath, getSchemaPath } from "@cedarjs/project-config";
4
+ import { addApiPackages, colors as c } from "@cedarjs/cli-helpers";
5
+ import {
6
+ getConfigPath,
7
+ getMigrationsPath,
8
+ getSchemaPath
9
+ } from "@cedarjs/project-config";
6
10
  import { errorTelemetry } from "@cedarjs/telemetry";
7
- import c from "../../../lib/colors.js";
8
11
  import { getPaths, transformTSToJS, writeFile } from "../../../lib/index.js";
9
12
  import { isTypeScriptProject } from "../../../lib/project.js";
10
- const getApiPackageJson = () => {
13
+ function getApiPackageJson() {
11
14
  const apiPackageJsonPath = path.join(getPaths().api.base, "package.json");
12
15
  return JSON.parse(fs.readFileSync(apiPackageJsonPath, "utf-8"));
13
- };
14
- const hasPackage = (packageJson, packageName) => {
16
+ }
17
+ function hasPackage(packageJson, packageName) {
15
18
  return Boolean(
16
19
  packageJson.dependencies?.[packageName] || packageJson.devDependencies?.[packageName]
17
20
  );
18
- };
19
- const getPrismaProvider = async () => {
21
+ }
22
+ async function getPrismaProvider() {
20
23
  try {
21
24
  const prismaConfigPath = getPaths().api.prismaConfig;
22
25
  if (!prismaConfigPath) {
@@ -29,10 +32,10 @@ const getPrismaProvider = async () => {
29
32
  let stat;
30
33
  try {
31
34
  stat = fs.statSync(schemaPath);
32
- } catch (e) {
35
+ } catch {
33
36
  stat = void 0;
34
37
  }
35
- if (stat && stat.isDirectory()) {
38
+ if (stat?.isDirectory()) {
36
39
  const candidate = path.join(schemaPath, "schema.prisma");
37
40
  if (fs.existsSync(candidate)) {
38
41
  schemaPath = candidate;
@@ -45,15 +48,15 @@ const getPrismaProvider = async () => {
45
48
  }
46
49
  const content = fs.readFileSync(schemaPath, "utf-8");
47
50
  const match = content.match(/^\s*provider\s*=\s*["']([^"']+)["']/im);
48
- if (match && match[1]) {
51
+ if (match?.[1]) {
49
52
  return match[1].toLowerCase();
50
53
  }
51
54
  return void 0;
52
55
  } catch {
53
56
  return void 0;
54
57
  }
55
- };
56
- const findExistingLiveQueryMigration = ({ migrationsDirectoryPath }) => {
58
+ }
59
+ function findExistingLiveQueryMigration(migrationsDirectoryPath) {
57
60
  if (!fs.existsSync(migrationsDirectoryPath)) {
58
61
  return void 0;
59
62
  }
@@ -63,8 +66,8 @@ const findExistingLiveQueryMigration = ({ migrationsDirectoryPath }) => {
63
66
  const content = fs.readFileSync(migrationFilePath, "utf-8");
64
67
  return content.includes("cedar_notify_table_change");
65
68
  });
66
- };
67
- const generateMigrationFolderName = () => {
69
+ }
70
+ function generateMigrationFolderName() {
68
71
  const now = /* @__PURE__ */ new Date();
69
72
  const year = String(now.getFullYear());
70
73
  const month = String(now.getMonth() + 1).padStart(2, "0");
@@ -73,8 +76,8 @@ const generateMigrationFolderName = () => {
73
76
  const minute = String(now.getMinutes()).padStart(2, "0");
74
77
  const second = String(now.getSeconds()).padStart(2, "0");
75
78
  return `${year}${month}${day}${hour}${minute}${second}_live_queries_notifications`;
76
- };
77
- const addLiveQueryListenerToGraphqlHandler = ({ force }) => {
79
+ }
80
+ function addLiveQueryListenerToGraphqlHandler({ force }) {
78
81
  const graphqlHandlerPath = path.join(
79
82
  getPaths().api.functions,
80
83
  `graphql.${isTypeScriptProject() ? "ts" : "js"}`
@@ -143,8 +146,8 @@ const addLiveQueryListenerToGraphqlHandler = ({ force }) => {
143
146
  return {
144
147
  skipped: false
145
148
  };
146
- };
147
- const handler = async ({ force }) => {
149
+ }
150
+ async function handler({ force, verbose }) {
148
151
  const projectIsTypescript = isTypeScriptProject();
149
152
  const apiPackageJson = getApiPackageJson();
150
153
  const migrationsPath = await getMigrationsPath(getPaths().api.prismaConfig);
@@ -161,9 +164,7 @@ const handler = async ({ force }) => {
161
164
  "templates",
162
165
  "liveQueriesListener.ts.template"
163
166
  );
164
- const existingMigrationPath = findExistingLiveQueryMigration({
165
- migrationsDirectoryPath: migrationsPath
166
- });
167
+ const existingMigrationPath = findExistingLiveQueryMigration(migrationsPath);
167
168
  const migrationDirPath = path.join(
168
169
  migrationsPath,
169
170
  generateMigrationFolderName()
@@ -203,6 +204,44 @@ const handler = async ({ force }) => {
203
204
  }
204
205
  }
205
206
  },
207
+ {
208
+ title: "Adding [experimental.gqlorm] config...",
209
+ task: (_ctx, task) => {
210
+ const configTomlPath = getConfigPath();
211
+ const configFileName = path.basename(configTomlPath);
212
+ const configContent = fs.readFileSync(configTomlPath, "utf-8");
213
+ if (!configContent.includes("[experimental.gqlorm]")) {
214
+ writeFile(
215
+ configTomlPath,
216
+ configContent.concat(
217
+ "\n[experimental.gqlorm]\n enabled = true\n"
218
+ ),
219
+ {
220
+ overwriteExisting: true
221
+ }
222
+ );
223
+ } else {
224
+ if (force) {
225
+ task.output = `Overwriting config in ${configFileName}`;
226
+ writeFile(
227
+ configTomlPath,
228
+ configContent.replace(
229
+ "\n[experimental.gqlorm]\n enabled = false\n",
230
+ "\n[experimental.gqlorm]\n enabled = true\n"
231
+ ),
232
+ {
233
+ overwriteExisting: true
234
+ }
235
+ );
236
+ } else {
237
+ task.skip(
238
+ `The [experimental.gqlorm] config block already exists in ${configFileName}.`
239
+ );
240
+ }
241
+ }
242
+ },
243
+ rendererOptions: { persistentOutput: true }
244
+ },
206
245
  {
207
246
  ...addApiPackages(["pg@^8.18.0"]),
208
247
  title: "Adding pg dependency to your api side...",
@@ -210,6 +249,7 @@ const handler = async ({ force }) => {
210
249
  if (hasPgDependency) {
211
250
  return "pg is already installed";
212
251
  }
252
+ return false;
213
253
  }
214
254
  },
215
255
  {
@@ -232,6 +272,7 @@ const handler = async ({ force }) => {
232
272
  );
233
273
  return `Existing live query migration found: ${migrationPath2}`;
234
274
  }
275
+ return false;
235
276
  }
236
277
  },
237
278
  {
@@ -273,17 +314,29 @@ const handler = async ({ force }) => {
273
314
  }
274
315
  ],
275
316
  {
276
- rendererOptions: { collapseSubtasks: false }
317
+ rendererOptions: { collapseSubtasks: false },
318
+ renderer: verbose ? "verbose" : "default"
277
319
  }
278
320
  );
279
321
  try {
280
322
  await tasks.run();
281
323
  } catch (e) {
282
- errorTelemetry(process.argv, e.message);
283
- console.error(c.error(e.message));
284
- process.exit(e?.exitCode || 1);
324
+ if (isObject(e) && "message" in e) {
325
+ errorTelemetry(process.argv, e.message);
326
+ console.error(c.error(e.message));
327
+ } else {
328
+ errorTelemetry(process.argv, e);
329
+ console.error(c.error(e));
330
+ }
331
+ process.exit(isObjectWithExitCode(e) ? e.exitCode : 1);
285
332
  }
286
- };
333
+ }
334
+ function isObject(value) {
335
+ return !!value && typeof value === "object" && !Array.isArray(value);
336
+ }
337
+ function isObjectWithExitCode(value) {
338
+ return isObject(value) && typeof value.exitCode === "number";
339
+ }
287
340
  export {
288
341
  handler
289
342
  };
@@ -1,5 +1,6 @@
1
1
  import { Client } from 'pg'
2
2
 
3
+ import { getPaths, loadPrismaConfig } from '@cedarjs/project-config'
3
4
  import { liveQueryStore } from '@cedarjs/realtime'
4
5
  import { pluralize } from '@cedarjs/utils/cedarPluralize'
5
6
 
@@ -80,6 +81,18 @@ async function onNotification(payload: string | undefined) {
80
81
  async function connect() {
81
82
  connectionGeneration = connectionGeneration + 1
82
83
  const generation = connectionGeneration
84
+ const prismaConfigPath = getPaths().api.prismaConfig
85
+ const prismaConfig = await loadPrismaConfig(prismaConfigPath)
86
+ const prismaDatasourceUrl = prismaConfig.datasource?.url
87
+
88
+ if (!prismaDatasourceUrl) {
89
+ const config = JSON.stringify(prismaConfig, null, 2)
90
+
91
+ throw new Error(
92
+ 'Could not determine Postgres connection URL from Prisma config ' +
93
+ `datasource. Using parsed Prisma config: ${config}`
94
+ )
95
+ }
83
96
 
84
97
  try {
85
98
  if (reconnectTimeout) {
@@ -94,9 +107,7 @@ async function connect() {
94
107
  await previousClient.end().catch(() => {})
95
108
  }
96
109
 
97
- const nextClient = new Client({
98
- connectionString: process.env.DATABASE_URL,
99
- })
110
+ const nextClient = new Client({ connectionString: prismaDatasourceUrl })
100
111
 
101
112
  nextClient.on('notification', async (msg) => {
102
113
  await onNotification(msg.payload)
@@ -1,7 +1,7 @@
1
1
  import execa from "execa";
2
2
  import { Listr } from "listr2";
3
+ import { colors as c } from "@cedarjs/cli-helpers";
3
4
  import { errorTelemetry } from "@cedarjs/telemetry";
4
- import c from "../../lib/colors.js";
5
5
  import { getPaths } from "../../lib/index.js";
6
6
  import { command, description, EXPERIMENTAL_TOPIC_ID } from "./setupInngest.js";
7
7
  import { printTaskEpilogue } from "./util.js";
@@ -3,14 +3,13 @@ import path from "node:path";
3
3
  import { ListrEnquirerPromptAdapter } from "@listr2/prompt-adapter-enquirer";
4
4
  import execa from "execa";
5
5
  import { Listr } from "listr2";
6
- import { addApiPackages } from "@cedarjs/cli-helpers";
6
+ import { addApiPackages, colors as c } from "@cedarjs/cli-helpers";
7
7
  import {
8
8
  getConfigPath,
9
9
  resolveFile,
10
10
  getSchemaPath
11
11
  } from "@cedarjs/project-config";
12
12
  import { errorTelemetry } from "@cedarjs/telemetry";
13
- import c from "../../lib/colors.js";
14
13
  import { getPaths, transformTSToJS, writeFile } from "../../lib/index.js";
15
14
  import { isTypeScriptProject } from "../../lib/project.js";
16
15
  import {
@@ -3,9 +3,9 @@ import path from "node:path";
3
3
  import execa from "execa";
4
4
  import { Listr } from "listr2";
5
5
  import semver from "semver";
6
+ import { colors as c } from "@cedarjs/cli-helpers";
6
7
  import { getConfigPath } from "@cedarjs/project-config";
7
8
  import { errorTelemetry } from "@cedarjs/telemetry";
8
- import c from "../../lib/colors.js";
9
9
  import { getPaths, writeFile } from "../../lib/index.js";
10
10
  import {
11
11
  command,
@@ -2,12 +2,11 @@ import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import execa from "execa";
4
4
  import { Listr } from "listr2";
5
- import { prettify } from "@cedarjs/cli-helpers";
5
+ import { prettify, colors as c } from "@cedarjs/cli-helpers";
6
6
  import { install } from "@cedarjs/cli-helpers/packageManager";
7
7
  import { getConfig, getConfigPath } from "@cedarjs/project-config";
8
8
  import { getPackageManager } from "@cedarjs/project-config/packageManager";
9
9
  import { errorTelemetry } from "@cedarjs/telemetry";
10
- import c from "../../lib/colors.js";
11
10
  import { getPaths, transformTSToJS, writeFile } from "../../lib/index.js";
12
11
  import { isTypeScriptProject } from "../../lib/project.js";
13
12
  import { command, description, EXPERIMENTAL_TOPIC_ID } from "./setupRsc.js";
@@ -2,10 +2,9 @@ import fs from "node:fs";
2
2
  import path from "path";
3
3
  import { ListrEnquirerPromptAdapter } from "@listr2/prompt-adapter-enquirer";
4
4
  import { Listr } from "listr2";
5
- import { addWebPackages } from "@cedarjs/cli-helpers";
5
+ import { addWebPackages, colors as c } from "@cedarjs/cli-helpers";
6
6
  import { getConfigPath } from "@cedarjs/project-config";
7
7
  import { errorTelemetry } from "@cedarjs/telemetry";
8
- import c from "../../lib/colors.js";
9
8
  import { getPaths, transformTSToJS, writeFile } from "../../lib/index.js";
10
9
  import { isTypeScriptProject } from "../../lib/project.js";
11
10
  import {
@@ -9,16 +9,16 @@
9
9
  "skipLibCheck": false,
10
10
  "rootDirs": [
11
11
  "./src",
12
- "../.redwood/types/mirror/web/src",
12
+ "../.cedar/types/mirror/web/src",
13
13
  "../api/src",
14
- "../.redwood/types/mirror/api/src"
14
+ "../.cedar/types/mirror/api/src"
15
15
  ],
16
16
  "paths": {
17
17
  "src/*": [
18
18
  "./src/*",
19
- "../.redwood/types/mirror/web/src/*",
19
+ "../.cedar/types/mirror/web/src/*",
20
20
  "../api/src/*",
21
- "../.redwood/types/mirror/api/src/*"
21
+ "../.cedar/types/mirror/api/src/*"
22
22
  ],
23
23
  "$api/*": [
24
24
  "../api/*"
@@ -46,8 +46,8 @@
46
46
  "include": [
47
47
  "src",
48
48
  "config",
49
- "../.redwood/types/includes/all-*",
50
- "../.redwood/types/includes/web-*",
49
+ "../.cedar/types/includes/all-*",
50
+ "../.cedar/types/includes/web-*",
51
51
  "../types",
52
52
  "./types"
53
53
  ]