@prisma/composer 0.6.0-dev.21 → 0.6.0-dev.23
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/{app-config-aIrriqVU-Dpj1RqnY.d.mts → app-config-BinBcpPf-1akTl5h4.d.mts} +90 -3
- package/dist/{app-config-aIrriqVU-Dpj1RqnY.d.mts.map → app-config-BinBcpPf-1akTl5h4.d.mts.map} +1 -1
- package/dist/config-647Wkm51.d.mts +1 -0
- package/dist/config.d.mts +3 -3
- package/dist/control.d.mts +46 -5
- package/dist/control.d.mts.map +1 -1
- package/dist/control.mjs +8 -7
- package/dist/control.mjs.map +1 -1
- package/dist/deploy-647Wkm51.d.mts +1 -0
- package/dist/deploy.d.mts +2 -2
- package/dist/{deployment-summary-DswOl_9E-C03NJ98H.mjs → deployment-summary-DswOl_9E-B9MhYYDt.mjs} +4 -4
- package/dist/deployment-summary-DswOl_9E-B9MhYYDt.mjs.map +1 -0
- package/dist/dist-CVk7Pk4B.mjs +42 -0
- package/dist/dist-CVk7Pk4B.mjs.map +1 -0
- package/dist/{execute-deploy-destroy-DfVJUICu-Dbgn1GR_.mjs → execute-deploy-destroy-DRl6Tfg9-B8LE2Lh5.mjs} +153 -23
- package/dist/execute-deploy-destroy-DRl6Tfg9-B8LE2Lh5.mjs.map +1 -0
- package/dist/{execute-dev-BMTFWfFc-CGDFqR4w.mjs → execute-dev-BMTFWfFc-7MifQgpp.mjs} +34 -34
- package/dist/execute-dev-BMTFWfFc-7MifQgpp.mjs.map +1 -0
- package/dist/{execute-log-Cay9hlKW-ChlIv192.mjs → execute-log-Cay9hlKW-BcvKPOW1.mjs} +5 -5
- package/dist/execute-log-Cay9hlKW-BcvKPOW1.mjs.map +1 -0
- package/dist/local-target.d.mts +1 -1
- package/dist/nextjs-control.d.mts +3 -3
- package/dist/nextjs-control.mjs +138 -34
- package/dist/nextjs-control.mjs.map +1 -1
- package/dist/node-control.d.mts +3 -3
- package/dist/node-control.mjs +21814 -55
- package/dist/node-control.mjs.map +1 -1
- package/dist/{pipeline-AoW8zq4I-CUon5KZH.mjs → pipeline-AoW8zq4I-Dg8xQ7nC.mjs} +18 -18
- package/dist/pipeline-AoW8zq4I-Dg8xQ7nC.mjs.map +1 -0
- package/dist/report.d.mts +2 -2
- package/dist/report.mjs +1 -1
- package/dist/{result-CY_TB7bn.mjs → result-D95kAAek.mjs} +13 -13
- package/dist/result-D95kAAek.mjs.map +1 -0
- package/dist/{run-alchemy-D44OZlyB-gVq_0gf4.mjs → run-alchemy-D44OZlyB-Cw5CVbUQ.mjs} +6 -6
- package/dist/run-alchemy-D44OZlyB-Cw5CVbUQ.mjs.map +1 -0
- package/dist/run-report-C2o98uD--AX8kpz4Q.mjs +60 -0
- package/dist/run-report-C2o98uD--AX8kpz4Q.mjs.map +1 -0
- package/package.json +11 -11
- package/dist/config-BeBRB-6m.d.mts +0 -1
- package/dist/deploy-BeBRB-6m.d.mts +0 -1
- package/dist/deployment-summary-DswOl_9E-C03NJ98H.mjs.map +0 -1
- package/dist/execute-deploy-destroy-DfVJUICu-Dbgn1GR_.mjs.map +0 -1
- package/dist/execute-dev-BMTFWfFc-CGDFqR4w.mjs.map +0 -1
- package/dist/execute-log-Cay9hlKW-ChlIv192.mjs.map +0 -1
- package/dist/pipeline-AoW8zq4I-CUon5KZH.mjs.map +0 -1
- package/dist/result-CY_TB7bn.mjs.map +0 -1
- package/dist/run-alchemy-D44OZlyB-gVq_0gf4.mjs.map +0 -1
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { t as CliStructuredError } from "./errors-0e8IVwzi.mjs";
|
|
2
2
|
import { t as containerEnv } from "./container-transport-DKmKg5JQ-DKWs0ubK.mjs";
|
|
3
|
-
import { n as ok, r as okVoid, s as toStructured, t as notOk } from "./result-
|
|
4
|
-
import {
|
|
5
|
-
import { n as
|
|
6
|
-
import { n as
|
|
7
|
-
import
|
|
8
|
-
import * as
|
|
3
|
+
import { n as ok, r as okVoid, s as toStructured, t as notOk } from "./result-D95kAAek.mjs";
|
|
4
|
+
import { a as writeRunReport, i as toRunReport, r as resolveRunReportPath, t as RUN_REPORT_FILE_ENV } from "./run-report-C2o98uD--AX8kpz4Q.mjs";
|
|
5
|
+
import { n as readDeploymentSummary, t as DEPLOYMENT_RESULT_FILE_ENV } from "./deployment-summary-DswOl_9E-B9MhYYDt.mjs";
|
|
6
|
+
import { n as spawnAlchemy, t as alchemyInvocation } from "./run-alchemy-D44OZlyB-Cw5CVbUQ.mjs";
|
|
7
|
+
import { n as runPipeline } from "./pipeline-AoW8zq4I-Dg8xQ7nC.mjs";
|
|
8
|
+
import * as fs$1 from "node:fs";
|
|
9
|
+
import * as path$1 from "node:path";
|
|
9
10
|
import { spawnSync } from "node:child_process";
|
|
10
11
|
import { randomUUID } from "node:crypto";
|
|
11
12
|
//#region ../../0-framework/3-tooling/cli/dist/generate-stack-BL6htaQb.mjs
|
|
@@ -14,7 +15,7 @@ const GENERATED_DIR = ".prisma-composer";
|
|
|
14
15
|
const GENERATED_FILE = "alchemy.run.ts";
|
|
15
16
|
/** A relative import specifier from `.prisma-composer/alchemy.run.ts` to `target` (posix separators). */
|
|
16
17
|
function relativeImportSpecifier(generatedDir, target) {
|
|
17
|
-
const rel = path.relative(generatedDir, target).split(path.sep).join("/");
|
|
18
|
+
const rel = path$1.relative(generatedDir, target).split(path$1.sep).join("/");
|
|
18
19
|
return rel.startsWith(".") ? rel : `./${rel}`;
|
|
19
20
|
}
|
|
20
21
|
function quote(value) {
|
|
@@ -34,7 +35,7 @@ function renderOptions(input) {
|
|
|
34
35
|
}
|
|
35
36
|
/** Renders the stack module's source (tests assert on it without touching disk) — uses `//` headers, not a block comment, since a cwd path with a star-slash could close one early. */
|
|
36
37
|
function renderStackFile(input) {
|
|
37
|
-
const generatedDir = path.join(input.cwd, GENERATED_DIR);
|
|
38
|
+
const generatedDir = path$1.join(input.cwd, GENERATED_DIR);
|
|
38
39
|
const appImport = relativeImportSpecifier(generatedDir, input.entryPath);
|
|
39
40
|
const configImport = relativeImportSpecifier(generatedDir, input.configPath);
|
|
40
41
|
return `// Generated by \`prisma-composer deploy\`/\`prisma-composer destroy\` — overwritten on every
|
|
@@ -55,15 +56,15 @@ ${renderOptions(input)}
|
|
|
55
56
|
}
|
|
56
57
|
/** Writes the stack file, returning its absolute path. */
|
|
57
58
|
function writeStackFile(input) {
|
|
58
|
-
const generatedDir = path.join(input.cwd, GENERATED_DIR);
|
|
59
|
-
fs.mkdirSync(generatedDir, { recursive: true });
|
|
60
|
-
const filePath = path.join(generatedDir, GENERATED_FILE);
|
|
61
|
-
fs.writeFileSync(filePath, renderStackFile(input));
|
|
59
|
+
const generatedDir = path$1.join(input.cwd, GENERATED_DIR);
|
|
60
|
+
fs$1.mkdirSync(generatedDir, { recursive: true });
|
|
61
|
+
const filePath = path$1.join(generatedDir, GENERATED_FILE);
|
|
62
|
+
fs$1.writeFileSync(filePath, renderStackFile(input));
|
|
62
63
|
return filePath;
|
|
63
64
|
}
|
|
64
|
-
const GENERATED_STACK_RELATIVE_PATH = path.join(GENERATED_DIR, GENERATED_FILE);
|
|
65
|
+
const GENERATED_STACK_RELATIVE_PATH = path$1.join(GENERATED_DIR, GENERATED_FILE);
|
|
65
66
|
//#endregion
|
|
66
|
-
//#region ../../0-framework/3-tooling/cli/dist/execute-deploy-destroy-
|
|
67
|
+
//#region ../../0-framework/3-tooling/cli/dist/execute-deploy-destroy-DRl6Tfg9.mjs
|
|
67
68
|
/** A stage name must be a valid git ref (deploy-cli.md) — checked via `git check-ref-format`, never silently normalized. Runs before anything platform-specific. */
|
|
68
69
|
function validateStageName(stage) {
|
|
69
70
|
const result = spawnSync("git", ["check-ref-format", `refs/heads/${stage}`], { stdio: "ignore" });
|
|
@@ -80,8 +81,8 @@ function validateStageName(stage) {
|
|
|
80
81
|
const ALCHEMY_STATE_DIR = ".alchemy";
|
|
81
82
|
/** Destroy guardrail (moved from main.ts): true when `<cwd>/.alchemy` is missing or empty — likely wrong directory or nothing deployed yet. */
|
|
82
83
|
function hasNoLocalDeployState(cwd) {
|
|
83
|
-
const stateDir = path.join(cwd, ALCHEMY_STATE_DIR);
|
|
84
|
-
return !(fs.existsSync(stateDir) && fs.readdirSync(stateDir).length > 0);
|
|
84
|
+
const stateDir = path$1.join(cwd, ALCHEMY_STATE_DIR);
|
|
85
|
+
return !(fs$1.existsSync(stateDir) && fs$1.readdirSync(stateDir).length > 0);
|
|
85
86
|
}
|
|
86
87
|
async function executeDeploy(input, deps, cwd) {
|
|
87
88
|
const outcome = await runStackPipeline("deploy", {
|
|
@@ -90,8 +91,18 @@ async function executeDeploy(input, deps, cwd) {
|
|
|
90
91
|
stage: input.stage,
|
|
91
92
|
cwd,
|
|
92
93
|
onEvent: void 0,
|
|
93
|
-
deps
|
|
94
|
+
deps,
|
|
95
|
+
reportId: input.reportId
|
|
94
96
|
});
|
|
97
|
+
const reportPath = resolveRunReportPath(input.reportPath, process.env[RUN_REPORT_FILE_ENV], cwd);
|
|
98
|
+
if (reportPath !== void 0) writeRunReport(reportPath, toRunReport({
|
|
99
|
+
summary: outcome.ok ? outcome.value : void 0,
|
|
100
|
+
stage: input.stage,
|
|
101
|
+
failure: outcome.ok ? void 0 : {
|
|
102
|
+
code: outcome.failure.code,
|
|
103
|
+
message: outcome.failure.message
|
|
104
|
+
}
|
|
105
|
+
}));
|
|
95
106
|
if (!outcome.ok) return outcome;
|
|
96
107
|
return ok({ summary: outcome.value });
|
|
97
108
|
}
|
|
@@ -102,15 +113,123 @@ async function executeDestroy(input, deps, cwd) {
|
|
|
102
113
|
stage: input.target.kind === "stage" ? input.target.stage : void 0,
|
|
103
114
|
cwd,
|
|
104
115
|
onEvent: input.onEvent,
|
|
105
|
-
deps
|
|
116
|
+
deps,
|
|
117
|
+
reportId: void 0
|
|
106
118
|
});
|
|
107
119
|
if (!outcome.ok) return outcome;
|
|
108
120
|
return okVoid();
|
|
109
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Opens a session per extension that declares a reporter. A `begin` that
|
|
124
|
+
* throws costs that extension its reporting and nothing else — the deploy
|
|
125
|
+
* has not started, and refusing to run it because an observer failed would
|
|
126
|
+
* invert the relationship.
|
|
127
|
+
*/
|
|
128
|
+
async function beginReporters(extensions, context) {
|
|
129
|
+
return (await Promise.all(extensions.map(async (extension) => {
|
|
130
|
+
if (extension.reporter === void 0) return void 0;
|
|
131
|
+
try {
|
|
132
|
+
const reporter = await extension.reporter.begin(context);
|
|
133
|
+
return reporter === void 0 ? void 0 : {
|
|
134
|
+
extensionId: extension.id,
|
|
135
|
+
reporter
|
|
136
|
+
};
|
|
137
|
+
} catch (error) {
|
|
138
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
139
|
+
console.warn(`\nCould not start deploy reporting for ${extension.id}: ${detail}`);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
}))).filter((entry) => entry !== void 0);
|
|
143
|
+
}
|
|
144
|
+
/** Hands each session its own extension's resolved container, so it can attach the run to what that container names. */
|
|
145
|
+
async function attachReporters(reporters, containers) {
|
|
146
|
+
await Promise.all(reporters.map(async ({ extensionId, reporter }) => {
|
|
147
|
+
try {
|
|
148
|
+
await reporter.attach({ container: containers.get(extensionId) });
|
|
149
|
+
} catch (error) {
|
|
150
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
151
|
+
console.warn(`\nCould not attach this deploy to its project for ${extensionId}: ${detail}`);
|
|
152
|
+
}
|
|
153
|
+
}));
|
|
154
|
+
}
|
|
155
|
+
/** Every session's contribution to the alchemy child's environment, so reporting that happens inside the apply can find the run. */
|
|
156
|
+
function reporterChildEnv(reporters) {
|
|
157
|
+
const env = {};
|
|
158
|
+
for (const { extensionId, reporter } of reporters) try {
|
|
159
|
+
Object.assign(env, reporter.childEnv());
|
|
160
|
+
} catch (error) {
|
|
161
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
162
|
+
console.warn(`\nCould not pass deploy reporting into the apply for ${extensionId}: ${detail}`);
|
|
163
|
+
}
|
|
164
|
+
return env;
|
|
165
|
+
}
|
|
166
|
+
/** `failingStep` is capped at 500 by the platform and `errorMessage` at 5000; truncating here keeps a long message from costing the whole report. */
|
|
167
|
+
function truncate(value, limit) {
|
|
168
|
+
return value.length <= limit ? value : `${value.slice(0, limit - 1)}…`;
|
|
169
|
+
}
|
|
170
|
+
/** An interrupted converge (the engine settled a Ctrl-C) — reported as `cancelled`, never as `failed`. */
|
|
171
|
+
function wasInterrupted(failure) {
|
|
172
|
+
return typeof failure.meta?.["signal"] === "string";
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Ends every reporting session, whatever the run did. Sessions never reject
|
|
176
|
+
* by contract, but a buggy one must not turn a converged deploy into a
|
|
177
|
+
* failure — so this swallows anyway, and reports each session independently
|
|
178
|
+
* so one bad implementation cannot silence another.
|
|
179
|
+
*/
|
|
180
|
+
async function finishReporters(reporters, outcome) {
|
|
181
|
+
const entities = outcome.summary?.nodes.flatMap((node) => node.entities) ?? [];
|
|
182
|
+
await Promise.all(reporters.map(async ({ reporter }) => {
|
|
183
|
+
try {
|
|
184
|
+
await reporter.finish({
|
|
185
|
+
ok: outcome.ok,
|
|
186
|
+
cancelled: outcome.cancelled,
|
|
187
|
+
failingStep: outcome.code === void 0 ? void 0 : truncate(outcome.code, 500),
|
|
188
|
+
errorMessage: outcome.message === void 0 ? void 0 : truncate(outcome.message, 5e3),
|
|
189
|
+
entities
|
|
190
|
+
});
|
|
191
|
+
} catch (error) {
|
|
192
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
193
|
+
console.warn(`\nCould not report this deploy's outcome: ${detail}`);
|
|
194
|
+
}
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Owns the reporting sessions around the pipeline: the inner run opens them
|
|
199
|
+
* once it knows which extensions are configured, and this closes them on
|
|
200
|
+
* every exit path — a returned failure, a success, or a thrown defect.
|
|
201
|
+
* Nothing here can change what the pipeline returns.
|
|
202
|
+
*/
|
|
203
|
+
async function runStackPipeline(action, opts) {
|
|
204
|
+
const reporters = [];
|
|
205
|
+
let outcome;
|
|
206
|
+
try {
|
|
207
|
+
outcome = await runStackPipelineInner(action, opts, reporters);
|
|
208
|
+
} catch (error) {
|
|
209
|
+
await finishReporters(reporters, {
|
|
210
|
+
ok: false,
|
|
211
|
+
cancelled: false,
|
|
212
|
+
code: "DEPLOY.UNEXPECTED",
|
|
213
|
+
message: error instanceof Error ? error.message : String(error)
|
|
214
|
+
});
|
|
215
|
+
throw error;
|
|
216
|
+
}
|
|
217
|
+
await finishReporters(reporters, outcome.ok ? {
|
|
218
|
+
ok: true,
|
|
219
|
+
cancelled: false,
|
|
220
|
+
summary: outcome.value
|
|
221
|
+
} : {
|
|
222
|
+
ok: false,
|
|
223
|
+
cancelled: wasInterrupted(outcome.failure),
|
|
224
|
+
code: outcome.failure.code,
|
|
225
|
+
message: outcome.failure.message
|
|
226
|
+
});
|
|
227
|
+
return outcome;
|
|
228
|
+
}
|
|
110
229
|
/** The pipeline both actions share: validate, resolve containers, preflight,
|
|
111
230
|
* write the stack file, run alchemy against it, then the destroy-only
|
|
112
231
|
* teardown/removal suffix. The value is only ever a summary for deploy. */
|
|
113
|
-
async function
|
|
232
|
+
async function runStackPipelineInner(action, opts, reporters) {
|
|
114
233
|
const { entry, name, stage, cwd, onEvent, deps } = opts;
|
|
115
234
|
if (stage !== void 0) try {
|
|
116
235
|
validateStageName(stage);
|
|
@@ -136,6 +255,13 @@ async function runStackPipeline(action, opts) {
|
|
|
136
255
|
cause: error
|
|
137
256
|
}) : void 0);
|
|
138
257
|
const { config, graph, name: resolvedName } = pipeline;
|
|
258
|
+
if (action === "deploy") reporters.push(...await beginReporters(config.extensions, {
|
|
259
|
+
appName: resolvedName,
|
|
260
|
+
stage,
|
|
261
|
+
cwd,
|
|
262
|
+
reportId: opts.reportId,
|
|
263
|
+
credentials: deps.credentials
|
|
264
|
+
}));
|
|
139
265
|
containers = /* @__PURE__ */ new Map();
|
|
140
266
|
for (const extension of config.extensions) {
|
|
141
267
|
if (extension.container === void 0) continue;
|
|
@@ -156,6 +282,7 @@ async function runStackPipeline(action, opts) {
|
|
|
156
282
|
throw toStructured("DEPLOY.CONTAINER_FAILED", error);
|
|
157
283
|
}
|
|
158
284
|
}
|
|
285
|
+
await attachReporters(reporters, containers);
|
|
159
286
|
const pinnedStage = containers.get(config.state.extension)?.alchemyStage ?? stage;
|
|
160
287
|
if (pinnedStage === void 0) throw new CliStructuredError("DEPLOY.SCOPE_MISSING", "The configured deploy target supplied no deploy scope (its container defines no alchemyStage), so Alchemy has no stage to run under.", { fix: action === "deploy" ? "Pass --stage <name> to choose the deploy scope explicitly." : "destroy --production needs a target whose container supplies the production deploy scope." });
|
|
161
288
|
alchemyStage = pinnedStage;
|
|
@@ -177,7 +304,7 @@ async function runStackPipeline(action, opts) {
|
|
|
177
304
|
throw error;
|
|
178
305
|
}
|
|
179
306
|
let stackPath;
|
|
180
|
-
const resultFilePath = path.join(cwd, ".prisma-composer", `deployment-result-${String(process.pid)}-${randomUUID()}.json`);
|
|
307
|
+
const resultFilePath = path$1.join(cwd, ".prisma-composer", `deployment-result-${String(process.pid)}-${randomUUID()}.json`);
|
|
181
308
|
try {
|
|
182
309
|
try {
|
|
183
310
|
stackPath = writeStackFile({
|
|
@@ -199,7 +326,10 @@ async function runStackPipeline(action, opts) {
|
|
|
199
326
|
cwd,
|
|
200
327
|
stage: alchemyStage,
|
|
201
328
|
containerEnv: containerEnv(containers),
|
|
202
|
-
env: {
|
|
329
|
+
env: {
|
|
330
|
+
...reporterChildEnv(reporters),
|
|
331
|
+
[DEPLOYMENT_RESULT_FILE_ENV]: resultFilePath
|
|
332
|
+
}
|
|
203
333
|
}));
|
|
204
334
|
} catch (error) {
|
|
205
335
|
if (CliStructuredError.is(error)) return notOk(error);
|
|
@@ -265,11 +395,11 @@ async function runStackPipeline(action, opts) {
|
|
|
265
395
|
return ok(void 0);
|
|
266
396
|
} finally {
|
|
267
397
|
try {
|
|
268
|
-
fs.rmSync(resultFilePath, { force: true });
|
|
398
|
+
fs$1.rmSync(resultFilePath, { force: true });
|
|
269
399
|
} catch {}
|
|
270
400
|
}
|
|
271
401
|
}
|
|
272
402
|
//#endregion
|
|
273
403
|
export { executeDeploy, executeDestroy };
|
|
274
404
|
|
|
275
|
-
//# sourceMappingURL=execute-deploy-destroy-
|
|
405
|
+
//# sourceMappingURL=execute-deploy-destroy-DRl6Tfg9-B8LE2Lh5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-deploy-destroy-DRl6Tfg9-B8LE2Lh5.mjs","names":["path","path","fs"],"sources":["../../../0-framework/3-tooling/cli/dist/generate-stack-BL6htaQb.mjs","../../../0-framework/3-tooling/cli/dist/execute-deploy-destroy-DRl6Tfg9.mjs"],"sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n//#region src/generate-stack.ts\n/** Pipeline step 6: writes a regenerated-every-run, independently runnable stack module at `.prisma-composer/alchemy.run.ts`. */\nconst GENERATED_DIR = \".prisma-composer\";\nconst GENERATED_FILE = \"alchemy.run.ts\";\n/** A relative import specifier from `.prisma-composer/alchemy.run.ts` to `target` (posix separators). */\nfunction relativeImportSpecifier(generatedDir, target) {\n\tconst rel = path.relative(generatedDir, target).split(path.sep).join(\"/\");\n\treturn rel.startsWith(\".\") ? rel : `./${rel}`;\n}\nfunction quote(value) {\n\treturn JSON.stringify(value);\n}\nfunction renderBundle(bundle) {\n\treturn `{ dir: ${quote(bundle.dir)}, entry: ${quote(bundle.entry)} }`;\n}\nfunction renderOptions(input) {\n\tconst lines = [];\n\tlines.push(` name: ${quote(input.name)},`);\n\tlines.push(\" bundles: {\");\n\tfor (const [id, bundle] of Object.entries(input.assembled.bundles)) lines.push(` ${quote(id)}: ${renderBundle(bundle)},`);\n\tlines.push(\" },\");\n\tlines.push(\" report: deploymentReport,\");\n\treturn lines.join(\"\\n\");\n}\n/** Renders the stack module's source (tests assert on it without touching disk) — uses `//` headers, not a block comment, since a cwd path with a star-slash could close one early. */\nfunction renderStackFile(input) {\n\tconst generatedDir = path.join(input.cwd, GENERATED_DIR);\n\tconst appImport = relativeImportSpecifier(generatedDir, input.entryPath);\n\tconst configImport = relativeImportSpecifier(generatedDir, input.configPath);\n\treturn `// Generated by \\`prisma-composer deploy\\`/\\`prisma-composer destroy\\` — overwritten on every\n// run; do not edit by hand. Independently runnable from ${quote(input.cwd)}:\n//\n// alchemy deploy ${GENERATED_DIR}/${GENERATED_FILE}\n//\n// bisects a CLI bug from an Alchemy bug (deploy-cli.md § Implementation decisions).\nimport { lower } from '@prisma/composer/deploy';\nimport { deploymentReport } from '@prisma/composer/report';\nimport config from ${quote(configImport)};\nimport app from ${quote(appImport)};\n\nexport default lower(app, config, {\n${renderOptions(input)}\n});\n`;\n}\n/** Writes the stack file, returning its absolute path. */\nfunction writeStackFile(input) {\n\tconst generatedDir = path.join(input.cwd, GENERATED_DIR);\n\tfs.mkdirSync(generatedDir, { recursive: true });\n\tconst filePath = path.join(generatedDir, GENERATED_FILE);\n\tfs.writeFileSync(filePath, renderStackFile(input));\n\treturn filePath;\n}\nconst GENERATED_STACK_RELATIVE_PATH = path.join(GENERATED_DIR, GENERATED_FILE);\n//#endregion\nexport { renderStackFile as n, writeStackFile as r, GENERATED_STACK_RELATIVE_PATH as t };\n\n//# sourceMappingURL=generate-stack-BL6htaQb.mjs.map","import { r as toStructured } from \"./shared-BTnATsqm.mjs\";\nimport { i as spawnAlchemy, n as alchemyInvocation } from \"./run-alchemy-D44OZlyB.mjs\";\nimport { r as writeStackFile, t as GENERATED_STACK_RELATIVE_PATH } from \"./generate-stack-BL6htaQb.mjs\";\nimport { n as readDeploymentSummary, t as DEPLOYMENT_RESULT_FILE_ENV } from \"./deployment-summary-DswOl_9E.mjs\";\nimport { a as writeRunReport, i as toRunReport, r as resolveRunReportPath, t as RUN_REPORT_FILE_ENV } from \"./run-report-C2o98uD-.mjs\";\nimport { n as runPipeline } from \"./pipeline-AoW8zq4I.mjs\";\nimport { CliStructuredError } from \"@internal/foundation/errors\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { notOk, ok, okVoid } from \"@internal/foundation/result\";\nimport { spawnSync } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport { containerEnv } from \"@internal/core/config\";\n//#region src/validate-stage.ts\n/** A stage name must be a valid git ref (deploy-cli.md) — checked via `git check-ref-format`, never silently normalized. Runs before anything platform-specific. */\nfunction validateStageName(stage) {\n\tconst result = spawnSync(\"git\", [\"check-ref-format\", `refs/heads/${stage}`], { stdio: \"ignore\" });\n\tif (result.error) throw new CliStructuredError(\"DEPLOY.STAGE_UNVALIDATABLE\", `git is required to validate --stage \"${stage}\" (git check-ref-format): ${result.error.message}.`, { cause: result.error });\n\tif (result.status !== 0) throw new CliStructuredError(\"DEPLOY.STAGE_INVALID\", `Invalid --stage \"${stage}\": must be a valid git ref name (git check-ref-format rejected \"refs/heads/${stage}\").`);\n}\n//#endregion\n//#region src/operations/execute-deploy-destroy.ts\n/**\n* The deploy/destroy executor — main.ts's pipeline orchestration with argv,\n* console, and exit codes removed: typed inputs in, structured results out.\n* Reached only by lazy import from deploy.ts/destroy.ts — this module's\n* static graph transitively loads alchemy's provider tree, so the control\n* entry must never import it statically.\n*/\nconst ALCHEMY_STATE_DIR = \".alchemy\";\n/** Destroy guardrail (moved from main.ts): true when `<cwd>/.alchemy` is missing or empty — likely wrong directory or nothing deployed yet. */\nfunction hasNoLocalDeployState(cwd) {\n\tconst stateDir = path.join(cwd, ALCHEMY_STATE_DIR);\n\treturn !(fs.existsSync(stateDir) && fs.readdirSync(stateDir).length > 0);\n}\nasync function executeDeploy(input, deps, cwd) {\n\tconst outcome = await runStackPipeline(\"deploy\", {\n\t\tentry: input.entry,\n\t\tname: input.name,\n\t\tstage: input.stage,\n\t\tcwd,\n\t\tonEvent: void 0,\n\t\tdeps,\n\t\treportId: input.reportId\n\t});\n\tconst reportPath = resolveRunReportPath(input.reportPath, process.env[RUN_REPORT_FILE_ENV], cwd);\n\tif (reportPath !== void 0) writeRunReport(reportPath, toRunReport({\n\t\tsummary: outcome.ok ? outcome.value : void 0,\n\t\tstage: input.stage,\n\t\tfailure: outcome.ok ? void 0 : {\n\t\t\tcode: outcome.failure.code,\n\t\t\tmessage: outcome.failure.message\n\t\t}\n\t}));\n\tif (!outcome.ok) return outcome;\n\treturn ok({ summary: outcome.value });\n}\nasync function executeDestroy(input, deps, cwd) {\n\tconst outcome = await runStackPipeline(\"destroy\", {\n\t\tentry: input.entry,\n\t\tname: input.name,\n\t\tstage: input.target.kind === \"stage\" ? input.target.stage : void 0,\n\t\tcwd,\n\t\tonEvent: input.onEvent,\n\t\tdeps,\n\t\treportId: void 0\n\t});\n\tif (!outcome.ok) return outcome;\n\treturn okVoid();\n}\n/**\n* Opens a session per extension that declares a reporter. A `begin` that\n* throws costs that extension its reporting and nothing else — the deploy\n* has not started, and refusing to run it because an observer failed would\n* invert the relationship.\n*/\nasync function beginReporters(extensions, context) {\n\treturn (await Promise.all(extensions.map(async (extension) => {\n\t\tif (extension.reporter === void 0) return void 0;\n\t\ttry {\n\t\t\tconst reporter = await extension.reporter.begin(context);\n\t\t\treturn reporter === void 0 ? void 0 : {\n\t\t\t\textensionId: extension.id,\n\t\t\t\treporter\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconst detail = error instanceof Error ? error.message : String(error);\n\t\t\tconsole.warn(`\\nCould not start deploy reporting for ${extension.id}: ${detail}`);\n\t\t\treturn;\n\t\t}\n\t}))).filter((entry) => entry !== void 0);\n}\n/** Hands each session its own extension's resolved container, so it can attach the run to what that container names. */\nasync function attachReporters(reporters, containers) {\n\tawait Promise.all(reporters.map(async ({ extensionId, reporter }) => {\n\t\ttry {\n\t\t\tawait reporter.attach({ container: containers.get(extensionId) });\n\t\t} catch (error) {\n\t\t\tconst detail = error instanceof Error ? error.message : String(error);\n\t\t\tconsole.warn(`\\nCould not attach this deploy to its project for ${extensionId}: ${detail}`);\n\t\t}\n\t}));\n}\n/** Every session's contribution to the alchemy child's environment, so reporting that happens inside the apply can find the run. */\nfunction reporterChildEnv(reporters) {\n\tconst env = {};\n\tfor (const { extensionId, reporter } of reporters) try {\n\t\tObject.assign(env, reporter.childEnv());\n\t} catch (error) {\n\t\tconst detail = error instanceof Error ? error.message : String(error);\n\t\tconsole.warn(`\\nCould not pass deploy reporting into the apply for ${extensionId}: ${detail}`);\n\t}\n\treturn env;\n}\n/** `failingStep` is capped at 500 by the platform and `errorMessage` at 5000; truncating here keeps a long message from costing the whole report. */\nfunction truncate(value, limit) {\n\treturn value.length <= limit ? value : `${value.slice(0, limit - 1)}…`;\n}\n/** An interrupted converge (the engine settled a Ctrl-C) — reported as `cancelled`, never as `failed`. */\nfunction wasInterrupted(failure) {\n\treturn typeof failure.meta?.[\"signal\"] === \"string\";\n}\n/**\n* Ends every reporting session, whatever the run did. Sessions never reject\n* by contract, but a buggy one must not turn a converged deploy into a\n* failure — so this swallows anyway, and reports each session independently\n* so one bad implementation cannot silence another.\n*/\nasync function finishReporters(reporters, outcome) {\n\tconst entities = outcome.summary?.nodes.flatMap((node) => node.entities) ?? [];\n\tawait Promise.all(reporters.map(async ({ reporter }) => {\n\t\ttry {\n\t\t\tawait reporter.finish({\n\t\t\t\tok: outcome.ok,\n\t\t\t\tcancelled: outcome.cancelled,\n\t\t\t\tfailingStep: outcome.code === void 0 ? void 0 : truncate(outcome.code, 500),\n\t\t\t\terrorMessage: outcome.message === void 0 ? void 0 : truncate(outcome.message, 5e3),\n\t\t\t\tentities\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst detail = error instanceof Error ? error.message : String(error);\n\t\t\tconsole.warn(`\\nCould not report this deploy's outcome: ${detail}`);\n\t\t}\n\t}));\n}\n/**\n* Owns the reporting sessions around the pipeline: the inner run opens them\n* once it knows which extensions are configured, and this closes them on\n* every exit path — a returned failure, a success, or a thrown defect.\n* Nothing here can change what the pipeline returns.\n*/\nasync function runStackPipeline(action, opts) {\n\tconst reporters = [];\n\tlet outcome;\n\ttry {\n\t\toutcome = await runStackPipelineInner(action, opts, reporters);\n\t} catch (error) {\n\t\tawait finishReporters(reporters, {\n\t\t\tok: false,\n\t\t\tcancelled: false,\n\t\t\tcode: \"DEPLOY.UNEXPECTED\",\n\t\t\tmessage: error instanceof Error ? error.message : String(error)\n\t\t});\n\t\tthrow error;\n\t}\n\tawait finishReporters(reporters, outcome.ok ? {\n\t\tok: true,\n\t\tcancelled: false,\n\t\tsummary: outcome.value\n\t} : {\n\t\tok: false,\n\t\tcancelled: wasInterrupted(outcome.failure),\n\t\tcode: outcome.failure.code,\n\t\tmessage: outcome.failure.message\n\t});\n\treturn outcome;\n}\n/** The pipeline both actions share: validate, resolve containers, preflight,\n* write the stack file, run alchemy against it, then the destroy-only\n* teardown/removal suffix. The value is only ever a summary for deploy. */\nasync function runStackPipelineInner(action, opts, reporters) {\n\tconst { entry, name, stage, cwd, onEvent, deps } = opts;\n\tif (stage !== void 0) try {\n\t\tvalidateStageName(stage);\n\t} catch (error) {\n\t\tif (CliStructuredError.is(error)) return notOk(error);\n\t\tthrow error;\n\t}\n\tif (action === \"destroy\" && hasNoLocalDeployState(cwd)) onEvent?.({\n\t\tkind: \"no-local-deploy-state\",\n\t\tcwd\n\t});\n\tlet pipeline;\n\tlet containers;\n\tlet alchemyStage;\n\ttry {\n\t\tpipeline = await runPipeline(entry, name, cwd, {\n\t\t\trunAssembler: deps.runAssembler,\n\t\t\tconfig: deps.config,\n\t\t\tconfigPath: deps.configPath\n\t\t}, action === \"destroy\" ? (error) => new CliStructuredError(\"DEPLOY.BUILD_REQUIRED\", error.message, {\n\t\t\twhy: \"destroy evaluates the same stack program as deploy, which packages the built artifacts — so the app must be built first.\",\n\t\t\tfix: \"Run the build, then retry the destroy.\",\n\t\t\tcause: error\n\t\t}) : void 0);\n\t\tconst { config, graph, name: resolvedName } = pipeline;\n\t\tif (action === \"deploy\") reporters.push(...await beginReporters(config.extensions, {\n\t\t\tappName: resolvedName,\n\t\t\tstage,\n\t\t\tcwd,\n\t\t\treportId: opts.reportId,\n\t\t\tcredentials: deps.credentials\n\t\t}));\n\t\tcontainers = /* @__PURE__ */ new Map();\n\t\tfor (const extension of config.extensions) {\n\t\t\tif (extension.container === void 0) continue;\n\t\t\ttry {\n\t\t\t\tif (action === \"deploy\") containers.set(extension.id, await extension.container.ensure({\n\t\t\t\t\tappName: resolvedName,\n\t\t\t\t\tstage\n\t\t\t\t}, deps.credentials));\n\t\t\t\telse {\n\t\t\t\t\tconst instance = await extension.container.locate({\n\t\t\t\t\t\tappName: resolvedName,\n\t\t\t\t\t\tstage\n\t\t\t\t\t}, deps.credentials);\n\t\t\t\t\tif (instance === void 0) throw new CliStructuredError(\"DEPLOY.TARGET_NOT_FOUND\", `Nothing deployed for ${resolvedName}${stage !== void 0 ? `/${stage}` : \"\"}.`, { fix: \"Deploy it first.\" });\n\t\t\t\t\tcontainers.set(extension.id, instance);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthrow toStructured(\"DEPLOY.CONTAINER_FAILED\", error);\n\t\t\t}\n\t\t}\n\t\tawait attachReporters(reporters, containers);\n\t\tconst pinnedStage = containers.get(config.state.extension)?.alchemyStage ?? stage;\n\t\tif (pinnedStage === void 0) throw new CliStructuredError(\"DEPLOY.SCOPE_MISSING\", \"The configured deploy target supplied no deploy scope (its container defines no alchemyStage), so Alchemy has no stage to run under.\", { fix: action === \"deploy\" ? \"Pass --stage <name> to choose the deploy scope explicitly.\" : \"destroy --production needs a target whose container supplies the production deploy scope.\" });\n\t\talchemyStage = pinnedStage;\n\t\tif (action === \"deploy\") for (const extension of config.extensions) {\n\t\t\tif (extension.preflight === void 0) continue;\n\t\t\ttry {\n\t\t\t\tawait extension.preflight({\n\t\t\t\t\tgraph,\n\t\t\t\t\tcontainer: containers.get(extension.id),\n\t\t\t\t\tstage,\n\t\t\t\t\tcredentials: deps.credentials\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthrow toStructured(\"DEPLOY.PREFLIGHT_FAILED\", error);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tif (CliStructuredError.is(error)) return notOk(error);\n\t\tthrow error;\n\t}\n\tlet stackPath;\n\tconst resultFilePath = path.join(cwd, \".prisma-composer\", `deployment-result-${String(process.pid)}-${randomUUID()}.json`);\n\ttry {\n\t\ttry {\n\t\t\tstackPath = writeStackFile({\n\t\t\t\tentryPath: pipeline.entryModule.path,\n\t\t\t\tcwd,\n\t\t\t\tconfigPath: pipeline.configPath,\n\t\t\t\tname: pipeline.name,\n\t\t\t\tassembled: pipeline.assembled\n\t\t\t});\n\t\t} catch (error) {\n\t\t\treturn notOk(toStructured(\"DEPLOY.STACK_WRITE_FAILED\", error));\n\t\t}\n\t\tconst reproduceCommand = `alchemy ${action} ${GENERATED_STACK_RELATIVE_PATH} --yes --stage ${alchemyStage}`;\n\t\tlet outcome;\n\t\ttry {\n\t\t\toutcome = await (deps.alchemy ?? spawnAlchemy)(alchemyInvocation({\n\t\t\t\tcommand: action,\n\t\t\t\tstackFileRelativePath: GENERATED_STACK_RELATIVE_PATH,\n\t\t\t\tcwd,\n\t\t\t\tstage: alchemyStage,\n\t\t\t\tcontainerEnv: containerEnv(containers),\n\t\t\t\tenv: {\n\t\t\t\t\t...reporterChildEnv(reporters),\n\t\t\t\t\t[DEPLOYMENT_RESULT_FILE_ENV]: resultFilePath\n\t\t\t\t}\n\t\t\t}));\n\t\t} catch (error) {\n\t\t\tif (CliStructuredError.is(error)) return notOk(error);\n\t\t\treturn notOk(new CliStructuredError(\"DEPLOY.ENGINE_FAILED\", error instanceof Error ? error.message : String(error), {\n\t\t\t\tcause: error,\n\t\t\t\tmeta: { diagnostics: {\n\t\t\t\t\texitCode: void 0,\n\t\t\t\t\tstackFilePath: stackPath,\n\t\t\t\t\treproduceCommand,\n\t\t\t\t\tcwd\n\t\t\t\t} }\n\t\t\t}));\n\t\t}\n\t\tif (outcome.signal !== null) return notOk(new CliStructuredError(\"DEPLOY.ENGINE_FAILED\", `alchemy ${action} was interrupted by ${outcome.signal}.`, { meta: {\n\t\t\tsignal: outcome.signal,\n\t\t\tdiagnostics: {\n\t\t\t\texitCode: void 0,\n\t\t\t\tsignal: outcome.signal,\n\t\t\t\tstackFilePath: stackPath,\n\t\t\t\treproduceCommand,\n\t\t\t\tcwd\n\t\t\t}\n\t\t} }));\n\t\tconst status = outcome.exitCode ?? 1;\n\t\tif (status !== 0) return notOk(new CliStructuredError(\"DEPLOY.ENGINE_FAILED\", `alchemy ${action} exited with status ${status}.`, { meta: {\n\t\t\texitCode: status,\n\t\t\tdiagnostics: {\n\t\t\t\texitCode: status,\n\t\t\t\tstackFilePath: stackPath,\n\t\t\t\treproduceCommand,\n\t\t\t\tcwd\n\t\t\t}\n\t\t} }));\n\t\ttry {\n\t\t\tif (action === \"destroy\") {\n\t\t\t\tfor (const extension of pipeline.config.extensions) {\n\t\t\t\t\tif (extension.teardown === void 0) continue;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait extension.teardown({\n\t\t\t\t\t\t\tcontainer: containers.get(extension.id),\n\t\t\t\t\t\t\tstage\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthrow toStructured(\"DEPLOY.TEARDOWN_FAILED\", error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const extension of pipeline.config.extensions) {\n\t\t\t\t\tif (extension.container === void 0) continue;\n\t\t\t\t\tconst instance = containers.get(extension.id);\n\t\t\t\t\tif (instance === void 0) continue;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait extension.container.remove(instance, deps.credentials);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthrow toStructured(\"DEPLOY.CONTAINER_REMOVE_FAILED\", error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (CliStructuredError.is(error)) return notOk(error);\n\t\t\tthrow error;\n\t\t}\n\t\tif (action === \"deploy\") return ok(readDeploymentSummary(resultFilePath));\n\t\treturn ok(void 0);\n\t} finally {\n\t\ttry {\n\t\t\tfs.rmSync(resultFilePath, { force: true });\n\t\t} catch {}\n\t}\n}\n//#endregion\nexport { executeDeploy, executeDestroy };\n\n//# sourceMappingURL=execute-deploy-destroy-DRl6Tfg9.mjs.map"],"mappings":"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"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { t as CliStructuredError } from "./errors-0e8IVwzi.mjs";
|
|
2
2
|
import { t as containerEnv } from "./container-transport-DKmKg5JQ-DKWs0ubK.mjs";
|
|
3
3
|
import { t as DEV_DIR } from "./app-config-joXc-BKm-CdcXqNMD.mjs";
|
|
4
|
-
import { n as ok, s as toStructured, t as notOk } from "./result-
|
|
4
|
+
import { n as ok, s as toStructured, t as notOk } from "./result-D95kAAek.mjs";
|
|
5
5
|
import { n as resolveLocalTargets } from "./local-target-DnA2E8IN.mjs";
|
|
6
|
-
import { n as spawnAlchemy, t as alchemyInvocation } from "./run-alchemy-D44OZlyB-
|
|
7
|
-
import { n as runPipeline } from "./pipeline-AoW8zq4I-
|
|
6
|
+
import { n as spawnAlchemy, t as alchemyInvocation } from "./run-alchemy-D44OZlyB-Cw5CVbUQ.mjs";
|
|
7
|
+
import { n as runPipeline } from "./pipeline-AoW8zq4I-Dg8xQ7nC.mjs";
|
|
8
8
|
import { t as withEmulatorRetry } from "./emulator-retry-DGonap4g-S8BNrXFD.mjs";
|
|
9
|
-
import * as fs from "node:fs";
|
|
10
|
-
import * as path from "node:path";
|
|
9
|
+
import * as fs$1 from "node:fs";
|
|
10
|
+
import * as path$1 from "node:path";
|
|
11
11
|
import { join, relative, resolve, sep } from "node:path";
|
|
12
|
-
import { stat, unwatchFile, watch, watchFile } from "fs";
|
|
13
|
-
import { lstat, open, readdir, realpath, stat as stat$1 } from "fs/promises";
|
|
14
|
-
import { EventEmitter } from "events";
|
|
15
12
|
import * as sysPath from "path";
|
|
16
|
-
import {
|
|
13
|
+
import { stat, unwatchFile, watch, watchFile } from "fs";
|
|
17
14
|
import { Readable } from "node:stream";
|
|
15
|
+
import { lstat, readdir, realpath, stat as stat$1 } from "node:fs/promises";
|
|
18
16
|
import { type } from "os";
|
|
17
|
+
import { EventEmitter } from "events";
|
|
18
|
+
import { lstat as lstat$1, open, readdir as readdir$1, realpath as realpath$1, stat as stat$2 } from "fs/promises";
|
|
19
19
|
//#region ../../0-framework/3-tooling/cli/node_modules/readdirp/esm/index.js
|
|
20
20
|
const EntryTypes = {
|
|
21
21
|
FILE_TYPE: "files",
|
|
@@ -89,7 +89,7 @@ var ReaddirpStream = class extends Readable {
|
|
|
89
89
|
const { root, type } = opts;
|
|
90
90
|
this._fileFilter = normalizeFilter(opts.fileFilter);
|
|
91
91
|
this._directoryFilter = normalizeFilter(opts.directoryFilter);
|
|
92
|
-
const statMethod = opts.lstat ? lstat
|
|
92
|
+
const statMethod = opts.lstat ? lstat : stat$1;
|
|
93
93
|
if (wantBigintFsStats) this._stat = (path) => statMethod(path, { bigint: true });
|
|
94
94
|
else this._stat = statMethod;
|
|
95
95
|
this._maxDepth = opts.depth ?? defaultOptions.depth;
|
|
@@ -154,7 +154,7 @@ var ReaddirpStream = class extends Readable {
|
|
|
154
154
|
async _exploreDir(path, depth) {
|
|
155
155
|
let files;
|
|
156
156
|
try {
|
|
157
|
-
files = await readdir
|
|
157
|
+
files = await readdir(path, this._rdOptions);
|
|
158
158
|
} catch (error) {
|
|
159
159
|
this._onError(error);
|
|
160
160
|
}
|
|
@@ -193,8 +193,8 @@ var ReaddirpStream = class extends Readable {
|
|
|
193
193
|
if (stats && stats.isSymbolicLink()) {
|
|
194
194
|
const full = entry.fullPath;
|
|
195
195
|
try {
|
|
196
|
-
const entryRealPath = await realpath
|
|
197
|
-
const entryRealPathStats = await lstat
|
|
196
|
+
const entryRealPath = await realpath(full);
|
|
197
|
+
const entryRealPathStats = await lstat(entryRealPath);
|
|
198
198
|
if (entryRealPathStats.isFile()) return "file";
|
|
199
199
|
if (entryRealPathStats.isDirectory()) {
|
|
200
200
|
const len = entryRealPath.length;
|
|
@@ -257,8 +257,8 @@ const EVENTS = {
|
|
|
257
257
|
const EV = EVENTS;
|
|
258
258
|
const THROTTLE_MODE_WATCH = "watch";
|
|
259
259
|
const statMethods = {
|
|
260
|
-
lstat,
|
|
261
|
-
stat: stat$
|
|
260
|
+
lstat: lstat$1,
|
|
261
|
+
stat: stat$2
|
|
262
262
|
};
|
|
263
263
|
const KEY_LISTENERS = "listeners";
|
|
264
264
|
const KEY_ERR = "errHandlers";
|
|
@@ -740,7 +740,7 @@ var NodeFsHandler = class {
|
|
|
740
740
|
const listener = async (path, newStats) => {
|
|
741
741
|
if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return;
|
|
742
742
|
if (!newStats || newStats.mtimeMs === 0) try {
|
|
743
|
-
const newStats = await stat$
|
|
743
|
+
const newStats = await stat$2(file);
|
|
744
744
|
if (this.fsw.closed) return;
|
|
745
745
|
const at = newStats.atimeMs;
|
|
746
746
|
const mt = newStats.mtimeMs;
|
|
@@ -784,7 +784,7 @@ var NodeFsHandler = class {
|
|
|
784
784
|
this.fsw._incrReadyCount();
|
|
785
785
|
let linkPath;
|
|
786
786
|
try {
|
|
787
|
-
linkPath = await realpath(path);
|
|
787
|
+
linkPath = await realpath$1(path);
|
|
788
788
|
} catch (e) {
|
|
789
789
|
this.fsw._emitReady();
|
|
790
790
|
return true;
|
|
@@ -918,13 +918,13 @@ var NodeFsHandler = class {
|
|
|
918
918
|
let closer;
|
|
919
919
|
if (stats.isDirectory()) {
|
|
920
920
|
const absPath = sysPath.resolve(path);
|
|
921
|
-
const targetPath = follow ? await realpath(path) : path;
|
|
921
|
+
const targetPath = follow ? await realpath$1(path) : path;
|
|
922
922
|
if (this.fsw.closed) return;
|
|
923
923
|
closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath);
|
|
924
924
|
if (this.fsw.closed) return;
|
|
925
925
|
if (absPath !== targetPath && targetPath !== void 0) this.fsw._symlinkPaths.set(absPath, targetPath);
|
|
926
926
|
} else if (stats.isSymbolicLink()) {
|
|
927
|
-
const targetPath = follow ? await realpath(path) : path;
|
|
927
|
+
const targetPath = follow ? await realpath$1(path) : path;
|
|
928
928
|
if (this.fsw.closed) return;
|
|
929
929
|
const parent = sysPath.dirname(wh.watchPath);
|
|
930
930
|
this.fsw._getWatchedDir(parent).add(wh.watchPath);
|
|
@@ -1046,7 +1046,7 @@ var DirEntry = class {
|
|
|
1046
1046
|
if (items.size > 0) return;
|
|
1047
1047
|
const dir = this.path;
|
|
1048
1048
|
try {
|
|
1049
|
-
await readdir(dir);
|
|
1049
|
+
await readdir$1(dir);
|
|
1050
1050
|
} catch (err) {
|
|
1051
1051
|
if (this._removeWatcher) this._removeWatcher(sysPath.dirname(dir), sysPath.basename(dir));
|
|
1052
1052
|
}
|
|
@@ -1332,7 +1332,7 @@ var FSWatcher = class extends EventEmitter {
|
|
|
1332
1332
|
const fullPath = opts.cwd ? sysPath.join(opts.cwd, path) : path;
|
|
1333
1333
|
let stats;
|
|
1334
1334
|
try {
|
|
1335
|
-
stats = await stat$
|
|
1335
|
+
stats = await stat$2(fullPath);
|
|
1336
1336
|
} catch (err) {}
|
|
1337
1337
|
if (!stats || this.closed) return;
|
|
1338
1338
|
args.push(stats);
|
|
@@ -1581,7 +1581,7 @@ const DEV_GENERATED_DIR = ".prisma-composer/dev";
|
|
|
1581
1581
|
const DEV_GENERATED_FILE = "alchemy.run.ts";
|
|
1582
1582
|
/** A relative import specifier from `.prisma-composer/dev/alchemy.run.ts` to `target` (posix separators). */
|
|
1583
1583
|
function relativeImportSpecifier(generatedDir, target) {
|
|
1584
|
-
const rel = path.relative(generatedDir, target).split(path.sep).join("/");
|
|
1584
|
+
const rel = path$1.relative(generatedDir, target).split(path$1.sep).join("/");
|
|
1585
1585
|
return rel.startsWith(".") ? rel : `./${rel}`;
|
|
1586
1586
|
}
|
|
1587
1587
|
function quote(value) {
|
|
@@ -1602,7 +1602,7 @@ function renderOptions(input) {
|
|
|
1602
1602
|
}
|
|
1603
1603
|
/** Renders the dev stack module's source (tests assert on it without touching disk). */
|
|
1604
1604
|
function renderDevStackFile(input) {
|
|
1605
|
-
const generatedDir = path.join(input.cwd, DEV_GENERATED_DIR);
|
|
1605
|
+
const generatedDir = path$1.join(input.cwd, DEV_GENERATED_DIR);
|
|
1606
1606
|
const appImport = relativeImportSpecifier(generatedDir, input.entryPath);
|
|
1607
1607
|
const configImport = relativeImportSpecifier(generatedDir, input.configPath);
|
|
1608
1608
|
return `// Generated by \`prisma-composer dev\` — overwritten on every run; do not
|
|
@@ -1630,13 +1630,13 @@ ${renderOptions(input)}
|
|
|
1630
1630
|
}
|
|
1631
1631
|
/** Writes the dev stack file, returning its absolute path. */
|
|
1632
1632
|
function writeDevStackFile(input) {
|
|
1633
|
-
const generatedDir = path.join(input.cwd, DEV_GENERATED_DIR);
|
|
1634
|
-
fs.mkdirSync(generatedDir, { recursive: true });
|
|
1635
|
-
const filePath = path.join(generatedDir, DEV_GENERATED_FILE);
|
|
1636
|
-
fs.writeFileSync(filePath, renderDevStackFile(input));
|
|
1633
|
+
const generatedDir = path$1.join(input.cwd, DEV_GENERATED_DIR);
|
|
1634
|
+
fs$1.mkdirSync(generatedDir, { recursive: true });
|
|
1635
|
+
const filePath = path$1.join(generatedDir, DEV_GENERATED_FILE);
|
|
1636
|
+
fs$1.writeFileSync(filePath, renderDevStackFile(input));
|
|
1637
1637
|
return filePath;
|
|
1638
1638
|
}
|
|
1639
|
-
const DEV_STACK_RELATIVE_PATH = path.join(DEV_GENERATED_DIR, DEV_GENERATED_FILE);
|
|
1639
|
+
const DEV_STACK_RELATIVE_PATH = path$1.join(DEV_GENERATED_DIR, DEV_GENERATED_FILE);
|
|
1640
1640
|
/**
|
|
1641
1641
|
* Local-dev spec § 6 `watch.ts`: watches each assembled bundle's declared
|
|
1642
1642
|
* `watch` paths (a directory watched recursively, a file watched through
|
|
@@ -1703,15 +1703,15 @@ function startWatch(targets, onChange, onError) {
|
|
|
1703
1703
|
const directoryRoots = /* @__PURE__ */ new Set();
|
|
1704
1704
|
const parentRoots = /* @__PURE__ */ new Set();
|
|
1705
1705
|
for (const target of targets) for (const p of target.paths) {
|
|
1706
|
-
const abs = path.resolve(p);
|
|
1706
|
+
const abs = path$1.resolve(p);
|
|
1707
1707
|
let isDirectory = false;
|
|
1708
1708
|
try {
|
|
1709
|
-
isDirectory = fs.statSync(abs).isDirectory();
|
|
1709
|
+
isDirectory = fs$1.statSync(abs).isDirectory();
|
|
1710
1710
|
} catch {}
|
|
1711
1711
|
if (isDirectory) directoryRoots.add(abs);
|
|
1712
1712
|
else {
|
|
1713
1713
|
fileTargets.add(abs);
|
|
1714
|
-
parentRoots.add(path.dirname(abs));
|
|
1714
|
+
parentRoots.add(path$1.dirname(abs));
|
|
1715
1715
|
}
|
|
1716
1716
|
}
|
|
1717
1717
|
const reportError = (error) => {
|
|
@@ -1730,7 +1730,7 @@ function startWatch(targets, onChange, onError) {
|
|
|
1730
1730
|
depth: 0
|
|
1731
1731
|
});
|
|
1732
1732
|
parentWatcher.on("all", (_event, eventPath) => {
|
|
1733
|
-
if (fileTargets.has(path.resolve(eventPath))) trigger();
|
|
1733
|
+
if (fileTargets.has(path$1.resolve(eventPath))) trigger();
|
|
1734
1734
|
});
|
|
1735
1735
|
parentWatcher.on("error", reportError);
|
|
1736
1736
|
watchers.push(parentWatcher);
|
|
@@ -1764,7 +1764,7 @@ async function mergedEndpoints(attachments) {
|
|
|
1764
1764
|
async function executeDev(input, deps, cwd) {
|
|
1765
1765
|
if (process.platform === "win32") return notOk(new CliStructuredError("DEV.PLATFORM_UNSUPPORTED", "local dev is not supported on Windows yet."));
|
|
1766
1766
|
const { onEvent } = input;
|
|
1767
|
-
const devDir = path.join(cwd, DEV_DIR);
|
|
1767
|
+
const devDir = path$1.join(cwd, DEV_DIR);
|
|
1768
1768
|
let pipeline;
|
|
1769
1769
|
let resolved;
|
|
1770
1770
|
const containers = /* @__PURE__ */ new Map();
|
|
@@ -2011,4 +2011,4 @@ async function executeDev(input, deps, cwd) {
|
|
|
2011
2011
|
//#endregion
|
|
2012
2012
|
export { executeDev };
|
|
2013
2013
|
|
|
2014
|
-
//# sourceMappingURL=execute-dev-BMTFWfFc-
|
|
2014
|
+
//# sourceMappingURL=execute-dev-BMTFWfFc-7MifQgpp.mjs.map
|