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
@@ -1 +1 @@
1
- {"version":3,"file":"merge.mjs","names":[],"sources":["../src/merge.ts"],"sourcesContent":["import { createDefu } from \"defu\";\nimport type { BosConfigInput, ExtendsConfig } from \"./types\";\n\nexport const BOS_CONFIG_ORDER = [\n \"extends\",\n \"account\",\n \"domain\",\n \"title\",\n \"description\",\n \"testnet\",\n \"staging\",\n \"repository\",\n \"app\",\n \"plugins\",\n \"shared\",\n] as const;\n\nexport type BosConfigFieldName = (typeof BOS_CONFIG_ORDER)[number];\n\nexport type BosEnv = \"development\" | \"production\" | \"staging\";\n\nexport interface ResolvedConfigMeta {\n env: BosEnv;\n resolvedAt: string;\n extendsChain: string[];\n source?: string;\n}\n\nconst ARRAY_UNION_KEYS = new Set([\"secrets\"]);\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction unionArrays(a: unknown, b: unknown): unknown[] | undefined {\n const aArr = Array.isArray(a) ? a : [];\n const bArr = Array.isArray(b) ? b : [];\n if (aArr.length === 0 && bArr.length === 0) return undefined;\n const seen = new Set<string>();\n const result: unknown[] = [];\n for (const item of [...aArr, ...bArr]) {\n if (typeof item === \"string\") {\n if (seen.has(item)) continue;\n seen.add(item);\n }\n result.push(item);\n }\n return result;\n}\n\nfunction cleanNullSentinels(obj: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (value === null || value === undefined) continue;\n if (isPlainObject(value)) {\n const cleaned = cleanNullSentinels(value);\n if (Object.keys(cleaned).length > 0) {\n out[key] = cleaned;\n }\n } else {\n out[key] = value;\n }\n }\n return out;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst bosConfigMerger = createDefu((obj: any, key: any, value: any): boolean | undefined => {\n if (obj[key] === null) return true;\n if (value === null) {\n obj[key] = null;\n return true;\n }\n if (Array.isArray(obj[key]) && Array.isArray(value)) {\n if (ARRAY_UNION_KEYS.has(key)) {\n obj[key] = unionArrays(obj[key], value);\n } else {\n obj[key] = value;\n }\n return true;\n }\n return false;\n});\n\nexport function resolveExtendsRef(\n extendsField: string | ExtendsConfig | undefined,\n env: BosEnv,\n): string | undefined {\n if (!extendsField) return undefined;\n if (typeof extendsField === \"string\") return extendsField;\n return extendsField[env] ?? extendsField.production ?? Object.values(extendsField).find(Boolean);\n}\n\nexport function mergeBosConfigWithExtends(\n parent: BosConfigInput,\n child: BosConfigInput,\n): BosConfigInput {\n const merged = bosConfigMerger(child, parent) as BosConfigInput;\n\n if (isPlainObject(parent.plugins) && isPlainObject(child.plugins)) {\n const plugins: Record<string, unknown> = { ...parent.plugins };\n for (const [key, rawValue] of Object.entries(child.plugins)) {\n const value = rawValue as unknown;\n if (value === null || value === false) {\n delete plugins[key];\n } else if (isPlainObject(plugins[key]) && isPlainObject(value)) {\n plugins[key] = bosConfigMerger(\n value as Record<string, unknown>,\n plugins[key] as Record<string, unknown>,\n );\n } else {\n plugins[key] = value;\n }\n }\n (merged as Record<string, unknown>).plugins = plugins;\n } else if (child.plugins !== undefined) {\n (merged as Record<string, unknown>).plugins = cleanNullSentinels(\n child.plugins as Record<string, unknown>,\n );\n }\n\n const mergedRecord = merged as Record<string, unknown>;\n\n if (isPlainObject(mergedRecord.app)) {\n for (const entryVal of Object.values(mergedRecord.app as Record<string, unknown>)) {\n if (!isPlainObject(entryVal)) continue;\n for (const secretKey of ARRAY_UNION_KEYS) {\n if (Array.isArray(entryVal[secretKey])) {\n entryVal[secretKey] =\n (unionArrays(entryVal[secretKey] as unknown[], []) as string[] | undefined)?.filter(\n Boolean,\n ) ?? entryVal[secretKey];\n }\n }\n }\n }\n\n if (isPlainObject(mergedRecord.plugins)) {\n for (const pluginVal of Object.values(mergedRecord.plugins as Record<string, unknown>)) {\n if (!isPlainObject(pluginVal)) continue;\n for (const secretKey of ARRAY_UNION_KEYS) {\n if (Array.isArray(pluginVal[secretKey])) {\n pluginVal[secretKey] =\n (unionArrays(pluginVal[secretKey] as unknown[], []) as string[] | undefined)?.filter(\n Boolean,\n ) ?? pluginVal[secretKey];\n }\n }\n }\n }\n\n return rebuildOrderedConfig(mergedRecord) as BosConfigInput;\n}\n\nexport function mergeBosConfigWithTemplate(\n local: BosConfigInput,\n template: BosConfigInput,\n): BosConfigInput {\n const merged = mergeJsonValuesPreservingLocalOrder(local, template) as BosConfigInput;\n return rebuildOrderedConfig(merged as Record<string, unknown>) as BosConfigInput;\n}\n\nfunction mergeJsonValuesPreservingLocalOrder(local: unknown, template: unknown): unknown {\n if (isPlainObject(local) && isPlainObject(template)) {\n const merged: Record<string, unknown> = {};\n for (const key of Object.keys(local)) {\n merged[key] = mergeJsonValuesPreservingLocalOrder(\n local[key],\n (template as Record<string, unknown>)[key],\n );\n }\n for (const key of Object.keys(template as Record<string, unknown>)) {\n if (!(key in merged)) {\n merged[key] = (template as Record<string, unknown>)[key];\n }\n }\n return merged;\n }\n return local ?? template;\n}\n\nexport function rebuildOrderedConfig<T extends Record<string, unknown>>(config: T): T {\n const ordered: Record<string, unknown> = {};\n\n for (const key of BOS_CONFIG_ORDER) {\n if (key in config) {\n ordered[key] = config[key];\n }\n }\n\n for (const key of Object.keys(config)) {\n if (!BOS_CONFIG_ORDER.includes(key as BosConfigFieldName)) {\n ordered[key] = config[key];\n }\n }\n\n return ordered as T;\n}\n\nexport { bosConfigMerger };\n"],"mappings":"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"}
1
+ {"version":3,"file":"merge.mjs","names":[],"sources":["../src/merge.ts"],"sourcesContent":["import { createDefu } from \"defu\";\nimport type { BosConfigInput, ExtendsConfig } from \"./types\";\n\nexport const BOS_CONFIG_ORDER = [\n \"extends\",\n \"account\",\n \"domain\",\n \"title\",\n \"description\",\n \"testnet\",\n \"staging\",\n \"repository\",\n \"app\",\n \"plugins\",\n \"shared\",\n] as const;\n\nexport type BosConfigFieldName = (typeof BOS_CONFIG_ORDER)[number];\n\nexport type BosEnv = \"development\" | \"production\" | \"staging\";\n\nexport interface ResolvedConfigMeta {\n env: BosEnv;\n resolvedAt: string;\n extendsChain: string[];\n source?: string;\n}\n\nconst ARRAY_UNION_KEYS = new Set([\"secrets\"]);\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction unionArrays(a: unknown, b: unknown): unknown[] | undefined {\n const aArr = Array.isArray(a) ? a : [];\n const bArr = Array.isArray(b) ? b : [];\n if (aArr.length === 0 && bArr.length === 0) return undefined;\n const seen = new Set<string>();\n const result: unknown[] = [];\n for (const item of [...aArr, ...bArr]) {\n if (typeof item === \"string\") {\n if (seen.has(item)) continue;\n seen.add(item);\n }\n result.push(item);\n }\n return result;\n}\n\nfunction cleanNullSentinels(obj: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (value === null || value === undefined) continue;\n if (isPlainObject(value)) {\n const cleaned = cleanNullSentinels(value);\n if (Object.keys(cleaned).length > 0) {\n out[key] = cleaned;\n }\n } else {\n out[key] = value;\n }\n }\n return out;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst bosConfigMerger = createDefu((obj: any, key: any, value: any): boolean | undefined => {\n if (obj[key] === null) return true;\n if (value === null) {\n obj[key] = null;\n return true;\n }\n if (Array.isArray(obj[key]) && Array.isArray(value)) {\n if (ARRAY_UNION_KEYS.has(key)) {\n obj[key] = unionArrays(obj[key], value);\n } else {\n obj[key] = value;\n }\n return true;\n }\n return false;\n});\n\nexport function resolveExtendsRef(\n extendsField: string | ExtendsConfig | undefined,\n env: BosEnv,\n): string | undefined {\n if (!extendsField) return undefined;\n if (typeof extendsField === \"string\") return extendsField;\n return extendsField[env] ?? extendsField.production ?? Object.values(extendsField).find(Boolean);\n}\n\nexport function mergeBosConfigWithExtends(\n parent: BosConfigInput,\n child: BosConfigInput,\n): BosConfigInput {\n const { plugins: _ignoredParentPlugins, ...parentWithoutPlugins } = parent;\n const merged = bosConfigMerger(child, parentWithoutPlugins) as BosConfigInput;\n\n if (child.plugins !== undefined && isPlainObject(child.plugins)) {\n (merged as Record<string, unknown>).plugins = cleanNullSentinels(\n child.plugins as Record<string, unknown>,\n );\n } else {\n delete (merged as Record<string, unknown>).plugins;\n }\n\n const mergedRecord = merged as Record<string, unknown>;\n\n if (isPlainObject(mergedRecord.app)) {\n for (const entryVal of Object.values(mergedRecord.app as Record<string, unknown>)) {\n if (!isPlainObject(entryVal)) continue;\n for (const secretKey of ARRAY_UNION_KEYS) {\n if (Array.isArray(entryVal[secretKey])) {\n entryVal[secretKey] =\n (unionArrays(entryVal[secretKey] as unknown[], []) as string[] | undefined)?.filter(\n Boolean,\n ) ?? entryVal[secretKey];\n }\n }\n }\n }\n\n if (isPlainObject(mergedRecord.plugins)) {\n for (const pluginVal of Object.values(mergedRecord.plugins as Record<string, unknown>)) {\n if (!isPlainObject(pluginVal)) continue;\n for (const secretKey of ARRAY_UNION_KEYS) {\n if (Array.isArray(pluginVal[secretKey])) {\n pluginVal[secretKey] =\n (unionArrays(pluginVal[secretKey] as unknown[], []) as string[] | undefined)?.filter(\n Boolean,\n ) ?? pluginVal[secretKey];\n }\n }\n }\n }\n\n return rebuildOrderedConfig(mergedRecord) as BosConfigInput;\n}\n\nexport function mergeBosConfigWithTemplate(\n local: BosConfigInput,\n template: BosConfigInput,\n): BosConfigInput {\n const merged = mergeJsonValuesPreservingLocalOrder(local, template) as BosConfigInput;\n return rebuildOrderedConfig(merged as Record<string, unknown>) as BosConfigInput;\n}\n\nfunction mergeJsonValuesPreservingLocalOrder(local: unknown, template: unknown): unknown {\n if (isPlainObject(local) && isPlainObject(template)) {\n const merged: Record<string, unknown> = {};\n for (const key of Object.keys(local)) {\n merged[key] = mergeJsonValuesPreservingLocalOrder(\n local[key],\n (template as Record<string, unknown>)[key],\n );\n }\n for (const key of Object.keys(template as Record<string, unknown>)) {\n if (!(key in merged)) {\n merged[key] = (template as Record<string, unknown>)[key];\n }\n }\n return merged;\n }\n return local ?? template;\n}\n\nexport function rebuildOrderedConfig<T extends Record<string, unknown>>(config: T): T {\n const ordered: Record<string, unknown> = {};\n\n for (const key of BOS_CONFIG_ORDER) {\n if (key in config) {\n ordered[key] = config[key];\n }\n }\n\n for (const key of Object.keys(config)) {\n if (!BOS_CONFIG_ORDER.includes(key as BosConfigFieldName)) {\n ordered[key] = config[key];\n }\n }\n\n return ordered as T;\n}\n\nexport { bosConfigMerger };\n"],"mappings":"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"}
package/dist/near-cli.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
2
- let node_crypto = require("node:crypto");
3
2
  let effect = require("effect");
