everything-dev 1.26.1 → 1.28.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.
Files changed (166) hide show
  1. package/dist/api-contract.cjs.map +1 -1
  2. package/dist/api-contract.mjs.map +1 -1
  3. package/dist/cli/catalog.cjs.map +1 -1
  4. package/dist/cli/catalog.mjs.map +1 -1
  5. package/dist/cli/framework-version.cjs.map +1 -1
  6. package/dist/cli/framework-version.mjs.map +1 -1
  7. package/dist/cli/infra.cjs +1 -1
  8. package/dist/cli/infra.cjs.map +1 -1
  9. package/dist/cli/infra.mjs +1 -1
  10. package/dist/cli/infra.mjs.map +1 -1
  11. package/dist/cli/init.cjs +127 -121
  12. package/dist/cli/init.cjs.map +1 -1
  13. package/dist/cli/init.d.cts +6 -6
  14. package/dist/cli/init.d.cts.map +1 -1
  15. package/dist/cli/init.d.mts +6 -6
  16. package/dist/cli/init.d.mts.map +1 -1
  17. package/dist/cli/init.mjs +125 -121
  18. package/dist/cli/init.mjs.map +1 -1
  19. package/dist/cli/parse.cjs.map +1 -1
  20. package/dist/cli/parse.mjs.map +1 -1
  21. package/dist/cli/prompts.cjs +29 -25
  22. package/dist/cli/prompts.cjs.map +1 -1
  23. package/dist/cli/prompts.mjs +28 -25
  24. package/dist/cli/prompts.mjs.map +1 -1
  25. package/dist/cli/status.cjs.map +1 -1
  26. package/dist/cli/status.mjs.map +1 -1
  27. package/dist/cli/sync.cjs +46 -93
  28. package/dist/cli/sync.cjs.map +1 -1
  29. package/dist/cli/sync.mjs +49 -96
  30. package/dist/cli/sync.mjs.map +1 -1
  31. package/dist/cli/timing.cjs.map +1 -1
  32. package/dist/cli/timing.mjs.map +1 -1
  33. package/dist/cli/upgrade.cjs +41 -20
  34. package/dist/cli/upgrade.cjs.map +1 -1
  35. package/dist/cli/upgrade.mjs +43 -22
  36. package/dist/cli/upgrade.mjs.map +1 -1
  37. package/dist/cli.cjs +187 -12
  38. package/dist/cli.cjs.map +1 -1
  39. package/dist/cli.mjs +187 -12
  40. package/dist/cli.mjs.map +1 -1
  41. package/dist/components/dev-view.cjs.map +1 -1
  42. package/dist/components/dev-view.mjs.map +1 -1
  43. package/dist/components/streaming-view.cjs.map +1 -1
  44. package/dist/components/streaming-view.mjs.map +1 -1
  45. package/dist/config.cjs.map +1 -1
  46. package/dist/config.mjs.map +1 -1
  47. package/dist/contract.cjs +174 -173
  48. package/dist/contract.cjs.map +1 -1
  49. package/dist/contract.d.cts +48 -44
  50. package/dist/contract.d.cts.map +1 -1
  51. package/dist/contract.d.mts +48 -44
  52. package/dist/contract.d.mts.map +1 -1
  53. package/dist/contract.mjs +3 -1
  54. package/dist/contract.mjs.map +1 -1
  55. package/dist/dev-logs.cjs.map +1 -1
  56. package/dist/dev-logs.mjs.map +1 -1
  57. package/dist/dev-session.cjs +0 -1
  58. package/dist/dev-session.mjs +1 -1
  59. package/dist/fastkv.cjs.map +1 -1
  60. package/dist/fastkv.mjs.map +1 -1
  61. package/dist/index.cjs +2 -4
  62. package/dist/index.d.cts +3 -3
  63. package/dist/index.d.mts +3 -3
  64. package/dist/index.mjs +1 -2
  65. package/dist/integrity.cjs.map +1 -1
  66. package/dist/integrity.mjs.map +1 -1
  67. package/dist/internal/manifest-normalizer.cjs.map +1 -1
  68. package/dist/internal/manifest-normalizer.mjs.map +1 -1
  69. package/dist/merge.cjs.map +1 -1
  70. package/dist/merge.mjs.map +1 -1
  71. package/dist/near-cli.cjs +1 -1
  72. package/dist/near-cli.cjs.map +1 -1
  73. package/dist/near-cli.mjs +1 -1
  74. package/dist/near-cli.mjs.map +1 -1
  75. package/dist/orchestrator.cjs +1 -1
  76. package/dist/orchestrator.cjs.map +1 -1
  77. package/dist/orchestrator.mjs +1 -1
  78. package/dist/orchestrator.mjs.map +1 -1
  79. package/dist/plugin.cjs +182 -171
  80. package/dist/plugin.cjs.map +1 -1
  81. package/dist/plugin.d.cts +72 -39
  82. package/dist/plugin.d.cts.map +1 -1
  83. package/dist/plugin.d.mts +71 -39
  84. package/dist/plugin.d.mts.map +1 -1
  85. package/dist/plugin.mjs +170 -160
  86. package/dist/plugin.mjs.map +1 -1
  87. package/dist/sdk.cjs +2 -2
  88. package/dist/sdk.d.cts +1 -1
  89. package/dist/sdk.d.mts +1 -1
  90. package/dist/sdk.mjs +1 -1
  91. package/dist/service-descriptor.d.cts +34 -0
  92. package/dist/service-descriptor.d.cts.map +1 -0
  93. package/dist/service-descriptor.d.mts +36 -0
  94. package/dist/service-descriptor.d.mts.map +1 -0
  95. package/dist/shared.cjs.map +1 -1
  96. package/dist/shared.mjs.map +1 -1
  97. package/dist/types.cjs +184 -184
  98. package/dist/types.cjs.map +1 -1
  99. package/dist/types.d.cts +5 -5
  100. package/dist/types.d.mts +5 -5
  101. package/dist/types.mjs +1 -1
  102. package/dist/types.mjs.map +1 -1
  103. package/dist/ui/types.d.cts +1 -0
  104. package/dist/ui/types.d.cts.map +1 -1
  105. package/dist/ui/types.d.mts +1 -0
  106. package/dist/ui/types.d.mts.map +1 -1
  107. package/dist/utils/banner.cjs.map +1 -1
  108. package/dist/utils/banner.mjs.map +1 -1
  109. package/dist/utils/run.cjs.map +1 -1
  110. package/dist/utils/run.mjs.map +1 -1
  111. package/package.json +3 -3
  112. package/skills/init-upgrade/SKILL.md +22 -16
  113. package/skills/publish-sync/SKILL.md +7 -18
  114. package/dist/utils/path-match.cjs +0 -18
  115. package/dist/utils/path-match.cjs.map +0 -1
  116. package/dist/utils/path-match.mjs +0 -17
  117. package/dist/utils/path-match.mjs.map +0 -1
  118. package/src/api-contract.ts +0 -623
  119. package/src/app.ts +0 -193
  120. package/src/cli/catalog.ts +0 -49
  121. package/src/cli/framework-version.ts +0 -61
  122. package/src/cli/help.ts +0 -13
  123. package/src/cli/infra.ts +0 -190
  124. package/src/cli/init.ts +0 -1202
  125. package/src/cli/parse.ts +0 -147
  126. package/src/cli/prompts.ts +0 -135
  127. package/src/cli/snapshot.ts +0 -46
  128. package/src/cli/status.ts +0 -99
  129. package/src/cli/sync.ts +0 -518
  130. package/src/cli/timing.ts +0 -63
  131. package/src/cli/upgrade.ts +0 -828
  132. package/src/cli.ts +0 -516
  133. package/src/components/dev-view.tsx +0 -352
  134. package/src/components/streaming-view.ts +0 -177
  135. package/src/config.ts +0 -893
  136. package/src/contract.meta.ts +0 -140
  137. package/src/contract.ts +0 -325
  138. package/src/dev-logs.ts +0 -92
  139. package/src/dev-session.ts +0 -283
  140. package/src/fastkv.ts +0 -181
  141. package/src/index.ts +0 -8
  142. package/src/integrity.ts +0 -138
  143. package/src/internal/manifest-normalizer.ts +0 -290
  144. package/src/merge.ts +0 -187
  145. package/src/mf.ts +0 -147
  146. package/src/near-cli.ts +0 -259
  147. package/src/network.ts +0 -3
  148. package/src/orchestrator.ts +0 -493
  149. package/src/plugin.ts +0 -1821
  150. package/src/sdk.ts +0 -14
  151. package/src/service-descriptor.ts +0 -281
  152. package/src/shared.ts +0 -249
  153. package/src/sidebar.ts +0 -140
  154. package/src/types.ts +0 -330
  155. package/src/ui/head.ts +0 -83
  156. package/src/ui/index.ts +0 -5
  157. package/src/ui/metadata.ts +0 -95
  158. package/src/ui/router.ts +0 -88
  159. package/src/ui/runtime.ts +0 -42
  160. package/src/ui/types.ts +0 -64
  161. package/src/utils/banner.ts +0 -21
  162. package/src/utils/linkify.ts +0 -11
  163. package/src/utils/path-match.ts +0 -16
  164. package/src/utils/run.ts +0 -31
  165. package/src/utils/save-config.ts +0 -20
  166. package/src/utils/theme.ts +0 -39
