syncorejs 0.2.1 → 0.2.3

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 (169) hide show
  1. package/README.md +2 -1
  2. package/dist/_vendor/cli/app.d.mts.map +1 -1
  3. package/dist/_vendor/cli/app.mjs +330 -46
  4. package/dist/_vendor/cli/app.mjs.map +1 -1
  5. package/dist/_vendor/cli/context.mjs +27 -9
  6. package/dist/_vendor/cli/context.mjs.map +1 -1
  7. package/dist/_vendor/cli/dev-session.mjs.map +1 -1
  8. package/dist/_vendor/cli/doctor.mjs +513 -46
  9. package/dist/_vendor/cli/doctor.mjs.map +1 -1
  10. package/dist/_vendor/cli/errors.mjs.map +1 -1
  11. package/dist/_vendor/cli/help.mjs.map +1 -1
  12. package/dist/_vendor/cli/index.mjs +9 -2
  13. package/dist/_vendor/cli/index.mjs.map +1 -1
  14. package/dist/_vendor/cli/messages.mjs +5 -4
  15. package/dist/_vendor/cli/messages.mjs.map +1 -1
  16. package/dist/_vendor/cli/preflight.mjs.map +1 -1
  17. package/dist/_vendor/cli/project.mjs +125 -27
  18. package/dist/_vendor/cli/project.mjs.map +1 -1
  19. package/dist/_vendor/cli/render.mjs +57 -9
  20. package/dist/_vendor/cli/render.mjs.map +1 -1
  21. package/dist/_vendor/cli/targets.mjs +4 -3
  22. package/dist/_vendor/cli/targets.mjs.map +1 -1
  23. package/dist/_vendor/core/cli.d.mts +20 -4
  24. package/dist/_vendor/core/cli.d.mts.map +1 -1
  25. package/dist/_vendor/core/cli.mjs +458 -133
  26. package/dist/_vendor/core/cli.mjs.map +1 -1
  27. package/dist/_vendor/core/devtools-auth.mjs +60 -0
  28. package/dist/_vendor/core/devtools-auth.mjs.map +1 -0
  29. package/dist/_vendor/core/index.d.mts +5 -3
  30. package/dist/_vendor/core/index.mjs +22 -2
  31. package/dist/_vendor/core/index.mjs.map +1 -1
  32. package/dist/_vendor/core/runtime/components.d.mts +111 -0
  33. package/dist/_vendor/core/runtime/components.d.mts.map +1 -0
  34. package/dist/_vendor/core/runtime/components.mjs +186 -0
  35. package/dist/_vendor/core/runtime/components.mjs.map +1 -0
  36. package/dist/_vendor/core/runtime/devtools.d.mts +4 -4
  37. package/dist/_vendor/core/runtime/devtools.d.mts.map +1 -1
  38. package/dist/_vendor/core/runtime/devtools.mjs +178 -60
  39. package/dist/_vendor/core/runtime/devtools.mjs.map +1 -1
  40. package/dist/_vendor/core/runtime/functions.d.mts +398 -16
  41. package/dist/_vendor/core/runtime/functions.d.mts.map +1 -1
  42. package/dist/_vendor/core/runtime/functions.mjs +74 -3
  43. package/dist/_vendor/core/runtime/functions.mjs.map +1 -1
  44. package/dist/_vendor/core/runtime/id.d.mts.map +1 -1
  45. package/dist/_vendor/core/runtime/id.mjs.map +1 -1
  46. package/dist/_vendor/core/runtime/internal/engines/devtoolsEngine.mjs +83 -0
  47. package/dist/_vendor/core/runtime/internal/engines/devtoolsEngine.mjs.map +1 -0
  48. package/dist/_vendor/core/runtime/internal/engines/executionEngine.mjs +720 -0
  49. package/dist/_vendor/core/runtime/internal/engines/executionEngine.mjs.map +1 -0
  50. package/dist/_vendor/core/runtime/internal/engines/reactivityEngine.mjs +234 -0
  51. package/dist/_vendor/core/runtime/internal/engines/reactivityEngine.mjs.map +1 -0
  52. package/dist/_vendor/core/runtime/internal/engines/schedulerEngine.mjs +255 -0
  53. package/dist/_vendor/core/runtime/internal/engines/schedulerEngine.mjs.map +1 -0
  54. package/dist/_vendor/core/runtime/internal/engines/schemaEngine.mjs +200 -0
  55. package/dist/_vendor/core/runtime/internal/engines/schemaEngine.mjs.map +1 -0
  56. package/dist/_vendor/core/runtime/internal/engines/shared.mjs +252 -0
  57. package/dist/_vendor/core/runtime/internal/engines/shared.mjs.map +1 -0
  58. package/dist/_vendor/core/runtime/internal/engines/storageEngine.mjs +145 -0
  59. package/dist/_vendor/core/runtime/internal/engines/storageEngine.mjs.map +1 -0
  60. package/dist/_vendor/core/runtime/internal/runtimeKernel.mjs +221 -0
  61. package/dist/_vendor/core/runtime/internal/runtimeKernel.mjs.map +1 -0
  62. package/dist/_vendor/core/runtime/internal/runtimeStatus.mjs +32 -0
  63. package/dist/_vendor/core/runtime/internal/runtimeStatus.mjs.map +1 -0
  64. package/dist/_vendor/core/runtime/internal/systemMeta.mjs +61 -0
  65. package/dist/_vendor/core/runtime/internal/systemMeta.mjs.map +1 -0
  66. package/dist/_vendor/core/runtime/internal/transactionCoordinator.mjs +41 -0
  67. package/dist/_vendor/core/runtime/internal/transactionCoordinator.mjs.map +1 -0
  68. package/dist/_vendor/core/runtime/runtime.d.mts +1187 -202
  69. package/dist/_vendor/core/runtime/runtime.d.mts.map +1 -1
  70. package/dist/_vendor/core/runtime/runtime.mjs +73 -1365
  71. package/dist/_vendor/core/runtime/runtime.mjs.map +1 -1
  72. package/dist/_vendor/core/transport.d.mts +113 -0
  73. package/dist/_vendor/core/transport.d.mts.map +1 -0
  74. package/dist/_vendor/core/transport.mjs +428 -0
  75. package/dist/_vendor/core/transport.mjs.map +1 -0
  76. package/dist/_vendor/devtools-protocol/index.d.ts +187 -4
  77. package/dist/_vendor/devtools-protocol/index.d.ts.map +1 -1
  78. package/dist/_vendor/devtools-protocol/index.js +25 -9
  79. package/dist/_vendor/devtools-protocol/index.js.map +1 -1
  80. package/dist/_vendor/next/config.d.ts +3 -4
  81. package/dist/_vendor/next/config.d.ts.map +1 -1
  82. package/dist/_vendor/next/config.js +37 -19
  83. package/dist/_vendor/next/config.js.map +1 -1
  84. package/dist/_vendor/next/index.d.ts +109 -29
  85. package/dist/_vendor/next/index.d.ts.map +1 -1
  86. package/dist/_vendor/next/index.js +104 -26
  87. package/dist/_vendor/next/index.js.map +1 -1
  88. package/dist/_vendor/platform-expo/index.d.ts +156 -37
  89. package/dist/_vendor/platform-expo/index.d.ts.map +1 -1
  90. package/dist/_vendor/platform-expo/index.js +80 -12
  91. package/dist/_vendor/platform-expo/index.js.map +1 -1
  92. package/dist/_vendor/platform-expo/react.d.ts.map +1 -1
  93. package/dist/_vendor/platform-expo/react.js +11 -10
  94. package/dist/_vendor/platform-expo/react.js.map +1 -1
  95. package/dist/_vendor/platform-expo/web-sqljs-wasm.js +16 -0
  96. package/dist/_vendor/platform-expo/web-sqljs-wasm.js.map +1 -0
  97. package/dist/_vendor/platform-node/index.d.mts +192 -24
  98. package/dist/_vendor/platform-node/index.d.mts.map +1 -1
  99. package/dist/_vendor/platform-node/index.mjs +236 -97
  100. package/dist/_vendor/platform-node/index.mjs.map +1 -1
  101. package/dist/_vendor/platform-node/ipc-react.d.mts.map +1 -1
  102. package/dist/_vendor/platform-node/ipc-react.mjs +15 -2
  103. package/dist/_vendor/platform-node/ipc-react.mjs.map +1 -1
  104. package/dist/_vendor/platform-node/ipc.d.mts +11 -35
  105. package/dist/_vendor/platform-node/ipc.d.mts.map +1 -1
  106. package/dist/_vendor/platform-node/ipc.mjs +3 -273
  107. package/dist/_vendor/platform-node/ipc.mjs.map +1 -1
  108. package/dist/_vendor/platform-web/external-change.d.ts +43 -1
  109. package/dist/_vendor/platform-web/external-change.d.ts.map +1 -1
  110. package/dist/_vendor/platform-web/external-change.js +32 -1
  111. package/dist/_vendor/platform-web/external-change.js.map +1 -1
  112. package/dist/_vendor/platform-web/index.d.ts +323 -51
  113. package/dist/_vendor/platform-web/index.d.ts.map +1 -1
  114. package/dist/_vendor/platform-web/index.js +233 -30
  115. package/dist/_vendor/platform-web/index.js.map +1 -1
  116. package/dist/_vendor/platform-web/indexeddb.d.ts +12 -0
  117. package/dist/_vendor/platform-web/indexeddb.d.ts.map +1 -1
  118. package/dist/_vendor/platform-web/indexeddb.js +10 -0
  119. package/dist/_vendor/platform-web/indexeddb.js.map +1 -1
  120. package/dist/_vendor/platform-web/opfs.d.ts +13 -0
  121. package/dist/_vendor/platform-web/opfs.d.ts.map +1 -1
  122. package/dist/_vendor/platform-web/opfs.js +12 -0
  123. package/dist/_vendor/platform-web/opfs.js.map +1 -1
  124. package/dist/_vendor/platform-web/persistence.d.ts +54 -0
  125. package/dist/_vendor/platform-web/persistence.d.ts.map +1 -1
  126. package/dist/_vendor/platform-web/persistence.js +15 -0
  127. package/dist/_vendor/platform-web/persistence.js.map +1 -1
  128. package/dist/_vendor/platform-web/react.d.ts +1 -2
  129. package/dist/_vendor/platform-web/react.d.ts.map +1 -1
  130. package/dist/_vendor/platform-web/react.js +27 -13
  131. package/dist/_vendor/platform-web/react.js.map +1 -1
  132. package/dist/_vendor/platform-web/sqljs.js +10 -1
  133. package/dist/_vendor/platform-web/sqljs.js.map +1 -1
  134. package/dist/_vendor/platform-web/web-sqljs-wasm.js +8 -0
  135. package/dist/_vendor/platform-web/web-sqljs-wasm.js.map +1 -0
  136. package/dist/_vendor/platform-web/worker.d.ts +71 -44
  137. package/dist/_vendor/platform-web/worker.d.ts.map +1 -1
  138. package/dist/_vendor/platform-web/worker.js +40 -271
  139. package/dist/_vendor/platform-web/worker.js.map +1 -1
  140. package/dist/_vendor/react/index.d.ts +222 -23
  141. package/dist/_vendor/react/index.d.ts.map +1 -1
  142. package/dist/_vendor/react/index.js +476 -63
  143. package/dist/_vendor/react/index.js.map +1 -1
  144. package/dist/_vendor/schema/definition.d.ts +151 -37
  145. package/dist/_vendor/schema/definition.d.ts.map +1 -1
  146. package/dist/_vendor/schema/definition.js +102 -20
  147. package/dist/_vendor/schema/definition.js.map +1 -1
  148. package/dist/_vendor/schema/index.d.ts +4 -4
  149. package/dist/_vendor/schema/index.js +2 -2
  150. package/dist/_vendor/schema/planner.d.ts +19 -2
  151. package/dist/_vendor/schema/planner.d.ts.map +1 -1
  152. package/dist/_vendor/schema/planner.js +79 -3
  153. package/dist/_vendor/schema/planner.js.map +1 -1
  154. package/dist/_vendor/schema/validators.d.ts +279 -83
  155. package/dist/_vendor/schema/validators.d.ts.map +1 -1
  156. package/dist/_vendor/schema/validators.js +330 -38
  157. package/dist/_vendor/schema/validators.js.map +1 -1
  158. package/dist/_vendor/svelte/index.d.ts +245 -19
  159. package/dist/_vendor/svelte/index.d.ts.map +1 -1
  160. package/dist/_vendor/svelte/index.js +443 -20
  161. package/dist/_vendor/svelte/index.js.map +1 -1
  162. package/dist/browser.d.ts.map +1 -1
  163. package/dist/cli.js +3 -1
  164. package/dist/cli.js.map +1 -1
  165. package/dist/components.d.ts +2 -0
  166. package/dist/components.js +2 -0
  167. package/dist/index.d.ts +3 -2
  168. package/dist/index.js +2 -1
  169. package/package.json +29 -21
