@prisma/cli-init 0.0.0-dev.202506252321 → 0.0.0-dev.202506252324
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.
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
Engine,
|
|
4
|
+
apiKeyValidator,
|
|
5
|
+
array,
|
|
6
|
+
handleEngineError,
|
|
7
|
+
integer,
|
|
8
|
+
literal,
|
|
9
|
+
looseObject,
|
|
10
|
+
minLength,
|
|
11
|
+
minValue,
|
|
12
|
+
number,
|
|
13
|
+
object,
|
|
14
|
+
optional,
|
|
15
|
+
pipe,
|
|
16
|
+
safeParse,
|
|
17
|
+
string,
|
|
18
|
+
union
|
|
19
|
+
} from "./chunk-XE2LPBET.js";
|
|
20
|
+
import "./chunk-YX4UTTNJ.js";
|
|
21
|
+
|
|
22
|
+
// ../../dev/server/src/accelerate.ts
|
|
23
|
+
import { Hono } from "hono/tiny";
|
|
24
|
+
import { validator } from "hono/validator";
|
|
25
|
+
|
|
26
|
+
// ../../dev/server/src/caching.ts
|
|
27
|
+
var invalidateInputSchema = object({
|
|
28
|
+
tags: union([pipe(array(string()), minLength(1)), literal("all")])
|
|
29
|
+
});
|
|
30
|
+
async function assertInvalidateInput(ctx) {
|
|
31
|
+
const { output, success } = safeParse(invalidateInputSchema, await ctx.req.json(), { abortEarly: true });
|
|
32
|
+
if (!success) {
|
|
33
|
+
return ctx.text("Invalid input", 400);
|
|
34
|
+
}
|
|
35
|
+
return output;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// ../../dev/server/src/schema.ts
|
|
39
|
+
import { Buffer } from "buffer";
|
|
40
|
+
var SCHEMAS_BY_HASH = /* @__PURE__ */ new Map();
|
|
41
|
+
async function hashSchema(base64Schema) {
|
|
42
|
+
const encoder = new TextEncoder();
|
|
43
|
+
const data = encoder.encode(base64Schema);
|
|
44
|
+
const hashBuffer = await crypto.subtle.digest("SHA-256", data);
|
|
45
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
46
|
+
const hashHex = hashArray.map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
47
|
+
return hashHex;
|
|
48
|
+
}
|
|
49
|
+
function assertSchema(ctx) {
|
|
50
|
+
const schemaHash = ctx.req.param("schemaHash");
|
|
51
|
+
const schemas = SCHEMAS_BY_HASH.get(schemaHash);
|
|
52
|
+
if (schemas == null) {
|
|
53
|
+
return ctx.json({ EngineNotStarted: { reason: "SchemaMissing" } }, 404);
|
|
54
|
+
}
|
|
55
|
+
return { schemaHash, schemas };
|
|
56
|
+
}
|
|
57
|
+
var datasourceBlockRegex = /datasource\s+db\s+\{\s*provider\s*=\s*"postgres(!?ql)?"\s+url\s*=\s*.+\s*\}/;
|
|
58
|
+
async function overrideDatasource(base64Schema, connectionString) {
|
|
59
|
+
const schema = Buffer.from(base64Schema, "base64").toString("utf8");
|
|
60
|
+
const override = `datasource db {
|
|
61
|
+
provider = "postgresql"
|
|
62
|
+
url = "${connectionString.toString()}"
|
|
63
|
+
}`;
|
|
64
|
+
const schemaWithOverride = schema.replace(datasourceBlockRegex, override);
|
|
65
|
+
const overrideHash = await hashSchema(schemaWithOverride);
|
|
66
|
+
return {
|
|
67
|
+
base64Override: Buffer.from(schemaWithOverride, "utf8").toString("base64"),
|
|
68
|
+
overrideHash
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// ../../dev/server/src/tracing.ts
|
|
73
|
+
function getTracingHeaders(ctx) {
|
|
74
|
+
const { req } = ctx;
|
|
75
|
+
return {
|
|
76
|
+
traceparent: req.header("traceparent"),
|
|
77
|
+
["X-capture-telemetry"]: req.header("X-capture-telemetry")
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// ../../dev/server/src/transaction.ts
|
|
82
|
+
var transactionOptionsSchema = object({
|
|
83
|
+
isolation_level: optional(string()),
|
|
84
|
+
max_wait: pipe(number(), integer(), minValue(0)),
|
|
85
|
+
timeout: pipe(number(), integer(), minValue(0))
|
|
86
|
+
});
|
|
87
|
+
async function assertTransactionOptions(ctx) {
|
|
88
|
+
const { issues, output, success } = safeParse(transactionOptionsSchema, await ctx.req.json(), { abortEarly: true });
|
|
89
|
+
if (!success) {
|
|
90
|
+
return ctx.json({ EngineNotStarted: { reason: "InvalidRequest", issues } }, 400);
|
|
91
|
+
}
|
|
92
|
+
return output;
|
|
93
|
+
}
|
|
94
|
+
var transactionSchema = looseObject({
|
|
95
|
+
id: union([string(), number()])
|
|
96
|
+
});
|
|
97
|
+
function assertTransaction(thing, ctx) {
|
|
98
|
+
const { output, success } = safeParse(transactionSchema, thing);
|
|
99
|
+
if (!success) {
|
|
100
|
+
return ctx.json({ EngineMalfunction: {} }, 500);
|
|
101
|
+
}
|
|
102
|
+
return output;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// ../../dev/server/src/accelerate.ts
|
|
106
|
+
var accelerateRoute = new Hono();
|
|
107
|
+
accelerateRoute.post("/invalidate", validator("header", apiKeyValidator), async (ctx) => {
|
|
108
|
+
const invlidateInput = await assertInvalidateInput(ctx);
|
|
109
|
+
if (invlidateInput instanceof Response) {
|
|
110
|
+
return invlidateInput;
|
|
111
|
+
}
|
|
112
|
+
return ctx.body(null);
|
|
113
|
+
});
|
|
114
|
+
var SCHEMAFUL_BASE_PATH = "/:clientVersion/:schemaHash";
|
|
115
|
+
var schemafulRoute = accelerateRoute.basePath(SCHEMAFUL_BASE_PATH);
|
|
116
|
+
accelerateRoute.route("/", schemafulRoute);
|
|
117
|
+
var GRAPHQL_PATHS = ["/graphql", "/itx/:transactionId/graphql"];
|
|
118
|
+
schemafulRoute.on("POST", [...GRAPHQL_PATHS], validator("header", apiKeyValidator), async (ctx) => {
|
|
119
|
+
const { req } = ctx;
|
|
120
|
+
try {
|
|
121
|
+
const engine = await getEngine(ctx);
|
|
122
|
+
if (engine instanceof Response) {
|
|
123
|
+
return engine;
|
|
124
|
+
}
|
|
125
|
+
const query = await req.text();
|
|
126
|
+
const transactionId = req.param("transactionId");
|
|
127
|
+
const results = await engine.request(query, {
|
|
128
|
+
...getTracingHeaders(ctx),
|
|
129
|
+
["X-transaction-id"]: transactionId
|
|
130
|
+
});
|
|
131
|
+
return ctx.text(results);
|
|
132
|
+
} catch (error) {
|
|
133
|
+
return handleEngineError(error, ctx);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
schemafulRoute.basePath("/itx/:transactionId").on("POST", ["/commit", "/rollback"], validator("header", apiKeyValidator), async (ctx) => {
|
|
137
|
+
const { req } = ctx;
|
|
138
|
+
try {
|
|
139
|
+
const engine = await getEngine(ctx);
|
|
140
|
+
if (engine instanceof Response) {
|
|
141
|
+
return engine;
|
|
142
|
+
}
|
|
143
|
+
const action = req.routePath.split("/").filter(Boolean).at(-1);
|
|
144
|
+
const method = `${action}Transaction`;
|
|
145
|
+
const transactionId = req.param("transactionId");
|
|
146
|
+
const response = await engine[method](transactionId, getTracingHeaders(ctx));
|
|
147
|
+
return ctx.json(response);
|
|
148
|
+
} catch (error) {
|
|
149
|
+
return handleEngineError(error, ctx);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
schemafulRoute.put("/schema", validator("header", apiKeyValidator), async (ctx) => {
|
|
153
|
+
const { req } = ctx;
|
|
154
|
+
const base64Schema = await req.text();
|
|
155
|
+
if (!base64Schema) {
|
|
156
|
+
return ctx.text("Missing schema", 400);
|
|
157
|
+
}
|
|
158
|
+
const schemaHash = req.param("schemaHash");
|
|
159
|
+
const schemas = SCHEMAS_BY_HASH.get(schemaHash);
|
|
160
|
+
if (schemas == null) {
|
|
161
|
+
if (schemaHash !== await hashSchema(base64Schema)) {
|
|
162
|
+
return ctx.text("Schema hash mismatch", 400);
|
|
163
|
+
}
|
|
164
|
+
const override = await overrideDatasource(base64Schema, ctx.get("db").prismaORMConnectionString);
|
|
165
|
+
SCHEMAS_BY_HASH.set(schemaHash, { base64Original: base64Schema, ...override });
|
|
166
|
+
return ctx.text(schemaHash);
|
|
167
|
+
}
|
|
168
|
+
if (base64Schema !== schemas.base64Original) {
|
|
169
|
+
return ctx.text("Schema mismatch", 400);
|
|
170
|
+
}
|
|
171
|
+
return ctx.text(schemaHash);
|
|
172
|
+
});
|
|
173
|
+
schemafulRoute.post("/transaction/start", validator("header", apiKeyValidator), async (ctx) => {
|
|
174
|
+
const { req } = ctx;
|
|
175
|
+
const transactionOptions = await assertTransactionOptions(ctx);
|
|
176
|
+
if (transactionOptions instanceof Response) {
|
|
177
|
+
return transactionOptions;
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
const engine = await getEngine(ctx);
|
|
181
|
+
if (engine instanceof Response) {
|
|
182
|
+
return engine;
|
|
183
|
+
}
|
|
184
|
+
const response = await engine.startTransaction(transactionOptions, getTracingHeaders(ctx));
|
|
185
|
+
const transaction = assertTransaction(response, ctx);
|
|
186
|
+
if (transaction instanceof Response) {
|
|
187
|
+
return transaction;
|
|
188
|
+
}
|
|
189
|
+
const { id } = transaction;
|
|
190
|
+
const clientVersion = req.param("clientVersion");
|
|
191
|
+
const port = ctx.get("port");
|
|
192
|
+
const protocol = ctx.get("protocol");
|
|
193
|
+
const schemaHash = req.param("schemaHash");
|
|
194
|
+
return ctx.json({
|
|
195
|
+
...response,
|
|
196
|
+
"data-proxy": {
|
|
197
|
+
endpoint: `${protocol}://localhost:${port}/${clientVersion}/${schemaHash}/itx/${id}`
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
} catch (error) {
|
|
201
|
+
return handleEngineError(error, ctx);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
async function getEngine(ctx) {
|
|
205
|
+
const { req } = ctx;
|
|
206
|
+
const schema = assertSchema(ctx);
|
|
207
|
+
if (schema instanceof Response) {
|
|
208
|
+
return schema;
|
|
209
|
+
}
|
|
210
|
+
const { base64Override, overrideHash } = schema.schemas;
|
|
211
|
+
return await Engine.get({
|
|
212
|
+
base64Schema: base64Override,
|
|
213
|
+
clientVersion: process.env.PRISMA_DEV_FORCE_CLIENT_VERSION || req.param("clientVersion"),
|
|
214
|
+
debug: ctx.get("debug"),
|
|
215
|
+
platform: ctx.get("platform"),
|
|
216
|
+
schemaHash: overrideHash
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
export {
|
|
220
|
+
accelerateRoute
|
|
221
|
+
};
|
|
@@ -344,7 +344,7 @@ import internals5 from "@prisma/internals";
|
|
|
344
344
|
import * as Checkpoint from "checkpoint-client";
|
|
345
345
|
|
|
346
346
|
// package.json
|
|
347
|
-
var version = "0.0.0-dev.
|
|
347
|
+
var version = "0.0.0-dev.202506252324";
|
|
348
348
|
|
|
349
349
|
// src/platform/_lib/userAgent.ts
|
|
350
350
|
var debug = Debug("prisma:cli:platform:_lib:userAgent");
|
package/dist/index.js
CHANGED
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
printPpgInitOutput,
|
|
29
29
|
requestOrThrow,
|
|
30
30
|
successMessage
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-C6YUTD2X.js";
|
|
32
32
|
import {
|
|
33
33
|
__commonJS,
|
|
34
34
|
__require,
|
|
@@ -2645,7 +2645,7 @@ async function getApp(port, dbServer, serverState) {
|
|
|
2645
2645
|
const { debug } = serverState;
|
|
2646
2646
|
const [{ Hono }, { accelerateRoute }, { utilityRoute }] = await Promise.all([
|
|
2647
2647
|
import("hono/tiny"),
|
|
2648
|
-
import("./accelerate-
|
|
2648
|
+
import("./accelerate-TY7QIZCU.js"),
|
|
2649
2649
|
import("./utility-W6LOZZIT.js")
|
|
2650
2650
|
]);
|
|
2651
2651
|
const app = new Hono();
|
|
@@ -3406,7 +3406,7 @@ var Init = class _Init {
|
|
|
3406
3406
|
let generatedSchema;
|
|
3407
3407
|
let generatedName;
|
|
3408
3408
|
if (isPpgCommand) {
|
|
3409
|
-
const PlatformCommands = await import("./_-
|
|
3409
|
+
const PlatformCommands = await import("./_-OXOXX7IC.js");
|
|
3410
3410
|
const credentials = await credentialsFile.load();
|
|
3411
3411
|
if (internals.isError(credentials))
|
|
3412
3412
|
throw credentials;
|