package/dist/plugin.mjs CHANGED
@@ -1,34 +1,69 @@
1
1
  import { buildRegistryConfigUrl, buildRegistryConfigUrlForNetwork, fetchBosConfigFromFastKv, fetchRemotePluginManifest, getRegistryNamespaceForAccount, getRegistryNamespaceForNetwork } from "./fastkv.mjs";
2
2
  import { getNetworkIdForAccount } from "./network.mjs";
3
- import { createPlugin, z } from "./sdk.mjs";
4
3
  import { buildRuntimePluginsForConfig, findConfigPath, getHostDevelopmentPort, getProjectRoot, loadConfig, resolveLocalDevelopmentPath, writeResolvedConfig } from "./config.mjs";
4
+ import { createPlugin, z } from "./sdk.mjs";
5
5
  import { bosContract } from "./contract.mjs";
6
+ import { writePluginSidebarGen } from "./sidebar.mjs";
7
+ import { computeSriHashForUrl } from "./integrity.mjs";
6
8
  import { syncApiContractBridge } from "./api-contract.mjs";
7
9
  import { buildRuntimeConfig, detectLocalPackages, prepareDevelopmentRuntimeConfig } from "./app.mjs";
8
10
  import { ensureEnvFile, writeGeneratedInfra } from "./cli/infra.mjs";
