@urugus/slack-cli 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"history-display.d.ts","sourceRoot":"","sources":["../../src/commands/history-display.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAGpD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,WAAW,EAAE,MAAM,GAClB,IAAI,CA2BN"}
1
+ {"version":3,"file":"history-display.d.ts","sourceRoot":"","sources":["../../src/commands/history-display.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAIpD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,WAAW,EAAE,MAAM,GAClB,IAAI,CA4BN"}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.displayHistoryResults = displayHistoryResults;
7
7
  const chalk_1 = __importDefault(require("chalk"));
8
8
  const date_utils_1 = require("../utils/date-utils");
9
+ const format_utils_1 = require("../utils/format-utils");
9
10
  function displayHistoryResults(messages, users, channelName) {
10
11
  if (messages.length === 0) {
11
12
  console.log(chalk_1.default.yellow('No messages found in the specified channel.'));
@@ -24,7 +25,8 @@ function displayHistoryResults(messages, users, channelName) {
24
25
  }
25
26
  console.log(chalk_1.default.gray(`[${timestamp}]`) + ' ' + chalk_1.default.cyan(author));
26
27
  if (message.text) {
27
- console.log(message.text);
28
+ const formattedText = (0, format_utils_1.formatMessageWithMentions)(message.text, users);
29
+ console.log(formattedText);
28
30
  }
29
31
  console.log(''); // Empty line between messages
30
32
  });
@@ -1 +1 @@
1
- {"version":3,"file":"history-display.js","sourceRoot":"","sources":["../../src/commands/history-display.ts"],"names":[],"mappings":";;;;;AAIA,sDA+BC;AAnCD,kDAA0B;AAE1B,oDAA2D;AAE3D,SAAgB,qBAAqB,CACnC,QAAmB,EACnB,KAA0B,EAC1B,WAAmB;IAEnB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACzE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,WAAW,KAAK,CAAC,CAAC,CAAC;IAEpE,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,OAAgB,EAAE,EAAE;QAC9C,MAAM,SAAS,GAAG,IAAA,iCAAoB,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnD,IAAI,MAAM,GAAG,SAAS,CAAC;QAEvB,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAE,CAAC;QACpC,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,SAAS,GAAG,CAAC,GAAG,GAAG,GAAG,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,8BAA8B;IACjD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,eAAe,QAAQ,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"history-display.js","sourceRoot":"","sources":["../../src/commands/history-display.ts"],"names":[],"mappings":";;;;;AAKA,sDAgCC;AArCD,kDAA0B;AAE1B,oDAA2D;AAC3D,wDAAkE;AAElE,SAAgB,qBAAqB,CACnC,QAAmB,EACnB,KAA0B,EAC1B,WAAmB;IAEnB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACzE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,WAAW,KAAK,CAAC,CAAC,CAAC;IAEpE,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,OAAgB,EAAE,EAAE;QAC9C,MAAM,SAAS,GAAG,IAAA,iCAAoB,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnD,IAAI,MAAM,GAAG,SAAS,CAAC;QAEvB,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAE,CAAC;QACpC,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,SAAS,GAAG,CAAC,GAAG,GAAG,GAAG,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,aAAa,GAAG,IAAA,wCAAyB,EAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,8BAA8B;IACjD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,eAAe,QAAQ,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;AACxE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"unread.d.ts","sourceRoot":"","sources":["../../src/commands/unread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmDpC,wBAAgB,kBAAkB,IAAI,OAAO,CAyB5C"}
1
+ {"version":3,"file":"unread.d.ts","sourceRoot":"","sources":["../../src/commands/unread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuDpC,wBAAgB,kBAAkB,IAAI,OAAO,CAyB5C"}
@@ -12,6 +12,7 @@ const date_utils_1 = require("../utils/date-utils");
12
12
  const channel_formatter_1 = require("../utils/channel-formatter");
13
13
  const channel_formatters_1 = require("../utils/formatters/channel-formatters");
14
14
  const constants_1 = require("../utils/constants");
15
+ const format_utils_1 = require("../utils/format-utils");
15
16
  async function handleSpecificChannelUnread(client, options) {
16
17
  const result = await client.getChannelUnread(options.channel);
17
18
  const channelName = (0, channel_formatter_1.formatChannelName)(result.channel.name);
@@ -22,7 +23,10 @@ async function handleSpecificChannelUnread(client, options) {
22
23
  const timestamp = (0, date_utils_1.formatSlackTimestamp)(message.ts);
23
24
  const author = message.user ? result.users.get(message.user) || message.user : 'unknown';
24
25
  console.log(`${chalk_1.default.gray(timestamp)} ${chalk_1.default.cyan(author)}`);
25
- console.log(message.text || '(no text)');
26
+ const text = message.text
27
+ ? (0, format_utils_1.formatMessageWithMentions)(message.text, result.users)
28
+ : '(no text)';
29
+ console.log(text);
26
30
  console.log('');
27
31
  });
28
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"unread.js","sourceRoot":"","sources":["../../src/commands/unread.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unread.js","sourceRoot":"","sources":["../../src/commands/unread.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function formatMessageWithMentions(message: string, users: Map<string, string>): string;
2
+ //# sourceMappingURL=format-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-utils.d.ts","sourceRoot":"","sources":["../../src/utils/format-utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAM7F"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatMessageWithMentions = formatMessageWithMentions;
4
+ function formatMessageWithMentions(message, users) {
5
+ // Replace <@USERID> mentions with @username
6
+ return message.replace(/<@([A-Z0-9]+)>/g, (match, userId) => {
7
+ const username = users.get(userId) || userId;
8
+ return `@${username}`;
9
+ });
10
+ }
11
+ //# sourceMappingURL=format-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-utils.js","sourceRoot":"","sources":["../../src/utils/format-utils.ts"],"names":[],"mappings":";;AAAA,8DAMC;AAND,SAAgB,yBAAyB,CAAC,OAAe,EAAE,KAA0B;IACnF,4CAA4C;IAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC1D,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;QAC7C,OAAO,IAAI,QAAQ,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@urugus/slack-cli",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "A command-line tool for sending messages to Slack",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -1,6 +1,7 @@
1
1
  import chalk from 'chalk';
2
2
  import { Message } from '../utils/slack-api-client';
3
3
  import { formatSlackTimestamp } from '../utils/date-utils';
4
+ import { formatMessageWithMentions } from '../utils/format-utils';
4
5
 
5
6
  export function displayHistoryResults(
6
7
  messages: Message[],
@@ -27,7 +28,8 @@ export function displayHistoryResults(
27
28
 
28
29
  console.log(chalk.gray(`[${timestamp}]`) + ' ' + chalk.cyan(author));
29
30
  if (message.text) {
30
- console.log(message.text);
31
+ const formattedText = formatMessageWithMentions(message.text, users);
32
+ console.log(formattedText);
31
33
  }
32
34
  console.log(''); // Empty line between messages
33
35
  });
@@ -8,6 +8,7 @@ import { formatSlackTimestamp } from '../utils/date-utils';
8
8
  import { formatChannelName } from '../utils/channel-formatter';
9
9
  import { createChannelFormatter } from '../utils/formatters/channel-formatters';
10
10
  import { DEFAULTS } from '../utils/constants';
11
+ import { formatMessageWithMentions } from '../utils/format-utils';
11
12
 
12
13
  async function handleSpecificChannelUnread(
13
14
  client: SlackApiClient,
@@ -24,7 +25,10 @@ async function handleSpecificChannelUnread(
24
25
  const timestamp = formatSlackTimestamp(message.ts);
25
26
  const author = message.user ? result.users.get(message.user) || message.user : 'unknown';
26
27
  console.log(`${chalk.gray(timestamp)} ${chalk.cyan(author)}`);
27
- console.log(message.text || '(no text)');
28
+ const text = message.text
29
+ ? formatMessageWithMentions(message.text, result.users)
30
+ : '(no text)';
31
+ console.log(text);
28
32
  console.log('');
29
33
  });
30
34
  }
@@ -0,0 +1,7 @@
1
+ export function formatMessageWithMentions(message: string, users: Map<string, string>): string {
2
+ // Replace <@USERID> mentions with @username
3
+ return message.replace(/<@([A-Z0-9]+)>/g, (match, userId) => {
4
+ const username = users.get(userId) || userId;
5
+ return `@${username}`;
6
+ });
7
+ }
@@ -0,0 +1,61 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { formatMessageWithMentions } from '../../src/utils/format-utils';
3
+
4
+ describe('formatMessageWithMentions', () => {
5
+ it('should replace user ID mentions with usernames', () => {
6
+ const message = 'Hello <@U784E34>, please check this';
7
+ const users = new Map([['U784E34', 'sakashita']]);
8
+
9
+ const result = formatMessageWithMentions(message, users);
10
+
11
+ expect(result).toBe('Hello @sakashita, please check this');
12
+ });
13
+
14
+ it('should handle multiple mentions', () => {
15
+ const message = '<@U784E34> and <@U123456> are working on this';
16
+ const users = new Map([
17
+ ['U784E34', 'sakashita'],
18
+ ['U123456', 'tanaka']
19
+ ]);
20
+
21
+ const result = formatMessageWithMentions(message, users);
22
+
23
+ expect(result).toBe('@sakashita and @tanaka are working on this');
24
+ });
25
+
26
+ it('should keep user ID if username is not found', () => {
27
+ const message = 'Hello <@U784E34>, please check this';
28
+ const users = new Map<string, string>();
29
+
30
+ const result = formatMessageWithMentions(message, users);
31
+
32
+ expect(result).toBe('Hello @U784E34, please check this');
33
+ });
34
+
35
+ it('should handle messages without mentions', () => {
36
+ const message = 'This is a regular message';
37
+ const users = new Map<string, string>();
38
+
39
+ const result = formatMessageWithMentions(message, users);
40
+
41
+ expect(result).toBe('This is a regular message');
42
+ });
43
+
44
+ it('should handle empty message', () => {
45
+ const message = '';
46
+ const users = new Map<string, string>();
47
+
48
+ const result = formatMessageWithMentions(message, users);
49
+
50
+ expect(result).toBe('');
51
+ });
52
+
53
+ it('should handle malformed mentions', () => {
54
+ const message = 'Hello <@>, <@ >, <@invalid';
55
+ const users = new Map<string, string>();
56
+
57
+ const result = formatMessageWithMentions(message, users);
58
+
59
+ expect(result).toBe('Hello <@>, <@ >, <@invalid');
60
+ });
61
+ });