everything-dev 1.16.0 → 1.16.2

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 (86) hide show
  1. package/dist/cli/infra.cjs +127 -0
  2. package/dist/cli/infra.cjs.map +1 -0
  3. package/dist/cli/infra.mjs +124 -0
  4. package/dist/cli/infra.mjs.map +1 -0
  5. package/dist/cli/init.cjs +9 -0
  6. package/dist/cli/init.cjs.map +1 -1
  7. package/dist/cli/init.d.cts +2 -1
  8. package/dist/cli/init.d.cts.map +1 -1
  9. package/dist/cli/init.d.mts +2 -1
  10. package/dist/cli/init.d.mts.map +1 -1
  11. package/dist/cli/init.mjs +9 -1
  12. package/dist/cli/init.mjs.map +1 -1
  13. package/dist/cli/sync.cjs +6 -0
  14. package/dist/cli/sync.cjs.map +1 -1
  15. package/dist/cli/sync.mjs +6 -0
  16. package/dist/cli/sync.mjs.map +1 -1
  17. package/dist/cli/upgrade.cjs +75 -7
  18. package/dist/cli/upgrade.cjs.map +1 -1
  19. package/dist/cli/upgrade.mjs +74 -8
  20. package/dist/cli/upgrade.mjs.map +1 -1
  21. package/dist/cli.cjs +2 -0
  22. package/dist/cli.cjs.map +1 -1
  23. package/dist/cli.mjs +2 -0
  24. package/dist/cli.mjs.map +1 -1
  25. package/dist/config.cjs +2 -24
  26. package/dist/config.cjs.map +1 -1
  27. package/dist/config.d.cts.map +1 -1
  28. package/dist/config.d.mts.map +1 -1
  29. package/dist/config.mjs +3 -25
  30. package/dist/config.mjs.map +1 -1
  31. package/dist/contract.cjs +2 -0
  32. package/dist/contract.cjs.map +1 -1
  33. package/dist/contract.d.cts +6 -2
  34. package/dist/contract.d.cts.map +1 -1
  35. package/dist/contract.d.mts +6 -2
  36. package/dist/contract.d.mts.map +1 -1
  37. package/dist/contract.meta.cjs +2 -2
  38. package/dist/contract.meta.cjs.map +1 -1
  39. package/dist/contract.meta.d.cts +2 -2
  40. package/dist/contract.meta.d.mts +2 -2
  41. package/dist/contract.meta.mjs +2 -2
  42. package/dist/contract.meta.mjs.map +1 -1
  43. package/dist/contract.mjs +2 -0
  44. package/dist/contract.mjs.map +1 -1
  45. package/dist/fastkv.cjs +0 -45
  46. package/dist/fastkv.cjs.map +1 -1
  47. package/dist/fastkv.d.cts +1 -19
  48. package/dist/fastkv.d.cts.map +1 -1
  49. package/dist/fastkv.d.mts +1 -19
  50. package/dist/fastkv.d.mts.map +1 -1
  51. package/dist/fastkv.mjs +1 -44
  52. package/dist/fastkv.mjs.map +1 -1
  53. package/dist/index.cjs +0 -2
  54. package/dist/index.d.cts +2 -2
  55. package/dist/index.d.mts +2 -2
  56. package/dist/index.mjs +2 -2
  57. package/dist/merge.cjs +4 -11
  58. package/dist/merge.cjs.map +1 -1
  59. package/dist/merge.d.cts.map +1 -1
  60. package/dist/merge.d.mts.map +1 -1
  61. package/dist/merge.mjs +4 -11
  62. package/dist/merge.mjs.map +1 -1
  63. package/dist/near-cli.cjs +1 -1
  64. package/dist/near-cli.mjs +1 -1
  65. package/dist/plugin.cjs +51 -58
  66. package/dist/plugin.cjs.map +1 -1
  67. package/dist/plugin.d.cts +4 -2
  68. package/dist/plugin.d.cts.map +1 -1
  69. package/dist/plugin.d.mts +4 -2
  70. package/dist/plugin.d.mts.map +1 -1
  71. package/dist/plugin.mjs +50 -57
  72. package/dist/plugin.mjs.map +1 -1
  73. package/dist/types.d.cts +2 -2
  74. package/dist/types.d.mts +2 -2
  75. package/package.json +1 -1
  76. package/src/cli/infra.ts +190 -0
  77. package/src/cli/init.ts +4 -0
  78. package/src/cli/sync.ts +9 -0
  79. package/src/cli/upgrade.ts +117 -6
  80. package/src/cli.ts +6 -0
  81. package/src/config.ts +5 -34
  82. package/src/contract.meta.ts +2 -2
  83. package/src/contract.ts +2 -0
  84. package/src/fastkv.ts +0 -72
  85. package/src/merge.ts +6 -19
  86. package/src/plugin.ts +51 -70