9
11
  import { saveBosConfig } from "./utils/save-config.mjs";
10
- import { copyFilteredFiles, detectGitRemoteUrl, fetchParentConfig, generateDatabaseMigrations, personalizeConfig, readTemplatekeep, removeInitLockfile, resolveSourceDir, runBunInstall, runDockerComposeUp, runTypesGen, scaffoldMinimalProject, stripOrphanedWorkspacesFromLockfile, writeInitSnapshot } from "./cli/init.mjs";
11
- import { promptInitOptions } from "./cli/prompts.mjs";
12
+ import { buildInitPatterns, copyFilteredFiles, detectGitRemoteUrl, fetchParentConfig, generateDatabaseMigrations, personalizeConfig, removeInitLockfile, resolveSourceDir, runBunInstall, runTypesGen, scaffoldMinimalProject, stripOrphanedWorkspacesFromLockfile, writeInitSnapshot } from "./cli/init.mjs";
12
13
  import { getStatus } from "./cli/status.mjs";
13
14
  import { syncTemplate } from "./cli/sync.mjs";
14
- import { timePhase } from "./cli/timing.mjs";
15
15
  import { upgradeTemplate } from "./cli/upgrade.mjs";
16
- import { computeSriHashForUrl } from "./integrity.mjs";
17
16
  import { addFunctionCallAccessKey, ensureNearCli, executeTransaction } from "./near-cli.mjs";
18
17
  import { buildDescription, buildServiceDescriptorMap } from "./service-descriptor.mjs";
19
18
  import { syncAndGenerateSharedUi } from "./shared.mjs";
20
- import { writePluginSidebarGen } from "./sidebar.mjs";
21
19
  import { run } from "./utils/run.mjs";
22
- import { colors } from "./utils/theme.mjs";
23
20
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
24
21
  import { basename, dirname, join, resolve } from "node:path";
22
+ import { EventEmitter } from "node:events";
25
23
  import process from "node:process";
26
- import * as p from "@clack/prompts";
27
24
  import { Effect } from "effect";
