@benglo/storu-cli 1.1.0 → 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 +5 -0
  2. package/dist/api-client.d.ts.map +1 -1
  3. package/dist/api-client.js +24 -0
  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 +60 -49
  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 +66 -61
  12. package/dist/commands/epics.js.map +1 -1
  13. package/dist/commands/labels.d.ts +2 -1
  14. package/dist/commands/labels.d.ts.map +1 -1
  15. package/dist/commands/labels.js +43 -37
  16. package/dist/commands/labels.js.map +1 -1
  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 +85 -82
  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 +278 -162
  24. package/dist/commands/stories.js.map +1 -1
  25. package/dist/commands/subscribers.d.ts +2 -1
  26. package/dist/commands/subscribers.d.ts.map +1 -1
  27. package/dist/commands/subscribers.js +39 -33
  28. package/dist/commands/subscribers.js.map +1 -1
  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 -25
  38. package/dist/index.js.map +1 -1
  39. package/package.json +1 -1
@@ -1,49 +1,56 @@
1
- export function registerSubscribersCommand(program, client) {
2
- program
3
- .command("subscribers")
1
+ import { shortId, output, resolveApp } from "../helpers.js";
2
+ export function registerSubscriberCommand(program, client, getConfig) {
3
+ const subscriberCmd = program.command("subscriber").description("Manage subscribers");
4
+ subscriberCmd
5
+ .command("list")
4
6
  .description("List subscribers for an application")
5
- .requiredOption("--app <id>", "Application UUID or slug")
6
- .action(async (options) => {
7
- const result = await client.listSubscribers({ app: options.app });
7
+ .option("--app <slug-or-id>", "Application UUID or slug")
8
+ .option("--json", "Output raw JSON")
9
+ .action(async (opts) => {
10
+ const appId = await resolveApp(client, opts, getConfig());
11
+ const result = await client.listSubscribers({ app: appId });
8
12
  if (!result.success || !result.data) {
9
- process.stderr.write(`Error: ${result.error ?? "Failed to list subscribers"}\n`);
10
- process.exit(1);
13
+ throw new Error(result.error ?? "Failed to list subscribers");
11
14
  }
12
15
  const rows = result.data;
13
- if (rows.length === 0) {
14
- process.stdout.write("No subscribers found.\n");
15
- return;
16
- }
17
- const tableData = rows.map((sub) => ({
18
- ID: sub.id,
19
- Email: sub.email,
20
- Name: sub.name ?? "",
21
- }));
22
- console.table(tableData);
16
+ output(rows, opts, (data) => {
17
+ if (data.length === 0) {
18
+ process.stdout.write("No subscribers found.\n");
19
+ return;
20
+ }
21
+ const tableData = data.map((sub) => ({
22
+ ID: shortId(sub.id),
23
+ Email: sub.email,
24
+ Name: sub.name ?? "",
25
+ }));
26
+ console.table(tableData);
27
+ });
23
28
  });
24
- const subscriberCmd = program.command("subscriber").description("Manage subscribers");
25
29
  subscriberCmd
26
30
  .command("add")
27
31
  .description("Add a subscriber to an application")
28
- .requiredOption("--app <id>", "Application UUID")
32
+ .option("--app <slug-or-id>", "Application UUID or slug")
29
33
  .requiredOption("--email <email>", "Subscriber email address")
30
34
  .option("--name <name>", "Subscriber display name")
31
- .action(async (options) => {
35
+ .option("--json", "Output raw JSON")
36
+ .action(async (opts) => {
37
+ const appId = await resolveApp(client, opts, getConfig());
32
38
  const result = await client.createSubscriber({
33
- application_id: options.app,
34
- email: options.email,
35
- name: options.name,
39
+ application_id: appId,
40
+ email: opts.email,
41
+ name: opts.name,
36
42
  });
37
43
  if (!result.success || !result.data) {
38
- process.stderr.write(`Error: ${result.error ?? "Failed to add subscriber"}\n`);
39
- process.exit(1);
44
+ throw new Error(result.error ?? "Failed to add subscriber");
40
45
  }
41
46
  const sub = result.data;
42
- process.stdout.write(`Subscriber added: ${sub.id}\n`);
43
- process.stdout.write(` Email: ${sub.email}\n`);
44
- if (sub.name) {
45
- process.stdout.write(` Name: ${sub.name}\n`);
46
- }
47
+ output(sub, opts, (data) => {
48
+ process.stdout.write(`Subscriber added: ${data.id}\n`);
49
+ process.stdout.write(` Email: ${data.email}\n`);
50
+ if (data.name) {
51
+ process.stdout.write(` Name: ${data.name}\n`);
52
+ }
53
+ });
47
54
  });
48
55
  subscriberCmd
49
56
  .command("remove <id>")
@@ -51,8 +58,7 @@ export function registerSubscribersCommand(program, client) {
51
58
  .action(async (id) => {
52
59
  const result = await client.deleteSubscriber(id);
53
60
  if (!result.success) {
54
- process.stderr.write(`Error: ${result.error ?? "Failed to remove subscriber"}\n`);
55
- process.exit(1);
61
+ throw new Error(result.error ?? "Failed to remove subscriber");
56
62
  }
57
63
  process.stdout.write(`Subscriber removed: ${id}\n`);
58
64
  });
@@ -1 +1 @@
1
- {"version":3,"file":"subscribers.js","sourceRoot":"","sources":["../../src/commands/subscribers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subscribers.js","sourceRoot":"","sources":["../../src/commands/subscribers.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export interface StoruConfig {
2
2
  api_url: string;
3
3
  api_key: string;
4
+ default_app?: string;
4
5
  }
5
6
  export declare function configPath(): string;
6
7
  export declare function configExists(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,WAAW,CAmCxC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAIrD;AAaD,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAoD7C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,WAAW,CAyCxC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAIrD;AAaD,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA6D7C"}
package/dist/config.js CHANGED
@@ -20,7 +20,11 @@ export function readConfig() {
20
20
  const envUrl = process.env.STORU_API_URL;
21
21
  const envKey = process.env.STORU_API_KEY;
22
22
  if (envUrl && envKey) {
23
- return { api_url: envUrl, api_key: envKey };
23
+ return {
24
+ api_url: envUrl,
25
+ api_key: envKey,
26
+ default_app: process.env.STORU_APP,
27
+ };
24
28
  }
25
29
  let raw;
26
30
  try {
@@ -43,7 +47,11 @@ export function readConfig() {
43
47
  if (typeof cfg.api_key !== "string" || cfg.api_key.length === 0) {
44
48
  throw new Error(`Config is missing 'api_key'. Run 'storu init' to fix.`);
45
49
  }
46
- return { api_url: cfg.api_url, api_key: cfg.api_key };
50
+ return {
51
+ api_url: cfg.api_url,
52
+ api_key: cfg.api_key,
53
+ default_app: typeof cfg.default_app === "string" ? cfg.default_app : undefined,
54
+ };
47
55
  }
48
56
  export function writeConfig(config) {
49
57
  mkdirSync(CONFIG_DIR, { recursive: true });
@@ -61,13 +69,13 @@ function prompt(question, defaultValue) {
61
69
  });
62
70
  }
63
71
  export async function runInit() {
64
- console.log("\n Storu CLI Setup\n");
72
+ process.stdout.write("\n Storu CLI Setup\n\n");
65
73
  const existing = configExists();
66
74
  let defaults = {};
67
75
  if (existing) {
68
76
  try {
69
77
  defaults = readConfig();
70
- console.log(` Existing config found at ${CONFIG_FILE}\n`);
78
+ process.stdout.write(` Existing config found at ${CONFIG_FILE}\n\n`);
71
79
  }
72
80
  catch {
73
81
  // Ignore — broken config, we'll overwrite
@@ -76,16 +84,21 @@ export async function runInit() {
76
84
  const apiUrl = await prompt(" API URL", defaults.api_url || "https://storu.netlify.app");
77
85
  const apiKey = await prompt(" API Key", defaults.api_key);
78
86
  if (!apiUrl || !apiKey) {
79
- console.error("\n Both API URL and API Key are required.\n");
87
+ process.stderr.write("\n Both API URL and API Key are required.\n\n");
80
88
  process.exit(1);
81
89
  }
90
+ const defaultApp = await prompt(" Default app slug (optional, press Enter to skip)", defaults.default_app);
82
91
  // Strip trailing slashes to avoid double-slash in URL construction
83
92
  const cleanUrl = apiUrl.replace(/\/+$/, "");
84
- writeConfig({ api_url: cleanUrl, api_key: apiKey });
85
- console.log(`\n Config saved to ${CONFIG_FILE}`);
86
- console.log(` Permissions set to owner-only (600)\n`);
93
+ writeConfig({
94
+ api_url: cleanUrl,
95
+ api_key: apiKey,
96
+ default_app: defaultApp || undefined,
97
+ });
98
+ process.stdout.write(`\n Config saved to ${CONFIG_FILE}\n`);
99
+ process.stdout.write(` Permissions set to owner-only (600)\n\n`);
87
100
  // Test the connection
88
- console.log(" Testing connection...");
101
+ process.stdout.write(" Testing connection...\n");
89
102
  try {
90
103
  const res = await fetch(`${cleanUrl}/api/apps`, {
91
104
  headers: { "X-API-Key": apiKey },
@@ -93,14 +106,14 @@ export async function runInit() {
93
106
  if (res.ok) {
94
107
  const data = await res.json();
95
108
  const count = data.data?.length ?? 0;
96
- console.log(` Connected! Found ${count} application${count !== 1 ? "s" : ""}.\n`);
109
+ process.stdout.write(` Connected! Found ${count} application${count !== 1 ? "s" : ""}.\n\n`);
97
110
  }
98
111
  else {
99
- console.log(` Warning: API returned ${res.status}. Check your URL and key.\n`);
112
+ process.stdout.write(` Warning: API returned ${res.status}. Check your URL and key.\n\n`);
100
113
  }
101
114
  }
102
115
  catch {
103
- console.log(` Warning: Could not reach ${cleanUrl}. Check the URL.\n`);
116
+ process.stdout.write(` Warning: Could not reach ${cleanUrl}. Check the URL.\n\n`);
104
117
  }
105
118
  }
106
119
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAO3C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,MAAM,UAAU,UAAU;IACxB,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACxB,2DAA2D;IAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACzC,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,6CAA6C,CAC9C,CAAC;IACJ,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,aAAa,WAAW,kDAAkD,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,GAAG,GAAG,MAAiC,CAAC;IAE9C,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAmB;IAC7C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IACvD,aAAa,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,MAAM,CAAC,QAAgB,EAAE,YAAqB;IACrD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,MAAM,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/C,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,YAAY,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAErC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,IAAI,QAAQ,GAAyB,EAAE,CAAC;IACxC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,QAAQ,GAAG,UAAU,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,8BAA8B,WAAW,IAAI,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,WAAW,EACX,QAAQ,CAAC,OAAO,IAAI,2BAA2B,CAChD,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,WAAW,EACX,QAAQ,CAAC,OAAO,CACjB,CAAC;IAEF,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mEAAmE;IACnE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE5C,WAAW,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,uBAAuB,WAAW,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IAEvD,sBAAsB;IACtB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,WAAW,EAAE;YAC9C,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;SACjC,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,eAAe,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,2BAA2B,GAAG,CAAC,MAAM,6BAA6B,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,oBAAoB,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { StoruApiClient } from "./api-client.js";
2
+ import type { StoruConfig } from "./config.js";
3
+ /**
4
+ * Shorten a UUID to first 8 chars for compact table display.
5
+ */
6
+ export declare function shortId(uuid: string): string;
7
+ /**
8
+ * Output data either as raw JSON (when --json) or via a formatter function.
9
+ */
10
+ export declare function output<T>(data: T, opts: {
11
+ json?: boolean;
12
+ }, formatter?: (data: T) => void): void;
13
+ /**
14
+ * Resolve the app slug/id from --app flag, STORU_APP env var, or config default_app.
15
+ * Returns the resolved UUID.
16
+ */
17
+ export declare function resolveApp(client: StoruApiClient, opts: {
18
+ app?: string;
19
+ }, config: StoruConfig): Promise<string>;
20
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EACtB,IAAI,EAAE,CAAC,EACP,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EACxB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAC5B,IAAI,CAQN;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,EACtB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,CAMjB"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Shorten a UUID to first 8 chars for compact table display.
3
+ */
4
+ export function shortId(uuid) {
5
+ return uuid.slice(0, 8);
6
+ }
7
+ /**
8
+ * Output data either as raw JSON (when --json) or via a formatter function.
9
+ */
10
+ export function output(data, opts, formatter) {
11
+ if (opts.json) {
12
+ process.stdout.write(JSON.stringify(data, null, 2) + "\n");
13
+ }
14
+ else if (formatter) {
15
+ formatter(data);
16
+ }
17
+ else {
18
+ process.stdout.write(JSON.stringify(data, null, 2) + "\n");
19
+ }
20
+ }
21
+ /**
22
+ * Resolve the app slug/id from --app flag, STORU_APP env var, or config default_app.
23
+ * Returns the resolved UUID.
24
+ */
25
+ export async function resolveApp(client, opts, config) {
26
+ const slug = opts.app ?? process.env.STORU_APP ?? config.default_app;
27
+ if (!slug) {
28
+ throw new Error("No app specified. Use --app <slug> or set STORU_APP.");
29
+ }
30
+ return client.resolveAppId(slug);
31
+ }
32
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CACpB,IAAO,EACP,IAAwB,EACxB,SAA6B;IAE7B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7D,CAAC;SAAM,IAAI,SAAS,EAAE,CAAC;QACrB,SAAS,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAsB,EACtB,IAAsB,EACtB,MAAmB;IAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,WAAW,CAAC;IACrE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC"}
package/dist/index.js CHANGED
@@ -2,12 +2,12 @@
2
2
  import { Command } from "commander";
3
3
  import { readConfig, runInit } from "./config.js";
4
4
  import { StoruApiClient } from "./api-client.js";
5
- import { registerAppsCommand } from "./commands/apps.js";
6
- import { registerEpicsCommand } from "./commands/epics.js";
7
- import { registerStoriesCommand } from "./commands/stories.js";
8
- import { registerReleasesCommand } from "./commands/releases.js";
9
- import { registerLabelsCommand } from "./commands/labels.js";
10
- import { registerSubscribersCommand } from "./commands/subscribers.js";
5
+ import { registerAppCommand } from "./commands/apps.js";
6
+ import { registerEpicCommand } from "./commands/epics.js";
7
+ import { registerStoryCommand } from "./commands/stories.js";
8
+ import { registerReleaseCommand } from "./commands/releases.js";
9
+ import { registerLabelCommand } from "./commands/labels.js";
10
+ import { registerSubscriberCommand } from "./commands/subscribers.js";
11
11
  const program = new Command();
12
12
  program
13
13
  .name("storu")
@@ -20,30 +20,34 @@ program
20
20
  .action(async () => {
21
21
  await runInit();
22
22
  });
23
- // All other commands need a configured client
24
- function getClient() {
25
- try {
26
- const config = readConfig();
27
- return new StoruApiClient(config.api_url, config.api_key);
28
- }
29
- catch (err) {
30
- const message = err instanceof Error ? err.message : "Configuration error";
31
- process.stderr.write(`${message}\n`);
32
- process.exit(1);
23
+ // Lazy-resolved config and client — only read when a command actually runs
24
+ let _config = null;
25
+ function getConfig() {
26
+ if (!_config) {
27
+ _config = readConfig();
33
28
  }
29
+ return _config;
34
30
  }
35
- // Lazy-init: only resolve config when a command actually runs
31
+ function getClient() {
32
+ const cfg = getConfig();
33
+ return new StoruApiClient(cfg.api_url, cfg.api_key);
34
+ }
35
+ // Lazy proxy: reads config/creates client on first method call
36
36
  const client = new Proxy({}, {
37
37
  get(_target, prop) {
38
38
  const real = getClient();
39
- return real[prop].bind(real);
39
+ return real[prop];
40
40
  },
41
41
  });
42
- registerAppsCommand(program, client);
43
- registerEpicsCommand(program, client);
44
- registerStoriesCommand(program, client);
45
- registerReleasesCommand(program, client);
46
- registerLabelsCommand(program, client);
47
- registerSubscribersCommand(program, client);
48
- program.parse(process.argv);
42
+ registerAppCommand(program, client, getConfig);
43
+ registerEpicCommand(program, client, getConfig);
44
+ registerStoryCommand(program, client, getConfig);
45
+ registerReleaseCommand(program, client, getConfig);
46
+ registerLabelCommand(program, client, getConfig);
47
+ registerSubscriberCommand(program, client, getConfig);
48
+ program.parseAsync(process.argv).catch((err) => {
49
+ const message = err instanceof Error ? err.message : String(err);
50
+ process.stderr.write(`Error: ${message}\n`);
51
+ process.exit(1);
52
+ });
49
53
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAEvE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,8BAA8B,CAAC;KAC3C,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,kCAAkC;AAClC,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,OAAO,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,8CAA8C;AAC9C,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC;QAC3E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,8DAA8D;AAC9D,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAoB,EAAE;IAC7C,GAAG,CAAC,OAAO,EAAE,IAAI;QACf,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;QACzB,OAAQ,IAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;CACF,CAAC,CAAC;AAEH,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACrC,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACtC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACxC,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACzC,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACvC,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAE5C,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAoB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,8BAA8B,CAAC;KAC3C,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,kCAAkC;AAClC,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,OAAO,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,2EAA2E;AAC3E,IAAI,OAAO,GAAuB,IAAI,CAAC;AAEvC,SAAS,SAAS;IAChB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,UAAU,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,OAAO,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,+DAA+D;AAC/D,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAoB,EAAE;IAC7C,GAAG,CAAC,OAAO,EAAE,IAAI;QACf,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;QACzB,OAAQ,IAAoD,CAAC,IAAuB,CAAC,CAAC;IACxF,CAAC;CACF,CAAC,CAAC;AAEH,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAC/C,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAChD,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AACjD,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AACnD,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AACjD,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAEtD,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,OAAO,IAAI,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@benglo/storu-cli",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "CLI for Storu project management",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",