@benglo/storu-cli 1.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/api-client.d.ts +71 -2
  2. package/dist/api-client.d.ts.map +1 -1
  3. package/dist/api-client.js +126 -6
  4. package/dist/api-client.js.map +1 -1
  5. package/dist/commands/apps.d.ts +2 -1
  6. package/dist/commands/apps.d.ts.map +1 -1
  7. package/dist/commands/apps.js +87 -16
  8. package/dist/commands/apps.js.map +1 -1
  9. package/dist/commands/epics.d.ts +2 -1
  10. package/dist/commands/epics.d.ts.map +1 -1
  11. package/dist/commands/epics.js +108 -22
  12. package/dist/commands/epics.js.map +1 -1
  13. package/dist/commands/labels.d.ts +5 -0
  14. package/dist/commands/labels.d.ts.map +1 -0
  15. package/dist/commands/labels.js +81 -0
  16. package/dist/commands/labels.js.map +1 -0
  17. package/dist/commands/releases.d.ts +2 -1
  18. package/dist/commands/releases.d.ts.map +1 -1
  19. package/dist/commands/releases.js +118 -20
  20. package/dist/commands/releases.js.map +1 -1
  21. package/dist/commands/stories.d.ts +2 -1
  22. package/dist/commands/stories.d.ts.map +1 -1
  23. package/dist/commands/stories.js +349 -78
  24. package/dist/commands/stories.js.map +1 -1
  25. package/dist/commands/subscribers.d.ts +5 -0
  26. package/dist/commands/subscribers.d.ts.map +1 -0
  27. package/dist/commands/subscribers.js +66 -0
  28. package/dist/commands/subscribers.js.map +1 -0
  29. package/dist/config.d.ts +1 -0
  30. package/dist/config.d.ts.map +1 -1
  31. package/dist/config.js +25 -12
  32. package/dist/config.js.map +1 -1
  33. package/dist/helpers.d.ts +20 -0
  34. package/dist/helpers.d.ts.map +1 -0
  35. package/dist/helpers.js +32 -0
  36. package/dist/helpers.js.map +1 -0
  37. package/dist/index.js +29 -21
  38. package/dist/index.js.map +1 -1
  39. package/package.json +1 -1
@@ -24,6 +24,13 @@ export interface ListStoriesFilters {
24
24
  page?: number;
25
25
  limit?: number;
26
26
  }