28
25
 
29
26
  //#region src/plugin.ts
30
- async function loadDevSession() {
31
- return import("./dev-session.mjs");
27
+ const pluginEvents = new EventEmitter();
28
+ let pendingSession = null;
29
+ let pendingStartSummary = null;
30
+ function consumeDevSession() {
31
+ const data = pendingSession;
32
+ const summary = pendingStartSummary;
33
+ pendingSession = null;
34
+ pendingStartSummary = null;
35
+ if (!data) return null;
36
+ return summary ? {
37
+ ...data,
38
+ summary
39
+ } : data;
40
+ }
41
+ async function timePhase(timings, name, fn) {
42
+ pluginEvents.emit("progress", {
43
+ phase: name,
44
+ status: "running"
45
+ });
46
+ const startedAt = Date.now();
47
+ try {
48
+ const result = await fn();
49
+ timings.push({
50
+ name,
51
+ durationMs: Date.now() - startedAt
52
+ });
53
+ pluginEvents.emit("progress", {
54
+ phase: name,
55
+ status: "done",
56
+ durationMs: Date.now() - startedAt
57
+ });
58
+ return result;
59
+ } catch (error) {
60
+ pluginEvents.emit("progress", {
61
+ phase: name,
62
+ status: "error",
63
+ durationMs: Date.now() - startedAt
64
+ });
65
+ throw error;
66
+ }
32
67
  }
33
68
  const buildCommands = {
34
69
  host: {
@@ -435,6 +470,10 @@ var plugin_default = createPlugin({
435
470
  }),
436
471
  dev: builder.dev.handler(async ({ input }) => {
437
472
  ensureEnvFile(deps.configDir);
473
+ pluginEvents.emit("progress", {
474
+ phase: "config",
475
+ status: "running"
476
+ });
438
477
  const localPackages = detectLocalPackages(deps.bosConfig ?? void 0, deps.runtimeConfig ?? void 0);
439
478
  const hostSource = localPackages.includes("host") ? parseSourceMode(input.host, "local") : "remote";
440
479
  const uiSource = localPackages.includes("ui") ? parseSourceMode(input.ui, "local") : "remote";
@@ -447,9 +486,41 @@ var plugin_default = createPlugin({
447
486
  hostMode: hostSource,
448
487
  bosConfig: deps.bosConfig ?? void 0,
449
488
  extendsChain: []
450
- })).catalogChanged) await run("bun", ["install"], { cwd: deps.configDir });
451
- if (apiSource === "local" && !proxy || localPackages.some((pkg) => pkg.startsWith("plugin:"))) await buildEveryPluginQuietly(deps.configDir);
489
+ })).catalogChanged) {
490
+ pluginEvents.emit("progress", {
491
+ phase: "install",
492
+ status: "running"
493
+ });
494
+ await run("bun", ["install"], { cwd: deps.configDir });
495
+ pluginEvents.emit("progress", {
496
+ phase: "install",
497
+ status: "done"
498
+ });
499
+ }
500
+ if (apiSource === "local" && !proxy || localPackages.some((pkg) => pkg.startsWith("plugin:"))) {
501
+ pluginEvents.emit("progress", {
502
+ phase: "build plugin",
503
+ status: "running"
504
+ });
505
+ await buildEveryPluginQuietly(deps.configDir);
506
+ pluginEvents.emit("progress", {
507
+ phase: "build plugin",
508
+ status: "done"
509
+ });
510
+ }
511
+ pluginEvents.emit("progress", {
512
+ phase: "build",
513
+ status: "running"
514
+ });
452
515
  await buildEverythingDevQuietly(deps.configDir);
516
+ pluginEvents.emit("progress", {
517
+ phase: "build",
518
+ status: "done"
519
+ });
520
+ pluginEvents.emit("progress", {
521
+ phase: "config",
522
+ status: "done"
523
+ });
453
524
  const refreshed = await loadConfig({ cwd: deps.configDir });
454
525
  deps.bosConfig = refreshed?.config ?? deps.bosConfig;
455
526
  deps.runtimeConfig = refreshed?.runtime ?? deps.runtimeConfig;
