@goondan/cli 0.0.3-alpha1

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 (124) hide show
  1. package/dist/bin.d.ts +2 -0
  2. package/dist/bin.js +148 -0
  3. package/dist/bin.js.map +1 -0
  4. package/dist/commands/context.d.ts +8 -0
  5. package/dist/commands/context.js +2 -0
  6. package/dist/commands/context.js.map +1 -0
  7. package/dist/commands/doctor.d.ts +12 -0
  8. package/dist/commands/doctor.js +7 -0
  9. package/dist/commands/doctor.js.map +1 -0
  10. package/dist/commands/init.d.ts +12 -0
  11. package/dist/commands/init.js +29 -0
  12. package/dist/commands/init.js.map +1 -0
  13. package/dist/commands/instance-interactive.d.ts +19 -0
  14. package/dist/commands/instance-interactive.js +259 -0
  15. package/dist/commands/instance-interactive.js.map +1 -0
  16. package/dist/commands/instance.d.ts +30 -0
  17. package/dist/commands/instance.js +36 -0
  18. package/dist/commands/instance.js.map +1 -0
  19. package/dist/commands/logs.d.ts +12 -0
  20. package/dist/commands/logs.js +23 -0
  21. package/dist/commands/logs.js.map +1 -0
  22. package/dist/commands/package.d.ts +30 -0
  23. package/dist/commands/package.js +51 -0
  24. package/dist/commands/package.js.map +1 -0
  25. package/dist/commands/restart.d.ts +12 -0
  26. package/dist/commands/restart.js +14 -0
  27. package/dist/commands/restart.js.map +1 -0
  28. package/dist/commands/run.d.ts +12 -0
  29. package/dist/commands/run.js +33 -0
  30. package/dist/commands/run.js.map +1 -0
  31. package/dist/commands/validate.d.ts +12 -0
  32. package/dist/commands/validate.js +22 -0
  33. package/dist/commands/validate.js.map +1 -0
  34. package/dist/constants.d.ts +2 -0
  35. package/dist/constants.js +3 -0
  36. package/dist/constants.js.map +1 -0
  37. package/dist/errors.d.ts +22 -0
  38. package/dist/errors.js +93 -0
  39. package/dist/errors.js.map +1 -0
  40. package/dist/formatter.d.ts +7 -0
  41. package/dist/formatter.js +141 -0
  42. package/dist/formatter.js.map +1 -0
  43. package/dist/help.d.ts +1 -0
  44. package/dist/help.js +25 -0
  45. package/dist/help.js.map +1 -0
  46. package/dist/index.d.ts +6 -0
  47. package/dist/index.js +9 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/options.d.ts +13 -0
  50. package/dist/options.js +57 -0
  51. package/dist/options.js.map +1 -0
  52. package/dist/parser.d.ts +85 -0
  53. package/dist/parser.js +123 -0
  54. package/dist/parser.js.map +1 -0
  55. package/dist/router.d.ts +2 -0
  56. package/dist/router.js +130 -0
  57. package/dist/router.js.map +1 -0
  58. package/dist/services/config.d.ts +13 -0
  59. package/dist/services/config.js +141 -0
  60. package/dist/services/config.js.map +1 -0
  61. package/dist/services/conversation-state.d.ts +20 -0
  62. package/dist/services/conversation-state.js +198 -0
  63. package/dist/services/conversation-state.js.map +1 -0
  64. package/dist/services/defaults.d.ts +2 -0
  65. package/dist/services/defaults.js +92 -0
  66. package/dist/services/defaults.js.map +1 -0
  67. package/dist/services/doctor.d.ts +8 -0
  68. package/dist/services/doctor.js +160 -0
  69. package/dist/services/doctor.js.map +1 -0
  70. package/dist/services/env.d.ts +6 -0
  71. package/dist/services/env.js +76 -0
  72. package/dist/services/env.js.map +1 -0
  73. package/dist/services/init.d.ts +4 -0
  74. package/dist/services/init.js +174 -0
  75. package/dist/services/init.js.map +1 -0
  76. package/dist/services/instances.d.ts +7 -0
  77. package/dist/services/instances.js +393 -0
  78. package/dist/services/instances.js.map +1 -0
  79. package/dist/services/logs.d.ts +6 -0
  80. package/dist/services/logs.js +131 -0
  81. package/dist/services/logs.js.map +1 -0
  82. package/dist/services/package.d.ts +11 -0
  83. package/dist/services/package.js +630 -0
  84. package/dist/services/package.js.map +1 -0
  85. package/dist/services/path.d.ts +5 -0
  86. package/dist/services/path.js +25 -0
  87. package/dist/services/path.js.map +1 -0
  88. package/dist/services/registry.d.ts +12 -0
  89. package/dist/services/registry.js +219 -0
  90. package/dist/services/registry.js.map +1 -0
  91. package/dist/services/runtime-restart-signal.d.ts +5 -0
  92. package/dist/services/runtime-restart-signal.js +18 -0
  93. package/dist/services/runtime-restart-signal.js.map +1 -0
  94. package/dist/services/runtime-restart.d.ts +11 -0
  95. package/dist/services/runtime-restart.js +151 -0
  96. package/dist/services/runtime-restart.js.map +1 -0
  97. package/dist/services/runtime-routing.d.ts +40 -0
  98. package/dist/services/runtime-routing.js +154 -0
  99. package/dist/services/runtime-routing.js.map +1 -0
  100. package/dist/services/runtime-runner-connector-child.d.ts +1 -0
  101. package/dist/services/runtime-runner-connector-child.js +188 -0
  102. package/dist/services/runtime-runner-connector-child.js.map +1 -0
  103. package/dist/services/runtime-runner-protocol.d.ts +12 -0
  104. package/dist/services/runtime-runner-protocol.js +14 -0
  105. package/dist/services/runtime-runner-protocol.js.map +1 -0
  106. package/dist/services/runtime-runner.d.ts +1 -0
  107. package/dist/services/runtime-runner.js +2595 -0
  108. package/dist/services/runtime-runner.js.map +1 -0
  109. package/dist/services/runtime.d.ts +10 -0
  110. package/dist/services/runtime.js +569 -0
  111. package/dist/services/runtime.js.map +1 -0
  112. package/dist/services/turn-policy.d.ts +7 -0
  113. package/dist/services/turn-policy.js +13 -0
  114. package/dist/services/turn-policy.js.map +1 -0
  115. package/dist/services/validator.d.ts +6 -0
  116. package/dist/services/validator.js +126 -0
  117. package/dist/services/validator.js.map +1 -0
  118. package/dist/types.d.ts +243 -0
  119. package/dist/types.js +2 -0
  120. package/dist/types.js.map +1 -0
  121. package/dist/utils.d.ts +7 -0
  122. package/dist/utils.js +72 -0
  123. package/dist/utils.js.map +1 -0
  124. package/package.json +30 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAe;IAClE,MAAM,MAAM,GAAc,GAAG,CAAC,MAAM,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC;IAEhC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;QACzC,OAAO,EAAE,WAAW;QACpB,MAAM;QACN,KAAK;QACL,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;KAC1C,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,WAAW,YAAY,MAAM,CAAC,OAAO,WAAW,MAAM,UAAU,KAAK,EAAE,CAAC,CAAC;IAC7G,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC;QACvD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { CliDependencies, ExitCode } from '../types.js';