27
+ export interface ListReleasesFilters {
28
+ app?: string;
29
+ status?: string;
30
+ }
31
+ export interface ListSubscribersFilters {
32
+ app?: string;
33
+ }
27
34
  export interface CreateEpicData {
28
35
  application_id: string;
29
36
  title: string;
@@ -31,6 +38,12 @@ export interface CreateEpicData {
31
38
  status?: string;
32
39
  sort_order?: number;
33
40
  }
41
+ export interface UpdateEpicData {
42
+ version: number;
43
+ title?: string;
44
+ description?: string;
45
+ status?: string;
46
+ }
34
47
  export interface CreateStoryData {
35
48
  application_id: string;
36
49
  epic_id?: string;
@@ -47,13 +60,19 @@ export interface UpdateStoryData {
47
60
  version: number;
48
61
  title?: string;
49
62
  description?: string;
50
- acceptance_criteria?: string[];
63
+ acceptance_criteria?: Array<{
64
+ text: string;
65
+ checked: boolean;
66
+ }>;
51
67
  status?: string;
52
68
  priority?: string;
53
69
  assignee_id?: string;
54
70
  epic_id?: string | null;
55
71
  sort_order?: number;
56
72
  label_ids?: string[];
73
+ github_owner?: string;
74
+ github_repo?: string;
75
+ github_issue_number?: number;
57
76
  }
58
77
  export interface CreateReleaseData {
59
78
  application_id: string;
@@ -61,6 +80,34 @@ export interface CreateReleaseData {
61
80
  description?: string;
62
81
  story_ids?: string[];
63
82
  }
83
+ export interface UpdateReleaseData {
84
+ version?: number;
85
+ title?: string;
86
+ description?: string;
87
+ story_ids?: string[];
88
+ }
89
+ export interface CreateAppData {
90
+ name: string;
91
+ slug: string;
92
+ description?: string;
93
+ }
94
+ export interface UpdateAppData {
95
+ name?: string;
96
+ description?: string;
97
+ }
98
+ export interface CreateLabelData {
99
+ name: string;
100
+ color?: string;
101
+ }
102
+ export interface UpdateLabelData {
103
+ name?: string;
104
+ color?: string;
105
+ }
106
+ export interface CreateSubscriberData {
107
+ application_id: string;
108
+ email: string;
109
+ name?: string;
110
+ }
64
111
  export declare class StoruApiClient {
65
112
  private readonly baseUrl;
66
113
  private readonly apiKey;
@@ -73,14 +120,36 @@ export declare class StoruApiClient {
73
120
  * Otherwise, fetches the apps list and finds the matching slug.
74
121
  */
75
122
  resolveAppId(slugOrId: string): Promise<string>;
123
+ getApp(id: string): Promise<ApiResponse<unknown>>;
124
+ createApp(data: CreateAppData): Promise<ApiResponse<unknown>>;
125
+ updateApp(id: string, data: UpdateAppData): Promise<ApiResponse<unknown>>;
76
126
  listEpics(filters?: ListEpicsFilters): Promise<ApiResponse<unknown[]>>;
127
+ getEpic(id: string): Promise<ApiResponse<unknown>>;
128
+ createEpic(data: CreateEpicData): Promise<ApiResponse<unknown>>;
129
+ updateEpic(id: string, data: UpdateEpicData): Promise<ApiResponse<unknown>>;
130
+ deleteEpic(id: string): Promise<ApiResponse<unknown>>;
77
131
  listStories(filters?: ListStoriesFilters): Promise<ApiResponse<unknown[]>>;
78
132
  getStory(id: string): Promise<ApiResponse<unknown>>;
79
- createEpic(data: CreateEpicData): Promise<ApiResponse<unknown>>;
80
133
  createStory(data: CreateStoryData): Promise<ApiResponse<unknown>>;
81
134
  updateStory(id: string, data: UpdateStoryData): Promise<ApiResponse<unknown>>;
135
+ deleteStory(id: string): Promise<ApiResponse<unknown>>;
82
136
  batchStories(stories: CreateStoryData[]): Promise<ApiResponse<unknown[]>>;
137
+ listReleases(filters?: ListReleasesFilters): Promise<ApiResponse<unknown[]>>;
138
+ getRelease(id: string): Promise<ApiResponse<unknown>>;
83
139
  createRelease(data: CreateReleaseData): Promise<ApiResponse<unknown>>;
140
+ updateRelease(id: string, data: UpdateReleaseData): Promise<ApiResponse<unknown>>;
84
141
  publishRelease(id: string): Promise<ApiResponse<unknown>>;
142
+ listLabels(): Promise<ApiResponse<unknown[]>>;
143
+ createLabel(data: CreateLabelData): Promise<ApiResponse<unknown>>;
144
+ updateLabel(id: string, data: UpdateLabelData): Promise<ApiResponse<unknown>>;
145
+ deleteLabel(id: string): Promise<ApiResponse<unknown>>;
146
+ listSubscribers(filters?: ListSubscribersFilters): Promise<ApiResponse<unknown[]>>;
147
+ createSubscriber(data: CreateSubscriberData): Promise<ApiResponse<unknown>>;
148
+ deleteSubscriber(id: string): Promise<ApiResponse<unknown>>;
149
+ listComments(storyId: string): Promise<ApiResponse<unknown[]>>;
150
+ addComment(storyId: string, content: string): Promise<ApiResponse<unknown>>;
151
+ getComment(commentId: string): Promise<ApiResponse<unknown>>;
152
+ editComment(commentId: string, content: string, version: number): Promise<ApiResponse<unknown>>;
153
+ deleteComment(commentId: string): Promise<ApiResponse<unknown>>;
85
154
  }
86
155
  //# sourceMappingURL=api-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,7 @@ export class StoruApiClient {
23
23
  meta: json.meta,
24
24
  };
25
25
  }
26
+ // ── Apps ──────────────────────────────────────────────────────────────────
26
27
  async listApps() {
27
28
  return this.request("/api/apps");
28
29
  }
@@ -45,6 +46,22 @@ export class StoruApiClient {
45
46
  }
46
47
  return app.id;
47
48
  }
49
+ async getApp(id) {
50
+ return this.request(`/api/apps/${id}`);
51
+ }
52
+ async createApp(data) {
53
+ return this.request("/api/apps", {
54
+ method: "POST",
55
+ body: JSON.stringify(data),
56
+ });
57
+ }
58
+ async updateApp(id, data) {
59
+ return this.request(`/api/apps/${id}`, {
60
+ method: "PATCH",
61
+ body: JSON.stringify(data),
62
+ });
63
+ }
64
+ // ── Epics ─────────────────────────────────────────────────────────────────
48
65
  async listEpics(filters = {}) {
49
66
  const params = new URLSearchParams();
50
67
  if (filters.app_id)
@@ -54,6 +71,27 @@ export class StoruApiClient {
54
71
  const query = params.toString() ? `?${params.toString()}` : "";
55
72
  return this.request(`/api/epics${query}`);
56
73
  }
74
+ async getEpic(id) {
75
+ return this.request(`/api/epics/${id}`);
76
+ }
77
+ async createEpic(data) {
78
+ return this.request("/api/epics", {
79
+ method: "POST",
80
+ body: JSON.stringify(data),
81
+ });
82
+ }
83
+ async updateEpic(id, data) {
84
+ return this.request(`/api/epics/${id}`, {
85
+ method: "PATCH",
86
+ body: JSON.stringify(data),
87
+ });
88
+ }
89
+ async deleteEpic(id) {
90
+ return this.request(`/api/epics/${id}`, {
91
+ method: "DELETE",
92
+ });
93
+ }
94
+ // ── Stories ───────────────────────────────────────────────────────────────
57
95
  async listStories(filters = {}) {
58
96
  const params = new URLSearchParams();
59
97
  if (filters.app_id)
@@ -82,12 +120,6 @@ export class StoruApiClient {
82
120
  async getStory(id) {
83
121
  return this.request(`/api/stories/${id}`);
84
122
  }
85
- async createEpic(data) {
86
- return this.request("/api/epics", {
87
- method: "POST",
88
- body: JSON.stringify(data),
89
- });
90
- }
91
123
  async createStory(data) {
92
124
  return this.request("/api/stories", {
93
125
  method: "POST",
@@ -100,22 +132,110 @@ export class StoruApiClient {
100
132
  body: JSON.stringify(data),
101
133
  });
102
134
  }
135
+ async deleteStory(id) {
136
+ return this.request(`/api/stories/${id}`, {
137
+ method: "DELETE",
138
+ });
139
+ }
103
140
  async batchStories(stories) {
104
141
  return this.request("/api/stories/batch", {
105
142
  method: "POST",
106
143
  body: JSON.stringify({ stories }),
107
144
  });
108
145
  }
146
+ // ── Releases ──────────────────────────────────────────────────────────────
147
+ async listReleases(filters = {}) {
148
+ const params = new URLSearchParams();
149
+ if (filters.app)
150
+ params.set("app", filters.app);
151
+ if (filters.status)
152
+ params.set("status", filters.status);
153
+ const query = params.toString() ? `?${params.toString()}` : "";
154
+ return this.request(`/api/releases${query}`);
155
+ }
156
+ async getRelease(id) {
157
+ return this.request(`/api/releases/${id}`);
158
+ }
109
159
  async createRelease(data) {
110
160
  return this.request("/api/releases", {
111
161
  method: "POST",
112
162
  body: JSON.stringify(data),
113
163
  });
114
164
  }
165
+ async updateRelease(id, data) {
166
+ return this.request(`/api/releases/${id}`, {
167
+ method: "PATCH",
168
+ body: JSON.stringify(data),
169
+ });
170
+ }
115
171
  async publishRelease(id) {
116
172
  return this.request(`/api/releases/${id}/publish`, {
117
173
  method: "POST",
118
174
  });
119
175
  }
176
+ // ── Labels ────────────────────────────────────────────────────────────────
177
+ async listLabels() {
178
+ return this.request("/api/labels");
179
+ }
180
+ async createLabel(data) {
181
+ return this.request("/api/labels", {
182
+ method: "POST",
183
+ body: JSON.stringify(data),
184
+ });
185
+ }
186
+ async updateLabel(id, data) {
187
+ return this.request(`/api/labels/${id}`, {
188
+ method: "PATCH",
189
+ body: JSON.stringify(data),
190
+ });
191
+ }
192
+ async deleteLabel(id) {
193
+ return this.request(`/api/labels/${id}`, {
194
+ method: "DELETE",
195
+ });
196
+ }
197
+ // ── Subscribers ───────────────────────────────────────────────────────────
198
+ async listSubscribers(filters = {}) {
199
+ const params = new URLSearchParams();
200
+ if (filters.app)
201
+ params.set("app", filters.app);
202
+ const query = params.toString() ? `?${params.toString()}` : "";
203
+ return this.request(`/api/subscribers${query}`);
204
+ }
205
+ async createSubscriber(data) {
206
+ return this.request("/api/subscribers", {
207
+ method: "POST",
208
+ body: JSON.stringify(data),
209
+ });
210
+ }
211
+ async deleteSubscriber(id) {
212
+ return this.request(`/api/subscribers/${id}`, {
213
+ method: "DELETE",
214
+ });
215
+ }
216
+ // ── Comments ──────────────────────────────────────────────────────────────
217
+ async listComments(storyId) {
218
+ return this.request(`/api/stories/${storyId}/comments`);
219
+ }
220
+ async addComment(storyId, content) {
221
+ return this.request(`/api/stories/${storyId}/comments`, {
222
+ method: "POST",
223
+ body: JSON.stringify({ content }),
224
+ });
225
+ }
226
+ async getComment(commentId) {
227
+ return this.request(`/api/comments/${commentId}`);
228
+ }
229
+ async editComment(commentId, content, version) {
230
+ return this.request(`/api/comments/${commentId}`, {
231
+ method: "PATCH",
232
+ body: JSON.stringify({ content, version }),
233
+ });
234
+ }
235
+ async deleteComment(commentId) {
236
+ return this.request(`/api/comments/${commentId}`, {
237
+ method: "DELETE",
238
+ });
239
+ }
120
240
  }
121
241
  //# sourceMappingURL=api-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AA2HA,MAAM,OAAO,cAAc;IACR,OAAO,CAAS;IAChB,MAAM,CAAS;IAEhC,YAAY,OAAe,EAAE,MAAc;QACzC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,IAAY,EACZ,UAAuB,EAAE;QAEzB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,IAAI,CAAC,MAAM;gBACxB,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;aAC3B;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAgE,CAAC;QACpG,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,EAAE;YACpB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;IAED,6EAA6E;IAE7E,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAY,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,MAAM,WAAW,GAAG,iEAAiE,CAAC;QACtF,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,QAAQ,CAAC;QAEhD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,yCAAyC,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,GAAG,GAAI,MAAM,CAAC,IAA4C,CAAC,IAAI,CACnE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAC3B,CAAC;QACF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,gBAAgB,QAAQ,sDAAsD,CAAC,CAAC;QAClG,CAAC;QACD,OAAO,GAAG,CAAC,EAAE,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,OAAO,CAAU,aAAa,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAmB;QACjC,OAAO,IAAI,CAAC,OAAO,CAAU,WAAW,EAAE;YACxC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAU,EAAE,IAAmB;QAC7C,OAAO,IAAI,CAAC,OAAO,CAAU,aAAa,EAAE,EAAE,EAAE;YAC9C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAE7E,KAAK,CAAC,SAAS,CAAC,UAA4B,EAAE;QAC5C,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAY,aAAa,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,OAAO,CAAU,cAAc,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAoB;QACnC,OAAO,IAAI,CAAC,OAAO,CAAU,YAAY,EAAE;YACzC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,IAAoB;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAU,cAAc,EAAE,EAAE,EAAE;YAC/C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,OAAO,IAAI,CAAC,OAAO,CAAU,cAAc,EAAE,EAAE,EAAE;YAC/C,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAE7E,KAAK,CAAC,WAAW,CAAC,UAA8B,EAAE;QAChD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,OAAO;YAAE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,WAAW;YAAE,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QACxE,IAAI,OAAO,CAAC,QAAQ;YAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,OAAO,CAAC,QAAQ;YAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,OAAO,CAAC,OAAO;YAAE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACnD,IAAI,OAAO,CAAC,IAAI;YAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACzE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAY,eAAe,KAAK,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,OAAO,CAAU,gBAAgB,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAqB;QACrC,OAAO,IAAI,CAAC,OAAO,CAAU,cAAc,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,IAAqB;QACjD,OAAO,IAAI,CAAC,OAAO,CAAU,gBAAgB,EAAE,EAAE,EAAE;YACjD,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAU,gBAAgB,EAAE,EAAE,EAAE;YACjD,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAA0B;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAY,oBAAoB,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAE7E,KAAK,CAAC,YAAY,CAAC,UAA+B,EAAE;QAClD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,GAAG;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAY,gBAAgB,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,OAAO,IAAI,CAAC,OAAO,CAAU,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAuB;QACzC,OAAO,IAAI,CAAC,OAAO,CAAU,eAAe,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAU,EAAE,IAAuB;QACrD,OAAO,IAAI,CAAC,OAAO,CAAU,iBAAiB,EAAE,EAAE,EAAE;YAClD,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,EAAU;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAU,iBAAiB,EAAE,UAAU,EAAE;YAC1D,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAE7E,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,OAAO,CAAY,aAAa,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAqB;QACrC,OAAO,IAAI,CAAC,OAAO,CAAU,aAAa,EAAE;YAC1C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,IAAqB;QACjD,OAAO,IAAI,CAAC,OAAO,CAAU,eAAe,EAAE,EAAE,EAAE;YAChD,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAU,eAAe,EAAE,EAAE,EAAE;YAChD,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAE7E,KAAK,CAAC,eAAe,CAAC,UAAkC,EAAE;QACxD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,GAAG;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAY,mBAAmB,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAA0B;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAU,kBAAkB,EAAE;YAC/C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,EAAU;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAU,oBAAoB,EAAE,EAAE,EAAE;YACrD,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAE7E,KAAK,CAAC,YAAY,CAAC,OAAe;QAChC,OAAO,IAAI,CAAC,OAAO,CAAY,gBAAgB,OAAO,WAAW,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,OAAe;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAU,gBAAgB,OAAO,WAAW,EAAE;YAC/D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAU,iBAAiB,SAAS,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,OAAe,EAAE,OAAe;QACnE,OAAO,IAAI,CAAC,OAAO,CAAU,iBAAiB,SAAS,EAAE,EAAE;YACzD,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,OAAO,IAAI,CAAC,OAAO,CAAU,iBAAiB,SAAS,EAAE,EAAE;YACzD,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  import { Command } from "commander";
2
2
  import { StoruApiClient } from "../api-client.js";
3
- export declare function registerAppsCommand(program: Command, client: StoruApiClient): void;
3
+ import type { StoruConfig } from "../config.js";
4
+ export declare function registerAppCommand(program: Command, client: StoruApiClient, _getConfig: () => StoruConfig): void;
4
5
  //# sourceMappingURL=apps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../src/commands/apps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAUlD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CA4BlF"}
1
+ {"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../src/commands/apps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAWhD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,WAAW,GAC5B,IAAI,CA6GN"}
@@ -1,25 +1,96 @@
1
- export function registerAppsCommand(program, client) {
2
- program
3
- .command("apps")
1
+ import { shortId, output } from "../helpers.js";
2
+ export function registerAppCommand(program, client, _getConfig) {
3
+ const appCmd = program.command("app").description("Manage applications");
4
+ appCmd
5
+ .command("list")
4
6
  .description("List all applications")
5
- .action(async () => {
7
+ .option("--json", "Output raw JSON")
8
+ .action(async (opts) => {
6
9
  const result = await client.listApps();
7
10
  if (!result.success || !result.data) {
8
- process.stderr.write(`Error: ${result.error ?? "Failed to list apps"}\n`);
9
- process.exit(1);
11
+ throw new Error(result.error ?? "Failed to list apps");
10
12
  }
11
13
  const rows = result.data;
12
- if (rows.length === 0) {
13
- process.stdout.write("No applications found.\n");
14
- return;
14
+ output(rows, opts, (data) => {
15
+ if (data.length === 0) {
16
+ process.stdout.write("No applications found.\n");
17
+ return;
18
+ }
19
+ const tableData = data.map((app) => ({
20
+ ID: shortId(app.id),
21
+ Name: app.name,
22
+ Slug: app.slug,
23
+ Description: app.description ?? "",
24
+ }));
25
+ console.table(tableData);
26
+ });
27
+ });
28
+ appCmd
29
+ .command("view <slug-or-id>")
30
+ .description("Get details for an application")
31
+ .option("--json", "Output raw JSON")
32
+ .action(async (slugOrId, opts) => {
33
+ const id = await client.resolveAppId(slugOrId);
34
+ const result = await client.getApp(id);
35
+ if (!result.success || !result.data) {
36
+ throw new Error(result.error ?? "Failed to get app");
37
+ }
38
+ const app = result.data;
39
+ output(app, opts, (data) => {
40
+ process.stdout.write(`\nApp: ${data.name}\n`);
41
+ process.stdout.write(`${"─".repeat(60)}\n`);
42
+ process.stdout.write(`ID: ${data.id}\n`);
43
+ process.stdout.write(`Slug: ${data.slug}\n`);
44
+ process.stdout.write(`Description: ${data.description ?? "(none)"}\n`);
45
+ if (data.created_at) {
46
+ process.stdout.write(`Created: ${data.created_at}\n`);
47
+ }
48
+ });
49
+ });
50
+ appCmd
51
+ .command("create")
52
+ .description("Create a new application")
53
+ .requiredOption("--name <name>", "Application name")
54
+ .requiredOption("--slug <slug>", "URL slug (unique, lowercase, hyphens)")
55
+ .option("--description <text>", "Application description")
56
+ .option("--json", "Output raw JSON")
57
+ .action(async (opts) => {
58
+ const result = await client.createApp({
59
+ name: opts.name,
60
+ slug: opts.slug,
61
+ description: opts.description,
62
+ });
63
+ if (!result.success || !result.data) {
64
+ throw new Error(result.error ?? "Failed to create app");
65
+ }
66
+ const app = result.data;
67
+ output(app, opts, (data) => {
68
+ process.stdout.write(`App created: ${data.id}\n`);
69
+ process.stdout.write(` Name: ${data.name}\n`);
70
+ process.stdout.write(` Slug: ${data.slug}\n`);
71
+ });
72
+ });
73
+ appCmd
74
+ .command("edit <slug-or-id>")
75
+ .description("Update an application")
76
+ .option("--name <name>", "New name")
77
+ .option("--description <text>", "New description")
78
+ .option("--json", "Output raw JSON")
79
+ .action(async (slugOrId, opts) => {
80
+ const id = await client.resolveAppId(slugOrId);
81
+ const result = await client.updateApp(id, {
82
+ name: opts.name,
83
+ description: opts.description,
84
+ });
85
+ if (!result.success || !result.data) {
86
+ throw new Error(result.error ?? "Failed to update app");
15
87
  }
16
- const tableData = rows.map((app) => ({
17
- ID: app.id,
18
- Name: app.name,
19
- Slug: app.slug,
20
- Description: app.description ?? "",
21
- }));
22
- console.table(tableData);
88
+ const app = result.data;
89
+ output(app, opts, (data) => {
90
+ process.stdout.write(`App updated: ${data.id}\n`);
91
+ process.stdout.write(` Name: ${data.name}\n`);
92
+ process.stdout.write(` Slug: ${data.slug}\n`);
93
+ });
23
94
  });
24
95
  }
25
96
  //# sourceMappingURL=apps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/commands/apps.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,MAAsB;IAC1E,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QAEvC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,KAAK,IAAI,qBAAqB,IAAI,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAgB,CAAC;QAErC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACnC,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE;SACnC,CAAC,CAAC,CAAC;QAEJ,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/commands/apps.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { Command } from "commander";
2
2
  import { StoruApiClient } from "../api-client.js";
3
- export declare function registerEpicsCommand(program: Command, client: StoruApiClient): void;
3
+ import type { StoruConfig } from "../config.js";
4
+ export declare function registerEpicCommand(program: Command, client: StoruApiClient, getConfig: () => StoruConfig): void;
4
5
  //# sourceMappingURL=epics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"epics.d.ts","sourceRoot":"","sources":["../../src/commands/epics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAWlD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAkCnF"}
1
+ {"version":3,"file":"epics.d.ts","sourceRoot":"","sources":["../../src/commands/epics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAchD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,WAAW,GAC3B,IAAI,CAoIN"}
@@ -1,31 +1,117 @@
1
- export function registerEpicsCommand(program, client) {
2
- program
3
- .command("epics")
1
+ import { shortId, output, resolveApp } from "../helpers.js";
2
+ export function registerEpicCommand(program, client, getConfig) {
3
+ const epicCmd = program.command("epic").description("Manage epics");
4
+ epicCmd
5
+ .command("list")
4
6
  .description("List epics for an application")
5
- .requiredOption("--app <slug-or-id>", "Application slug or ID")
7
+ .option("--app <slug-or-id>", "Application slug or ID")
6
8
  .option("--status <status>", "Filter by status (backlog|in_progress|done)")
7
- .action(async (options) => {
8
- const appId = await client.resolveAppId(options.app);
9
- const result = await client.listEpics({
10
- app_id: appId,
11
- status: options.status,
12
- });
9
+ .option("--json", "Output raw JSON")
10
+ .action(async (opts) => {
11
+ const appId = await resolveApp(client, opts, getConfig());
12
+ const result = await client.listEpics({ app_id: appId, status: opts.status });
13
13
  if (!result.success || !result.data) {
14
- process.stderr.write(`Error: ${result.error ?? "Failed to list epics"}\n`);
15
- process.exit(1);
14
+ throw new Error(result.error ?? "Failed to list epics");
16
15
  }
17
16
  const rows = result.data;
18
- if (rows.length === 0) {
19
- process.stdout.write("No epics found.\n");
20
- return;
17
+ output(rows, opts, (data) => {
18
+ if (data.length === 0) {
19
+ process.stdout.write("No epics found.\n");
20
+ return;
21
+ }
22
+ const tableData = data.map((epic) => ({
23
+ ID: shortId(epic.id),
24
+ Title: epic.title,
25
+ Status: epic.status,
26
+ Stories: epic.story_count ?? 0,
27
+ }));
28
+ console.table(tableData);
29
+ });
30
+ });
31
+ epicCmd
32
+ .command("view <id>")
33
+ .description("Get full details for an epic")
34
+ .option("--json", "Output raw JSON")
35
+ .action(async (id, opts) => {
36
+ const result = await client.getEpic(id);
37
+ if (!result.success || !result.data) {
38
+ throw new Error(result.error ?? "Failed to get epic");
39
+ }
40
+ const epic = result.data;
41
+ output(epic, opts, (data) => {
42
+ process.stdout.write(`\nEpic: ${data.title}\n`);
43
+ process.stdout.write(`${"─".repeat(60)}\n`);
44
+ process.stdout.write(`ID: ${data.id}\n`);
45
+ process.stdout.write(`Status: ${data.status}\n`);
46
+ process.stdout.write(`App: ${data.application_id}\n`);
47
+ process.stdout.write(`Version: ${data.version}\n`);
48
+ if (data.description) {
49
+ process.stdout.write(`\nDescription:\n${data.description}\n`);
50
+ }
51
+ });
52
+ });
53
+ epicCmd
54
+ .command("create")
55
+ .description("Create a new epic")
56
+ .option("--app <slug-or-id>", "Application slug or UUID")
57
+ .requiredOption("--title <title>", "Epic title")
58
+ .option("--description <text>", "Epic description")
59
+ .option("--json", "Output raw JSON")
60
+ .action(async (opts) => {
61
+ const appId = await resolveApp(client, opts, getConfig());
62
+ const result = await client.createEpic({
63
+ application_id: appId,
64
+ title: opts.title,
65
+ description: opts.description,
66
+ });
67
+ if (!result.success || !result.data) {
68
+ throw new Error(result.error ?? "Failed to create epic");
69
+ }
70
+ const epic = result.data;
71
+ output(epic, opts, (data) => {
72
+ process.stdout.write(`Epic created: ${data.id}\n`);
73
+ process.stdout.write(` Title: ${data.title}\n`);
74
+ process.stdout.write(` Status: ${data.status}\n`);
75
+ });
76
+ });
77
+ epicCmd
78
+ .command("edit <id>")
79
+ .description("Update an epic")
80
+ .option("--title <title>", "New title")
81
+ .option("--description <text>", "New description")
82
+ .option("--status <status>", "New status (backlog|in_progress|done)")
83
+ .option("--json", "Output raw JSON")
84
+ .action(async (id, opts) => {
85
+ const getResult = await client.getEpic(id);
86
+ if (!getResult.success || !getResult.data) {
87
+ throw new Error(getResult.error ?? "Epic not found");
88
+ }
89
+ const current = getResult.data;
90
+ const result = await client.updateEpic(id, {
91
+ version: current.version,
92
+ title: opts.title,
93
+ description: opts.description,
94
+ status: opts.status,
95
+ });
96
+ if (!result.success || !result.data) {
97
+ throw new Error(result.error ?? "Failed to update epic");
98
+ }
99
+ const epic = result.data;
100
+ output(epic, opts, (data) => {
101
+ process.stdout.write(`Epic updated: ${data.id}\n`);
102
+ process.stdout.write(` Title: ${data.title}\n`);
103
+ process.stdout.write(` Status: ${data.status}\n`);
104
+ });
105
+ });
106
+ epicCmd
107
+ .command("delete <id>")
108
+ .description("Delete an epic")
109
+ .action(async (id) => {
110
+ const result = await client.deleteEpic(id);
111
+ if (!result.success) {
112
+ throw new Error(result.error ?? "Failed to delete epic");
21
113
  }
22
- const tableData = rows.map((epic) => ({
23
- ID: epic.id,
24
- Title: epic.title,
25
- Status: epic.status,
26
- Stories: epic.story_count ?? 0,
27
- }));
28
- console.table(tableData);
114
+ process.stdout.write(`Epic deleted: ${id}\n`);
29
115
  });
30
116
  }
31
117
  //# sourceMappingURL=epics.js.map