3
+ let node_crypto = require("node:crypto");
4
4
  let execa = require("execa");
5
5
 
6
6
  //#region src/near-cli.ts
package/dist/near-cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { generateKeyPairSync } from "node:crypto";
2
1
  import { Effect } from "effect";
2
+ import { generateKeyPairSync } from "node:crypto";
3
3
  import { execa } from "execa";
4
4
 
5
5
  //#region src/near-cli.ts
package/dist/plugin.cjs CHANGED
@@ -6,6 +6,7 @@ const require_config = require('./config.cjs');
6
6
  const require_contract = require('./contract.cjs');
7
7
  const require_api_contract = require('./api-contract.cjs');
8
8
  const require_app = require('./app.cjs');
9
+ const require_infra = require('./cli/infra.cjs');
9
10
  const require_save_config = require('./utils/save-config.cjs');
10
11
  const require_cli_init = require('./cli/init.cjs');
11
12
  const require_prompts = require('./cli/prompts.cjs');
@@ -22,7 +23,6 @@ const require_sidebar = require('./sidebar.cjs');
22
23
  const require_run = require('./utils/run.cjs');
23
24
  let node_fs = require("node:fs");
24
25
  let node_path = require("node:path");
25
- let node_crypto = require("node:crypto");
26
26
  let _clack_prompts = require("@clack/prompts");
