@newpeak/barista-cli 0.1.0 ā 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/arabica/auth/index.d.ts +3 -0
- package/dist/commands/arabica/auth/index.d.ts.map +1 -0
- package/dist/commands/arabica/auth/index.js +244 -0
- package/dist/commands/arabica/auth/index.js.map +1 -0
- package/dist/commands/arabica/auth/login.d.ts +3 -0
- package/dist/commands/arabica/auth/login.d.ts.map +1 -0
- package/dist/commands/arabica/auth/login.js +5 -0
- package/dist/commands/arabica/auth/login.js.map +1 -0
- package/dist/commands/arabica/auth/logout.d.ts +3 -0
- package/dist/commands/arabica/auth/logout.d.ts.map +1 -0
- package/dist/commands/arabica/auth/logout.js +5 -0
- package/dist/commands/arabica/auth/logout.js.map +1 -0
- package/dist/commands/arabica/auth/register.d.ts +3 -0
- package/dist/commands/arabica/auth/register.d.ts.map +1 -0
- package/dist/commands/arabica/auth/register.js +5 -0
- package/dist/commands/arabica/auth/register.js.map +1 -0
- package/dist/commands/arabica/auth/status.d.ts +3 -0
- package/dist/commands/arabica/auth/status.d.ts.map +1 -0
- package/dist/commands/arabica/auth/status.js +5 -0
- package/dist/commands/arabica/auth/status.js.map +1 -0
- package/dist/commands/arabica/index.d.ts +3 -0
- package/dist/commands/arabica/index.d.ts.map +1 -0
- package/dist/commands/arabica/index.js +20 -0
- package/dist/commands/arabica/index.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +92 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/context.d.ts +3 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +50 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/liberica/auth/index.d.ts +3 -0
- package/dist/commands/liberica/auth/index.d.ts.map +1 -0
- package/dist/commands/liberica/auth/index.js +152 -0
- package/dist/commands/liberica/auth/index.js.map +1 -0
- package/dist/commands/liberica/context/index.d.ts +3 -0
- package/dist/commands/liberica/context/index.d.ts.map +1 -0
- package/dist/commands/liberica/context/index.js +36 -0
- package/dist/commands/liberica/context/index.js.map +1 -0
- package/dist/commands/liberica/employees/create.d.ts +3 -0
- package/dist/commands/liberica/employees/create.d.ts.map +1 -0
- package/dist/commands/liberica/employees/create.js +262 -0
- package/dist/commands/liberica/employees/create.js.map +1 -0
- package/dist/commands/liberica/employees/delete.d.ts +3 -0
- package/dist/commands/liberica/employees/delete.d.ts.map +1 -0
- package/dist/commands/liberica/employees/delete.js +119 -0
- package/dist/commands/liberica/employees/delete.js.map +1 -0
- package/dist/commands/liberica/employees/disable.d.ts +3 -0
- package/dist/commands/liberica/employees/disable.d.ts.map +1 -0
- package/dist/commands/liberica/employees/disable.js +88 -0
- package/dist/commands/liberica/employees/disable.js.map +1 -0
- package/dist/commands/liberica/employees/enable.d.ts +3 -0
- package/dist/commands/liberica/employees/enable.d.ts.map +1 -0
- package/dist/commands/liberica/employees/enable.js +88 -0
- package/dist/commands/liberica/employees/enable.js.map +1 -0
- package/dist/commands/liberica/employees/get.d.ts +3 -0
- package/dist/commands/liberica/employees/get.d.ts.map +1 -0
- package/dist/commands/liberica/employees/get.js +104 -0
- package/dist/commands/liberica/employees/get.js.map +1 -0
- package/dist/commands/liberica/employees/index.d.ts +3 -0
- package/dist/commands/liberica/employees/index.d.ts.map +1 -0
- package/dist/commands/liberica/employees/index.js +21 -0
- package/dist/commands/liberica/employees/index.js.map +1 -0
- package/dist/commands/liberica/employees/list.d.ts +3 -0
- package/dist/commands/liberica/employees/list.d.ts.map +1 -0
- package/dist/commands/liberica/employees/list.js +98 -0
- package/dist/commands/liberica/employees/list.js.map +1 -0
- package/dist/commands/liberica/employees/update.d.ts +3 -0
- package/dist/commands/liberica/employees/update.d.ts.map +1 -0
- package/dist/commands/liberica/employees/update.js +147 -0
- package/dist/commands/liberica/employees/update.js.map +1 -0
- package/dist/commands/liberica/index.d.ts +3 -0
- package/dist/commands/liberica/index.d.ts.map +1 -0
- package/dist/commands/liberica/index.js +33 -0
- package/dist/commands/liberica/index.js.map +1 -0
- package/dist/commands/liberica/orgs/index.d.ts +3 -0
- package/dist/commands/liberica/orgs/index.d.ts.map +1 -0
- package/dist/commands/liberica/orgs/index.js +27 -0
- package/dist/commands/liberica/orgs/index.js.map +1 -0
- package/dist/commands/liberica/positions/index.d.ts +3 -0
- package/dist/commands/liberica/positions/index.d.ts.map +1 -0
- package/dist/commands/liberica/positions/index.js +24 -0
- package/dist/commands/liberica/positions/index.js.map +1 -0
- package/dist/commands/liberica/roles/index.d.ts +3 -0
- package/dist/commands/liberica/roles/index.d.ts.map +1 -0
- package/dist/commands/liberica/roles/index.js +50 -0
- package/dist/commands/liberica/roles/index.js.map +1 -0
- package/dist/commands/liberica/users/create.d.ts +3 -0
- package/dist/commands/liberica/users/create.d.ts.map +1 -0
- package/dist/commands/liberica/users/create.js +112 -0
- package/dist/commands/liberica/users/create.js.map +1 -0
- package/dist/commands/liberica/users/delete.d.ts +3 -0
- package/dist/commands/liberica/users/delete.d.ts.map +1 -0
- package/dist/commands/liberica/users/delete.js +41 -0
- package/dist/commands/liberica/users/delete.js.map +1 -0
- package/dist/commands/liberica/users/disable.d.ts +3 -0
- package/dist/commands/liberica/users/disable.d.ts.map +1 -0
- package/dist/commands/liberica/users/disable.js +34 -0
- package/dist/commands/liberica/users/disable.js.map +1 -0
- package/dist/commands/liberica/users/enable.d.ts +3 -0
- package/dist/commands/liberica/users/enable.d.ts.map +1 -0
- package/dist/commands/liberica/users/enable.js +24 -0
- package/dist/commands/liberica/users/enable.js.map +1 -0
- package/dist/commands/liberica/users/get.d.ts +3 -0
- package/dist/commands/liberica/users/get.d.ts.map +1 -0
- package/dist/commands/liberica/users/get.js +38 -0
- package/dist/commands/liberica/users/get.js.map +1 -0
- package/dist/commands/liberica/users/index.d.ts +3 -0
- package/dist/commands/liberica/users/index.d.ts.map +1 -0
- package/dist/commands/liberica/users/index.js +25 -0
- package/dist/commands/liberica/users/index.js.map +1 -0
- package/dist/commands/liberica/users/list.d.ts +3 -0
- package/dist/commands/liberica/users/list.d.ts.map +1 -0
- package/dist/commands/liberica/users/list.js +59 -0
- package/dist/commands/liberica/users/list.js.map +1 -0
- package/dist/commands/liberica/users/me.d.ts +3 -0
- package/dist/commands/liberica/users/me.d.ts.map +1 -0
- package/dist/commands/liberica/users/me.js +34 -0
- package/dist/commands/liberica/users/me.js.map +1 -0
- package/dist/commands/liberica/users/reset-password.d.ts +3 -0
- package/dist/commands/liberica/users/reset-password.d.ts.map +1 -0
- package/dist/commands/liberica/users/reset-password.js +35 -0
- package/dist/commands/liberica/users/reset-password.js.map +1 -0
- package/dist/commands/liberica/users/update.d.ts +3 -0
- package/dist/commands/liberica/users/update.d.ts.map +1 -0
- package/dist/commands/liberica/users/update.js +42 -0
- package/dist/commands/liberica/users/update.js.map +1 -0
- package/dist/core/api/client.d.ts +114 -0
- package/dist/core/api/client.d.ts.map +1 -0
- package/dist/core/api/client.js +644 -0
- package/dist/core/api/client.js.map +1 -0
- package/dist/core/auth/token-manager.d.ts +26 -0
- package/dist/core/auth/token-manager.d.ts.map +1 -0
- package/dist/core/auth/token-manager.js +158 -0
- package/dist/core/auth/token-manager.js.map +1 -0
- package/dist/core/config/manager.d.ts +17 -0
- package/dist/core/config/manager.d.ts.map +1 -0
- package/dist/core/config/manager.js +153 -0
- package/dist/core/config/manager.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/types/employee.d.ts +87 -0
- package/dist/types/employee.d.ts.map +1 -0
- package/dist/types/employee.js +2 -0
- package/dist/types/employee.js.map +1 -0
- package/dist/types/index.d.ts +66 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/org.d.ts +22 -0
- package/dist/types/org.d.ts.map +1 -0
- package/dist/types/org.js +2 -0
- package/dist/types/org.js.map +1 -0
- package/dist/types/position.d.ts +21 -0
- package/dist/types/position.d.ts.map +1 -0
- package/dist/types/position.js +2 -0
- package/dist/types/position.js.map +1 -0
- package/dist/types/user.d.ts +59 -0
- package/dist/types/user.d.ts.map +1 -0
- package/dist/types/user.js +2 -0
- package/dist/types/user.js.map +1 -0
- package/package.json +3 -2
- package/.eslintrc.json +0 -23
- package/.prettierrc +0 -9
- package/.sisyphus/notepads/liberica-employees/learnings.md +0 -73
- package/AGENTS.md +0 -270
- package/CONTRIBUTING.md +0 -291
- package/tests/unit/commands/arabica/auth.test.ts +0 -230
- package/tests/unit/commands/liberica/auth.test.ts +0 -175
- package/tests/unit/commands/liberica/context.test.ts +0 -98
- package/tests/unit/commands/liberica/employees/create.test.ts +0 -463
- package/tests/unit/commands/liberica/employees/disable.test.ts +0 -82
- package/tests/unit/commands/liberica/employees/enable.test.ts +0 -82
- package/tests/unit/commands/liberica/employees/get.test.ts +0 -111
- package/tests/unit/commands/liberica/employees/list.test.ts +0 -294
- package/tests/unit/commands/liberica/employees/update.test.ts +0 -210
- package/tests/unit/config.test.ts +0 -141
- package/tests/unit/types.test.ts +0 -195
- package/tsconfig.json +0 -20
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
import { configManager } from '../../../core/config/manager.js';
|
|
5
|
+
import { tokenManager } from '../../../core/auth/token-manager.js';
|
|
6
|
+
import { apiClient } from '../../../core/api/client.js';
|
|
7
|
+
export function createLibericaAuthCommand() {
|
|
8
|
+
const authCommand = new Command('auth');
|
|
9
|
+
authCommand.description('Manage Liberica authentication');
|
|
10
|
+
authCommand.action(async () => {
|
|
11
|
+
await authCommand.help();
|
|
12
|
+
});
|
|
13
|
+
authCommand
|
|
14
|
+
.command('login')
|
|
15
|
+
.description('Login to Liberica')
|
|
16
|
+
.arguments('<env> [tenant] [username] [password]')
|
|
17
|
+
.option('--env <environment>', 'Environment (dev|test|prod-cn|prod-jp)')
|
|
18
|
+
.option('--tenant <tenant>', 'Tenant name')
|
|
19
|
+
.option('--username <username>', 'Username')
|
|
20
|
+
.option('--password <password>', 'Password')
|
|
21
|
+
.action(async (env, tenant, username, password, options) => {
|
|
22
|
+
const context = configManager.getCurrentContext();
|
|
23
|
+
const environment = options.env || env || context.environment;
|
|
24
|
+
let resolvedTenant = options.tenant || tenant || context.tenant;
|
|
25
|
+
console.log(chalk.bold(`\nš Login to Liberica (${environment})\n`));
|
|
26
|
+
if (!resolvedTenant) {
|
|
27
|
+
const { tenant: inputTenant } = await inquirer.prompt([
|
|
28
|
+
{
|
|
29
|
+
type: 'input',
|
|
30
|
+
name: 'tenant',
|
|
31
|
+
message: 'Enter tenant name:',
|
|
32
|
+
validate: (input) => input.length > 0 || 'Tenant is required',
|
|
33
|
+
},
|
|
34
|
+
]);
|
|
35
|
+
resolvedTenant = inputTenant;
|
|
36
|
+
}
|
|
37
|
+
let resolvedUsername = options.username || username;
|
|
38
|
+
let resolvedPassword = options.password || password;
|
|
39
|
+
if (!resolvedUsername) {
|
|
40
|
+
const { username: inputUsername } = await inquirer.prompt([
|
|
41
|
+
{
|
|
42
|
+
type: 'input',
|
|
43
|
+
name: 'username',
|
|
44
|
+
message: 'Enter username:',
|
|
45
|
+
validate: (input) => input.length > 0 || 'Username is required',
|
|
46
|
+
},
|
|
47
|
+
]);
|
|
48
|
+
resolvedUsername = inputUsername;
|
|
49
|
+
}
|
|
50
|
+
if (!resolvedPassword) {
|
|
51
|
+
const { password: inputPassword } = await inquirer.prompt([
|
|
52
|
+
{
|
|
53
|
+
type: 'password',
|
|
54
|
+
name: 'password',
|
|
55
|
+
message: 'Enter password:',
|
|
56
|
+
validate: (input) => input.length > 0 || 'Password is required',
|
|
57
|
+
},
|
|
58
|
+
]);
|
|
59
|
+
resolvedPassword = inputPassword;
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const response = await apiClient.login('liberica', environment, resolvedTenant, resolvedUsername, resolvedPassword);
|
|
63
|
+
if (response.success && response.data) {
|
|
64
|
+
try {
|
|
65
|
+
await tokenManager.setToken({
|
|
66
|
+
service: 'liberica',
|
|
67
|
+
environment,
|
|
68
|
+
tenant: resolvedTenant,
|
|
69
|
+
}, response.data.token);
|
|
70
|
+
}
|
|
71
|
+
catch (keytarError) {
|
|
72
|
+
console.error(chalk.red(`\nā Failed to save token to keychain: ${keytarError instanceof Error ? keytarError.message : 'Unknown error'}`));
|
|
73
|
+
console.error(chalk.gray(' This may occur in headless environments without D-Bus/X11.'));
|
|
74
|
+
console.error(chalk.gray(' The login was successful but the token could not be persisted.\n'));
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
await configManager.setTenant(resolvedTenant);
|
|
78
|
+
console.log(chalk.green('\nā Login successful'));
|
|
79
|
+
if (response.data.expiresAt) {
|
|
80
|
+
console.log(chalk.gray(` Token expires: ${response.data.expiresAt}`));
|
|
81
|
+
}
|
|
82
|
+
console.log();
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
console.error(chalk.red(`\nā Login failed: ${response.error?.message || 'Unknown error'}`));
|
|
86
|
+
if (response.error?.code) {
|
|
87
|
+
console.error(chalk.gray(` Error code: ${response.error.code}`));
|
|
88
|
+
}
|
|
89
|
+
console.error();
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error(chalk.red(`\nā Login error: ${error instanceof Error ? error.message : 'Unknown error'}\n`));
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
authCommand
|
|
99
|
+
.command('status')
|
|
100
|
+
.description('Check Liberica authentication status')
|
|
101
|
+
.action(async () => {
|
|
102
|
+
const environments = ['dev', 'test', 'prod-cn', 'prod-jp'];
|
|
103
|
+
const context = configManager.getCurrentContext();
|
|
104
|
+
console.log(chalk.bold('\nš Liberica Authentication Status\n'));
|
|
105
|
+
for (const env of environments) {
|
|
106
|
+
const token = await tokenManager.getToken({ service: 'liberica', environment: env, tenant: context.tenant });
|
|
107
|
+
const statusIcon = token ? chalk.green('ā') : chalk.red('ā');
|
|
108
|
+
const statusText = token ? 'Logged in' : 'Not logged in';
|
|
109
|
+
const tenantText = context.tenant ? ` (${context.tenant})` : '';
|
|
110
|
+
console.log(` ${statusIcon} ${chalk.gray('liberica')}${tenantText} (${env}): ${statusText}`);
|
|
111
|
+
}
|
|
112
|
+
console.log();
|
|
113
|
+
});
|
|
114
|
+
authCommand
|
|
115
|
+
.command('logout')
|
|
116
|
+
.description('Logout from Liberica and clear token')
|
|
117
|
+
.option('--env <environment>', 'Environment (dev|test|prod-cn|prod-jp)')
|
|
118
|
+
.option('--all', 'Clear all Liberica tokens')
|
|
119
|
+
.action(async (options) => {
|
|
120
|
+
const context = configManager.getCurrentContext();
|
|
121
|
+
if (options.all) {
|
|
122
|
+
const allTokens = await tokenManager.findAllTokens();
|
|
123
|
+
for (const cred of allTokens) {
|
|
124
|
+
const parts = cred.account.split(':');
|
|
125
|
+
if (parts[0] === 'liberica') {
|
|
126
|
+
await tokenManager.deleteToken({
|
|
127
|
+
service: 'liberica',
|
|
128
|
+
environment: parts[1],
|
|
129
|
+
tenant: parts[2],
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
console.log(chalk.green('\nā All Liberica tokens cleared\n'));
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
const environment = options.env || context.environment;
|
|
137
|
+
const deleted = await tokenManager.deleteToken({
|
|
138
|
+
service: 'liberica',
|
|
139
|
+
environment,
|
|
140
|
+
tenant: context.tenant,
|
|
141
|
+
});
|
|
142
|
+
if (deleted) {
|
|
143
|
+
console.log(chalk.green(`\nā Token cleared for Liberica (${environment})\n`));
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
console.log(chalk.gray(`\nNo token found for Liberica (${environment})\n`));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
return authCommand;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/liberica/auth/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/liberica/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,4BAA4B,IAAI,OAAO,CAqCtD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { configManager } from '../../../core/config/manager.js';
|
|
4
|
+
import { tokenManager } from '../../../core/auth/token-manager.js';
|
|
5
|
+
export function createLibericaContextCommand() {
|
|
6
|
+
const contextCommand = new Command('context');
|
|
7
|
+
contextCommand.description('Manage Liberica context (tenant, environment)');
|
|
8
|
+
contextCommand.action(async () => {
|
|
9
|
+
await contextCommand.help();
|
|
10
|
+
});
|
|
11
|
+
contextCommand
|
|
12
|
+
.command('show')
|
|
13
|
+
.description('Show current Liberica context')
|
|
14
|
+
.action(async () => {
|
|
15
|
+
const context = configManager.getCurrentContext();
|
|
16
|
+
const token = await tokenManager.getToken({
|
|
17
|
+
service: 'liberica',
|
|
18
|
+
environment: context.environment,
|
|
19
|
+
tenant: context.tenant,
|
|
20
|
+
});
|
|
21
|
+
console.log(chalk.bold('\nš Liberica Context\n'));
|
|
22
|
+
console.log(` ${chalk.gray('Environment:')} ${chalk.green(context.environment)}`);
|
|
23
|
+
console.log(` ${chalk.gray('Tenant:')} ${chalk.green(context.tenant)}`);
|
|
24
|
+
console.log(` ${chalk.gray('Auth Status:')} ${token ? chalk.green('ā Logged in') : chalk.red('ā Not logged in')}`);
|
|
25
|
+
console.log();
|
|
26
|
+
});
|
|
27
|
+
contextCommand
|
|
28
|
+
.command('use-enterprise <tenant>')
|
|
29
|
+
.description('Switch Liberica tenant (enterprise)')
|
|
30
|
+
.action(async (tenant) => {
|
|
31
|
+
await configManager.setTenant(tenant);
|
|
32
|
+
console.log(chalk.green(`\nā Tenant set to ${tenant}\n`));
|
|
33
|
+
});
|
|
34
|
+
return contextCommand;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/liberica/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,MAAM,UAAU,4BAA4B;IAC1C,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9C,cAAc,CAAC,WAAW,CAAC,+CAA+C,CAAC,CAAC;IAE5E,cAAc,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QAC/B,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,cAAc;SACX,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,OAAO,GAAG,aAAa,CAAC,iBAAiB,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC;YACxC,OAAO,EAAE,UAAU;YACnB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CACvG,CAAC;QACF,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;IAEL,cAAc;SACX,OAAO,CAAC,yBAAyB,CAAC;SAClC,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;QAC/B,MAAM,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,MAAM,IAAI,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEL,OAAO,cAAc,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/commands/liberica/employees/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0CpC,wBAAgB,2BAA2B,IAAI,OAAO,CAwOrD"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
import { apiClient } from '../../../core/api/client.js';
|
|
5
|
+
import { configManager } from '../../../core/config/manager.js';
|
|
6
|
+
const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
7
|
+
const PHONE_REGEX = /^[\d\s\-()+]+$/;
|
|
8
|
+
const DATE_REGEX = /^\d{4}-\d{2}-\d{2}$/;
|
|
9
|
+
const SEX_REGEX = /^[MF]$/;
|
|
10
|
+
function validateFields(data) {
|
|
11
|
+
if (data.employeeEmail && !EMAIL_REGEX.test(data.employeeEmail)) {
|
|
12
|
+
return 'Invalid email format. Please provide a valid email address.';
|
|
13
|
+
}
|
|
14
|
+
if (data.employeePhone && !PHONE_REGEX.test(data.employeePhone)) {
|
|
15
|
+
return 'Invalid phone format. Phone must contain only digits, spaces, hyphens, or parentheses.';
|
|
16
|
+
}
|
|
17
|
+
if (data.employeeJoinedDate && !DATE_REGEX.test(data.employeeJoinedDate)) {
|
|
18
|
+
return 'Invalid date format. Date must be in YYYY-MM-DD format.';
|
|
19
|
+
}
|
|
20
|
+
if (data.employeeSex && !SEX_REGEX.test(data.employeeSex)) {
|
|
21
|
+
return 'Invalid sex value. Must be M or F.';
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
function formatTable(data) {
|
|
26
|
+
const lines = [];
|
|
27
|
+
lines.push(` ${chalk.gray('Name:')} ${data.employeeName}`);
|
|
28
|
+
lines.push(` ${chalk.gray('Employee No:')} ${data.employeeNo}`);
|
|
29
|
+
if (data.employeeCode)
|
|
30
|
+
lines.push(` ${chalk.gray('Code:')} ${data.employeeCode}`);
|
|
31
|
+
if (data.employeePhone)
|
|
32
|
+
lines.push(` ${chalk.gray('Phone:')} ${data.employeePhone}`);
|
|
33
|
+
if (data.employeeEmail)
|
|
34
|
+
lines.push(` ${chalk.gray('Email:')} ${data.employeeEmail}`);
|
|
35
|
+
if (data.employeeSex)
|
|
36
|
+
lines.push(` ${chalk.gray('Sex:')} ${data.employeeSex}`);
|
|
37
|
+
if (data.organizationId)
|
|
38
|
+
lines.push(` ${chalk.gray('Org ID:')} ${data.organizationId}`);
|
|
39
|
+
if (data.positionId)
|
|
40
|
+
lines.push(` ${chalk.gray('Position ID:')} ${data.positionId}`);
|
|
41
|
+
if (data.employeeJoinedDate)
|
|
42
|
+
lines.push(` ${chalk.gray('Joined Date:')} ${data.employeeJoinedDate}`);
|
|
43
|
+
return lines.join('\n');
|
|
44
|
+
}
|
|
45
|
+
export function createEmployeeCreateCommand() {
|
|
46
|
+
const cmd = new Command('create');
|
|
47
|
+
cmd.description('Create a new employee');
|
|
48
|
+
cmd
|
|
49
|
+
.option('-n, --name <name>', 'Employee name (required)')
|
|
50
|
+
.option('-c, --code <code>', 'Employee code (optional, auto-generated if empty)')
|
|
51
|
+
.option('-p, --phone <phone>', 'Phone number')
|
|
52
|
+
.option('-e, --email <email>', 'Email address')
|
|
53
|
+
.option('-s, --sex <sex>', 'Sex (M or F)')
|
|
54
|
+
.option('--org <name>', 'Organization name')
|
|
55
|
+
.option('--position <name>', 'Position name')
|
|
56
|
+
.option('-d, --joined-date <date>', 'Joined date (YYYY-MM-DD)')
|
|
57
|
+
.option('--no <no>', 'Employee number (required)')
|
|
58
|
+
.option('--dry-run', 'Preview without making API call')
|
|
59
|
+
.option('--json', 'Output as JSON');
|
|
60
|
+
cmd.action(async () => {
|
|
61
|
+
const context = configManager.getCurrentContext();
|
|
62
|
+
const opts = cmd.opts();
|
|
63
|
+
let name = opts.name;
|
|
64
|
+
let no = opts.no || opts['no'];
|
|
65
|
+
const code = opts.code;
|
|
66
|
+
const phone = opts.phone;
|
|
67
|
+
const email = opts.email;
|
|
68
|
+
const sex = opts.sex;
|
|
69
|
+
const orgName = opts.org;
|
|
70
|
+
const positionName = opts.position;
|
|
71
|
+
const joinedDate = opts.joinedDate;
|
|
72
|
+
const dryRun = opts.dryRun === true;
|
|
73
|
+
const jsonOutput = opts.json === true;
|
|
74
|
+
if (!name) {
|
|
75
|
+
const { inputName } = await inquirer.prompt([
|
|
76
|
+
{
|
|
77
|
+
type: 'input',
|
|
78
|
+
name: 'inputName',
|
|
79
|
+
message: 'Enter employee name:',
|
|
80
|
+
validate: (input) => input.trim().length > 0 || 'Employee name is required',
|
|
81
|
+
},
|
|
82
|
+
]);
|
|
83
|
+
name = inputName;
|
|
84
|
+
}
|
|
85
|
+
if (!no) {
|
|
86
|
+
const { inputNo } = await inquirer.prompt([
|
|
87
|
+
{
|
|
88
|
+
type: 'input',
|
|
89
|
+
name: 'inputNo',
|
|
90
|
+
message: 'Enter employee number:',
|
|
91
|
+
validate: (input) => input.trim().length > 0 || 'Employee number is required',
|
|
92
|
+
},
|
|
93
|
+
]);
|
|
94
|
+
no = inputNo;
|
|
95
|
+
}
|
|
96
|
+
let resolvedCode = code;
|
|
97
|
+
if (!resolvedCode) {
|
|
98
|
+
const codeResponse = await apiClient.getCodeByType(context.environment, context.tenant, 'TenantEmployeeCode');
|
|
99
|
+
if (codeResponse.success && codeResponse.data) {
|
|
100
|
+
resolvedCode = codeResponse.data;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
let resolvedOrgId;
|
|
104
|
+
if (orgName) {
|
|
105
|
+
const orgResponse = await apiClient.getOrgListName(context.environment, context.tenant);
|
|
106
|
+
if (!orgResponse.success || !orgResponse.data) {
|
|
107
|
+
const errMsg = orgResponse.error?.message || 'Failed to fetch organization list';
|
|
108
|
+
if (jsonOutput) {
|
|
109
|
+
console.log(JSON.stringify({ success: false, error: { code: orgResponse.error?.code || 'FETCH_ORG_ERROR', message: errMsg } }));
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
console.error(chalk.red(`\nā ${errMsg}\n`));
|
|
113
|
+
}
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
const found = orgResponse.data.find((o) => o.name === orgName);
|
|
117
|
+
if (!found) {
|
|
118
|
+
const errMsg = `Organization '${orgName}' not found`;
|
|
119
|
+
if (jsonOutput) {
|
|
120
|
+
console.log(JSON.stringify({ success: false, error: { code: 'ORG_NOT_FOUND', message: errMsg } }));
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
console.error(chalk.red(`\nā ${errMsg}\n`));
|
|
124
|
+
}
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
resolvedOrgId = found.id;
|
|
128
|
+
}
|
|
129
|
+
let resolvedPositionId;
|
|
130
|
+
if (positionName) {
|
|
131
|
+
const posResponse = await apiClient.listPositions(context.environment, context.tenant);
|
|
132
|
+
if (!posResponse.success || !posResponse.data) {
|
|
133
|
+
const errMsg = posResponse.error?.message || 'Failed to fetch position list';
|
|
134
|
+
if (jsonOutput) {
|
|
135
|
+
console.log(JSON.stringify({ success: false, error: { code: posResponse.error?.code || 'FETCH_POSITION_ERROR', message: errMsg } }));
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
console.error(chalk.red(`\nā ${errMsg}\n`));
|
|
139
|
+
}
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
const found = posResponse.data.find((p) => p.name === positionName);
|
|
143
|
+
if (!found) {
|
|
144
|
+
const errMsg = `Position '${positionName}' not found`;
|
|
145
|
+
if (jsonOutput) {
|
|
146
|
+
console.log(JSON.stringify({ success: false, error: { code: 'POSITION_NOT_FOUND', message: errMsg } }));
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
console.error(chalk.red(`\nā ${errMsg}\n`));
|
|
150
|
+
}
|
|
151
|
+
process.exit(1);
|
|
152
|
+
}
|
|
153
|
+
resolvedPositionId = found.id;
|
|
154
|
+
}
|
|
155
|
+
const data = {
|
|
156
|
+
employeeName: name,
|
|
157
|
+
employeeNo: no,
|
|
158
|
+
employeeCode: resolvedCode,
|
|
159
|
+
employeePhone: phone,
|
|
160
|
+
employeeEmail: email,
|
|
161
|
+
employeeSex: sex,
|
|
162
|
+
organizationId: resolvedOrgId,
|
|
163
|
+
positionId: resolvedPositionId,
|
|
164
|
+
employeeJoinedDate: joinedDate,
|
|
165
|
+
};
|
|
166
|
+
const validationError = validateFields(data);
|
|
167
|
+
if (validationError) {
|
|
168
|
+
if (jsonOutput) {
|
|
169
|
+
console.log(JSON.stringify({ success: false, error: { code: 'VALIDATION_ERROR', message: validationError } }));
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
console.error(chalk.red(`\nā Validation error: ${validationError}\n`));
|
|
173
|
+
}
|
|
174
|
+
process.exit(1);
|
|
175
|
+
}
|
|
176
|
+
if (dryRun) {
|
|
177
|
+
if (jsonOutput) {
|
|
178
|
+
console.log(JSON.stringify({ success: true, dryRun: true, data }));
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
console.log(chalk.bold('\nš Dry-Run Mode: No changes will be made\n'));
|
|
182
|
+
console.log(' Employee to be created:');
|
|
183
|
+
console.log(formatTable(data));
|
|
184
|
+
console.log();
|
|
185
|
+
}
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const requestData = {
|
|
189
|
+
employeeName: data.employeeName,
|
|
190
|
+
employeeNo: data.employeeNo,
|
|
191
|
+
employeeCode: data.employeeCode,
|
|
192
|
+
employeePhone: data.employeePhone,
|
|
193
|
+
employeeEmail: data.employeeEmail,
|
|
194
|
+
employeeSex: data.employeeSex,
|
|
195
|
+
organizationId: data.organizationId,
|
|
196
|
+
positionId: data.positionId,
|
|
197
|
+
employeeJoinedDate: data.employeeJoinedDate,
|
|
198
|
+
};
|
|
199
|
+
if (!jsonOutput) {
|
|
200
|
+
console.log(chalk.bold('\nš Creating Employee\n'));
|
|
201
|
+
}
|
|
202
|
+
const response = await apiClient.createEmployee(context.environment, context.tenant, requestData);
|
|
203
|
+
if (!response.success) {
|
|
204
|
+
const errorMsg = response.error?.message || 'Failed to create employee';
|
|
205
|
+
const errorCode = response.error?.code || 'CREATE_EMPLOYEE_ERROR';
|
|
206
|
+
if (jsonOutput) {
|
|
207
|
+
console.log(JSON.stringify({ success: false, error: { code: errorCode, message: errorMsg } }));
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
console.error(chalk.red(`\nā Failed to create employee: ${errorMsg}`));
|
|
211
|
+
if (response.error?.code) {
|
|
212
|
+
console.error(chalk.gray(` Error code: ${response.error.code}`));
|
|
213
|
+
}
|
|
214
|
+
console.error();
|
|
215
|
+
}
|
|
216
|
+
process.exit(1);
|
|
217
|
+
}
|
|
218
|
+
if (response.success) {
|
|
219
|
+
const emp = response.data;
|
|
220
|
+
if (jsonOutput) {
|
|
221
|
+
console.log(JSON.stringify({ success: true, data: emp }));
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
console.log(chalk.green('ā Employee created successfully\n'));
|
|
225
|
+
if (emp?.employeeId)
|
|
226
|
+
console.log(` ${chalk.gray('Employee ID:')} ${chalk.green(String(emp.employeeId))}`);
|
|
227
|
+
if (emp?.employeeName)
|
|
228
|
+
console.log(` ${chalk.gray('Name:')} ${emp.employeeName}`);
|
|
229
|
+
if (emp?.employeeNo)
|
|
230
|
+
console.log(` ${chalk.gray('Employee No:')} ${emp.employeeNo}`);
|
|
231
|
+
if (emp?.employeeCode)
|
|
232
|
+
console.log(` ${chalk.gray('Code:')} ${emp.employeeCode}`);
|
|
233
|
+
if (emp?.orgName)
|
|
234
|
+
console.log(` ${chalk.gray('Organization:')} ${emp.orgName}`);
|
|
235
|
+
if (emp?.positionName)
|
|
236
|
+
console.log(` ${chalk.gray('Position:')} ${emp.positionName}`);
|
|
237
|
+
if (emp?.statusFlag !== undefined) {
|
|
238
|
+
const statusText = emp.statusFlag === 1 ? 'Enabled' : 'Disabled';
|
|
239
|
+
console.log(` ${chalk.gray('Status:')} ${chalk.green(statusText)}`);
|
|
240
|
+
}
|
|
241
|
+
console.log();
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
const errorMsg = response.error?.message || 'Failed to create employee';
|
|
246
|
+
const errorCode = response.error?.code || 'CREATE_EMPLOYEE_ERROR';
|
|
247
|
+
if (jsonOutput) {
|
|
248
|
+
console.log(JSON.stringify({ success: false, error: { code: errorCode, message: errorMsg } }));
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
console.error(chalk.red(`\nā Failed to create employee: ${errorMsg}`));
|
|
252
|
+
if (response.error?.code) {
|
|
253
|
+
console.error(chalk.gray(` Error code: ${response.error.code}`));
|
|
254
|
+
}
|
|
255
|
+
console.error();
|
|
256
|
+
}
|
|
257
|
+
process.exit(1);
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
return cmd;
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/liberica/employees/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../../src/commands/liberica/employees/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,2BAA2B,IAAI,OAAO,CAiHrD"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
import { configManager } from '../../../core/config/manager.js';
|
|
5
|
+
import { apiClient } from '../../../core/api/client.js';
|
|
6
|
+
export function createEmployeeDeleteCommand() {
|
|
7
|
+
const deleteCommand = new Command('delete');
|
|
8
|
+
deleteCommand
|
|
9
|
+
.description('Delete an employee')
|
|
10
|
+
.argument('<id>', 'Employee ID')
|
|
11
|
+
.option('--force', 'Skip confirmation prompt')
|
|
12
|
+
.option('--dry-run', 'Preview the operation without executing')
|
|
13
|
+
.option('--json', 'Output as JSON')
|
|
14
|
+
.action(async (id, options) => {
|
|
15
|
+
const context = configManager.getCurrentContext();
|
|
16
|
+
const environment = context.environment;
|
|
17
|
+
const tenant = context.tenant;
|
|
18
|
+
const jsonOutput = options.json === true;
|
|
19
|
+
const employeeId = id;
|
|
20
|
+
if (!jsonOutput) {
|
|
21
|
+
console.log(chalk.bold(`\nšļø Delete Employee (${environment})\n`));
|
|
22
|
+
console.log(chalk.gray(` Employee ID: ${employeeId}`));
|
|
23
|
+
}
|
|
24
|
+
if (options.dryRun) {
|
|
25
|
+
if (jsonOutput) {
|
|
26
|
+
console.log(JSON.stringify({ success: true, dryRun: true, employeeId }));
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
console.log(chalk.cyan('\nš Dry-Run Mode: No actual API call will be made\n'));
|
|
30
|
+
console.log(chalk.gray(' This operation will delete the employee.'));
|
|
31
|
+
console.log();
|
|
32
|
+
}
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
let employee;
|
|
36
|
+
try {
|
|
37
|
+
const employeeResponse = await apiClient.getEmployee(environment, tenant, employeeId);
|
|
38
|
+
if (!employeeResponse.success || !employeeResponse.data) {
|
|
39
|
+
const errMsg = `Employee not found: ${employeeId}`;
|
|
40
|
+
if (jsonOutput) {
|
|
41
|
+
console.log(JSON.stringify({ success: false, error: { code: 'NOT_FOUND', message: errMsg } }));
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.error(chalk.red(`\nā ${errMsg}\n`));
|
|
45
|
+
}
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
employee = employeeResponse.data;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
const errMsg = error instanceof Error ? error.message : 'Unknown error';
|
|
52
|
+
if (jsonOutput) {
|
|
53
|
+
console.log(JSON.stringify({ success: false, error: { code: 'FETCH_ERROR', message: `Failed to fetch employee: ${errMsg}` } }));
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.error(chalk.red(`\nā Failed to fetch employee: ${errMsg}\n`));
|
|
57
|
+
}
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
if (!options.force) {
|
|
61
|
+
if (!jsonOutput) {
|
|
62
|
+
console.log(chalk.gray(` Name: ${employee.employeeName}`));
|
|
63
|
+
console.log(chalk.gray(` Code: ${employee.employeeNo}`));
|
|
64
|
+
}
|
|
65
|
+
const { confirm } = await inquirer.prompt([
|
|
66
|
+
{
|
|
67
|
+
type: 'confirm',
|
|
68
|
+
name: 'confirm',
|
|
69
|
+
message: `Delete employee "${employee.employeeName}"? This action cannot be undone.`,
|
|
70
|
+
default: false,
|
|
71
|
+
},
|
|
72
|
+
]);
|
|
73
|
+
if (!confirm) {
|
|
74
|
+
if (!jsonOutput) {
|
|
75
|
+
console.log(chalk.gray('\n Operation cancelled.\n'));
|
|
76
|
+
}
|
|
77
|
+
process.exit(0);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
const response = await apiClient.deleteEmployee(environment, tenant, employeeId);
|
|
82
|
+
if (response.success) {
|
|
83
|
+
if (jsonOutput) {
|
|
84
|
+
console.log(JSON.stringify({ success: true, employeeId, name: employee.employeeName }));
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
console.log(chalk.green(`\nā Employee "${employee.employeeName}" (ID: ${employeeId}) deleted\n`));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const errorMsg = response.error?.message || 'Unknown error';
|
|
92
|
+
const errorCode = response.error?.code || 'DELETE_ERROR';
|
|
93
|
+
if (jsonOutput) {
|
|
94
|
+
console.log(JSON.stringify({ success: false, error: { code: errorCode, message: errorMsg } }));
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
console.error(chalk.red(`\nā Failed to delete employee: ${errorMsg}`));
|
|
98
|
+
if (response.error?.code) {
|
|
99
|
+
console.error(chalk.gray(` Error code: ${response.error.code}`));
|
|
100
|
+
}
|
|
101
|
+
console.error();
|
|
102
|
+
}
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
const errMsg = error instanceof Error ? error.message : 'Unknown error';
|
|
108
|
+
if (jsonOutput) {
|
|
109
|
+
console.log(JSON.stringify({ success: false, error: { code: 'ERROR', message: errMsg } }));
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
console.error(chalk.red(`\nā Error: ${errMsg}\n`));
|
|
113
|
+
}
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
return deleteCommand;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../../src/commands/liberica/employees/delete.ts"],"names":[],"mappings":"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"}
|