everything-dev 1.44.1 → 1.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build.cjs +328 -0
- package/dist/build.cjs.map +1 -0
- package/dist/build.mjs +320 -0
- package/dist/build.mjs.map +1 -0
- package/dist/cli/init.cjs +1 -1
- package/dist/cli/init.mjs +1 -1
- package/dist/cli/sync.cjs +7 -1
- package/dist/cli/sync.cjs.map +1 -1
- package/dist/cli/sync.mjs +7 -1
- package/dist/cli/sync.mjs.map +1 -1
- package/dist/cli/upgrade.cjs +2 -2
- package/dist/cli/upgrade.mjs +2 -2
- package/dist/cli.cjs +36 -2
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.mjs +36 -2
- package/dist/cli.mjs.map +1 -1
- package/dist/code-artifacts.cjs +25 -0
- package/dist/code-artifacts.cjs.map +1 -0
- package/dist/code-artifacts.mjs +24 -0
- package/dist/code-artifacts.mjs.map +1 -0
- package/dist/contract.cjs +16 -2
- package/dist/contract.cjs.map +1 -1
- package/dist/contract.d.cts +83 -17
- package/dist/contract.d.cts.map +1 -1
- package/dist/contract.d.mts +83 -17
- package/dist/contract.d.mts.map +1 -1
- package/dist/contract.meta.cjs +2 -0
- package/dist/contract.meta.cjs.map +1 -1
- package/dist/contract.meta.d.cts +6 -0
- package/dist/contract.meta.d.mts +6 -0
- package/dist/contract.meta.mjs +2 -0
- package/dist/contract.meta.mjs.map +1 -1
- package/dist/contract.mjs +16 -3
- package/dist/contract.mjs.map +1 -1
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +2 -2
- package/dist/integrity.cjs +79 -0
- package/dist/integrity.cjs.map +1 -1
- package/dist/integrity.d.cts +17 -1
- package/dist/integrity.d.cts.map +1 -1
- package/dist/integrity.d.mts +17 -1
- package/dist/integrity.d.mts.map +1 -1
- package/dist/integrity.mjs +76 -1
- package/dist/integrity.mjs.map +1 -1
- package/dist/near-cli.cjs +12 -15
- package/dist/near-cli.cjs.map +1 -1
- package/dist/near-cli.mjs +12 -15
- package/dist/near-cli.mjs.map +1 -1
- package/dist/plugin.cjs +47 -347
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.cts +34 -15
- package/dist/plugin.d.cts.map +1 -1
- package/dist/plugin.d.mts +34 -15
- package/dist/plugin.d.mts.map +1 -1
- package/dist/plugin.mjs +32 -331
- package/dist/plugin.mjs.map +1 -1
- package/dist/publish.cjs +220 -0
- package/dist/publish.cjs.map +1 -0
- package/dist/publish.mjs +217 -0
- package/dist/publish.mjs.map +1 -0
- package/dist/types.d.cts +2 -2
- package/dist/types.d.mts +2 -2
- package/dist/utils/run.cjs +21 -3
- package/dist/utils/run.cjs.map +1 -1
- package/dist/utils/run.mjs +21 -3
- package/dist/utils/run.mjs.map +1 -1
- package/dist/utils/string.cjs +9 -0
- package/dist/utils/string.cjs.map +1 -0
- package/dist/utils/string.mjs +8 -0
- package/dist/utils/string.mjs.map +1 -0
- package/package.json +1 -1
package/dist/build.cjs
ADDED
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
|
|
2
|
+
const require_config = require('./config.cjs');
|
|
3
|
+
const require_integrity = require('./integrity.cjs');
|
|
4
|
+
const require_timing = require('./cli/timing.cjs');
|
|
5
|
+
const require_shared_deps = require('./shared-deps.cjs');
|
|
6
|
+
const require_run = require('./utils/run.cjs');
|
|
7
|
+
const require_string = require('./utils/string.cjs');
|
|
8
|
+
const require_theme = require('./utils/theme.cjs');
|
|
9
|
+
let node_fs = require("node:fs");
|
|
10
|
+
let node_path = require("node:path");
|
|
11
|
+
let node_process = require("node:process");
|
|
12
|
+
node_process = require_runtime.__toESM(node_process, 1);
|
|
13
|
+
let node_fs_promises = require("node:fs/promises");
|
|
14
|
+
|
|
15
|
+
//#region src/build.ts
|
|
16
|
+
const buildCommands = {
|
|
17
|
+
host: {
|
|
18
|
+
cmd: "bun",
|
|
19
|
+
args: ["run", "build"]
|
|
20
|
+
},
|
|
21
|
+
ui: {
|
|
22
|
+
cmd: "bun",
|
|
23
|
+
args: ["run", "build"]
|
|
24
|
+
},
|
|
25
|
+
api: {
|
|
26
|
+
cmd: "bun",
|
|
27
|
+
args: ["run", "build"]
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
function getPluginRef(entry) {
|
|
31
|
+
if (!entry || typeof entry === "string") return null;
|
|
32
|
+
return entry;
|
|
33
|
+
}
|
|
34
|
+
async function fileExists(path) {
|
|
35
|
+
try {
|
|
36
|
+
await (0, node_fs_promises.access)(path);
|
|
37
|
+
return true;
|
|
38
|
+
} catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async function readJsonFile(path) {
|
|
43
|
+
return JSON.parse(await (0, node_fs_promises.readFile)(path, "utf8"));
|
|
44
|
+
}
|
|
45
|
+
function resolveWorkspaceTarget(key, bosConfig, runtimeConfig, configDir) {
|
|
46
|
+
if (bosConfig?.app && key in bosConfig.app) {
|
|
47
|
+
const appEntry = bosConfig.app[key];
|
|
48
|
+
const devPath = require_config.resolveLocalDevelopmentPath(appEntry?.development, configDir);
|
|
49
|
+
if (devPath) return {
|
|
50
|
+
key,
|
|
51
|
+
kind: "app",
|
|
52
|
+
path: devPath
|
|
53
|
+
};
|
|
54
|
+
return {
|
|
55
|
+
key,
|
|
56
|
+
kind: "app",
|
|
57
|
+
path: `${configDir}/${key}`
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const pluginPath = (runtimeConfig?.plugins?.[key])?.localPath ?? require_config.resolveLocalDevelopmentPath(getPluginRef(bosConfig?.plugins?.[key])?.development, configDir);
|
|
61
|
+
if (pluginPath) return {
|
|
62
|
+
key,
|
|
63
|
+
kind: "plugin",
|
|
64
|
+
path: pluginPath
|
|
65
|
+
};
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
function selectWorkspaceTargets(packages, bosConfig) {
|
|
69
|
+
const allPackages = [...Object.keys(bosConfig?.app ?? {}), ...Object.keys(bosConfig?.plugins ?? {})];
|
|
70
|
+
if (packages === "all") return allPackages;
|
|
71
|
+
return packages.split(",").map((pkg) => pkg.trim()).filter((pkg) => allPackages.includes(pkg));
|
|
72
|
+
}
|
|
73
|
+
async function runBuildAttempt(cmd, args, cwd, env, verbose, wsKey) {
|
|
74
|
+
let zephyrAuthShown = false;
|
|
75
|
+
const result = await require_run.run(cmd, args, {
|
|
76
|
+
cwd,
|
|
77
|
+
env,
|
|
78
|
+
capture: true,
|
|
79
|
+
onChunk: (stream, chunk) => {
|
|
80
|
+
if (verbose) if (stream === "stdout") node_process.default.stdout.write(chunk);
|
|
81
|
+
else node_process.default.stderr.write(chunk);
|
|
82
|
+
if (zephyrAuthShown) return;
|
|
83
|
+
const text = chunk.toString("utf-8");
|
|
84
|
+
if (/Authentication required.*log in to Zephyr/i.test(text) || /auth\.zephyr-cloud\.io\/authorize/.test(text)) {
|
|
85
|
+
zephyrAuthShown = true;
|
|
86
|
+
const urlMatch = text.match(/https:\/\/auth\.zephyr-cloud\.io\/authorize\S+/);
|
|
87
|
+
console.log();
|
|
88
|
+
console.log(require_theme.colors.yellow(` ⚠ Zephyr authentication required for ${wsKey}`));
|
|
89
|
+
if (urlMatch) console.log(` ${require_theme.colors.cyan(urlMatch[0])}`);
|
|
90
|
+
console.log(require_theme.colors.dim(" Waiting for authentication..."));
|
|
91
|
+
console.log();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
const stdout = result?.stdout ?? "";
|
|
96
|
+
const stderr = result?.stderr ?? "";
|
|
97
|
+
const exitCode = result?.exitCode ?? 0;
|
|
98
|
+
const output = `${stdout}\n${stderr}`;
|
|
99
|
+
const deployEntries = require_integrity.parseDeployLines(output);
|
|
100
|
+
if (exitCode !== 0) return {
|
|
101
|
+
success: false,
|
|
102
|
+
error: `Build failed (exit code ${exitCode})\n${output.trim().split("\n").slice(-5).join("\n")}`,
|
|
103
|
+
exitCode,
|
|
104
|
+
output,
|
|
105
|
+
deployEntries
|
|
106
|
+
};
|
|
107
|
+
const zeMatch = output.match(/ZE\d+/);
|
|
108
|
+
if (zeMatch) return {
|
|
109
|
+
success: false,
|
|
110
|
+
error: `Zephyr upload failed (${zeMatch[0]})`,
|
|
111
|
+
exitCode: 0,
|
|
112
|
+
output,
|
|
113
|
+
deployEntries
|
|
114
|
+
};
|
|
115
|
+
if (deployEntries.length > 0) return {
|
|
116
|
+
success: true,
|
|
117
|
+
url: deployEntries[0]?.url,
|
|
118
|
+
exitCode: 0,
|
|
119
|
+
output,
|
|
120
|
+
deployEntries
|
|
121
|
+
};
|
|
122
|
+
const deployMatch = output.match(/🚀.*Deployed:\s*(https?:\S+)/);
|
|
123
|
+
if (deployMatch) return {
|
|
124
|
+
success: true,
|
|
125
|
+
url: deployMatch[1],
|
|
126
|
+
exitCode: 0,
|
|
127
|
+
output
|
|
128
|
+
};
|
|
129
|
+
if (env.DEPLOY === "true") return {
|
|
130
|
+
success: false,
|
|
131
|
+
error: "No deploy URL found (Zephyr may have failed)",
|
|
132
|
+
exitCode: 0,
|
|
133
|
+
output
|
|
134
|
+
};
|
|
135
|
+
return {
|
|
136
|
+
success: true,
|
|
137
|
+
exitCode: 0,
|
|
138
|
+
output
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
async function buildOneWorkspace(ws, env, opts) {
|
|
142
|
+
const pkgJson = await readJsonFile(`${ws.path}/package.json`);
|
|
143
|
+
const buildConfig = opts.deploy && pkgJson.scripts?.deploy ? {
|
|
144
|
+
cmd: "bun",
|
|
145
|
+
args: ["run", "deploy"]
|
|
146
|
+
} : buildCommands[ws.key] ?? {
|
|
147
|
+
cmd: "bun",
|
|
148
|
+
args: ["run", "build"]
|
|
149
|
+
};
|
|
150
|
+
const wsEnv = { ...env };
|
|
151
|
+
const startTime = Date.now();
|
|
152
|
+
let attempt = await runBuildAttempt(buildConfig.cmd, buildConfig.args, ws.path, wsEnv, opts.verbose ?? false, ws.key);
|
|
153
|
+
let retried = false;
|
|
154
|
+
if (!attempt.success && attempt.exitCode === 0 && opts.deploy) {
|
|
155
|
+
if (!opts.verbose) console.log(` ${require_theme.colors.yellow("↻")} ${require_string.padRight(ws.key, 28)} retrying...`);
|
|
156
|
+
retried = true;
|
|
157
|
+
attempt = await runBuildAttempt(buildConfig.cmd, buildConfig.args, ws.path, wsEnv, opts.verbose ?? false, ws.key);
|
|
158
|
+
}
|
|
159
|
+
const durationMs = Date.now() - startTime;
|
|
160
|
+
const result = {
|
|
161
|
+
key: ws.key,
|
|
162
|
+
kind: ws.kind,
|
|
163
|
+
success: attempt.success,
|
|
164
|
+
url: attempt.url,
|
|
165
|
+
error: attempt.error,
|
|
166
|
+
deployEntries: attempt.deployEntries,
|
|
167
|
+
durationMs,
|
|
168
|
+
retried: retried ? true : void 0
|
|
169
|
+
};
|
|
170
|
+
if (!opts.verbose) {
|
|
171
|
+
const name = require_string.padRight(ws.key, 28);
|
|
172
|
+
if (result.success) {
|
|
173
|
+
const duration = require_timing.formatDuration(durationMs);
|
|
174
|
+
const retryTag = retried ? " (retried)" : "";
|
|
175
|
+
console.log(` ${require_theme.colors.green(require_theme.icons.ok)} ${name} ${require_theme.colors.dim(duration + retryTag)}`);
|
|
176
|
+
} else {
|
|
177
|
+
const errorLine = (result.error ?? "Failed").split("\n")[0];
|
|
178
|
+
console.log(` ${require_theme.colors.error(require_theme.icons.err)} ${name} ${errorLine}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return result;
|
|
182
|
+
}
|
|
183
|
+
async function buildWorkspaceTargets(opts) {
|
|
184
|
+
const existing = [];
|
|
185
|
+
const skipped = [];
|
|
186
|
+
for (const target of opts.targets) {
|
|
187
|
+
const resolved = resolveWorkspaceTarget(target, opts.bosConfig, opts.runtimeConfig, opts.configDir);
|
|
188
|
+
if (!resolved) {
|
|
189
|
+
skipped.push(target);
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if (await fileExists(`${resolved.path}/package.json`)) existing.push(resolved);
|
|
193
|
+
else skipped.push(target);
|
|
194
|
+
}
|
|
195
|
+
if (existing.length === 0) return {
|
|
196
|
+
built: [],
|
|
197
|
+
skipped
|
|
198
|
+
};
|
|
199
|
+
if ((await require_shared_deps.syncResolvedSharedDeps({
|
|
200
|
+
configDir: opts.configDir,
|
|
201
|
+
hostMode: "local",
|
|
202
|
+
bosConfig: opts.bosConfig ?? void 0,
|
|
203
|
+
extendsChain: []
|
|
204
|
+
})).catalogChanged) await require_run.run("bun", ["install"], { cwd: opts.configDir });
|
|
205
|
+
const shouldBuildPlugin = existing.some((entry) => entry.key === "api");
|
|
206
|
+
const forceRebuild = opts.deploy;
|
|
207
|
+
const buildTasks = [buildEverythingDevQuietly(opts.configDir, forceRebuild)];
|
|
208
|
+
if (shouldBuildPlugin) buildTasks.push(buildEveryPluginQuietly(opts.configDir, forceRebuild));
|
|
209
|
+
await Promise.all(buildTasks);
|
|
210
|
+
const env = {
|
|
211
|
+
...node_process.default.env,
|
|
212
|
+
NODE_ENV: opts.deploy ? "production" : "development"
|
|
213
|
+
};
|
|
214
|
+
if (opts.deploy) env.DEPLOY = "true";
|
|
215
|
+
else delete env.DEPLOY;
|
|
216
|
+
const bosConfigPath = (0, node_path.join)(opts.configDir, "bos.config.json");
|
|
217
|
+
let configSnapshot;
|
|
218
|
+
if (opts.deploy && (0, node_fs.existsSync)(bosConfigPath)) configSnapshot = (0, node_fs.readFileSync)(bosConfigPath, "utf-8");
|
|
219
|
+
const orderedExisting = opts.deploy ? [
|
|
220
|
+
...existing.filter((entry) => entry.kind === "app" && entry.key !== "host"),
|
|
221
|
+
...existing.filter((entry) => entry.kind === "plugin"),
|
|
222
|
+
...existing.filter((entry) => entry.kind === "app" && entry.key === "host")
|
|
223
|
+
] : existing;
|
|
224
|
+
const parallelGroup = opts.deploy ? orderedExisting.filter((e) => e.key !== "host") : orderedExisting;
|
|
225
|
+
const sequentialGroup = opts.deploy ? orderedExisting.filter((e) => e.key === "host") : [];
|
|
226
|
+
const built = [];
|
|
227
|
+
const deployResults = [];
|
|
228
|
+
if (opts.deploy && parallelGroup.length > 0) {
|
|
229
|
+
const total = parallelGroup.length + sequentialGroup.length;
|
|
230
|
+
console.log();
|
|
231
|
+
console.log(` Building ${total} workspace${total > 1 ? "s" : ""}...`);
|
|
232
|
+
console.log();
|
|
233
|
+
const results = await Promise.allSettled(parallelGroup.map((ws) => buildOneWorkspace(ws, env, opts)));
|
|
234
|
+
const allDeployEntries = [];
|
|
235
|
+
for (let i = 0; i < parallelGroup.length; i++) {
|
|
236
|
+
const ws = parallelGroup[i];
|
|
237
|
+
const result = results[i];
|
|
238
|
+
if (result.status === "fulfilled") {
|
|
239
|
+
if (result.value.success) built.push(ws.key);
|
|
240
|
+
if (result.value.deployEntries) allDeployEntries.push(...result.value.deployEntries);
|
|
241
|
+
const { deployEntries: _deployEntries, ...deployResult } = result.value;
|
|
242
|
+
deployResults.push(deployResult);
|
|
243
|
+
} else deployResults.push({
|
|
244
|
+
key: ws.key,
|
|
245
|
+
kind: ws.kind,
|
|
246
|
+
success: false,
|
|
247
|
+
error: result.reason?.message ?? "Unknown error"
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
if (configSnapshot && allDeployEntries.length > 0) {
|
|
251
|
+
const merged = require_integrity.applyDeployResults(JSON.parse(configSnapshot), allDeployEntries);
|
|
252
|
+
(0, node_fs.writeFileSync)(bosConfigPath, `${JSON.stringify(merged, null, 2)}\n`);
|
|
253
|
+
}
|
|
254
|
+
for (const ws of sequentialGroup) {
|
|
255
|
+
const result = await buildOneWorkspace(ws, env, opts);
|
|
256
|
+
if (result.success) built.push(ws.key);
|
|
257
|
+
if (result.deployEntries) {
|
|
258
|
+
const hostEntries = result.deployEntries.filter((r) => r.urlField.startsWith("app.host"));
|
|
259
|
+
if (hostEntries.length > 0 && (0, node_fs.existsSync)(bosConfigPath)) {
|
|
260
|
+
const merged = require_integrity.applyDeployResults(JSON.parse((0, node_fs.readFileSync)(bosConfigPath, "utf-8")), hostEntries);
|
|
261
|
+
(0, node_fs.writeFileSync)(bosConfigPath, `${JSON.stringify(merged, null, 2)}\n`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
const { deployEntries: _deployEntries, ...sequentialResult } = result;
|
|
265
|
+
deployResults.push(sequentialResult);
|
|
266
|
+
}
|
|
267
|
+
console.log();
|
|
268
|
+
} else for (const resolved of orderedExisting) {
|
|
269
|
+
const buildConfig = buildCommands[resolved.key] ?? {
|
|
270
|
+
cmd: "bun",
|
|
271
|
+
args: ["run", "build"]
|
|
272
|
+
};
|
|
273
|
+
await require_run.run(buildConfig.cmd, buildConfig.args, {
|
|
274
|
+
cwd: resolved.path,
|
|
275
|
+
env
|
|
276
|
+
});
|
|
277
|
+
built.push(resolved.key);
|
|
278
|
+
}
|
|
279
|
+
return {
|
|
280
|
+
built,
|
|
281
|
+
skipped,
|
|
282
|
+
deployResults: opts.deploy ? deployResults : void 0
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
async function buildEveryPluginQuietly(cwd, force = false) {
|
|
286
|
+
if (!await fileExists(`${`${cwd}/packages/every-plugin`}/package.json`)) return;
|
|
287
|
+
if (await fileExists(`${cwd}/packages/every-plugin/dist/build/rspack/plugin.mjs`) && !force) return;
|
|
288
|
+
const result = await require_run.run("bun", [
|
|
289
|
+
"run",
|
|
290
|
+
"--cwd",
|
|
291
|
+
"packages/every-plugin",
|
|
292
|
+
"build"
|
|
293
|
+
], {
|
|
294
|
+
cwd,
|
|
295
|
+
capture: true
|
|
296
|
+
});
|
|
297
|
+
if (result.exitCode === 0) return;
|
|
298
|
+
if (result.stdout.trim()) node_process.default.stdout.write(result.stdout);
|
|
299
|
+
if (result.stderr.trim()) node_process.default.stderr.write(result.stderr);
|
|
300
|
+
throw new Error(`bun run --cwd packages/every-plugin build failed with exit code ${result.exitCode}`);
|
|
301
|
+
}
|
|
302
|
+
async function buildEverythingDevQuietly(cwd, force = false) {
|
|
303
|
+
if (!await fileExists(`${`${cwd}/packages/everything-dev`}/package.json`)) return;
|
|
304
|
+
if (await fileExists(`${cwd}/packages/everything-dev/dist/index.mjs`) && !force) return;
|
|
305
|
+
const result = await require_run.run("bun", [
|
|
306
|
+
"run",
|
|
307
|
+
"--cwd",
|
|
308
|
+
"packages/everything-dev",
|
|
309
|
+
"build"
|
|
310
|
+
], {
|
|
311
|
+
cwd,
|
|
312
|
+
capture: true
|
|
313
|
+
});
|
|
314
|
+
if (result.exitCode === 0) return;
|
|
315
|
+
if (result.stdout.trim()) node_process.default.stdout.write(result.stdout);
|
|
316
|
+
if (result.stderr.trim()) node_process.default.stderr.write(result.stderr);
|
|
317
|
+
throw new Error(`bun run --cwd packages/everything-dev build failed with exit code ${result.exitCode}`);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
//#endregion
|
|
321
|
+
exports.buildEveryPluginQuietly = buildEveryPluginQuietly;
|
|
322
|
+
exports.buildEverythingDevQuietly = buildEverythingDevQuietly;
|
|
323
|
+
exports.buildWorkspaceTargets = buildWorkspaceTargets;
|
|
324
|
+
exports.fileExists = fileExists;
|
|
325
|
+
exports.getPluginRef = getPluginRef;
|
|
326
|
+
exports.readJsonFile = readJsonFile;
|
|
327
|
+
exports.selectWorkspaceTargets = selectWorkspaceTargets;
|
|
328
|
+
//# sourceMappingURL=build.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.cjs","names":["resolveLocalDevelopmentPath","run","colors","parseDeployLines","padRight","formatDuration","icons","syncResolvedSharedDeps","process","applyDeployResults"],"sources":["../src/build.ts"],"sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { access, readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport process from \"node:process\";\nimport { formatDuration } from \"./cli/timing\";\nimport { resolveLocalDevelopmentPath } from \"./config\";\nimport type { WorkspaceDeployResult } from \"./contract\";\nimport { applyDeployResults, type DeployResultEntry, parseDeployLines } from \"./integrity\";\nimport { syncResolvedSharedDeps } from \"./shared-deps\";\nimport type { BosConfig, BosPluginRef, RuntimeConfig } from \"./types\";\nimport { run } from \"./utils/run\";\nimport { padRight } from \"./utils/string\";\nimport { colors, icons } from \"./utils/theme\";\n\nconst buildCommands: Record<string, { cmd: string; args: string[] }> = {\n host: { cmd: \"bun\", args: [\"run\", \"build\"] },\n ui: { cmd: \"bun\", args: [\"run\", \"build\"] },\n api: { cmd: \"bun\", args: [\"run\", \"build\"] },\n};\n\ntype WorkspaceTarget = {\n key: string;\n kind: \"app\" | \"plugin\";\n path: string;\n};\n\nexport function getPluginRef(entry: string | BosPluginRef | undefined | null): BosPluginRef | null {\n if (!entry || typeof entry === \"string\") return null;\n return entry;\n}\n\nexport async function fileExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function readJsonFile<T>(path: string): Promise<T> {\n return JSON.parse(await readFile(path, \"utf8\")) as T;\n}\n\nfunction resolveWorkspaceTarget(\n key: string,\n bosConfig: BosConfig | null,\n runtimeConfig: RuntimeConfig | null,\n configDir: string,\n): WorkspaceTarget | null {\n if (bosConfig?.app && key in bosConfig.app) {\n const appEntry = (bosConfig.app as Record<string, { development?: string }>)[key];\n const devPath = resolveLocalDevelopmentPath(appEntry?.development, configDir);\n if (devPath) {\n return {\n key,\n kind: \"app\",\n path: devPath,\n };\n }\n return {\n key,\n kind: \"app\",\n path: `${configDir}/${key}`,\n };\n }\n\n const runtimePlugin = runtimeConfig?.plugins?.[key];\n const pluginPath =\n runtimePlugin?.localPath ??\n resolveLocalDevelopmentPath(getPluginRef(bosConfig?.plugins?.[key])?.development, configDir);\n if (pluginPath) {\n return {\n key,\n kind: \"plugin\",\n path: pluginPath,\n };\n }\n\n return null;\n}\n\nexport function selectWorkspaceTargets(packages: string, bosConfig: BosConfig | null): string[] {\n const allPackages = [\n ...Object.keys(bosConfig?.app ?? {}),\n ...Object.keys(bosConfig?.plugins ?? {}),\n ];\n if (packages === \"all\") {\n return allPackages;\n }\n\n return packages\n .split(\",\")\n .map((pkg) => pkg.trim())\n .filter((pkg) => allPackages.includes(pkg));\n}\n\ninterface BuildAttemptResult {\n success: boolean;\n url?: string;\n error?: string;\n exitCode: number;\n output: string;\n deployEntries?: DeployResultEntry[];\n}\n\nasync function runBuildAttempt(\n cmd: string,\n args: string[],\n cwd: string,\n env: Record<string, string>,\n verbose: boolean,\n wsKey: string,\n): Promise<BuildAttemptResult> {\n let zephyrAuthShown = false;\n const result = await run(cmd, args, {\n cwd,\n env,\n capture: true,\n onChunk: (stream, chunk) => {\n if (verbose) {\n if (stream === \"stdout\") process.stdout.write(chunk);\n else process.stderr.write(chunk);\n }\n if (zephyrAuthShown) return;\n const text = chunk.toString(\"utf-8\");\n if (\n /Authentication required.*log in to Zephyr/i.test(text) ||\n /auth\\.zephyr-cloud\\.io\\/authorize/.test(text)\n ) {\n zephyrAuthShown = true;\n const urlMatch = text.match(/https:\\/\\/auth\\.zephyr-cloud\\.io\\/authorize\\S+/);\n console.log();\n console.log(colors.yellow(` ⚠ Zephyr authentication required for ${wsKey}`));\n if (urlMatch) {\n console.log(` ${colors.cyan(urlMatch[0])}`);\n }\n console.log(colors.dim(\" Waiting for authentication...\"));\n console.log();\n }\n },\n });\n const stdout = result?.stdout ?? \"\";\n const stderr = result?.stderr ?? \"\";\n const exitCode = result?.exitCode ?? 0;\n const output = `${stdout}\\n${stderr}`;\n\n const deployEntries = parseDeployLines(output);\n\n if (exitCode !== 0) {\n const lastLines = output.trim().split(\"\\n\").slice(-5).join(\"\\n\");\n return {\n success: false,\n error: `Build failed (exit code ${exitCode})\\n${lastLines}`,\n exitCode,\n output,\n deployEntries,\n };\n }\n\n const zeMatch = output.match(/ZE\\d+/);\n if (zeMatch) {\n return {\n success: false,\n error: `Zephyr upload failed (${zeMatch[0]})`,\n exitCode: 0,\n output,\n deployEntries,\n };\n }\n\n if (deployEntries.length > 0) {\n return { success: true, url: deployEntries[0]?.url, exitCode: 0, output, deployEntries };\n }\n\n const deployMatch = output.match(/🚀.*Deployed:\\s*(https?:\\S+)/);\n if (deployMatch) {\n return { success: true, url: deployMatch[1], exitCode: 0, output };\n }\n\n if (env.DEPLOY === \"true\") {\n return {\n success: false,\n error: \"No deploy URL found (Zephyr may have failed)\",\n exitCode: 0,\n output,\n };\n }\n return { success: true, exitCode: 0, output };\n}\n\ninterface InternalWorkspaceResult extends WorkspaceDeployResult {\n deployEntries?: DeployResultEntry[];\n}\n\nasync function buildOneWorkspace(\n ws: WorkspaceTarget,\n env: Record<string, string>,\n opts: { deploy: boolean; verbose?: boolean },\n): Promise<InternalWorkspaceResult> {\n const pkgJson = await readJsonFile<{\n scripts?: Record<string, string>;\n }>(`${ws.path}/package.json`);\n const shouldDeployScript = opts.deploy && pkgJson.scripts?.deploy;\n const buildConfig = shouldDeployScript\n ? { cmd: \"bun\", args: [\"run\", \"deploy\"] }\n : (buildCommands[ws.key] ?? { cmd: \"bun\", args: [\"run\", \"build\"] });\n\n const wsEnv = { ...env };\n\n const startTime = Date.now();\n let attempt = await runBuildAttempt(\n buildConfig.cmd,\n buildConfig.args,\n ws.path,\n wsEnv,\n opts.verbose ?? false,\n ws.key,\n );\n\n let retried = false;\n\n if (!attempt.success && attempt.exitCode === 0 && opts.deploy) {\n if (!opts.verbose) {\n console.log(` ${colors.yellow(\"↻\")} ${padRight(ws.key, 28)} retrying...`);\n }\n retried = true;\n attempt = await runBuildAttempt(\n buildConfig.cmd,\n buildConfig.args,\n ws.path,\n wsEnv,\n opts.verbose ?? false,\n ws.key,\n );\n }\n\n const durationMs = Date.now() - startTime;\n const result: InternalWorkspaceResult = {\n key: ws.key,\n kind: ws.kind,\n success: attempt.success,\n url: attempt.url,\n error: attempt.error,\n deployEntries: attempt.deployEntries,\n durationMs,\n retried: retried ? true : undefined,\n };\n\n if (!opts.verbose) {\n const name = padRight(ws.key, 28);\n if (result.success) {\n const duration = formatDuration(durationMs);\n const retryTag = retried ? \" (retried)\" : \"\";\n console.log(` ${colors.green(icons.ok)} ${name} ${colors.dim(duration + retryTag)}`);\n } else {\n const errorLine = (result.error ?? \"Failed\").split(\"\\n\")[0];\n console.log(` ${colors.error(icons.err)} ${name} ${errorLine}`);\n }\n }\n\n return result;\n}\n\nexport async function buildWorkspaceTargets(opts: {\n configDir: string;\n bosConfig: BosConfig | null;\n runtimeConfig: RuntimeConfig | null;\n targets: string[];\n deploy: boolean;\n verbose?: boolean;\n}): Promise<{\n built: string[];\n skipped: string[];\n deployResults?: WorkspaceDeployResult[];\n}> {\n const existing: WorkspaceTarget[] = [];\n const skipped: string[] = [];\n\n for (const target of opts.targets) {\n const resolved = resolveWorkspaceTarget(\n target,\n opts.bosConfig,\n opts.runtimeConfig,\n opts.configDir,\n );\n if (!resolved) {\n skipped.push(target);\n continue;\n }\n\n const exists = await fileExists(`${resolved.path}/package.json`);\n if (exists) existing.push(resolved);\n else skipped.push(target);\n }\n\n if (existing.length === 0) {\n return { built: [], skipped };\n }\n\n const sharedSync = await syncResolvedSharedDeps({\n configDir: opts.configDir,\n hostMode: \"local\",\n bosConfig: opts.bosConfig ?? undefined,\n extendsChain: [],\n });\n if (sharedSync.catalogChanged) {\n await run(\"bun\", [\"install\"], { cwd: opts.configDir });\n }\n\n const shouldBuildPlugin = existing.some((entry) => entry.key === \"api\");\n\n const forceRebuild = opts.deploy;\n const buildTasks: Promise<void>[] = [buildEverythingDevQuietly(opts.configDir, forceRebuild)];\n if (shouldBuildPlugin) {\n buildTasks.push(buildEveryPluginQuietly(opts.configDir, forceRebuild));\n }\n await Promise.all(buildTasks);\n\n const env: Record<string, string> = {\n ...process.env,\n NODE_ENV: opts.deploy ? \"production\" : \"development\",\n };\n if (opts.deploy) {\n env.DEPLOY = \"true\";\n } else {\n delete env.DEPLOY;\n }\n\n const bosConfigPath = join(opts.configDir, \"bos.config.json\");\n let configSnapshot: string | undefined;\n if (opts.deploy && existsSync(bosConfigPath)) {\n configSnapshot = readFileSync(bosConfigPath, \"utf-8\");\n }\n\n const orderedExisting = opts.deploy\n ? [\n ...existing.filter((entry) => entry.kind === \"app\" && entry.key !== \"host\"),\n ...existing.filter((entry) => entry.kind === \"plugin\"),\n ...existing.filter((entry) => entry.kind === \"app\" && entry.key === \"host\"),\n ]\n : existing;\n\n const parallelGroup = opts.deploy\n ? orderedExisting.filter((e) => e.key !== \"host\")\n : orderedExisting;\n const sequentialGroup = opts.deploy ? orderedExisting.filter((e) => e.key === \"host\") : [];\n\n const built: string[] = [];\n const deployResults: WorkspaceDeployResult[] = [];\n\n if (opts.deploy && parallelGroup.length > 0) {\n const total = parallelGroup.length + sequentialGroup.length;\n console.log();\n console.log(` Building ${total} workspace${total > 1 ? \"s\" : \"\"}...`);\n console.log();\n\n const results = await Promise.allSettled(\n parallelGroup.map((ws) => buildOneWorkspace(ws, env, opts)),\n );\n\n const allDeployEntries: DeployResultEntry[] = [];\n for (let i = 0; i < parallelGroup.length; i++) {\n const ws = parallelGroup[i];\n const result = results[i];\n if (result.status === \"fulfilled\") {\n if (result.value.success) {\n built.push(ws.key);\n }\n if (result.value.deployEntries) {\n allDeployEntries.push(...result.value.deployEntries);\n }\n const { deployEntries: _deployEntries, ...deployResult } = result.value;\n deployResults.push(deployResult);\n } else {\n deployResults.push({\n key: ws.key,\n kind: ws.kind,\n success: false,\n error: result.reason?.message ?? \"Unknown error\",\n });\n }\n }\n\n if (configSnapshot && allDeployEntries.length > 0) {\n const config = JSON.parse(configSnapshot) as Record<string, unknown>;\n const merged = applyDeployResults(config, allDeployEntries);\n writeFileSync(bosConfigPath, `${JSON.stringify(merged, null, 2)}\\n`);\n }\n\n for (const ws of sequentialGroup) {\n const result = await buildOneWorkspace(ws, env, opts);\n if (result.success) {\n built.push(ws.key);\n }\n if (result.deployEntries) {\n const hostEntries = result.deployEntries.filter((r) => r.urlField.startsWith(\"app.host\"));\n if (hostEntries.length > 0 && existsSync(bosConfigPath)) {\n const currentConfig = JSON.parse(readFileSync(bosConfigPath, \"utf-8\")) as Record<\n string,\n unknown\n >;\n const merged = applyDeployResults(currentConfig, hostEntries);\n writeFileSync(bosConfigPath, `${JSON.stringify(merged, null, 2)}\\n`);\n }\n }\n const { deployEntries: _deployEntries, ...sequentialResult } = result;\n deployResults.push(sequentialResult);\n }\n\n console.log();\n } else {\n for (const resolved of orderedExisting) {\n const buildConfig = buildCommands[resolved.key] ?? {\n cmd: \"bun\",\n args: [\"run\", \"build\"],\n };\n\n await run(buildConfig.cmd, buildConfig.args, {\n cwd: resolved.path,\n env,\n });\n built.push(resolved.key);\n }\n }\n\n return { built, skipped, deployResults: opts.deploy ? deployResults : undefined };\n}\n\nexport async function buildEveryPluginQuietly(cwd: string, force = false) {\n const packageDir = `${cwd}/packages/every-plugin`;\n const packageExists = await fileExists(`${packageDir}/package.json`);\n if (!packageExists) {\n return;\n }\n\n const distPath = `${cwd}/packages/every-plugin/dist/build/rspack/plugin.mjs`;\n const distExists = await fileExists(distPath);\n\n if (distExists && !force) {\n return;\n }\n\n const result = (await run(\"bun\", [\"run\", \"--cwd\", \"packages/every-plugin\", \"build\"], {\n cwd,\n capture: true,\n })) as { stdout: string; stderr: string; exitCode: number };\n\n if (result.exitCode === 0) {\n return;\n }\n\n if (result.stdout.trim()) {\n process.stdout.write(result.stdout);\n }\n\n if (result.stderr.trim()) {\n process.stderr.write(result.stderr);\n }\n\n throw new Error(\n `bun run --cwd packages/every-plugin build failed with exit code ${result.exitCode}`,\n );\n}\n\nexport async function buildEverythingDevQuietly(cwd: string, force = false) {\n const packageDir = `${cwd}/packages/everything-dev`;\n const packageExists = await fileExists(`${packageDir}/package.json`);\n if (!packageExists) {\n return;\n }\n\n const distPath = `${cwd}/packages/everything-dev/dist/index.mjs`;\n const distExists = await fileExists(distPath);\n\n if (distExists && !force) {\n return;\n }\n\n const result = (await run(\"bun\", [\"run\", \"--cwd\", \"packages/everything-dev\", \"build\"], {\n cwd,\n capture: true,\n })) as { stdout: string; stderr: string; exitCode: number };\n\n if (result.exitCode === 0) {\n return;\n }\n\n if (result.stdout.trim()) {\n process.stdout.write(result.stdout);\n }\n\n if (result.stderr.trim()) {\n process.stderr.write(result.stderr);\n }\n\n throw new Error(\n `bun run --cwd packages/everything-dev build failed with exit code ${result.exitCode}`,\n );\n}\n"],"mappings":"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"}
|