@@ -1 +1 @@
1
- {"version":3,"file":"context.mjs","names":[],"sources":["../src/context.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport readline from \"node:readline/promises\";\nimport { CliError, type CliErrorCategory, normalizeCliError } from \"./errors.js\";\n\nexport interface GlobalCliOptions {\n cwd?: string;\n json?: boolean;\n verbose?: boolean;\n interactive?: boolean;\n yes?: boolean;\n}\n\nexport interface CliChoice<TValue> {\n label: string;\n value: TValue;\n description?: string;\n}\n\nexport interface CliResult<TValue = unknown> {\n command?: string;\n summary?: string;\n target?: string;\n data?: TValue;\n nextSteps?: string[];\n}\n\nexport class CliContext {\n readonly cwd: string;\n readonly json: boolean;\n readonly verbose: boolean;\n readonly interactive: boolean;\n readonly yes: boolean;\n\n constructor(options: GlobalCliOptions = {}) {\n this.cwd = path.resolve(options.cwd ?? process.cwd());\n this.json = options.json ?? false;\n this.verbose = options.verbose ?? false;\n this.yes = options.yes ?? false;\n this.interactive =\n options.interactive === false\n ? false\n : process.env.SYNCORE_FORCE_INTERACTIVE === \"1\"\n ? true\n : Boolean(process.stdin.isTTY && process.stdout.isTTY && !this.json);\n }\n\n info(message: string): void {\n if (!this.json) {\n process.stdout.write(`[info] ${message}\\n`);\n }\n }\n\n success(message: string): void {\n if (!this.json) {\n process.stdout.write(`[done] ${message}\\n`);\n }\n }\n\n warn(message: string): void {\n if (!this.json) {\n process.stderr.write(`[warn] ${message}\\n`);\n }\n }\n\n error(message: string): void {\n if (!this.json) {\n process.stderr.write(`[error] ${message}\\n`);\n }\n }\n\n nextStep(message: string): void {\n if (!this.json) {\n process.stdout.write(`[next] ${message}\\n`);\n }\n }\n\n printJson(payload: unknown): void {\n process.stdout.write(`${JSON.stringify(payload, null, 2)}\\n`);\n }\n\n printResult<TValue>(result: CliResult<TValue>): void {\n if (this.json) {\n this.printJson({\n ok: true,\n cwd: this.cwd,\n ...(result.command ? { command: result.command } : {}),\n ...(result.target ? { target: result.target } : {}),\n ...(result.summary ? { summary: result.summary } : {}),\n ...(result.data !== undefined ? { data: result.data } : {}),\n ...(result.nextSteps ? { nextSteps: result.nextSteps } : {})\n });\n return;\n }\n\n if (result.summary) {\n this.success(result.summary);\n }\n if (result.nextSteps) {\n for (const step of result.nextSteps) {\n this.nextStep(step);\n }\n }\n }\n\n fail(\n message: string,\n exitCode = 1,\n details?: unknown,\n options: {\n category?: CliErrorCategory;\n nextSteps?: string[];\n } = {}\n ): never {\n const errorOptions = {\n exitCode,\n details,\n ...(options.category ? { category: options.category } : {}),\n ...(options.nextSteps ? { nextSteps: options.nextSteps } : {})\n };\n throw new CliError(message, errorOptions);\n }\n\n handleError(error: unknown): void {\n const cliError = normalizeCliError(error);\n\n if (this.json) {\n this.printJson({\n ok: false,\n cwd: this.cwd,\n error: {\n category: cliError.category,\n message: cliError.message,\n exitCode: cliError.exitCode,\n ...(cliError.details !== undefined ? { details: cliError.details } : {}),\n ...(cliError.nextSteps ? { nextSteps: cliError.nextSteps } : {})\n }\n });\n } else {\n this.error(cliError.message);\n if (cliError.nextSteps) {\n for (const step of cliError.nextSteps) {\n this.nextStep(step);\n }\n }\n if (this.verbose && cliError.details !== undefined) {\n this.error(JSON.stringify(cliError.details, null, 2));\n }\n }\n\n process.exitCode = cliError.exitCode;\n }\n\n async confirm(message: string, defaultValue = true): Promise<boolean> {\n if (this.yes) {\n return true;\n }\n if (!this.interactive) {\n return false;\n }\n\n const suffix = defaultValue ? \"Y/n\" : \"y/N\";\n const answer = await this.input(`${message} [${suffix}]`, {\n defaultValue: defaultValue ? \"y\" : \"n\"\n });\n const normalized = answer.trim().toLowerCase();\n if (normalized.length === 0) {\n return defaultValue;\n }\n return normalized === \"y\" || normalized === \"yes\";\n }\n\n async input(\n message: string,\n options: {\n defaultValue?: string;\n allowEmpty?: boolean;\n } = {}\n ): Promise<string> {\n if (!this.interactive) {\n this.fail(`Cannot prompt in non-interactive mode: ${message}`);\n }\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout\n });\n\n try {\n const prompt =\n options.defaultValue !== undefined\n ? `${message} (${options.defaultValue}): `\n : `${message}: `;\n const answer = await rl.question(prompt);\n if (answer.length === 0 && options.defaultValue !== undefined) {\n return options.defaultValue;\n }\n if (answer.length === 0 && !options.allowEmpty) {\n this.fail(`A value is required for: ${message}`);\n }\n return answer;\n } finally {\n rl.close();\n }\n }\n\n async select<TValue>(\n message: string,\n choices: CliChoice<TValue>[],\n defaultValue?: TValue\n ): Promise<TValue> {\n if (!this.interactive) {\n this.fail(`Cannot prompt in non-interactive mode: ${message}`);\n }\n if (choices.length === 0) {\n this.fail(`No choices are available for: ${message}`);\n }\n\n this.info(message);\n choices.forEach((choice, index) => {\n const suffix = choice.description ? ` - ${choice.description}` : \"\";\n process.stdout.write(` ${index + 1}. ${choice.label}${suffix}\\n`);\n });\n\n const defaultIndex = defaultValue\n ? Math.max(\n choices.findIndex((choice) => choice.value === defaultValue),\n 0\n )\n : 0;\n const rawValue = await this.input(`Choose 1-${choices.length}`, {\n defaultValue: String(defaultIndex + 1)\n });\n const index = Number.parseInt(rawValue, 10);\n if (Number.isNaN(index) || index < 1 || index > choices.length) {\n this.fail(`Expected a value between 1 and ${choices.length}.`);\n }\n return choices[index - 1]!.value;\n }\n\n async withSpinner<TValue>(\n label: string,\n action: () => Promise<TValue>\n ): Promise<TValue> {\n if (!this.interactive) {\n this.info(label);\n return await action();\n }\n\n const frames = [\"-\", \"\\\\\", \"|\", \"/\"];\n let index = 0;\n process.stderr.write(`[work] ${label}`);\n const timer = setInterval(() => {\n process.stderr.write(`\\r[${frames[index % frames.length]}] ${label}`);\n index += 1;\n }, 80);\n\n try {\n const result = await action();\n clearInterval(timer);\n process.stderr.write(`\\r[done] ${label}\\n`);\n return result;\n } catch (error) {\n clearInterval(timer);\n process.stderr.write(`\\r[fail] ${label}\\n`);\n throw error;\n }\n }\n}\n\nexport async function openTarget(target: string): Promise<boolean> {\n const command =\n process.platform === \"win32\"\n ? {\n file: \"cmd\",\n args: [\"/c\", \"start\", \"\", target]\n }\n : process.platform === \"darwin\"\n ? {\n file: \"open\",\n args: [target]\n }\n : {\n file: \"xdg-open\",\n args: [target]\n };\n\n return await new Promise((resolve) => {\n const child = spawn(command.file, command.args, {\n detached: true,\n stdio: \"ignore\"\n });\n child.once(\"error\", () => resolve(false));\n child.once(\"spawn\", () => {\n child.unref();\n resolve(true);\n });\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"context.mjs","names":[],"sources":["../src/context.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport readline from \"node:readline/promises\";\nimport { CliError, type CliErrorCategory, normalizeCliError } from \"./errors.js\";\n\nconst ANSI = {\n reset: \"\\u001b[0m\",\n bold: \"\\u001b[1m\",\n yellow: \"\\u001b[33m\",\n cyan: \"\\u001b[36m\",\n green: \"\\u001b[32m\",\n red: \"\\u001b[31m\",\n magenta: \"\\u001b[35m\",\n dim: \"\\u001b[2m\"\n} as const;\n\nfunction supportsColor(stream: NodeJS.WriteStream): boolean {\n return Boolean(stream.isTTY) && process.env.NO_COLOR !== \"1\" && process.env.TERM !== \"dumb\";\n}\n\nfunction formatPrefix(\n stream: NodeJS.WriteStream,\n level: \"info\" | \"done\" | \"warn\" | \"error\" | \"next\" | \"work\" | \"fail\"\n): string {\n const plain = `[${level}]`;\n if (!supportsColor(stream)) {\n return plain;\n }\n const levelColor =\n level === \"info\"\n ? ANSI.cyan\n : level === \"done\"\n ? ANSI.green\n : level === \"warn\"\n ? ANSI.yellow\n : level === \"error\" || level === \"fail\"\n ? ANSI.red\n : level === \"next\"\n ? ANSI.magenta\n : ANSI.dim;\n return `${levelColor}[${level}]${ANSI.reset}`;\n}\n\nexport interface GlobalCliOptions {\n cwd?: string;\n json?: boolean;\n verbose?: boolean;\n interactive?: boolean;\n yes?: boolean;\n}\n\nexport interface CliChoice<TValue> {\n label: string;\n value: TValue;\n description?: string;\n}\n\nexport interface CliResult<TValue = unknown> {\n command?: string;\n summary?: string;\n target?: string;\n data?: TValue;\n nextSteps?: string[];\n}\n\nexport class CliContext {\n readonly cwd: string;\n readonly json: boolean;\n readonly verbose: boolean;\n readonly interactive: boolean;\n readonly yes: boolean;\n\n constructor(options: GlobalCliOptions = {}) {\n this.cwd = path.resolve(options.cwd ?? process.cwd());\n this.json = options.json ?? false;\n this.verbose = options.verbose ?? false;\n this.yes = options.yes ?? false;\n this.interactive =\n options.interactive === false\n ? false\n : process.env.SYNCORE_FORCE_INTERACTIVE === \"1\"\n ? true\n : Boolean(process.stdin.isTTY && process.stdout.isTTY && !this.json);\n }\n\n info(message: string): void {\n if (!this.json) {\n process.stdout.write(`${formatPrefix(process.stdout, \"info\")} ${message}\\n`);\n }\n }\n\n success(message: string): void {\n if (!this.json) {\n process.stdout.write(`${formatPrefix(process.stdout, \"done\")} ${message}\\n`);\n }\n }\n\n warn(message: string): void {\n if (!this.json) {\n process.stderr.write(`${formatPrefix(process.stderr, \"warn\")} ${message}\\n`);\n }\n }\n\n error(message: string): void {\n if (!this.json) {\n process.stderr.write(`${formatPrefix(process.stderr, \"error\")} ${message}\\n`);\n }\n }\n\n nextStep(message: string): void {\n if (!this.json) {\n process.stdout.write(`${formatPrefix(process.stdout, \"next\")} ${message}\\n`);\n }\n }\n\n printJson(payload: unknown): void {\n process.stdout.write(`${JSON.stringify(payload, null, 2)}\\n`);\n }\n\n printResult<TValue>(result: CliResult<TValue>): void {\n if (this.json) {\n this.printJson({\n ok: true,\n cwd: this.cwd,\n ...(result.command ? { command: result.command } : {}),\n ...(result.target ? { target: result.target } : {}),\n ...(result.summary ? { summary: result.summary } : {}),\n ...(result.data !== undefined ? { data: result.data } : {}),\n ...(result.nextSteps ? { nextSteps: result.nextSteps } : {})\n });\n return;\n }\n\n if (result.summary) {\n this.success(result.summary);\n }\n if (result.nextSteps) {\n for (const step of result.nextSteps) {\n this.nextStep(step);\n }\n }\n }\n\n fail(\n message: string,\n exitCode = 1,\n details?: unknown,\n options: {\n category?: CliErrorCategory;\n nextSteps?: string[];\n } = {}\n ): never {\n const errorOptions = {\n exitCode,\n details,\n ...(options.category ? { category: options.category } : {}),\n ...(options.nextSteps ? { nextSteps: options.nextSteps } : {})\n };\n throw new CliError(message, errorOptions);\n }\n\n handleError(error: unknown): void {\n const cliError = normalizeCliError(error);\n\n if (this.json) {\n this.printJson({\n ok: false,\n cwd: this.cwd,\n error: {\n category: cliError.category,\n message: cliError.message,\n exitCode: cliError.exitCode,\n ...(cliError.details !== undefined ? { details: cliError.details } : {}),\n ...(cliError.nextSteps ? { nextSteps: cliError.nextSteps } : {})\n }\n });\n } else {\n this.error(cliError.message);\n if (cliError.nextSteps) {\n for (const step of cliError.nextSteps) {\n this.nextStep(step);\n }\n }\n if (this.verbose && cliError.details !== undefined) {\n this.error(JSON.stringify(cliError.details, null, 2));\n }\n }\n\n process.exitCode = cliError.exitCode;\n }\n\n async confirm(message: string, defaultValue = true): Promise<boolean> {\n if (this.yes) {\n return true;\n }\n if (!this.interactive) {\n return false;\n }\n\n const suffix = defaultValue ? \"Y/n\" : \"y/N\";\n const answer = await this.input(`${message} [${suffix}]`, {\n defaultValue: defaultValue ? \"y\" : \"n\"\n });\n const normalized = answer.trim().toLowerCase();\n if (normalized.length === 0) {\n return defaultValue;\n }\n return normalized === \"y\" || normalized === \"yes\";\n }\n\n async input(\n message: string,\n options: {\n defaultValue?: string;\n allowEmpty?: boolean;\n } = {}\n ): Promise<string> {\n if (!this.interactive) {\n this.fail(`Cannot prompt in non-interactive mode: ${message}`);\n }\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout\n });\n\n try {\n const prompt =\n options.defaultValue !== undefined\n ? `${message} (${options.defaultValue}): `\n : `${message}: `;\n const answer = await rl.question(prompt);\n if (answer.length === 0 && options.defaultValue !== undefined) {\n return options.defaultValue;\n }\n if (answer.length === 0 && !options.allowEmpty) {\n this.fail(`A value is required for: ${message}`);\n }\n return answer;\n } finally {\n rl.close();\n }\n }\n\n async select<TValue>(\n message: string,\n choices: CliChoice<TValue>[],\n defaultValue?: TValue\n ): Promise<TValue> {\n if (!this.interactive) {\n this.fail(`Cannot prompt in non-interactive mode: ${message}`);\n }\n if (choices.length === 0) {\n this.fail(`No choices are available for: ${message}`);\n }\n\n this.info(message);\n choices.forEach((choice, index) => {\n const suffix = choice.description ? ` - ${choice.description}` : \"\";\n process.stdout.write(` ${index + 1}. ${choice.label}${suffix}\\n`);\n });\n\n const defaultIndex = defaultValue\n ? Math.max(\n choices.findIndex((choice) => choice.value === defaultValue),\n 0\n )\n : 0;\n const rawValue = await this.input(`Choose 1-${choices.length}`, {\n defaultValue: String(defaultIndex + 1)\n });\n const index = Number.parseInt(rawValue, 10);\n if (Number.isNaN(index) || index < 1 || index > choices.length) {\n this.fail(`Expected a value between 1 and ${choices.length}.`);\n }\n return choices[index - 1]!.value;\n }\n\n async withSpinner<TValue>(\n label: string,\n action: () => Promise<TValue>\n ): Promise<TValue> {\n if (!this.interactive) {\n this.info(label);\n return await action();\n }\n\n const frames = [\"-\", \"\\\\\", \"|\", \"/\"];\n let index = 0;\n process.stderr.write(`${formatPrefix(process.stderr, \"work\")} ${label}`);\n const timer = setInterval(() => {\n process.stderr.write(\n `\\r${formatPrefix(process.stderr, \"work\")} ${frames[index % frames.length]} ${label}`\n );\n index += 1;\n }, 80);\n\n try {\n const result = await action();\n clearInterval(timer);\n process.stderr.write(`\\r${formatPrefix(process.stderr, \"done\")} ${label}\\n`);\n return result;\n } catch (error) {\n clearInterval(timer);\n process.stderr.write(`\\r${formatPrefix(process.stderr, \"fail\")} ${label}\\n`);\n throw error;\n }\n }\n}\n\nexport async function openTarget(target: string): Promise<boolean> {\n const command =\n process.platform === \"win32\"\n ? {\n file: \"cmd\",\n args: [\"/c\", \"start\", \"\", target]\n }\n : process.platform === \"darwin\"\n ? {\n file: \"open\",\n args: [target]\n }\n : {\n file: \"xdg-open\",\n args: [target]\n };\n\n return await new Promise((resolve) => {\n const child = spawn(command.file, command.args, {\n detached: true,\n stdio: \"ignore\"\n });\n child.once(\"error\", () => resolve(false));\n child.once(\"spawn\", () => {\n child.unref();\n resolve(true);\n });\n });\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dev-session.mjs","names":[],"sources":["../src/dev-session.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\n\nimport type { CliContext } from \"./context.js\";\n\ntype ConsoleMethod = \"log\" | \"warn\" | \"error\";\n\nexport async function withConsoleCapture<TValue>(\n onMessage: (method: ConsoleMethod, message: string) => void,\n action: () => Promise<TValue>\n): Promise<TValue> {\n const originalLog = console.log;\n const originalWarn = console.warn;\n const originalError = console.error;\n\n const capture =\n (method: ConsoleMethod) =>\n (...args: unknown[]) => {\n const message = args\n .map((value) => (typeof value === \"string\" ? value : String(value)))\n .join(\" \")\n .trim();\n if (message.length > 0) {\n onMessage(method, message);\n }\n };\n\n console.log = capture(\"log\");\n console.warn = capture(\"warn\");\n console.error = capture(\"error\");\n\n try {\n return await action();\n } finally {\n console.log = originalLog;\n console.warn = originalWarn;\n console.error = originalError;\n }\n}\n\nexport function printDevSessionIntro(context: CliContext): void {\n context.info(\"Starting Syncore local dev session...\");\n}\n\nexport function printCompactDevPhase(context: CliContext, label: string): void {\n context.info(label);\n}\n\nexport async function runShellCommand(\n context: CliContext,\n command: string\n): Promise<void> {\n context.info(`Starting host command after Syncore bootstrap: ${command}`);\n await new Promise<void>((resolve, reject) => {\n const child = spawn(command, {\n cwd: context.cwd,\n shell: true,\n stdio: \"inherit\"\n });\n child.once(\"error\", reject);\n child.once(\"exit\", (code) => {\n if ((code ?? 1) !== 0) {\n reject(new Error(`Shell command failed with exit code ${code ?? 1}.`));\n return;\n }\n resolve();\n });\n });\n}\n\n"],"mappings":";;AAMA,eAAsB,mBACpB,WACA,QACiB;CACjB,MAAM,cAAc,QAAQ;CAC5B,MAAM,eAAe,QAAQ;CAC7B,MAAM,gBAAgB,QAAQ;CAE9B,MAAM,WACH,YACA,GAAG,SAAoB;EACtB,MAAM,UAAU,KACb,KAAK,UAAW,OAAO,UAAU,WAAW,QAAQ,OAAO,MAAM,CAAE,CACnE,KAAK,IAAI,CACT,MAAM;AACT,MAAI,QAAQ,SAAS,EACnB,WAAU,QAAQ,QAAQ;;AAIhC,SAAQ,MAAM,QAAQ,MAAM;AAC5B,SAAQ,OAAO,QAAQ,OAAO;AAC9B,SAAQ,QAAQ,QAAQ,QAAQ;AAEhC,KAAI;AACF,SAAO,MAAM,QAAQ;WACb;AACR,UAAQ,MAAM;AACd,UAAQ,OAAO;AACf,UAAQ,QAAQ;;;AAIpB,SAAgB,qBAAqB,SAA2B;AAC9D,SAAQ,KAAK,wCAAwC;;AAGvD,SAAgB,qBAAqB,SAAqB,OAAqB;AAC7E,SAAQ,KAAK,MAAM;;AAGrB,eAAsB,gBACpB,SACA,SACe;AACf,SAAQ,KAAK,kDAAkD,UAAU;AACzE,OAAM,IAAI,SAAe,SAAS,WAAW;EAC3C,MAAM,QAAQ,MAAM,SAAS;GAC3B,KAAK,QAAQ;GACb,OAAO;GACP,OAAO;GACR,CAAC;AACF,QAAM,KAAK,SAAS,OAAO;AAC3B,QAAM,KAAK,SAAS,SAAS;AAC3B,QAAK,QAAQ,OAAO,GAAG;AACrB,2BAAO,IAAI,MAAM,uCAAuC,QAAQ,EAAE,GAAG,CAAC;AACtE;;AAEF,YAAS;IACT;GACF"}
1
+ {"version":3,"file":"dev-session.mjs","names":[],"sources":["../src/dev-session.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\n\nimport type { CliContext } from \"./context.js\";\n\ntype ConsoleMethod = \"log\" | \"warn\" | \"error\";\n\nexport async function withConsoleCapture<TValue>(\n onMessage: (method: ConsoleMethod, message: string) => void,\n action: () => Promise<TValue>\n): Promise<TValue> {\n const originalLog = console.log;\n const originalWarn = console.warn;\n const originalError = console.error;\n\n const capture =\n (method: ConsoleMethod) =>\n (...args: unknown[]) => {\n const message = args\n .map((value) => (typeof value === \"string\" ? value : String(value)))\n .join(\" \")\n .trim();\n if (message.length > 0) {\n onMessage(method, message);\n }\n };\n\n console.log = capture(\"log\");\n console.warn = capture(\"warn\");\n console.error = capture(\"error\");\n\n try {\n return await action();\n } finally {\n console.log = originalLog;\n console.warn = originalWarn;\n console.error = originalError;\n }\n}\n\nexport function printDevSessionIntro(context: CliContext): void {\n context.info(\"Starting Syncore local dev session...\");\n}\n\nexport function printCompactDevPhase(context: CliContext, label: string): void {\n context.info(label);\n}\n\nexport async function runShellCommand(\n context: CliContext,\n command: string\n): Promise<void> {\n context.info(`Starting host command after Syncore bootstrap: ${command}`);\n await new Promise<void>((resolve, reject) => {\n const child = spawn(command, {\n cwd: context.cwd,\n shell: true,\n stdio: \"inherit\"\n });\n child.once(\"error\", reject);\n child.once(\"exit\", (code) => {\n if ((code ?? 1) !== 0) {\n reject(new Error(`Shell command failed with exit code ${code ?? 1}.`));\n return;\n }\n resolve();\n });\n });\n}\n\n"],"mappings":";;AAMA,eAAsB,mBACpB,WACA,QACiB;CACjB,MAAM,cAAc,QAAQ;CAC5B,MAAM,eAAe,QAAQ;CAC7B,MAAM,gBAAgB,QAAQ;CAE9B,MAAM,WACH,YACA,GAAG,SAAoB;EACtB,MAAM,UAAU,KACb,KAAK,UAAW,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK,CAAE,EAClE,KAAK,GAAG,EACR,KAAK;EACR,IAAI,QAAQ,SAAS,GACnB,UAAU,QAAQ,OAAO;CAE7B;CAEF,QAAQ,MAAM,QAAQ,KAAK;CAC3B,QAAQ,OAAO,QAAQ,MAAM;CAC7B,QAAQ,QAAQ,QAAQ,OAAO;CAE/B,IAAI;EACF,OAAO,MAAM,OAAO;CACtB,UAAU;EACR,QAAQ,MAAM;EACd,QAAQ,OAAO;EACf,QAAQ,QAAQ;CAClB;AACF;AAEA,SAAgB,qBAAqB,SAA2B;CAC9D,QAAQ,KAAK,uCAAuC;AACtD;AAEA,SAAgB,qBAAqB,SAAqB,OAAqB;CAC7E,QAAQ,KAAK,KAAK;AACpB;AAEA,eAAsB,gBACpB,SACA,SACe;CACf,QAAQ,KAAK,kDAAkD,SAAS;CACxE,MAAM,IAAI,SAAe,SAAS,WAAW;EAC3C,MAAM,QAAQ,MAAM,SAAS;GAC3B,KAAK,QAAQ;GACb,OAAO;GACP,OAAO;EACT,CAAC;EACD,MAAM,KAAK,SAAS,MAAM;EAC1B,MAAM,KAAK,SAAS,SAAS;GAC3B,KAAK,QAAQ,OAAO,GAAG;IACrB,uBAAO,IAAI,MAAM,uCAAuC,QAAQ,EAAE,EAAE,CAAC;IACrE;GACF;GACA,QAAQ;EACV,CAAC;CACH,CAAC;AACH"}