@prisma/cli-init
Version:
Init CLI for Prisma
1,557 lines (1,538 loc) • 57.2 kB
JavaScript
import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
// ../../node_modules/.pnpm/valibot@1.1.0_typescript@5.8.3/node_modules/valibot/dist/index.js
var store;
// @__NO_SIDE_EFFECTS__
function getGlobalConfig(config2) {
return {
lang: config2?.lang ?? store?.lang,
message: config2?.message,
abortEarly: config2?.abortEarly ?? store?.abortEarly,
abortPipeEarly: config2?.abortPipeEarly ?? store?.abortPipeEarly
};
}
var store2;
// @__NO_SIDE_EFFECTS__
function getGlobalMessage(lang) {
return store2?.get(lang);
}
var store3;
// @__NO_SIDE_EFFECTS__
function getSchemaMessage(lang) {
return store3?.get(lang);
}
var store4;
// @__NO_SIDE_EFFECTS__
function getSpecificMessage(reference, lang) {
return store4?.get(reference)?.get(lang);
}
// @__NO_SIDE_EFFECTS__
function _stringify(input) {
const type = typeof input;
if (type === "string") {
return `"${input}"`;
}
if (type === "number" || type === "bigint" || type === "boolean") {
return `${input}`;
}
if (type === "object" || type === "function") {
return (input && Object.getPrototypeOf(input)?.constructor?.name) ?? "null";
}
return type;
}
function _addIssue(context, label, dataset, config2, other) {
const input = other && "input" in other ? other.input : dataset.value;
const expected = other?.expected ?? context.expects ?? null;
const received = other?.received ?? /* @__PURE__ */ _stringify(input);
const issue = {
kind: context.kind,
type: context.type,
input,
expected,
received,
message: `Invalid ${label}: ${expected ? `Expected ${expected} but r` : "R"}eceived ${received}`,
requirement: context.requirement,
path: other?.path,
issues: other?.issues,
lang: config2.lang,
abortEarly: config2.abortEarly,
abortPipeEarly: config2.abortPipeEarly
};
const isSchema = context.kind === "schema";
const message2 = other?.message ?? context.message ?? /* @__PURE__ */ getSpecificMessage(context.reference, issue.lang) ?? (isSchema ? /* @__PURE__ */ getSchemaMessage(issue.lang) : null) ?? config2.message ?? /* @__PURE__ */ getGlobalMessage(issue.lang);
if (message2 !== void 0) {
issue.message = typeof message2 === "function" ? (
// @ts-expect-error
message2(issue)
) : message2;
}
if (isSchema) {
dataset.typed = false;
}
if (dataset.issues) {
dataset.issues.push(issue);
} else {
dataset.issues = [issue];
}
}
// @__NO_SIDE_EFFECTS__
function _getStandardProps(context) {
return {
version: 1,
vendor: "valibot",
validate(value2) {
return context["~run"]({ value: value2 }, /* @__PURE__ */ getGlobalConfig());
}
};
}
// @__NO_SIDE_EFFECTS__
function _isValidObjectKey(object2, key) {
return Object.hasOwn(object2, key) && key !== "__proto__" && key !== "prototype" && key !== "constructor";
}
// @__NO_SIDE_EFFECTS__
function _joinExpects(values2, separator) {
const list = [...new Set(values2)];
if (list.length > 1) {
return `(${list.join(` ${separator} `)})`;
}
return list[0] ?? "never";
}
// @__NO_SIDE_EFFECTS__
function integer(message2) {
return {
kind: "validation",
type: "integer",
reference: integer,
async: false,
expects: null,
requirement: Number.isInteger,
message: message2,
"~run"(dataset, config2) {
if (dataset.typed && !this.requirement(dataset.value)) {
_addIssue(this, "integer", dataset, config2);
}
return dataset;
}
};
}
// @__NO_SIDE_EFFECTS__
function minLength(requirement, message2) {
return {
kind: "validation",
type: "min_length",
reference: minLength,
async: false,
expects: `>=${requirement}`,
requirement,
message: message2,
"~run"(dataset, config2) {
if (dataset.typed && dataset.value.length < this.requirement) {
_addIssue(this, "length", dataset, config2, {
received: `${dataset.value.length}`
});
}
return dataset;
}
};
}
// @__NO_SIDE_EFFECTS__
function minValue(requirement, message2) {
return {
kind: "validation",
type: "min_value",
reference: minValue,
async: false,
expects: `>=${requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement)}`,
requirement,
message: message2,
"~run"(dataset, config2) {
if (dataset.typed && !(dataset.value >= this.requirement)) {
_addIssue(this, "value", dataset, config2, {
received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value)
});
}
return dataset;
}
};
}
// @__NO_SIDE_EFFECTS__
function parseJson(config2, message2) {
return {
kind: "transformation",
type: "parse_json",
reference: parseJson,
config: config2,
message: message2,
async: false,
"~run"(dataset, config3) {
try {
dataset.value = JSON.parse(dataset.value, this.config?.reviver);
} catch (error) {
if (error instanceof Error) {
_addIssue(this, "JSON", dataset, config3, {
received: `"${error.message}"`
});
dataset.typed = false;
} else {
throw error;
}
}
return dataset;
}
};
}
// @__NO_SIDE_EFFECTS__
function regex(requirement, message2) {
return {
kind: "validation",
type: "regex",
reference: regex,
async: false,
expects: `${requirement}`,
requirement,
message: message2,
"~run"(dataset, config2) {
if (dataset.typed && !this.requirement.test(dataset.value)) {
_addIssue(this, "format", dataset, config2);
}
return dataset;
}
};
}
// @__NO_SIDE_EFFECTS__
function url(message2) {
return {
kind: "validation",
type: "url",
reference: url,
async: false,
expects: null,
requirement(input) {
try {
new URL(input);
return true;
} catch {
return false;
}
},
message: message2,
"~run"(dataset, config2) {
if (dataset.typed && !this.requirement(dataset.value)) {
_addIssue(this, "URL", dataset, config2);
}
return dataset;
}
};
}
// @__NO_SIDE_EFFECTS__
function getFallback(schema, dataset, config2) {
return typeof schema.fallback === "function" ? (
// @ts-expect-error
schema.fallback(dataset, config2)
) : (
// @ts-expect-error
schema.fallback
);
}
// @__NO_SIDE_EFFECTS__
function getDefault(schema, dataset, config2) {
return typeof schema.default === "function" ? (
// @ts-expect-error
schema.default(dataset, config2)
) : (
// @ts-expect-error
schema.default
);
}
// @__NO_SIDE_EFFECTS__
function array(item, message2) {
return {
kind: "schema",
type: "array",
reference: array,
expects: "Array",
async: false,
item,
message: message2,
get "~standard"() {
return /* @__PURE__ */ _getStandardProps(this);
},
"~run"(dataset, config2) {
const input = dataset.value;
if (Array.isArray(input)) {
dataset.typed = true;
dataset.value = [];
for (let key = 0; key < input.length; key++) {
const value2 = input[key];
const itemDataset = this.item["~run"]({ value: value2 }, config2);
if (itemDataset.issues) {
const pathItem = {
type: "array",
origin: "value",
input,
key,
value: value2
};
for (const issue of itemDataset.issues) {
if (issue.path) {
issue.path.unshift(pathItem);
} else {
issue.path = [pathItem];
}
dataset.issues?.push(issue);
}
if (!dataset.issues) {
dataset.issues = itemDataset.issues;
}
if (config2.abortEarly) {
dataset.typed = false;
break;
}
}
if (!itemDataset.typed) {
dataset.typed = false;
}
dataset.value.push(itemDataset.value);
}
} else {
_addIssue(this, "type", dataset, config2);
}
return dataset;
}
};
}
// @__NO_SIDE_EFFECTS__
function literal(literal_, message2) {
return {
kind: "schema",
type: "literal",
reference: literal,
expects: /* @__PURE__ */ _stringify(literal_),
async: false,
literal: literal_,
message: message2,
get "~standard"() {
return /* @__PURE__ */ _getStandardProps(this);
},
"~run"(dataset, config2) {
if (dataset.value === this.literal) {
dataset.typed = true;
} else {
_addIssue(this, "type", dataset, config2);
}
return dataset;
}
};
}
// @__NO_SIDE_EFFECTS__
function looseObject(entries2, message2) {
return {
kind: "schema",
type: "loose_object",
reference: looseObject,
expects: "Object",
async: false,
entries: entries2,
message: message2,
get "~standard"() {
return /* @__PURE__ */ _getStandardProps(this);
},
"~run"(dataset, config2) {
const input = dataset.value;
if (input && typeof input === "object") {
dataset.typed = true;
dataset.value = {};
for (const key in this.entries) {
const valueSchema = this.entries[key];
if (key in input || (valueSchema.type === "exact_optional" || valueSchema.type === "optional" || valueSchema.type === "nullish") && // @ts-expect-error
valueSchema.default !== void 0) {
const value2 = key in input ? (
// @ts-expect-error
input[key]
) : /* @__PURE__ */ getDefault(valueSchema);
const valueDataset = valueSchema["~run"]({ value: value2 }, config2);
if (valueDataset.issues) {
const pathItem = {
type: "object",
origin: "value",
input,
key,
value: value2
};
for (const issue of valueDataset.issues) {
if (issue.path) {
issue.path.unshift(pathItem);
} else {
issue.path = [pathItem];
}
dataset.issues?.push(issue);
}
if (!dataset.issues) {
dataset.issues = valueDataset.issues;
}
if (config2.abortEarly) {
dataset.typed = false;
break;
}
}
if (!valueDataset.typed) {
dataset.typed = false;
}
dataset.value[key] = valueDataset.value;
} else if (valueSchema.fallback !== void 0) {
dataset.value[key] = /* @__PURE__ */ getFallback(valueSchema);
} else if (valueSchema.type !== "exact_optional" && valueSchema.type !== "optional" && valueSchema.type !== "nullish") {
_addIssue(this, "key", dataset, config2, {
input: void 0,
expected: `"${key}"`,
path: [
{
type: "object",
origin: "key",
input,
key,
// @ts-expect-error
value: input[key]
}
]
});
if (config2.abortEarly) {
break;
}
}
}
if (!dataset.issues || !config2.abortEarly) {
for (const key in input) {
if (/* @__PURE__ */ _isValidObjectKey(input, key) && !(key in this.entries)) {
dataset.value[key] = input[key];
}
}
}
} else {
_addIssue(this, "type", dataset, config2);
}
return dataset;
}
};
}
// @__NO_SIDE_EFFECTS__
function number(message2) {
return {
kind: "schema",
type: "number",
reference: number,
expects: "number",
async: false,
message: message2,
get "~standard"() {
return /* @__PURE__ */ _getStandardProps(this);
},
"~run"(dataset, config2) {
if (typeof dataset.value === "number" && !isNaN(dataset.value)) {
dataset.typed = true;
} else {
_addIssue(this, "type", dataset, config2);
}
return dataset;
}
};
}
// @__NO_SIDE_EFFECTS__
function object(entries2, message2) {
return {
kind: "schema",
type: "object",
reference: object,
expects: "Object",
async: false,
entries: entries2,
message: message2,
get "~standard"() {
return /* @__PURE__ */ _getStandardProps(this);
},
"~run"(dataset, config2) {
const input = dataset.value;
if (input && typeof input === "object") {
dataset.typed = true;
dataset.value = {};
for (const key in this.entries) {
const valueSchema = this.entries[key];
if (key in input || (valueSchema.type === "exact_optional" || valueSchema.type === "optional" || valueSchema.type === "nullish") && // @ts-expect-error
valueSchema.default !== void 0) {
const value2 = key in input ? (
// @ts-expect-error
input[key]
) : /* @__PURE__ */ getDefault(valueSchema);
const valueDataset = valueSchema["~run"]({ value: value2 }, config2);
if (valueDataset.issues) {
const pathItem = {
type: "object",
origin: "value",
input,
key,
value: value2
};
for (const issue of valueDataset.issues) {
if (issue.path) {
issue.path.unshift(pathItem);
} else {
issue.path = [pathItem];
}
dataset.issues?.push(issue);
}
if (!dataset.issues) {
dataset.issues = valueDataset.issues;
}
if (config2.abortEarly) {
dataset.typed = false;
break;
}
}
if (!valueDataset.typed) {
dataset.typed = false;
}
dataset.value[key] = valueDataset.value;
} else if (valueSchema.fallback !== void 0) {
dataset.value[key] = /* @__PURE__ */ getFallback(valueSchema);
} else if (valueSchema.type !== "exact_optional" && valueSchema.type !== "optional" && valueSchema.type !== "nullish") {
_addIssue(this, "key", dataset, config2, {
input: void 0,
expected: `"${key}"`,
path: [
{
type: "object",
origin: "key",
input,
key,
// @ts-expect-error
value: input[key]
}
]
});
if (config2.abortEarly) {
break;
}
}
}
} else {
_addIssue(this, "type", dataset, config2);
}
return dataset;
}
};
}
// @__NO_SIDE_EFFECTS__
function optional(wrapped, default_) {
return {
kind: "schema",
type: "optional",
reference: optional,
expects: `(${wrapped.expects} | undefined)`,
async: false,
wrapped,
default: default_,
get "~standard"() {
return /* @__PURE__ */ _getStandardProps(this);
},
"~run"(dataset, config2) {
if (dataset.value === void 0) {
if (this.default !== void 0) {
dataset.value = /* @__PURE__ */ getDefault(this, dataset, config2);
}
if (dataset.value === void 0) {
dataset.typed = true;
return dataset;
}
}
return this.wrapped["~run"](dataset, config2);
}
};
}
// @__NO_SIDE_EFFECTS__
function string(message2) {
return {
kind: "schema",
type: "string",
reference: string,
expects: "string",
async: false,
message: message2,
get "~standard"() {
return /* @__PURE__ */ _getStandardProps(this);
},
"~run"(dataset, config2) {
if (typeof dataset.value === "string") {
dataset.typed = true;
} else {
_addIssue(this, "type", dataset, config2);
}
return dataset;
}
};
}
// @__NO_SIDE_EFFECTS__
function _subIssues(datasets) {
let issues;
if (datasets) {
for (const dataset of datasets) {
if (issues) {
issues.push(...dataset.issues);
} else {
issues = dataset.issues;
}
}
}
return issues;
}
// @__NO_SIDE_EFFECTS__
function union(options, message2) {
return {
kind: "schema",
type: "union",
reference: union,
expects: /* @__PURE__ */ _joinExpects(
options.map((option) => option.expects),
"|"
),
async: false,
options,
message: message2,
get "~standard"() {
return /* @__PURE__ */ _getStandardProps(this);
},
"~run"(dataset, config2) {
let validDataset;
let typedDatasets;
let untypedDatasets;
for (const schema of this.options) {
const optionDataset = schema["~run"]({ value: dataset.value }, config2);
if (optionDataset.typed) {
if (optionDataset.issues) {
if (typedDatasets) {
typedDatasets.push(optionDataset);
} else {
typedDatasets = [optionDataset];
}
} else {
validDataset = optionDataset;
break;
}
} else {
if (untypedDatasets) {
untypedDatasets.push(optionDataset);
} else {
untypedDatasets = [optionDataset];
}
}
}
if (validDataset) {
return validDataset;
}
if (typedDatasets) {
if (typedDatasets.length === 1) {
return typedDatasets[0];
}
_addIssue(this, "type", dataset, config2, {
issues: /* @__PURE__ */ _subIssues(typedDatasets)
});
dataset.typed = true;
} else if (untypedDatasets?.length === 1) {
return untypedDatasets[0];
} else {
_addIssue(this, "type", dataset, config2, {
issues: /* @__PURE__ */ _subIssues(untypedDatasets)
});
}
return dataset;
}
};
}
// @__NO_SIDE_EFFECTS__
function pipe(...pipe2) {
return {
...pipe2[0],
pipe: pipe2,
get "~standard"() {
return /* @__PURE__ */ _getStandardProps(this);
},
"~run"(dataset, config2) {
for (const item of pipe2) {
if (item.kind !== "metadata") {
if (dataset.issues && (item.kind === "schema" || item.kind === "transformation")) {
dataset.typed = false;
break;
}
if (!dataset.issues || !config2.abortEarly && !config2.abortPipeEarly) {
dataset = item["~run"](dataset, config2);
}
}
}
return dataset;
}
};
}
// @__NO_SIDE_EFFECTS__
function safeParse(schema, input, config2) {
const dataset = schema["~run"]({ value: input }, /* @__PURE__ */ getGlobalConfig(config2));
return {
typed: dataset.typed,
success: !dataset.issues,
output: dataset.value,
issues: dataset.issues
};
}
// ../../dev/server/src/api-key.ts
var POSTGRES_PROTOCOL_REGEX = /^(postgres|postgresql):\/\//;
var decodedAPIKeySchema = pipe(
string(),
parseJson(),
object({
databaseUrl: pipe(string(), url(), regex(POSTGRES_PROTOCOL_REGEX)),
name: optional(pipe(string(), minLength(1))),
shadowDatabaseUrl: pipe(string(), url(), regex(POSTGRES_PROTOCOL_REGEX))
})
);
function encodeAPIKey(payload) {
return Buffer.from(
// we sort the keys to ensure consistent encoding
JSON.stringify(Object.fromEntries(Object.entries(payload).sort(([[key0], [key1]]) => key0.localeCompare(key1)))),
"utf8"
).toString("base64url");
}
function decodeAPIKey(apiKey) {
const serialized = Buffer.from(apiKey, "base64url").toString("utf8");
const { issues, output, success } = safeParse(decodedAPIKeySchema, serialized, { abortEarly: true });
if (!success) {
return [issues];
}
return [null, output];
}
var apiKeyValidator = async (value, ctx) => {
const { authorization } = value;
const { HTTPException } = await import("hono/http-exception");
if (!authorization) {
throw new HTTPException(401, { message: "Missing API Key" });
}
const [keyType, apiKey = "", extras] = authorization.split(" ");
if (keyType !== "Bearer" || extras) {
throw new HTTPException(401, { message: "Invalid API Key" });
}
const [issues, decodedAPIKey] = decodeAPIKey(apiKey);
if (issues) {
throw new HTTPException(401, { message: "Invalid API Key", cause: issues.join(", ") });
}
const { databaseUrl, name, shadowDatabaseUrl } = decodedAPIKey;
const { name: expectedName } = ctx.get("serverState");
if (!name) {
throw new HTTPException(401, {
message: `Wrong API Key; The Prisma Dev server running at port ${ctx.get("port")} requires an API Key from a newer version of \`prisma dev\`. Check the "${expectedName}" server's output for the updated \`DATABASE_URL\` value.`
});
}
if (name !== expectedName) {
throw new HTTPException(401, {
message: `Wrong API Key; The Prisma Dev server running at port ${ctx.get("port")} is named "${expectedName}", but the API Key is for "${name}"`
});
}
const { hostname, port } = new URL(databaseUrl);
const { port: expectedPort } = ctx.get("db");
const { hostname: shadowHostname, port: shadowPort } = new URL(shadowDatabaseUrl);
const expectedShadowPort = ctx.get("shadowDBPort");
if (hostname !== "localhost" || Number(port) !== expectedPort || shadowHostname !== "localhost" || Number(shadowPort) !== expectedShadowPort) {
throw new HTTPException(401, {
message: "Wrong API Key; Check your Prisma schema's `provider.url` value (probably defined in `.env`'s `DATABASE_URL` environment variable) is aligned with `prisma dev`'s output"
});
}
return { decodedAPIKey };
};
// ../../dev/server/src/engine.ts
import { spawn } from "child_process";
import { once } from "events";
import { mkdir as mkdir2 } from "fs/promises";
import { join } from "path";
import { setTimeout } from "timers/promises";
// ../../common/stuff/with-resolvers.ts
function withResolvers(options) {
let succeed, fail;
const promise = new Promise((resolve2, reject) => {
succeed = resolve2;
fail = reject;
});
let failOnce = (reason) => {
failOnce = succeedOnce = null;
fail(reason);
options?.onRejected?.(reason);
options?.onFulfilled?.();
};
let succeedOnce = (value) => {
succeedOnce = failOnce = null;
succeed(value);
options?.onResolved?.(value);
options?.onFulfilled?.();
};
return {
isFulfilled: () => succeedOnce === failOnce,
promise,
reject: (reason) => failOnce?.(reason),
resolve: (value) => succeedOnce?.(value)
};
}
// ../../node_modules/.pnpm/std-env@3.9.0/node_modules/std-env/dist/index.mjs
var r = /* @__PURE__ */ Object.create(null);
var i = (e) => globalThis.process?.env || import.meta.env || globalThis.Deno?.env.toObject() || globalThis.__env__ || (e ? r : globalThis);
var o = new Proxy(r, { get(e, s) {
return i()[s] ?? r[s];
}, has(e, s) {
const E = i();
return s in E || s in r;
}, set(e, s, E) {
const B = i(true);
return B[s] = E, true;
}, deleteProperty(e, s) {
if (!s)
return false;
const E = i(true);
return delete E[s], true;
}, ownKeys() {
const e = i(true);
return Object.keys(e);
} });
var t = typeof process < "u" && process.env && process.env.NODE_ENV || "";
var f = [["APPVEYOR"], ["AWS_AMPLIFY", "AWS_APP_ID", { ci: true }], ["AZURE_PIPELINES", "SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"], ["AZURE_STATIC", "INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN"], ["APPCIRCLE", "AC_APPCIRCLE"], ["BAMBOO", "bamboo_planKey"], ["BITBUCKET", "BITBUCKET_COMMIT"], ["BITRISE", "BITRISE_IO"], ["BUDDY", "BUDDY_WORKSPACE_ID"], ["BUILDKITE"], ["CIRCLE", "CIRCLECI"], ["CIRRUS", "CIRRUS_CI"], ["CLOUDFLARE_PAGES", "CF_PAGES", { ci: true }], ["CLOUDFLARE_WORKERS", "WORKERS_CI", { ci: true }], ["CODEBUILD", "CODEBUILD_BUILD_ARN"], ["CODEFRESH", "CF_BUILD_ID"], ["DRONE"], ["DRONE", "DRONE_BUILD_EVENT"], ["DSARI"], ["GITHUB_ACTIONS"], ["GITLAB", "GITLAB_CI"], ["GITLAB", "CI_MERGE_REQUEST_ID"], ["GOCD", "GO_PIPELINE_LABEL"], ["LAYERCI"], ["HUDSON", "HUDSON_URL"], ["JENKINS", "JENKINS_URL"], ["MAGNUM"], ["NETLIFY"], ["NETLIFY", "NETLIFY_LOCAL", { ci: false }], ["NEVERCODE"], ["RENDER"], ["SAIL", "SAILCI"], ["SEMAPHORE"], ["SCREWDRIVER"], ["SHIPPABLE"], ["SOLANO", "TDDIUM"], ["STRIDER"], ["TEAMCITY", "TEAMCITY_VERSION"], ["TRAVIS"], ["VERCEL", "NOW_BUILDER"], ["VERCEL", "VERCEL", { ci: false }], ["VERCEL", "VERCEL_ENV", { ci: false }], ["APPCENTER", "APPCENTER_BUILD_ID"], ["CODESANDBOX", "CODESANDBOX_SSE", { ci: false }], ["CODESANDBOX", "CODESANDBOX_HOST", { ci: false }], ["STACKBLITZ"], ["STORMKIT"], ["CLEAVR"], ["ZEABUR"], ["CODESPHERE", "CODESPHERE_APP_ID", { ci: true }], ["RAILWAY", "RAILWAY_PROJECT_ID"], ["RAILWAY", "RAILWAY_SERVICE_ID"], ["DENO-DEPLOY", "DENO_DEPLOYMENT_ID"], ["FIREBASE_APP_HOSTING", "FIREBASE_APP_HOSTING", { ci: true }]];
function b() {
if (globalThis.process?.env)
for (const e of f) {
const s = e[1] || e[0];
if (globalThis.process?.env[s])
return { name: e[0].toLowerCase(), ...e[2] };
}
return globalThis.process?.env?.SHELL === "/bin/jsh" && globalThis.process?.versions?.webcontainer ? { name: "stackblitz", ci: false } : { name: "", ci: false };
}
var l = b();
var p = l.name;
function n(e) {
return e ? e !== "false" : false;
}
var I = globalThis.process?.platform || "";
var T = n(o.CI) || l.ci !== false;
var R = n(globalThis.process?.stdout && globalThis.process?.stdout.isTTY);
var d = n(o.DEBUG);
var a = t === "test" || n(o.TEST);
var v = n(o.MINIMAL) || T || a || !R;
var A = /^win/i.test(I);
var M = /^linux/i.test(I);
var m = /^darwin/i.test(I);
var Y = !n(o.NO_COLOR) && (n(o.FORCE_COLOR) || (R || A) && o.TERM !== "dumb" || T);
var C = (globalThis.process?.versions?.node || "").replace(/^v/, "") || null;
var V = Number(C?.split(".")[0]) || null;
var W = globalThis.process || /* @__PURE__ */ Object.create(null);
var _ = { versions: {} };
var y = new Proxy(W, { get(e, s) {
if (s === "env")
return o;
if (s in e)
return e[s];
if (s in _)
return _[s];
} });
var O = globalThis.process?.release?.name === "node";
var c = !!globalThis.Bun || !!globalThis.process?.versions?.bun;
var D = !!globalThis.Deno;
var L = !!globalThis.fastly;
var S = !!globalThis.Netlify;
var u = !!globalThis.EdgeRuntime;
var N = globalThis.navigator?.userAgent === "Cloudflare-Workers";
var F = [[S, "netlify"], [u, "edge-light"], [N, "workerd"], [L, "fastly"], [D, "deno"], [c, "bun"], [O, "node"]];
function G() {
const e = F.find((s) => s[0]);
if (e)
return { name: e[1] };
}
var P = G();
var K = P?.name || "";
// ../../dev/server/src/filesystem.ts
import { createWriteStream, WriteStream } from "fs";
import { access, chmod, constants, mkdir, readdir, readFile, rm, writeFile } from "fs/promises";
import { promisify } from "util";
import { unzip } from "zlib";
// ../../node_modules/.pnpm/env-paths@3.0.0/node_modules/env-paths/index.js
import path from "path";
import os from "os";
import process2 from "process";
var homedir = os.homedir();
var tmpdir = os.tmpdir();
var { env } = process2;
var macos = (name) => {
const library = path.join(homedir, "Library");
return {
data: path.join(library, "Application Support", name),
config: path.join(library, "Preferences", name),
cache: path.join(library, "Caches", name),
log: path.join(library, "Logs", name),
temp: path.join(tmpdir, name)
};
};
var windows = (name) => {
const appData = env.APPDATA || path.join(homedir, "AppData", "Roaming");
const localAppData = env.LOCALAPPDATA || path.join(homedir, "AppData", "Local");
return {
// Data/config/cache/log are invented by me as Windows isn't opinionated about this
data: path.join(localAppData, name, "Data"),
config: path.join(appData, name, "Config"),
cache: path.join(localAppData, name, "Cache"),
log: path.join(localAppData, name, "Log"),
temp: path.join(tmpdir, name)
};
};
var linux = (name) => {
const username = path.basename(homedir);
return {
data: path.join(env.XDG_DATA_HOME || path.join(homedir, ".local", "share"), name),
config: path.join(env.XDG_CONFIG_HOME || path.join(homedir, ".config"), name),
cache: path.join(env.XDG_CACHE_HOME || path.join(homedir, ".cache"), name),
// https://wiki.debian.org/XDGBaseDirectorySpecification#state
log: path.join(env.XDG_STATE_HOME || path.join(homedir, ".local", "state"), name),
temp: path.join(tmpdir, username, name)
};
};
function envPaths(name, { suffix = "nodejs" } = {}) {
if (typeof name !== "string") {
throw new TypeError(`Expected a string, got ${typeof name}`);
}
if (suffix) {
name += `-${suffix}`;
}
if (process2.platform === "darwin") {
return macos(name);
}
if (process2.platform === "win32") {
return windows(name);
}
return linux(name);
}
// ../../node_modules/.pnpm/grammex@3.1.10/node_modules/grammex/dist/utils.js
var isArray = (value) => {
return Array.isArray(value);
};
var isFunction = (value) => {
return typeof value === "function";
};
var isFunctionNullary = (value) => {
return value.length === 0;
};
var isFunctionStrictlyNullaryOrUnary = (() => {
const { toString } = Function.prototype;
const re = /(?:^\(\s*(?:[^,.()]|\.(?!\.\.))*\s*\)\s*=>|^\s*[a-zA-Z$_][a-zA-Z0-9$_]*\s*=>)/;
return (value) => {
return (value.length === 0 || value.length === 1) && re.test(toString.call(value));
};
})();
var isNumber = (value) => {
return typeof value === "number";
};
var isObject = (value) => {
return typeof value === "object" && value !== null;
};
var isRegExp = (value) => {
return value instanceof RegExp;
};
var isRegExpCapturing = /* @__PURE__ */ (() => {
const sourceRe = /\\\(|\((?!\?(?::|=|!|<=|<!))/;
return (re) => {
return sourceRe.test(re.source);
};
})();
var isRegExpStatic = /* @__PURE__ */ (() => {
const sourceRe = /^[a-zA-Z0-9_-]+$/;
return (re) => {
return sourceRe.test(re.source) && !re.flags.includes("i");
};
})();
var isString = (value) => {
return typeof value === "string";
};
var isUndefined = (value) => {
return value === void 0;
};
var memoize = (fn) => {
const cache = /* @__PURE__ */ new Map();
return (arg) => {
const cached = cache.get(arg);
if (cached !== void 0)
return cached;
const value = fn(arg);
cache.set(arg, value);
return value;
};
};
// ../../node_modules/.pnpm/grammex@3.1.10/node_modules/grammex/dist/index.js
var parse = (input, rule, options = {}) => {
const state = { cache: {}, input, index: 0, indexBacktrackMax: 0, options, output: [] };
const matched = resolve(rule)(state);
const indexMax = Math.max(state.index, state.indexBacktrackMax);
if (matched && state.index === input.length) {
return state.output;
} else {
throw new Error(`Failed to parse at index ${indexMax}`);
}
};
var match = (target, handler) => {
if (isArray(target)) {
return chars(target, handler);
} else if (isString(target)) {
return string2(target, handler);
} else {
return regex2(target, handler);
}
};
var chars = (target, handler) => {
const charCodes = {};
for (const char of target) {
if (char.length !== 1)
throw new Error(`Invalid character: "${char}"`);
const charCode = char.charCodeAt(0);
charCodes[charCode] = true;
}
return (state) => {
const input = state.input;
let indexStart = state.index;
let indexEnd = indexStart;
while (indexEnd < input.length) {
const charCode = input.charCodeAt(indexEnd);
if (!(charCode in charCodes))
break;
indexEnd += 1;
}
if (indexEnd > indexStart) {
if (!isUndefined(handler) && !state.options.silent) {
const target2 = input.slice(indexStart, indexEnd);
const output = isFunction(handler) ? handler(target2, input, `${indexStart}`) : handler;
if (!isUndefined(output)) {
state.output.push(output);
}
}
state.index = indexEnd;
}
return true;
};
};
var regex2 = (target, handler) => {
if (isRegExpStatic(target)) {
return string2(target.source, handler);
} else {
const source = target.source;
const flags = target.flags.replace(/y|$/, "y");
const re = new RegExp(source, flags);
if (isRegExpCapturing(target) && isFunction(handler) && !isFunctionStrictlyNullaryOrUnary(handler)) {
return regexCapturing(re, handler);
} else {
return regexNonCapturing(re, handler);
}
}
};
var regexCapturing = (re, handler) => {
return (state) => {
const indexStart = state.index;
const input = state.input;
re.lastIndex = indexStart;
const match2 = re.exec(input);
if (match2) {
const indexEnd = re.lastIndex;
if (!state.options.silent) {
const output = handler(...match2, input, `${indexStart}`);
if (!isUndefined(output)) {
state.output.push(output);
}
}
state.index = indexEnd;
return true;
} else {
return false;
}
};
};
var regexNonCapturing = (re, handler) => {
return (state) => {
const indexStart = state.index;
const input = state.input;
re.lastIndex = indexStart;
const matched = re.test(input);
if (matched) {
const indexEnd = re.lastIndex;
if (!isUndefined(handler) && !state.options.silent) {
const output = isFunction(handler) ? handler(input.slice(indexStart, indexEnd), input, `${indexStart}`) : handler;
if (!isUndefined(output)) {
state.output.push(output);
}
}
state.index = indexEnd;
return true;
} else {
return false;
}
};
};
var string2 = (target, handler) => {
return (state) => {
const indexStart = state.index;
const input = state.input;
const matched = input.startsWith(target, indexStart);
if (matched) {
if (!isUndefined(handler) && !state.options.silent) {
const output = isFunction(handler) ? handler(target, input, `${indexStart}`) : handler;
if (!isUndefined(output)) {
state.output.push(output);
}
}
state.index += target.length;
return true;
} else {
return false;
}
};
};
var repeat = (rule, min, max, handler) => {
const erule = resolve(rule);
const isBacktrackable = min > 1;
return memoizable(handleable(backtrackable((state) => {
let repetitions = 0;
while (repetitions < max) {
const index = state.index;
const matched = erule(state);
if (!matched)
break;
repetitions += 1;
if (state.index === index)
break;
}
return repetitions >= min;
}, isBacktrackable), handler));
};
var optional2 = (rule, handler) => {
return repeat(rule, 0, 1, handler);
};
var star = (rule, handler) => {
return repeat(rule, 0, Infinity, handler);
};
var and = (rules, handler) => {
const erules = rules.map(resolve);
return memoizable(handleable(backtrackable((state) => {
for (let i2 = 0, l2 = erules.length; i2 < l2; i2++) {
if (!erules[i2](state))
return false;
}
return true;
}), handler));
};
var or = (rules, handler) => {
const erules = rules.map(resolve);
return memoizable(handleable((state) => {
for (let i2 = 0, l2 = erules.length; i2 < l2; i2++) {
if (erules[i2](state))
return true;
}
return false;
}, handler));
};
var backtrackable = (rule, enabled = true, force = false) => {
const erule = resolve(rule);
if (!enabled)
return erule;
return (state) => {
const index = state.index;
const length = state.output.length;
const matched = erule(state);
if (!matched && !force) {
state.indexBacktrackMax = Math.max(state.indexBacktrackMax, state.index);
}
if (!matched || force) {
state.index = index;
if (state.output.length !== length) {
state.output.length = length;
}
}
return matched;
};
};
var handleable = (rule, handler) => {
const erule = resolve(rule);
if (!handler)
return erule;
return (state) => {
if (state.options.silent)
return erule(state);
const length = state.output.length;
const matched = erule(state);
if (matched) {
const outputs = state.output.splice(length, Infinity);
const output = handler(outputs);
if (!isUndefined(output)) {
state.output.push(output);
}
return true;
} else {
return false;
}
};
};
var memoizable = /* @__PURE__ */ (() => {
let RULE_ID = 0;
return (rule) => {
const erule = resolve(rule);
const ruleId = RULE_ID += 1;
return (state) => {
var _a;
if (state.options.memoization === false)
return erule(state);
const indexStart = state.index;
const cache = (_a = state.cache)[ruleId] || (_a[ruleId] = { indexMax: -1, queue: [] });
const cacheQueue = cache.queue;
const isPotentiallyCached = indexStart <= cache.indexMax;
if (isPotentiallyCached) {
const cacheStore = cache.store || (cache.store = /* @__PURE__ */ new Map());
if (cacheQueue.length) {
for (let i2 = 0, l2 = cacheQueue.length; i2 < l2; i2 += 2) {
const key = cacheQueue[i2 * 2];
const value = cacheQueue[i2 * 2 + 1];
cacheStore.set(key, value);
}
cacheQueue.length = 0;
}
const cached = cacheStore.get(indexStart);
if (cached === false) {
return false;
} else if (isNumber(cached)) {
state.index = cached;
return true;
} else if (cached) {
state.index = cached.index;
if (cached.output?.length) {
state.output.push(...cached.output);
}
return true;
}
}
const lengthStart = state.output.length;
const matched = erule(state);
cache.indexMax = Math.max(cache.indexMax, indexStart);
if (matched) {
const indexEnd = state.index;
const lengthEnd = state.output.length;
if (lengthEnd > lengthStart) {
const output = state.output.slice(lengthStart, lengthEnd);
cacheQueue.push(indexStart, { index: indexEnd, output });
} else {
cacheQueue.push(indexStart, indexEnd);
}
return true;
} else {
cacheQueue.push(indexStart, false);
return false;
}
};
};
})();
var lazy = (getter) => {
let erule;
return (state) => {
erule || (erule = resolve(getter()));
return erule(state);
};
};
var resolve = memoize((rule) => {
if (isFunction(rule)) {
if (isFunctionNullary(rule)) {
return lazy(rule);
} else {
return rule;
}
}
if (isString(rule) || isRegExp(rule)) {
return match(rule);
}
if (isArray(rule)) {
return and(rule);
}
if (isObject(rule)) {
return or(Object.values(rule));
}
throw new Error("Invalid rule");
});
// ../../node_modules/.pnpm/zeptomatch@2.0.2/node_modules/zeptomatch/dist/utils.js
var identity = (value) => {
return value;
};
var makeParser = (grammar) => {
return (input) => {
return parse(input, grammar, { memoization: false }).join("");
};
};
var memoize2 = (fn) => {
const cache = {};
return (arg) => {
return cache[arg] ?? (cache[arg] = fn(arg));
};
};
// ../../node_modules/.pnpm/zeptomatch@2.0.2/node_modules/zeptomatch/dist/range.js
var ALPHABET = "abcdefghijklmnopqrstuvwxyz";
var int2alpha = (int) => {
let alpha = "";
while (int > 0) {
const reminder = (int - 1) % 26;
alpha = ALPHABET[reminder] + alpha;
int = Math.floor((int - 1) / 26);
}
return alpha;
};
var alpha2int = (str) => {
let int = 0;
for (let i2 = 0, l2 = str.length; i2 < l2; i2++) {
int = int * 26 + ALPHABET.indexOf(str[i2]) + 1;
}
return int;
};
var makeRangeInt = (start, end) => {
if (end < start)
return makeRangeInt(end, start);
const range = [];
while (start <= end) {
range.push(start++);
}
return range;
};
var makeRangePaddedInt = (start, end, paddingLength) => {
return makeRangeInt(start, end).map((int) => String(int).padStart(paddingLength, "0"));
};
var makeRangeAlpha = (start, end) => {
return makeRangeInt(alpha2int(start), alpha2int(end)).map(int2alpha);
};
// ../../node_modules/.pnpm/zeptomatch@2.0.2/node_modules/zeptomatch/dist/convert/grammar.js
var Escaped = match(/\\./, identity);
var Escape = match(/[$.*+?^(){}[\]\|]/, (char) => `\\${char}`);
var Slash = match(/[\\/]/, "[\\\\/]");
var Passthrough = match(/./, identity);
var NegationOdd = match(/^(?:!!)*!(.*)$/, (_2, glob) => `(?!^${parser_default(glob)}$).*?`);
var NegationEven = match(/^(!!)+/, "");
var Negation = or([NegationOdd, NegationEven]);
var StarStarBetween = match(/\/(\*\*\/)+/, "(?:[\\\\/].+[\\\\/]|[\\\\/])");
var StarStarStart = match(/^(\*\*\/)+/, "(?:^|.*[\\\\/])");
var StarStarEnd = match(/\/(\*\*)$/, "(?:[\\\\/].*|$)");
var StarStarNone = match(/\*\*/, ".*");
var StarStar = or([StarStarBetween, StarStarStart, StarStarEnd, StarStarNone]);
var StarDouble = match(/\*\/(?!\*\*\/|\*$)/, "[^\\\\/]*[\\\\/]");
var StarSingle = match(/\*/, "[^\\\\/]*");
var Star = or([StarDouble, StarSingle]);
var Question = match("?", "[^\\\\/]");
var ClassOpen = match("[", identity);
var ClassClose = match("]", identity);
var ClassNegation = match(/[!^]/, "^\\\\/");
var ClassRange = match(/[a-z]-[a-z]|[0-9]-[0-9]/i, identity);
var ClassEscape = match(/[$.*+?^(){}[\|]/, (char) => `\\${char}`);
var ClassPassthrough = match(/[^\]]/, identity);
var ClassValue = or([Escaped, ClassEscape, ClassRange, ClassPassthrough]);
var Class = and([ClassOpen, optional2(ClassNegation), star(ClassValue), ClassClose]);
var RangeOpen = match("{", "(?:");
var RangeClose = match("}", ")");
var RangeNumeric = match(/(\d+)\.\.(\d+)/, (_2, $1, $2) => makeRangePaddedInt(+$1, +$2, Math.min($1.length, $2.length)).join("|"));
var RangeAlphaLower = match(/([a-z]+)\.\.([a-z]+)/, (_2, $1, $2) => makeRangeAlpha($1, $2).join("|"));
var RangeAlphaUpper = match(/([A-Z]+)\.\.([A-Z]+)/, (_2, $1, $2) => makeRangeAlpha($1.toLowerCase(), $2.toLowerCase()).join("|").toUpperCase());
var RangeValue = or([RangeNumeric, RangeAlphaLower, RangeAlphaUpper]);
var Range = and([RangeOpen, RangeValue, RangeClose]);
var BracesOpen = match("{", "(?:");
var BracesClose = match("}", ")");
var BracesComma = match(",", "|");
var BracesEscape = match(/[$.*+?^(){[\]\|]/, (char) => `\\${char}`);
var BracesPassthrough = match(/[^}]/, identity);
var BracesNested = lazy(() => Braces);
var BracesValue = or([StarStar, Star, Question, Class, Range, BracesNested, Escaped, BracesEscape, BracesComma, BracesPassthrough]);
var Braces = and([BracesOpen, star(BracesValue), BracesClose]);
var Grammar = star(or([Negation, StarStar, Star, Question, Class, Range, Braces, Escaped, Escape, Slash, Passthrough]));
var grammar_default = Grammar;
// ../../node_modules/.pnpm/zeptomatch@2.0.2/node_modules/zeptomatch/dist/convert/parser.js
var parser = makeParser(grammar_default);
var parser_default = parser;
// ../../node_modules/.pnpm/zeptomatch@2.0.2/node_modules/zeptomatch/dist/normalize/grammar.js
var Escaped2 = match(/\\./, identity);
var Passthrough2 = match(/./, identity);
var StarStarStar = match(/\*\*\*+/, "*");
var StarStarNoLeft = match(/([^/{[(!])\*\*/, (_2, $1) => `${$1}*`);
var StarStarNoRight = match(/(^|.)\*\*(?=[^*/)\]}])/, (_2, $1) => `${$1}*`);
var Grammar2 = star(or([Escaped2, StarStarStar, StarStarNoLeft, StarStarNoRight, Passthrough2]));
var grammar_default2 = Grammar2;
// ../../node_modules/.pnpm/zeptomatch@2.0.2/node_modules/zeptomatch/dist/normalize/parser.js
var parser2 = makeParser(grammar_default2);
var parser_default2 = parser2;
// ../../node_modules/.pnpm/zeptomatch@2.0.2/node_modules/zeptomatch/dist/index.js
var zeptomatch = (glob, path2) => {
if (Array.isArray(glob)) {
const res = glob.map(zeptomatch.compile);
const isMatch = res.some((re) => re.test(path2));
return isMatch;
} else {
const re = zeptomatch.compile(glob);
const isMatch = re.test(path2);
return isMatch;
}
};
zeptomatch.compile = memoize2((glob) => {
return new RegExp(`^${parser_default(parser_default2(glob))}[\\\\/]?$`, "s");
});
var dist_default = zeptomatch;
// ../../dev/server/src/filesystem.ts
var GLOBAL_DIR_ROOT_PATH = envPaths("prisma-dev");
var unzipAsync = promisify(unzip);
function getEngineCacheDirPath(version, commitHash) {
return `${GLOBAL_DIR_ROOT_PATH.cache}/engine/${version}/${commitHash}`;
}
function getDataDirPath(name) {
return `${GLOBAL_DIR_ROOT_PATH.data}/${name}`;
}
async function checkFileExists(filePath) {
try {
await access(filePath, constants.F_OK);
return true;
} catch (error) {
if (isFileNotFoundError(error)) {
return false;
}
throw error;
}
}
async function writeBinaryFile(buffer, path2) {
const result = await unzipAsync(buffer);
await writeFile(path2, result);
await chmod(path2, "755");
}
async function streamAsTextTo(file, path2) {
await file.stream().pipeTo(WriteStream.toWeb(createWriteStream(path2, { encoding: "utf-8" })));
}
function isFileNotFoundError(error) {
return error != null && typeof error === "object" && "code" in error && error.code === "ENOENT";
}
async function readFileAsText(path2) {
try {
return await readFile(path2, { encoding: "utf-8" });
} catch (error) {
if (isFileNotFoundError(error)) {
return null;
}
throw error;
}
}
async function ensureDirectory(path2) {
await mkdir(path2, { recursive: true });
}
async function readDirectoryNames(path2, globs) {
try {
const dirents = await readdir(path2, { withFileTypes: true });
return dirents.reduce((names, dirent) => {
if (dirent.isDirectory() && !dirent.name.startsWith(".") && (!globs || dist_default(globs, dirent.name))) {
names.push(dirent.name);
}
return names;
}, []);
} catch (error) {
if (isFileNotFoundError(error)) {
return [];
}
throw error;
}
}
// ../../dev/server/src/engine.ts
var {
PRISMA_DEV_FORCE_ENGINE_BINARY_DOWNLOAD,
PRISMA_DEV_FORCE_ENGINE_BINARY_PATH,
PRISMA_DEV_FORCE_NETWORK_DELAY_MS
} = y.env;
var Engine = class _Engine {
static #enginesBySchemaAndClientVersion = /* @__PURE__ */ new Map();
#options;
#session;
constructor(options) {
this.#options = options;
this.#session = null;
}
static async get(options) {
const { debug } = options;
const engineId = `${options.schemaHash}:${options.clientVersion}`;
try {
const engine = _Engine.#enginesBySchemaAndClientVersion.get(engineId);
if (engine) {
return engine;
}
const newEngine = new _Engine(options);
_Engine.#enginesBySchemaAndClientVersion.set(engineId, newEngine);
if (debug) {
console.debug("[Query Engine] starting...", options);
}
await newEngine.start();
if (debug) {
console.debug("[Query Engine] started!");
}
return newEngine;
} finally {
void _Engine.stopAll(engineId);
}
}
static async stopAll(excludingEngineId) {
const results = await Promise.allSettled(
Array.from(_Engine.#enginesBySchemaAndClientVersion.entries()).filter(([engineId]) => engineId !== excludingEngineId).map(async ([engineId, engine]) => {
try {
await engine.stop();
} finally {
_Engine.#enginesBySchemaAndClientVersion.delete(engineId);
}
})
);
const errors = results.filter((result) => result.status === "rejected").map((result) => result.reason);
if (errors.length > 0) {
throw new AggregateError(errors, "Failed to stop engines");
}
}
async commitTransaction(transactionId, headers) {
return await this.#commitOrRollbackTransaction(transactionId, headers, "commit");
}
async request(body, headers) {
const { url: url2 } = await this.start();
const sanitizedHeaders = this.#sanitizeHeaders(headers);
const response = await fetch(url2, {
body: typeof body === "string" ? body : JSON.stringify(body),
headers: { ...sanitizedHeaders, "Content-Type": "application/json" },
method: "POST"
});
if (!response.ok) {
throw await EngineHttpError.fromResponse(response);
}
return await response.text();
}
async rollbackTransaction(transactionId, headers) {
return await this.#commitOrRollbackTransaction(transactionId, headers, "rollback");
}
async startTransaction(options, headers) {
const { url: url2 } = await this.start();
const sanitizedHeaders = this.#sanitizeHeaders(headers);
const response = await fetch(`${url2}/transaction/start`, {
body: JSON.stringify(options),
headers: { ...sanitizedHeaders, "Content-Type": "application/json" },
method: "POST"
});
if (!response.ok) {
throw await EngineHttpError.fromResponse(response);
}
return await response.json();
}
async start() {
if (this.#session != null) {
return await this.#session;
}
const { promise: session, reject, resolve: resolve2 } = withResolvers();
this.#session = session;
const engineBinaryPath = PRISMA_DEV_FORCE_ENGINE_BINARY_PATH || await this.#getEngineBinaryPath();
if (this.#options.debug) {
console.debug("[Query Engine] spinning up at path...", engineBinaryPath);
}
const { proxySignals } = await import("foreground-child/proxy-signals");
const childProcess = spawn(
engineBinaryPath,
["--enable-raw-queries", "--enable-telemetry-in-response", "--port", "0"],
{
env: {
LOG_QUERIES: "y",