convex 1.34.0 → 1.34.1
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/CHANGELOG.md +12 -0
- package/dist/browser.bundle.js +6 -9
- package/dist/browser.bundle.js.map +2 -2
- package/dist/cjs/browser/sync/authentication_manager.js +4 -1
- package/dist/cjs/browser/sync/authentication_manager.js.map +2 -2
- package/dist/cjs/browser/sync/web_socket_manager.js +1 -7
- package/dist/cjs/browser/sync/web_socket_manager.js.map +2 -2
- package/dist/cjs/cli/aiFiles.js +15 -14
- package/dist/cjs/cli/aiFiles.js.map +2 -2
- package/dist/cjs/cli/configure.js +15 -10
- package/dist/cjs/cli/configure.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/agentsmd.js +69 -0
- package/dist/cjs/cli/lib/aiFiles/agentsmd.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/claudemd.js +69 -0
- package/dist/cjs/cli/lib/aiFiles/claudemd.js.map +7 -0
- package/dist/cjs/cli/lib/{ai → aiFiles}/config.js +73 -46
- package/dist/cjs/cli/lib/aiFiles/config.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/cursorrules.js +48 -0
- package/dist/cjs/cli/lib/aiFiles/cursorrules.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js +51 -0
- package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/index.js +231 -0
- package/dist/cjs/cli/lib/aiFiles/index.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/paths.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/skills.js +180 -0
- package/dist/cjs/cli/lib/aiFiles/skills.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/status.js +195 -0
- package/dist/cjs/cli/lib/aiFiles/status.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/utils.js +111 -0
- package/dist/cjs/cli/lib/aiFiles/utils.js.map +7 -0
- package/dist/cjs/cli/lib/command.js +6 -1
- package/dist/cjs/cli/lib/command.js.map +2 -2
- package/dist/cjs/cli/lib/config.js +3 -4
- package/dist/cjs/cli/lib/config.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/anonymous.js +2 -2
- package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +2 -2
- package/dist/cjs/cli/lib/updates.js +8 -8
- package/dist/cjs/cli/lib/updates.js.map +2 -2
- package/dist/cjs/cli/lib/versionApi.js +7 -4
- package/dist/cjs/cli/lib/versionApi.js.map +2 -2
- package/dist/cjs/cli/lib/workos/workos.js +4 -6
- package/dist/cjs/cli/lib/workos/workos.js.map +2 -2
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs-types/browser/sync/authentication_manager.d.ts.map +1 -1
- package/dist/cjs-types/browser/sync/web_socket_manager.d.ts.map +1 -1
- package/dist/cjs-types/cli/aiFiles.d.ts.map +1 -1
- package/dist/cjs-types/cli/configure.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts +19 -0
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts +19 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/config.d.ts +46 -0
- package/dist/cjs-types/cli/lib/aiFiles/config.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/config.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/cursorrules.d.ts +10 -0
- package/dist/cjs-types/cli/lib/aiFiles/cursorrules.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts +12 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/index.d.ts +40 -0
- package/dist/cjs-types/cli/lib/aiFiles/index.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/{ai → aiFiles}/paths.d.ts +4 -0
- package/dist/cjs-types/cli/lib/aiFiles/paths.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts +18 -0
- package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/status.d.ts +3 -0
- package/dist/cjs-types/cli/lib/aiFiles/status.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts +46 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/config.d.ts +1 -0
- package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/versionApi.d.ts +7 -1
- package/dist/cjs-types/cli/lib/versionApi.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/workos/workos.d.ts.map +1 -1
- package/dist/cjs-types/index.d.ts +1 -1
- package/dist/cli.bundle.cjs +1605 -1548
- package/dist/cli.bundle.cjs.map +4 -4
- package/dist/esm/browser/sync/authentication_manager.js +4 -1
- package/dist/esm/browser/sync/authentication_manager.js.map +2 -2
- package/dist/esm/browser/sync/web_socket_manager.js +1 -7
- package/dist/esm/browser/sync/web_socket_manager.js.map +2 -2
- package/dist/esm/cli/aiFiles.js +17 -17
- package/dist/esm/cli/aiFiles.js.map +2 -2
- package/dist/esm/cli/configure.js +15 -10
- package/dist/esm/cli/configure.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/agentsmd.js +52 -0
- package/dist/esm/cli/lib/aiFiles/agentsmd.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/claudemd.js +52 -0
- package/dist/esm/cli/lib/aiFiles/claudemd.js.map +7 -0
- package/dist/esm/cli/lib/{ai → aiFiles}/config.js +71 -45
- package/dist/esm/cli/lib/aiFiles/config.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/cursorrules.js +16 -0
- package/dist/esm/cli/lib/aiFiles/cursorrules.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/guidelinesmd.js +28 -0
- package/dist/esm/cli/lib/aiFiles/guidelinesmd.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/index.js +210 -0
- package/dist/esm/cli/lib/aiFiles/index.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/paths.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/skills.js +147 -0
- package/dist/esm/cli/lib/aiFiles/skills.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/status.js +175 -0
- package/dist/esm/cli/lib/aiFiles/status.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/utils.js +82 -0
- package/dist/esm/cli/lib/aiFiles/utils.js.map +7 -0
- package/dist/esm/cli/lib/command.js +6 -1
- package/dist/esm/cli/lib/command.js.map +2 -2
- package/dist/esm/cli/lib/config.js +3 -4
- package/dist/esm/cli/lib/config.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/anonymous.js +2 -2
- package/dist/esm/cli/lib/localDeployment/anonymous.js.map +2 -2
- package/dist/esm/cli/lib/updates.js +8 -8
- package/dist/esm/cli/lib/updates.js.map +2 -2
- package/dist/esm/cli/lib/versionApi.js +7 -4
- package/dist/esm/cli/lib/versionApi.js.map +2 -2
- package/dist/esm/cli/lib/workos/workos.js +4 -6
- package/dist/esm/cli/lib/workos/workos.js.map +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm-types/browser/sync/authentication_manager.d.ts.map +1 -1
- package/dist/esm-types/browser/sync/web_socket_manager.d.ts.map +1 -1
- package/dist/esm-types/cli/aiFiles.d.ts.map +1 -1
- package/dist/esm-types/cli/configure.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts +19 -0
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts +19 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/config.d.ts +46 -0
- package/dist/esm-types/cli/lib/aiFiles/config.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/config.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/cursorrules.d.ts +10 -0
- package/dist/esm-types/cli/lib/aiFiles/cursorrules.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts +12 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/index.d.ts +40 -0
- package/dist/esm-types/cli/lib/aiFiles/index.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/{ai → aiFiles}/paths.d.ts +4 -0
- package/dist/esm-types/cli/lib/aiFiles/paths.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/skills.d.ts +18 -0
- package/dist/esm-types/cli/lib/aiFiles/skills.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/status.d.ts +3 -0
- package/dist/esm-types/cli/lib/aiFiles/status.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.d.ts +46 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/config.d.ts +1 -0
- package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/versionApi.d.ts +7 -1
- package/dist/esm-types/cli/lib/versionApi.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/workos/workos.d.ts.map +1 -1
- package/dist/esm-types/index.d.ts +1 -1
- package/dist/react.bundle.js +6 -9
- package/dist/react.bundle.js.map +2 -2
- package/package.json +1 -1
- package/schemas/convex.schema.json +7 -1
- package/src/browser/sync/authentication_manager.ts +9 -4
- package/src/browser/sync/client_node.test.ts +125 -0
- package/src/browser/sync/web_socket_manager.ts +1 -7
- package/src/cli/aiFiles.ts +20 -27
- package/src/cli/configure.ts +17 -11
- package/src/cli/deploymentSelection.test.ts +56 -2
- package/src/cli/lib/{ai → aiFiles}/MANUAL_TESTING.md +6 -2
- package/src/cli/lib/aiFiles/agentsmd.test.ts +133 -0
- package/src/cli/lib/aiFiles/agentsmd.ts +77 -0
- package/src/cli/lib/aiFiles/claudemd.test.ts +92 -0
- package/src/cli/lib/aiFiles/claudemd.ts +77 -0
- package/src/cli/lib/{ai → aiFiles}/config.test.ts +181 -59
- package/src/cli/lib/{ai → aiFiles}/config.ts +92 -63
- package/src/cli/lib/aiFiles/cursorrules.ts +25 -0
- package/src/cli/lib/aiFiles/guidelinesmd.test.ts +40 -0
- package/src/cli/lib/aiFiles/guidelinesmd.ts +41 -0
- package/src/cli/lib/{ai → aiFiles}/index.test.ts +200 -339
- package/src/cli/lib/aiFiles/index.ts +303 -0
- package/src/cli/lib/{ai → aiFiles}/integration.test.ts +117 -147
- package/src/cli/lib/{ai → aiFiles}/paths.ts +5 -0
- package/src/cli/lib/{ai → aiFiles}/prompt.test.ts +78 -30
- package/src/cli/lib/aiFiles/skills.ts +213 -0
- package/src/cli/lib/aiFiles/status.ts +240 -0
- package/src/cli/lib/aiFiles/utils.ts +163 -0
- package/src/cli/lib/command.ts +6 -1
- package/src/cli/lib/config.test.ts +1 -1
- package/src/cli/lib/config.ts +6 -5
- package/src/cli/lib/localDeployment/anonymous.ts +2 -2
- package/src/cli/lib/updates.test.ts +40 -30
- package/src/cli/lib/updates.ts +8 -8
- package/src/cli/lib/versionApi.test.ts +13 -10
- package/src/cli/lib/versionApi.ts +13 -5
- package/src/cli/lib/workos/workos.ts +4 -5
- package/src/index.ts +1 -1
- package/src/values/.claude/settings.local.json +10 -0
- package/dist/cjs/cli/lib/ai/config.js.map +0 -7
- package/dist/cjs/cli/lib/ai/index.js +0 -704
- package/dist/cjs/cli/lib/ai/index.js.map +0 -7
- package/dist/cjs/cli/lib/ai/paths.js.map +0 -7
- package/dist/cjs-types/cli/lib/ai/config.d.ts +0 -50
- package/dist/cjs-types/cli/lib/ai/config.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/config.test.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/index.d.ts +0 -56
- package/dist/cjs-types/cli/lib/ai/index.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/index.test.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/integration.test.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/paths.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/prompt.test.d.ts.map +0 -1
- package/dist/esm/cli/lib/ai/config.js.map +0 -7
- package/dist/esm/cli/lib/ai/index.js +0 -684
- package/dist/esm/cli/lib/ai/index.js.map +0 -7
- package/dist/esm/cli/lib/ai/paths.js.map +0 -7
- package/dist/esm-types/cli/lib/ai/config.d.ts +0 -50
- package/dist/esm-types/cli/lib/ai/config.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/config.test.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/index.d.ts +0 -56
- package/dist/esm-types/cli/lib/ai/index.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/index.test.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/integration.test.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/paths.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/prompt.test.d.ts.map +0 -1
- package/src/cli/lib/ai/index.ts +0 -1006
- /package/dist/cjs/cli/lib/{ai → aiFiles}/paths.js +0 -0
- /package/dist/cjs-types/cli/lib/{ai → aiFiles}/config.test.d.ts +0 -0
- /package/dist/cjs-types/cli/lib/{ai → aiFiles}/index.test.d.ts +0 -0
- /package/dist/cjs-types/cli/lib/{ai → aiFiles}/integration.test.d.ts +0 -0
- /package/dist/cjs-types/cli/lib/{ai → aiFiles}/prompt.test.d.ts +0 -0
- /package/dist/esm/cli/lib/{ai → aiFiles}/paths.js +0 -0
- /package/dist/esm-types/cli/lib/{ai → aiFiles}/config.test.d.ts +0 -0
- /package/dist/esm-types/cli/lib/{ai → aiFiles}/index.test.d.ts +0 -0
- /package/dist/esm-types/cli/lib/{ai → aiFiles}/integration.test.d.ts +0 -0
- /package/dist/esm-types/cli/lib/{ai → aiFiles}/prompt.test.d.ts +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { promises as fs } from "fs";
|
|
3
|
+
import { chalkStderr } from "chalk";
|
|
4
|
+
import { logMessage } from "../../../bundler/log.js";
|
|
5
|
+
import { hashSha256 } from "../utils/hash.js";
|
|
6
|
+
export function isInInteractiveTerminal() {
|
|
7
|
+
return process.stdin.isTTY === true;
|
|
8
|
+
}
|
|
9
|
+
export async function readFileSafe(filePath) {
|
|
10
|
+
try {
|
|
11
|
+
return await fs.readFile(filePath, "utf8");
|
|
12
|
+
} catch {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export async function safelyDeleteFile(filePath) {
|
|
17
|
+
try {
|
|
18
|
+
await fs.unlink(filePath);
|
|
19
|
+
return true;
|
|
20
|
+
} catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export const iife = (fn) => fn();
|
|
25
|
+
export async function injectManagedSection(opts) {
|
|
26
|
+
const { filePath, startMarker, endMarker, section } = opts;
|
|
27
|
+
const existing = await readFileSafe(filePath) ?? "";
|
|
28
|
+
const startIdx = existing.indexOf(startMarker);
|
|
29
|
+
const endIdx = existing.indexOf(endMarker);
|
|
30
|
+
const updated = iife(() => {
|
|
31
|
+
if (startIdx !== -1 && endIdx !== -1)
|
|
32
|
+
return existing.slice(0, startIdx) + section + existing.slice(endIdx + endMarker.length);
|
|
33
|
+
if (existing.length > 0)
|
|
34
|
+
return existing.trimEnd() + "\n\n" + section + "\n";
|
|
35
|
+
return section + "\n";
|
|
36
|
+
});
|
|
37
|
+
const didWrite = updated !== existing;
|
|
38
|
+
if (didWrite) await fs.writeFile(filePath, updated, "utf8");
|
|
39
|
+
return { sectionHash: hashSha256(section), didWrite };
|
|
40
|
+
}
|
|
41
|
+
export async function stripManagedSection(opts) {
|
|
42
|
+
const { filePath, startMarker, endMarker } = opts;
|
|
43
|
+
const content = await readFileSafe(filePath);
|
|
44
|
+
if (content === null) return "none";
|
|
45
|
+
const startIdx = content.indexOf(startMarker);
|
|
46
|
+
const endIdx = content.indexOf(endMarker);
|
|
47
|
+
if (startIdx === -1 || endIdx === -1) {
|
|
48
|
+
return "none";
|
|
49
|
+
}
|
|
50
|
+
const before = content.slice(0, startIdx).trimEnd();
|
|
51
|
+
const after = content.slice(endIdx + endMarker.length).trimStart();
|
|
52
|
+
const updated = [before, after].filter(Boolean).join("\n\n");
|
|
53
|
+
if (!updated.trim()) {
|
|
54
|
+
await safelyDeleteFile(filePath);
|
|
55
|
+
return "file";
|
|
56
|
+
}
|
|
57
|
+
await fs.writeFile(filePath, updated + "\n", "utf8");
|
|
58
|
+
return "section";
|
|
59
|
+
}
|
|
60
|
+
export async function removeMarkdownSection({
|
|
61
|
+
projectDir,
|
|
62
|
+
strip,
|
|
63
|
+
fileName
|
|
64
|
+
}) {
|
|
65
|
+
const result = await strip(projectDir);
|
|
66
|
+
if (result === "section") {
|
|
67
|
+
logMessage(
|
|
68
|
+
`${chalkStderr.green("\u2714")} Removed Convex section from ${fileName}.`
|
|
69
|
+
);
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
if (result === "file") {
|
|
73
|
+
logMessage(`${chalkStderr.green("\u2714")} Deleted ${fileName}.`);
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
export async function hasManagedSection(opts) {
|
|
79
|
+
const content = await readFileSafe(opts.filePath);
|
|
80
|
+
return content !== null && content.includes(opts.startMarker) && content.includes(opts.endMarker);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/cli/lib/aiFiles/utils.ts"],
|
|
4
|
+
"sourcesContent": ["// eslint-disable-next-line no-restricted-imports\nimport { promises as fs } from \"fs\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { hashSha256 } from \"../utils/hash.js\";\n\nexport function isInInteractiveTerminal(): boolean {\n return process.stdin.isTTY === true;\n}\n\nexport async function readFileSafe(filePath: string): Promise<string | null> {\n try {\n return await fs.readFile(filePath, \"utf8\");\n } catch {\n return null;\n }\n}\n\n/**\n * Attempt to delete a file. Returns `true` if the file was deleted,\n * `false` if it didn't exist or the deletion failed.\n */\nexport async function safelyDeleteFile(filePath: string): Promise<boolean> {\n try {\n await fs.unlink(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Generic managed-section helpers\n//\n// Several files (AGENTS.md, CLAUDE.md) contain a Convex-managed section\n// delimited by start/end markers. These helpers provide the common logic\n// for injecting, stripping, and detecting those sections.\n// ---------------------------------------------------------------------------\n\nexport type ManagedSectionTarget = {\n filePath: string;\n startMarker: string;\n endMarker: string;\n};\n\nexport type InjectResult = {\n sectionHash: string;\n didWrite: boolean;\n};\n\nexport const iife = <T>(fn: () => T): T => fn();\n\n/**\n * Inject a managed section into a file. If the file already contains the\n * markers, the section between them is replaced. Otherwise the section is\n * appended (or the file is created). Only writes when content actually\n * changes.\n */\nexport async function injectManagedSection(\n opts: ManagedSectionTarget & { section: string },\n): Promise<InjectResult> {\n const { filePath, startMarker, endMarker, section } = opts;\n\n const existing = (await readFileSafe(filePath)) ?? \"\";\n\n const startIdx = existing.indexOf(startMarker);\n const endIdx = existing.indexOf(endMarker);\n\n const updated = iife(() => {\n if (startIdx !== -1 && endIdx !== -1)\n return (\n existing.slice(0, startIdx) +\n section +\n existing.slice(endIdx + endMarker.length)\n );\n if (existing.length > 0)\n return existing.trimEnd() + \"\\n\\n\" + section + \"\\n\";\n\n return section + \"\\n\";\n });\n\n const didWrite = updated !== existing;\n if (didWrite) await fs.writeFile(filePath, updated, \"utf8\");\n\n return { sectionHash: hashSha256(section), didWrite };\n}\n\nexport type StripResult = \"none\" | \"section\" | \"file\";\n\n/**\n * Remove the managed section (between start/end markers) from a file.\n * If the file is empty after removal, it is deleted.\n *\n * Returns `\"none\"` if the file doesn't exist or has no markers,\n * `\"section\"` if the section was stripped, or `\"file\"` if the entire\n * file was deleted.\n */\nexport async function stripManagedSection(\n opts: ManagedSectionTarget,\n): Promise<StripResult> {\n const { filePath, startMarker, endMarker } = opts;\n\n const content = await readFileSafe(filePath);\n if (content === null) return \"none\";\n\n const startIdx = content.indexOf(startMarker);\n const endIdx = content.indexOf(endMarker);\n if (startIdx === -1 || endIdx === -1) {\n return \"none\";\n }\n\n const before = content.slice(0, startIdx).trimEnd();\n const after = content.slice(endIdx + endMarker.length).trimStart();\n const updated = [before, after].filter(Boolean).join(\"\\n\\n\");\n\n if (!updated.trim()) {\n await safelyDeleteFile(filePath);\n return \"file\";\n }\n\n await fs.writeFile(filePath, updated + \"\\n\", \"utf8\");\n return \"section\";\n}\n\nexport async function removeMarkdownSection({\n projectDir,\n strip,\n fileName,\n}: {\n projectDir: string;\n strip: (dir: string) => Promise<StripResult>;\n fileName: string;\n}): Promise<boolean> {\n const result = await strip(projectDir);\n\n if (result === \"section\") {\n logMessage(\n `${chalkStderr.green(\"\u2714\")} Removed Convex section from ${fileName}.`,\n );\n return true;\n }\n\n if (result === \"file\") {\n logMessage(`${chalkStderr.green(\"\u2714\")} Deleted ${fileName}.`);\n return true;\n }\n\n return false;\n}\n\n/**\n * Check whether a file contains a managed section (both markers present).\n */\nexport async function hasManagedSection(\n opts: ManagedSectionTarget,\n): Promise<boolean> {\n const content = await readFileSafe(opts.filePath);\n return (\n content !== null &&\n content.includes(opts.startMarker) &&\n content.includes(opts.endMarker)\n );\n}\n"],
|
|
5
|
+
"mappings": ";AACA,SAAS,YAAY,UAAU;AAC/B,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAC3B,SAAS,kBAAkB;AAEpB,gBAAS,0BAAmC;AACjD,SAAO,QAAQ,MAAM,UAAU;AACjC;AAEA,sBAAsB,aAAa,UAA0C;AAC3E,MAAI;AACF,WAAO,MAAM,GAAG,SAAS,UAAU,MAAM;AAAA,EAC3C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAMA,sBAAsB,iBAAiB,UAAoC;AACzE,MAAI;AACF,UAAM,GAAG,OAAO,QAAQ;AACxB,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAqBO,aAAM,OAAO,CAAI,OAAmB,GAAG;AAQ9C,sBAAsB,qBACpB,MACuB;AACvB,QAAM,EAAE,UAAU,aAAa,WAAW,QAAQ,IAAI;AAEtD,QAAM,WAAY,MAAM,aAAa,QAAQ,KAAM;AAEnD,QAAM,WAAW,SAAS,QAAQ,WAAW;AAC7C,QAAM,SAAS,SAAS,QAAQ,SAAS;AAEzC,QAAM,UAAU,KAAK,MAAM;AACzB,QAAI,aAAa,MAAM,WAAW;AAChC,aACE,SAAS,MAAM,GAAG,QAAQ,IAC1B,UACA,SAAS,MAAM,SAAS,UAAU,MAAM;AAE5C,QAAI,SAAS,SAAS;AACpB,aAAO,SAAS,QAAQ,IAAI,SAAS,UAAU;AAEjD,WAAO,UAAU;AAAA,EACnB,CAAC;AAED,QAAM,WAAW,YAAY;AAC7B,MAAI,SAAU,OAAM,GAAG,UAAU,UAAU,SAAS,MAAM;AAE1D,SAAO,EAAE,aAAa,WAAW,OAAO,GAAG,SAAS;AACtD;AAYA,sBAAsB,oBACpB,MACsB;AACtB,QAAM,EAAE,UAAU,aAAa,UAAU,IAAI;AAE7C,QAAM,UAAU,MAAM,aAAa,QAAQ;AAC3C,MAAI,YAAY,KAAM,QAAO;AAE7B,QAAM,WAAW,QAAQ,QAAQ,WAAW;AAC5C,QAAM,SAAS,QAAQ,QAAQ,SAAS;AACxC,MAAI,aAAa,MAAM,WAAW,IAAI;AACpC,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,QAAQ,MAAM,GAAG,QAAQ,EAAE,QAAQ;AAClD,QAAM,QAAQ,QAAQ,MAAM,SAAS,UAAU,MAAM,EAAE,UAAU;AACjE,QAAM,UAAU,CAAC,QAAQ,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,MAAM;AAE3D,MAAI,CAAC,QAAQ,KAAK,GAAG;AACnB,UAAM,iBAAiB,QAAQ;AAC/B,WAAO;AAAA,EACT;AAEA,QAAM,GAAG,UAAU,UAAU,UAAU,MAAM,MAAM;AACnD,SAAO;AACT;AAEA,sBAAsB,sBAAsB;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AACF,GAIqB;AACnB,QAAM,SAAS,MAAM,MAAM,UAAU;AAErC,MAAI,WAAW,WAAW;AACxB;AAAA,MACE,GAAG,YAAY,MAAM,QAAG,CAAC,gCAAgC,QAAQ;AAAA,IACnE;AACA,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,QAAQ;AACrB,eAAW,GAAG,YAAY,MAAM,QAAG,CAAC,YAAY,QAAQ,GAAG;AAC3D,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAKA,sBAAsB,kBACpB,MACkB;AAClB,QAAM,UAAU,MAAM,aAAa,KAAK,QAAQ;AAChD,SACE,YAAY,QACZ,QAAQ,SAAS,KAAK,WAAW,KACjC,QAAQ,SAAS,KAAK,SAAS;AAEnC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -105,7 +105,12 @@ Command.prototype.addDeployOptions = function() {
|
|
|
105
105
|
return this.option("-v, --verbose", "Show full listing of changes").option(
|
|
106
106
|
"--dry-run",
|
|
107
107
|
"Print out the generated configuration without deploying to your Convex deployment"
|
|
108
|
-
).
|
|
108
|
+
).addOption(
|
|
109
|
+
new Option(
|
|
110
|
+
"-y, --yes",
|
|
111
|
+
"Skip confirmation prompt when running interactively. Warning: this deploys to PRODUCTION. To deploy to your current dev environment, run npx convex dev --once"
|
|
112
|
+
).hideHelp()
|
|
113
|
+
).addOption(
|
|
109
114
|
new Option(
|
|
110
115
|
"--typecheck <mode>",
|
|
111
116
|
`Whether to check TypeScript files with \`tsc --noEmit\` before deploying.`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/lib/command.ts"],
|
|
4
|
-
"sourcesContent": ["import { Command, Option, OptionValues } from \"@commander-js/extra-typings\";\nimport { OneoffCtx } from \"../../bundler/context.js\";\nimport { LogMode } from \"./logs.js\";\nimport {\n CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME,\n CONVEX_SELF_HOSTED_URL_VAR_NAME,\n parseInteger,\n parsePositiveInteger,\n} from \"./utils/utils.js\";\n\ndeclare module \"@commander-js/extra-typings\" {\n interface Command<Args extends any[] = [], Opts extends OptionValues = {}> {\n /**\n * For a command that talks to the configured dev deployment by default,\n * add flags for talking to prod, preview, or other deployment in the same\n * project.\n *\n * These flags are added to the end of `command` (ordering matters for `--help`\n * output). `action` should look like \"Import data into\" because it is prefixed\n * onto help strings.\n *\n * The options can be passed to `deploymentSelectionFromOptions`.\n *\n * NOTE: This method only exists at runtime if this file is imported.\n * To help avoid this bug, this method takes in an `ActionDescription` which\n * can only be constructed via `actionDescription` from this file.\n *\n * @param action - The action description\n * @param options - Optional settings\n * @param options.showUrlHelp - If true, show the --url option in help output\n */\n addDeploymentSelectionOptions(\n action: ActionDescription,\n options?: { showUrlHelp?: boolean },\n ): Command<\n Args,\n Opts & {\n envFile?: string;\n url?: string;\n adminKey?: string;\n prod?: boolean;\n previewName?: string;\n deploymentName?: string;\n deployment?: string;\n }\n >;\n\n /**\n * Adds options for the `deploy` command.\n */\n addDeployOptions(): Command<\n Args,\n Opts & {\n verbose?: boolean;\n dryRun?: boolean;\n yes?: boolean;\n typecheck: \"enable\" | \"try\" | \"disable\";\n typecheckComponents: boolean;\n codegen: \"enable\" | \"disable\";\n cmd?: string;\n cmdUrlEnvVarName?: string;\n debugBundlePath?: string;\n debug?: boolean;\n writePushRequest?: string;\n liveComponentSources?: boolean;\n }\n >;\n\n /**\n * Adds options for `self-host` subcommands.\n */\n addSelfHostOptions(): Command<\n Args,\n Opts & {\n url?: string;\n adminKey?: string;\n env?: string;\n }\n >;\n\n /**\n * Adds options and arguments for the `run` command.\n */\n addRunOptions(): Command<\n [...Args, string, string | undefined],\n Opts & {\n watch?: boolean;\n push?: boolean;\n identity?: string;\n typecheck: \"enable\" | \"try\" | \"disable\";\n typecheckComponents: boolean;\n codegen: \"enable\" | \"disable\";\n component?: string;\n liveComponentSources?: boolean;\n }\n >;\n\n /**\n * Adds options for the `import` command.\n */\n addImportOptions(): Command<\n [...Args, string],\n Opts & {\n table?: string;\n format?: \"csv\" | \"jsonLines\" | \"jsonArray\" | \"zip\";\n replace?: boolean;\n append?: boolean;\n replaceAll?: boolean;\n yes?: boolean;\n component?: string;\n }\n >;\n\n /**\n * Adds options for the `export` command.\n */\n addExportOptions(): Command<\n Args,\n Opts & {\n path: string;\n includeFileStorage?: boolean;\n }\n >;\n\n /**\n * Adds options for the `data` command.\n */\n addDataOptions(): Command<\n [...Args, string | undefined],\n Opts & {\n limit: number;\n order: \"asc\" | \"desc\";\n component?: string;\n format?: \"json\" | \"jsonArray\" | \"jsonLines\" | \"jsonl\" | \"pretty\";\n }\n >;\n\n /**\n * Adds options for the `logs` command.\n */\n addLogsOptions(): Command<\n Args,\n Opts & {\n history: number;\n success: boolean;\n jsonl: boolean;\n }\n >;\n\n /**\n * Adds options for the `network-test` command.\n */\n addNetworkTestOptions(): Command<\n Args,\n Opts & {\n timeout?: string;\n ipFamily?: string;\n speedTest?: boolean;\n }\n >;\n }\n}\n\nCommand.prototype.addDeploymentSelectionOptions = function (\n action: ActionDescription,\n options?: { showUrlHelp?: boolean },\n) {\n const urlOption = new Option(\n \"--url <url>\",\n options?.showUrlHelp\n ? action + \" the deployment at the given URL.\"\n : undefined,\n ).conflicts([\n \"--prod\",\n \"--preview-name\",\n \"--deployment-name\",\n \"--deployment\",\n ]);\n if (!options?.showUrlHelp) {\n urlOption.hideHelp();\n }\n return this.addOption(urlOption)\n .addOption(new Option(\"--admin-key <adminKey>\").hideHelp())\n .addOption(\n new Option(\n \"--prod\",\n action + \" this project's default production deployment.\",\n ).conflicts([\n \"--preview-name\",\n \"--deployment-name\",\n \"--url\",\n \"--deployment\",\n ]),\n )\n .addOption(\n new Option(\n \"--preview-name <previewName>\",\n action + \" the preview deployment with the given name.\",\n )\n .conflicts([\"--prod\", \"--deployment-name\", \"--url\", \"--deployment\"])\n .hideHelp(),\n )\n .addOption(\n new Option(\n \"--deployment-name <deploymentName>\",\n action + \" the specified deployment.\",\n )\n .conflicts([\"--prod\", \"--preview-name\", \"--url\", \"--deployment\"])\n .hideHelp(),\n )\n .addOption(\n new Option(\n \"--deployment <deployment>\",\n action +\n \" the specified deployment. Accepts a deployment name (e.g. joyful-capybara-123), ref (e.g. dev/james), 'dev' (for your personal dev deployment), 'prod' (for your project\u2019s default production deployment). You can also select deployments in other projects with 'project-slug:ref' or 'team-slug:project-slug:ref'.\",\n )\n .conflicts([\"--prod\", \"--preview-name\", \"--deployment-name\", \"--url\"])\n .hideHelp(), // TODO(nicolas) Make this public\n )\n .addOption(\n new Option(\n \"--env-file <envFile>\",\n `Path to a custom file of environment variables, for choosing the \\\ndeployment, e.g. ${CONVEX_DEPLOYMENT_ENV_VAR_NAME} or ${CONVEX_SELF_HOSTED_URL_VAR_NAME}. \\\nSame format as .env.local or .env files, and overrides them.`,\n ).hideHelp(),\n ) as any;\n};\n\ndeclare const tag: unique symbol;\ntype ActionDescription = string & { readonly [tag]: \"noop\" };\nexport function actionDescription(action: string): ActionDescription {\n return action as any;\n}\n\nexport async function normalizeDevOptions(\n ctx: OneoffCtx,\n cmdOptions: {\n verbose?: boolean;\n typecheck: \"enable\" | \"try\" | \"disable\";\n typecheckComponents?: boolean;\n codegen: \"enable\" | \"disable\";\n once?: boolean;\n untilSuccess: boolean;\n run?: string | undefined;\n runSh?: string;\n runComponent?: string;\n tailLogs?: string | true;\n traceEvents: boolean;\n debugBundlePath?: string | undefined;\n debugNodeApis?: boolean;\n liveComponentSources?: boolean;\n pushAllModules?: boolean;\n while?: string;\n },\n): Promise<{\n verbose: boolean;\n typecheck: \"enable\" | \"try\" | \"disable\";\n typecheckComponents: boolean;\n codegen: boolean;\n once: boolean;\n untilSuccess: boolean;\n run?:\n | { kind: \"function\"; name: string; component?: string | undefined }\n | { kind: \"shell\"; command: string }\n | undefined;\n tailLogs: LogMode;\n traceEvents: boolean;\n debugBundlePath?: string | undefined;\n debugNodeApis: boolean;\n liveComponentSources: boolean;\n pushAllModules: boolean;\n}> {\n if (cmdOptions.runComponent && !cmdOptions.run) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"Can't specify `--run-component` option without `--run`\",\n });\n }\n\n if (cmdOptions.debugBundlePath !== undefined && !cmdOptions.once) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"`--debug-bundle-path` can only be used with `--once`.\",\n });\n }\n if (cmdOptions.debugNodeApis && !cmdOptions.once) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"`--debug-node-apis` can only be used with `--once`.\",\n });\n }\n\n return {\n verbose: !!cmdOptions.verbose,\n typecheck: cmdOptions.typecheck,\n typecheckComponents: !!cmdOptions.typecheckComponents,\n codegen: cmdOptions.codegen === \"enable\",\n once: !!cmdOptions.once,\n untilSuccess: cmdOptions.untilSuccess,\n run:\n cmdOptions.run !== undefined\n ? {\n kind: \"function\",\n name: cmdOptions.run,\n component: cmdOptions.runComponent,\n }\n : cmdOptions.runSh !== undefined\n ? {\n kind: \"shell\",\n command: cmdOptions.runSh,\n }\n : undefined,\n tailLogs:\n typeof cmdOptions.tailLogs === \"string\"\n ? (cmdOptions.tailLogs as LogMode)\n : \"pause-on-deploy\",\n traceEvents: cmdOptions.traceEvents,\n debugBundlePath: cmdOptions.debugBundlePath,\n debugNodeApis: !!cmdOptions.debugNodeApis,\n liveComponentSources: !!cmdOptions.liveComponentSources,\n pushAllModules: !!cmdOptions.pushAllModules,\n };\n}\n\nCommand.prototype.addDeployOptions = function () {\n return this.option(\"-v, --verbose\", \"Show full listing of changes\")\n .option(\n \"--dry-run\",\n \"Print out the generated configuration without deploying to your Convex deployment\",\n )\n .option(\"-y, --yes\", \"Skip confirmation prompt when running locally\")\n .addOption(\n new Option(\n \"--typecheck <mode>\",\n `Whether to check TypeScript files with \\`tsc --noEmit\\` before deploying.`,\n )\n .choices([\"enable\", \"try\", \"disable\"] as const)\n .default(\"try\" as const),\n )\n .option(\n \"--typecheck-components\",\n \"Check TypeScript files within component implementations with `tsc --noEmit`.\",\n false,\n )\n .addOption(\n new Option(\n \"--codegen <mode>\",\n \"Whether to regenerate code in `convex/_generated/` before pushing.\",\n )\n .choices([\"enable\", \"disable\"] as const)\n .default(\"enable\" as const),\n )\n .addOption(\n new Option(\n \"--cmd <command>\",\n \"Command to run as part of deploying your app (e.g. `vite build`). This command can depend on the environment variables specified in `--cmd-url-env-var-name` being set.\",\n ),\n )\n .addOption(\n new Option(\n \"--cmd-url-env-var-name <name>\",\n \"Environment variable name to set Convex deployment URL (e.g. `VITE_CONVEX_URL`) when using `--cmd`\",\n ),\n )\n .addOption(new Option(\"--debug-bundle-path <path>\").hideHelp())\n .addOption(new Option(\"--debug\").hideHelp())\n .addOption(new Option(\"--write-push-request <writePushRequest>\").hideHelp())\n .addOption(new Option(\"--live-component-sources\").hideHelp())\n .addOption(\n new Option(\n \"--push-all-modules\",\n \"Push all modules without checking for unchanged module hashes from the server\",\n )\n .default(false)\n .hideHelp(),\n );\n};\n\nCommand.prototype.addSelfHostOptions = function () {\n return this.option(\n \"--admin-key <adminKey>\",\n `An admin key for the deployment. Can alternatively be set as \\`${CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME}\\` environment variable.`,\n )\n .option(\n \"--url <url>\",\n `The url of the deployment. Can alternatively be set as \\`${CONVEX_SELF_HOSTED_URL_VAR_NAME}\\` environment variable.`,\n )\n .option(\n \"--env <env>\",\n `Path to a custom file of environment variables, containing \\`${CONVEX_SELF_HOSTED_URL_VAR_NAME}\\` and \\`${CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME}\\`.`,\n );\n};\n\nCommand.prototype.addRunOptions = function () {\n return (\n this.argument(\n \"functionName\",\n \"identifier of the function to run, like `listMessages` or `dir/file:myFunction`\",\n )\n .argument(\n \"[args]\",\n \"JSON-formatted arguments object to pass to the function.\",\n )\n .option(\n \"-w, --watch\",\n \"Watch a query, printing its result if the underlying data changes. Given function must be a query.\",\n )\n .option(\"--push\", \"Push code to deployment before running the function.\")\n .addOption(\n new Option(\n \"--identity <identity>\",\n 'JSON-formatted UserIdentity object, e.g. \\'{ name: \"John\", address: \"0x123\" }\\'',\n ),\n )\n // For backwards compatibility we still support --no-push which is a noop\n .addOption(new Option(\"--no-push\").hideHelp())\n // Options for the deploy that --push does\n .addOption(\n new Option(\n \"--typecheck <mode>\",\n `Whether to check TypeScript files with \\`tsc --noEmit\\`.`,\n )\n .choices([\"enable\", \"try\", \"disable\"] as const)\n .default(\"try\" as const),\n )\n .option(\n \"--typecheck-components\",\n \"Check TypeScript files within component implementations with `tsc --noEmit`.\",\n false,\n )\n .addOption(\n new Option(\n \"--codegen <mode>\",\n \"Regenerate code in `convex/_generated/`\",\n )\n .choices([\"enable\", \"disable\"] as const)\n .default(\"enable\" as const),\n )\n .addOption(\n new Option(\n \"--component <path>\",\n \"Path to the component in the component tree defined in convex.config.ts.\",\n ),\n )\n .addOption(new Option(\"--live-component-sources\").hideHelp())\n );\n};\n\nCommand.prototype.addImportOptions = function () {\n return this.argument(\"<path>\", \"Path to the input file\")\n .addOption(\n new Option(\n \"--table <table>\",\n \"Destination table name. Required if format is csv, jsonLines, or jsonArray. Not supported if format is zip.\",\n ),\n )\n .addOption(\n new Option(\n \"--replace\",\n \"Replace all existing data in any of the imported tables\",\n )\n .conflicts(\"--append\")\n .conflicts(\"--replace-all\"),\n )\n .addOption(\n new Option(\"--append\", \"Append imported data to any existing tables\")\n .conflicts(\"--replace-all\")\n .conflicts(\"--replace\"),\n )\n .addOption(\n new Option(\n \"--replace-all\",\n \"Replace all existing data in the deployment with the imported tables,\\n\" +\n \" deleting tables that don't appear in the import file or the schema,\\n\" +\n \" and clearing tables that appear in the schema but not in the import file\",\n )\n .conflicts(\"--append\")\n .conflicts(\"--replace\"),\n )\n .option(\n \"-y, --yes\",\n \"Skip confirmation prompt when import leads to deleting existing documents\",\n )\n .addOption(\n new Option(\n \"--format <format>\",\n \"Input file format. This flag is only required if the filename is missing an extension.\\n\" +\n \"- CSV files must have a header, and each row's entries are interpreted either as a (floating point) number or a string.\\n\" +\n \"- JSON files must be an array of JSON objects.\\n\" +\n \"- JSONLines files must have a JSON object per line.\\n\" +\n \"- ZIP files must have one directory per table, containing <table>/documents.jsonl. Snapshot exports from the Convex dashboard have this format.\",\n ).choices([\"csv\", \"jsonLines\", \"jsonArray\", \"zip\"]),\n )\n .addOption(\n new Option(\n \"--component <path>\",\n \"Path to the component in the component tree defined in convex.config.ts.\",\n ),\n );\n};\n\nCommand.prototype.addExportOptions = function () {\n return this.requiredOption(\n \"--path <zipFilePath>\",\n \"Exports data into a ZIP file at this path, which may be a directory or unoccupied .zip path\",\n ).addOption(\n new Option(\n \"--include-file-storage\",\n \"Includes stored files (https://dashboard.convex.dev/deployment/files) in a _storage folder within the ZIP file\",\n ),\n );\n};\n\nCommand.prototype.addDataOptions = function () {\n return this.addOption(\n new Option(\n \"--limit <n>\",\n \"List only the `n` the most recently created documents.\",\n )\n .default(100)\n .argParser(parsePositiveInteger),\n )\n .addOption(\n new Option(\n \"--order <choice>\",\n \"Order the documents by their `_creationTime`.\",\n )\n .choices([\"asc\", \"desc\"])\n .default(\"desc\"),\n )\n .addOption(\n new Option(\n \"--component <path>\",\n \"Path to the component in the component tree defined in convex.config.ts.\",\n ),\n )\n .addOption(\n new Option(\n \"--format <format>\",\n \"Format to print the data in. This flag is only required if the filename is missing an extension.\\n\" +\n \"- jsonArray (aka json): print the data as a JSON array of objects.\\n\" +\n \"- jsonLines (aka jsonl): print the data as a JSON object per line.\\n\" +\n \"- pretty: print the data in a human-readable format.\",\n ).choices([\"jsonArray\", \"json\", \"jsonLines\", \"jsonl\", \"pretty\"]),\n )\n .argument(\"[table]\", \"If specified, list documents in this table.\");\n};\n\nCommand.prototype.addLogsOptions = function () {\n return this.option(\n \"--history [n]\",\n \"Show `n` most recent logs. Defaults to showing all available logs.\",\n parseInteger,\n )\n .option(\n \"--success\",\n \"Print a log line for every successful function execution\",\n false,\n )\n .option(\"--jsonl\", \"Output raw log events as JSONL\", false);\n};\n\nCommand.prototype.addNetworkTestOptions = function () {\n return this.addOption(\n new Option(\n \"--timeout <timeout>\",\n \"Timeout in seconds for the network test (default: 30).\",\n ),\n )\n .addOption(\n new Option(\n \"--ip-family <ipFamily>\",\n \"IP family to use (ipv4, ipv6, or auto)\",\n ),\n )\n .addOption(\n new Option(\n \"--speed-test\",\n \"Perform a large echo test to measure network speed.\",\n ),\n );\n};\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { Command, Option, OptionValues } from \"@commander-js/extra-typings\";\nimport { OneoffCtx } from \"../../bundler/context.js\";\nimport { LogMode } from \"./logs.js\";\nimport {\n CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME,\n CONVEX_SELF_HOSTED_URL_VAR_NAME,\n parseInteger,\n parsePositiveInteger,\n} from \"./utils/utils.js\";\n\ndeclare module \"@commander-js/extra-typings\" {\n interface Command<Args extends any[] = [], Opts extends OptionValues = {}> {\n /**\n * For a command that talks to the configured dev deployment by default,\n * add flags for talking to prod, preview, or other deployment in the same\n * project.\n *\n * These flags are added to the end of `command` (ordering matters for `--help`\n * output). `action` should look like \"Import data into\" because it is prefixed\n * onto help strings.\n *\n * The options can be passed to `deploymentSelectionFromOptions`.\n *\n * NOTE: This method only exists at runtime if this file is imported.\n * To help avoid this bug, this method takes in an `ActionDescription` which\n * can only be constructed via `actionDescription` from this file.\n *\n * @param action - The action description\n * @param options - Optional settings\n * @param options.showUrlHelp - If true, show the --url option in help output\n */\n addDeploymentSelectionOptions(\n action: ActionDescription,\n options?: { showUrlHelp?: boolean },\n ): Command<\n Args,\n Opts & {\n envFile?: string;\n url?: string;\n adminKey?: string;\n prod?: boolean;\n previewName?: string;\n deploymentName?: string;\n deployment?: string;\n }\n >;\n\n /**\n * Adds options for the `deploy` command.\n */\n addDeployOptions(): Command<\n Args,\n Opts & {\n verbose?: boolean;\n dryRun?: boolean;\n yes?: boolean;\n typecheck: \"enable\" | \"try\" | \"disable\";\n typecheckComponents: boolean;\n codegen: \"enable\" | \"disable\";\n cmd?: string;\n cmdUrlEnvVarName?: string;\n debugBundlePath?: string;\n debug?: boolean;\n writePushRequest?: string;\n liveComponentSources?: boolean;\n }\n >;\n\n /**\n * Adds options for `self-host` subcommands.\n */\n addSelfHostOptions(): Command<\n Args,\n Opts & {\n url?: string;\n adminKey?: string;\n env?: string;\n }\n >;\n\n /**\n * Adds options and arguments for the `run` command.\n */\n addRunOptions(): Command<\n [...Args, string, string | undefined],\n Opts & {\n watch?: boolean;\n push?: boolean;\n identity?: string;\n typecheck: \"enable\" | \"try\" | \"disable\";\n typecheckComponents: boolean;\n codegen: \"enable\" | \"disable\";\n component?: string;\n liveComponentSources?: boolean;\n }\n >;\n\n /**\n * Adds options for the `import` command.\n */\n addImportOptions(): Command<\n [...Args, string],\n Opts & {\n table?: string;\n format?: \"csv\" | \"jsonLines\" | \"jsonArray\" | \"zip\";\n replace?: boolean;\n append?: boolean;\n replaceAll?: boolean;\n yes?: boolean;\n component?: string;\n }\n >;\n\n /**\n * Adds options for the `export` command.\n */\n addExportOptions(): Command<\n Args,\n Opts & {\n path: string;\n includeFileStorage?: boolean;\n }\n >;\n\n /**\n * Adds options for the `data` command.\n */\n addDataOptions(): Command<\n [...Args, string | undefined],\n Opts & {\n limit: number;\n order: \"asc\" | \"desc\";\n component?: string;\n format?: \"json\" | \"jsonArray\" | \"jsonLines\" | \"jsonl\" | \"pretty\";\n }\n >;\n\n /**\n * Adds options for the `logs` command.\n */\n addLogsOptions(): Command<\n Args,\n Opts & {\n history: number;\n success: boolean;\n jsonl: boolean;\n }\n >;\n\n /**\n * Adds options for the `network-test` command.\n */\n addNetworkTestOptions(): Command<\n Args,\n Opts & {\n timeout?: string;\n ipFamily?: string;\n speedTest?: boolean;\n }\n >;\n }\n}\n\nCommand.prototype.addDeploymentSelectionOptions = function (\n action: ActionDescription,\n options?: { showUrlHelp?: boolean },\n) {\n const urlOption = new Option(\n \"--url <url>\",\n options?.showUrlHelp\n ? action + \" the deployment at the given URL.\"\n : undefined,\n ).conflicts([\n \"--prod\",\n \"--preview-name\",\n \"--deployment-name\",\n \"--deployment\",\n ]);\n if (!options?.showUrlHelp) {\n urlOption.hideHelp();\n }\n return this.addOption(urlOption)\n .addOption(new Option(\"--admin-key <adminKey>\").hideHelp())\n .addOption(\n new Option(\n \"--prod\",\n action + \" this project's default production deployment.\",\n ).conflicts([\n \"--preview-name\",\n \"--deployment-name\",\n \"--url\",\n \"--deployment\",\n ]),\n )\n .addOption(\n new Option(\n \"--preview-name <previewName>\",\n action + \" the preview deployment with the given name.\",\n )\n .conflicts([\"--prod\", \"--deployment-name\", \"--url\", \"--deployment\"])\n .hideHelp(),\n )\n .addOption(\n new Option(\n \"--deployment-name <deploymentName>\",\n action + \" the specified deployment.\",\n )\n .conflicts([\"--prod\", \"--preview-name\", \"--url\", \"--deployment\"])\n .hideHelp(),\n )\n .addOption(\n new Option(\n \"--deployment <deployment>\",\n action +\n \" the specified deployment. Accepts a deployment name (e.g. joyful-capybara-123), ref (e.g. dev/james), 'dev' (for your personal dev deployment), 'prod' (for your project\u2019s default production deployment). You can also select deployments in other projects with 'project-slug:ref' or 'team-slug:project-slug:ref'.\",\n )\n .conflicts([\"--prod\", \"--preview-name\", \"--deployment-name\", \"--url\"])\n .hideHelp(), // TODO(nicolas) Make this public\n )\n .addOption(\n new Option(\n \"--env-file <envFile>\",\n `Path to a custom file of environment variables, for choosing the \\\ndeployment, e.g. ${CONVEX_DEPLOYMENT_ENV_VAR_NAME} or ${CONVEX_SELF_HOSTED_URL_VAR_NAME}. \\\nSame format as .env.local or .env files, and overrides them.`,\n ).hideHelp(),\n ) as any;\n};\n\ndeclare const tag: unique symbol;\ntype ActionDescription = string & { readonly [tag]: \"noop\" };\nexport function actionDescription(action: string): ActionDescription {\n return action as any;\n}\n\nexport async function normalizeDevOptions(\n ctx: OneoffCtx,\n cmdOptions: {\n verbose?: boolean;\n typecheck: \"enable\" | \"try\" | \"disable\";\n typecheckComponents?: boolean;\n codegen: \"enable\" | \"disable\";\n once?: boolean;\n untilSuccess: boolean;\n run?: string | undefined;\n runSh?: string;\n runComponent?: string;\n tailLogs?: string | true;\n traceEvents: boolean;\n debugBundlePath?: string | undefined;\n debugNodeApis?: boolean;\n liveComponentSources?: boolean;\n pushAllModules?: boolean;\n while?: string;\n },\n): Promise<{\n verbose: boolean;\n typecheck: \"enable\" | \"try\" | \"disable\";\n typecheckComponents: boolean;\n codegen: boolean;\n once: boolean;\n untilSuccess: boolean;\n run?:\n | { kind: \"function\"; name: string; component?: string | undefined }\n | { kind: \"shell\"; command: string }\n | undefined;\n tailLogs: LogMode;\n traceEvents: boolean;\n debugBundlePath?: string | undefined;\n debugNodeApis: boolean;\n liveComponentSources: boolean;\n pushAllModules: boolean;\n}> {\n if (cmdOptions.runComponent && !cmdOptions.run) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"Can't specify `--run-component` option without `--run`\",\n });\n }\n\n if (cmdOptions.debugBundlePath !== undefined && !cmdOptions.once) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"`--debug-bundle-path` can only be used with `--once`.\",\n });\n }\n if (cmdOptions.debugNodeApis && !cmdOptions.once) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"`--debug-node-apis` can only be used with `--once`.\",\n });\n }\n\n return {\n verbose: !!cmdOptions.verbose,\n typecheck: cmdOptions.typecheck,\n typecheckComponents: !!cmdOptions.typecheckComponents,\n codegen: cmdOptions.codegen === \"enable\",\n once: !!cmdOptions.once,\n untilSuccess: cmdOptions.untilSuccess,\n run:\n cmdOptions.run !== undefined\n ? {\n kind: \"function\",\n name: cmdOptions.run,\n component: cmdOptions.runComponent,\n }\n : cmdOptions.runSh !== undefined\n ? {\n kind: \"shell\",\n command: cmdOptions.runSh,\n }\n : undefined,\n tailLogs:\n typeof cmdOptions.tailLogs === \"string\"\n ? (cmdOptions.tailLogs as LogMode)\n : \"pause-on-deploy\",\n traceEvents: cmdOptions.traceEvents,\n debugBundlePath: cmdOptions.debugBundlePath,\n debugNodeApis: !!cmdOptions.debugNodeApis,\n liveComponentSources: !!cmdOptions.liveComponentSources,\n pushAllModules: !!cmdOptions.pushAllModules,\n };\n}\n\nCommand.prototype.addDeployOptions = function () {\n return this.option(\"-v, --verbose\", \"Show full listing of changes\")\n .option(\n \"--dry-run\",\n \"Print out the generated configuration without deploying to your Convex deployment\",\n )\n .addOption(\n new Option(\n \"-y, --yes\",\n \"Skip confirmation prompt when running interactively. Warning: this deploys to PRODUCTION. To deploy to your current dev environment, run npx convex dev --once\",\n ).hideHelp(),\n )\n .addOption(\n new Option(\n \"--typecheck <mode>\",\n `Whether to check TypeScript files with \\`tsc --noEmit\\` before deploying.`,\n )\n .choices([\"enable\", \"try\", \"disable\"] as const)\n .default(\"try\" as const),\n )\n .option(\n \"--typecheck-components\",\n \"Check TypeScript files within component implementations with `tsc --noEmit`.\",\n false,\n )\n .addOption(\n new Option(\n \"--codegen <mode>\",\n \"Whether to regenerate code in `convex/_generated/` before pushing.\",\n )\n .choices([\"enable\", \"disable\"] as const)\n .default(\"enable\" as const),\n )\n .addOption(\n new Option(\n \"--cmd <command>\",\n \"Command to run as part of deploying your app (e.g. `vite build`). This command can depend on the environment variables specified in `--cmd-url-env-var-name` being set.\",\n ),\n )\n .addOption(\n new Option(\n \"--cmd-url-env-var-name <name>\",\n \"Environment variable name to set Convex deployment URL (e.g. `VITE_CONVEX_URL`) when using `--cmd`\",\n ),\n )\n .addOption(new Option(\"--debug-bundle-path <path>\").hideHelp())\n .addOption(new Option(\"--debug\").hideHelp())\n .addOption(new Option(\"--write-push-request <writePushRequest>\").hideHelp())\n .addOption(new Option(\"--live-component-sources\").hideHelp())\n .addOption(\n new Option(\n \"--push-all-modules\",\n \"Push all modules without checking for unchanged module hashes from the server\",\n )\n .default(false)\n .hideHelp(),\n );\n};\n\nCommand.prototype.addSelfHostOptions = function () {\n return this.option(\n \"--admin-key <adminKey>\",\n `An admin key for the deployment. Can alternatively be set as \\`${CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME}\\` environment variable.`,\n )\n .option(\n \"--url <url>\",\n `The url of the deployment. Can alternatively be set as \\`${CONVEX_SELF_HOSTED_URL_VAR_NAME}\\` environment variable.`,\n )\n .option(\n \"--env <env>\",\n `Path to a custom file of environment variables, containing \\`${CONVEX_SELF_HOSTED_URL_VAR_NAME}\\` and \\`${CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME}\\`.`,\n );\n};\n\nCommand.prototype.addRunOptions = function () {\n return (\n this.argument(\n \"functionName\",\n \"identifier of the function to run, like `listMessages` or `dir/file:myFunction`\",\n )\n .argument(\n \"[args]\",\n \"JSON-formatted arguments object to pass to the function.\",\n )\n .option(\n \"-w, --watch\",\n \"Watch a query, printing its result if the underlying data changes. Given function must be a query.\",\n )\n .option(\"--push\", \"Push code to deployment before running the function.\")\n .addOption(\n new Option(\n \"--identity <identity>\",\n 'JSON-formatted UserIdentity object, e.g. \\'{ name: \"John\", address: \"0x123\" }\\'',\n ),\n )\n // For backwards compatibility we still support --no-push which is a noop\n .addOption(new Option(\"--no-push\").hideHelp())\n // Options for the deploy that --push does\n .addOption(\n new Option(\n \"--typecheck <mode>\",\n `Whether to check TypeScript files with \\`tsc --noEmit\\`.`,\n )\n .choices([\"enable\", \"try\", \"disable\"] as const)\n .default(\"try\" as const),\n )\n .option(\n \"--typecheck-components\",\n \"Check TypeScript files within component implementations with `tsc --noEmit`.\",\n false,\n )\n .addOption(\n new Option(\n \"--codegen <mode>\",\n \"Regenerate code in `convex/_generated/`\",\n )\n .choices([\"enable\", \"disable\"] as const)\n .default(\"enable\" as const),\n )\n .addOption(\n new Option(\n \"--component <path>\",\n \"Path to the component in the component tree defined in convex.config.ts.\",\n ),\n )\n .addOption(new Option(\"--live-component-sources\").hideHelp())\n );\n};\n\nCommand.prototype.addImportOptions = function () {\n return this.argument(\"<path>\", \"Path to the input file\")\n .addOption(\n new Option(\n \"--table <table>\",\n \"Destination table name. Required if format is csv, jsonLines, or jsonArray. Not supported if format is zip.\",\n ),\n )\n .addOption(\n new Option(\n \"--replace\",\n \"Replace all existing data in any of the imported tables\",\n )\n .conflicts(\"--append\")\n .conflicts(\"--replace-all\"),\n )\n .addOption(\n new Option(\"--append\", \"Append imported data to any existing tables\")\n .conflicts(\"--replace-all\")\n .conflicts(\"--replace\"),\n )\n .addOption(\n new Option(\n \"--replace-all\",\n \"Replace all existing data in the deployment with the imported tables,\\n\" +\n \" deleting tables that don't appear in the import file or the schema,\\n\" +\n \" and clearing tables that appear in the schema but not in the import file\",\n )\n .conflicts(\"--append\")\n .conflicts(\"--replace\"),\n )\n .option(\n \"-y, --yes\",\n \"Skip confirmation prompt when import leads to deleting existing documents\",\n )\n .addOption(\n new Option(\n \"--format <format>\",\n \"Input file format. This flag is only required if the filename is missing an extension.\\n\" +\n \"- CSV files must have a header, and each row's entries are interpreted either as a (floating point) number or a string.\\n\" +\n \"- JSON files must be an array of JSON objects.\\n\" +\n \"- JSONLines files must have a JSON object per line.\\n\" +\n \"- ZIP files must have one directory per table, containing <table>/documents.jsonl. Snapshot exports from the Convex dashboard have this format.\",\n ).choices([\"csv\", \"jsonLines\", \"jsonArray\", \"zip\"]),\n )\n .addOption(\n new Option(\n \"--component <path>\",\n \"Path to the component in the component tree defined in convex.config.ts.\",\n ),\n );\n};\n\nCommand.prototype.addExportOptions = function () {\n return this.requiredOption(\n \"--path <zipFilePath>\",\n \"Exports data into a ZIP file at this path, which may be a directory or unoccupied .zip path\",\n ).addOption(\n new Option(\n \"--include-file-storage\",\n \"Includes stored files (https://dashboard.convex.dev/deployment/files) in a _storage folder within the ZIP file\",\n ),\n );\n};\n\nCommand.prototype.addDataOptions = function () {\n return this.addOption(\n new Option(\n \"--limit <n>\",\n \"List only the `n` the most recently created documents.\",\n )\n .default(100)\n .argParser(parsePositiveInteger),\n )\n .addOption(\n new Option(\n \"--order <choice>\",\n \"Order the documents by their `_creationTime`.\",\n )\n .choices([\"asc\", \"desc\"])\n .default(\"desc\"),\n )\n .addOption(\n new Option(\n \"--component <path>\",\n \"Path to the component in the component tree defined in convex.config.ts.\",\n ),\n )\n .addOption(\n new Option(\n \"--format <format>\",\n \"Format to print the data in. This flag is only required if the filename is missing an extension.\\n\" +\n \"- jsonArray (aka json): print the data as a JSON array of objects.\\n\" +\n \"- jsonLines (aka jsonl): print the data as a JSON object per line.\\n\" +\n \"- pretty: print the data in a human-readable format.\",\n ).choices([\"jsonArray\", \"json\", \"jsonLines\", \"jsonl\", \"pretty\"]),\n )\n .argument(\"[table]\", \"If specified, list documents in this table.\");\n};\n\nCommand.prototype.addLogsOptions = function () {\n return this.option(\n \"--history [n]\",\n \"Show `n` most recent logs. Defaults to showing all available logs.\",\n parseInteger,\n )\n .option(\n \"--success\",\n \"Print a log line for every successful function execution\",\n false,\n )\n .option(\"--jsonl\", \"Output raw log events as JSONL\", false);\n};\n\nCommand.prototype.addNetworkTestOptions = function () {\n return this.addOption(\n new Option(\n \"--timeout <timeout>\",\n \"Timeout in seconds for the network test (default: 30).\",\n ),\n )\n .addOption(\n new Option(\n \"--ip-family <ipFamily>\",\n \"IP family to use (ipv4, ipv6, or auto)\",\n ),\n )\n .addOption(\n new Option(\n \"--speed-test\",\n \"Perform a large echo test to measure network speed.\",\n ),\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -138,7 +138,8 @@ const BundlerSchema = z.object({
|
|
|
138
138
|
)
|
|
139
139
|
});
|
|
140
140
|
const AiFilesSchema = z.object({
|
|
141
|
-
|
|
141
|
+
enabled: z.boolean().optional(),
|
|
142
|
+
disableStalenessMessage: z.boolean().optional()
|
|
142
143
|
});
|
|
143
144
|
const refineToObject = (schema) => schema.refine((val) => val !== null && !Array.isArray(val), {
|
|
144
145
|
message: "Expected `convex.json` to contain an object"
|
|
@@ -318,9 +319,7 @@ export async function readProjectConfig(ctx) {
|
|
|
318
319
|
staticApi: false,
|
|
319
320
|
staticDataModel: false
|
|
320
321
|
},
|
|
321
|
-
aiFiles: {
|
|
322
|
-
disableStalenessMessage: false
|
|
323
|
-
}
|
|
322
|
+
aiFiles: {}
|
|
324
323
|
},
|
|
325
324
|
configPath: configName()
|
|
326
325
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/lib/config.ts"],
|
|
4
|
-
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport path from \"path\";\nimport { z } from \"zod\";\nimport { Context } from \"../../bundler/context.js\";\nimport { TypescriptCompiler } from \"./typecheck.js\";\nimport {\n changeSpinner,\n logError,\n logFailure,\n logFinishedStep,\n logMessage,\n logWarning,\n showSpinner,\n} from \"../../bundler/log.js\";\nimport {\n Bundle,\n BundleHash,\n bundle,\n bundleAuthConfig,\n entryPointsByEnvironment,\n} from \"../../bundler/index.js\";\nimport { version } from \"../version.js\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport {\n functionsDir,\n ErrorData,\n loadPackageJson,\n deploymentFetch,\n deprecationCheckWarning,\n logAndHandleFetchError,\n ThrowingFetchError,\n currentPackageHomepage,\n} from \"./utils/utils.js\";\nimport { recursivelyDelete } from \"./fsUtils.js\";\nimport { NodeDependency } from \"./deployApi/modules.js\";\nimport { ComponentDefinitionPath } from \"./components/definition/directoryStructure.js\";\nimport {\n LocalDeploymentError,\n printLocalDeploymentOnError,\n} from \"./localDeployment/errors.js\";\nimport { debugIsolateBundlesSerially } from \"../../bundler/debugBundle.js\";\nimport { DeploymentType } from \"./api.js\";\nexport { productionProvisionHost, provisionHost } from \"./utils/utils.js\";\n\n/** Type representing WorkOS AuthKit integration configuration. */\nexport interface AuthKitConfigureSettings {\n redirectUris?: string[];\n appHomepageUrl?: string;\n corsOrigins?: string[];\n}\n\nexport interface AuthKitEnvironmentConfig {\n environmentType?: \"development\" | \"staging\" | \"production\";\n configure?: false | AuthKitConfigureSettings;\n localEnvVars?: false | Record<string, string>;\n}\n\nexport interface AuthKitConfig {\n dev?: AuthKitEnvironmentConfig;\n preview?: AuthKitEnvironmentConfig;\n prod?: AuthKitEnvironmentConfig;\n}\n/**\n * convex.json file parsing notes\n *\n * - Unknown fields at the top level and in node and codegen are preserved\n * so that older CLI versions can deploy new projects (this functionality\n * will be removed in the future).\n * - convex.json does not allow comments, but this could change in the future.\n * Previously it contained automatically set values like productionUrl\n * but it's more like a config file now.\n */\n\n/** Type representing Convex project configuration. */\nexport interface ProjectConfig {\n // \u26A0\uFE0F When updating this, please also update the file used by IDEs for autocompletion and validation:\n // -> npm-packages/convex/schemas/convex.schema.json\n\n functions: string;\n node: {\n externalPackages: string[];\n // nodeVersion has no default value, its presence/absence is meaningful\n nodeVersion?: string | undefined;\n };\n generateCommonJSApi: boolean;\n\n codegen: {\n staticApi: boolean;\n staticDataModel: boolean;\n legacyComponentApi?: boolean;\n fileType?: \"ts\" | \"js/dts\";\n };\n\n bundler?: {\n includeSourcesContent?: boolean;\n };\n\n typescriptCompiler?: TypescriptCompiler;\n\n // WorkOS AuthKit integration configuration\n authKit?: AuthKitConfig | undefined;\n\n // Convex AI files user preferences.\n aiFiles?: {\n // When true, suppresses AI files install/staleness nags.\n disableStalenessMessage?: boolean;\n };\n}\n\nexport interface Config {\n projectConfig: ProjectConfig;\n modules: Bundle[];\n nodeDependencies: NodeDependency[];\n schemaId?: string;\n udfServerVersion?: string;\n nodeVersion?: string | undefined;\n}\n\nexport interface ConfigWithModuleHashes {\n projectConfig: ProjectConfig;\n moduleHashes: BundleHash[];\n nodeDependencies: NodeDependency[];\n schemaId?: string;\n udfServerVersion?: string;\n}\n\nconst DEFAULT_FUNCTIONS_PATH = \"convex/\";\n\n/** Whether .ts file extensions should be used for generated code (default is false). */\nexport function usesTypeScriptCodegen(projectConfig: ProjectConfig): boolean {\n return projectConfig.codegen.fileType === \"ts\";\n}\n\n/** Whether the new component API import style should be used (default is false) */\nexport function usesComponentApiImports(projectConfig: ProjectConfig): boolean {\n return projectConfig.codegen.legacyComponentApi === false;\n}\n\n/**\n * Get the authKit configuration from convex.json.\n */\nexport async function getAuthKitConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n): Promise<AuthKitConfig | undefined> {\n // If there's an explicit authKit config, use it\n if (\"authKit\" in projectConfig) {\n return projectConfig.authKit;\n }\n\n // TODO remove this after a few versions\n // Migration help: is this one of the hardcoded templates that has special\n // behavior without a convex.json? Encourage them to upgrade the template.\n const homepage = await currentPackageHomepage(ctx);\n const isOldWorkOSTemplate = !!(\n homepage &&\n [\n \"https://github.com/workos/template-convex-nextjs-authkit/#readme\",\n \"https://github.com/workos/template-convex-react-vite-authkit/#readme\",\n \"https://github.com:workos/template-convex-react-vite-authkit/#readme\",\n \"https://github.com/workos/template-convex-tanstack-start-authkit/#readme\",\n ].includes(homepage)\n );\n\n if (isOldWorkOSTemplate) {\n logWarning(\n \"The template this project is based on has been updated to work with this version of Convex.\",\n );\n logWarning(\n \"Please copy the convex.json from the latest template version or add an 'authKit' section.\",\n );\n logMessage(\"Learn more at https://docs.convex.dev/auth/authkit\");\n }\n}\n\nexport async function getAuthKitEnvironmentConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n deploymentType: \"dev\" | \"preview\" | \"prod\",\n): Promise<AuthKitEnvironmentConfig | undefined> {\n const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n return authKitConfig?.[deploymentType];\n}\n\n/** Error parsing ProjectConfig representation. */\nclass ParseError extends Error {}\n\n// WorkOS AuthKit configuration schemas\nconst AuthKitConfigureSchema = z.union([\n z.literal(false),\n z.object({\n redirectUris: z.array(z.string()).optional(),\n appHomepageUrl: z.string().optional(),\n corsOrigins: z.array(z.string()).optional(),\n }),\n]);\n\nconst AuthKitLocalEnvVarsSchema = z.union([\n z.literal(false),\n z.record(z.string()),\n]);\n\nconst AuthKitEnvironmentConfigSchema = z.object({\n environmentType: z.enum([\"development\", \"staging\", \"production\"]).optional(),\n configure: AuthKitConfigureSchema.optional(),\n localEnvVars: AuthKitLocalEnvVarsSchema.optional(),\n});\n\nconst AuthKitConfigSchema = z\n .object({\n dev: AuthKitEnvironmentConfigSchema.optional(),\n preview: AuthKitEnvironmentConfigSchema.optional(),\n prod: AuthKitEnvironmentConfigSchema.optional(),\n })\n .refine(\n (data) => {\n // Validation: environmentType only allowed in prod\n const devEnvType = data.dev?.environmentType;\n const previewEnvType = data.preview?.environmentType;\n if (devEnvType || previewEnvType) {\n return false;\n }\n return true;\n },\n {\n message: \"authKit.environmentType is only allowed in the prod section\",\n path: [\"environmentType\"],\n },\n )\n .refine(\n (data) => {\n // Validation: localEnvVars only allowed for dev\n // Check preview doesn't have localEnvVars\n if (\n data.preview?.localEnvVars !== undefined &&\n data.preview?.localEnvVars !== false\n ) {\n return false;\n }\n // Check prod doesn't have localEnvVars\n if (\n data.prod?.localEnvVars !== undefined &&\n data.prod?.localEnvVars !== false\n ) {\n return false;\n }\n return true;\n },\n {\n message:\n \"authKit.localEnvVars is only supported for dev deployments. Preview and prod deployments must configure environment variables directly in the deployment platform.\",\n path: [\"localEnvVars\"],\n },\n );\n// Separate Node and Codegen schemas so we can parse these loose or strict\nconst NodeSchema = z.object({\n externalPackages: z\n .array(z.string())\n .default([])\n .describe(\n \"list of npm packages to install at deploy time instead of bundling. Packages with binaries should be added here.\",\n ),\n nodeVersion: z\n .string()\n .optional()\n .describe(\"The Node.js version to use for Node.js functions\"),\n});\n\nconst CodegenSchema = z.object({\n staticApi: z\n .boolean()\n .default(false)\n .describe(\n \"Use Convex function argument validators and return value validators to generate a typed API object\",\n ),\n staticDataModel: z.boolean().default(false),\n // These optional fields have no defaults - their presence/absence is meaningful\n legacyComponentApi: z.boolean().optional(),\n fileType: z.enum([\"ts\", \"js/dts\"]).optional(),\n});\n\nconst BundlerSchema = z.object({\n includeSourcesContent: z\n .boolean()\n .default(false)\n .describe(\n \"Whether to include original source code in source maps. Set to false to reduce bundle size.\",\n ),\n});\n\nconst AiFilesSchema = z.object({\n disableStalenessMessage: z.boolean().default(false),\n});\n\nconst refineToObject = <T extends z.ZodTypeAny>(schema: T) =>\n schema.refine((val) => val !== null && !Array.isArray(val), {\n message: \"Expected `convex.json` to contain an object\",\n });\n\n// Factory function to create schema with strict or passthrough behavior\nconst createProjectConfigSchema = (strict: boolean) => {\n const nodeSchema = strict ? NodeSchema.strict() : NodeSchema.passthrough();\n const codegenSchema = strict\n ? CodegenSchema.strict()\n : CodegenSchema.passthrough();\n const bundlerSchema = strict\n ? BundlerSchema.strict()\n : BundlerSchema.passthrough();\n\n const baseObject = z.object({\n functions: z\n .string()\n .default(DEFAULT_FUNCTIONS_PATH)\n .describe(\"Relative file path to the convex directory\"),\n node: nodeSchema.default({ externalPackages: [] }),\n codegen: codegenSchema.default({\n staticApi: false,\n staticDataModel: false,\n }),\n bundler: bundlerSchema.default({ includeSourcesContent: false }).optional(),\n generateCommonJSApi: z.boolean().default(false),\n typescriptCompiler: z\n .enum([\"tsc\", \"tsgo\"])\n .optional()\n .describe(\n \"TypeScript compiler to use for typechecking (`@typescript/native-preview` must be installed to use `tsgo`)\",\n ),\n\n // Optional $schema field for JSON schema validation in editors\n $schema: z.string().optional(),\n // WorkOS AuthKit integration configuration\n authKit: AuthKitConfigSchema.optional(),\n aiFiles: AiFilesSchema.optional(),\n\n // Deprecated fields that have been deprecated for years, only here so we\n // know it's safe to delete them.\n project: z.string().optional(),\n team: z.string().optional(),\n prodUrl: z.string().optional(),\n });\n\n // Apply strict or passthrough BEFORE refine\n const withStrictness = strict\n ? baseObject.strict()\n : baseObject.passthrough();\n\n // Now apply the refinement\n return withStrictness.refine(\n (data) => {\n // Validate that generateCommonJSApi is not true when using TypeScript codegen\n if (data.generateCommonJSApi && data.codegen.fileType === \"ts\") {\n return false;\n }\n return true;\n },\n {\n message:\n 'Cannot use `generateCommonJSApi: true` with `codegen.fileType: \"ts\"`. ' +\n \"CommonJS modules require JavaScript generation. \" +\n 'Either set `codegen.fileType: \"js/dts\"` or remove `generateCommonJSApi`.',\n path: [\"generateCommonJSApi\"],\n },\n );\n};\n\n// Parse allowing extra fields (for forward compatibility)\nconst ProjectConfigSchema = refineToObject(createProjectConfigSchema(false));\n\n// Strict schema warn about extra keys\nconst ProjectConfigSchemaStrict = refineToObject(\n createProjectConfigSchema(true),\n);\n\nconst warnedUnknownKeys = new Set<string>();\nexport function resetUnknownKeyWarnings() {\n warnedUnknownKeys.clear();\n}\n\n/** Parse object to ProjectConfig. */\nexport async function parseProjectConfig(\n ctx: Context,\n obj: any,\n): Promise<ProjectConfig> {\n if (typeof obj !== \"object\" || obj === null || Array.isArray(obj)) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: \"Expected `convex.json` to contain an object\",\n });\n }\n\n try {\n // Try strict parse first to detect unknown keys\n return ProjectConfigSchemaStrict.parse(obj);\n } catch (error) {\n if (error instanceof z.ZodError) {\n // Check if all issues are unrecognized_keys issues\n const unknownKeyIssues = error.issues.filter(\n (issue) => issue.code === \"unrecognized_keys\",\n );\n\n if (\n unknownKeyIssues.length > 0 &&\n unknownKeyIssues.length === error.issues.length\n ) {\n // All errors are just unknown keys - warn about them\n for (const issue of unknownKeyIssues) {\n if (issue.code === \"unrecognized_keys\") {\n const pathPrefix =\n issue.path.length > 0 ? issue.path.join(\".\") + \".\" : \"\";\n const unknownKeys = issue.keys as string[];\n const newUnknownKeys = unknownKeys.filter(\n (key) => !warnedUnknownKeys.has(pathPrefix + key),\n );\n\n if (newUnknownKeys.length > 0) {\n const fullPath =\n issue.path.length > 0\n ? `\\`${issue.path.join(\".\")}\\``\n : \"`convex.json`\";\n logMessage(\n chalkStderr.yellow(\n `Warning: Unknown ${newUnknownKeys.length === 1 ? \"property\" : \"properties\"} in ${fullPath}: ${newUnknownKeys.map((k) => `\\`${k}\\``).join(\", \")}`,\n ),\n );\n logMessage(\n chalkStderr.gray(\n \" These properties will be preserved but are not recognized by this version of Convex.\",\n ),\n );\n\n // Track that we've warned about these keys\n newUnknownKeys.forEach((key) =>\n warnedUnknownKeys.add(pathPrefix + key),\n );\n }\n }\n }\n // Re-parse with passthrough schema to preserve unknown keys\n return ProjectConfigSchema.parse(obj);\n }\n\n // Handle validation errors we won't ignore\n if (error instanceof z.ZodError) {\n const issue = error.issues[0];\n const pathStr = issue.path.join(\".\");\n const message = pathStr\n ? `\\`${pathStr}\\` in \\`convex.json\\`: ${issue.message}`\n : `\\`convex.json\\`: ${issue.message}`;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: message,\n });\n }\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: (error as any).toString(),\n });\n }\n}\n\n// Parse a deployment config returned by the backend, picking out\n// the fields we care about.\nfunction parseBackendConfig(obj: any): {\n functions: string;\n nodeVersion?: string;\n} {\n function throwParseError(message: string) {\n // Unexpected error\n // eslint-disable-next-line no-restricted-syntax\n throw new ParseError(message);\n }\n if (typeof obj !== \"object\") {\n throwParseError(\"Expected an object\");\n }\n const { functions, nodeVersion } = obj;\n if (typeof functions !== \"string\") {\n throwParseError(\"Expected functions to be a string\");\n }\n\n if (typeof nodeVersion !== \"undefined\" && typeof nodeVersion !== \"string\") {\n throwParseError(\"Expected nodeVersion to be a string\");\n }\n\n return {\n functions,\n ...((nodeVersion ?? null) !== null ? { nodeVersion: nodeVersion } : {}),\n };\n}\n\nexport function configName(): string {\n return \"convex.json\";\n}\n\nexport async function configFilepath(ctx: Context): Promise<string> {\n const configFn = configName();\n // We used to allow src/convex.json, but no longer (as of 10/7/2022).\n // Leave an error message around to help people out. We can remove this\n // error message after a couple months.\n const preferredLocation = configFn;\n const wrongLocation = path.join(\"src\", configFn);\n\n // Allow either location, but not both.\n const preferredLocationExists = ctx.fs.exists(preferredLocation);\n const wrongLocationExists = ctx.fs.exists(wrongLocation);\n if (preferredLocationExists && wrongLocationExists) {\n const message = `${chalkStderr.red(`Error: both ${preferredLocation} and ${wrongLocation} files exist!`)}\\nConsolidate these and remove ${wrongLocation}.`;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: message,\n });\n }\n if (!preferredLocationExists && wrongLocationExists) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: `Error: Please move ${wrongLocation} to the root of your project`,\n });\n }\n\n return preferredLocation;\n}\n\nexport async function getFunctionsDirectoryPath(ctx: Context): Promise<string> {\n const { projectConfig, configPath } = await readProjectConfig(ctx);\n return functionsDir(configPath, projectConfig);\n}\n\n/** Read configuration from a local `convex.json` file. */\nexport async function readProjectConfig(ctx: Context): Promise<{\n projectConfig: ProjectConfig;\n configPath: string;\n}> {\n if (!ctx.fs.exists(\"convex.json\")) {\n // create-react-app bans imports from outside of src, so we can just\n // put the functions directory inside of src/ to work around this issue.\n const packages = await loadPackageJson(ctx);\n const isCreateReactApp = \"react-scripts\" in packages;\n return {\n projectConfig: {\n functions: isCreateReactApp\n ? `src/${DEFAULT_FUNCTIONS_PATH}`\n : DEFAULT_FUNCTIONS_PATH,\n node: {\n externalPackages: [],\n },\n generateCommonJSApi: false,\n codegen: {\n staticApi: false,\n staticDataModel: false,\n },\n aiFiles: {\n disableStalenessMessage: false,\n },\n },\n configPath: configName(),\n };\n }\n let projectConfig;\n const configPath = await configFilepath(ctx);\n try {\n projectConfig = await parseProjectConfig(\n ctx,\n JSON.parse(ctx.fs.readUtf8File(configPath)),\n );\n } catch (err) {\n if (err instanceof ParseError || err instanceof SyntaxError) {\n logError(chalkStderr.red(`Error: Parsing \"${configPath}\" failed`));\n logMessage(chalkStderr.gray(err.toString()));\n } else {\n logFailure(\n `Error: Unable to read project config file \"${configPath}\"\\n` +\n \" Are you running this command from the root directory of a Convex project? If so, run `npx convex dev` first.\",\n );\n if (err instanceof Error) {\n logError(chalkStderr.red(err.message));\n }\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n errForSentry: err,\n // TODO -- move the logging above in here\n printedMessage: null,\n });\n }\n return {\n projectConfig,\n configPath,\n };\n}\n\n/**\n * Given a {@link ProjectConfig}, add in the bundled modules to produce the\n * complete config.\n */\nexport async function configFromProjectConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n configPath: string,\n verbose: boolean,\n): Promise<{\n config: Config;\n bundledModuleInfos: BundledModuleInfo[];\n}> {\n const baseDir = functionsDir(configPath, projectConfig);\n // We bundle Node.js and Convex JS runtime functions entry points separately\n // since they execute on different platforms.\n const entryPoints = await entryPointsByEnvironment(ctx, baseDir);\n // es-build prints errors to console which would clobber our spinner.\n if (verbose) {\n showSpinner(\"Bundling modules for Convex's runtime...\");\n }\n const convexResult = await bundle({\n ctx,\n dir: baseDir,\n entryPoints: entryPoints.isolate,\n generateSourceMaps: true,\n platform: \"browser\",\n });\n if (verbose) {\n logMessage(\n \"Convex's runtime modules: \",\n convexResult.modules.map((m) => m.path),\n );\n }\n\n // Bundle node modules.\n if (verbose && entryPoints.node.length !== 0) {\n showSpinner(\"Bundling modules for Node.js runtime...\");\n }\n const nodeResult = await bundle({\n ctx,\n dir: baseDir,\n entryPoints: entryPoints.node,\n generateSourceMaps: true,\n platform: \"node\",\n chunksFolder: path.join(\"_deps\", \"node\"),\n externalPackagesAllowList: projectConfig.node.externalPackages,\n });\n if (verbose && entryPoints.node.length !== 0) {\n logMessage(\n \"Node.js runtime modules: \",\n nodeResult.modules.map((m) => m.path),\n );\n if (projectConfig.node.externalPackages.length > 0) {\n logMessage(\n \"Node.js runtime external dependencies (to be installed on the server): \",\n [...nodeResult.externalDependencies.entries()].map(\n (a) => `${a[0]}: ${a[1]}`,\n ),\n );\n }\n }\n const modules = convexResult.modules;\n modules.push(...nodeResult.modules);\n modules.push(...(await bundleAuthConfig(ctx, baseDir)));\n\n const nodeDependencies: NodeDependency[] = [];\n for (const [moduleName, moduleVersion] of nodeResult.externalDependencies) {\n nodeDependencies.push({ name: moduleName, version: moduleVersion });\n }\n\n const bundledModuleInfos: BundledModuleInfo[] = Array.from(\n convexResult.bundledModuleNames.keys(),\n ).map((moduleName) => {\n return {\n name: moduleName,\n platform: \"convex\",\n };\n });\n bundledModuleInfos.push(\n ...Array.from(nodeResult.bundledModuleNames.keys()).map(\n (moduleName): BundledModuleInfo => {\n return {\n name: moduleName,\n platform: \"node\",\n };\n },\n ),\n );\n\n return {\n config: {\n projectConfig: projectConfig,\n modules: modules,\n nodeDependencies: nodeDependencies,\n // We're just using the version this CLI is running with for now.\n // This could be different than the version of `convex` the app runs with\n // if the CLI is installed globally.\n udfServerVersion: version,\n nodeVersion: projectConfig.node.nodeVersion,\n },\n bundledModuleInfos,\n };\n}\n\n/**\n * Bundle modules one by one for good bundler errors.\n */\nexport async function debugIsolateEndpointBundles(\n ctx: Context,\n projectConfig: ProjectConfig,\n configPath: string,\n): Promise<void> {\n const baseDir = functionsDir(configPath, projectConfig);\n const entryPoints = await entryPointsByEnvironment(ctx, baseDir);\n if (entryPoints.isolate.length === 0) {\n logFinishedStep(\"No non-'use node' modules found.\");\n }\n await debugIsolateBundlesSerially(ctx, {\n entryPoints: entryPoints.isolate,\n extraConditions: [],\n dir: baseDir,\n });\n}\n\n/**\n * Read the config from `convex.json` and bundle all the modules.\n */\nexport async function readConfig(\n ctx: Context,\n verbose: boolean,\n): Promise<{\n config: Config;\n configPath: string;\n bundledModuleInfos: BundledModuleInfo[];\n}> {\n const { projectConfig, configPath } = await readProjectConfig(ctx);\n const { config, bundledModuleInfos } = await configFromProjectConfig(\n ctx,\n projectConfig,\n configPath,\n verbose,\n );\n return { config, configPath, bundledModuleInfos };\n}\n\n/**\n * Ensure the functions directory exists.\n *\n * Note: This function no longer writes to or deletes `convex.json`. The config\n * file is now treated as user-owned and is not modified by the CLI. This allows\n * users to maintain their preferred formatting and any comments they may add\n * (if we later support JSONC parsing).\n */\nexport async function writeProjectConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n) {\n const configPath = await configFilepath(ctx);\n ctx.fs.mkdir(functionsDir(configPath, projectConfig), {\n allowExisting: true,\n });\n}\n\nexport function removedExistingConfig(\n ctx: Context,\n configPath: string,\n options: { allowExistingConfig?: boolean },\n) {\n if (!options.allowExistingConfig) {\n return false;\n }\n recursivelyDelete(ctx, configPath);\n logFinishedStep(`Removed existing ${configPath}`);\n return true;\n}\n\n/** Pull configuration for the root app component from the given remote origin. */\nexport async function pullConfig(\n ctx: Context,\n project: string | undefined,\n team: string | undefined,\n origin: string,\n adminKey: string,\n): Promise<ConfigWithModuleHashes> {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: origin,\n adminKey,\n });\n\n changeSpinner(\"Downloading current deployment state...\");\n try {\n const res = await fetch(\"/api/get_config_hashes\", {\n method: \"POST\",\n body: JSON.stringify({ version, adminKey }),\n });\n deprecationCheckWarning(ctx, res);\n const data = await res.json();\n const backendConfig = parseBackendConfig(data.config);\n const projectConfig = {\n ...backendConfig,\n node: {\n // This field is not stored in the backend, which is ok since it is also\n // not used to diff configs.\n externalPackages: [],\n nodeVersion: data.nodeVersion,\n },\n // This field is not stored in the backend, it only affects the client.\n generateCommonJSApi: false,\n // This field is also not stored in the backend, it only affects the client.\n codegen: {\n staticApi: false,\n staticDataModel: false,\n },\n project,\n team,\n prodUrl: origin,\n };\n return {\n projectConfig,\n moduleHashes: data.moduleHashes,\n // TODO(presley): Add this to diffConfig().\n nodeDependencies: data.nodeDependencies,\n udfServerVersion: data.udfServerVersion,\n };\n } catch (err: unknown) {\n logFailure(`Error: Unable to pull deployment config from ${origin}`);\n return await logAndHandleFetchError(ctx, err);\n }\n}\n\ninterface BundledModuleInfo {\n name: string;\n platform: \"node\" | \"convex\";\n}\n\n/**\n * A component definition spec contains enough information to create bundles\n * of code that must be analyzed in order to construct a ComponentDefinition.\n *\n * Most paths are relative to the directory of the definitionPath.\n */\nexport type ComponentDefinitionSpec = {\n /** This path is relative to the app (root component) directory. */\n definitionPath: ComponentDefinitionPath;\n\n /** Dependencies are paths to the directory of the dependency component definition from the app (root component) directory */\n dependencies: ComponentDefinitionPath[];\n\n // All other paths are relative to the directory of the definitionPath above.\n definition: Bundle;\n schema: Bundle;\n functions: Bundle[];\n};\n\nexport type AppDefinitionSpec = Omit<\n ComponentDefinitionSpec,\n \"definitionPath\"\n> & {\n // Only app (root) component specs contain an auth bundle.\n auth: Bundle | null;\n};\n\nexport type ComponentDefinitionSpecWithoutImpls = Omit<\n ComponentDefinitionSpec,\n \"schema\" | \"functions\"\n>;\nexport type AppDefinitionSpecWithoutImpls = Omit<\n AppDefinitionSpec,\n \"schema\" | \"functions\" | \"auth\"\n>;\n\n/** Generate a human-readable diff between the two configs. */\nexport function diffConfig(\n oldConfig: ConfigWithModuleHashes,\n newConfig: Config,\n): { diffString: string } {\n let diff = \"\";\n\n let versionMessage = \"\";\n const matches = oldConfig.udfServerVersion === newConfig.udfServerVersion;\n if (oldConfig.udfServerVersion && (!newConfig.udfServerVersion || !matches)) {\n versionMessage += `[-] ${oldConfig.udfServerVersion}\\n`;\n }\n if (newConfig.udfServerVersion && (!oldConfig.udfServerVersion || !matches)) {\n versionMessage += `[+] ${newConfig.udfServerVersion}\\n`;\n }\n if (versionMessage) {\n diff += \"Change the server's function version:\\n\";\n diff += versionMessage;\n }\n\n if (oldConfig.projectConfig.node.nodeVersion !== newConfig.nodeVersion) {\n diff += \"Change the server's version for Node.js actions:\\n\";\n if (oldConfig.projectConfig.node.nodeVersion) {\n diff += `[-] ${oldConfig.projectConfig.node.nodeVersion}\\n`;\n }\n if (newConfig.nodeVersion) {\n diff += `[+] ${newConfig.nodeVersion}\\n`;\n }\n }\n\n return { diffString: diff };\n}\n\n/** Handle an error from\n * legacy push path:\n * - /api/push_config\n * modern push paths:\n * - /api/deploy2/evaluate_push\n * - /api/deploy2/start_push\n * - /api/deploy2/finish_push\n *\n * finish_push errors are different from start_push errors and in theory could\n * be handled differently, but starting over works for all of them.\n */\nexport async function handlePushConfigError(\n ctx: Context,\n error: unknown,\n defaultMessage: string,\n deploymentName: string | null,\n deployment:\n | {\n deploymentUrl: string;\n adminKey: string;\n deploymentNotice: string;\n }\n | undefined,\n _deploymentType: DeploymentType | undefined,\n): Promise<never> {\n const data: ErrorData | undefined =\n error instanceof ThrowingFetchError ? error.serverErrorData : undefined;\n if (data?.code === \"AuthConfigMissingEnvironmentVariable\") {\n const errorMessage = data.message || \"(no error message given)\";\n const [, variableName] =\n errorMessage.match(/Environment variable (\\S+)/i) ?? [];\n\n // DEPRECATED: This error path provisioning is being phased out in favor of\n // pre-flight provisioning that happens before the client bundle build.\n // We keep minimal logic here for backwards compatibility with older templates\n // that may still rely on this path.\n if (variableName === \"WORKOS_CLIENT_ID\" && deploymentName && deployment) {\n // For backwards compatibility with templates that haven't been updated,\n // we'll still show a helpful error message directing users to configure WorkOS.\n // But we no longer do automatic provisioning here since it happens too late\n // (after the client bundle has already been built with missing env vars).\n logWarning(\n \"WORKOS_CLIENT_ID is not set; you can set it manually on the deployment or for hosted Convex deployments, use auto-provisioning.\",\n );\n logMessage(\n \"Learn more at https://docs.convex.dev/auth/authkit/auto-provision\",\n );\n logMessage(\"\");\n }\n\n const envVarMessage =\n `Environment variable ${chalkStderr.bold(\n variableName,\n )} is used in auth config file but ` + `its value was not set.`;\n let setEnvVarInstructions =\n \"Go set it in the dashboard or using `npx convex env set`\";\n\n // If `npx convex dev` is running using --url there might not be a configured deployment\n if (deploymentName !== null) {\n const variableQuery =\n variableName !== undefined ? `?var=${variableName}` : \"\";\n const dashboardUrl = deploymentDashboardUrlPage(\n deploymentName,\n `/settings/environment-variables${variableQuery}`,\n );\n setEnvVarInstructions = `Go to:\\n\\n ${chalkStderr.bold(\n dashboardUrl,\n )}\\n\\n to set it up. `;\n }\n await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem or env vars\",\n errForSentry: error,\n printedMessage: envVarMessage + \"\\n\" + setEnvVarInstructions,\n });\n }\n\n if (data?.code === \"RaceDetected\") {\n // Environment variables or schema changed during push. This is a transient\n // error that should be retried immediately with exponential backoff.\n const message =\n data.message || \"Schema or environment variables changed during push\";\n return await ctx.crash({\n exitCode: 1,\n errorType: \"transient\",\n errForSentry: error,\n printedMessage: chalkStderr.yellow(message),\n });\n }\n\n if (data?.code === \"InternalServerError\") {\n if (deploymentName?.startsWith(\"local-\")) {\n printLocalDeploymentOnError();\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: new LocalDeploymentError(\n \"InternalServerError while pushing to local deployment\",\n ),\n printedMessage: defaultMessage,\n });\n }\n }\n\n logFailure(defaultMessage);\n return await logAndHandleFetchError(ctx, error);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport path from \"path\";\nimport { z } from \"zod\";\nimport { Context } from \"../../bundler/context.js\";\nimport { TypescriptCompiler } from \"./typecheck.js\";\nimport {\n changeSpinner,\n logError,\n logFailure,\n logFinishedStep,\n logMessage,\n logWarning,\n showSpinner,\n} from \"../../bundler/log.js\";\nimport {\n Bundle,\n BundleHash,\n bundle,\n bundleAuthConfig,\n entryPointsByEnvironment,\n} from \"../../bundler/index.js\";\nimport { version } from \"../version.js\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport {\n functionsDir,\n ErrorData,\n loadPackageJson,\n deploymentFetch,\n deprecationCheckWarning,\n logAndHandleFetchError,\n ThrowingFetchError,\n currentPackageHomepage,\n} from \"./utils/utils.js\";\nimport { recursivelyDelete } from \"./fsUtils.js\";\nimport { NodeDependency } from \"./deployApi/modules.js\";\nimport { ComponentDefinitionPath } from \"./components/definition/directoryStructure.js\";\nimport {\n LocalDeploymentError,\n printLocalDeploymentOnError,\n} from \"./localDeployment/errors.js\";\nimport { debugIsolateBundlesSerially } from \"../../bundler/debugBundle.js\";\nimport { DeploymentType } from \"./api.js\";\nexport { productionProvisionHost, provisionHost } from \"./utils/utils.js\";\n\n/** Type representing WorkOS AuthKit integration configuration. */\nexport interface AuthKitConfigureSettings {\n redirectUris?: string[];\n appHomepageUrl?: string;\n corsOrigins?: string[];\n}\n\nexport interface AuthKitEnvironmentConfig {\n environmentType?: \"development\" | \"staging\" | \"production\";\n configure?: false | AuthKitConfigureSettings;\n localEnvVars?: false | Record<string, string>;\n}\n\nexport interface AuthKitConfig {\n dev?: AuthKitEnvironmentConfig;\n preview?: AuthKitEnvironmentConfig;\n prod?: AuthKitEnvironmentConfig;\n}\n/**\n * convex.json file parsing notes\n *\n * - Unknown fields at the top level and in node and codegen are preserved\n * so that older CLI versions can deploy new projects (this functionality\n * will be removed in the future).\n * - convex.json does not allow comments, but this could change in the future.\n * Previously it contained automatically set values like productionUrl\n * but it's more like a config file now.\n */\n\n/** Type representing Convex project configuration. */\nexport interface ProjectConfig {\n // \u26A0\uFE0F When updating this, please also update the file used by IDEs for autocompletion and validation:\n // -> npm-packages/convex/schemas/convex.schema.json\n\n functions: string;\n node: {\n externalPackages: string[];\n // nodeVersion has no default value, its presence/absence is meaningful\n nodeVersion?: string | undefined;\n };\n generateCommonJSApi: boolean;\n\n codegen: {\n staticApi: boolean;\n staticDataModel: boolean;\n legacyComponentApi?: boolean;\n fileType?: \"ts\" | \"js/dts\";\n };\n\n bundler?: {\n includeSourcesContent?: boolean;\n };\n\n typescriptCompiler?: TypescriptCompiler;\n\n // WorkOS AuthKit integration configuration\n authKit?: AuthKitConfig | undefined;\n\n // Convex AI files user preferences.\n aiFiles?: {\n // When false, disables all AI files prompts and staleness messages.\n enabled?: boolean;\n // @deprecated use `enabled` instead.\n disableStalenessMessage?: boolean;\n };\n}\n\nexport interface Config {\n projectConfig: ProjectConfig;\n modules: Bundle[];\n nodeDependencies: NodeDependency[];\n schemaId?: string;\n udfServerVersion?: string;\n nodeVersion?: string | undefined;\n}\n\nexport interface ConfigWithModuleHashes {\n projectConfig: ProjectConfig;\n moduleHashes: BundleHash[];\n nodeDependencies: NodeDependency[];\n schemaId?: string;\n udfServerVersion?: string;\n}\n\nconst DEFAULT_FUNCTIONS_PATH = \"convex/\";\n\n/** Whether .ts file extensions should be used for generated code (default is false). */\nexport function usesTypeScriptCodegen(projectConfig: ProjectConfig): boolean {\n return projectConfig.codegen.fileType === \"ts\";\n}\n\n/** Whether the new component API import style should be used (default is false) */\nexport function usesComponentApiImports(projectConfig: ProjectConfig): boolean {\n return projectConfig.codegen.legacyComponentApi === false;\n}\n\n/**\n * Get the authKit configuration from convex.json.\n */\nexport async function getAuthKitConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n): Promise<AuthKitConfig | undefined> {\n // If there's an explicit authKit config, use it\n if (\"authKit\" in projectConfig) {\n return projectConfig.authKit;\n }\n\n // TODO remove this after a few versions\n // Migration help: is this one of the hardcoded templates that has special\n // behavior without a convex.json? Encourage them to upgrade the template.\n const homepage = await currentPackageHomepage(ctx);\n const isOldWorkOSTemplate = !!(\n homepage &&\n [\n \"https://github.com/workos/template-convex-nextjs-authkit/#readme\",\n \"https://github.com/workos/template-convex-react-vite-authkit/#readme\",\n \"https://github.com:workos/template-convex-react-vite-authkit/#readme\",\n \"https://github.com/workos/template-convex-tanstack-start-authkit/#readme\",\n ].includes(homepage)\n );\n\n if (isOldWorkOSTemplate) {\n logWarning(\n \"The template this project is based on has been updated to work with this version of Convex.\",\n );\n logWarning(\n \"Please copy the convex.json from the latest template version or add an 'authKit' section.\",\n );\n logMessage(\"Learn more at https://docs.convex.dev/auth/authkit\");\n }\n}\n\nexport async function getAuthKitEnvironmentConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n deploymentType: \"dev\" | \"preview\" | \"prod\",\n): Promise<AuthKitEnvironmentConfig | undefined> {\n const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n return authKitConfig?.[deploymentType];\n}\n\n/** Error parsing ProjectConfig representation. */\nclass ParseError extends Error {}\n\n// WorkOS AuthKit configuration schemas\nconst AuthKitConfigureSchema = z.union([\n z.literal(false),\n z.object({\n redirectUris: z.array(z.string()).optional(),\n appHomepageUrl: z.string().optional(),\n corsOrigins: z.array(z.string()).optional(),\n }),\n]);\n\nconst AuthKitLocalEnvVarsSchema = z.union([\n z.literal(false),\n z.record(z.string()),\n]);\n\nconst AuthKitEnvironmentConfigSchema = z.object({\n environmentType: z.enum([\"development\", \"staging\", \"production\"]).optional(),\n configure: AuthKitConfigureSchema.optional(),\n localEnvVars: AuthKitLocalEnvVarsSchema.optional(),\n});\n\nconst AuthKitConfigSchema = z\n .object({\n dev: AuthKitEnvironmentConfigSchema.optional(),\n preview: AuthKitEnvironmentConfigSchema.optional(),\n prod: AuthKitEnvironmentConfigSchema.optional(),\n })\n .refine(\n (data) => {\n // Validation: environmentType only allowed in prod\n const devEnvType = data.dev?.environmentType;\n const previewEnvType = data.preview?.environmentType;\n if (devEnvType || previewEnvType) {\n return false;\n }\n return true;\n },\n {\n message: \"authKit.environmentType is only allowed in the prod section\",\n path: [\"environmentType\"],\n },\n )\n .refine(\n (data) => {\n // Validation: localEnvVars only allowed for dev\n // Check preview doesn't have localEnvVars\n if (\n data.preview?.localEnvVars !== undefined &&\n data.preview?.localEnvVars !== false\n ) {\n return false;\n }\n // Check prod doesn't have localEnvVars\n if (\n data.prod?.localEnvVars !== undefined &&\n data.prod?.localEnvVars !== false\n ) {\n return false;\n }\n return true;\n },\n {\n message:\n \"authKit.localEnvVars is only supported for dev deployments. Preview and prod deployments must configure environment variables directly in the deployment platform.\",\n path: [\"localEnvVars\"],\n },\n );\n// Separate Node and Codegen schemas so we can parse these loose or strict\nconst NodeSchema = z.object({\n externalPackages: z\n .array(z.string())\n .default([])\n .describe(\n \"list of npm packages to install at deploy time instead of bundling. Packages with binaries should be added here.\",\n ),\n nodeVersion: z\n .string()\n .optional()\n .describe(\"The Node.js version to use for Node.js functions\"),\n});\n\nconst CodegenSchema = z.object({\n staticApi: z\n .boolean()\n .default(false)\n .describe(\n \"Use Convex function argument validators and return value validators to generate a typed API object\",\n ),\n staticDataModel: z.boolean().default(false),\n // These optional fields have no defaults - their presence/absence is meaningful\n legacyComponentApi: z.boolean().optional(),\n fileType: z.enum([\"ts\", \"js/dts\"]).optional(),\n});\n\nconst BundlerSchema = z.object({\n includeSourcesContent: z\n .boolean()\n .default(false)\n .describe(\n \"Whether to include original source code in source maps. Set to false to reduce bundle size.\",\n ),\n});\n\nconst AiFilesSchema = z.object({\n enabled: z.boolean().optional(),\n disableStalenessMessage: z.boolean().optional(),\n});\n\nconst refineToObject = <T extends z.ZodTypeAny>(schema: T) =>\n schema.refine((val) => val !== null && !Array.isArray(val), {\n message: \"Expected `convex.json` to contain an object\",\n });\n\n// Factory function to create schema with strict or passthrough behavior\nconst createProjectConfigSchema = (strict: boolean) => {\n const nodeSchema = strict ? NodeSchema.strict() : NodeSchema.passthrough();\n const codegenSchema = strict\n ? CodegenSchema.strict()\n : CodegenSchema.passthrough();\n const bundlerSchema = strict\n ? BundlerSchema.strict()\n : BundlerSchema.passthrough();\n\n const baseObject = z.object({\n functions: z\n .string()\n .default(DEFAULT_FUNCTIONS_PATH)\n .describe(\"Relative file path to the convex directory\"),\n node: nodeSchema.default({ externalPackages: [] }),\n codegen: codegenSchema.default({\n staticApi: false,\n staticDataModel: false,\n }),\n bundler: bundlerSchema.default({ includeSourcesContent: false }).optional(),\n generateCommonJSApi: z.boolean().default(false),\n typescriptCompiler: z\n .enum([\"tsc\", \"tsgo\"])\n .optional()\n .describe(\n \"TypeScript compiler to use for typechecking (`@typescript/native-preview` must be installed to use `tsgo`)\",\n ),\n\n // Optional $schema field for JSON schema validation in editors\n $schema: z.string().optional(),\n // WorkOS AuthKit integration configuration\n authKit: AuthKitConfigSchema.optional(),\n aiFiles: AiFilesSchema.optional(),\n\n // Deprecated fields that have been deprecated for years, only here so we\n // know it's safe to delete them.\n project: z.string().optional(),\n team: z.string().optional(),\n prodUrl: z.string().optional(),\n });\n\n // Apply strict or passthrough BEFORE refine\n const withStrictness = strict\n ? baseObject.strict()\n : baseObject.passthrough();\n\n // Now apply the refinement\n return withStrictness.refine(\n (data) => {\n // Validate that generateCommonJSApi is not true when using TypeScript codegen\n if (data.generateCommonJSApi && data.codegen.fileType === \"ts\") {\n return false;\n }\n return true;\n },\n {\n message:\n 'Cannot use `generateCommonJSApi: true` with `codegen.fileType: \"ts\"`. ' +\n \"CommonJS modules require JavaScript generation. \" +\n 'Either set `codegen.fileType: \"js/dts\"` or remove `generateCommonJSApi`.',\n path: [\"generateCommonJSApi\"],\n },\n );\n};\n\n// Parse allowing extra fields (for forward compatibility)\nconst ProjectConfigSchema = refineToObject(createProjectConfigSchema(false));\n\n// Strict schema warn about extra keys\nconst ProjectConfigSchemaStrict = refineToObject(\n createProjectConfigSchema(true),\n);\n\nconst warnedUnknownKeys = new Set<string>();\nexport function resetUnknownKeyWarnings() {\n warnedUnknownKeys.clear();\n}\n\n/** Parse object to ProjectConfig. */\nexport async function parseProjectConfig(\n ctx: Context,\n obj: any,\n): Promise<ProjectConfig> {\n if (typeof obj !== \"object\" || obj === null || Array.isArray(obj)) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: \"Expected `convex.json` to contain an object\",\n });\n }\n\n try {\n // Try strict parse first to detect unknown keys\n return ProjectConfigSchemaStrict.parse(obj);\n } catch (error) {\n if (error instanceof z.ZodError) {\n // Check if all issues are unrecognized_keys issues\n const unknownKeyIssues = error.issues.filter(\n (issue) => issue.code === \"unrecognized_keys\",\n );\n\n if (\n unknownKeyIssues.length > 0 &&\n unknownKeyIssues.length === error.issues.length\n ) {\n // All errors are just unknown keys - warn about them\n for (const issue of unknownKeyIssues) {\n if (issue.code === \"unrecognized_keys\") {\n const pathPrefix =\n issue.path.length > 0 ? issue.path.join(\".\") + \".\" : \"\";\n const unknownKeys = issue.keys as string[];\n const newUnknownKeys = unknownKeys.filter(\n (key) => !warnedUnknownKeys.has(pathPrefix + key),\n );\n\n if (newUnknownKeys.length > 0) {\n const fullPath =\n issue.path.length > 0\n ? `\\`${issue.path.join(\".\")}\\``\n : \"`convex.json`\";\n logMessage(\n chalkStderr.yellow(\n `Warning: Unknown ${newUnknownKeys.length === 1 ? \"property\" : \"properties\"} in ${fullPath}: ${newUnknownKeys.map((k) => `\\`${k}\\``).join(\", \")}`,\n ),\n );\n logMessage(\n chalkStderr.gray(\n \" These properties will be preserved but are not recognized by this version of Convex.\",\n ),\n );\n\n // Track that we've warned about these keys\n newUnknownKeys.forEach((key) =>\n warnedUnknownKeys.add(pathPrefix + key),\n );\n }\n }\n }\n // Re-parse with passthrough schema to preserve unknown keys\n return ProjectConfigSchema.parse(obj);\n }\n\n // Handle validation errors we won't ignore\n if (error instanceof z.ZodError) {\n const issue = error.issues[0];\n const pathStr = issue.path.join(\".\");\n const message = pathStr\n ? `\\`${pathStr}\\` in \\`convex.json\\`: ${issue.message}`\n : `\\`convex.json\\`: ${issue.message}`;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: message,\n });\n }\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: (error as any).toString(),\n });\n }\n}\n\n// Parse a deployment config returned by the backend, picking out\n// the fields we care about.\nfunction parseBackendConfig(obj: any): {\n functions: string;\n nodeVersion?: string;\n} {\n function throwParseError(message: string) {\n // Unexpected error\n // eslint-disable-next-line no-restricted-syntax\n throw new ParseError(message);\n }\n if (typeof obj !== \"object\") {\n throwParseError(\"Expected an object\");\n }\n const { functions, nodeVersion } = obj;\n if (typeof functions !== \"string\") {\n throwParseError(\"Expected functions to be a string\");\n }\n\n if (typeof nodeVersion !== \"undefined\" && typeof nodeVersion !== \"string\") {\n throwParseError(\"Expected nodeVersion to be a string\");\n }\n\n return {\n functions,\n ...((nodeVersion ?? null) !== null ? { nodeVersion: nodeVersion } : {}),\n };\n}\n\nexport function configName(): string {\n return \"convex.json\";\n}\n\nexport async function configFilepath(ctx: Context): Promise<string> {\n const configFn = configName();\n // We used to allow src/convex.json, but no longer (as of 10/7/2022).\n // Leave an error message around to help people out. We can remove this\n // error message after a couple months.\n const preferredLocation = configFn;\n const wrongLocation = path.join(\"src\", configFn);\n\n // Allow either location, but not both.\n const preferredLocationExists = ctx.fs.exists(preferredLocation);\n const wrongLocationExists = ctx.fs.exists(wrongLocation);\n if (preferredLocationExists && wrongLocationExists) {\n const message = `${chalkStderr.red(`Error: both ${preferredLocation} and ${wrongLocation} files exist!`)}\\nConsolidate these and remove ${wrongLocation}.`;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: message,\n });\n }\n if (!preferredLocationExists && wrongLocationExists) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: `Error: Please move ${wrongLocation} to the root of your project`,\n });\n }\n\n return preferredLocation;\n}\n\nexport async function getFunctionsDirectoryPath(ctx: Context): Promise<string> {\n const { projectConfig, configPath } = await readProjectConfig(ctx);\n return functionsDir(configPath, projectConfig);\n}\n\n/** Read configuration from a local `convex.json` file. */\nexport async function readProjectConfig(ctx: Context): Promise<{\n projectConfig: ProjectConfig;\n configPath: string;\n}> {\n if (!ctx.fs.exists(\"convex.json\")) {\n // create-react-app bans imports from outside of src, so we can just\n // put the functions directory inside of src/ to work around this issue.\n const packages = await loadPackageJson(ctx);\n const isCreateReactApp = \"react-scripts\" in packages;\n return {\n projectConfig: {\n functions: isCreateReactApp\n ? `src/${DEFAULT_FUNCTIONS_PATH}`\n : DEFAULT_FUNCTIONS_PATH,\n node: {\n externalPackages: [],\n },\n generateCommonJSApi: false,\n codegen: {\n staticApi: false,\n staticDataModel: false,\n },\n aiFiles: {},\n },\n configPath: configName(),\n };\n }\n let projectConfig;\n const configPath = await configFilepath(ctx);\n try {\n projectConfig = await parseProjectConfig(\n ctx,\n JSON.parse(ctx.fs.readUtf8File(configPath)),\n );\n } catch (err) {\n if (err instanceof ParseError || err instanceof SyntaxError) {\n logError(chalkStderr.red(`Error: Parsing \"${configPath}\" failed`));\n logMessage(chalkStderr.gray(err.toString()));\n } else {\n logFailure(\n `Error: Unable to read project config file \"${configPath}\"\\n` +\n \" Are you running this command from the root directory of a Convex project? If so, run `npx convex dev` first.\",\n );\n if (err instanceof Error) {\n logError(chalkStderr.red(err.message));\n }\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n errForSentry: err,\n // TODO -- move the logging above in here\n printedMessage: null,\n });\n }\n return {\n projectConfig,\n configPath,\n };\n}\n\n/**\n * Given a {@link ProjectConfig}, add in the bundled modules to produce the\n * complete config.\n */\nexport async function configFromProjectConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n configPath: string,\n verbose: boolean,\n): Promise<{\n config: Config;\n bundledModuleInfos: BundledModuleInfo[];\n}> {\n const baseDir = functionsDir(configPath, projectConfig);\n // We bundle Node.js and Convex JS runtime functions entry points separately\n // since they execute on different platforms.\n const entryPoints = await entryPointsByEnvironment(ctx, baseDir);\n // es-build prints errors to console which would clobber our spinner.\n if (verbose) {\n showSpinner(\"Bundling modules for Convex's runtime...\");\n }\n const convexResult = await bundle({\n ctx,\n dir: baseDir,\n entryPoints: entryPoints.isolate,\n generateSourceMaps: true,\n platform: \"browser\",\n });\n if (verbose) {\n logMessage(\n \"Convex's runtime modules: \",\n convexResult.modules.map((m) => m.path),\n );\n }\n\n // Bundle node modules.\n if (verbose && entryPoints.node.length !== 0) {\n showSpinner(\"Bundling modules for Node.js runtime...\");\n }\n const nodeResult = await bundle({\n ctx,\n dir: baseDir,\n entryPoints: entryPoints.node,\n generateSourceMaps: true,\n platform: \"node\",\n chunksFolder: path.join(\"_deps\", \"node\"),\n externalPackagesAllowList: projectConfig.node.externalPackages,\n });\n if (verbose && entryPoints.node.length !== 0) {\n logMessage(\n \"Node.js runtime modules: \",\n nodeResult.modules.map((m) => m.path),\n );\n if (projectConfig.node.externalPackages.length > 0) {\n logMessage(\n \"Node.js runtime external dependencies (to be installed on the server): \",\n [...nodeResult.externalDependencies.entries()].map(\n (a) => `${a[0]}: ${a[1]}`,\n ),\n );\n }\n }\n const modules = convexResult.modules;\n modules.push(...nodeResult.modules);\n modules.push(...(await bundleAuthConfig(ctx, baseDir)));\n\n const nodeDependencies: NodeDependency[] = [];\n for (const [moduleName, moduleVersion] of nodeResult.externalDependencies) {\n nodeDependencies.push({ name: moduleName, version: moduleVersion });\n }\n\n const bundledModuleInfos: BundledModuleInfo[] = Array.from(\n convexResult.bundledModuleNames.keys(),\n ).map((moduleName) => {\n return {\n name: moduleName,\n platform: \"convex\",\n };\n });\n bundledModuleInfos.push(\n ...Array.from(nodeResult.bundledModuleNames.keys()).map(\n (moduleName): BundledModuleInfo => {\n return {\n name: moduleName,\n platform: \"node\",\n };\n },\n ),\n );\n\n return {\n config: {\n projectConfig: projectConfig,\n modules: modules,\n nodeDependencies: nodeDependencies,\n // We're just using the version this CLI is running with for now.\n // This could be different than the version of `convex` the app runs with\n // if the CLI is installed globally.\n udfServerVersion: version,\n nodeVersion: projectConfig.node.nodeVersion,\n },\n bundledModuleInfos,\n };\n}\n\n/**\n * Bundle modules one by one for good bundler errors.\n */\nexport async function debugIsolateEndpointBundles(\n ctx: Context,\n projectConfig: ProjectConfig,\n configPath: string,\n): Promise<void> {\n const baseDir = functionsDir(configPath, projectConfig);\n const entryPoints = await entryPointsByEnvironment(ctx, baseDir);\n if (entryPoints.isolate.length === 0) {\n logFinishedStep(\"No non-'use node' modules found.\");\n }\n await debugIsolateBundlesSerially(ctx, {\n entryPoints: entryPoints.isolate,\n extraConditions: [],\n dir: baseDir,\n });\n}\n\n/**\n * Read the config from `convex.json` and bundle all the modules.\n */\nexport async function readConfig(\n ctx: Context,\n verbose: boolean,\n): Promise<{\n config: Config;\n configPath: string;\n bundledModuleInfos: BundledModuleInfo[];\n}> {\n const { projectConfig, configPath } = await readProjectConfig(ctx);\n const { config, bundledModuleInfos } = await configFromProjectConfig(\n ctx,\n projectConfig,\n configPath,\n verbose,\n );\n return { config, configPath, bundledModuleInfos };\n}\n\n/**\n * Ensure the functions directory exists.\n *\n * Note: This function no longer writes to or deletes `convex.json`. The config\n * file is now treated as user-owned and is not modified by the CLI. This allows\n * users to maintain their preferred formatting and any comments they may add\n * (if we later support JSONC parsing).\n */\nexport async function writeProjectConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n) {\n const configPath = await configFilepath(ctx);\n ctx.fs.mkdir(functionsDir(configPath, projectConfig), {\n allowExisting: true,\n });\n}\n\nexport function removedExistingConfig(\n ctx: Context,\n configPath: string,\n options: { allowExistingConfig?: boolean },\n) {\n if (!options.allowExistingConfig) {\n return false;\n }\n recursivelyDelete(ctx, configPath);\n logFinishedStep(`Removed existing ${configPath}`);\n return true;\n}\n\n/** Pull configuration for the root app component from the given remote origin. */\nexport async function pullConfig(\n ctx: Context,\n project: string | undefined,\n team: string | undefined,\n origin: string,\n adminKey: string,\n): Promise<ConfigWithModuleHashes> {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: origin,\n adminKey,\n });\n\n changeSpinner(\"Downloading current deployment state...\");\n try {\n const res = await fetch(\"/api/get_config_hashes\", {\n method: \"POST\",\n body: JSON.stringify({ version, adminKey }),\n });\n deprecationCheckWarning(ctx, res);\n const data = await res.json();\n const backendConfig = parseBackendConfig(data.config);\n const projectConfig = {\n ...backendConfig,\n node: {\n // This field is not stored in the backend, which is ok since it is also\n // not used to diff configs.\n externalPackages: [],\n nodeVersion: data.nodeVersion,\n },\n // This field is not stored in the backend, it only affects the client.\n generateCommonJSApi: false,\n // This field is also not stored in the backend, it only affects the client.\n codegen: {\n staticApi: false,\n staticDataModel: false,\n },\n project,\n team,\n prodUrl: origin,\n };\n return {\n projectConfig,\n moduleHashes: data.moduleHashes,\n // TODO(presley): Add this to diffConfig().\n nodeDependencies: data.nodeDependencies,\n udfServerVersion: data.udfServerVersion,\n };\n } catch (err: unknown) {\n logFailure(`Error: Unable to pull deployment config from ${origin}`);\n return await logAndHandleFetchError(ctx, err);\n }\n}\n\ninterface BundledModuleInfo {\n name: string;\n platform: \"node\" | \"convex\";\n}\n\n/**\n * A component definition spec contains enough information to create bundles\n * of code that must be analyzed in order to construct a ComponentDefinition.\n *\n * Most paths are relative to the directory of the definitionPath.\n */\nexport type ComponentDefinitionSpec = {\n /** This path is relative to the app (root component) directory. */\n definitionPath: ComponentDefinitionPath;\n\n /** Dependencies are paths to the directory of the dependency component definition from the app (root component) directory */\n dependencies: ComponentDefinitionPath[];\n\n // All other paths are relative to the directory of the definitionPath above.\n definition: Bundle;\n schema: Bundle;\n functions: Bundle[];\n};\n\nexport type AppDefinitionSpec = Omit<\n ComponentDefinitionSpec,\n \"definitionPath\"\n> & {\n // Only app (root) component specs contain an auth bundle.\n auth: Bundle | null;\n};\n\nexport type ComponentDefinitionSpecWithoutImpls = Omit<\n ComponentDefinitionSpec,\n \"schema\" | \"functions\"\n>;\nexport type AppDefinitionSpecWithoutImpls = Omit<\n AppDefinitionSpec,\n \"schema\" | \"functions\" | \"auth\"\n>;\n\n/** Generate a human-readable diff between the two configs. */\nexport function diffConfig(\n oldConfig: ConfigWithModuleHashes,\n newConfig: Config,\n): { diffString: string } {\n let diff = \"\";\n\n let versionMessage = \"\";\n const matches = oldConfig.udfServerVersion === newConfig.udfServerVersion;\n if (oldConfig.udfServerVersion && (!newConfig.udfServerVersion || !matches)) {\n versionMessage += `[-] ${oldConfig.udfServerVersion}\\n`;\n }\n if (newConfig.udfServerVersion && (!oldConfig.udfServerVersion || !matches)) {\n versionMessage += `[+] ${newConfig.udfServerVersion}\\n`;\n }\n if (versionMessage) {\n diff += \"Change the server's function version:\\n\";\n diff += versionMessage;\n }\n\n if (oldConfig.projectConfig.node.nodeVersion !== newConfig.nodeVersion) {\n diff += \"Change the server's version for Node.js actions:\\n\";\n if (oldConfig.projectConfig.node.nodeVersion) {\n diff += `[-] ${oldConfig.projectConfig.node.nodeVersion}\\n`;\n }\n if (newConfig.nodeVersion) {\n diff += `[+] ${newConfig.nodeVersion}\\n`;\n }\n }\n\n return { diffString: diff };\n}\n\n/** Handle an error from\n * legacy push path:\n * - /api/push_config\n * modern push paths:\n * - /api/deploy2/evaluate_push\n * - /api/deploy2/start_push\n * - /api/deploy2/finish_push\n *\n * finish_push errors are different from start_push errors and in theory could\n * be handled differently, but starting over works for all of them.\n */\nexport async function handlePushConfigError(\n ctx: Context,\n error: unknown,\n defaultMessage: string,\n deploymentName: string | null,\n deployment:\n | {\n deploymentUrl: string;\n adminKey: string;\n deploymentNotice: string;\n }\n | undefined,\n _deploymentType: DeploymentType | undefined,\n): Promise<never> {\n const data: ErrorData | undefined =\n error instanceof ThrowingFetchError ? error.serverErrorData : undefined;\n if (data?.code === \"AuthConfigMissingEnvironmentVariable\") {\n const errorMessage = data.message || \"(no error message given)\";\n const [, variableName] =\n errorMessage.match(/Environment variable (\\S+)/i) ?? [];\n\n // DEPRECATED: This error path provisioning is being phased out in favor of\n // pre-flight provisioning that happens before the client bundle build.\n // We keep minimal logic here for backwards compatibility with older templates\n // that may still rely on this path.\n if (variableName === \"WORKOS_CLIENT_ID\" && deploymentName && deployment) {\n // For backwards compatibility with templates that haven't been updated,\n // we'll still show a helpful error message directing users to configure WorkOS.\n // But we no longer do automatic provisioning here since it happens too late\n // (after the client bundle has already been built with missing env vars).\n logWarning(\n \"WORKOS_CLIENT_ID is not set; you can set it manually on the deployment or for hosted Convex deployments, use auto-provisioning.\",\n );\n logMessage(\n \"Learn more at https://docs.convex.dev/auth/authkit/auto-provision\",\n );\n logMessage(\"\");\n }\n\n const envVarMessage =\n `Environment variable ${chalkStderr.bold(\n variableName,\n )} is used in auth config file but ` + `its value was not set.`;\n let setEnvVarInstructions =\n \"Go set it in the dashboard or using `npx convex env set`\";\n\n // If `npx convex dev` is running using --url there might not be a configured deployment\n if (deploymentName !== null) {\n const variableQuery =\n variableName !== undefined ? `?var=${variableName}` : \"\";\n const dashboardUrl = deploymentDashboardUrlPage(\n deploymentName,\n `/settings/environment-variables${variableQuery}`,\n );\n setEnvVarInstructions = `Go to:\\n\\n ${chalkStderr.bold(\n dashboardUrl,\n )}\\n\\n to set it up. `;\n }\n await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem or env vars\",\n errForSentry: error,\n printedMessage: envVarMessage + \"\\n\" + setEnvVarInstructions,\n });\n }\n\n if (data?.code === \"RaceDetected\") {\n // Environment variables or schema changed during push. This is a transient\n // error that should be retried immediately with exponential backoff.\n const message =\n data.message || \"Schema or environment variables changed during push\";\n return await ctx.crash({\n exitCode: 1,\n errorType: \"transient\",\n errForSentry: error,\n printedMessage: chalkStderr.yellow(message),\n });\n }\n\n if (data?.code === \"InternalServerError\") {\n if (deploymentName?.startsWith(\"local-\")) {\n printLocalDeploymentOnError();\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: new LocalDeploymentError(\n \"InternalServerError while pushing to local deployment\",\n ),\n printedMessage: defaultMessage,\n });\n }\n }\n\n logFailure(defaultMessage);\n return await logAndHandleFetchError(ctx, error);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -42,7 +42,7 @@ import { nodeFs } from "../../../bundler/fs.js";
|
|
|
42
42
|
import { doInitConvexFolder } from "../codegen.js";
|
|
43
43
|
import { readProjectConfig } from "../config.js";
|
|
44
44
|
import { functionsDir } from "../utils/utils.js";
|
|
45
|
-
import { maybeSetupAiFiles } from "../
|
|
45
|
+
import { maybeSetupAiFiles } from "../aiFiles/index.js";
|
|
46
46
|
export async function handleAnonymousDeployment(ctx, options) {
|
|
47
47
|
if (await isOffline()) {
|
|
48
48
|
return await ctx.crash({
|
|
@@ -150,7 +150,7 @@ export async function handleAnonymousDeployment(ctx, options) {
|
|
|
150
150
|
const { configPath, projectConfig } = await readProjectConfig(ctx);
|
|
151
151
|
const convexDir = path.resolve(functionsDir(configPath, projectConfig));
|
|
152
152
|
const projectDir = path.resolve(path.dirname(configPath));
|
|
153
|
-
await maybeSetupAiFiles(ctx, convexDir, projectDir);
|
|
153
|
+
await maybeSetupAiFiles({ ctx, convexDir, projectDir });
|
|
154
154
|
}
|
|
155
155
|
return {
|
|
156
156
|
adminKey,
|