@@ -497,8 +568,11 @@ var plugin_default = createPlugin({
497
568
  port: runtimeConfig.host.port,
498
569
  interactive: input.interactive
499
570
  };
500
- const { devApp } = await loadDevSession();
501
- devApp(orchestrator, services, runtimeConfig);
571
+ pendingSession = {
572
+ orchestrator,
573
+ services,
574
+ runtimeConfig
575
+ };
502
576
  return {
503
577
  status: "started",
504
578
  description: orchestrator.description,
@@ -507,6 +581,10 @@ var plugin_default = createPlugin({
507
581
  }),
508
582
  start: builder.start.handler(async ({ input }) => {
509
583
  ensureEnvFile(deps.configDir);
584
+ pluginEvents.emit("progress", {
585
+ phase: "config",
586
+ status: "running"
587
+ });
510
588
  const account = input.account ?? process.env.BOS_ACCOUNT;
511
589
  const domain = input.domain ?? process.env.BOS_GATEWAY;
512
590
  let config = null;
@@ -541,10 +619,18 @@ var plugin_default = createPlugin({
541
619
  env: "production",
542
620
  plugins: runtimePlugins
543
621
  });
622
+ pluginEvents.emit("progress", {
623
+ phase: "generate artifacts",
624
+ status: "running"
625
+ });
544
626
  await generateCodeArtifacts(deps.configDir, config, {
545
627
  env: "production",
546
628
  runtimeConfig
547
629
  });
630
+ pluginEvents.emit("progress", {
631
+ phase: "generate artifacts",
632
+ status: "done"
633
+ });
548
634
  const productionEnv = {};
549
635
  const warnings = [];
550
636
  if (!process.env.CORS_ORIGIN && config.domain) {
@@ -564,32 +650,40 @@ var plugin_default = createPlugin({
564
650
  if (missingSecrets.length > 0) warnings.push(`Missing ${missingSecrets.length} secret(s): ${missingSecrets.join(", ")}`);
565
651
  const services = buildServiceDescriptorMap(runtimeConfig);
566
652
  const stagingEnvVars = isStaging ? { BOS_GATEWAY: config.staging?.domain ?? config.domain ?? "" } : {};
567
- const configSource = remoteConfig ? `bos://${account}/${domain}` : findConfigPath() ?? "bos.config.json";
568
- const configSourceHttp = remoteConfig && account && domain ? buildRegistryConfigUrl(account, domain) : void 0;
569
- const summaryLines = ["", ` ${colors.dim("Config Source:")} ${configSource}`];
570
- if (configSourceHttp) summaryLines.push(` ${colors.dim(configSourceHttp)}`);
571
- summaryLines.push(` ${colors.dim("Account:")} ${config.account}`, ` ${colors.dim("Domain:")} ${config.domain ?? "not configured"}`, "", ` ${colors.dim("Modules:")}`, ` ${colors.dim("HOST")} → ${runtimeConfig.host.remoteUrl ?? runtimeConfig.host.url ?? "local"}`, ` ${colors.dim("UI")} → ${runtimeConfig.ui.url ?? "local"}`, ` ${colors.dim("API")} → ${runtimeConfig.api.url ?? "local"}`);
572
- if (runtimeConfig.auth) summaryLines.push(` ${colors.dim("AUTH")} → ${runtimeConfig.auth.url ?? "local"}`);
573
- if (warnings.length > 0) {
574
- summaryLines.push("");
575
- for (const w of warnings) summaryLines.push(` ${colors.yellow(w)}`);
576
- }
577
- summaryLines.push("");
578
- console.log(summaryLines.join("\n"));
579
- const orchestrator = {
580
- packages: ["host"],
581
- env: {
582
- NODE_ENV: "production",
583
- ...productionEnv,
584
- ...stagingEnvVars
653
+ const summary = {
654
+ configSource: remoteConfig ? `bos://${account}/${domain}` : findConfigPath() ?? "bos.config.json",
655
+ configSourceHttp: remoteConfig && account && domain ? buildRegistryConfigUrl(account, domain) : void 0,
656
+ account: config.account,
657
+ domain: config.domain ?? void 0,
658
+ modules: {
659
+ host: runtimeConfig.host.remoteUrl ?? runtimeConfig.host.url ?? "local",
660
+ ui: runtimeConfig.ui.url ?? "local",
661
+ api: runtimeConfig.api.url ?? "local",
662
+ auth: runtimeConfig.auth?.url ?? void 0
663
+ },
664
+ warnings
665
+ };
666
+ pendingSession = {
667
+ orchestrator: {
668
+ packages: ["host"],
669
+ env: {
670
+ NODE_ENV: "production",
671
+ ...productionEnv,
672
+ ...stagingEnvVars
673
+ },
674
+ description: `${isStaging ? "Staging" : "Production"} Mode (${config.account})`,
675
+ port,
676
+ interactive: input.interactive,
677
+ noLogs: true
585
678
  },
586
- description: `${isStaging ? "Staging" : "Production"} Mode (${config.account})`,
587
- port,
588
- interactive: input.interactive,
589
- noLogs: true
679
+ services,
680
+ runtimeConfig
590
681
  };
591
- const { startApp } = await loadDevSession();
592
- startApp(orchestrator, services, runtimeConfig);
682
+ pendingStartSummary = summary;
683
+ pluginEvents.emit("progress", {
684
+ phase: "config",
685
+ status: "done"
686
+ });
593
687
  return {
594
688
  status: "running",
595
689
  url: `http://localhost:${port}`
@@ -779,8 +873,8 @@ var plugin_default = createPlugin({
779
873
  let extendsAccount = "";
780
874
  let extendsGateway = "";
781
875
  let directory = input.directory;
782
- let account = input.account;
783
- let domain = input.domain;
876
+ const account = input.account;
877
+ const domain = input.domain;
784
878
  let overrides = input.overrides;
785
879
  let plugins = input.plugins;
786
880
  if (input.extends) {
@@ -792,77 +886,22 @@ var plugin_default = createPlugin({
792
886
  }
793
887
  extendsAccount = extendsAccount || "dev.everything.near";
794
888
  extendsGateway = extendsGateway || "everything.dev";
795
- const s = p.spinner();
796
- s.start("Initializing project");
797
889
  let parentPluginKeys = [];
798
890
  let parentConfig = null;
799
891
  try {
800
- parentConfig = await timePhase(timings, "parent config", () => fetchParentConfig(extendsAccount, extendsGateway), s);
892
+ parentConfig = await timePhase(timings, "parent config", () => fetchParentConfig(extendsAccount, extendsGateway));
801
893
  if (parentConfig?.plugins && typeof parentConfig.plugins === "object") parentPluginKeys = Object.keys(parentConfig.plugins);
802
894
  } catch {}
803
- if (!input.noInteractive) {
804
- s.stop("Config fetched");
805
- const initialExtendsAccount = extendsAccount;
806
- const initialExtendsGateway = extendsGateway;
807
- const prompted = await promptInitOptions({
808
- extends: `bos://${extendsAccount}/${extendsGateway}`,
809
- directory,
810
- account,
811
- domain,
812
- plugins,
813
- overrides,
814
- parentPluginKeys
815
- });
816
- extendsAccount = prompted.extendsAccount;
817
- extendsGateway = prompted.extendsGateway;
818
- directory = prompted.directory;
819
- account = prompted.account;
820
- domain = prompted.domain;
821
- plugins = prompted.plugins;
822
- overrides = prompted.overrides;
823
- if (!parentConfig || prompted.extendsAccount !== initialExtendsAccount || prompted.extendsGateway !== initialExtendsGateway) {
824
- try {
825
- parentConfig = await timePhase(timings, "parent config", () => fetchParentConfig(prompted.extendsAccount, prompted.extendsGateway), s);
826
- if (parentConfig?.plugins && typeof parentConfig.plugins === "object") parentPluginKeys = Object.keys(parentConfig.plugins);
827
- else parentPluginKeys = [];
828
- } catch {
829
- return {
830
- status: "error",
831
- directory,
832
- extendsRef: `bos://${prompted.extendsAccount}/${prompted.extendsGateway}`,
833
- account,
834
- domain,
835
- extends: `bos://${prompted.extendsAccount}/${prompted.extendsGateway}`,
836
- plugins,
837
- overrides,
838
- filesCopied: 0,
839
- timings,
840
- error: `No config found at bos://${prompted.extendsAccount}/${prompted.extendsGateway} — are you sure this is the right parent?`
841
- };
842
- }
843
- s.stop("Config fetched");
844
- }
845
- if (typeof parentConfig?.title === "string" && parentConfig.title.trim() && typeof parentConfig.description === "string" && parentConfig.description.trim()) {
846
- const shouldContinue = await p.confirm({
847
- message: `You will be extending ${parentConfig.title} - ${parentConfig.description}. Continue?`,
848
- initialValue: true
849
- });
850
- if (p.isCancel(shouldContinue) || !shouldContinue) process.exit(0);
851
- }
852
- s.start("Setting up project");
853
- }
854
895
  overrides = overrides?.length ? overrides : ["ui", "api"];
855
- if (overrides.includes("plugins") && !plugins?.length) plugins = parentPluginKeys;
896
+ if (overrides.includes("plugins") && plugins === void 0) plugins = parentPluginKeys;
856
897
  plugins = plugins ?? [];
857
898
  directory = directory || domain || extendsGateway;
858
899
  const targetDir = resolve(directory);
859
900
  const extendsRef = `bos://${extendsAccount}/${extendsGateway}`;
860
- if (overrides.includes("plugins") && !plugins.length) {}
861
901
  const repository = await detectGitRemoteUrl(process.cwd()).catch(() => void 0) ?? parentConfig?.repository;
862
902
  if (!parentConfig) try {
863
- parentConfig = await timePhase(timings, "parent config", () => fetchParentConfig(extendsAccount, extendsGateway), s);
903
+ parentConfig = await timePhase(timings, "parent config", () => fetchParentConfig(extendsAccount, extendsGateway));
864
904
  } catch {
865
- s.stop("Failed");
866
905
  return {
867
906
  status: "error",
868
907
  directory,
@@ -881,7 +920,7 @@ var plugin_default = createPlugin({
881
920
  extendsAccount,
882
921
  extendsGateway,
883
922
  source: input.source
884
- }), s);
923
+ }));
885
924
  parentConfig = resolvedParentConfig;
886
925
  const isMinimalScaffold = sourceDir === "";
887
926
  try {
@@ -894,8 +933,10 @@ var plugin_default = createPlugin({
894
933
  domain,
895
934
  plugins,
896
935
  overrides,
897
- repository
898
- }), s);
936
+ repository,
937
+ title: parentConfig?.title,
938
+ description: parentConfig?.description
939
+ }));
899
940
  await timePhase(timings, "personalize config", () => personalizeConfig(targetDir, {
900
941
  extendsAccount,
901
942
  extendsGateway,
@@ -904,35 +945,18 @@ var plugin_default = createPlugin({
904
945
  plugins,
905
946
  overrides,
906
947
  mode: "init",
907
- repository
908
- }), s);
948
+ repository,
949
+ title: parentConfig?.title,
950
+ description: parentConfig?.description,
951
+ testnet: parentConfig?.testnet,
952
+ staging: parentConfig?.staging
953
+ }));
909
954
  } else {
910
- const patterns = await readTemplatekeep(sourceDir);
911
- if (patterns.length === 0) {
912
- s.stop("Failed");
913
- return {
914
- status: "error",
915
- directory,
916
- extendsRef,
917
- account,
918
- domain,
919
- extends: extendsRef,
920
- plugins,
921
- overrides,
922
- filesCopied: 0,
923
- error: "No .templatekeep found in template source"
924
- };
925
- }
926
- const pluginRoutes = {};
927
- if (overrides.includes("plugins")) {
928
- const parentRuntimePlugins = await buildRuntimePluginsForConfig(parentConfig, sourceDir, "production");
929
- for (const [key, plugin] of Object.entries(parentRuntimePlugins ?? {})) if (plugin.routes && plugin.routes.length > 0) pluginRoutes[key] = plugin.routes;
930
- }
955
+ const patterns = buildInitPatterns(overrides, plugins);
931
956
  filesCopied = await timePhase(timings, "copy files", () => copyFilteredFiles(sourceDir, targetDir, patterns, {
932
957
  overrides,
933
- plugins,
934
- pluginRoutes
935
- }), s);
958
+ plugins
959
+ }));
936
960
  await timePhase(timings, "personalize config", () => personalizeConfig(targetDir, {
937
961
  extendsAccount,
938
962
  extendsGateway,
@@ -940,49 +964,34 @@ var plugin_default = createPlugin({
940
964
  domain: domain || extendsGateway,
941
965
  plugins,
942
966
  overrides,
943
- pluginRoutes,
944
967
  workspaceOpts: { sourceDir },
945
- repository
946
- }), s);
968
+ repository,
969
+ title: parentConfig?.title,
970
+ description: parentConfig?.description,
971
+ testnet: parentConfig?.testnet,
972
+ staging: parentConfig?.staging
973
+ }));
947
974
  await timePhase(timings, "write snapshot", () => writeInitSnapshot(targetDir, extendsAccount, extendsGateway, sourceDir, patterns, {
948
975
  overrides,
949
- plugins,
950
- pluginRoutes
951
- }), s);
976
+ plugins
977
+ }));
952
978
  }
