pipe-kan 0.23.5 → 0.24.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 (2) hide show
  1. package/dist/pipe-kan.js +37 -17
  2. package/package.json +1 -1
package/dist/pipe-kan.js CHANGED
@@ -244,12 +244,13 @@ function takeValue(list, index, flag) {
244
244
  return [glued, index];
245
245
  return [list[index + 1] ?? "", index + 1];
246
246
  }
247
- function flagsToJql(flags) {
247
+ function parseFlags(flags) {
248
248
  const list = tokens(flags.trim() || DEFAULT_FLAGS);
249
249
  let assignee = "";
250
250
  let epic = "";
251
251
  let type = "";
252
252
  let raw = "";
253
+ let projectsValue = "";
253
254
  const statusEq = [];
254
255
  const statusNeq = [];
255
256
  for (let i = 0;i < list.length; i++) {
@@ -277,6 +278,10 @@ function flagsToJql(flags) {
277
278
  statusEq.push(status);
278
279
  continue;
279
280
  }
281
+ if (token === "--projects") {
282
+ [projectsValue, i] = takeValue(list, i, "--projects");
283
+ continue;
284
+ }
280
285
  if (token === "-q" || token === "--jql") {
281
286
  raw = list[++i] ?? "";
282
287
  continue;
@@ -285,9 +290,12 @@ function flagsToJql(flags) {
285
290
  raw = token.slice(2);
286
291
  }
287
292
  }
288
- if (raw)
289
- return raw;
290
- const clauses = ['project="DEMO"'];
293
+ const projects = projectsValue.split(",").map((p) => p.trim().toUpperCase()).filter(Boolean);
294
+ if (raw) {
295
+ return { jql: raw, projects };
296
+ }
297
+ const projectClause = projects.length ? `project in (${projects.map((p) => `"${p}"`).join(", ")})` : 'project="DEMO"';
298
+ const clauses = [projectClause];
291
299
  if (assignee)
292
300
  clauses.push(`assignee="${assignee}"`);
293
301
  if (type)
@@ -298,7 +306,10 @@ function flagsToJql(flags) {
298
306
  clauses.push(`status="${status}"`);
299
307
  for (const status of statusNeq)
300
308
  clauses.push(`status!="${status}"`);
301
- return clauses.join(" AND ");
309
+ return { jql: clauses.join(" AND "), projects };
310
+ }
311
+ function flagsToJql(flags) {
312
+ return parseFlags(flags).jql;
302
313
  }
303
314
 
304
315
  // src/store.ts
@@ -430,6 +441,12 @@ Available states for issue ${key}: ${available}`
430
441
  }
431
442
 
432
443
  // src/cli.ts
444
+ function projectClause(flags) {
445
+ const { projects } = parseFlags(flags || DEFAULT_FLAGS);
446
+ if (!projects.length)
447
+ return 'project="DEMO"';
448
+ return `project in (${projects.map((p) => `"${p}"`).join(", ")})`;
449
+ }
433
450
  function emptyList(text) {
434
451
  return /no result found/i.test(text);
435
452
  }
@@ -446,18 +463,18 @@ function issueKey(issue) {
446
463
  function hasPaginate(args) {
447
464
  return args.some((arg) => arg === "--paginate" || arg.startsWith("--paginate="));
448
465
  }
449
- function createStoreCli(store) {
466
+ function createStoreCli(store, defaultFlags = DEFAULT_FLAGS) {
450
467
  return {
451
468
  async list(flags) {
452
- const issues = store.list(flagsToJql(flags || DEFAULT_FLAGS));
469
+ const issues = store.list(flagsToJql(flags || defaultFlags));
453
470
  return JSON.stringify(issues, null, 2);
454
471
  },
455
- async listEpics() {
456
- const issues = store.list(flagsToJql("-tEpic"));
472
+ async listEpics(queryFlags = defaultFlags) {
473
+ const issues = store.list(`${projectClause(queryFlags || defaultFlags)} AND type="Epic"`);
457
474
  return JSON.stringify(issues, null, 2);
458
475
  },
459
- async listEpic(key) {
460
- const issues = store.list(`project="DEMO" AND parent="${key}"`);
476
+ async listEpic(key, queryFlags = defaultFlags) {
477
+ const issues = store.list(`${projectClause(queryFlags || defaultFlags)} AND parent="${key}"`);
461
478
  return JSON.stringify(issues, null, 2);
462
479
  },
463
480
  async listChildren(keys) {
@@ -496,6 +513,7 @@ function resolveJiraBin(bin = process.env.JIRA_BIN ?? "jira", pathVar = process.
496
513
  function createJiraCli(opts = {}) {
497
514
  const bin = opts.bin ?? "jira";
498
515
  const retryDelayMs = opts.retryDelayMs ?? 1000;
516
+ const defaultFlags = opts.flags ?? DEFAULT_FLAGS;
499
517
  function fmt(args) {
500
518
  return args.filter((arg) => arg !== "--raw").map((arg, i, all) => all[i - 1] === "-q" && arg.length > 48 ? `${arg.slice(0, 48)}…` : arg).join(" ");
501
519
  }
@@ -585,15 +603,17 @@ function createJiraCli(opts = {}) {
585
603
  const extra = (flags || DEFAULT_FLAGS).split(/\s+/).filter(Boolean);
586
604
  return JSON.stringify(await listOnce(["issue", "list", ...extra, "--raw"]));
587
605
  },
588
- async listEpics() {
589
- return listAll(["issue", "list", "-tEpic"]);
606
+ async listEpics(queryFlags = defaultFlags) {
607
+ const clause = projectClause(queryFlags || defaultFlags);
608
+ return listAll(["issue", "list", "-q", `${clause} AND type="Epic"`]);
590
609
  },
591
- async listEpic(key) {
610
+ async listEpic(key, queryFlags = defaultFlags) {
611
+ const clause = projectClause(queryFlags || defaultFlags);
592
612
  return listAll([
593
613
  "issue",
594
614
  "list",
595
615
  "-q",
596
- `(parent="${key}" OR "Epic Link"="${key}")`
616
+ `${clause} AND (parent="${key}" OR "Epic Link"="${key}")`
597
617
  ]);
598
618
  },
599
619
  async listChildren(keys) {
@@ -922,7 +942,7 @@ function createApp(opts) {
922
942
  console.log("Refresh");
923
943
  try {
924
944
  const issues = await cli.list(flags);
925
- const epics = await cli.listEpics();
945
+ const epics = await cli.listEpics(flags);
926
946
  const nextPayload = JSON.parse(issues);
927
947
  const nextEpics = JSON.parse(epics);
928
948
  const keys = issuesToBoard(nextEpics).epics.map((epic) => epic.key);
@@ -973,7 +993,7 @@ function createApp(opts) {
973
993
  if (columns.length)
974
994
  return { columns, epics: [] };
975
995
  }
976
- return stampMissingEpic(issuesToBoard(JSON.parse(await cli.listEpic(epic))), epic);
996
+ return stampMissingEpic(issuesToBoard(JSON.parse(await cli.listEpic(epic, flags))), epic);
977
997
  },
978
998
  async move(key, status) {
979
999
  const result = await tryMove(key, status);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pipe-kan",
3
- "version": "0.23.5",
3
+ "version": "0.24.0",
4
4
  "description": "Local Kanban for jira-cli",
5
5
  "license": "MIT",
6
6
  "type": "module",