package/src/plugin.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { randomBytes } from "node:crypto";
2
1
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
3
2
  import { basename, dirname, join, resolve } from "node:path";
4
3
  import * as p from "@clack/prompts";
5
4
  import { Effect } from "effect";
6
5
  import { syncApiContractBridge } from "./api-contract";
7
6
  import { buildRuntimeConfig, detectLocalPackages, prepareDevelopmentRuntimeConfig } from "./app";
7
+ import { ensureEnvFile, writeGeneratedInfra } from "./cli/infra";
8
8
  import {
9
9
  copyFilteredFiles,
10
10
  fetchParentConfig,
@@ -13,6 +13,7 @@ import {
13
13
  readTemplatekeep,
14
14
  resolveSourceDir,
15
15
  runBunInstall,
16
+ runDockerComposeUp,
16
17
  runTypesGen,
17
18
  writeInitSnapshot,
18
19
  } from "./cli/init";
@@ -57,38 +58,6 @@ import { run } from "./utils/run";
57
58
  import { saveBosConfig } from "./utils/save-config";
58
59
  import { colors } from "./utils/theme";
59
60
 
60
- function ensureEnvFile(configDir: string, opts?: { domain?: string }): void {
61
- const envPath = join(configDir, ".env");
62
- const examplePath = join(configDir, ".env.example");
63
-
64
- if (existsSync(envPath)) return;
65
-
66
- if (!existsSync(examplePath)) return;
67
-
68
- const content = readFileSync(examplePath, "utf-8");
69
- const lines = content.split("\n");
70
-
71
- const secret = randomBytes(32).toString("base64url");
72
- const corsOrigin = opts?.domain
73
- ? `http://localhost:3000,https://${opts.domain}`
74
- : "http://localhost:3000";
75
-
76
- const updated = lines
77
- .map((line) => {
78
- if (/^BETTER_AUTH_SECRET=/.test(line)) {
79
- return `BETTER_AUTH_SECRET=${secret}`;
80
- }
81
- if (/^CORS_ORIGIN=/.test(line)) {
82
- return `CORS_ORIGIN=${corsOrigin}`;
83
- }
84
- return line;
85
- })
86
- .join("\n");
87
-
88
- writeFileSync(envPath, updated);
89
- p.log.info(`Created .env from .env.example with generated BETTER_AUTH_SECRET`);
90
- }
91
-
92
61
  const buildCommands: Record<string, { cmd: string; args: string[] }> = {
93
62
  host: { cmd: "bun", args: ["run", "build"] },
94
63
  ui: { cmd: "bun", args: ["run", "build"] },
@@ -711,32 +680,19 @@ export default createPlugin({
711
680
  pluginDomain = `${input.key}.${deps.bosConfig.domain ?? "everything.dev"}`;
712
681
  }
713
682
 
714
- if (manifest && version) {
715
- try {
716
- const registryEntries: Record<string, string> = {
717
- [`plugins/${account}/${input.key}/manifest.json`]: JSON.stringify(manifest),
718
- [`plugins/${account}/${input.key}/metadata`]: JSON.stringify({
719
- title: null,
720
- description: null,
721
- repoUrl: deps.bosConfig.repository ?? null,
722
- version,
723
- publishedAt: new Date().toISOString(),
724
- cdnUrl: publishedUrl,
725
- integrity,
726
- }),
727
- [`plugins/${account}/${input.key}/versions/${version}/manifest.json`]:
728
- JSON.stringify(manifest),
729
- };
683
+ try {
684
+ const registryEntries: Record<string, string> = {};
730
685
 
731
- if (existsSync(pluginConfigPath)) {
732
- try {
733
- const publishedPluginConfig = JSON.parse(readFileSync(pluginConfigPath, "utf-8"));
734
- delete publishedPluginConfig.development;
735
- registryEntries[`apps/${account}/${pluginDomain}/bos.config.json`] =
736
- JSON.stringify(publishedPluginConfig);
737
- } catch {}
738
- }
686
+ if (existsSync(pluginConfigPath)) {
687
+ try {
688
+ const publishedPluginConfig = JSON.parse(readFileSync(pluginConfigPath, "utf-8"));
689
+ delete publishedPluginConfig.development;
690
+ registryEntries[`apps/${account}/${pluginDomain}/bos.config.json`] =
691
+ JSON.stringify(publishedPluginConfig);
692
+ } catch {}
693
+ }
739
694
 
695
+ if (Object.keys(registryEntries).length > 0) {
740
696
  const payload = JSON.stringify(registryEntries);
741
697
  const argsBase64 = Buffer.from(payload).toString("base64");
742
698
  const privateKey = process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;
@@ -763,11 +719,11 @@ export default createPlugin({
763
719
  );
764
720
  }
765
721
  }
766
- } catch (registryError) {
767
- console.warn(
768
- `[publish] Plugin registry write skipped: ${registryError instanceof Error ? registryError.message : registryError}`,
769
- );
770
722
  }
723
+ } catch (registryError) {
724
+ console.warn(
725
+ `[publish] Plugin registry write skipped: ${registryError instanceof Error ? registryError.message : registryError}`,
726
+ );
771
727
  }
772
728
 
773
729
  await generateCodeArtifacts(deps.configDir, deps.bosConfig);
@@ -1355,6 +1311,7 @@ export default createPlugin({
1355
1311
  }
1356
1312
 
1357
1313
  directory = directory || domain || extendsGateway;
1314
+ const targetDir = resolve(directory);
1358
1315
  plugins = plugins ?? [];
1359
1316
 
1360
1317
  if (!parentConfig) {
@@ -1418,13 +1375,13 @@ export default createPlugin({
1418
1375
  const s = p.spinner();
1419
1376
  s.start("Setting up project");
1420
1377
 
1421
- const filesCopied = await copyFilteredFiles(sourceDir, directory, patterns, {
1378
+ const filesCopied = await copyFilteredFiles(sourceDir, targetDir, patterns, {
1422
1379
  withHost,
1423
1380
  plugins,
1424
1381
  pluginRoutes,
1425
1382
  });
1426
1383
 
1427
- await personalizeConfig(directory, {
1384
+ await personalizeConfig(targetDir, {
1428
1385
  extendsAccount,
1429
1386
  extendsGateway,
1430
1387
  account: account || extendsAccount,
@@ -1435,27 +1392,51 @@ export default createPlugin({
1435
1392
  withHost,
1436
1393
  });
1437
1394
 
1438
- await writeInitSnapshot(directory, extendsAccount, extendsGateway, sourceDir, patterns, {
1395
+ await writeInitSnapshot(targetDir, extendsAccount, extendsGateway, sourceDir, patterns, {
1439
1396
  withHost,
1440
1397
  plugins,
1441
1398
  pluginRoutes,
1442
1399
  });
1443
1400
 
1444
- ensureEnvFile(directory, { domain });
1401
+ const initConfig = await loadConfig({ cwd: targetDir });
1402
+ if (initConfig?.runtime) {
1403
+ writeGeneratedInfra(targetDir, initConfig.runtime);
1404
+ }
1405
+ ensureEnvFile(targetDir);
1445
1406
 
1446
1407
  if (!input.noInstall) {
1447
- await runBunInstall(directory);
1448
- await runTypesGen(directory);
1449
- await generateDatabaseMigrations(directory);
1408
+ await runBunInstall(targetDir);
1409
+ await runTypesGen(targetDir);
1410
+ await generateDatabaseMigrations(targetDir);
1450
1411
  }
1451
1412
 
1452
- const initConfig = await loadConfig({ cwd: directory });
1453
1413
  if (initConfig?.config) {
1454
- await generateCodeArtifacts(directory, initConfig.config);
1414
+ await generateCodeArtifacts(targetDir, initConfig.config);
1455
1415
  }
1456
1416
 
1457
1417
  s.stop("Project initialized");
1458
1418
 
1419
+ if (!input.noInteractive) {
1420
+ const shouldStartDocker = await p.confirm({
1421
+ message: "Run docker compose up -d --wait?",
1422
+ initialValue: true,
1423
+ });
1424
+
1425
+ if (shouldStartDocker === true) {
1426
+ const dockerSpinner = p.spinner();
1427
+ dockerSpinner.start("Starting Docker services");
1428
+ try {
1429
+ await runDockerComposeUp(targetDir);
1430
+ dockerSpinner.stop("Docker services ready");
1431
+ } catch (error) {
1432
+ dockerSpinner.stop("Docker services not started");
1433
+ p.log.warn(
1434
+ `docker compose up -d --wait failed: ${error instanceof Error ? error.message : error}`,
1435
+ );
1436
+ }
1437
+ }
1438
+ }
1439
+
1459
1440
  return {
1460
1441
  status: "initialized" as const,
1461
1442
  directory,