@prisma/compute-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/README.md +118 -0
  2. package/bin/compute +4 -0
  3. package/bin/compute-bun +4 -0
  4. package/dist/cli.d.ts +4 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +28 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/deploy.d.ts +56 -0
  9. package/dist/commands/deploy.d.ts.map +1 -0
  10. package/dist/commands/deploy.js +106 -0
  11. package/dist/commands/deploy.js.map +1 -0
  12. package/dist/commands/env.d.ts +2 -0
  13. package/dist/commands/env.d.ts.map +1 -0
  14. package/dist/commands/env.js +84 -0
  15. package/dist/commands/env.js.map +1 -0
  16. package/dist/commands/helpers.d.ts +27 -0
  17. package/dist/commands/helpers.d.ts.map +1 -0
  18. package/dist/commands/helpers.js +128 -0
  19. package/dist/commands/helpers.js.map +1 -0
  20. package/dist/commands/login.d.ts +2 -0
  21. package/dist/commands/login.d.ts.map +1 -0
  22. package/dist/commands/login.js +17 -0
  23. package/dist/commands/login.js.map +1 -0
  24. package/dist/commands/logout.d.ts +2 -0
  25. package/dist/commands/logout.d.ts.map +1 -0
  26. package/dist/commands/logout.js +17 -0
  27. package/dist/commands/logout.js.map +1 -0
  28. package/dist/commands/projects.d.ts +2 -0
  29. package/dist/commands/projects.d.ts.map +1 -0
  30. package/dist/commands/projects.js +43 -0
  31. package/dist/commands/projects.js.map +1 -0
  32. package/dist/commands/services.d.ts +2 -0
  33. package/dist/commands/services.d.ts.map +1 -0
  34. package/dist/commands/services.js +318 -0
  35. package/dist/commands/services.js.map +1 -0
  36. package/dist/commands/versions.d.ts +2 -0
  37. package/dist/commands/versions.d.ts.map +1 -0
  38. package/dist/commands/versions.js +321 -0
  39. package/dist/commands/versions.js.map +1 -0
  40. package/dist/index.d.ts +3 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +3 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/lib/auth/client.d.ts +7 -0
  45. package/dist/lib/auth/client.d.ts.map +1 -0
  46. package/dist/lib/auth/client.js +26 -0
  47. package/dist/lib/auth/client.js.map +1 -0
  48. package/dist/lib/auth/guard.d.ts +12 -0
  49. package/dist/lib/auth/guard.d.ts.map +1 -0
  50. package/dist/lib/auth/guard.js +39 -0
  51. package/dist/lib/auth/guard.js.map +1 -0
  52. package/dist/lib/auth/login.d.ts +15 -0
  53. package/dist/lib/auth/login.d.ts.map +1 -0
  54. package/dist/lib/auth/login.js +128 -0
  55. package/dist/lib/auth/login.js.map +1 -0
  56. package/dist/lib/auth/token-storage.d.ts +9 -0
  57. package/dist/lib/auth/token-storage.d.ts.map +1 -0
  58. package/dist/lib/auth/token-storage.js +55 -0
  59. package/dist/lib/auth/token-storage.js.map +1 -0
  60. package/dist/lib/compute-config.d.ts +12 -0
  61. package/dist/lib/compute-config.d.ts.map +1 -0
  62. package/dist/lib/compute-config.js +69 -0
  63. package/dist/lib/compute-config.js.map +1 -0
  64. package/dist/lib/format.d.ts +2 -0
  65. package/dist/lib/format.d.ts.map +1 -0
  66. package/dist/lib/format.js +11 -0
  67. package/dist/lib/format.js.map +1 -0
  68. package/dist/lib/interaction.d.ts +17 -0
  69. package/dist/lib/interaction.d.ts.map +1 -0
  70. package/dist/lib/interaction.js +131 -0
  71. package/dist/lib/interaction.js.map +1 -0
  72. package/dist/lib/json-output.d.ts +3 -0
  73. package/dist/lib/json-output.d.ts.map +1 -0
  74. package/dist/lib/json-output.js +9 -0
  75. package/dist/lib/json-output.js.map +1 -0
  76. package/dist/lib/progress.d.ts +6 -0
  77. package/dist/lib/progress.d.ts.map +1 -0
  78. package/dist/lib/progress.js +156 -0
  79. package/dist/lib/progress.js.map +1 -0
  80. package/package.json +45 -0
  81. package/src/cli.ts +30 -0
  82. package/src/commands/deploy.ts +127 -0
  83. package/src/commands/env.ts +104 -0
  84. package/src/commands/helpers.ts +153 -0
  85. package/src/commands/login.ts +18 -0
  86. package/src/commands/logout.ts +18 -0
  87. package/src/commands/projects.ts +54 -0
  88. package/src/commands/services.ts +385 -0
  89. package/src/commands/versions.ts +389 -0
  90. package/src/index.ts +2 -0
  91. package/src/lib/auth/client.ts +39 -0
  92. package/src/lib/auth/guard.ts +51 -0
  93. package/src/lib/auth/login.ts +175 -0
  94. package/src/lib/auth/token-storage.ts +73 -0
  95. package/src/lib/compute-config.ts +95 -0
  96. package/src/lib/format.ts +16 -0
  97. package/src/lib/interaction.ts +166 -0
  98. package/src/lib/json-output.ts +9 -0
  99. package/src/lib/progress.ts +172 -0