953
979
  const lockfilePath = join(targetDir, "bun.lock");
954
980
  stripOrphanedWorkspacesFromLockfile(lockfilePath, computeAllowedWorkspaces(overrides, plugins));
955
981
  removeInitLockfile(lockfilePath);
956
- const initConfig = await timePhase(timings, "resolve config", () => loadConfig({ cwd: targetDir }), s);
982
+ const initConfig = await timePhase(timings, "resolve config", () => loadConfig({ cwd: targetDir }));
957
983
  if (initConfig?.runtime) await timePhase(timings, "generate env/docker", async () => {
958
984
  writeGeneratedInfra(targetDir, initConfig.runtime);
959
- }, s);
985
+ });
960
986
  await timePhase(timings, "create env file", async () => {
961
987
  ensureEnvFile(targetDir);
962
- }, s);
988
+ });
963
989
  if (!input.noInstall) {
964
- await timePhase(timings, "install dependencies", () => runBunInstall(targetDir, s ?? void 0));
965
- await timePhase(timings, "generate types", () => runTypesGen(targetDir, s ?? void 0));
966
- await timePhase(timings, "generate migrations", () => generateDatabaseMigrations(targetDir), s);
967
- }
968
- if (input.noInstall && initConfig?.config) await timePhase(timings, "generate code artifacts", () => generateCodeArtifacts(targetDir, initConfig.config), s);
969
- s.stop("Project initialized");
970
- if (!input.noInteractive) {
971
- if (await p.confirm({
972
- message: "Run docker compose up -d --wait?",
973
- initialValue: true
974
- }) === true) {
975
- const dockerSpinner = p.spinner();
976
- dockerSpinner.start("Starting Docker services");
977
- try {
978
- await timePhase(timings, "docker compose up", () => runDockerComposeUp(targetDir));
979
- dockerSpinner.stop("Docker services ready");
980
- } catch (error) {
981
- dockerSpinner.stop("Docker services not started");
982
- p.log.warn(`docker compose up -d --wait failed: ${error instanceof Error ? error.message : error}`);
983
- }
984
- }
990
+ await timePhase(timings, "install dependencies", () => runBunInstall(targetDir));
991
+ await timePhase(timings, "generate types", () => runTypesGen(targetDir));
992
+ await timePhase(timings, "generate migrations", () => generateDatabaseMigrations(targetDir));
985
993
  }
994
+ if (input.noInstall && initConfig?.config) await timePhase(timings, "generate code artifacts", () => generateCodeArtifacts(targetDir, initConfig.config));
986
995
  return {
987
996
  status: "initialized",
988
997
  directory,
@@ -993,7 +1002,8 @@ var plugin_default = createPlugin({
993
1002
  plugins,
994
1003
  overrides,
995
1004
  filesCopied,
996
- timings
1005
+ timings,
1006
+ targetDir
997
1007
  };
998
1008
  } finally {
999
1009
  await cleanup();
@@ -1168,10 +1178,10 @@ function computeAllowedWorkspaces(overrides, plugins) {
1168
1178
  if (section === "ui") workspaces.push("ui");
1169
1179
  if (section === "api") workspaces.push("api");
1170
1180
  }
1171
- if (plugins) for (const plugin of plugins) workspaces.push(`plugins/${plugin}`);
1181
+ if (plugins && plugins.length > 0) workspaces.push("plugins/*");
1172
1182
  return workspaces;
1173
1183
  }
1174
1184
 
1175
1185
  //#endregion
1176
- export { plugin_default as default };
1186
+ export { consumeDevSession, plugin_default as default, pluginEvents };
1177
1187
  //# sourceMappingURL=plugin.mjs.map