@prisma/cli-init 0.2.0 → 0.4.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.
- package/dist/{_-O567UZLT.js → _-WIN5AVS3.js} +3 -1
- package/dist/accelerate-GABM6I4V.js +221 -0
- package/dist/chunk-ASMCGOOW.js +1286 -0
- package/dist/{chunk-CMRCQXCF.js → chunk-SORRSNB3.js} +5 -6
- package/dist/chunk-YX4UTTNJ.js +44 -0
- package/dist/index.js +3114 -43
- package/dist/utility-W6LOZZIT.js +21 -0
- package/package.json +2 -2
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
|
|
1
2
|
import {
|
|
2
3
|
ErrorPlatformUnauthorized,
|
|
3
4
|
Login,
|
|
@@ -14,7 +15,8 @@ import {
|
|
|
14
15
|
platformParameters,
|
|
15
16
|
poll,
|
|
16
17
|
printPpgInitOutput
|
|
17
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-SORRSNB3.js";
|
|
19
|
+
import "./chunk-YX4UTTNJ.js";
|
|
18
20
|
export {
|
|
19
21
|
__exports as Accelerate,
|
|
20
22
|
__exports2 as Auth,
|
|
@@ -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-ASMCGOOW.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
|
+
};
|