2
+ import type { GdnArgs, GdnCommand } from '../parser.js';
3
+ type PackageAddCommand = Extract<GdnCommand, {
4
+ action: 'package.add';
5
+ }>;
6
+ type PackageInstallCommand = Extract<GdnCommand, {
7
+ action: 'package.install';
8
+ }>;
9
+ type PackagePublishCommand = Extract<GdnCommand, {
10
+ action: 'package.publish';
11
+ }>;
12
+ interface PackageAddContext {
13
+ cmd: PackageAddCommand;
14
+ deps: CliDependencies;
15
+ globals: Omit<GdnArgs, 'command'>;
16
+ }
17
+ interface PackageInstallContext {
18
+ cmd: PackageInstallCommand;
19
+ deps: CliDependencies;
20
+ globals: Omit<GdnArgs, 'command'>;
21
+ }
22
+ interface PackagePublishContext {
23
+ cmd: PackagePublishCommand;
24
+ deps: CliDependencies;
25
+ globals: Omit<GdnArgs, 'command'>;
26
+ }
27
+ export declare function handlePackageAdd({ cmd, deps, globals }: PackageAddContext): Promise<ExitCode>;
28
+ export declare function handlePackageInstall({ cmd, deps, globals }: PackageInstallContext): Promise<ExitCode>;
29
+ export declare function handlePackagePublish({ cmd, deps, globals }: PackagePublishContext): Promise<ExitCode>;
30
+ export {};
@@ -0,0 +1,51 @@
1
+ export async function handlePackageAdd({ cmd, deps, globals }) {
2
+ const bundlePath = globals.config;
3
+ const registry = cmd.registry ?? undefined;
4
+ const result = await deps.packages.addDependency({
5
+ ref: cmd.ref,
6
+ dev: cmd.dev ?? false,
7
+ exact: cmd.exact ?? false,
8
+ registry,
9
+ bundlePath,
10
+ stateRoot: globals.stateRoot ?? undefined,
11
+ });
12
+ const installResult = await deps.packages.installDependencies({
13
+ frozenLockfile: false,
14
+ bundlePath,
15
+ registry,
16
+ stateRoot: globals.stateRoot ?? undefined,
17
+ });
18
+ deps.io.out(`Dependency ${result.added ? 'added' : 'already exists'}: ${result.ref}` +
19
+ `${result.resolvedVersion ? ` (${result.resolvedVersion})` : ''}`);
20
+ deps.io.out(`Manifest: ${result.manifestPath}`);
21
+ deps.io.out(`Installed dependencies: ${installResult.installed}`);
22
+ return 0;
23
+ }
24
+ export async function handlePackageInstall({ cmd, deps, globals }) {
25
+ const result = await deps.packages.installDependencies({
26
+ frozenLockfile: cmd.frozenLockfile ?? false,
27
+ bundlePath: globals.config,
28
+ registry: cmd.registry ?? undefined,
29
+ stateRoot: globals.stateRoot ?? undefined,
30
+ });
31
+ deps.io.out(`Installed dependencies: ${result.installed}`);
32
+ if (result.lockfilePath) {
33
+ deps.io.out(`Lockfile: ${result.lockfilePath}`);
34
+ }
35
+ return 0;
36
+ }
37
+ export async function handlePackagePublish({ cmd, deps, globals }) {
38
+ const publishPath = cmd.publishPath ?? '.';
39
+ const result = await deps.packages.publishPackage({
40
+ path: publishPath,
41
+ tag: cmd.tag,
42
+ access: cmd.access,
43
+ dryRun: cmd.dryRun ?? false,
44
+ registry: cmd.registry ?? undefined,
45
+ stateRoot: globals.stateRoot ?? undefined,
46
+ });
47
+ deps.io.out(`${result.dryRun ? 'Dry-run publish checked' : 'Published'} ${result.packageName}@${result.version}` +
48
+ ` tag=${result.tag} registry=${result.registryUrl}`);
49
+ return 0;
50
+ }
51
+ //# sourceMappingURL=package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.js","sourceRoot":"","sources":["../../src/commands/package.ts"],"names":[],"mappings":"AAyBA,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAqB;IAC9E,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC;IAE3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,KAAK;QACrB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,KAAK;QACzB,QAAQ;QACR,UAAU;QACV,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;KAC1C,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC5D,cAAc,EAAE,KAAK;QACrB,UAAU;QACV,QAAQ;QACR,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;KAC1C,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,cAAc,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,KAAK,MAAM,CAAC,GAAG,EAAE;QACtE,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACpE,CAAC;IACF,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,2BAA2B,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAyB;IACtF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACrD,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,KAAK;QAC3C,UAAU,EAAE,OAAO,CAAC,MAAM;QAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,SAAS;QACnC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;KAC1C,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAyB;IACtF,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC;IAE3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QAChD,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,KAAK;QAC3B,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,SAAS;QACnC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;KAC1C,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,OAAO,EAAE;QAClG,QAAQ,MAAM,CAAC,GAAG,aAAa,MAAM,CAAC,WAAW,EAAE,CACtD,CAAC;IACF,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { CliDependencies, ExitCode } from '../types.js';
2
+ import type { GdnArgs, GdnCommand } from '../parser.js';
3
+ type RestartCommand = Extract<GdnCommand, {
4
+ action: 'restart';
5
+ }>;
6
+ interface RestartContext {
7
+ cmd: RestartCommand;
8
+ deps: CliDependencies;
9
+ globals: Omit<GdnArgs, 'command'>;
10
+ }
11
+ export declare function handleRestart({ cmd, deps, globals }: RestartContext): Promise<ExitCode>;
12
+ export {};
@@ -0,0 +1,14 @@
1
+ export async function handleRestart({ cmd, deps, globals }) {
2
+ const result = await deps.runtime.restart({
3
+ agent: cmd.agent ?? undefined,
4
+ fresh: cmd.fresh ?? false,
5
+ stateRoot: globals.stateRoot ?? undefined,
6
+ });
7
+ if (result.instanceKey && typeof result.pid === 'number') {
8
+ deps.io.out(`Orchestrator restarted: ${result.instanceKey} (pid: ${result.pid})`);
9
+ return 0;
10
+ }
11
+ deps.io.out(`Restart requested for: ${result.restarted.join(', ')}`);
12
+ return 0;
13
+ }
14
+ //# sourceMappingURL=restart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAkB;IACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QACxC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;QAC7B,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,KAAK;QACzB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;KAC1C,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,WAAW,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QACzD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,WAAW,UAAU,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;QAClF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { CliDependencies, ExitCode } from '../types.js';
2
+ import type { GdnArgs, GdnCommand } from '../parser.js';
3
+ type RunCommand = Extract<GdnCommand, {
4
+ action: 'run';
5
+ }>;
6
+ interface RunContext {
7
+ cmd: RunCommand;
8
+ deps: CliDependencies;
9
+ globals: Omit<GdnArgs, 'command'>;
10
+ }
11
+ export declare function handleRun({ cmd, deps, globals }: RunContext): Promise<ExitCode>;
12
+ export {};
@@ -0,0 +1,33 @@
1
+ import { resolveBundlePath } from '../utils.js';
2
+ export async function handleRun({ cmd, deps, globals }) {
3
+ const bundleInput = cmd.bundlePath ?? globals.config;
4
+ const bundlePath = await resolveBundlePath(deps.cwd, bundleInput);
5
+ const request = {
6
+ bundlePath,
7
+ swarm: cmd.swarm ?? undefined,
8
+ instanceKey: cmd.instanceKey ?? undefined,
9
+ watch: cmd.watch ?? false,
10
+ foreground: cmd.foreground ?? false,
11
+ interactive: cmd.interactive ?? false,
12
+ input: cmd.input ?? undefined,
13
+ inputFile: cmd.inputFile ?? undefined,
14
+ noInstall: cmd.noInstall ?? false,
15
+ envFile: cmd.envFile ?? undefined,
16
+ stateRoot: globals.stateRoot ?? undefined,
17
+ };
18
+ const result = await deps.runtime.startOrchestrator(request);
19
+ deps.io.out(`Orchestrator started (instanceKey=${result.instanceKey}${result.pid ? `, pid=${result.pid}` : ''})`);
20
+ if (request.foreground) {
21
+ deps.io.out('foreground mode: Ctrl+C로 종료하세요.');
22
+ if (result.completion) {
23
+ return await result.completion;
24
+ }
25
+ return 0;
26
+ }
27
+ if (result.pid) {
28
+ deps.io.out(`check: ps -p ${result.pid} -o pid,ppid,stat,etime,command`);
29
+ }
30
+ deps.io.out(`logs: gdn logs --instance-key ${result.instanceKey}`);
31
+ return 0;
32
+ }
33
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAUhD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAc;IAChE,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IACrD,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAElE,MAAM,OAAO,GAAwB;QACnC,UAAU;QACV,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;QAC7B,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;QACzC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,KAAK;QACzB,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,KAAK;QACnC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,KAAK;QACrC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;QAC7B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;QACrC,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,KAAK;QACjC,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,SAAS;QACjC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;KAC1C,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,qCAAqC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClH,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO,MAAM,MAAM,CAAC,UAAU,CAAC;QACjC,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,GAAG,iCAAiC,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,iCAAiC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { CliDependencies, ExitCode } from '../types.js';
2
+ import type { GdnArgs, GdnCommand } from '../parser.js';
3
+ type ValidateCommand = Extract<GdnCommand, {
4
+ action: 'validate';
5
+ }>;
6
+ interface ValidateContext {
7
+ cmd: ValidateCommand;
8
+ deps: CliDependencies;
9
+ globals: Omit<GdnArgs, 'command'>;
10
+ }
11
+ export declare function handleValidate({ cmd, deps, globals }: ValidateContext): Promise<ExitCode>;
12
+ export {};
@@ -0,0 +1,22 @@
1
+ import { formatValidationResult } from '../formatter.js';
2
+ import { validateError } from '../errors.js';
3
+ export async function handleValidate({ cmd, deps, globals }) {
4
+ const target = cmd.target ?? '.';
5
+ const strict = cmd.strict ?? false;
6
+ const fix = cmd.fix ?? false;
7
+ const format = cmd.format;
8
+ const result = await deps.validator.validate(target, strict, fix);
9
+ deps.io.out(formatValidationResult(result, format, target));
10
+ if (!result.valid) {
11
+ throw validateError('Bundle 검증이 실패했습니다.', '출력된 오류 코드를 기준으로 구성을 수정하세요.');
12
+ }
13
+ if (strict && result.warnings.length > 0) {
14
+ throw validateError('strict 모드에서 경고가 발견되었습니다.', '경고를 모두 해결하거나 --strict 옵션을 제거하세요.');
15
+ }
16
+ const isJson = globals.json ?? false;
17
+ if (isJson && format !== 'json') {
18
+ deps.io.out('Tip: --json 플래그와 함께 --format json을 사용하면 기계 처리에 적합합니다.');
19
+ }
20
+ return 0;
21
+ }
22
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAY7C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAmB;IAC1E,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC;IACjC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;IACnC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC;IAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAE1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAElE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAE5D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,aAAa,CAAC,oBAAoB,EAAE,4BAA4B,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,aAAa,CAAC,0BAA0B,EAAE,kCAAkC,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;IACrC,IAAI,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAChC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const DEFAULT_BUNDLE_FILE = "goondan.yaml";
2
+ export declare const DEFAULT_REGISTRY_URL = "https://goondan-registry.yechanny.workers.dev";
@@ -0,0 +1,3 @@
1
+ export const DEFAULT_BUNDLE_FILE = 'goondan.yaml';
2
+ export const DEFAULT_REGISTRY_URL = 'https://goondan-registry.yechanny.workers.dev';
3
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAClD,MAAM,CAAC,MAAM,oBAAoB,GAAG,+CAA+C,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { ExitCode } from './types.js';
2
+ export interface StructuredError {
3
+ code: string;
4
+ message: string;
5
+ suggestion?: string;
6
+ helpUrl?: string;
7
+ exitCode: ExitCode;
8
+ }
9
+ export declare class CliError extends Error implements StructuredError {
10
+ code: string;
11
+ suggestion?: string;
12
+ helpUrl?: string;
13
+ exitCode: ExitCode;
14
+ constructor(error: StructuredError);
15
+ }
16
+ export declare function isCliError(value: unknown): value is CliError;
17
+ export declare function toCliError(error: unknown): CliError;
18
+ export declare function usageError(message: string, suggestion?: string): CliError;
19
+ export declare function configError(message: string, suggestion?: string): CliError;
20
+ export declare function validateError(message: string, suggestion?: string): CliError;
21
+ export declare function networkError(message: string, suggestion?: string): CliError;
22
+ export declare function authError(message: string, suggestion?: string): CliError;
package/dist/errors.js ADDED
@@ -0,0 +1,93 @@
1
+ export class CliError extends Error {
2
+ code;
3
+ suggestion;
4
+ helpUrl;
5
+ exitCode;
6
+ constructor(error) {
7
+ super(error.message);
8
+ this.name = 'CliError';
9
+ this.code = error.code;
10
+ this.suggestion = error.suggestion;
11
+ this.helpUrl = error.helpUrl;
12
+ this.exitCode = error.exitCode;
13
+ }
14
+ }
15
+ function isObjectRecord(value) {
16
+ return typeof value === 'object' && value !== null;
17
+ }
18
+ export function isCliError(value) {
19
+ if (!isObjectRecord(value)) {
20
+ return false;
21
+ }
22
+ const code = value['code'];
23
+ const exitCode = value['exitCode'];
24
+ const name = value['name'];
25
+ return typeof code === 'string' && typeof exitCode === 'number' && name === 'CliError';
26
+ }
27
+ export function toCliError(error) {
28
+ if (isCliError(error)) {
29
+ return error;
30
+ }
31
+ if (error instanceof Error) {
32
+ return new CliError({
33
+ code: 'INTERNAL_ERROR',
34
+ message: error.message,
35
+ exitCode: 1,
36
+ suggestion: '오류 로그를 확인한 뒤 다시 시도하세요.',
37
+ helpUrl: 'https://docs.goondan.io/errors/INTERNAL_ERROR',
38
+ });
39
+ }
40
+ return new CliError({
41
+ code: 'UNKNOWN_ERROR',
42
+ message: '알 수 없는 오류가 발생했습니다.',
43
+ exitCode: 1,
44
+ suggestion: '명령과 옵션을 확인하고 다시 시도하세요.',
45
+ helpUrl: 'https://docs.goondan.io/errors/UNKNOWN_ERROR',
46
+ });
47
+ }
48
+ export function usageError(message, suggestion) {
49
+ return new CliError({
50
+ code: 'INVALID_ARGUMENT',
51
+ message,
52
+ exitCode: 2,
53
+ suggestion,
54
+ helpUrl: 'https://docs.goondan.io/errors/INVALID_ARGUMENT',
55
+ });
56
+ }
57
+ export function configError(message, suggestion) {
58
+ return new CliError({
59
+ code: 'CONFIG_ERROR',
60
+ message,
61
+ exitCode: 3,
62
+ suggestion,
63
+ helpUrl: 'https://docs.goondan.io/errors/CONFIG_ERROR',
64
+ });
65
+ }
66
+ export function validateError(message, suggestion) {
67
+ return new CliError({
68
+ code: 'VALIDATION_ERROR',
69
+ message,
70
+ exitCode: 4,
71
+ suggestion,
72
+ helpUrl: 'https://docs.goondan.io/errors/VALIDATION_ERROR',
73
+ });
74
+ }
75
+ export function networkError(message, suggestion) {
76
+ return new CliError({
77
+ code: 'NETWORK_ERROR',
78
+ message,
79
+ exitCode: 5,
80
+ suggestion,
81
+ helpUrl: 'https://docs.goondan.io/errors/NETWORK_ERROR',
82
+ });
83
+ }
84
+ export function authError(message, suggestion) {
85
+ return new CliError({
86
+ code: 'AUTH_ERROR',
87
+ message,
88
+ exitCode: 6,
89
+ suggestion,
90
+ helpUrl: 'https://docs.goondan.io/errors/AUTH_ERROR',
91
+ });
92
+ }
93
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { CliError } from './errors.js';
2
+ import type { DoctorReport, InstanceRecord, OutputFormat, ValidationResult } from './types.js';
3
+ export declare function formatValidationResult(result: ValidationResult, format: OutputFormat, targetPath: string): string;
4
+ export declare function formatCliError(error: CliError, json: boolean): string;
5
+ export declare function formatInstanceList(records: InstanceRecord[]): string;
6
+ export declare function formatDoctorReport(report: DoctorReport): string;
7
+ export declare function nowDateText(): string;
@@ -0,0 +1,141 @@
1
+ import { formatDate } from './utils.js';
2
+ function issueDetailLines(issue) {
3
+ const lines = [];
4
+ lines.push(` - [${issue.code}] ${issue.message}`);
5
+ if (issue.path) {
6
+ lines.push(` path: ${issue.path}`);
7
+ }
8
+ if (issue.resource) {
9
+ lines.push(` resource: ${issue.resource}`);
10
+ }
11
+ if (issue.field) {
12
+ lines.push(` field: ${issue.field}`);
13
+ }
14
+ if (issue.suggestion) {
15
+ lines.push(` suggestion: ${issue.suggestion}`);
16
+ }
17
+ if (issue.helpUrl) {
18
+ lines.push(` help: ${issue.helpUrl}`);
19
+ }
20
+ return lines;
21
+ }
22
+ export function formatValidationResult(result, format, targetPath) {
23
+ if (format === 'json') {
24
+ return JSON.stringify(result, null, 2);
25
+ }
26
+ if (format === 'github') {
27
+ const lines = [];
28
+ for (const error of result.errors) {
29
+ const file = error.path ?? targetPath;
30
+ const message = `[${error.code}] ${error.message}`;
31
+ lines.push(`::error file=${file}::${message}`);
32
+ if (error.suggestion) {
33
+ lines.push(`::notice file=${file}::suggestion: ${error.suggestion}`);
34
+ }
35
+ if (error.helpUrl) {
36
+ lines.push(`::notice file=${file}::help: ${error.helpUrl}`);
37
+ }
38
+ }
39
+ for (const warning of result.warnings) {
40
+ const file = warning.path ?? targetPath;
41
+ const message = `[${warning.code}] ${warning.message}`;
42
+ lines.push(`::warning file=${file}::${message}`);
43
+ if (warning.suggestion) {
44
+ lines.push(`::notice file=${file}::suggestion: ${warning.suggestion}`);
45
+ }
46
+ if (warning.helpUrl) {
47
+ lines.push(`::notice file=${file}::help: ${warning.helpUrl}`);
48
+ }
49
+ }
50
+ if (lines.length === 0) {
51
+ lines.push('::notice::validation passed');
52
+ }
53
+ return lines.join('\n');
54
+ }
55
+ const output = [];
56
+ output.push(`Validating ${targetPath}...`);
57
+ if (result.errors.length === 0 && result.warnings.length === 0) {
58
+ output.push('✓ Validation passed');
59
+ }
60
+ else {
61
+ if (result.errors.length > 0) {
62
+ output.push('Errors:');
63
+ for (const issue of result.errors) {
64
+ output.push(...issueDetailLines(issue));
65
+ }
66
+ }
67
+ if (result.warnings.length > 0) {
68
+ output.push('Warnings:');
69
+ for (const issue of result.warnings) {
70
+ output.push(...issueDetailLines(issue));
71
+ }
72
+ }
73
+ }
74
+ output.push(`Summary: errors=${result.errors.length}, warnings=${result.warnings.length}`);
75
+ return output.join('\n');
76
+ }
77
+ export function formatCliError(error, json) {
78
+ if (json) {
79
+ return JSON.stringify({
80
+ code: error.code,
81
+ message: error.message,
82
+ suggestion: error.suggestion,
83
+ helpUrl: error.helpUrl,
84
+ exitCode: error.exitCode,
85
+ }, null, 2);
86
+ }
87
+ const lines = [`[${error.code}] ${error.message}`];
88
+ if (error.suggestion) {
89
+ lines.push(`suggestion: ${error.suggestion}`);
90
+ }
91
+ if (error.helpUrl) {
92
+ lines.push(`help: ${error.helpUrl}`);
93
+ }
94
+ return lines.join('\n');
95
+ }
96
+ function pad(value, width) {
97
+ if (value.length >= width) {
98
+ return value;
99
+ }
100
+ return value + ' '.repeat(width - value.length);
101
+ }
102
+ export function formatInstanceList(records) {
103
+ if (records.length === 0) {
104
+ return 'No instances found.';
105
+ }
106
+ const header = [
107
+ pad('INSTANCE KEY', 20),
108
+ pad('AGENT', 14),
109
+ pad('STATUS', 12),
110
+ pad('CREATED', 20),
111
+ pad('UPDATED', 20),
112
+ ].join(' ');
113
+ const lines = [header];
114
+ for (const record of records) {
115
+ lines.push([
116
+ pad(record.key, 20),
117
+ pad(record.agent, 14),
118
+ pad(record.status, 12),
119
+ pad(record.createdAt, 20),
120
+ pad(record.updatedAt, 20),
121
+ ].join(' '));
122
+ }
123
+ return lines.join('\n');
124
+ }
125
+ export function formatDoctorReport(report) {
126
+ const lines = ['Goondan Doctor', ''];
127
+ for (const check of report.checks) {
128
+ const prefix = check.level === 'ok' ? '✓' : check.level === 'warn' ? '⚠' : '✗';
129
+ lines.push(`${prefix} [${check.category}] ${check.name}: ${check.detail}`);
130
+ if (check.suggestion) {
131
+ lines.push(` suggestion: ${check.suggestion}`);
132
+ }
133
+ }
134
+ lines.push('');
135
+ lines.push(`Summary: ${report.passed} passed, ${report.warnings} warnings, ${report.errors} errors`);
136
+ return lines.join('\n');
137
+ }
138
+ export function nowDateText() {
139
+ return formatDate(new Date());
140
+ }
141
+ //# sourceMappingURL=formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"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"}
package/dist/help.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare function getMainHelp(): string;
package/dist/help.js ADDED
@@ -0,0 +1,25 @@
1
+ export function getMainHelp() {
2
+ return [
3
+ 'Goondan CLI (gdn)',
4
+ '',
5
+ '사용법:',
6
+ ' gdn <command> [subcommand] [options]',
7
+ '',
8
+ '명령어:',
9
+ ' run Orchestrator 기동',
10
+ ' restart 실행 중인 Orchestrator 재시작 신호',
11
+ ' validate Bundle 구성 검증',
12
+ ' instance list/delete 인스턴스 조회/삭제',
13
+ ' logs 프로세스 로그 조회',
14
+ ' package add/install/publish 패키지 관리',
15
+ ' doctor 환경 진단',
16
+ '',
17
+ '전역 옵션:',
18
+ ' --help, -h',
19
+ ' --version, -V',
20
+ ' --config <path>, -c',
21
+ ' --state-root <path>',
22
+ ' --json',
23
+ ].join('\n');
24
+ }
25
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW;IACzB,OAAO;QACL,mBAAmB;QACnB,EAAE;QACF,MAAM;QACN,wCAAwC;QACxC,EAAE;QACF,MAAM;QACN,0CAA0C;QAC1C,oDAAoD;QACpD,uCAAuC;QACvC,qCAAqC;QACrC,qCAAqC;QACrC,uCAAuC;QACvC,gCAAgC;QAChC,EAAE;QACF,QAAQ;QACR,cAAc;QACd,iBAAiB;QACjB,uBAAuB;QACvB,uBAAuB;QACvB,UAAU;KACX,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { CliDependencies, ExitCode } from './types.js';
2
+ export { parseArgv, gdnParser } from './parser.js';
3
+ export type { GdnArgs, GdnCommand } from './parser.js';
4
+ export { executeCli } from './router.js';
5
+ export type * from './types.js';
6
+ export declare function runCli(argv: string[], deps?: CliDependencies): Promise<ExitCode>;
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ import { createDefaultDependencies } from './services/defaults.js';
2
+ import { executeCli } from './router.js';
3
+ export { parseArgv, gdnParser } from './parser.js';
4
+ export { executeCli } from './router.js';
5
+ export async function runCli(argv, deps) {
6
+ const runtimeDeps = deps ?? createDefaultDependencies();
7
+ return executeCli(argv, runtimeDeps);
8
+ }
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc,EAAE,IAAsB;IACjE,MAAM,WAAW,GAAG,IAAI,IAAI,yBAAyB,EAAE,CAAC;IACxD,OAAO,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { LogStream, ParsedArguments } from './types.js';
2
+ export interface GlobalRuntimeOptions {
3
+ configPath: string;
4
+ stateRoot?: string;
5
+ json: boolean;
6
+ }
7
+ export declare function getGlobalOptions(parsed: ParsedArguments): GlobalRuntimeOptions;
8
+ export declare function getStringOption(parsed: ParsedArguments, name: string): string | undefined;
9
+ export declare function getBooleanOption(parsed: ParsedArguments, name: string): boolean;
10
+ export declare function getNumberOption(parsed: ParsedArguments, name: string, fallback: number): number;
11
+ export declare function getFormatOption(parsed: ParsedArguments, fallback: 'text' | 'json' | 'github'): 'text' | 'json' | 'github';
12
+ export declare function getAccessOption(parsed: ParsedArguments): 'public' | 'restricted';
13
+ export declare function getLogStreamOption(parsed: ParsedArguments, fallback: LogStream): LogStream;
@@ -0,0 +1,57 @@
1
+ import { DEFAULT_BUNDLE_FILE } from './constants.js';
2
+ import { usageError } from './errors.js';
3
+ import { ensureBoolean, ensureNumber, ensureString } from './utils.js';
4
+ export function getGlobalOptions(parsed) {
5
+ const configPath = ensureString(parsed.globalOptions['config']) ?? DEFAULT_BUNDLE_FILE;
6
+ const stateRoot = ensureString(parsed.globalOptions['state-root']);
7
+ const json = ensureBoolean(parsed.globalOptions['json']);
8
+ return {
9
+ configPath,
10
+ stateRoot,
11
+ json,
12
+ };
13
+ }
14
+ export function getStringOption(parsed, name) {
15
+ return ensureString(parsed.options[name]);
16
+ }
17
+ export function getBooleanOption(parsed, name) {
18
+ return ensureBoolean(parsed.options[name]);
19
+ }
20
+ export function getNumberOption(parsed, name, fallback) {
21
+ const parsedNumber = ensureNumber(parsed.options[name]);
22
+ if (typeof parsedNumber === 'number') {
23
+ return parsedNumber;
24
+ }
25
+ return fallback;
26
+ }
27
+ export function getFormatOption(parsed, fallback) {
28
+ const candidate = getStringOption(parsed, 'format');
29
+ if (!candidate) {
30
+ return fallback;
31
+ }
32
+ if (candidate === 'text' || candidate === 'json' || candidate === 'github') {
33
+ return candidate;
34
+ }
35
+ throw usageError('지원하지 않는 --format 값입니다.', 'text, json, github 중 하나를 사용하세요.');
36
+ }
37
+ export function getAccessOption(parsed) {
38
+ const candidate = getStringOption(parsed, 'access');
39
+ if (!candidate) {
40
+ return 'public';
41
+ }
42
+ if (candidate === 'public' || candidate === 'restricted') {
43
+ return candidate;
44
+ }
45
+ throw usageError('지원하지 않는 --access 값입니다.', '--access public 또는 --access restricted를 사용하세요.');
46
+ }
47
+ export function getLogStreamOption(parsed, fallback) {
48
+ const candidate = getStringOption(parsed, 'stream');
49
+ if (!candidate) {
50
+ return fallback;
51
+ }
52
+ if (candidate === 'stdout' || candidate === 'stderr' || candidate === 'both') {
53
+ return candidate;
54
+ }
55
+ throw usageError('지원하지 않는 --stream 값입니다.', '--stream stdout|stderr|both 중 하나를 사용하세요.');
56
+ }
57
+ //# sourceMappingURL=options.js.map