dominion-cli 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/cli.js +13 -9
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/account.d.ts +1 -1
  4. package/dist/commands/account.d.ts.map +1 -1
  5. package/dist/commands/account.js +6 -9
  6. package/dist/commands/account.js.map +1 -1
  7. package/dist/commands/billing.d.ts +1 -1
  8. package/dist/commands/billing.d.ts.map +1 -1
  9. package/dist/commands/billing.js +3 -7
  10. package/dist/commands/billing.js.map +1 -1
  11. package/dist/commands/buy.d.ts +7 -7
  12. package/dist/commands/buy.d.ts.map +1 -1
  13. package/dist/commands/buy.js +45 -141
  14. package/dist/commands/buy.js.map +1 -1
  15. package/dist/commands/cart/add.d.ts +1 -1
  16. package/dist/commands/cart/add.d.ts.map +1 -1
  17. package/dist/commands/cart/add.js +9 -8
  18. package/dist/commands/cart/add.js.map +1 -1
  19. package/dist/commands/credits.js +1 -1
  20. package/dist/commands/dns/add.d.ts +3 -3
  21. package/dist/commands/dns/add.d.ts.map +1 -1
  22. package/dist/commands/dns/add.js +3 -3
  23. package/dist/commands/dns/add.js.map +1 -1
  24. package/dist/commands/dns/list.d.ts +3 -3
  25. package/dist/commands/dns/list.d.ts.map +1 -1
  26. package/dist/commands/dns/list.js +3 -3
  27. package/dist/commands/dns/list.js.map +1 -1
  28. package/dist/commands/dns/remove.d.ts +3 -3
  29. package/dist/commands/dns/remove.d.ts.map +1 -1
  30. package/dist/commands/dns/remove.js +3 -3
  31. package/dist/commands/dns/remove.js.map +1 -1
  32. package/dist/commands/domains/detail.d.ts +1 -1
  33. package/dist/commands/domains/detail.js +3 -3
  34. package/dist/commands/domains/detail.js.map +1 -1
  35. package/dist/commands/domains/list.d.ts +1 -1
  36. package/dist/commands/domains/list.js +3 -3
  37. package/dist/commands/domains/list.js.map +1 -1
  38. package/dist/commands/login.d.ts +6 -6
  39. package/dist/commands/login.d.ts.map +1 -1
  40. package/dist/commands/login.js +58 -42
  41. package/dist/commands/login.js.map +1 -1
  42. package/dist/commands/logout.d.ts +1 -1
  43. package/dist/commands/logout.js +1 -1
  44. package/dist/commands/search.d.ts +2 -2
  45. package/dist/commands/search.js +4 -4
  46. package/dist/commands/search.js.map +1 -1
  47. package/dist/commands/settings/set.d.ts +4 -4
  48. package/dist/commands/settings/set.d.ts.map +1 -1
  49. package/dist/commands/settings/set.js +10 -11
  50. package/dist/commands/settings/set.js.map +1 -1
  51. package/dist/commands/settings/view.d.ts +3 -3
  52. package/dist/commands/settings/view.d.ts.map +1 -1
  53. package/dist/commands/settings/view.js +4 -4
  54. package/dist/commands/settings/view.js.map +1 -1
  55. package/dist/commands/vercel/link.d.ts +4 -4
  56. package/dist/commands/vercel/link.d.ts.map +1 -1
  57. package/dist/commands/vercel/link.js +8 -8
  58. package/dist/commands/vercel/link.js.map +1 -1
  59. package/dist/commands/whoami.d.ts +1 -1
  60. package/dist/commands/whoami.js +3 -3
  61. package/dist/commands/whoami.js.map +1 -1
  62. package/dist/components/account-card.d.ts +3 -3
  63. package/dist/components/account-card.d.ts.map +1 -1
  64. package/dist/components/account-card.js +3 -3
  65. package/dist/components/account-card.js.map +1 -1
  66. package/dist/components/command-runner.d.ts +25 -0
  67. package/dist/components/command-runner.d.ts.map +1 -0
  68. package/dist/components/command-runner.js +67 -0
  69. package/dist/components/command-runner.js.map +1 -0
  70. package/dist/components/prompt.d.ts +24 -0
  71. package/dist/components/prompt.d.ts.map +1 -0
  72. package/dist/components/prompt.js +113 -0
  73. package/dist/components/prompt.js.map +1 -0
  74. package/dist/components/search-results.d.ts +1 -1
  75. package/dist/components/search-results.js +1 -1
  76. package/dist/lib/auth.d.ts +17 -9
  77. package/dist/lib/auth.d.ts.map +1 -1
  78. package/dist/lib/auth.js +125 -46
  79. package/dist/lib/auth.js.map +1 -1
  80. package/dist/lib/command-registry.d.ts +47 -0
  81. package/dist/lib/command-registry.d.ts.map +1 -0
  82. package/dist/lib/command-registry.js +384 -0
  83. package/dist/lib/command-registry.js.map +1 -0
  84. package/dist/lib/config.d.ts.map +1 -1
  85. package/dist/lib/config.js +0 -8
  86. package/dist/lib/config.js.map +1 -1
  87. package/dist/lib/dns-validation.d.ts +1 -1
  88. package/dist/lib/dns-validation.d.ts.map +1 -1
  89. package/dist/lib/dns-validation.js +2 -2
  90. package/dist/lib/dns-validation.js.map +1 -1
  91. package/dist/lib/dominion-client.d.ts +43 -0
  92. package/dist/lib/dominion-client.d.ts.map +1 -0
  93. package/dist/lib/dominion-client.js +183 -0
  94. package/dist/lib/dominion-client.js.map +1 -0
  95. package/dist/lib/error-personality.js +7 -7
  96. package/dist/lib/error-personality.js.map +1 -1
  97. package/dist/lib/history.d.ts +40 -0
  98. package/dist/lib/history.d.ts.map +1 -0
  99. package/dist/lib/history.js +113 -0
  100. package/dist/lib/history.js.map +1 -0
  101. package/dist/lib/nameserver-presets.js +4 -4
  102. package/dist/lib/nameserver-presets.js.map +1 -1
  103. package/dist/lib/purchase.d.ts +20 -23
  104. package/dist/lib/purchase.d.ts.map +1 -1
  105. package/dist/lib/purchase.js +42 -70
  106. package/dist/lib/purchase.js.map +1 -1
  107. package/dist/lib/schemas.d.ts +351 -352
  108. package/dist/lib/schemas.d.ts.map +1 -1
  109. package/dist/lib/schemas.js +1 -2
  110. package/dist/lib/schemas.js.map +1 -1
  111. package/dist/lib/types.d.ts +8 -11
  112. package/dist/lib/types.d.ts.map +1 -1
  113. package/dist/lib/types.js +1 -4
  114. package/dist/lib/types.js.map +1 -1
  115. package/dist/repl.d.ts +17 -0
  116. package/dist/repl.d.ts.map +1 -0
  117. package/dist/repl.js +189 -0
  118. package/dist/repl.js.map +1 -0
  119. package/package.json +2 -1
