@klarocards/cli 1.0.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.
- package/README.md +125 -0
- package/dist/commands/cheatsheet.d.ts +3 -0
- package/dist/commands/cheatsheet.d.ts.map +1 -0
- package/dist/commands/cheatsheet.js +80 -0
- package/dist/commands/cheatsheet.js.map +1 -0
- package/dist/commands/completion.d.ts +3 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +191 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +77 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/create.d.ts +3 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +121 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/del.d.ts +3 -0
- package/dist/commands/del.d.ts.map +1 -0
- package/dist/commands/del.js +49 -0
- package/dist/commands/del.js.map +1 -0
- package/dist/commands/describe.d.ts +3 -0
- package/dist/commands/describe.d.ts.map +1 -0
- package/dist/commands/describe.js +105 -0
- package/dist/commands/describe.js.map +1 -0
- package/dist/commands/edit.d.ts +3 -0
- package/dist/commands/edit.d.ts.map +1 -0
- package/dist/commands/edit.js +91 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/fetch.d.ts +3 -0
- package/dist/commands/fetch.d.ts.map +1 -0
- package/dist/commands/fetch.js +129 -0
- package/dist/commands/fetch.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +122 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +7 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +101 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +3 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +34 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/ls.d.ts +3 -0
- package/dist/commands/ls.d.ts.map +1 -0
- package/dist/commands/ls.js +174 -0
- package/dist/commands/ls.js.map +1 -0
- package/dist/commands/read.d.ts +3 -0
- package/dist/commands/read.d.ts.map +1 -0
- package/dist/commands/read.js +64 -0
- package/dist/commands/read.js.map +1 -0
- package/dist/commands/set.d.ts +3 -0
- package/dist/commands/set.d.ts.map +1 -0
- package/dist/commands/set.js +61 -0
- package/dist/commands/set.js.map +1 -0
- package/dist/commands/sync.d.ts +3 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +157 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/update.d.ts +4 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +68 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/use.d.ts +3 -0
- package/dist/commands/use.d.ts.map +1 -0
- package/dist/commands/use.js +29 -0
- package/dist/commands/use.js.map +1 -0
- package/dist/commands/whoami.d.ts +3 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +30 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/completions/bash.d.ts +2 -0
- package/dist/completions/bash.d.ts.map +1 -0
- package/dist/completions/bash.js +134 -0
- package/dist/completions/bash.js.map +1 -0
- package/dist/completions/commands.d.ts +18 -0
- package/dist/completions/commands.d.ts.map +1 -0
- package/dist/completions/commands.js +173 -0
- package/dist/completions/commands.js.map +1 -0
- package/dist/completions/fish.d.ts +2 -0
- package/dist/completions/fish.d.ts.map +1 -0
- package/dist/completions/fish.js +84 -0
- package/dist/completions/fish.js.map +1 -0
- package/dist/completions/zsh.d.ts +2 -0
- package/dist/completions/zsh.d.ts.map +1 -0
- package/dist/completions/zsh.js +113 -0
- package/dist/completions/zsh.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +158 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +34 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +146 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/completion-cache.d.ts +34 -0
- package/dist/lib/completion-cache.d.ts.map +1 -0
- package/dist/lib/completion-cache.js +99 -0
- package/dist/lib/completion-cache.js.map +1 -0
- package/dist/lib/config.d.ts +12 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +111 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/connector.d.ts +17 -0
- package/dist/lib/connector.d.ts.map +1 -0
- package/dist/lib/connector.js +2 -0
- package/dist/lib/connector.js.map +1 -0
- package/dist/lib/defaults.d.ts +9 -0
- package/dist/lib/defaults.d.ts.map +1 -0
- package/dist/lib/defaults.js +58 -0
- package/dist/lib/defaults.js.map +1 -0
- package/dist/lib/trace.d.ts +4 -0
- package/dist/lib/trace.d.ts.map +1 -0
- package/dist/lib/trace.js +13 -0
- package/dist/lib/trace.js.map +1 -0
- package/dist/lib/types.d.ts +70 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/utils/content.d.ts +26 -0
- package/dist/utils/content.d.ts.map +1 -0
- package/dist/utils/content.js +52 -0
- package/dist/utils/content.js.map +1 -0
- package/dist/utils/dimensions.d.ts +17 -0
- package/dist/utils/dimensions.d.ts.map +1 -0
- package/dist/utils/dimensions.js +41 -0
- package/dist/utils/dimensions.js.map +1 -0
- package/dist/utils/editor.d.ts +14 -0
- package/dist/utils/editor.d.ts.map +1 -0
- package/dist/utils/editor.js +56 -0
- package/dist/utils/editor.js.map +1 -0
- package/dist/utils/format.d.ts +17 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +27 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/markdown.d.ts +24 -0
- package/dist/utils/markdown.d.ts.map +1 -0
- package/dist/utils/markdown.js +50 -0
- package/dist/utils/markdown.js.map +1 -0
- package/dist/utils/objects.d.ts +12 -0
- package/dist/utils/objects.d.ts.map +1 -0
- package/dist/utils/objects.js +31 -0
- package/dist/utils/objects.js.map +1 -0
- package/dist/utils/slugify.d.ts +10 -0
- package/dist/utils/slugify.d.ts.map +1 -0
- package/dist/utils/slugify.js +18 -0
- package/dist/utils/slugify.js.map +1 -0
- package/dist/utils/story-editor.d.ts +15 -0
- package/dist/utils/story-editor.d.ts.map +1 -0
- package/dist/utils/story-editor.js +43 -0
- package/dist/utils/story-editor.js.map +1 -0
- package/dist/utils/story-markdown.d.ts +36 -0
- package/dist/utils/story-markdown.d.ts.map +1 -0
- package/dist/utils/story-markdown.js +114 -0
- package/dist/utils/story-markdown.js.map +1 -0
- package/dist/utils/table.d.ts +18 -0
- package/dist/utils/table.d.ts.map +1 -0
- package/dist/utils/table.js +57 -0
- package/dist/utils/table.js.map +1 -0
- package/dist/utils/validation.d.ts +8 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +17 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { createInterface } from 'node:readline';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { KlaroApi, KlaroApiError } from '../lib/api.js';
|
|
4
|
+
import { readConfig, writeConfig } from '../lib/config.js';
|
|
5
|
+
async function prompt(question, hidden = false) {
|
|
6
|
+
if (hidden && process.stdin.isTTY) {
|
|
7
|
+
return new Promise((resolve) => {
|
|
8
|
+
process.stdout.write(question);
|
|
9
|
+
let input = '';
|
|
10
|
+
process.stdin.setRawMode(true);
|
|
11
|
+
process.stdin.resume();
|
|
12
|
+
process.stdin.setEncoding('utf8');
|
|
13
|
+
const onData = (char) => {
|
|
14
|
+
if (char === '\n' || char === '\r' || char === '\u0004') {
|
|
15
|
+
process.stdin.setRawMode(false);
|
|
16
|
+
process.stdin.pause();
|
|
17
|
+
process.stdin.removeListener('data', onData);
|
|
18
|
+
process.stdout.write('\n');
|
|
19
|
+
resolve(input);
|
|
20
|
+
}
|
|
21
|
+
else if (char === '\u0003') {
|
|
22
|
+
process.stdin.setRawMode(false);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
else if (char === '\u007F' || char === '\b') {
|
|
26
|
+
if (input.length > 0) {
|
|
27
|
+
input = input.slice(0, -1);
|
|
28
|
+
process.stdout.write('\b \b');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
input += char;
|
|
33
|
+
process.stdout.write('*');
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
process.stdin.on('data', onData);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
const rl = createInterface({
|
|
40
|
+
input: process.stdin,
|
|
41
|
+
output: process.stdout,
|
|
42
|
+
});
|
|
43
|
+
return new Promise((resolve) => {
|
|
44
|
+
rl.question(question, (answer) => {
|
|
45
|
+
rl.close();
|
|
46
|
+
resolve(answer);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
export function credentialsFromEnv() {
|
|
51
|
+
const email = process.env.KLARO_LOGIN;
|
|
52
|
+
const password = process.env.KLARO_PASSWORD;
|
|
53
|
+
if (!email || !password) {
|
|
54
|
+
console.error('KLARO_LOGIN and KLARO_PASSWORD environment variables are required when using --env.');
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
return { email, password };
|
|
58
|
+
}
|
|
59
|
+
async function loginAction(options) {
|
|
60
|
+
let email;
|
|
61
|
+
let password;
|
|
62
|
+
if (options.env) {
|
|
63
|
+
({ email, password } = credentialsFromEnv());
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
email = await prompt('Email: ');
|
|
67
|
+
password = await prompt('Password: ', true);
|
|
68
|
+
}
|
|
69
|
+
if (!email || !password) {
|
|
70
|
+
console.error('Email and password are required.');
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
console.log('Logging in...');
|
|
75
|
+
const api = new KlaroApi('app'); // subdomain not needed for login
|
|
76
|
+
const result = await api.login(email, password);
|
|
77
|
+
const config = readConfig();
|
|
78
|
+
config.token = result.access_token;
|
|
79
|
+
config.email = email;
|
|
80
|
+
writeConfig(config);
|
|
81
|
+
const expiresInDays = Math.round(result.expires_in / 86400);
|
|
82
|
+
console.log(`Successfully logged in as ${email}`);
|
|
83
|
+
console.log(`Token expires in ${expiresInDays} days`);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
if (error instanceof KlaroApiError) {
|
|
87
|
+
console.error(`Login failed: ${error.message}`);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
console.error('Login failed: An unexpected error occurred');
|
|
91
|
+
}
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export function createLoginCommand() {
|
|
96
|
+
return new Command('login')
|
|
97
|
+
.description('Login to Klaro Cards')
|
|
98
|
+
.option('--env', 'Read credentials from KLARO_LOGIN and KLARO_PASSWORD environment variables')
|
|
99
|
+
.action(loginAction);
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC,wBAAgB,mBAAmB,IAAI,OAAO,CAI7C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { KlaroApi, KlaroApiError } from '../lib/api.js';
|
|
3
|
+
import { readConfig, writeConfig, getToken } from '../lib/config.js';
|
|
4
|
+
async function logoutAction() {
|
|
5
|
+
const token = getToken();
|
|
6
|
+
if (!token) {
|
|
7
|
+
console.log('Not logged in.');
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
try {
|
|
11
|
+
const api = new KlaroApi('app', token);
|
|
12
|
+
await api.logout();
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
if (error instanceof KlaroApiError) {
|
|
16
|
+
console.error(`Failed to invalidate token: ${error.message}`);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
console.error('Failed to invalidate token: An unexpected error occurred');
|
|
20
|
+
}
|
|
21
|
+
// Still clear local config even if server call fails
|
|
22
|
+
}
|
|
23
|
+
const config = readConfig();
|
|
24
|
+
delete config.token;
|
|
25
|
+
delete config.email;
|
|
26
|
+
writeConfig(config);
|
|
27
|
+
console.log('Logged out successfully.');
|
|
28
|
+
}
|
|
29
|
+
export function createLogoutCommand() {
|
|
30
|
+
return new Command('logout')
|
|
31
|
+
.description('Logout from Klaro Cards')
|
|
32
|
+
.action(logoutAction);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAErE,KAAK,UAAU,YAAY;IACzB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC5E,CAAC;QACD,qDAAqD;IACvD,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC,KAAK,CAAC;IACpB,OAAO,MAAM,CAAC,KAAK,CAAC;IACpB,WAAW,CAAC,MAAM,CAAC,CAAC;IAEpB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2LpC,wBAAgB,eAAe,IAAI,OAAO,CAUzC"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { createClient, KlaroApiError } from '../lib/api.js';
|
|
4
|
+
import { requireProject, requireToken } from '../lib/config.js';
|
|
5
|
+
import { resolveBoard, resolveDims } from '../lib/defaults.js';
|
|
6
|
+
import { parseDimensions } from '../utils/dimensions.js';
|
|
7
|
+
import { formatDimensionValues } from '../utils/format.js';
|
|
8
|
+
import { printTable } from '../utils/table.js';
|
|
9
|
+
async function lsCardsAction(options, command) {
|
|
10
|
+
try {
|
|
11
|
+
const globalOpts = command.optsWithGlobals();
|
|
12
|
+
const project = requireProject(globalOpts.project);
|
|
13
|
+
const token = requireToken();
|
|
14
|
+
const board = resolveBoard(globalOpts.board ?? options.board, project);
|
|
15
|
+
const dims = resolveDims(globalOpts.dims ?? options.dims, project);
|
|
16
|
+
const limit = options.limit ? parseInt(options.limit, 10) : 20;
|
|
17
|
+
const filters = parseDimensions(options.filter);
|
|
18
|
+
const api = createClient(project, token);
|
|
19
|
+
const stories = await api.listStories(board, { limit, filters });
|
|
20
|
+
if (stories.length === 0) {
|
|
21
|
+
console.log(`No cards found in board ${board}.`);
|
|
22
|
+
const dimExample = dims
|
|
23
|
+
? ' ' + dims.split(',').map(d => `${d.trim()}=value`).join(' ')
|
|
24
|
+
: '';
|
|
25
|
+
console.log(chalk.cyan(`\n💡 Hint: klaro create "My first card"${dimExample}`));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Default columns plus any user-specified dims columns
|
|
29
|
+
const columns = ['identifier', 'title'];
|
|
30
|
+
if (dims) {
|
|
31
|
+
columns.push(...dims.split(',').map(d => d.trim()));
|
|
32
|
+
}
|
|
33
|
+
printTable(stories, columns);
|
|
34
|
+
console.log(`\nShowing ${stories.length} card(s) in board ${board}`);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
if (error instanceof KlaroApiError) {
|
|
38
|
+
console.error(`Error: ${error.message}`);
|
|
39
|
+
}
|
|
40
|
+
else if (error instanceof Error) {
|
|
41
|
+
console.error(`Error: ${error.message}`);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.error('An unexpected error occurred');
|
|
45
|
+
}
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async function lsProjectsAction(_options, command) {
|
|
50
|
+
try {
|
|
51
|
+
const globalOpts = command.optsWithGlobals();
|
|
52
|
+
const project = requireProject(globalOpts.project);
|
|
53
|
+
const token = requireToken();
|
|
54
|
+
const api = createClient(project, token);
|
|
55
|
+
const projects = await api.listProjects();
|
|
56
|
+
if (projects.length === 0) {
|
|
57
|
+
console.log('No projects found.');
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const columns = ['subdomain', 'name'];
|
|
61
|
+
printTable(projects, columns);
|
|
62
|
+
console.log(`\nShowing ${projects.length} project(s)`);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (error instanceof KlaroApiError) {
|
|
66
|
+
console.error(`Error: ${error.message}`);
|
|
67
|
+
}
|
|
68
|
+
else if (error instanceof Error) {
|
|
69
|
+
console.error(`Error: ${error.message}`);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
console.error('An unexpected error occurred');
|
|
73
|
+
}
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function lsBoardsAction(_options, command) {
|
|
78
|
+
try {
|
|
79
|
+
const globalOpts = command.optsWithGlobals();
|
|
80
|
+
const project = requireProject(globalOpts.project);
|
|
81
|
+
const token = requireToken();
|
|
82
|
+
const api = createClient(project, token);
|
|
83
|
+
const boards = await api.listBoards();
|
|
84
|
+
if (boards.length === 0) {
|
|
85
|
+
console.log('No boards found.');
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const columns = ['location', 'label'];
|
|
89
|
+
printTable(boards, columns);
|
|
90
|
+
console.log(`\nShowing ${boards.length} board(s)`);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
if (error instanceof KlaroApiError) {
|
|
94
|
+
console.error(`Error: ${error.message}`);
|
|
95
|
+
}
|
|
96
|
+
else if (error instanceof Error) {
|
|
97
|
+
console.error(`Error: ${error.message}`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
console.error('An unexpected error occurred');
|
|
101
|
+
}
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const HIDDEN_DIMENSIONS = ['identifier', 'title', 'specification'];
|
|
106
|
+
async function lsDimensionsAction(_options, command) {
|
|
107
|
+
try {
|
|
108
|
+
const globalOpts = command.optsWithGlobals();
|
|
109
|
+
const project = requireProject(globalOpts.project);
|
|
110
|
+
const token = requireToken();
|
|
111
|
+
const api = createClient(project, token);
|
|
112
|
+
const allDimensions = await api.listDimensions();
|
|
113
|
+
const dimensions = allDimensions.filter(d => !HIDDEN_DIMENSIONS.includes(d.code));
|
|
114
|
+
if (dimensions.length === 0) {
|
|
115
|
+
console.log('No dimensions found.');
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
// Format values for display
|
|
119
|
+
const dimensionsWithValues = dimensions.map(dim => ({
|
|
120
|
+
...dim,
|
|
121
|
+
values: formatDimensionValues(dim.values),
|
|
122
|
+
}));
|
|
123
|
+
const columns = ['code', 'name', 'datatype', 'values'];
|
|
124
|
+
printTable(dimensionsWithValues, columns);
|
|
125
|
+
console.log(`\nShowing ${dimensions.length} dimension(s)`);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
if (error instanceof KlaroApiError) {
|
|
129
|
+
console.error(`Error: ${error.message}`);
|
|
130
|
+
}
|
|
131
|
+
else if (error instanceof Error) {
|
|
132
|
+
console.error(`Error: ${error.message}`);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
console.error('An unexpected error occurred');
|
|
136
|
+
}
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function createCardsSubcommand(isDefault = false) {
|
|
141
|
+
const cmd = new Command('cards')
|
|
142
|
+
.description('List cards in a board' + (isDefault ? ' (default)' : ''))
|
|
143
|
+
.option('-b, --board <board>', 'Board identifier (default: "all")')
|
|
144
|
+
.option('-l, --limit <number>', 'Maximum number of cards to show', '20')
|
|
145
|
+
.option('--dims <columns>', 'Dimensions to include (comma-separated)')
|
|
146
|
+
.option('-f, --filter <key=value>', 'Filter cards (can be used multiple times)', (value, previous) => previous.concat([value]), [])
|
|
147
|
+
.action(lsCardsAction);
|
|
148
|
+
return cmd;
|
|
149
|
+
}
|
|
150
|
+
function createProjectsSubcommand() {
|
|
151
|
+
return new Command('projects')
|
|
152
|
+
.description('List projects')
|
|
153
|
+
.action(lsProjectsAction);
|
|
154
|
+
}
|
|
155
|
+
function createBoardsSubcommand() {
|
|
156
|
+
return new Command('boards')
|
|
157
|
+
.description('List boards')
|
|
158
|
+
.action(lsBoardsAction);
|
|
159
|
+
}
|
|
160
|
+
function createDimensionsSubcommand() {
|
|
161
|
+
return new Command('dimensions')
|
|
162
|
+
.description('List dimensions')
|
|
163
|
+
.action(lsDimensionsAction);
|
|
164
|
+
}
|
|
165
|
+
export function createLsCommand() {
|
|
166
|
+
const cmd = new Command('ls')
|
|
167
|
+
.description('List cards, projects, boards, or dimensions');
|
|
168
|
+
cmd.addCommand(createCardsSubcommand(true), { isDefault: true });
|
|
169
|
+
cmd.addCommand(createProjectsSubcommand());
|
|
170
|
+
cmd.addCommand(createBoardsSubcommand());
|
|
171
|
+
cmd.addCommand(createDimensionsSubcommand());
|
|
172
|
+
return cmd;
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=ls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgEpC,wBAAgB,iBAAiB,IAAI,OAAO,CAQ3C"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { createClient, KlaroApiError } from '../lib/api.js';
|
|
3
|
+
import { requireProject, requireToken } from '../lib/config.js';
|
|
4
|
+
import { resolveBoard, resolveDims } from '../lib/defaults.js';
|
|
5
|
+
import { renderMarkdownWithFrontmatter } from '../utils/markdown.js';
|
|
6
|
+
import { formatStoryMarkdown } from '../utils/story-markdown.js';
|
|
7
|
+
async function readAction(identifiers, options, command) {
|
|
8
|
+
try {
|
|
9
|
+
if (identifiers.length === 0) {
|
|
10
|
+
console.error('Error: At least one identifier is required');
|
|
11
|
+
process.exit(1);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const numericIds = identifiers.map(id => {
|
|
15
|
+
const num = parseInt(id, 10);
|
|
16
|
+
if (isNaN(num)) {
|
|
17
|
+
throw new Error(`Invalid identifier "${id}": must be a number`);
|
|
18
|
+
}
|
|
19
|
+
return num;
|
|
20
|
+
});
|
|
21
|
+
const globalOpts = command.optsWithGlobals();
|
|
22
|
+
const project = requireProject(globalOpts.project);
|
|
23
|
+
const token = requireToken();
|
|
24
|
+
const board = resolveBoard(globalOpts.board ?? options.board, project);
|
|
25
|
+
const api = createClient(project, token);
|
|
26
|
+
const stories = await api.getStories(board, numericIds);
|
|
27
|
+
if (stories.length === 0) {
|
|
28
|
+
console.error('No cards found with the specified identifier(s)');
|
|
29
|
+
process.exit(1);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// Output each story as markdown
|
|
33
|
+
const dimsOpt = resolveDims(globalOpts.dims ?? options.dims, project);
|
|
34
|
+
const dimensions = dimsOpt?.split(',').map((d) => d.trim());
|
|
35
|
+
const parts = stories.map(s => {
|
|
36
|
+
const md = formatStoryMarkdown(s, dimensions);
|
|
37
|
+
return renderMarkdownWithFrontmatter(md, options.raw ?? false);
|
|
38
|
+
});
|
|
39
|
+
const output = parts.join('\n---\n\n');
|
|
40
|
+
process.stdout.write(output);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (error instanceof KlaroApiError) {
|
|
44
|
+
console.error(`Error: ${error.message}`);
|
|
45
|
+
}
|
|
46
|
+
else if (error instanceof Error) {
|
|
47
|
+
console.error(`Error: ${error.message}`);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
console.error('An unexpected error occurred');
|
|
51
|
+
}
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export function createReadCommand() {
|
|
56
|
+
return new Command('read')
|
|
57
|
+
.description('Read one or more cards and display as markdown')
|
|
58
|
+
.argument('<identifiers...>', 'Card identifier(s) to read')
|
|
59
|
+
.option('-b, --board <board>', 'Board identifier (default: "all")')
|
|
60
|
+
.option('--dims <dimensions>', 'Dimensions to include (comma-separated)')
|
|
61
|
+
.option('--raw', 'Output raw markdown without highlighting')
|
|
62
|
+
.action(readAction);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/commands/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8DpC,wBAAgB,gBAAgB,IAAI,OAAO,CAM1C"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { createClient, KlaroApiError } from '../lib/api.js';
|
|
3
|
+
import { requireProject, requireToken } from '../lib/config.js';
|
|
4
|
+
import { resolveBoard } from '../lib/defaults.js';
|
|
5
|
+
import { splitArgs, parseDimensions } from '../utils/dimensions.js';
|
|
6
|
+
import { printTable } from '../utils/table.js';
|
|
7
|
+
async function setAction(args, options, command) {
|
|
8
|
+
try {
|
|
9
|
+
// Split args into identifiers and key=value dimensions
|
|
10
|
+
const { regularArgs, dimensionArgs } = splitArgs(args);
|
|
11
|
+
if (regularArgs.length === 0) {
|
|
12
|
+
console.error('Error: At least one identifier is required');
|
|
13
|
+
process.exit(1);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const numericIds = regularArgs.map(id => {
|
|
17
|
+
const num = parseInt(id, 10);
|
|
18
|
+
if (isNaN(num)) {
|
|
19
|
+
throw new Error(`Invalid identifier "${id}": must be a number`);
|
|
20
|
+
}
|
|
21
|
+
return num;
|
|
22
|
+
});
|
|
23
|
+
const dimensions = parseDimensions(dimensionArgs);
|
|
24
|
+
if (Object.keys(dimensions).length === 0) {
|
|
25
|
+
console.error('Error: At least one dimension is required (key=value)');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const globalOpts = command.optsWithGlobals();
|
|
30
|
+
const project = requireProject(globalOpts.project);
|
|
31
|
+
const token = requireToken();
|
|
32
|
+
const board = resolveBoard(globalOpts.board ?? options.board, project);
|
|
33
|
+
const api = createClient(project, token);
|
|
34
|
+
const updates = numericIds.map(identifier => ({ identifier, ...dimensions }));
|
|
35
|
+
const stories = await api.updateStories(board, updates);
|
|
36
|
+
if (stories.length > 0) {
|
|
37
|
+
const columns = ['identifier', 'title', ...Object.keys(dimensions)];
|
|
38
|
+
printTable(stories, columns);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
if (error instanceof KlaroApiError) {
|
|
43
|
+
console.error(`Error: ${error.message}`);
|
|
44
|
+
}
|
|
45
|
+
else if (error instanceof Error) {
|
|
46
|
+
console.error(`Error: ${error.message}`);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
console.error('An unexpected error occurred');
|
|
50
|
+
}
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export function createSetCommand() {
|
|
55
|
+
return new Command('set')
|
|
56
|
+
.description('Update one or more cards by identifier')
|
|
57
|
+
.argument('<args...>', 'Card identifier(s) followed by key=value dimension(s)')
|
|
58
|
+
.option('-b, --board <board>', 'Board identifier (default: "all")')
|
|
59
|
+
.action(setAction);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../src/commands/set.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+KpC,wBAAgB,iBAAiB,IAAI,OAAO,CAO3C"}
|