@prisma/composer 0.25.0-dev.2 → 0.25.0-dev.4
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-joXc-BKm-CdcXqNMD.mjs → app-config-CGJHcFb--CIEFCG4V.mjs} +3 -3
- package/dist/{app-config-joXc-BKm-CdcXqNMD.mjs.map → app-config-CGJHcFb--CIEFCG4V.mjs.map} +1 -1
- package/dist/{app-config-jGcCcxK4-DnzGGbDS.d.mts → app-config-Cay7dFv5-CMlgGodQ.d.mts} +3 -3
- package/dist/{app-config-jGcCcxK4-DnzGGbDS.d.mts.map → app-config-Cay7dFv5-CMlgGodQ.d.mts.map} +1 -1
- package/dist/config-CE3fmcF9.d.mts +1 -0
- package/dist/config-CdxvLFzg.mjs.map +1 -1
- package/dist/config.d.mts +2 -2
- package/dist/config.mjs +1 -1
- package/dist/control.d.mts +35 -15
- package/dist/control.d.mts.map +1 -1
- package/dist/control.mjs +10 -10
- package/dist/control.mjs.map +1 -1
- package/dist/deploy-CE3fmcF9.d.mts +1 -0
- package/dist/deploy.d.mts +2 -2
- package/dist/deploy.mjs +1 -1
- package/dist/deploy.mjs.map +1 -1
- package/dist/deployment-summary-BtvC7Z73-BJr-5tXY.mjs +168 -0
- package/dist/deployment-summary-BtvC7Z73-BJr-5tXY.mjs.map +1 -0
- package/dist/deployment-summary-CU-eVvJM-Cu9hKMdz.d.mts +26 -0
- package/dist/deployment-summary-CU-eVvJM-Cu9hKMdz.d.mts.map +1 -0
- package/dist/{execute-deploy-destroy-CvKCwVkD-Di3Ooeip.mjs → execute-deploy-destroy-CF6DR7sA-pf8yhNfp.mjs} +41 -28
- package/dist/execute-deploy-destroy-CF6DR7sA-pf8yhNfp.mjs.map +1 -0
- package/dist/{execute-dev-BLCK5wF7-CJvkj5wl.mjs → execute-dev-DAIUT0es-B3iBKmAS.mjs} +179 -130
- package/dist/execute-dev-DAIUT0es-B3iBKmAS.mjs.map +1 -0
- package/dist/{execute-log-B_zCJ17b-CE954g1a.mjs → execute-log-PLs9-Qn3-BvONZ358.mjs} +7 -10
- package/dist/execute-log-PLs9-Qn3-BvONZ358.mjs.map +1 -0
- package/dist/{local-target-DnA2E8IN.mjs → local-target-B4xoiDAV.mjs} +2 -2
- package/dist/{local-target-DnA2E8IN.mjs.map → local-target-B4xoiDAV.mjs.map} +1 -1
- package/dist/local-target.d.mts +1 -1
- package/dist/local-target.mjs +2 -2
- package/dist/nextjs-control.d.mts +4 -4
- package/dist/nextjs-control.mjs +2 -2
- package/dist/nextjs-control.mjs.map +1 -1
- package/dist/node-control.d.mts +4 -4
- package/dist/node-control.mjs +2 -2
- package/dist/node-control.mjs.map +1 -1
- package/dist/{pipeline-C7gNjMzJ-CzM8DNS_.mjs → pipeline-DAYhea3J-B6PQu2QB.mjs} +231 -262
- package/dist/pipeline-DAYhea3J-B6PQu2QB.mjs.map +1 -0
- package/dist/report.d.mts +4 -3
- package/dist/report.d.mts.map +1 -1
- package/dist/report.mjs +2 -2
- package/dist/report.mjs.map +1 -1
- package/dist/result-B1SzJJoE.mjs +122 -0
- package/dist/result-B1SzJJoE.mjs.map +1 -0
- package/package.json +10 -11
- package/skills/prisma-composer-core-concepts/SKILL.md +56 -20
- package/dist/config-BGtKERz-.d.mts +0 -1
- package/dist/deploy-BGtKERz-.d.mts +0 -1
- package/dist/deployment-summary-DswOl_9E-B9MhYYDt.mjs +0 -70
- package/dist/deployment-summary-DswOl_9E-B9MhYYDt.mjs.map +0 -1
- package/dist/execute-deploy-destroy-CvKCwVkD-Di3Ooeip.mjs.map +0 -1
- package/dist/execute-dev-BLCK5wF7-CJvkj5wl.mjs.map +0 -1
- package/dist/execute-log-B_zCJ17b-CE954g1a.mjs.map +0 -1
- package/dist/pipeline-C7gNjMzJ-CzM8DNS_.mjs.map +0 -1
- package/dist/result-CQIOBgdW.mjs +0 -247
- package/dist/result-CQIOBgdW.mjs.map +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { t as CliStructuredError } from "./errors-0e8IVwzi.mjs";
|
|
2
2
|
import { t as containerEnv } from "./container-transport-HcvNOGZL-twPi2TIv.mjs";
|
|
3
|
-
import { t as DEV_DIR } from "./app-config-
|
|
4
|
-
import { n as ok,
|
|
5
|
-
import { n as resolveLocalTargets } from "./local-target-
|
|
3
|
+
import { t as DEV_DIR } from "./app-config-CGJHcFb--CIEFCG4V.mjs";
|
|
4
|
+
import { n as ok, o as toStructured, t as notOk } from "./result-B1SzJJoE.mjs";
|
|
5
|
+
import { n as resolveLocalTargets } from "./local-target-B4xoiDAV.mjs";
|
|
6
6
|
import { n as spawnAlchemy, t as alchemyInvocation } from "./run-alchemy-pANK8XNX-CgCpXLkG.mjs";
|
|
7
|
-
import { n as runPipeline } from "./pipeline-
|
|
7
|
+
import { n as runPipeline, r as noComposerExportMessage } from "./pipeline-DAYhea3J-B6PQu2QB.mjs";
|
|
8
8
|
import { t as withEmulatorRetry } from "./emulator-retry-DGonap4g-S8BNrXFD.mjs";
|
|
9
9
|
import * as fs$1 from "node:fs";
|
|
10
10
|
import * as path$1 from "node:path";
|
|
@@ -15,7 +15,89 @@ import { Readable } from "node:stream";
|
|
|
15
15
|
import { lstat, readdir, realpath, stat as stat$1 } from "node:fs/promises";
|
|
16
16
|
import { type } from "os";
|
|
17
17
|
import { EventEmitter } from "events";
|
|
18
|
+
import { createHash } from "node:crypto";
|
|
18
19
|
import { lstat as lstat$1, open, readdir as readdir$1, realpath as realpath$1, stat as stat$2 } from "fs/promises";
|
|
20
|
+
//#region ../../0-framework/3-tooling/cli/dist/generate-dev-stack-CPpjJdTG.mjs
|
|
21
|
+
/**
|
|
22
|
+
* Local-dev spec § 6 `generate-dev-stack.ts`: like generate-stack.ts but at
|
|
23
|
+
* `.prisma-composer/dev/alchemy.run.ts`, always Alchemy stage `dev`, using
|
|
24
|
+
* Alchemy's own `localState()` and no `report` — dev prints its own front
|
|
25
|
+
* door (run-dev.ts), so core's presentation-free lower() gets nothing to
|
|
26
|
+
* call back into. The generated module IS the one orchestration point where
|
|
27
|
+
* dev provenance is resolved (spec § 3 REVISED): it deserializes the
|
|
28
|
+
* containers, top-level-awaits `resolveLocalTargets(config)` (the lazy
|
|
29
|
+
* `localTarget` thunks, ADR-0041), and passes
|
|
30
|
+
* `providers: localTargetProviders(...)` + `state: localState()` explicitly
|
|
31
|
+
* — `lower()` learns nothing about dev.
|
|
32
|
+
*/
|
|
33
|
+
const DEV_GENERATED_DIR = ".prisma-composer/dev";
|
|
34
|
+
const DEV_GENERATED_FILE = "alchemy.run.ts";
|
|
35
|
+
/** A relative import specifier from `.prisma-composer/dev/alchemy.run.ts` to `target` (posix separators). */
|
|
36
|
+
function relativeImportSpecifier(generatedDir, target) {
|
|
37
|
+
const rel = path$1.relative(generatedDir, target).split(path$1.sep).join("/");
|
|
38
|
+
return rel.startsWith(".") ? rel : `./${rel}`;
|
|
39
|
+
}
|
|
40
|
+
function quote(value) {
|
|
41
|
+
return JSON.stringify(value);
|
|
42
|
+
}
|
|
43
|
+
function renderBundle(bundle) {
|
|
44
|
+
return `{ dir: ${quote(bundle.dir)}, entry: ${quote(bundle.entry)} }`;
|
|
45
|
+
}
|
|
46
|
+
function renderOptions(input) {
|
|
47
|
+
const lines = [];
|
|
48
|
+
lines.push(` name: ${quote(input.name)},`);
|
|
49
|
+
lines.push(" bundles: {");
|
|
50
|
+
for (const [id, bundle] of Object.entries(input.assembled.bundles)) lines.push(` ${quote(id)}: ${renderBundle(bundle)},`);
|
|
51
|
+
lines.push(" },");
|
|
52
|
+
lines.push(" providers: localTargetProviders(resolved, containers, devDir),");
|
|
53
|
+
lines.push(" state: localState(),");
|
|
54
|
+
return lines.join("\n");
|
|
55
|
+
}
|
|
56
|
+
/** Renders the dev stack module's source (tests assert on it without touching disk). */
|
|
57
|
+
function renderDevStackFile(input) {
|
|
58
|
+
const generatedDir = path$1.join(input.cwd, DEV_GENERATED_DIR);
|
|
59
|
+
const appImport = relativeImportSpecifier(generatedDir, input.entryPath);
|
|
60
|
+
const imports = [
|
|
61
|
+
"import * as path from 'node:path';",
|
|
62
|
+
"import { deserializeContainers } from '@prisma/composer/config';",
|
|
63
|
+
"import { lower } from '@prisma/composer/deploy';",
|
|
64
|
+
"import { DEV_DIR, localTargetProviders, resolveLocalTargets } from '@prisma/composer/local-target';",
|
|
65
|
+
"import { localState } from 'alchemy/State/LocalState';",
|
|
66
|
+
`import prismaConfig from ${quote(relativeImportSpecifier(generatedDir, input.configFile))};`,
|
|
67
|
+
`import app from ${quote(appImport)};`
|
|
68
|
+
].join("\n");
|
|
69
|
+
return `// Generated by \`prisma-composer dev\` — overwritten on every run; do not
|
|
70
|
+
// edit by hand. Independently runnable from ${quote(input.cwd)}:
|
|
71
|
+
//
|
|
72
|
+
// alchemy deploy ${DEV_GENERATED_DIR}/${DEV_GENERATED_FILE} --stage dev
|
|
73
|
+
//
|
|
74
|
+
// bisects a CLI bug from an Alchemy bug (deploy-cli.md § Implementation decisions).
|
|
75
|
+
${imports}
|
|
76
|
+
|
|
77
|
+
const config = prismaConfig.composer;
|
|
78
|
+
if (config === undefined) {
|
|
79
|
+
throw new Error(${quote(noComposerExportMessage(input.configFile))});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const containers = deserializeContainers(config.extensions, process.env);
|
|
83
|
+
const resolved = await resolveLocalTargets(config);
|
|
84
|
+
const devDir = path.join(process.cwd(), DEV_DIR);
|
|
85
|
+
|
|
86
|
+
export default lower(app, config, {
|
|
87
|
+
${renderOptions(input)}
|
|
88
|
+
});
|
|
89
|
+
`;
|
|
90
|
+
}
|
|
91
|
+
/** Writes the dev stack file, returning its absolute path. */
|
|
92
|
+
function writeDevStackFile(input) {
|
|
93
|
+
const generatedDir = path$1.join(input.cwd, DEV_GENERATED_DIR);
|
|
94
|
+
fs$1.mkdirSync(generatedDir, { recursive: true });
|
|
95
|
+
const filePath = path$1.join(generatedDir, DEV_GENERATED_FILE);
|
|
96
|
+
fs$1.writeFileSync(filePath, renderDevStackFile(input));
|
|
97
|
+
return filePath;
|
|
98
|
+
}
|
|
99
|
+
const DEV_STACK_RELATIVE_PATH = path$1.join(DEV_GENERATED_DIR, DEV_GENERATED_FILE);
|
|
100
|
+
//#endregion
|
|
19
101
|
//#region ../../0-framework/3-tooling/cli/node_modules/readdirp/esm/index.js
|
|
20
102
|
const EntryTypes = {
|
|
21
103
|
FILE_TYPE: "files",
|
|
@@ -1564,79 +1646,7 @@ var esm_default = {
|
|
|
1564
1646
|
FSWatcher
|
|
1565
1647
|
};
|
|
1566
1648
|
//#endregion
|
|
1567
|
-
//#region ../../0-framework/3-tooling/cli/dist/execute-dev-
|
|
1568
|
-
/**
|
|
1569
|
-
* Local-dev spec § 6 `generate-dev-stack.ts`: like generate-stack.ts but at
|
|
1570
|
-
* `.prisma-composer/dev/alchemy.run.ts`, always Alchemy stage `dev`, using
|
|
1571
|
-
* Alchemy's own `localState()` and no `report` — dev prints its own front
|
|
1572
|
-
* door (run-dev.ts), so core's presentation-free lower() gets nothing to
|
|
1573
|
-
* call back into. The generated module IS the one orchestration point where
|
|
1574
|
-
* dev provenance is resolved (spec § 3 REVISED): it deserializes the
|
|
1575
|
-
* containers, top-level-awaits `resolveLocalTargets(config)` (the lazy
|
|
1576
|
-
* `localTarget` thunks, ADR-0041), and passes
|
|
1577
|
-
* `providers: localTargetProviders(...)` + `state: localState()` explicitly
|
|
1578
|
-
* — `lower()` learns nothing about dev.
|
|
1579
|
-
*/
|
|
1580
|
-
const DEV_GENERATED_DIR = ".prisma-composer/dev";
|
|
1581
|
-
const DEV_GENERATED_FILE = "alchemy.run.ts";
|
|
1582
|
-
/** A relative import specifier from `.prisma-composer/dev/alchemy.run.ts` to `target` (posix separators). */
|
|
1583
|
-
function relativeImportSpecifier(generatedDir, target) {
|
|
1584
|
-
const rel = path$1.relative(generatedDir, target).split(path$1.sep).join("/");
|
|
1585
|
-
return rel.startsWith(".") ? rel : `./${rel}`;
|
|
1586
|
-
}
|
|
1587
|
-
function quote(value) {
|
|
1588
|
-
return JSON.stringify(value);
|
|
1589
|
-
}
|
|
1590
|
-
function renderBundle(bundle) {
|
|
1591
|
-
return `{ dir: ${quote(bundle.dir)}, entry: ${quote(bundle.entry)} }`;
|
|
1592
|
-
}
|
|
1593
|
-
function renderOptions(input) {
|
|
1594
|
-
const lines = [];
|
|
1595
|
-
lines.push(` name: ${quote(input.name)},`);
|
|
1596
|
-
lines.push(" bundles: {");
|
|
1597
|
-
for (const [id, bundle] of Object.entries(input.assembled.bundles)) lines.push(` ${quote(id)}: ${renderBundle(bundle)},`);
|
|
1598
|
-
lines.push(" },");
|
|
1599
|
-
lines.push(" providers: localTargetProviders(resolved, containers, devDir),");
|
|
1600
|
-
lines.push(" state: localState(),");
|
|
1601
|
-
return lines.join("\n");
|
|
1602
|
-
}
|
|
1603
|
-
/** Renders the dev stack module's source (tests assert on it without touching disk). */
|
|
1604
|
-
function renderDevStackFile(input) {
|
|
1605
|
-
const generatedDir = path$1.join(input.cwd, DEV_GENERATED_DIR);
|
|
1606
|
-
const appImport = relativeImportSpecifier(generatedDir, input.entryPath);
|
|
1607
|
-
const configImport = relativeImportSpecifier(generatedDir, input.configPath);
|
|
1608
|
-
return `// Generated by \`prisma-composer dev\` — overwritten on every run; do not
|
|
1609
|
-
// edit by hand. Independently runnable from ${quote(input.cwd)}:
|
|
1610
|
-
//
|
|
1611
|
-
// alchemy deploy ${DEV_GENERATED_DIR}/${DEV_GENERATED_FILE} --stage dev
|
|
1612
|
-
//
|
|
1613
|
-
// bisects a CLI bug from an Alchemy bug (deploy-cli.md § Implementation decisions).
|
|
1614
|
-
import * as path from 'node:path';
|
|
1615
|
-
import { deserializeContainers } from '@prisma/composer/config';
|
|
1616
|
-
import { lower } from '@prisma/composer/deploy';
|
|
1617
|
-
import { DEV_DIR, localTargetProviders, resolveLocalTargets } from '@prisma/composer/local-target';
|
|
1618
|
-
import { localState } from 'alchemy/State/LocalState';
|
|
1619
|
-
import config from ${quote(configImport)};
|
|
1620
|
-
import app from ${quote(appImport)};
|
|
1621
|
-
|
|
1622
|
-
const containers = deserializeContainers(config.extensions, process.env);
|
|
1623
|
-
const resolved = await resolveLocalTargets(config);
|
|
1624
|
-
const devDir = path.join(process.cwd(), DEV_DIR);
|
|
1625
|
-
|
|
1626
|
-
export default lower(app, config, {
|
|
1627
|
-
${renderOptions(input)}
|
|
1628
|
-
});
|
|
1629
|
-
`;
|
|
1630
|
-
}
|
|
1631
|
-
/** Writes the dev stack file, returning its absolute path. */
|
|
1632
|
-
function writeDevStackFile(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
|
-
return filePath;
|
|
1638
|
-
}
|
|
1639
|
-
const DEV_STACK_RELATIVE_PATH = path$1.join(DEV_GENERATED_DIR, DEV_GENERATED_FILE);
|
|
1649
|
+
//#region ../../0-framework/3-tooling/cli/dist/execute-dev-DAIUT0es.mjs
|
|
1640
1650
|
/**
|
|
1641
1651
|
* Local-dev spec § 6 `watch.ts`: watches each assembled bundle's declared
|
|
1642
1652
|
* `watch` paths (a directory watched recursively, a file watched through
|
|
@@ -1761,6 +1771,14 @@ async function mergedEndpoints(attachments) {
|
|
|
1761
1771
|
return (await Promise.all(attachments.map((a) => withEmulatorRetry(() => a.endpoints())))).flat();
|
|
1762
1772
|
}
|
|
1763
1773
|
/** Runs the full dev pipeline; resolves to a running session or a structured failure. */
|
|
1774
|
+
/** The file's content hash; undefined when it cannot be read, which counts as a change. */
|
|
1775
|
+
function contentHash(file) {
|
|
1776
|
+
try {
|
|
1777
|
+
return createHash("sha256").update(fs$1.readFileSync(file)).digest("hex");
|
|
1778
|
+
} catch {
|
|
1779
|
+
return;
|
|
1780
|
+
}
|
|
1781
|
+
}
|
|
1764
1782
|
async function executeDev(input, deps, cwd) {
|
|
1765
1783
|
if (process.platform === "win32") return notOk(new CliStructuredError("DEV.PLATFORM_UNSUPPORTED", "local dev is not supported on Windows yet."));
|
|
1766
1784
|
const { onEvent } = input;
|
|
@@ -1769,13 +1787,10 @@ async function executeDev(input, deps, cwd) {
|
|
|
1769
1787
|
let resolved;
|
|
1770
1788
|
const containers = /* @__PURE__ */ new Map();
|
|
1771
1789
|
try {
|
|
1772
|
-
const pipelineDeps = {
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
};
|
|
1777
|
-
pipeline = await runPipeline(input.entry, input.name, cwd, pipelineDeps);
|
|
1778
|
-
const { config, graph, name } = pipeline;
|
|
1790
|
+
const pipelineDeps = { runAssembler: deps.runAssembler };
|
|
1791
|
+
pipeline = await runPipeline(input.entry, input.name, cwd, input.config, pipelineDeps);
|
|
1792
|
+
const { graph, name } = pipeline;
|
|
1793
|
+
const config = pipeline.configSource.value;
|
|
1779
1794
|
resolved = await resolveLocalTargets(config);
|
|
1780
1795
|
for (const [id, dev] of resolved) try {
|
|
1781
1796
|
containers.set(id, await dev.container.ensure({
|
|
@@ -1831,7 +1846,7 @@ async function executeDev(input, deps, cwd) {
|
|
|
1831
1846
|
stackPath = writeDevStackFile({
|
|
1832
1847
|
entryPath: pipeline.entryModule.path,
|
|
1833
1848
|
cwd,
|
|
1834
|
-
|
|
1849
|
+
configFile: pipeline.configSource.file,
|
|
1835
1850
|
name: pipeline.name,
|
|
1836
1851
|
assembled: pipeline.assembled
|
|
1837
1852
|
});
|
|
@@ -1890,6 +1905,7 @@ async function executeDev(input, deps, cwd) {
|
|
|
1890
1905
|
const attachments = [];
|
|
1891
1906
|
const started = [];
|
|
1892
1907
|
let watch;
|
|
1908
|
+
let configWatch;
|
|
1893
1909
|
try {
|
|
1894
1910
|
for (const [id, dev] of resolved) try {
|
|
1895
1911
|
attachments.push(await dev.attach({
|
|
@@ -1922,55 +1938,86 @@ async function executeDev(input, deps, cwd) {
|
|
|
1922
1938
|
kind: "unwatchable",
|
|
1923
1939
|
address
|
|
1924
1940
|
});
|
|
1925
|
-
const watchDeps = {
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1941
|
+
const watchDeps = { runAssembler: deps.runAssembler };
|
|
1942
|
+
const watchFiles = deps.watch ?? startWatch;
|
|
1943
|
+
const onWatchError = (error) => emit({
|
|
1944
|
+
kind: "watch-error",
|
|
1945
|
+
message: failureMessage(error)
|
|
1946
|
+
});
|
|
1947
|
+
const configFile = pipeline.configSource.file;
|
|
1948
|
+
const startedConfig = contentHash(configFile);
|
|
1949
|
+
let configChanged = false;
|
|
1950
|
+
const pausedForConfig = () => {
|
|
1951
|
+
if (!configChanged && contentHash(configFile) === startedConfig) return false;
|
|
1952
|
+
configChanged = true;
|
|
1953
|
+
emit({
|
|
1954
|
+
kind: "config-changed",
|
|
1955
|
+
file: configFile
|
|
1956
|
+
});
|
|
1957
|
+
return true;
|
|
1929
1958
|
};
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
reproduceCommand,
|
|
1953
|
-
cwd
|
|
1954
|
-
});
|
|
1955
|
-
return;
|
|
1956
|
-
}
|
|
1957
|
-
emit({
|
|
1958
|
-
kind: "ready",
|
|
1959
|
-
endpoints: await mergedEndpoints(attachments)
|
|
1960
|
-
});
|
|
1961
|
-
} catch (error) {
|
|
1959
|
+
configWatch = watchFiles([{
|
|
1960
|
+
address: configFile,
|
|
1961
|
+
paths: [configFile]
|
|
1962
|
+
}], () => void pausedForConfig(), onWatchError);
|
|
1963
|
+
const rebuild = async () => {
|
|
1964
|
+
try {
|
|
1965
|
+
const rePipeline = await runPipeline(input.entry, input.name, cwd, input.config, watchDeps);
|
|
1966
|
+
const stackPath = writeDevStackFile({
|
|
1967
|
+
entryPath: rePipeline.entryModule.path,
|
|
1968
|
+
cwd,
|
|
1969
|
+
configFile: rePipeline.configSource.file,
|
|
1970
|
+
name: rePipeline.name,
|
|
1971
|
+
assembled: rePipeline.assembled
|
|
1972
|
+
});
|
|
1973
|
+
const outcome = await (deps.alchemy ?? spawnAlchemy)(alchemyInvocation({
|
|
1974
|
+
command: "deploy",
|
|
1975
|
+
stackFileRelativePath: DEV_STACK_RELATIVE_PATH,
|
|
1976
|
+
cwd,
|
|
1977
|
+
stage: "dev",
|
|
1978
|
+
containerEnv: containerEnv(containers)
|
|
1979
|
+
}));
|
|
1980
|
+
if (outcome.signal !== null || outcome.exitCode !== 0) {
|
|
1962
1981
|
emit({
|
|
1963
|
-
kind: "
|
|
1964
|
-
|
|
1982
|
+
kind: "converge-failed",
|
|
1983
|
+
stackFilePath: stackPath,
|
|
1984
|
+
reproduceCommand,
|
|
1985
|
+
cwd
|
|
1965
1986
|
});
|
|
1987
|
+
return;
|
|
1966
1988
|
}
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1989
|
+
emit({
|
|
1990
|
+
kind: "ready",
|
|
1991
|
+
endpoints: await mergedEndpoints(attachments)
|
|
1992
|
+
});
|
|
1993
|
+
} catch (error) {
|
|
1994
|
+
emit({
|
|
1995
|
+
kind: "rebuild-failed",
|
|
1996
|
+
message: failureMessage(error)
|
|
1997
|
+
});
|
|
1998
|
+
}
|
|
1999
|
+
};
|
|
2000
|
+
let rebuilding = false;
|
|
2001
|
+
let changedDuringRebuild = false;
|
|
2002
|
+
const rebuildUntilSettled = async () => {
|
|
2003
|
+
rebuilding = true;
|
|
2004
|
+
do {
|
|
2005
|
+
changedDuringRebuild = false;
|
|
2006
|
+
await rebuild();
|
|
2007
|
+
} while (changedDuringRebuild && !pausedForConfig());
|
|
2008
|
+
rebuilding = false;
|
|
2009
|
+
};
|
|
2010
|
+
watch = watchFiles(targets, () => {
|
|
2011
|
+
if (pausedForConfig()) return;
|
|
2012
|
+
if (rebuilding) {
|
|
2013
|
+
changedDuringRebuild = true;
|
|
2014
|
+
return;
|
|
2015
|
+
}
|
|
2016
|
+
rebuildUntilSettled();
|
|
2017
|
+
}, onWatchError);
|
|
1972
2018
|
const startedWatch = watch;
|
|
1973
|
-
|
|
2019
|
+
const startedConfigWatch = configWatch;
|
|
2020
|
+
await Promise.all([watch.ready, configWatch.ready]);
|
|
1974
2021
|
let stopping = false;
|
|
1975
2022
|
let resolveClosed = () => void 0;
|
|
1976
2023
|
const closed = new Promise((resolve) => {
|
|
@@ -1981,6 +2028,7 @@ async function executeDev(input, deps, cwd) {
|
|
|
1981
2028
|
stopping = true;
|
|
1982
2029
|
emit({ kind: "stopping" });
|
|
1983
2030
|
startedWatch.stop();
|
|
2031
|
+
startedConfigWatch.stop();
|
|
1984
2032
|
(async () => {
|
|
1985
2033
|
for (const attachment of attachments) try {
|
|
1986
2034
|
await attachment.stopServices();
|
|
@@ -2003,6 +2051,7 @@ async function executeDev(input, deps, cwd) {
|
|
|
2003
2051
|
});
|
|
2004
2052
|
} catch (error) {
|
|
2005
2053
|
watch?.stop();
|
|
2054
|
+
configWatch?.stop();
|
|
2006
2055
|
await Promise.all(started.map((a) => a.stopServices().catch(() => void 0)));
|
|
2007
2056
|
if (CliStructuredError.is(error)) return notOk(error);
|
|
2008
2057
|
throw error;
|
|
@@ -2011,4 +2060,4 @@ async function executeDev(input, deps, cwd) {
|
|
|
2011
2060
|
//#endregion
|
|
2012
2061
|
export { executeDev };
|
|
2013
2062
|
|
|
2014
|
-
//# sourceMappingURL=execute-dev-
|
|
2063
|
+
//# sourceMappingURL=execute-dev-DAIUT0es-B3iBKmAS.mjs.map
|