package/dist/lib/auth.js CHANGED
@@ -1,56 +1,149 @@
1
1
  /**
2
- * Auth utilities for login, logout, and whoami flows.
2
+ * Auth utilities for login, register, logout, and whoami flows.
3
3
  *
4
- * Handles credential validation, storage, and retrieval.
4
+ * Authenticates against the Dominion API.
5
5
  * All credentials stored in ~/.dominion/config.json with 0600 permissions.
6
6
  */
7
7
  import { ConfigManager } from "./config.js";
8
- import { NamecomClient } from "./namecom-client.js";
9
- import { DomainError } from "./types.js";
8
+ const DEFAULT_API_URL = "https://dominion.sh/api";
9
+ function getApiUrl(configManager) {
10
+ const manager = configManager ?? new ConfigManager();
11
+ const config = manager.load();
12
+ return config.apiBaseUrl ?? process.env.DOMINION_API_URL ?? DEFAULT_API_URL;
13
+ }
10
14
  /**
11
- * Validate Name.com credentials by calling listDomains().
12
- * Returns domain count on success for display in whoami.
15
+ * Register a new Dominion account.
13
16
  */
14
- export async function validateCredentials(username, token) {
17
+ export async function register(email, password, configManager) {
18
+ const apiUrl = getApiUrl(configManager);
15
19
  try {
16
- const client = new NamecomClient({ username, token });
17
- const response = await client.listDomains();
20
+ const response = await fetch(`${apiUrl}/auth/register`, {
21
+ method: "POST",
22
+ headers: { "Content-Type": "application/json" },
23
+ body: JSON.stringify({ email, password }),
24
+ });
25
+ const data = (await response.json());
26
+ if (!response.ok) {
27
+ return {
28
+ success: false,
29
+ email,
30
+ domainCount: 0,
31
+ error: data.error ?? "Registration failed",
32
+ };
33
+ }
18
34
  return {
19
35
  success: true,
20
- username,
21
- domainCount: response.domains?.length ?? 0,
36
+ email: data.user?.email ?? email,
37
+ token: data.token,
38
+ domainCount: 0,
22
39
  };
23
40
  }
24
41
  catch (err) {
25
- if (err instanceof DomainError && err.code === "AUTH_ERROR") {
42
+ return {
43
+ success: false,
44
+ email,
45
+ domainCount: 0,
46
+ error: `Connection failed: ${err.message}`,
47
+ };
48
+ }
49
+ }
50
+ /**
51
+ * Login to an existing Dominion account.
52
+ */
53
+ export async function login(email, password, configManager) {
54
+ const apiUrl = getApiUrl(configManager);
55
+ try {
56
+ const response = await fetch(`${apiUrl}/auth/login`, {
57
+ method: "POST",
58
+ headers: { "Content-Type": "application/json" },
59
+ body: JSON.stringify({ email, password }),
60
+ });
61
+ const data = (await response.json());
62
+ if (!response.ok) {
26
63
  return {
27
64
  success: false,
28
- username,
65
+ email,
29
66
  domainCount: 0,
30
- error: "Authentication failed. Check your Name.com API username and token at https://www.name.com/account/api",
67
+ error: data.error ?? "Login failed",
31
68
  };
32
69
  }
70
+ return {
71
+ success: true,
72
+ email: data.user?.email ?? email,
73
+ token: data.token,
74
+ domainCount: 0,
75
+ };
76
+ }
77
+ catch (err) {
33
78
  return {
34
79
  success: false,
35
- username,
80
+ email,
36
81
  domainCount: 0,
37
- error: err instanceof Error ? err.message : "Unknown error during credential validation",
82
+ error: `Connection failed: ${err.message}`,
38
83
  };
39
84
  }
40
85
  }
41
86
  /**
42
- * Save validated credentials to config.
87
+ * Validate current session by calling /auth/me.
43
88
  */
44
- export function saveCredentials(username, token, configManager) {
89
+ export async function validateSession(configManager) {
45
90
  const manager = configManager ?? new ConfigManager();
46
- manager.set("namecom", { username, token });
91
+ const config = manager.load();
92
+ const token = config.auth?.token;
93
+ const email = config.auth?.email ?? "";
94
+ if (!token) {
95
+ return {
96
+ success: false,
97
+ email,
98
+ domainCount: 0,
99
+ error: "Not authenticated. Run `dominion login` first.",
100
+ };
101
+ }
102
+ const apiUrl = getApiUrl(manager);
103
+ try {
104
+ const response = await fetch(`${apiUrl}/auth/me`, {
105
+ headers: { Authorization: `Bearer ${token}` },
106
+ });
107
+ const data = (await response.json());
108
+ if (!response.ok) {
109
+ return {
110
+ success: false,
111
+ email,
112
+ domainCount: 0,
113
+ error: data.error ??
114
+ "Session expired. Run `dominion login` to re-authenticate.",
115
+ };
116
+ }
117
+ return {
118
+ success: true,
119
+ email: data.user?.email ?? email,
120
+ domainCount: data.domainCount ?? 0,
121
+ };
122
+ }
123
+ catch (err) {
124
+ return {
125
+ success: false,
126
+ email,
127
+ domainCount: 0,
128
+ error: `Connection failed: ${err.message}`,
129
+ };
130
+ }
131
+ }
132
+ /**
133
+ * Save auth credentials to config.
134
+ */
135
+ export function saveCredentials(email, token, configManager) {
136
+ const manager = configManager ?? new ConfigManager();
137
+ manager.set("auth", { email, token });
47
138
  }
48
139
  /**
49
140
  * Clear credentials from config (logout).
50
141
  */
51
142
  export function clearCredentials(configManager) {
52
143
  const manager = configManager ?? new ConfigManager();
53
- manager.set("namecom", { username: "", token: "" });
144
+ const config = manager.load();
145
+ delete config.auth;
146
+ manager.save(config);
54
147
  }
55
148
  /**
56
149
  * Check current auth status without making API calls.
@@ -58,10 +151,10 @@ export function clearCredentials(configManager) {
58
151
  export function getAuthStatus(configManager) {
59
152
  const manager = configManager ?? new ConfigManager();
60
153
  const config = manager.load();
61
- const hasCredentials = !!(config.namecom.username && config.namecom.token);
154
+ const hasAuth = !!config.auth?.token;
62
155
  return {
63
- authenticated: hasCredentials,
64
- username: hasCredentials ? config.namecom.username : undefined,
156
+ authenticated: hasAuth,
157
+ email: hasAuth ? config.auth?.email : undefined,
65
158
  configPath: manager.getConfigPath(),
66
159
  };
67
160
  }
@@ -71,34 +164,20 @@ export function getAuthStatus(configManager) {
71
164
  export async function getAuthStatusWithDomainCount(configManager) {
72
165
  const manager = configManager ?? new ConfigManager();
73
166
  const config = manager.load();
74
- const hasCredentials = !!(config.namecom.username && config.namecom.token);
75
- if (!hasCredentials) {
167
+ const hasAuth = !!config.auth?.token;
168
+ if (!hasAuth) {
76
169
  return {
77
170
  authenticated: false,
78
171
  configPath: manager.getConfigPath(),
79
172
  };
80
173
  }
81
- try {
82
- const client = new NamecomClient({
83
- username: config.namecom.username,
84
- token: config.namecom.token,
85
- });
86
- const response = await client.listDomains();
87
- return {
88
- authenticated: true,
89
- username: config.namecom.username,
90
- domainCount: response.domains?.length ?? 0,
91
- configPath: manager.getConfigPath(),
92
- };
93
- }
94
- catch {
95
- // Credentials exist but may be invalid
96
- return {
97
- authenticated: true,
98
- username: config.namecom.username,
99
- configPath: manager.getConfigPath(),
100
- };
101
- }
174
+ const result = await validateSession(manager);
175
+ return {
176
+ authenticated: result.success,
177
+ email: result.email || config.auth?.email,
178
+ domainCount: result.domainCount,
179
+ configPath: manager.getConfigPath(),
180
+ };
102
181
  }
103
182
  /**
104
183
  * Open a URL in the default browser.
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAgBzC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,KAAa;IAEb,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAwB,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ;YACR,WAAW,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;SAC3C,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC5D,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,QAAQ;gBACR,WAAW,EAAE,CAAC;gBACd,KAAK,EACH,uGAAuG;aAC1G,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ;YACR,WAAW,EAAE,CAAC;YACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,4CAA4C;SACzF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,KAAa,EACb,aAA6B;IAE7B,MAAM,OAAO,GAAG,aAAa,IAAI,IAAI,aAAa,EAAE,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,aAA6B;IAC5D,MAAM,OAAO,GAAG,aAAa,IAAI,IAAI,aAAa,EAAE,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,aAA6B;IACzD,MAAM,OAAO,GAAG,aAAa,IAAI,IAAI,aAAa,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE3E,OAAO;QACL,aAAa,EAAE,cAAc;QAC7B,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QAC9D,UAAU,EAAE,OAAO,CAAC,aAAa,EAAE;KACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,aAA6B;IAE7B,MAAM,OAAO,GAAG,aAAa,IAAI,IAAI,aAAa,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE3E,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO;YACL,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,OAAO,CAAC,aAAa,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;YAC/B,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ;YACjC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK;SAC5B,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;QAC5C,OAAO;YACL,aAAa,EAAE,IAAI;YACnB,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ;YACjC,WAAW,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;YAC1C,UAAU,EAAE,OAAO,CAAC,aAAa,EAAE;SACpC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;QACvC,OAAO;YACL,aAAa,EAAE,IAAI;YACnB,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ;YACjC,UAAU,EAAE,OAAO,CAAC,aAAa,EAAE;SACpC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAE7C,MAAM,OAAO,GACX,QAAQ,EAAE,KAAK,QAAQ;QACrB,CAAC,CAAC,SAAS,GAAG,GAAG;QACjB,CAAC,CAAC,QAAQ,EAAE,KAAK,OAAO;YACtB,CAAC,CAAC,UAAU,GAAG,GAAG;YAClB,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC;IAE5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACtB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * CommandRegistry — lightweight command router for REPL mode.
3
+ *
4
+ * Bypasses Commander.js (which mutates state and calls process.exit on errors)
5
+ * in favor of a flat registry mapping command strings to React components.
6
+ */
7
+ import { type ReactElement } from "react";
8
+ export interface ParsedCommand {
9
+ element: ReactElement;
10
+ raw: string;
11
+ }
12
+ export interface CommandEntry {
13
+ description: string;
14
+ subcommands?: string[];
15
+ hidden?: boolean;
16
+ }
17
+ export interface ParseError {
18
+ message: string;
19
+ raw: string;
20
+ }
21
+ export type ParseResult = {
22
+ ok: true;
23
+ command: ParsedCommand;
24
+ } | {
25
+ ok: false;
26
+ error: ParseError;
27
+ };
28
+ /**
29
+ * Split raw input into tokens, respecting quoted strings.
30
+ * "search \"my domain\"" → ["search", "my domain"]
31
+ */
32
+ export declare function tokenize(input: string): string[];
33
+ /** Catalog of all commands for help display and tab completion. */
34
+ export declare const COMMAND_CATALOG: Record<string, CommandEntry>;
35
+ /**
36
+ * Get all command names for tab completion (excludes hidden commands).
37
+ */
38
+ export declare function getCommandNames(): string[];
39
+ /**
40
+ * Get subcommands for a given command name.
41
+ */
42
+ export declare function getSubcommands(command: string): string[];
43
+ /**
44
+ * Parse raw user input into a renderable React element.
45
+ */
46
+ export declare function parseInput(raw: string): ParseResult;
47
+ //# sourceMappingURL=command-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-registry.d.ts","sourceRoot":"","sources":["../../src/lib/command-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAyBzD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAIrC;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA4BhD;AAoCD,mEAAmE;AACnE,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAmBxD,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAI1C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAExD;AAID;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAqBnD"}