@cedarjs/cli 3.1.2-next.0 → 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.
- package/dist/commands/build/buildHandler.js +23 -5
- package/dist/commands/build/buildPackagesTask.js +2 -2
- package/dist/commands/build.js +1 -1
- package/dist/commands/check.js +1 -2
- package/dist/commands/consoleHandler.js +1 -1
- package/dist/commands/deploy/baremetal/baremetalHandler.js +1 -2
- package/dist/commands/deploy/helpers/deployHandler.js +1 -1
- package/dist/commands/deploy/serverlessHandler.js +1 -2
- package/dist/commands/destroy/page/pageHandler.js +1 -2
- package/dist/commands/destroy/scaffold/scaffoldHandler.js +1 -2
- package/dist/commands/destroy/sdl/sdlHandler.js +1 -2
- package/dist/commands/dev/devHandler.js +12 -4
- package/dist/commands/dev/packageWatchCommands.js +1 -1
- package/dist/commands/dev.js +1 -1
- package/dist/commands/execHandler.js +10 -7
- package/dist/commands/{setup → experimental}/live-queries/liveQueries.js +5 -4
- package/dist/commands/{setup → experimental}/live-queries/liveQueriesHandler.js +80 -27
- package/dist/commands/{setup → experimental}/live-queries/templates/liveQueriesListener.ts.template +14 -3
- package/dist/commands/experimental/setupInngestHandler.js +1 -1
- package/dist/commands/experimental/setupOpentelemetryHandler.js +1 -2
- package/dist/commands/experimental/setupReactCompilerHandler.js +1 -1
- package/dist/commands/experimental/setupRscHandler.js +1 -2
- package/dist/commands/experimental/setupStreamingSsrHandler.js +1 -2
- package/dist/commands/experimental/templates/streamingSsr/tsconfig.json.template +6 -6
- package/dist/commands/experimental/util.js +24 -23
- package/dist/commands/experimental.js +2 -1
- package/dist/commands/generate/dataMigration/dataMigration.js +1 -2
- package/dist/commands/generate/dbAuth/dbAuthHandler.js +1 -2
- package/dist/commands/generate/directive/directiveHandler.js +3 -4
- package/dist/commands/generate/function/functionHandler.js +1 -2
- package/dist/commands/generate/job/jobHandler.js +1 -2
- package/dist/commands/generate/model/modelHandler.js +1 -2
- package/dist/commands/generate/ogImage/ogImageHandler.js +1 -2
- package/dist/commands/generate/package/packageHandler.js +1 -2
- package/dist/commands/generate/page/pageHandler.js +1 -2
- package/dist/commands/generate/realtime/realtimeHandler.js +1 -1
- package/dist/commands/generate/scaffold/scaffoldHandler.js +1 -2
- package/dist/commands/generate/script/scriptHandler.js +1 -2
- package/dist/commands/generate/script/templates/tsconfig.json.template +2 -2
- package/dist/commands/generate/sdl/sdlHandler.js +1 -2
- package/dist/commands/generate/yargsHandlerHelpers.js +1 -2
- package/dist/commands/generate.js +1 -1
- package/dist/commands/lint.js +12 -5
- package/dist/commands/prerenderHandler.js +6 -4
- package/dist/commands/prismaHandler.js +1 -2
- package/dist/commands/serve.js +1 -2
- package/dist/commands/setup/cache/cacheHandler.js +3 -3
- package/dist/commands/setup/deploy/providers/baremetalHandler.js +1 -2
- package/dist/commands/setup/deploy/providers/flightcontrolHandler.js +1 -2
- package/dist/commands/setup/deploy/providers/netlifyHandler.js +1 -2
- package/dist/commands/setup/deploy/providers/renderHandler.js +1 -2
- package/dist/commands/setup/deploy/providers/serverlessHandler.js +1 -2
- package/dist/commands/setup/deploy/providers/vercelHandler.js +1 -2
- package/dist/commands/setup/docker/dockerHandler.js +1 -2
- package/dist/commands/setup/docker/templates/dockerignore +1 -0
- package/dist/commands/setup/generator/generatorHandler.js +1 -1
- package/dist/commands/setup/i18n/i18nHandler.js +3 -2
- package/dist/commands/setup/jobs/jobsHandler.js +3 -3
- package/dist/commands/setup/mailer/mailerHandler.js +1 -2
- package/dist/commands/setup/realtime/realtimeHandler.js +3 -4
- package/dist/commands/setup/server-file/serverFileHandler.js +1 -2
- package/dist/commands/setup/tsconfig/tsconfigHandler.js +3 -2
- package/dist/commands/setup/ui/libraries/chakra-uiHandler.js +1 -2
- package/dist/commands/setup/ui/libraries/mantineHandler.js +1 -2
- package/dist/commands/setup/ui/libraries/tailwindcssHandler.js +1 -2
- package/dist/commands/setup/uploads/uploadsHandler.js +7 -4
- package/dist/commands/setup/vite/viteHandler.js +1 -2
- package/dist/commands/setup.js +1 -2
- package/dist/commands/test/testHandler.js +1 -2
- package/dist/commands/test.js +1 -1
- package/dist/commands/testEsm.js +1 -1
- package/dist/commands/type-checkHandler.js +1 -1
- package/dist/commands/upgrade/upgrade.js +1 -1
- package/dist/commands/upgrade/upgradeHandler.js +1 -2
- package/dist/index.js +5 -2
- package/dist/lib/exec.js +8 -4
- package/dist/lib/index.js +1 -1
- package/dist/lib/merge/index.js +2 -0
- package/dist/lib/test.js +4 -4
- package/dist/middleware/checkNodeVersion.js +1 -1
- package/package.json +16 -16
- package/dist/lib/colors.js +0 -18
- /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("
|
|
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
|
|
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
|
|
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
|
|
31
|
+
await runScript("build", [], { cwd: workspacePath });
|
|
32
32
|
} catch (e) {
|
|
33
33
|
errorTelemetry(
|
|
34
34
|
process.argv,
|
package/dist/commands/build.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { terminalLink } from "termi-link";
|
|
2
|
-
import c from "
|
|
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";
|
package/dist/commands/check.js
CHANGED
|
@@ -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
|
|
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();
|
package/dist/commands/dev.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { terminalLink } from "termi-link";
|
|
2
|
-
import c from "
|
|
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
|
-
|
|
85
|
-
console.error(
|
|
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
|
-
|
|
95
|
-
await
|
|
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
|
-
|
|
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:
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
16
|
+
}
|
|
17
|
+
function hasPackage(packageJson, packageName) {
|
|
15
18
|
return Boolean(
|
|
16
19
|
packageJson.dependencies?.[packageName] || packageJson.devDependencies?.[packageName]
|
|
17
20
|
);
|
|
18
|
-
}
|
|
19
|
-
|
|
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
|
|
35
|
+
} catch {
|
|
33
36
|
stat = void 0;
|
|
34
37
|
}
|
|
35
|
-
if (stat
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
283
|
-
|
|
284
|
-
|
|
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
|
};
|
package/dist/commands/{setup → experimental}/live-queries/templates/liveQueriesListener.ts.template
RENAMED
|
@@ -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
|
-
"../.
|
|
12
|
+
"../.cedar/types/mirror/web/src",
|
|
13
13
|
"../api/src",
|
|
14
|
-
"../.
|
|
14
|
+
"../.cedar/types/mirror/api/src"
|
|
15
15
|
],
|
|
16
16
|
"paths": {
|
|
17
17
|
"src/*": [
|
|
18
18
|
"./src/*",
|
|
19
|
-
"../.
|
|
19
|
+
"../.cedar/types/mirror/web/src/*",
|
|
20
20
|
"../api/src/*",
|
|
21
|
-
"../.
|
|
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
|
-
"../.
|
|
50
|
-
"../.
|
|
49
|
+
"../.cedar/types/includes/all-*",
|
|
50
|
+
"../.cedar/types/includes/web-*",
|
|
51
51
|
"../types",
|
|
52
52
|
"./types"
|
|
53
53
|
]
|