package/README.md ADDED
@@ -0,0 +1,118 @@
1
+ # Compute CLI
2
+
3
+ ## Run in dev
4
+
5
+ ```sh
6
+ bun run bin/compute --help
7
+ bun run bin/compute deploy --path .
8
+ ```
9
+
10
+ ## Bun link usage
11
+
12
+ ```sh
13
+ bun link
14
+ ```
15
+
16
+ Then in another Bun project:
17
+
18
+ ```sh
19
+ bun link compute
20
+ ```
21
+
22
+ ## Programmatic usage
23
+
24
+ When linked with Bun, import directly from `compute`:
25
+
26
+ ```ts
27
+ import {
28
+ ApiClient,
29
+ FileTokenStorage,
30
+ computeProcedures,
31
+ computeRouter,
32
+ deploy,
33
+ destroy,
34
+ deployCli,
35
+ destroyCli,
36
+ listServices,
37
+ listVersions,
38
+ listProjects,
39
+ login,
40
+ logout,
41
+ runCli,
42
+ } from "compute";
43
+ ```
44
+
45
+ Key exports:
46
+
47
+ - `computeProcedures`: callable oRPC procedures for scripting
48
+ - `computeRouter`: router for `trpc-cli` or other adapters
49
+ - `ApiClient`: typed management API client for programmatic commands
50
+ - `runCli(argv)`: run CLI programmatically
51
+ - programmatic handlers: `deploy`, `destroy`, `listServices`, `listVersions`, `listProjects`, `login`, `logout`
52
+ - CLI wrappers (exit-code based): `deployCli`, `destroyCli`
53
+
54
+ Programmatic commands take an `ApiClient` explicitly:
55
+
56
+ ```ts
57
+ import { ApiClient, deploy } from "compute";
58
+
59
+ const client = new ApiClient();
60
+
61
+ const result = await deploy(client, {
62
+ path: "./app",
63
+ env: {
64
+ NODE_ENV: "production",
65
+ },
66
+ });
67
+ ```
68
+
69
+ `ApiClient` can also be configured for custom environments:
70
+
71
+ ```ts
72
+ import { ApiClient, FileTokenStorage } from "compute";
73
+
74
+ const client = new ApiClient({
75
+ tokenStorage: new FileTokenStorage(),
76
+ apiBaseUrl: "https://api.prisma.io",
77
+ authBaseUrl: "https://auth.prisma.io",
78
+ });
79
+ ```
80
+
81
+ Login can also be configured programmatically:
82
+
83
+ ```ts
84
+ import { login } from "compute";
85
+
86
+ await login({
87
+ apiBaseUrl: "https://api.prisma.io",
88
+ authBaseUrl: "https://auth.prisma.io",
89
+ });
90
+ ```
91
+
92
+ ## Programmatic deploy examples
93
+
94
+ Before running the deploy script, authenticate once:
95
+
96
+ ```sh
97
+ ./bin/compute login
98
+ ```
99
+
100
+ Run the default programmatic deploy script:
101
+
102
+ ```sh
103
+ bun run examples/deploy.ts
104
+ ```
105
+
106
+ The example server binds `0.0.0.0` and defaults to port `8080`, matching the current compute runtime expectation.
107
+
108
+ Destroy the latest active/default version for the configured service:
109
+
110
+ ```sh
111
+ bun run examples/destroy.ts
112
+ ```
113
+
114
+ Example app deployed by the script:
115
+
116
+ ```sh
117
+ bun run examples/bun-server/server.ts
118
+ ```
package/bin/compute ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { runCli } from "../dist/cli.js";
3
+
4
+ await runCli();
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env bun
2
+ import { runCli } from "../src/cli.ts";
3
+
4
+ await runCli();
package/dist/cli.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export { parseEnvAssignments, parseEnvFromArgs } from "./commands/helpers.ts";
2
+ export declare const mainCommand: import("citty").CommandDef<import("citty").ArgsDef>;
3
+ export declare function runCli(): Promise<void>;
4
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9E,eAAO,MAAM,WAAW,qDActB,CAAC;AAEH,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAE5C"}
package/dist/cli.js ADDED
@@ -0,0 +1,28 @@
1
+ import { defineCommand, runMain } from "citty";
2
+ import { deployCommand } from "./commands/deploy.js";
3
+ import { envGroup } from "./commands/env.js";
4
+ import { loginCommand } from "./commands/login.js";
5
+ import { logoutCommand } from "./commands/logout.js";
6
+ import { projectsGroup } from "./commands/projects.js";
7
+ import { servicesGroup } from "./commands/services.js";
8
+ import { versionsGroup } from "./commands/versions.js";
9
+ export { parseEnvAssignments, parseEnvFromArgs } from "./commands/helpers.js";
10
+ export const mainCommand = defineCommand({
11
+ meta: {
12
+ name: "compute",
13
+ description: "Prisma Compute CLI",
14
+ },
15
+ subCommands: {
16
+ login: loginCommand,
17
+ logout: logoutCommand,
18
+ deploy: deployCommand,
19
+ env: envGroup,
20
+ projects: projectsGroup,
21
+ services: servicesGroup,
22
+ versions: versionsGroup,
23
+ },
24
+ });
25
+ export async function runCli() {
26
+ await runMain(mainCommand);
27
+ }
28
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9E,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACvC,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,oBAAoB;KAClC;IACD,WAAW,EAAE;QACX,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,aAAa;QACrB,GAAG,EAAE,QAAQ;QACb,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE,aAAa;KACxB;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,56 @@
1
+ export declare const deployCommand: import("citty").CommandDef<{
2
+ readonly project: {
3
+ readonly type: "string";
4
+ readonly description: "Project ID";
5
+ };
6
+ readonly service: {
7
+ readonly type: "string";
8
+ readonly description: "Compute service ID";
9
+ };
10
+ readonly path: {
11
+ readonly type: "string";
12
+ readonly default: ".";
13
+ readonly description: "App directory";
14
+ };
15
+ readonly entrypoint: {
16
+ readonly type: "string";
17
+ readonly description: "Relative app entrypoint";
18
+ };
19
+ readonly serviceName: {
20
+ readonly type: "string";
21
+ readonly description: "Name for a new compute service";
22
+ };
23
+ readonly region: {
24
+ readonly type: "string";
25
+ readonly description: "Region for a new compute service";
26
+ };
27
+ readonly skipBuild: {
28
+ readonly type: "boolean";
29
+ readonly default: false;
30
+ readonly description: "Skip build, deploy pre-built artifact";
31
+ };
32
+ readonly env: {
33
+ readonly type: "string";
34
+ readonly description: "Environment variables (repeat --env KEY=VALUE)";
35
+ };
36
+ readonly httpPort: {
37
+ readonly type: "string";
38
+ readonly description: "HTTP port your application listens on";
39
+ };
40
+ readonly timeout: {
41
+ readonly type: "string";
42
+ readonly default: "120";
43
+ readonly description: "Poll timeout in seconds";
44
+ };
45
+ readonly pollInterval: {
46
+ readonly type: "string";
47
+ readonly default: "1000";
48
+ readonly description: "Poll interval in milliseconds";
49
+ };
50
+ readonly json: {
51
+ readonly type: "boolean";
52
+ readonly default: false;
53
+ readonly description: "Output JSON";
54
+ };
55
+ }>;
56
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2GxB,CAAC"}
@@ -0,0 +1,106 @@
1
+ import path from "node:path";
2
+ import { BunBuild, ComputeClient, PreBuilt } from "@prisma/compute-sdk";
3
+ import { defineCommand } from "citty";
4
+ import { writeComputeConfig } from "../lib/compute-config.js";
5
+ import { createDeployInteraction } from "../lib/interaction.js";
6
+ import { printJsonResult } from "../lib/json-output.js";
7
+ import { createDeployProgress } from "../lib/progress.js";
8
+ import { endFlow, getConfigPath, handleError, parseEnvFromArgs, parsePollOptions, parsePortMapping, readComputeConfig, startFlow, withAuthAndSignal, } from "./helpers.js";
9
+ export const deployCommand = defineCommand({
10
+ meta: { name: "deploy", description: "Build and deploy your application" },
11
+ args: {
12
+ project: { type: "string", description: "Project ID" },
13
+ service: { type: "string", description: "Compute service ID" },
14
+ path: { type: "string", default: ".", description: "App directory" },
15
+ entrypoint: { type: "string", description: "Relative app entrypoint" },
16
+ serviceName: {
17
+ type: "string",
18
+ description: "Name for a new compute service",
19
+ },
20
+ region: { type: "string", description: "Region for a new compute service" },
21
+ skipBuild: {
22
+ type: "boolean",
23
+ default: false,
24
+ description: "Skip build, deploy pre-built artifact",
25
+ },
26
+ env: {
27
+ type: "string",
28
+ description: "Environment variables (repeat --env KEY=VALUE)",
29
+ },
30
+ httpPort: {
31
+ type: "string",
32
+ description: "HTTP port your application listens on",
33
+ },
34
+ timeout: {
35
+ type: "string",
36
+ default: "120",
37
+ description: "Poll timeout in seconds",
38
+ },
39
+ pollInterval: {
40
+ type: "string",
41
+ default: "1000",
42
+ description: "Poll interval in milliseconds",
43
+ },
44
+ json: { type: "boolean", default: false, description: "Output JSON" },
45
+ },
46
+ run: async ({ args, rawArgs }) => {
47
+ const exitCode = await withAuthAndSignal(async (managementClient, signal) => {
48
+ const flowStarted = !args.json && startFlow("Prisma Compute · Deploy");
49
+ try {
50
+ const sdk = new ComputeClient(managementClient);
51
+ const appPath = path.resolve(process.cwd(), args.path);
52
+ const envVars = parseEnvFromArgs(rawArgs);
53
+ const portMapping = parsePortMapping(args.httpPort);
54
+ const configPath = getConfigPath();
55
+ const currentConfig = await readComputeConfig(configPath);
56
+ const projectId = args.project ?? currentConfig?.projectId;
57
+ const serviceId = args.service ?? currentConfig?.serviceId;
58
+ let strategy;
59
+ if (args.skipBuild) {
60
+ if (!args.entrypoint) {
61
+ throw new Error("When --skip-build is set you must provide --entrypoint");
62
+ }
63
+ strategy = new PreBuilt({ appPath, entrypoint: args.entrypoint });
64
+ }
65
+ else {
66
+ strategy = new BunBuild({ appPath, entrypoint: args.entrypoint });
67
+ }
68
+ const result = await sdk.deploy({
69
+ strategy,
70
+ projectId,
71
+ serviceId,
72
+ serviceName: args.serviceName,
73
+ region: args.region,
74
+ envVars,
75
+ portMapping: portMapping ?? currentConfig?.portMapping,
76
+ ...parsePollOptions(args),
77
+ interaction: args.json ? undefined : createDeployInteraction(),
78
+ progress: args.json ? undefined : createDeployProgress(),
79
+ signal,
80
+ });
81
+ if (args.json) {
82
+ printJsonResult(result);
83
+ return result.isOk() ? 0 : 1;
84
+ }
85
+ if (result.isErr()) {
86
+ endFlow(flowStarted, "Deploy flow failed.");
87
+ console.error(result.error.message);
88
+ return 1;
89
+ }
90
+ await writeComputeConfig(configPath, result.value.resolvedConfig);
91
+ console.log(`Version: ${result.value.versionId}`);
92
+ console.log("");
93
+ console.log("Deployment URL:");
94
+ console.log(result.value.deploymentUrl);
95
+ endFlow(flowStarted, "Deploy flow completed.");
96
+ return 0;
97
+ }
98
+ catch (error) {
99
+ return handleError(error);
100
+ }
101
+ });
102
+ if (exitCode !== 0)
103
+ process.exit(exitCode);
104
+ },
105
+ });
106
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const envGroup: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AAoGA,eAAO,MAAM,QAAQ,qDAGnB,CAAC"}
@@ -0,0 +1,84 @@
1
+ import { ComputeClient } from "@prisma/compute-sdk";
2
+ import { defineCommand } from "citty";
3
+ import { writeComputeConfig } from "../lib/compute-config.js";
4
+ import { createDeployInteraction } from "../lib/interaction.js";
5
+ import { printJsonResult } from "../lib/json-output.js";
6
+ import { createUpdateEnvProgress } from "../lib/progress.js";
7
+ import { endFlow, getConfigPath, handleError, parseEnvFromArgs, parsePollOptions, parsePortMapping, readComputeConfig, startFlow, withAuthAndSignal, } from "./helpers.js";
8
+ const envUpdateCommand = defineCommand({
9
+ meta: {
10
+ name: "update",
11
+ description: "Update environment variables (creates a new version)",
12
+ },
13
+ args: {
14
+ project: { type: "string", description: "Project ID" },
15
+ service: { type: "string", description: "Compute service ID" },
16
+ env: {
17
+ type: "string",
18
+ description: "Environment variables (repeat --env KEY=VALUE)",
19
+ required: true,
20
+ },
21
+ httpPort: {
22
+ type: "string",
23
+ description: "HTTP port your application listens on",
24
+ },
25
+ timeout: {
26
+ type: "string",
27
+ default: "120",
28
+ description: "Poll timeout in seconds",
29
+ },
30
+ pollInterval: {
31
+ type: "string",
32
+ default: "1000",
33
+ description: "Poll interval in milliseconds",
34
+ },
35
+ json: { type: "boolean", default: false, description: "Output JSON" },
36
+ },
37
+ run: async ({ args, rawArgs }) => {
38
+ const exitCode = await withAuthAndSignal(async (managementClient, signal) => {
39
+ const flowStarted = !args.json && startFlow("Prisma Compute · Env Update");
40
+ try {
41
+ const sdk = new ComputeClient(managementClient);
42
+ const envVars = parseEnvFromArgs(rawArgs);
43
+ const portMapping = parsePortMapping(args.httpPort);
44
+ const configPath = getConfigPath();
45
+ const currentConfig = await readComputeConfig(configPath);
46
+ const result = await sdk.updateEnv({
47
+ projectId: args.project ?? currentConfig?.projectId,
48
+ serviceId: args.service ?? currentConfig?.serviceId,
49
+ envVars,
50
+ portMapping: portMapping ?? currentConfig?.portMapping,
51
+ ...parsePollOptions(args),
52
+ interaction: args.json ? undefined : createDeployInteraction(),
53
+ progress: args.json ? undefined : createUpdateEnvProgress(),
54
+ signal,
55
+ });
56
+ if (args.json) {
57
+ printJsonResult(result);
58
+ return result.isOk() ? 0 : 1;
59
+ }
60
+ if (result.isErr()) {
61
+ console.error(result.error.message);
62
+ return 1;
63
+ }
64
+ await writeComputeConfig(configPath, result.value.resolvedConfig);
65
+ console.log(`Version: ${result.value.versionId}`);
66
+ console.log("");
67
+ console.log("Deployment URL:");
68
+ console.log(result.value.deploymentUrl);
69
+ endFlow(flowStarted, "Env update completed.");
70
+ return 0;
71
+ }
72
+ catch (error) {
73
+ return handleError(error);
74
+ }
75
+ });
76
+ if (exitCode !== 0)
77
+ process.exit(exitCode);
78
+ },
79
+ });
80
+ export const envGroup = defineCommand({
81
+ meta: { name: "env", description: "Environment variable management" },
82
+ subCommands: { update: envUpdateCommand },
83
+ });
84
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ManagementApiClient } from "@prisma/management-api-sdk";
2
+ import { readComputeConfig } from "../lib/compute-config.ts";
3
+ import { isInteractiveSession } from "../lib/interaction.ts";
4
+ export declare function parseEnvAssignments(entries: string[]): Record<string, string>;
5
+ export declare function parseEnvFromArgs(rawArgs: string[]): Record<string, string>;
6
+ export declare function parsePortMapping(httpPort: string | undefined): {
7
+ http: number;
8
+ } | undefined;
9
+ export declare function parsePollOptions(args: {
10
+ timeout: string;
11
+ pollInterval: string;
12
+ }): {
13
+ timeoutSeconds: number;
14
+ pollIntervalMs: number;
15
+ };
16
+ export declare function getConfigPath(): string;
17
+ export { readComputeConfig };
18
+ export declare function createCommandAbortSignal(): {
19
+ signal: AbortSignal;
20
+ cleanup(): void;
21
+ };
22
+ export declare function withAuthAndSignal(fn: (client: ManagementApiClient, signal: AbortSignal) => Promise<number>): Promise<number>;
23
+ export declare function handleError(error: unknown): number;
24
+ export declare function startFlow(title: string): boolean;
25
+ export declare function endFlow(started: boolean, message?: string): void;
26
+ export { isInteractiveSession };
27
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/commands/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAEL,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAqB,MAAM,uBAAuB,CAAC;AAEhF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAe7E;AA6BD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI1E;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAO9B;AAUD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;;;EAKA;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAE7B,wBAAgB,wBAAwB,IAAI;IAC1C,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,IAAI,IAAI,CAAC;CACjB,CAuBA;AAED,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,GACxE,OAAO,CAAC,MAAM,CAAC,CASjB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIlD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAIhD;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,SAAU,GAAG,IAAI,CAEjE;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,128 @@
1
+ import path from "node:path";
2
+ import { intro, outro } from "@clack/prompts";
3
+ import { requireAuth } from "../lib/auth/guard.js";
4
+ import { COMPUTE_CONFIG_FILENAME, readComputeConfig, } from "../lib/compute-config.js";
5
+ import { isInteractiveSession, isPromptCancelled } from "../lib/interaction.js";
6
+ export function parseEnvAssignments(entries) {
7
+ const envVars = {};
8
+ for (const value of entries) {
9
+ const delimiter = value.indexOf("=");
10
+ if (delimiter <= 0) {
11
+ throw new Error(`Invalid --env value \`${value}\`; expected KEY=VALUE`);
12
+ }
13
+ const key = value.slice(0, delimiter).trim();
14
+ const envValue = value.slice(delimiter + 1);
15
+ if (key.length === 0) {
16
+ throw new Error(`Invalid --env key in \`${value}\``);
17
+ }
18
+ envVars[key] = envValue;
19
+ }
20
+ return envVars;
21
+ }
22
+ function extractEnvBatches(rawArgs) {
23
+ const batches = [];
24
+ for (let i = 0; i < rawArgs.length; i++) {
25
+ const arg = rawArgs[i];
26
+ if (arg === undefined)
27
+ continue;
28
+ if (arg === "--")
29
+ break;
30
+ if (arg === "--env") {
31
+ const value = rawArgs[i + 1];
32
+ if (value === undefined || value.startsWith("-")) {
33
+ batches.push("");
34
+ }
35
+ else {
36
+ batches.push(value);
37
+ i++;
38
+ }
39
+ continue;
40
+ }
41
+ if (arg.startsWith("--env=")) {
42
+ batches.push(arg.slice("--env=".length));
43
+ }
44
+ }
45
+ return batches;
46
+ }
47
+ export function parseEnvFromArgs(rawArgs) {
48
+ // Citty still collapses repeated string flags, so preserve each --env from raw args.
49
+ const batches = extractEnvBatches(rawArgs);
50
+ return parseEnvAssignments(batches);
51
+ }
52
+ export function parsePortMapping(httpPort) {
53
+ if (!httpPort)
54
+ return undefined;
55
+ const port = Number.parseInt(httpPort, 10);
56
+ if (Number.isNaN(port)) {
57
+ throw new Error(`Invalid --http-port value: ${httpPort}`);
58
+ }
59
+ return { http: port };
60
+ }
61
+ function parseIntOrThrow(value, flag) {
62
+ const n = Number.parseInt(value, 10);
63
+ if (Number.isNaN(n)) {
64
+ throw new Error(`Invalid ${flag} value: ${value}`);
65
+ }
66
+ return n;
67
+ }
68
+ export function parsePollOptions(args) {
69
+ return {
70
+ timeoutSeconds: parseIntOrThrow(args.timeout, "--timeout"),
71
+ pollIntervalMs: parseIntOrThrow(args.pollInterval, "--poll-interval"),
72
+ };
73
+ }
74
+ export function getConfigPath() {
75
+ return path.join(process.cwd(), COMPUTE_CONFIG_FILENAME);
76
+ }
77
+ export { readComputeConfig };
78
+ export function createCommandAbortSignal() {
79
+ const controller = new AbortController();
80
+ let cleanedUp = false;
81
+ function cleanup() {
82
+ if (cleanedUp)
83
+ return;
84
+ cleanedUp = true;
85
+ process.off("SIGINT", onAbort);
86
+ process.off("SIGTERM", onAbort);
87
+ }
88
+ function onAbort() {
89
+ cleanup();
90
+ controller.abort();
91
+ }
92
+ process.once("SIGINT", onAbort);
93
+ process.once("SIGTERM", onAbort);
94
+ return {
95
+ signal: controller.signal,
96
+ cleanup,
97
+ };
98
+ }
99
+ export async function withAuthAndSignal(fn) {
100
+ const client = await requireAuth();
101
+ if (!client)
102
+ return 1;
103
+ const { signal, cleanup } = createCommandAbortSignal();
104
+ try {
105
+ return await fn(client, signal);
106
+ }
107
+ finally {
108
+ cleanup();
109
+ }
110
+ }
111
+ export function handleError(error) {
112
+ if (isPromptCancelled(error))
113
+ return 1;
114
+ console.error(error instanceof Error ? error.message : String(error));
115
+ return 1;
116
+ }
117
+ export function startFlow(title) {
118
+ if (!isInteractiveSession())
119
+ return false;
120
+ intro(title);
121
+ return true;
122
+ }
123
+ export function endFlow(started, message = "Done.") {
124
+ if (started)
125
+ outro(message);
126
+ }
127
+ export { isInteractiveSession };
128
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/commands/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const loginCommand: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,qDAcvB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { defineCommand } from "citty";
2
+ import { login as startLoginFlow } from "../lib/auth/login.js";
3
+ export const loginCommand = defineCommand({
4
+ meta: { name: "login", description: "Authenticate with Prisma" },
5
+ run: async () => {
6
+ try {
7
+ console.log("Opening browser for authentication...");
8
+ await startLoginFlow();
9
+ console.log("Successfully authenticated.");
10
+ }
11
+ catch (error) {
12
+ console.error(`Login failed: ${error instanceof Error ? error.message : String(error)}`);
13
+ process.exit(1);
14
+ }
15
+ },
16
+ });
17
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;IACxC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,0BAA0B,EAAE;IAChE,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACrD,MAAM,cAAc,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,iBAAiB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1E,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const logoutCommand: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,qDAcxB,CAAC"}