@reximo/cli 0.1.0-alpha.2 → 0.1.0-alpha.4

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.
@@ -1,7 +1,131 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createReximoClient = createReximoClient;
4
+ const generated_1 = require("./generated");
5
+ function extractApiErrorMessage(error, fallback) {
6
+ if (!(error instanceof generated_1.ReximoApiError)) {
7
+ return error instanceof Error ? error.message : fallback;
8
+ }
9
+ const body = error.body;
10
+ if (body && typeof body === 'object') {
11
+ const data = 'data' in body && body.data && typeof body.data === 'object'
12
+ ? body.data
13
+ : null;
14
+ const message = data?.['translated'] ?? data?.['message'];
15
+ if (typeof message === 'string' && message.trim().length > 0) {
16
+ return message;
17
+ }
18
+ }
19
+ return fallback;
20
+ }
21
+ function unwrapResponseData(response, fallback) {
22
+ if (response && typeof response === 'object' && 'data' in response) {
23
+ const wrapped = response;
24
+ if (wrapped.data !== undefined) {
25
+ return wrapped.data;
26
+ }
27
+ }
28
+ if (response === null || response === undefined) {
29
+ throw new Error(fallback);
30
+ }
31
+ return response;
32
+ }
33
+ function isRecord(value) {
34
+ return typeof value === 'object' && value !== null;
35
+ }
36
+ function normalizePagination(pagination, itemCount) {
37
+ if (isRecord(pagination)) {
38
+ const page = typeof pagination['page'] === 'number' ? pagination['page'] : 1;
39
+ const pageSize = typeof pagination['pageSize'] === 'number' ? pagination['pageSize'] : itemCount;
40
+ const total = typeof pagination['total'] === 'number' ? pagination['total'] : itemCount;
41
+ const totalPages = typeof pagination['totalPages'] === 'number'
42
+ ? pagination['totalPages']
43
+ : pageSize > 0
44
+ ? Math.ceil(total / pageSize)
45
+ : 0;
46
+ return {
47
+ page,
48
+ pageSize,
49
+ total,
50
+ totalPages,
51
+ hasNext: typeof pagination['hasNext'] === 'boolean' ? pagination['hasNext'] : page < totalPages,
52
+ hasPrevious: typeof pagination['hasPrevious'] === 'boolean' ? pagination['hasPrevious'] : page > 1
53
+ };
54
+ }
55
+ return {
56
+ page: 1,
57
+ pageSize: itemCount,
58
+ total: itemCount,
59
+ totalPages: itemCount > 0 ? 1 : 0,
60
+ hasNext: false,
61
+ hasPrevious: false
62
+ };
63
+ }
64
+ function unwrapPaginatedResponse(response, fallback) {
65
+ if (Array.isArray(response)) {
66
+ return {
67
+ data: response,
68
+ metadata: {
69
+ pagination: normalizePagination(undefined, response.length)
70
+ }
71
+ };
72
+ }
73
+ if (!isRecord(response)) {
74
+ throw new Error(fallback);
75
+ }
76
+ const directData = response['data'];
77
+ if (Array.isArray(directData)) {
78
+ return {
79
+ data: directData,
80
+ metadata: {
81
+ pagination: normalizePagination(response['metadata'], directData.length)
82
+ }
83
+ };
84
+ }
85
+ if (isRecord(directData) && Array.isArray(directData['data'])) {
86
+ const nestedData = directData['data'];
87
+ return {
88
+ data: nestedData,
89
+ metadata: {
90
+ pagination: normalizePagination(directData['metadata'], nestedData.length)
91
+ }
92
+ };
93
+ }
94
+ throw new Error(fallback);
95
+ }
96
+ function normalizeProjectSummary(value) {
97
+ if (!isRecord(value)) {
98
+ throw new Error('Project entry is not an object');
99
+ }
100
+ if (typeof value['id'] !== 'number' ||
101
+ typeof value['organizationId'] !== 'number' ||
102
+ typeof value['createdBy'] !== 'number' ||
103
+ typeof value['key'] !== 'string' ||
104
+ typeof value['name'] !== 'string' ||
105
+ (value['visibility'] !== "public" /* ProjectVisibility.Public */ &&
106
+ value['visibility'] !== "private" /* ProjectVisibility.Private */)) {
107
+ throw new Error('Project entry is missing required fields');
108
+ }
109
+ return {
110
+ id: value['id'],
111
+ organizationId: value['organizationId'],
112
+ createdBy: value['createdBy'],
113
+ key: value['key'],
114
+ name: value['name'],
115
+ visibility: value['visibility'],
116
+ isMember: typeof value['isMember'] === 'boolean' ? value['isMember'] : undefined,
117
+ createdAt: typeof value['createdAt'] === 'string'
118
+ ? value['createdAt']
119
+ : new Date(String(value['createdAt'])).toISOString(),
120
+ updatedAt: typeof value['updatedAt'] === 'string'
121
+ ? value['updatedAt']
122
+ : new Date(String(value['updatedAt'])).toISOString()
123
+ };
124
+ }
4
125
  function createReximoClient(config) {
126
+ const apiClient = new generated_1.ReximoApiClient({
127
+ baseUrl: config.apiBaseUrl ?? ''
128
+ });
5
129
  return {
6
130
  isConfigured() {
7
131
  return Boolean(config.apiBaseUrl);
@@ -9,9 +133,159 @@ function createReximoClient(config) {
9
133
  describeTarget() {
10
134
  return {
11
135
  apiBaseUrl: config.apiBaseUrl,
12
- hasToken: Boolean(config.token),
136
+ hasAccessToken: Boolean(config.accessToken),
137
+ hasRefreshToken: Boolean(config.refreshToken),
138
+ organizationId: config.organizationId,
13
139
  profile: config.profile
14
140
  };
141
+ },
142
+ async login(input) {
143
+ try {
144
+ const request = {
145
+ email: input.email,
146
+ password: input.password
147
+ };
148
+ const response = await apiClient.login(request, {
149
+ tenantId: input.organizationId
150
+ });
151
+ return unwrapResponseData(response, 'Login response missing data object');
152
+ }
153
+ catch (error) {
154
+ throw new Error(extractApiErrorMessage(error, 'Login request failed'));
155
+ }
156
+ },
157
+ async refreshToken(input) {
158
+ try {
159
+ const request = {
160
+ refreshToken: input.refreshToken
161
+ };
162
+ const response = await apiClient.refreshToken(request, {
163
+ tenantId: input.organizationId
164
+ });
165
+ return unwrapResponseData(response, 'Refresh token response missing data object');
166
+ }
167
+ catch (error) {
168
+ throw new Error(extractApiErrorMessage(error, 'Refresh token request failed'));
169
+ }
170
+ },
171
+ async getMyOrganizations(input) {
172
+ try {
173
+ const response = await apiClient.getMyOrganizations({
174
+ accessToken: input.accessToken,
175
+ tenantId: input.organizationId
176
+ });
177
+ if (!Array.isArray(response.data)) {
178
+ throw new Error('Organization response missing data array');
179
+ }
180
+ return response.data;
181
+ }
182
+ catch (error) {
183
+ throw new Error(extractApiErrorMessage(error, 'Get organizations request failed'));
184
+ }
185
+ },
186
+ async getMe(input) {
187
+ try {
188
+ const response = await apiClient.getMe({
189
+ accessToken: input.accessToken,
190
+ tenantId: input.organizationId
191
+ });
192
+ if (!response || typeof response !== 'object' || !('data' in response)) {
193
+ throw new Error('Profile response missing data object');
194
+ }
195
+ return response.data;
196
+ }
197
+ catch (error) {
198
+ throw new Error(extractApiErrorMessage(error, 'Get current user request failed'));
199
+ }
200
+ },
201
+ async logout(input) {
202
+ try {
203
+ const response = await apiClient.logout({
204
+ refreshToken: input.refreshToken
205
+ }, {
206
+ accessToken: input.accessToken,
207
+ tenantId: input.organizationId
208
+ });
209
+ return unwrapResponseData(response, 'Logout response missing data object');
210
+ }
211
+ catch (error) {
212
+ throw new Error(extractApiErrorMessage(error, 'Logout request failed'));
213
+ }
214
+ },
215
+ async listIssues(input) {
216
+ try {
217
+ const response = await apiClient.listIssues({
218
+ ...input,
219
+ tenantId: input.organizationId
220
+ });
221
+ return unwrapPaginatedResponse(response, 'Issue list response missing data array');
222
+ }
223
+ catch (error) {
224
+ throw new Error(extractApiErrorMessage(error, 'List issues request failed'));
225
+ }
226
+ },
227
+ async createIssue(input) {
228
+ try {
229
+ const response = await apiClient.createIssue(input.issue, {
230
+ accessToken: input.accessToken,
231
+ tenantId: input.organizationId
232
+ });
233
+ return unwrapResponseData(response, 'Create issue response missing data object');
234
+ }
235
+ catch (error) {
236
+ throw new Error(extractApiErrorMessage(error, 'Create issue request failed'));
237
+ }
238
+ },
239
+ async getIssue(input) {
240
+ try {
241
+ const response = await apiClient.getIssue(input.issueId, {
242
+ accessToken: input.accessToken,
243
+ tenantId: input.organizationId
244
+ });
245
+ return unwrapResponseData(response, 'Get issue response missing data object');
246
+ }
247
+ catch (error) {
248
+ throw new Error(extractApiErrorMessage(error, 'Get issue request failed'));
249
+ }
250
+ },
251
+ async updateIssue(input) {
252
+ try {
253
+ const response = await apiClient.updateIssue(input.issueId, input.issue, {
254
+ accessToken: input.accessToken,
255
+ tenantId: input.organizationId
256
+ });
257
+ return unwrapResponseData(response, 'Update issue response missing data object');
258
+ }
259
+ catch (error) {
260
+ throw new Error(extractApiErrorMessage(error, 'Update issue request failed'));
261
+ }
262
+ },
263
+ async deleteIssue(input) {
264
+ try {
265
+ await apiClient.deleteIssue(input.issueId, {
266
+ accessToken: input.accessToken,
267
+ tenantId: input.organizationId
268
+ });
269
+ }
270
+ catch (error) {
271
+ throw new Error(extractApiErrorMessage(error, 'Delete issue request failed'));
272
+ }
273
+ },
274
+ async listProjects(input) {
275
+ try {
276
+ const response = await apiClient.listProjects({
277
+ ...input,
278
+ tenantId: input.organizationId
279
+ });
280
+ const unwrapped = unwrapPaginatedResponse(response, 'Project list response missing data array');
281
+ return {
282
+ data: unwrapped.data.map((project) => normalizeProjectSummary(project)),
283
+ metadata: unwrapped.metadata
284
+ };
285
+ }
286
+ catch (error) {
287
+ throw new Error(extractApiErrorMessage(error, 'List projects request failed'));
288
+ }
15
289
  }
16
290
  };
17
291
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reximo-client.js","sourceRoot":"","sources":["../../../../../packages/reximo-cli/src/client/reximo-client.ts"],"names":[],"mappings":";;AAWA,gDAaC;AAbD,SAAgB,kBAAkB,CAAC,MAAsB;IACvD,OAAO;QACL,YAAY;YACV,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC;QACD,cAAc;YACZ,OAAO;gBACL,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"reximo-client.js","sourceRoot":"","sources":["../../../../../packages/reximo-cli/src/client/reximo-client.ts"],"names":[],"mappings":"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"}
package/src/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export { runCli, type CliDependencies } from './lib/run-cli';
2
- export { loadResolvedConfig, getDefaultConfigPath, type LoadResolvedConfigOptions, type ResolvedConfig } from './lib/config';
2
+ export { DEFAULT_API_BASE_URL, loadResolvedConfig, getDefaultConfigPath, saveProfileConfig, type LoadResolvedConfigOptions, type PersistedConfigFile, type PersistedProfileConfig, type ResolvedConfig } from './lib/config';
3
3
  export { createReximoClient, type ReximoClient } from './client/reximo-client';
package/src/index.js CHANGED
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createReximoClient = exports.getDefaultConfigPath = exports.loadResolvedConfig = exports.runCli = void 0;
3
+ exports.createReximoClient = exports.saveProfileConfig = exports.getDefaultConfigPath = exports.loadResolvedConfig = exports.DEFAULT_API_BASE_URL = exports.runCli = void 0;
4
4
  var run_cli_1 = require("./lib/run-cli");
5
5
  Object.defineProperty(exports, "runCli", { enumerable: true, get: function () { return run_cli_1.runCli; } });
6
6
  var config_1 = require("./lib/config");
7
+ Object.defineProperty(exports, "DEFAULT_API_BASE_URL", { enumerable: true, get: function () { return config_1.DEFAULT_API_BASE_URL; } });
7
8
  Object.defineProperty(exports, "loadResolvedConfig", { enumerable: true, get: function () { return config_1.loadResolvedConfig; } });
8
9
  Object.defineProperty(exports, "getDefaultConfigPath", { enumerable: true, get: function () { return config_1.getDefaultConfigPath; } });
10
+ Object.defineProperty(exports, "saveProfileConfig", { enumerable: true, get: function () { return config_1.saveProfileConfig; } });
9
11
  var reximo_client_1 = require("./client/reximo-client");
10
12
  Object.defineProperty(exports, "createReximoClient", { enumerable: true, get: function () { return reximo_client_1.createReximoClient; } });
11
13
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/reximo-cli/src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA6D;AAApD,iGAAA,MAAM,OAAA;AACf,uCAKsB;AAJpB,4GAAA,kBAAkB,OAAA;AAClB,8GAAA,oBAAoB,OAAA;AAItB,wDAA+E;AAAtE,mHAAA,kBAAkB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/reximo-cli/src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA6D;AAApD,iGAAA,MAAM,OAAA;AACf,uCASsB;AARpB,8GAAA,oBAAoB,OAAA;AACpB,4GAAA,kBAAkB,OAAA;AAClB,8GAAA,oBAAoB,OAAA;AACpB,2GAAA,iBAAiB,OAAA;AAMnB,wDAA+E;AAAtE,mHAAA,kBAAkB,OAAA"}
@@ -2,6 +2,7 @@ export type LoadResolvedConfigOptions = {
2
2
  env?: NodeJS.ProcessEnv;
3
3
  homeDirectory?: string;
4
4
  };
5
+ export declare const DEFAULT_API_BASE_URL = "https://api.reximo.app";
5
6
  export declare const enum ConfigSource {
6
7
  Env = "env",
7
8
  Config = "config",
@@ -13,14 +14,29 @@ export type ResolvedConfig = {
13
14
  configPath: string;
14
15
  configFileFound: boolean;
15
16
  apiBaseUrl: string | null;
16
- token: string | null;
17
+ accessToken: string | null;
18
+ refreshToken: string | null;
19
+ organizationId: string | null;
17
20
  sources: {
18
21
  profile: ConfigSource;
19
22
  apiBaseUrl: ConfigSource;
20
- token: ConfigSource;
23
+ accessToken: ConfigSource;
24
+ refreshToken: ConfigSource;
25
+ organizationId: ConfigSource;
21
26
  configPath: ConfigSource.Env | ConfigSource.Default;
22
27
  };
23
28
  };
29
+ export type PersistedProfileConfig = {
30
+ apiBaseUrl?: string | null;
31
+ accessToken?: string | null;
32
+ refreshToken?: string | null;
33
+ organizationId?: string | null;
34
+ };
35
+ export type PersistedConfigFile = {
36
+ profile?: string;
37
+ profiles?: Record<string, PersistedProfileConfig>;
38
+ };
24
39
  export declare function getDefaultConfigPath(homeDirectory?: string): string;
25
40
  export declare function loadResolvedConfig(options?: LoadResolvedConfigOptions): ResolvedConfig;
41
+ export declare function saveProfileConfig(profileConfig: PersistedProfileConfig, options?: LoadResolvedConfigOptions): ResolvedConfig;
26
42
  export declare function redactToken(token: string | null, includeSensitive: boolean): string | null;
package/src/lib/config.js CHANGED
@@ -1,12 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_API_BASE_URL = void 0;
3
4
  exports.getDefaultConfigPath = getDefaultConfigPath;
4
5
  exports.loadResolvedConfig = loadResolvedConfig;
6
+ exports.saveProfileConfig = saveProfileConfig;
5
7
  exports.redactToken = redactToken;
6
8
  const tslib_1 = require("tslib");
7
9
  const node_fs_1 = require("node:fs");
8
10
  const node_os_1 = require("node:os");
9
11
  const node_path_1 = tslib_1.__importDefault(require("node:path"));
12
+ exports.DEFAULT_API_BASE_URL = 'https://api.reximo.app';
10
13
  function getDefaultConfigPath(homeDirectory = (0, node_os_1.homedir)()) {
11
14
  return node_path_1.default.join(homeDirectory, '.reximo', 'config.json');
12
15
  }
@@ -21,6 +24,10 @@ function readConfigFile(configPath) {
21
24
  }
22
25
  return parsed;
23
26
  }
27
+ function writeConfigFile(configPath, configFile) {
28
+ (0, node_fs_1.mkdirSync)(node_path_1.default.dirname(configPath), { recursive: true });
29
+ (0, node_fs_1.writeFileSync)(configPath, `${JSON.stringify(configFile, null, 2)}\n`, 'utf8');
30
+ }
24
31
  function getProfileConfig(configFile, profile) {
25
32
  return configFile.profiles?.[profile] ?? {};
26
33
  }
@@ -33,6 +40,24 @@ function resolveValueSource(valueFromEnv, valueFromConfig) {
33
40
  }
34
41
  return "unset" /* ConfigSource.Unset */;
35
42
  }
43
+ function resolveProfileSource(profileFromEnv, configProfile) {
44
+ if (profileFromEnv) {
45
+ return "env" /* ConfigSource.Env */;
46
+ }
47
+ if (configProfile) {
48
+ return "config" /* ConfigSource.Config */;
49
+ }
50
+ return "default" /* ConfigSource.Default */;
51
+ }
52
+ function resolveApiBaseUrlSource(apiBaseUrlFromEnv, apiBaseUrlFromConfig) {
53
+ if (apiBaseUrlFromEnv) {
54
+ return "env" /* ConfigSource.Env */;
55
+ }
56
+ if (apiBaseUrlFromConfig) {
57
+ return "config" /* ConfigSource.Config */;
58
+ }
59
+ return "default" /* ConfigSource.Default */;
60
+ }
36
61
  function loadResolvedConfig(options = {}) {
37
62
  const env = options.env ?? process.env;
38
63
  const configPathFromEnv = env['REXIMO_CONFIG'];
@@ -43,25 +68,51 @@ function loadResolvedConfig(options = {}) {
43
68
  const profile = profileFromEnv ?? configFile.profile ?? 'default';
44
69
  const profileConfig = getProfileConfig(configFile, profile);
45
70
  const apiBaseUrlFromEnv = env['REXIMO_API_BASE_URL'];
46
- const tokenFromEnv = env['REXIMO_TOKEN'];
71
+ const accessTokenFromEnv = env['REXIMO_TOKEN'];
72
+ const refreshTokenFromEnv = env['REXIMO_REFRESH_TOKEN'];
73
+ const organizationIdFromEnv = env['REXIMO_ORGANIZATION_ID'];
74
+ const apiBaseUrlFromConfig = profileConfig.apiBaseUrl;
75
+ const accessTokenFromConfig = profileConfig.accessToken ?? profileConfig.token;
47
76
  return {
48
77
  profile,
49
78
  configPath,
50
79
  configFileFound,
51
- apiBaseUrl: apiBaseUrlFromEnv ?? profileConfig.apiBaseUrl ?? null,
52
- token: tokenFromEnv ?? profileConfig.token ?? null,
80
+ apiBaseUrl: apiBaseUrlFromEnv ?? apiBaseUrlFromConfig ?? exports.DEFAULT_API_BASE_URL,
81
+ accessToken: accessTokenFromEnv ?? accessTokenFromConfig ?? null,
82
+ refreshToken: refreshTokenFromEnv ?? profileConfig.refreshToken ?? null,
83
+ organizationId: organizationIdFromEnv ?? profileConfig.organizationId ?? null,
53
84
  sources: {
54
- profile: profileFromEnv
55
- ? "env" /* ConfigSource.Env */
56
- : configFile.profile
57
- ? "config" /* ConfigSource.Config */
58
- : "default" /* ConfigSource.Default */,
59
- apiBaseUrl: resolveValueSource(apiBaseUrlFromEnv, profileConfig.apiBaseUrl),
60
- token: resolveValueSource(tokenFromEnv, profileConfig.token),
85
+ profile: resolveProfileSource(profileFromEnv, configFile.profile),
86
+ apiBaseUrl: resolveApiBaseUrlSource(apiBaseUrlFromEnv, apiBaseUrlFromConfig),
87
+ accessToken: resolveValueSource(accessTokenFromEnv, accessTokenFromConfig),
88
+ refreshToken: resolveValueSource(refreshTokenFromEnv, profileConfig.refreshToken),
89
+ organizationId: resolveValueSource(organizationIdFromEnv, profileConfig.organizationId),
61
90
  configPath: configPathFromEnv ? "env" /* ConfigSource.Env */ : "default" /* ConfigSource.Default */
62
91
  }
63
92
  };
64
93
  }
94
+ function saveProfileConfig(profileConfig, options = {}) {
95
+ const resolved = loadResolvedConfig(options);
96
+ const configFile = readConfigFile(resolved.configPath);
97
+ const profiles = { ...(configFile.profiles ?? {}) };
98
+ const existingProfile = { ...(profiles[resolved.profile] ?? {}) };
99
+ for (const [key, value] of Object.entries(profileConfig)) {
100
+ if (value === undefined) {
101
+ continue;
102
+ }
103
+ if (value === null) {
104
+ delete existingProfile[key];
105
+ continue;
106
+ }
107
+ existingProfile[key] = value;
108
+ }
109
+ profiles[resolved.profile] = existingProfile;
110
+ writeConfigFile(resolved.configPath, {
111
+ profile: configFile.profile ?? resolved.profile,
112
+ profiles
113
+ });
114
+ return loadResolvedConfig(options);
115
+ }
65
116
  function redactToken(token, includeSensitive) {
66
117
  if (!token) {
67
118
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../packages/reximo-cli/src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../packages/reximo-cli/src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { createDefaultPromptAdapter, type PromptAdapter, type PromptChoice } from './prompts';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDefaultPromptAdapter = void 0;
4
+ var prompts_1 = require("./prompts");
5
+ Object.defineProperty(exports, "createDefaultPromptAdapter", { enumerable: true, get: function () { return prompts_1.createDefaultPromptAdapter; } });
6
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../../../packages/reximo-cli/src/lib/prompt.ts"],"names":[],"mappings":";;;AAAA,qCAA8F;AAArF,qHAAA,0BAA0B,OAAA"}
@@ -0,0 +1,17 @@
1
+ import type { Writable } from './output';
2
+ export type PromptChoice = {
3
+ label: string;
4
+ value: string;
5
+ };
6
+ export type PromptAdapter = {
7
+ isInteractive(): boolean;
8
+ promptText(label: string): Promise<string>;
9
+ promptPassword(label: string): Promise<string>;
10
+ select(label: string, choices: PromptChoice[]): Promise<string>;
11
+ };
12
+ type CreateDefaultPromptAdapterOptions = {
13
+ stdin: NodeJS.ReadStream;
14
+ stdout: Writable;
15
+ };
16
+ export declare function createDefaultPromptAdapter(options: CreateDefaultPromptAdapterOptions): PromptAdapter;
17
+ export {};
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDefaultPromptAdapter = createDefaultPromptAdapter;
4
+ const tslib_1 = require("tslib");
5
+ const node_readline_1 = tslib_1.__importDefault(require("node:readline"));
6
+ const promises_1 = require("node:readline/promises");
7
+ function trimAnswer(answer) {
8
+ return answer.trim();
9
+ }
10
+ async function askQuestion(stdin, stdout, message) {
11
+ const rl = (0, promises_1.createInterface)({
12
+ input: stdin,
13
+ output: stdout
14
+ });
15
+ try {
16
+ return trimAnswer(await rl.question(message));
17
+ }
18
+ finally {
19
+ rl.close();
20
+ }
21
+ }
22
+ async function askHiddenQuestion(stdin, stdout, message) {
23
+ if (!stdin.isTTY || typeof stdin.setRawMode !== 'function') {
24
+ return askQuestion(stdin, stdout, message);
25
+ }
26
+ node_readline_1.default.emitKeypressEvents(stdin);
27
+ const previousRawMode = stdin.isRaw;
28
+ stdin.setRawMode(true);
29
+ stdin.resume();
30
+ stdout.write(message);
31
+ return new Promise((resolve, reject) => {
32
+ let value = '';
33
+ const cleanup = () => {
34
+ stdin.removeListener('keypress', onKeypress);
35
+ stdin.setRawMode(previousRawMode ?? false);
36
+ stdin.pause();
37
+ stdout.write('\n');
38
+ };
39
+ const onKeypress = (chunk, key) => {
40
+ if (key.name === 'return' || key.name === 'enter') {
41
+ cleanup();
42
+ resolve(trimAnswer(value));
43
+ return;
44
+ }
45
+ if (key.name === 'backspace') {
46
+ if (value.length > 0) {
47
+ value = value.slice(0, -1);
48
+ stdout.write('\b \b');
49
+ }
50
+ return;
51
+ }
52
+ if (key.ctrl && key.name === 'c') {
53
+ cleanup();
54
+ reject(new Error('Prompt cancelled'));
55
+ return;
56
+ }
57
+ if (chunk) {
58
+ value += chunk;
59
+ stdout.write('*');
60
+ }
61
+ };
62
+ stdin.on('keypress', onKeypress);
63
+ });
64
+ }
65
+ function createDefaultPromptAdapter(options) {
66
+ const { stdin, stdout } = options;
67
+ return {
68
+ isInteractive() {
69
+ const stdoutWithTty = stdout;
70
+ return Boolean(stdin.isTTY && stdoutWithTty.isTTY);
71
+ },
72
+ promptText(label) {
73
+ return askQuestion(stdin, stdout, `${label}: `);
74
+ },
75
+ promptPassword(label) {
76
+ return askHiddenQuestion(stdin, stdout, `${label}: `);
77
+ },
78
+ async select(label, choices) {
79
+ if (choices.length === 0) {
80
+ throw new Error('No choices available');
81
+ }
82
+ for (const [index, choice] of choices.entries()) {
83
+ stdout.write(`${index + 1}. ${choice.label}\n`);
84
+ }
85
+ const answer = await askQuestion(stdin, stdout, `${label} [1-${choices.length}]: `);
86
+ const selectedIndex = Number.parseInt(answer, 10);
87
+ if (!Number.isInteger(selectedIndex) || selectedIndex < 1 || selectedIndex > choices.length) {
88
+ throw new Error(`Invalid selection: ${answer}`);
89
+ }
90
+ const selectedChoice = choices[selectedIndex - 1];
91
+ if (!selectedChoice) {
92
+ throw new Error(`Invalid selection: ${answer}`);
93
+ }
94
+ return selectedChoice.value;
95
+ }
96
+ };
97
+ }
98
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../../packages/reximo-cli/src/lib/prompts.ts"],"names":[],"mappings":"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"}