27
27
  _clack_prompts = require_runtime.__toESM(_clack_prompts, 1);
28
28
  let effect = require("effect");
@@ -30,21 +30,6 @@ let every_plugin = require("every-plugin");
30
30
  let every_plugin_zod = require("every-plugin/zod");
31
31
 
32
32
  //#region src/plugin.ts
33
- function ensureEnvFile(configDir, opts) {
34
- const envPath = (0, node_path.join)(configDir, ".env");
35
- const examplePath = (0, node_path.join)(configDir, ".env.example");
36
- if ((0, node_fs.existsSync)(envPath)) return;
37
- if (!(0, node_fs.existsSync)(examplePath)) return;
38
- const lines = (0, node_fs.readFileSync)(examplePath, "utf-8").split("\n");
39
- const secret = (0, node_crypto.randomBytes)(32).toString("base64url");
40
- const corsOrigin = opts?.domain ? `http://localhost:3000,https://${opts.domain}` : "http://localhost:3000";
41
- (0, node_fs.writeFileSync)(envPath, lines.map((line) => {
42
- if (/^BETTER_AUTH_SECRET=/.test(line)) return `BETTER_AUTH_SECRET=${secret}`;
43
- if (/^CORS_ORIGIN=/.test(line)) return `CORS_ORIGIN=${corsOrigin}`;
44
- return line;
45
- }).join("\n"));
46
- _clack_prompts.log.info(`Created .env from .env.example with generated BETTER_AUTH_SECRET`);
47
- }
48
33
  const buildCommands = {
49
34
  host: {
50
35
  cmd: "bun",
@@ -444,42 +429,32 @@ var plugin_default = (0, every_plugin.createPlugin)({
444
429
  if (typeof pluginConfig.domain === "string") pluginDomain = pluginConfig.domain;
445
430
  } catch {}
446
431
  if (!pluginDomain) pluginDomain = `${input.key}.${deps.bosConfig.domain ?? "everything.dev"}`;
447
- if (manifest && version) try {
448
- const registryEntries = {
449
- [`plugins/${account}/${input.key}/manifest.json`]: JSON.stringify(manifest),
450
- [`plugins/${account}/${input.key}/metadata`]: JSON.stringify({
451
- title: null,
452
- description: null,
453
- repoUrl: deps.bosConfig.repository ?? null,
454
- version,
455
- publishedAt: (/* @__PURE__ */ new Date()).toISOString(),
456
- cdnUrl: publishedUrl,
457
- integrity
458
- }),
459
- [`plugins/${account}/${input.key}/versions/${version}/manifest.json`]: JSON.stringify(manifest)
460
- };
432
+ try {
433
+ const registryEntries = {};
461
434
  if ((0, node_fs.existsSync)(pluginConfigPath)) try {
462
435
  const publishedPluginConfig = JSON.parse((0, node_fs.readFileSync)(pluginConfigPath, "utf-8"));
463
436
  delete publishedPluginConfig.development;
464
437
  registryEntries[`apps/${account}/${pluginDomain}/bos.config.json`] = JSON.stringify(publishedPluginConfig);
465
438
  } catch {}
466
- const payload = JSON.stringify(registryEntries);
467
- const argsBase64 = Buffer.from(payload).toString("base64");
468
- const privateKey = process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;
469
- await effect.Effect.runPromise(require_near_cli.ensureNearCli);
470
- try {
471
- await effect.Effect.runPromise(require_near_cli.executeTransaction({
472
- account,
473
- contract: require_fastkv.getRegistryNamespaceForNetwork(network),
474
- method: "__fastdata_kv",
475
- argsBase64,
476
- network,
477
- privateKey,
478
- gas: "50Tgas",
479
- deposit: "0NEAR"
480
- }));
481
- } catch (registryError) {
482
- if (!extractTransactionHash(registryError)) console.warn(`[publish] Plugin registry write failed: ${registryError instanceof Error ? registryError.message : registryError}`);
439
+ if (Object.keys(registryEntries).length > 0) {
440
+ const payload = JSON.stringify(registryEntries);
441
+ const argsBase64 = Buffer.from(payload).toString("base64");
442
+ const privateKey = process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;
443
+ await effect.Effect.runPromise(require_near_cli.ensureNearCli);
444
+ try {
445
+ await effect.Effect.runPromise(require_near_cli.executeTransaction({
446
+ account,
447
+ contract: require_fastkv.getRegistryNamespaceForNetwork(network),
448
+ method: "__fastdata_kv",
449
+ argsBase64,
450
+ network,
451
+ privateKey,
452
+ gas: "50Tgas",
453
+ deposit: "0NEAR"
454
+ }));
455
+ } catch (registryError) {
456
+ if (!extractTransactionHash(registryError)) console.warn(`[publish] Plugin registry write failed: ${registryError instanceof Error ? registryError.message : registryError}`);
457
+ }
483
458
  }
484
459
  } catch (registryError) {
485
460
  console.warn(`[publish] Plugin registry write skipped: ${registryError instanceof Error ? registryError.message : registryError}`);
@@ -497,7 +472,7 @@ var plugin_default = (0, every_plugin.createPlugin)({
497
472
  };
498
473
  }),
499
474
  dev: builder.dev.handler(async ({ input }) => {
500
- ensureEnvFile(deps.configDir);
475
+ require_infra.ensureEnvFile(deps.configDir);
501
476
  const localPackages = require_app.detectLocalPackages(deps.bosConfig ?? void 0, deps.runtimeConfig ?? void 0);
502
477
  const hostSource = localPackages.includes("host") ? parseSourceMode(input.host, "local") : "remote";
503
478
  const uiSource = localPackages.includes("ui") ? parseSourceMode(input.ui, "local") : "remote";
@@ -568,7 +543,7 @@ var plugin_default = (0, every_plugin.createPlugin)({
568
543
  };
569
544
  }),
570
545
  start: builder.start.handler(async ({ input }) => {
571
- ensureEnvFile(deps.configDir);
546
+ require_infra.ensureEnvFile(deps.configDir);
572
547
  const account = input.account ?? process.env.BOS_ACCOUNT;
573
548
  const domain = input.domain ?? process.env.BOS_GATEWAY;
574
549
  let config = null;
@@ -890,6 +865,7 @@ var plugin_default = (0, every_plugin.createPlugin)({
890
865
  plugins = prompted.plugins;
891
866
  }
892
867
  directory = directory || domain || extendsGateway;
868
+ const targetDir = (0, node_path.resolve)(directory);
893
869
  plugins = plugins ?? [];
894
870
  if (!parentConfig) try {
895
871
  parentConfig = await require_cli_init.fetchParentConfig(extendsAccount, extendsGateway);
@@ -934,12 +910,12 @@ var plugin_default = (0, every_plugin.createPlugin)({
934
910
  }
935
911
  const s = _clack_prompts.spinner();
936
912
  s.start("Setting up project");
937
- const filesCopied = await require_cli_init.copyFilteredFiles(sourceDir, directory, patterns, {
913
+ const filesCopied = await require_cli_init.copyFilteredFiles(sourceDir, targetDir, patterns, {
938
914
  withHost,
939
915
  plugins,
940
916
  pluginRoutes
941
917
  });
942
- await require_cli_init.personalizeConfig(directory, {
918
+ await require_cli_init.personalizeConfig(targetDir, {
943
919
  extendsAccount,
944
920
  extendsGateway,
945
921
  account: account || extendsAccount,
@@ -949,20 +925,37 @@ var plugin_default = (0, every_plugin.createPlugin)({
949
925
  workspaceOpts: { sourceDir },
950
926
  withHost
951
927
  });
952
- await require_cli_init.writeInitSnapshot(directory, extendsAccount, extendsGateway, sourceDir, patterns, {
928
+ await require_cli_init.writeInitSnapshot(targetDir, extendsAccount, extendsGateway, sourceDir, patterns, {
953
929
  withHost,
954
930
  plugins,
955
931
  pluginRoutes
956
932
  });
957
- ensureEnvFile(directory, { domain });
933
+ const initConfig = await require_config.loadConfig({ cwd: targetDir });
934
+ if (initConfig?.runtime) require_infra.writeGeneratedInfra(targetDir, initConfig.runtime);
935
+ require_infra.ensureEnvFile(targetDir);
958
936
  if (!input.noInstall) {
959
- await require_cli_init.runBunInstall(directory);
960
- await require_cli_init.runTypesGen(directory);
961
- await require_cli_init.generateDatabaseMigrations(directory);
937
+ await require_cli_init.runBunInstall(targetDir);
938
+ await require_cli_init.runTypesGen(targetDir);
939
+ await require_cli_init.generateDatabaseMigrations(targetDir);
962
940
  }
963
- const initConfig = await require_config.loadConfig({ cwd: directory });
964
- if (initConfig?.config) await generateCodeArtifacts(directory, initConfig.config);
941
+ if (initConfig?.config) await generateCodeArtifacts(targetDir, initConfig.config);
965
942
  s.stop("Project initialized");
943
+ if (!input.noInteractive) {
944
+ if (await _clack_prompts.confirm({
945
+ message: "Run docker compose up -d --wait?",
946
+ initialValue: true
947
+ }) === true) {
948
+ const dockerSpinner = _clack_prompts.spinner();
949
+ dockerSpinner.start("Starting Docker services");
950
+ try {
951
+ await require_cli_init.runDockerComposeUp(targetDir);
952
+ dockerSpinner.stop("Docker services ready");
953
+ } catch (error) {
954
+ dockerSpinner.stop("Docker services not started");
955
+ _clack_prompts.log.warn(`docker compose up -d --wait failed: ${error instanceof Error ? error.message : error}`);
956
+ }
957
+ }
958
+ }
966
959
  return {
967
960
  status: "initialized",
968
961
  directory,