everything-dev 1.44.0 → 1.45.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/api-contract.cjs +26 -21
- package/dist/api-contract.cjs.map +1 -1
- package/dist/api-contract.mjs +27 -22
- package/dist/api-contract.mjs.map +1 -1
- package/dist/cli/catalog.cjs +2 -2
- package/dist/cli/catalog.cjs.map +1 -1
- package/dist/cli/catalog.mjs +2 -2
- package/dist/cli/catalog.mjs.map +1 -1
- package/dist/cli/infra.cjs +3 -0
- package/dist/cli/infra.cjs.map +1 -1
- package/dist/cli/infra.mjs +3 -0
- package/dist/cli/infra.mjs.map +1 -1
- package/dist/cli/init.cjs +5 -2
- package/dist/cli/init.cjs.map +1 -1
- package/dist/cli/init.d.cts +1 -1
- package/dist/cli/init.d.cts.map +1 -1
- package/dist/cli/init.d.mts +1 -1
- package/dist/cli/init.d.mts.map +1 -1
- package/dist/cli/init.mjs +5 -2
- package/dist/cli/init.mjs.map +1 -1
- package/dist/cli/status.cjs +8 -19
- package/dist/cli/status.cjs.map +1 -1
- package/dist/cli/status.mjs +8 -19
- package/dist/cli/status.mjs.map +1 -1
- package/dist/cli/sync.cjs +6 -0
- package/dist/cli/sync.cjs.map +1 -1
- package/dist/cli/sync.mjs +6 -0
- package/dist/cli/sync.mjs.map +1 -1
- package/dist/cli.cjs +43 -4
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.mjs +43 -4
- package/dist/cli.mjs.map +1 -1
- package/dist/config.cjs +22 -11
- package/dist/config.cjs.map +1 -1
- package/dist/config.d.cts.map +1 -1
- package/dist/config.d.mts.map +1 -1
- package/dist/config.mjs +22 -11
- package/dist/config.mjs.map +1 -1
- package/dist/contract.cjs +22 -7
- package/dist/contract.cjs.map +1 -1
- package/dist/contract.d.cts +80 -7
- package/dist/contract.d.cts.map +1 -1
- package/dist/contract.d.mts +80 -7
- 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 +22 -8
- package/dist/contract.mjs.map +1 -1
- package/dist/dev-session.cjs +3 -1
- package/dist/dev-session.cjs.map +1 -1
- package/dist/dev-session.mjs +3 -1
- package/dist/dev-session.mjs.map +1 -1
- package/dist/fastkv.cjs +2 -1
- package/dist/fastkv.cjs.map +1 -1
- package/dist/fastkv.mjs +2 -1
- package/dist/fastkv.mjs.map +1 -1
- package/dist/http-client.cjs +22 -2
- package/dist/http-client.cjs.map +1 -1
- package/dist/http-client.mjs +22 -2
- package/dist/http-client.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 +116 -0
- package/dist/integrity.cjs.map +1 -1
- package/dist/integrity.d.cts +21 -1
- package/dist/integrity.d.cts.map +1 -1
- package/dist/integrity.d.mts +21 -1
- package/dist/integrity.d.mts.map +1 -1
- package/dist/integrity.mjs +111 -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/orchestrator.cjs +39 -23
- package/dist/orchestrator.cjs.map +1 -1
- package/dist/orchestrator.mjs +39 -23
- package/dist/orchestrator.mjs.map +1 -1
- package/dist/plugin.cjs +332 -108
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.cts +32 -2
- package/dist/plugin.d.cts.map +1 -1
- package/dist/plugin.d.mts +32 -2
- package/dist/plugin.d.mts.map +1 -1
- package/dist/plugin.mjs +335 -111
- package/dist/plugin.mjs.map +1 -1
- package/dist/types.d.cts +2 -2
- package/dist/types.d.mts +2 -2
- package/package.json +1 -1
package/dist/plugin.cjs
CHANGED
|
@@ -231,9 +231,9 @@ async function waitForPublishedConfig(opts) {
|
|
|
231
231
|
const reason = lastError instanceof Error ? ` Last error: ${lastError.message}` : "";
|
|
232
232
|
throw new Error(`Timed out waiting for publish confirmation at bos://${opts.account}/${opts.gateway}.${reason}`);
|
|
233
233
|
}
|
|
234
|
-
async function buildEveryPluginQuietly(cwd) {
|
|
234
|
+
async function buildEveryPluginQuietly(cwd, force = false) {
|
|
235
235
|
if (!await fileExists(`${`${cwd}/packages/every-plugin`}/package.json`)) return;
|
|
236
|
-
if (await fileExists(`${cwd}/packages/every-plugin/dist/build/rspack/plugin.mjs`)) return;
|
|
236
|
+
if (await fileExists(`${cwd}/packages/every-plugin/dist/build/rspack/plugin.mjs`) && !force) return;
|
|
237
237
|
const result = await require_run.run("bun", [
|
|
238
238
|
"run",
|
|
239
239
|
"--cwd",
|
|
@@ -243,17 +243,14 @@ async function buildEveryPluginQuietly(cwd) {
|
|
|
243
243
|
cwd,
|
|
244
244
|
capture: true
|
|
245
245
|
});
|
|
246
|
-
if (result.exitCode === 0)
|
|
247
|
-
console.log("[build:ssr] build succeeded");
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
246
|
+
if (result.exitCode === 0) return;
|
|
250
247
|
if (result.stdout.trim()) node_process.default.stdout.write(result.stdout);
|
|
251
248
|
if (result.stderr.trim()) node_process.default.stderr.write(result.stderr);
|
|
252
249
|
throw new Error(`bun run --cwd packages/every-plugin build failed with exit code ${result.exitCode}`);
|
|
253
250
|
}
|
|
254
|
-
async function buildEverythingDevQuietly(cwd) {
|
|
251
|
+
async function buildEverythingDevQuietly(cwd, force = false) {
|
|
255
252
|
if (!await fileExists(`${`${cwd}/packages/everything-dev`}/package.json`)) return;
|
|
256
|
-
if (await fileExists(`${cwd}/packages/everything-dev/dist/index.mjs`)) return;
|
|
253
|
+
if (await fileExists(`${cwd}/packages/everything-dev/dist/index.mjs`) && !force) return;
|
|
257
254
|
const result = await require_run.run("bun", [
|
|
258
255
|
"run",
|
|
259
256
|
"--cwd",
|
|
@@ -263,10 +260,7 @@ async function buildEverythingDevQuietly(cwd) {
|
|
|
263
260
|
cwd,
|
|
264
261
|
capture: true
|
|
265
262
|
});
|
|
266
|
-
if (result.exitCode === 0)
|
|
267
|
-
console.log("[everything-dev] build succeeded");
|
|
268
|
-
return;
|
|
269
|
-
}
|
|
263
|
+
if (result.exitCode === 0) return;
|
|
270
264
|
if (result.stdout.trim()) node_process.default.stdout.write(result.stdout);
|
|
271
265
|
if (result.stderr.trim()) node_process.default.stderr.write(result.stderr);
|
|
272
266
|
throw new Error(`bun run --cwd packages/everything-dev build failed with exit code ${result.exitCode}`);
|
|
@@ -299,6 +293,141 @@ function selectWorkspaceTargets(packages, bosConfig) {
|
|
|
299
293
|
if (packages === "all") return allPackages;
|
|
300
294
|
return packages.split(",").map((pkg) => pkg.trim()).filter((pkg) => allPackages.includes(pkg));
|
|
301
295
|
}
|
|
296
|
+
function padRight(str, len) {
|
|
297
|
+
return str.length >= len ? str : str + " ".repeat(len - str.length);
|
|
298
|
+
}
|
|
299
|
+
function formatDuration(ms) {
|
|
300
|
+
if (ms < 1e3) return `${ms}ms`;
|
|
301
|
+
return `${(ms / 1e3).toFixed(1)}s`;
|
|
302
|
+
}
|
|
303
|
+
async function runBuildAttempt(cmd, args, cwd, env, verbose, wsKey, resultBaseDir) {
|
|
304
|
+
if (verbose) try {
|
|
305
|
+
await require_run.run(cmd, args, {
|
|
306
|
+
cwd,
|
|
307
|
+
env,
|
|
308
|
+
capture: false
|
|
309
|
+
});
|
|
310
|
+
if (resultBaseDir) {
|
|
311
|
+
const results = require_integrity.readDeployResults((0, node_path.join)(resultBaseDir, wsKey));
|
|
312
|
+
if (results.length > 0) return {
|
|
313
|
+
success: true,
|
|
314
|
+
url: results[0]?.url,
|
|
315
|
+
exitCode: 0,
|
|
316
|
+
output: ""
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
return {
|
|
320
|
+
success: true,
|
|
321
|
+
exitCode: 0,
|
|
322
|
+
output: ""
|
|
323
|
+
};
|
|
324
|
+
} catch (err) {
|
|
325
|
+
return {
|
|
326
|
+
success: false,
|
|
327
|
+
error: err instanceof Error ? err.message : String(err),
|
|
328
|
+
exitCode: 1,
|
|
329
|
+
output: ""
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
const result = await require_run.run(cmd, args, {
|
|
333
|
+
cwd,
|
|
334
|
+
env,
|
|
335
|
+
capture: true
|
|
336
|
+
});
|
|
337
|
+
const stdout = result?.stdout ?? "";
|
|
338
|
+
const stderr = result?.stderr ?? "";
|
|
339
|
+
const exitCode = result?.exitCode ?? 0;
|
|
340
|
+
const output = `${stdout}\n${stderr}`;
|
|
341
|
+
if (exitCode !== 0) return {
|
|
342
|
+
success: false,
|
|
343
|
+
error: `Build failed (exit code ${exitCode})\n${output.trim().split("\n").slice(-5).join("\n")}`,
|
|
344
|
+
exitCode,
|
|
345
|
+
output
|
|
346
|
+
};
|
|
347
|
+
const zeMatch = output.match(/ZE\d+/);
|
|
348
|
+
if (zeMatch) return {
|
|
349
|
+
success: false,
|
|
350
|
+
error: `Zephyr upload failed (${zeMatch[0]})`,
|
|
351
|
+
exitCode: 0,
|
|
352
|
+
output
|
|
353
|
+
};
|
|
354
|
+
if (resultBaseDir) {
|
|
355
|
+
const results = require_integrity.readDeployResults((0, node_path.join)(resultBaseDir, wsKey));
|
|
356
|
+
if (results.length > 0) return {
|
|
357
|
+
success: true,
|
|
358
|
+
url: results[0]?.url,
|
|
359
|
+
exitCode: 0,
|
|
360
|
+
output
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
const deployMatch = output.match(/🚀.*Deployed:\s*(https?:\S+)/);
|
|
364
|
+
if (deployMatch) return {
|
|
365
|
+
success: true,
|
|
366
|
+
url: deployMatch[1],
|
|
367
|
+
exitCode: 0,
|
|
368
|
+
output
|
|
369
|
+
};
|
|
370
|
+
if (env.DEPLOY === "true") return {
|
|
371
|
+
success: false,
|
|
372
|
+
error: "No deploy URL found (Zephyr may have failed)",
|
|
373
|
+
exitCode: 0,
|
|
374
|
+
output
|
|
375
|
+
};
|
|
376
|
+
return {
|
|
377
|
+
success: true,
|
|
378
|
+
exitCode: 0,
|
|
379
|
+
output
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
async function buildOneWorkspace(ws, env, opts, resultBaseDir) {
|
|
383
|
+
const pkgJson = await readJsonFile(`${ws.path}/package.json`);
|
|
384
|
+
const buildConfig = opts.deploy && pkgJson.scripts?.deploy ? {
|
|
385
|
+
cmd: "bun",
|
|
386
|
+
args: ["run", "deploy"]
|
|
387
|
+
} : buildCommands[ws.key] ?? {
|
|
388
|
+
cmd: "bun",
|
|
389
|
+
args: ["run", "build"]
|
|
390
|
+
};
|
|
391
|
+
const wsEnv = { ...env };
|
|
392
|
+
if (resultBaseDir) wsEnv.BOS_DEPLOY_RESULT_DIR = (0, node_path.join)(resultBaseDir, ws.key);
|
|
393
|
+
const startTime = Date.now();
|
|
394
|
+
let attempt = await runBuildAttempt(buildConfig.cmd, buildConfig.args, ws.path, wsEnv, opts.verbose ?? false, ws.key, resultBaseDir);
|
|
395
|
+
let retried = false;
|
|
396
|
+
if (!attempt.success && attempt.exitCode === 0 && opts.deploy) {
|
|
397
|
+
if (!opts.verbose) console.log(` ${require_theme.colors.yellow("↻")} ${padRight(ws.key, 28)} retrying...`);
|
|
398
|
+
if (resultBaseDir) {
|
|
399
|
+
const wsResultDir = (0, node_path.join)(resultBaseDir, ws.key);
|
|
400
|
+
if ((0, node_fs.existsSync)(wsResultDir)) (0, node_fs.rmSync)(wsResultDir, {
|
|
401
|
+
recursive: true,
|
|
402
|
+
force: true
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
retried = true;
|
|
406
|
+
attempt = await runBuildAttempt(buildConfig.cmd, buildConfig.args, ws.path, wsEnv, opts.verbose ?? false, ws.key, resultBaseDir);
|
|
407
|
+
}
|
|
408
|
+
const durationMs = Date.now() - startTime;
|
|
409
|
+
const result = {
|
|
410
|
+
key: ws.key,
|
|
411
|
+
kind: ws.kind,
|
|
412
|
+
success: attempt.success,
|
|
413
|
+
url: attempt.url,
|
|
414
|
+
error: attempt.error,
|
|
415
|
+
durationMs,
|
|
416
|
+
retried: retried ? true : void 0
|
|
417
|
+
};
|
|
418
|
+
if (!opts.verbose) {
|
|
419
|
+
const name = padRight(ws.key, 28);
|
|
420
|
+
if (result.success) {
|
|
421
|
+
const duration = formatDuration(durationMs);
|
|
422
|
+
const retryTag = retried ? " (retried)" : "";
|
|
423
|
+
console.log(` ${require_theme.colors.green(require_theme.icons.ok)} ${name} ${require_theme.colors.dim(duration + retryTag)}`);
|
|
424
|
+
} else {
|
|
425
|
+
const errorLine = (result.error ?? "Failed").split("\n")[0];
|
|
426
|
+
console.log(` ${require_theme.colors.error(require_theme.icons.err)} ${name} ${errorLine}`);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
return result;
|
|
430
|
+
}
|
|
302
431
|
async function buildWorkspaceTargets(opts) {
|
|
303
432
|
const existing = [];
|
|
304
433
|
const skipped = [];
|
|
@@ -321,26 +450,74 @@ async function buildWorkspaceTargets(opts) {
|
|
|
321
450
|
bosConfig: opts.bosConfig ?? void 0,
|
|
322
451
|
extendsChain: []
|
|
323
452
|
})).catalogChanged) await require_run.run("bun", ["install"], { cwd: opts.configDir });
|
|
324
|
-
|
|
325
|
-
|
|
453
|
+
const shouldBuildPlugin = existing.some((entry) => entry.key === "api");
|
|
454
|
+
const forceRebuild = opts.deploy;
|
|
455
|
+
const buildTasks = [buildEverythingDevQuietly(opts.configDir, forceRebuild)];
|
|
456
|
+
if (shouldBuildPlugin) buildTasks.push(buildEveryPluginQuietly(opts.configDir, forceRebuild));
|
|
457
|
+
await Promise.all(buildTasks);
|
|
326
458
|
const env = {
|
|
327
459
|
...node_process.default.env,
|
|
328
460
|
NODE_ENV: opts.deploy ? "production" : "development"
|
|
329
461
|
};
|
|
330
462
|
if (opts.deploy) env.DEPLOY = "true";
|
|
331
463
|
else delete env.DEPLOY;
|
|
464
|
+
const resultBaseDir = opts.deploy ? (0, node_path.join)(opts.configDir, ".bos", "deploy-results") : void 0;
|
|
465
|
+
if (resultBaseDir) require_integrity.cleanDeployResultDir(resultBaseDir);
|
|
466
|
+
const bosConfigPath = (0, node_path.join)(opts.configDir, "bos.config.json");
|
|
467
|
+
let configSnapshot;
|
|
468
|
+
if (opts.deploy && (0, node_fs.existsSync)(bosConfigPath)) configSnapshot = (0, node_fs.readFileSync)(bosConfigPath, "utf-8");
|
|
332
469
|
const orderedExisting = opts.deploy ? [
|
|
333
470
|
...existing.filter((entry) => entry.kind === "app" && entry.key !== "host"),
|
|
334
471
|
...existing.filter((entry) => entry.kind === "plugin"),
|
|
335
472
|
...existing.filter((entry) => entry.kind === "app" && entry.key === "host")
|
|
336
473
|
] : existing;
|
|
474
|
+
const parallelGroup = opts.deploy ? orderedExisting.filter((e) => e.key !== "host") : orderedExisting;
|
|
475
|
+
const sequentialGroup = opts.deploy ? orderedExisting.filter((e) => e.key === "host") : [];
|
|
337
476
|
const built = [];
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
const
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
477
|
+
const deployResults = [];
|
|
478
|
+
if (opts.deploy && parallelGroup.length > 0) {
|
|
479
|
+
const total = parallelGroup.length + sequentialGroup.length;
|
|
480
|
+
console.log();
|
|
481
|
+
console.log(` Building ${total} workspace${total > 1 ? "s" : ""}...`);
|
|
482
|
+
console.log();
|
|
483
|
+
const results = await Promise.allSettled(parallelGroup.map((ws) => buildOneWorkspace(ws, env, opts, resultBaseDir)));
|
|
484
|
+
for (let i = 0; i < parallelGroup.length; i++) {
|
|
485
|
+
const ws = parallelGroup[i];
|
|
486
|
+
const result = results[i];
|
|
487
|
+
if (result.status === "fulfilled") {
|
|
488
|
+
if (result.value.success) built.push(ws.key);
|
|
489
|
+
deployResults.push(result.value);
|
|
490
|
+
} else deployResults.push({
|
|
491
|
+
key: ws.key,
|
|
492
|
+
kind: ws.kind,
|
|
493
|
+
success: false,
|
|
494
|
+
error: result.reason?.message ?? "Unknown error"
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
if (resultBaseDir && configSnapshot) {
|
|
498
|
+
const allResults = require_integrity.readAllDeployResults(resultBaseDir);
|
|
499
|
+
if (allResults.length > 0) {
|
|
500
|
+
const merged = require_integrity.applyDeployResults(JSON.parse(configSnapshot), allResults);
|
|
501
|
+
(0, node_fs.writeFileSync)(bosConfigPath, `${JSON.stringify(merged, null, 2)}\n`);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
for (const ws of sequentialGroup) {
|
|
505
|
+
const result = await buildOneWorkspace(ws, env, opts, resultBaseDir);
|
|
506
|
+
if (result.success) built.push(ws.key);
|
|
507
|
+
deployResults.push(result);
|
|
508
|
+
}
|
|
509
|
+
if (resultBaseDir && (0, node_fs.existsSync)(bosConfigPath)) {
|
|
510
|
+
const allResults = require_integrity.readAllDeployResults(resultBaseDir);
|
|
511
|
+
const currentConfig = JSON.parse((0, node_fs.readFileSync)(bosConfigPath, "utf-8"));
|
|
512
|
+
const hostResults = allResults.filter((r) => r.urlField.startsWith("app.host"));
|
|
513
|
+
if (hostResults.length > 0) {
|
|
514
|
+
const merged = require_integrity.applyDeployResults(currentConfig, hostResults);
|
|
515
|
+
(0, node_fs.writeFileSync)(bosConfigPath, `${JSON.stringify(merged, null, 2)}\n`);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
console.log();
|
|
519
|
+
} else for (const resolved of orderedExisting) {
|
|
520
|
+
const buildConfig = buildCommands[resolved.key] ?? {
|
|
344
521
|
cmd: "bun",
|
|
345
522
|
args: ["run", "build"]
|
|
346
523
|
};
|
|
@@ -352,7 +529,8 @@ async function buildWorkspaceTargets(opts) {
|
|
|
352
529
|
}
|
|
353
530
|
return {
|
|
354
531
|
built,
|
|
355
|
-
skipped
|
|
532
|
+
skipped,
|
|
533
|
+
deployResults: opts.deploy ? deployResults : void 0
|
|
356
534
|
};
|
|
357
535
|
}
|
|
358
536
|
var plugin_default = (0, every_plugin.createPlugin)({
|
|
@@ -525,12 +703,9 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
525
703
|
};
|
|
526
704
|
}),
|
|
527
705
|
dev: builder.dev.handler(async ({ input }) => {
|
|
706
|
+
const devTimings = [];
|
|
528
707
|
require_infra.ensureEnvFile(deps.configDir);
|
|
529
708
|
require_infra.loadProjectEnv(deps.configDir);
|
|
530
|
-
pluginEvents.emit("progress", {
|
|
531
|
-
phase: "config",
|
|
532
|
-
status: "running"
|
|
533
|
-
});
|
|
534
709
|
const localPackages = require_app.detectLocalPackages(deps.bosConfig ?? void 0, deps.runtimeConfig ?? void 0);
|
|
535
710
|
const hostSource = localPackages.includes("host") ? parseSourceMode(input.host, "local") : "remote";
|
|
536
711
|
const uiSource = localPackages.includes("ui") ? parseSourceMode(input.ui, "local") : "remote";
|
|
@@ -538,61 +713,44 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
538
713
|
const authSource = localPackages.includes("auth") ? parseSourceMode(input.auth, "local") : "remote";
|
|
539
714
|
const ssr = input.ssr ?? false;
|
|
540
715
|
const proxy = input.proxy ?? false;
|
|
541
|
-
|
|
716
|
+
const sharedSync = await timePhase(devTimings, "shared deps", () => require_shared_deps.syncResolvedSharedDeps({
|
|
542
717
|
configDir: deps.configDir,
|
|
543
718
|
hostMode: hostSource,
|
|
544
719
|
bosConfig: deps.bosConfig ?? void 0,
|
|
545
720
|
extendsChain: []
|
|
546
|
-
}))
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
await require_run.run("bun", ["install"], { cwd: deps.configDir });
|
|
552
|
-
pluginEvents.emit("progress", {
|
|
553
|
-
phase: "install",
|
|
554
|
-
status: "done"
|
|
555
|
-
});
|
|
556
|
-
}
|
|
557
|
-
if (apiSource === "local" && !proxy || localPackages.some((pkg) => pkg.startsWith("plugin:"))) {
|
|
558
|
-
pluginEvents.emit("progress", {
|
|
559
|
-
phase: "build plugin",
|
|
560
|
-
status: "running"
|
|
561
|
-
});
|
|
562
|
-
await buildEveryPluginQuietly(deps.configDir);
|
|
563
|
-
pluginEvents.emit("progress", {
|
|
564
|
-
phase: "build plugin",
|
|
565
|
-
status: "done"
|
|
566
|
-
});
|
|
721
|
+
}));
|
|
722
|
+
let configMayHaveChanged = false;
|
|
723
|
+
if (sharedSync.catalogChanged) {
|
|
724
|
+
await timePhase(devTimings, "install", () => require_run.run("bun", ["install"], { cwd: deps.configDir }));
|
|
725
|
+
configMayHaveChanged = true;
|
|
567
726
|
}
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
pluginEvents.emit("progress", {
|
|
574
|
-
phase: "build",
|
|
575
|
-
status: "done"
|
|
576
|
-
});
|
|
577
|
-
pluginEvents.emit("progress", {
|
|
578
|
-
phase: "config",
|
|
579
|
-
status: "done"
|
|
727
|
+
const shouldBuildPlugin = apiSource === "local" && !proxy || localPackages.some((pkg) => pkg.startsWith("plugin:"));
|
|
728
|
+
await timePhase(devTimings, "build", async () => {
|
|
729
|
+
const buildTasks = [buildEverythingDevQuietly(deps.configDir)];
|
|
730
|
+
if (shouldBuildPlugin) buildTasks.push(buildEveryPluginQuietly(deps.configDir));
|
|
731
|
+
await Promise.all(buildTasks);
|
|
580
732
|
});
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
733
|
+
let devExtendsChain;
|
|
734
|
+
if (configMayHaveChanged || input.remotePlugins?.length) {
|
|
735
|
+
const refreshed = await timePhase(devTimings, "resolve config", () => require_config.loadResolvedConfig({
|
|
736
|
+
cwd: deps.configDir,
|
|
737
|
+
remotePlugins: input.remotePlugins
|
|
738
|
+
}));
|
|
739
|
+
deps.bosConfig = refreshed?.config ?? deps.bosConfig;
|
|
740
|
+
deps.runtimeConfig = refreshed?.runtime ?? deps.runtimeConfig;
|
|
741
|
+
devExtendsChain = refreshed?.source.extended;
|
|
742
|
+
}
|
|
587
743
|
if (!deps.bosConfig) return {
|
|
588
744
|
status: "error",
|
|
589
745
|
description: "No bos.config.json found",
|
|
590
|
-
processes: []
|
|
746
|
+
processes: [],
|
|
747
|
+
timings: devTimings
|
|
591
748
|
};
|
|
592
749
|
if (proxy && !resolveProxyUrl(deps.bosConfig)) return {
|
|
593
750
|
status: "error",
|
|
594
751
|
description: "No valid proxy URL configured in bos.config.json",
|
|
595
|
-
processes: []
|
|
752
|
+
processes: [],
|
|
753
|
+
timings: devTimings
|
|
596
754
|
};
|
|
597
755
|
const hostPort = input.port ?? require_config.getHostDevelopmentPort(deps.bosConfig.app.host.development);
|
|
598
756
|
require_config.suppressWarnings();
|
|
@@ -606,20 +764,18 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
606
764
|
});
|
|
607
765
|
require_config.drainConfigWarnings();
|
|
608
766
|
require_config.resumeWarnings();
|
|
609
|
-
const runtimeConfig = await require_app.prepareDevelopmentRuntimeConfig(developmentRuntime, {
|
|
767
|
+
const runtimeConfig = await timePhase(devTimings, "ports", () => require_app.prepareDevelopmentRuntimeConfig(developmentRuntime, {
|
|
610
768
|
hostPort,
|
|
611
769
|
ssr
|
|
612
|
-
});
|
|
770
|
+
}));
|
|
613
771
|
require_infra.syncGeneratedInfra(deps.configDir, runtimeConfig);
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
}
|
|
618
|
-
await generateCodeArtifacts(deps.configDir, deps.bosConfig, {
|
|
772
|
+
require_infra.ensureEnvFile(deps.configDir);
|
|
773
|
+
require_infra.loadProjectEnv(deps.configDir);
|
|
774
|
+
await timePhase(devTimings, "generate artifacts", () => generateCodeArtifacts(deps.configDir, deps.bosConfig, {
|
|
619
775
|
env: "development",
|
|
620
|
-
extendsChain:
|
|
776
|
+
extendsChain: devExtendsChain,
|
|
621
777
|
runtimeConfig
|
|
622
|
-
});
|
|
778
|
+
}));
|
|
623
779
|
const services = require_service_descriptor.buildServiceDescriptorMap(runtimeConfig, {
|
|
624
780
|
ssr,
|
|
625
781
|
proxy
|
|
@@ -651,7 +807,8 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
651
807
|
return {
|
|
652
808
|
status: "started",
|
|
653
809
|
description: orchestrator.description,
|
|
654
|
-
processes: packages
|
|
810
|
+
processes: packages,
|
|
811
|
+
timings: devTimings
|
|
655
812
|
};
|
|
656
813
|
}),
|
|
657
814
|
start: builder.start.handler(async ({ input }) => {
|
|
@@ -712,10 +869,8 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
712
869
|
if (isStaging && config.staging?.domain) runtimeConfig.domain = config.staging.domain;
|
|
713
870
|
if (isStaging) runtimeConfig.env = "staging";
|
|
714
871
|
require_infra.syncGeneratedInfra(deps.configDir, runtimeConfig);
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
require_infra.loadProjectEnv(deps.configDir);
|
|
718
|
-
}
|
|
872
|
+
require_infra.ensureEnvFile(deps.configDir);
|
|
873
|
+
require_infra.loadProjectEnv(deps.configDir);
|
|
719
874
|
pluginEvents.emit("progress", {
|
|
720
875
|
phase: "generate artifacts",
|
|
721
876
|
status: "running"
|
|
@@ -847,6 +1002,7 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
847
1002
|
env: input.env,
|
|
848
1003
|
build: input.deploy,
|
|
849
1004
|
dryRun: input.dryRun,
|
|
1005
|
+
verbose: input.verbose,
|
|
850
1006
|
packages: input.packages,
|
|
851
1007
|
network: input.network,
|
|
852
1008
|
privateKey: input.privateKey
|
|
@@ -864,7 +1020,8 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
864
1020
|
txHash: result.txHash,
|
|
865
1021
|
error: result.error,
|
|
866
1022
|
built: result.built,
|
|
867
|
-
skipped: result.skipped
|
|
1023
|
+
skipped: result.skipped,
|
|
1024
|
+
deployResults: result.deployResults
|
|
868
1025
|
};
|
|
869
1026
|
}),
|
|
870
1027
|
deploy: builder.deploy.handler(async ({ input }) => {
|
|
@@ -881,6 +1038,7 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
881
1038
|
env: input.env,
|
|
882
1039
|
build: input.build,
|
|
883
1040
|
dryRun: input.dryRun,
|
|
1041
|
+
verbose: input.verbose,
|
|
884
1042
|
packages: input.packages,
|
|
885
1043
|
network: input.network,
|
|
886
1044
|
privateKey: input.privateKey
|
|
@@ -892,7 +1050,8 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
892
1050
|
built: result.built,
|
|
893
1051
|
skipped: result.skipped,
|
|
894
1052
|
redeployed: false,
|
|
895
|
-
error: result.error
|
|
1053
|
+
error: result.error,
|
|
1054
|
+
deployResults: result.deployResults
|
|
896
1055
|
};
|
|
897
1056
|
if (result.status === "dry-run") return {
|
|
898
1057
|
status: "dry-run",
|
|
@@ -922,6 +1081,7 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
922
1081
|
built: result.built,
|
|
923
1082
|
skipped: result.skipped,
|
|
924
1083
|
redeployed: false,
|
|
1084
|
+
deployResults: result.deployResults,
|
|
925
1085
|
error: "Config published but Railway redeploy failed: ci.railway.service is not configured in bos.config.json"
|
|
926
1086
|
};
|
|
927
1087
|
}
|
|
@@ -952,6 +1112,7 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
952
1112
|
skipped: result.skipped,
|
|
953
1113
|
redeployed: false,
|
|
954
1114
|
service,
|
|
1115
|
+
deployResults: result.deployResults,
|
|
955
1116
|
error: `Config published but ${railError}`
|
|
956
1117
|
};
|
|
957
1118
|
}
|
|
@@ -966,7 +1127,8 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
966
1127
|
built: result.built,
|
|
967
1128
|
skipped: result.skipped,
|
|
968
1129
|
redeployed,
|
|
969
|
-
service
|
|
1130
|
+
service,
|
|
1131
|
+
deployResults: result.deployResults
|
|
970
1132
|
};
|
|
971
1133
|
}),
|
|
972
1134
|
keyPublish: builder.keyPublish.handler(async ({ input }) => {
|
|
@@ -1043,6 +1205,17 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
1043
1205
|
overrides = overrides?.length ? overrides : ["ui", "api"];
|
|
1044
1206
|
if (overrides.includes("plugins") && plugins === void 0) plugins = parentPluginKeys;
|
|
1045
1207
|
plugins = plugins ?? [];
|
|
1208
|
+
const pluginDirMap = {};
|
|
1209
|
+
if (parentConfig?.plugins) for (const plugin of plugins) {
|
|
1210
|
+
const entry = parentConfig.plugins?.[plugin];
|
|
1211
|
+
if (entry && typeof entry === "object") {
|
|
1212
|
+
const dev = entry.development;
|
|
1213
|
+
if (typeof dev === "string") {
|
|
1214
|
+
const match = dev.match(/^local:plugins\/(.+)$/);
|
|
1215
|
+
if (match?.[1] && match[1] !== plugin) pluginDirMap[plugin] = match[1];
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1046
1219
|
directory = directory || domain || extendsGateway;
|
|
1047
1220
|
const targetDir = (0, node_path.resolve)(directory);
|
|
1048
1221
|
const extendsRef = `bos://${extendsAccount}/${extendsGateway}`;
|
|
@@ -1100,7 +1273,7 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
1100
1273
|
staging: parentConfig?.staging
|
|
1101
1274
|
}));
|
|
1102
1275
|
} else {
|
|
1103
|
-
const patterns = require_cli_init.buildInitPatterns(overrides, plugins);
|
|
1276
|
+
const patterns = require_cli_init.buildInitPatterns(overrides, plugins, pluginDirMap);
|
|
1104
1277
|
filesCopied = await timePhase(timings, "copy files", () => require_cli_init.copyFilteredFiles(sourceDir, targetDir, patterns, {
|
|
1105
1278
|
overrides,
|
|
1106
1279
|
plugins
|
|
@@ -1388,13 +1561,28 @@ async function publishToFastKv(input) {
|
|
|
1388
1561
|
const targets = selectWorkspaceTargets(input.packages, bosConfig);
|
|
1389
1562
|
let built;
|
|
1390
1563
|
let skipped;
|
|
1564
|
+
let deployResults;
|
|
1391
1565
|
if (dryRun) return {
|
|
1392
1566
|
status: "dry-run",
|
|
1393
1567
|
registryUrl,
|
|
1394
1568
|
built,
|
|
1395
1569
|
skipped
|
|
1396
1570
|
};
|
|
1571
|
+
const privateKey = input.privateKey || node_process.default.env.NEAR_PRIVATE_KEY || node_process.default.env.BOS_NEAR_PRIVATE_KEY;
|
|
1572
|
+
let signingMode;
|
|
1573
|
+
try {
|
|
1574
|
+
signingMode = require_near_cli.resolveNearSigningMode(privateKey);
|
|
1575
|
+
} catch (error) {
|
|
1576
|
+
return {
|
|
1577
|
+
status: "error",
|
|
1578
|
+
registryUrl,
|
|
1579
|
+
error: error instanceof Error ? error.message : "Unknown error"
|
|
1580
|
+
};
|
|
1581
|
+
}
|
|
1397
1582
|
if (input.build) {
|
|
1583
|
+
console.log(" Ensuring NEAR CLI...");
|
|
1584
|
+
await effect.Effect.runPromise(require_near_cli.ensureNearCli);
|
|
1585
|
+
console.log(" NEAR CLI ready");
|
|
1398
1586
|
await generateCodeArtifacts(configDir, bosConfig, {
|
|
1399
1587
|
env: "production",
|
|
1400
1588
|
runtimeConfig: runtimeConfig ?? void 0
|
|
@@ -1404,16 +1592,45 @@ async function publishToFastKv(input) {
|
|
|
1404
1592
|
bosConfig,
|
|
1405
1593
|
runtimeConfig,
|
|
1406
1594
|
targets,
|
|
1407
|
-
deploy: true
|
|
1595
|
+
deploy: true,
|
|
1596
|
+
verbose: input.verbose
|
|
1408
1597
|
});
|
|
1409
1598
|
built = result.built;
|
|
1410
1599
|
skipped = result.skipped;
|
|
1600
|
+
deployResults = result.deployResults;
|
|
1601
|
+
if (deployResults) {
|
|
1602
|
+
const failures = deployResults.filter((r) => !r.success);
|
|
1603
|
+
if (failures.length > 0) {
|
|
1604
|
+
const total = deployResults.length;
|
|
1605
|
+
console.log();
|
|
1606
|
+
console.log(require_theme.colors.error(` ${require_theme.icons.err} Deploy failed — ${failures.length} of ${total} workspace${total > 1 ? "s" : ""} failed`));
|
|
1607
|
+
console.log();
|
|
1608
|
+
for (const f of failures) {
|
|
1609
|
+
const errorLine = (f.error ?? "Failed").split("\n")[0];
|
|
1610
|
+
console.log(` ${require_theme.colors.error(require_theme.icons.err)} ${padRight(f.key, 28)} ${errorLine}`);
|
|
1611
|
+
}
|
|
1612
|
+
console.log();
|
|
1613
|
+
if (!input.verbose) {
|
|
1614
|
+
console.log(require_theme.colors.dim(" Run with --verbose for full build output."));
|
|
1615
|
+
console.log();
|
|
1616
|
+
}
|
|
1617
|
+
return {
|
|
1618
|
+
status: "error",
|
|
1619
|
+
registryUrl,
|
|
1620
|
+
built,
|
|
1621
|
+
skipped,
|
|
1622
|
+
deployResults,
|
|
1623
|
+
error: `${failures.length} of ${total} workspaces failed to deploy`
|
|
1624
|
+
};
|
|
1625
|
+
}
|
|
1626
|
+
}
|
|
1411
1627
|
const refreshed = await require_config.loadResolvedConfig({ cwd: configDir });
|
|
1412
1628
|
if (!refreshed?.config) return {
|
|
1413
1629
|
status: "error",
|
|
1414
1630
|
registryUrl,
|
|
1415
1631
|
built,
|
|
1416
1632
|
skipped,
|
|
1633
|
+
deployResults,
|
|
1417
1634
|
error: "Failed to reload bos.config.json after build"
|
|
1418
1635
|
};
|
|
1419
1636
|
bosConfig = refreshed.config;
|
|
@@ -1427,28 +1644,14 @@ async function publishToFastKv(input) {
|
|
|
1427
1644
|
const registryEntries = { [`apps/${account}/${gateway}/bos.config.json`]: JSON.stringify(publishPayload) };
|
|
1428
1645
|
const payload = JSON.stringify(registryEntries);
|
|
1429
1646
|
const argsBase64 = Buffer.from(payload).toString("base64");
|
|
1430
|
-
const privateKey = input.privateKey || node_process.default.env.NEAR_PRIVATE_KEY || node_process.default.env.BOS_NEAR_PRIVATE_KEY;
|
|
1431
|
-
let signingMode;
|
|
1432
|
-
try {
|
|
1433
|
-
signingMode = require_near_cli.resolveNearSigningMode(privateKey);
|
|
1434
|
-
} catch (error) {
|
|
1435
|
-
return {
|
|
1436
|
-
status: "error",
|
|
1437
|
-
registryUrl,
|
|
1438
|
-
error: error instanceof Error ? error.message : "Unknown error"
|
|
1439
|
-
};
|
|
1440
|
-
}
|
|
1441
1647
|
console.log();
|
|
1442
1648
|
console.log(" Publishing to:");
|
|
1443
1649
|
console.log(` ${require_theme.colors.cyan(registryUrl)}`);
|
|
1444
1650
|
try {
|
|
1445
|
-
console.log(" Ensuring NEAR CLI...");
|
|
1446
|
-
await effect.Effect.runPromise(require_near_cli.ensureNearCli);
|
|
1447
|
-
console.log(" NEAR CLI ready");
|
|
1448
1651
|
let txHash;
|
|
1449
1652
|
console.log(` Submitting transaction on ${network}...`);
|
|
1450
1653
|
try {
|
|
1451
|
-
|
|
1654
|
+
const tx = await effect.Effect.runPromise(require_near_cli.executeTransaction({
|
|
1452
1655
|
account,
|
|
1453
1656
|
contract: require_fastkv.getRegistryNamespaceForNetwork(network),
|
|
1454
1657
|
method: "__fastdata_kv",
|
|
@@ -1456,12 +1659,25 @@ async function publishToFastKv(input) {
|
|
|
1456
1659
|
network,
|
|
1457
1660
|
privateKey: signingMode._tag === "privateKey" ? signingMode.privateKey : void 0,
|
|
1458
1661
|
gas: "300Tgas",
|
|
1459
|
-
deposit: "0NEAR"
|
|
1460
|
-
|
|
1461
|
-
|
|
1662
|
+
deposit: "0NEAR",
|
|
1663
|
+
verbose: input.verbose
|
|
1664
|
+
}, signingMode));
|
|
1665
|
+
txHash = tx.txHash;
|
|
1666
|
+
if (txHash && !tx.output?.includes("CodeDoesNotExist")) console.log(` Transaction submitted: ${require_theme.colors.dim(txHash)}`);
|
|
1462
1667
|
} catch (error) {
|
|
1463
|
-
|
|
1464
|
-
|
|
1668
|
+
console.log(require_theme.colors.dim(" Transaction reported an error — verifying publish..."));
|
|
1669
|
+
try {
|
|
1670
|
+
await waitForPublishedConfig({
|
|
1671
|
+
account,
|
|
1672
|
+
gateway,
|
|
1673
|
+
publishConfig: publishPayload,
|
|
1674
|
+
timeoutMs: 3e4,
|
|
1675
|
+
intervalMs: 2e3
|
|
1676
|
+
});
|
|
1677
|
+
txHash = extractTransactionHash(error);
|
|
1678
|
+
} catch {
|
|
1679
|
+
throw error;
|
|
1680
|
+
}
|
|
1465
1681
|
}
|
|
1466
1682
|
console.log(" Waiting for publish confirmation...");
|
|
1467
1683
|
await waitForPublishedConfig({
|
|
@@ -1475,18 +1691,26 @@ async function publishToFastKv(input) {
|
|
|
1475
1691
|
txHash,
|
|
1476
1692
|
built,
|
|
1477
1693
|
skipped,
|
|
1694
|
+
deployResults,
|
|
1478
1695
|
publishConfig: publishPayload
|
|
1479
1696
|
};
|
|
1480
1697
|
} catch (error) {
|
|
1481
1698
|
return {
|
|
1482
1699
|
status: "error",
|
|
1483
1700
|
registryUrl,
|
|
1484
|
-
error: error
|
|
1701
|
+
error: formatNearError(error),
|
|
1485
1702
|
built,
|
|
1486
|
-
skipped
|
|
1703
|
+
skipped,
|
|
1704
|
+
deployResults
|
|
1487
1705
|
};
|
|
1488
1706
|
}
|
|
1489
1707
|
}
|
|
1708
|
+
function formatNearError(error) {
|
|
1709
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
1710
|
+
if (message.includes("exceeded gas") || message.includes("GasLimitExceeded")) return `Transaction exceeded gas limit.\n Original: ${message}`;
|
|
1711
|
+
if (message.includes("timeout") || message.includes("Timeout")) return `Transaction timed out. Check NEAR network status.\n Original: ${message}`;
|
|
1712
|
+
return message;
|
|
1713
|
+
}
|
|
1490
1714
|
function extractTransactionHash(error) {
|
|
1491
1715
|
return (error instanceof Error ? error.message : String(error)).match(/Transaction ID:\s*([A-Za-z0-9]+)/i)?.[1];
|
|
1492
1716
|
}
|