cc98-cli 0.1.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/LICENSE +21 -0
- package/README.md +246 -0
- package/dist/api/client.d.ts +47 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +188 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/endpoints.d.ts +48 -0
- package/dist/api/endpoints.d.ts.map +1 -0
- package/dist/api/endpoints.js +53 -0
- package/dist/api/endpoints.js.map +1 -0
- package/dist/api/types.d.ts +14 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +2 -0
- package/dist/api/types.js.map +1 -0
- package/dist/cli/commands/account.d.ts +2 -0
- package/dist/cli/commands/account.d.ts.map +1 -0
- package/dist/cli/commands/account.js +81 -0
- package/dist/cli/commands/account.js.map +1 -0
- package/dist/cli/commands/board.d.ts +2 -0
- package/dist/cli/commands/board.d.ts.map +1 -0
- package/dist/cli/commands/board.js +61 -0
- package/dist/cli/commands/board.js.map +1 -0
- package/dist/cli/commands/forum.d.ts +2 -0
- package/dist/cli/commands/forum.d.ts.map +1 -0
- package/dist/cli/commands/forum.js +38 -0
- package/dist/cli/commands/forum.js.map +1 -0
- package/dist/cli/commands/login.d.ts +2 -0
- package/dist/cli/commands/login.d.ts.map +1 -0
- package/dist/cli/commands/login.js +98 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/commands/logout.d.ts +2 -0
- package/dist/cli/commands/logout.d.ts.map +1 -0
- package/dist/cli/commands/logout.js +20 -0
- package/dist/cli/commands/logout.js.map +1 -0
- package/dist/cli/commands/me.d.ts +2 -0
- package/dist/cli/commands/me.d.ts.map +1 -0
- package/dist/cli/commands/me.js +9 -0
- package/dist/cli/commands/me.js.map +1 -0
- package/dist/cli/commands/message.d.ts +2 -0
- package/dist/cli/commands/message.d.ts.map +1 -0
- package/dist/cli/commands/message.js +42 -0
- package/dist/cli/commands/message.js.map +1 -0
- package/dist/cli/commands/notice.d.ts +2 -0
- package/dist/cli/commands/notice.d.ts.map +1 -0
- package/dist/cli/commands/notice.js +30 -0
- package/dist/cli/commands/notice.js.map +1 -0
- package/dist/cli/commands/post.d.ts +2 -0
- package/dist/cli/commands/post.d.ts.map +1 -0
- package/dist/cli/commands/post.js +37 -0
- package/dist/cli/commands/post.js.map +1 -0
- package/dist/cli/commands/search.d.ts +2 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +13 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/topic.d.ts +2 -0
- package/dist/cli/commands/topic.d.ts.map +1 -0
- package/dist/cli/commands/topic.js +196 -0
- package/dist/cli/commands/topic.js.map +1 -0
- package/dist/cli/commands/user.d.ts +2 -0
- package/dist/cli/commands/user.d.ts.map +1 -0
- package/dist/cli/commands/user.js +90 -0
- package/dist/cli/commands/user.js.map +1 -0
- package/dist/cli/context.d.ts +9 -0
- package/dist/cli/context.d.ts.map +1 -0
- package/dist/cli/context.js +8 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/options.d.ts +6 -0
- package/dist/cli/options.d.ts.map +1 -0
- package/dist/cli/options.js +22 -0
- package/dist/cli/options.js.map +1 -0
- package/dist/cli/parse.d.ts +15 -0
- package/dist/cli/parse.d.ts.map +1 -0
- package/dist/cli/parse.js +55 -0
- package/dist/cli/parse.js.map +1 -0
- package/dist/cli/prompt.d.ts +4 -0
- package/dist/cli/prompt.d.ts.map +1 -0
- package/dist/cli/prompt.js +53 -0
- package/dist/cli/prompt.js.map +1 -0
- package/dist/cli/router.d.ts +2 -0
- package/dist/cli/router.d.ts.map +1 -0
- package/dist/cli/router.js +77 -0
- package/dist/cli/router.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +17 -0
- package/dist/main.js.map +1 -0
- package/dist/storage/cache-store.d.ts +19 -0
- package/dist/storage/cache-store.d.ts.map +1 -0
- package/dist/storage/cache-store.js +82 -0
- package/dist/storage/cache-store.js.map +1 -0
- package/dist/storage/paths.d.ts +4 -0
- package/dist/storage/paths.d.ts.map +1 -0
- package/dist/storage/paths.js +14 -0
- package/dist/storage/paths.js.map +1 -0
- package/dist/storage/token-store.d.ts +39 -0
- package/dist/storage/token-store.d.ts.map +1 -0
- package/dist/storage/token-store.js +177 -0
- package/dist/storage/token-store.js.map +1 -0
- package/dist/tui/ansi.d.ts +16 -0
- package/dist/tui/ansi.d.ts.map +1 -0
- package/dist/tui/ansi.js +24 -0
- package/dist/tui/ansi.js.map +1 -0
- package/dist/tui/app.d.ts +2 -0
- package/dist/tui/app.d.ts.map +1 -0
- package/dist/tui/app.js +1096 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/cached-client.d.ts +22 -0
- package/dist/tui/cached-client.d.ts.map +1 -0
- package/dist/tui/cached-client.js +60 -0
- package/dist/tui/cached-client.js.map +1 -0
- package/dist/tui/terminal.d.ts +21 -0
- package/dist/tui/terminal.d.ts.map +1 -0
- package/dist/tui/terminal.js +67 -0
- package/dist/tui/terminal.js.map +1 -0
- package/dist/tui/ubb-renderer.d.ts +7 -0
- package/dist/tui/ubb-renderer.d.ts.map +1 -0
- package/dist/tui/ubb-renderer.js +102 -0
- package/dist/tui/ubb-renderer.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/account.ts"],"names":[],"mappings":"AAEA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuElE"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { TokenStore } from "../../storage/token-store.js";
|
|
2
|
+
export async function accountCommand(args) {
|
|
3
|
+
const [subcommand, ...rest] = args;
|
|
4
|
+
const tokenStore = new TokenStore();
|
|
5
|
+
switch (subcommand) {
|
|
6
|
+
case undefined:
|
|
7
|
+
case "--help":
|
|
8
|
+
case "-h":
|
|
9
|
+
case "help":
|
|
10
|
+
printAccountHelp();
|
|
11
|
+
return;
|
|
12
|
+
case "list": {
|
|
13
|
+
const current = await tokenStore.getCurrentAccountName();
|
|
14
|
+
const accounts = await tokenStore.listAccounts();
|
|
15
|
+
console.log(JSON.stringify({
|
|
16
|
+
current,
|
|
17
|
+
accounts: accounts.map((account) => ({
|
|
18
|
+
account: account.account,
|
|
19
|
+
userId: account.userId,
|
|
20
|
+
username: account.username,
|
|
21
|
+
displayName: account.displayName,
|
|
22
|
+
createdAt: account.createdAt,
|
|
23
|
+
updatedAt: account.updatedAt,
|
|
24
|
+
current: account.account === current
|
|
25
|
+
}))
|
|
26
|
+
}, null, 2));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
case "current": {
|
|
30
|
+
const current = await tokenStore.getCurrentAccount();
|
|
31
|
+
console.log(JSON.stringify(current ? {
|
|
32
|
+
account: current.account,
|
|
33
|
+
userId: current.userId,
|
|
34
|
+
username: current.username,
|
|
35
|
+
displayName: current.displayName,
|
|
36
|
+
createdAt: current.createdAt,
|
|
37
|
+
updatedAt: current.updatedAt
|
|
38
|
+
} : null, null, 2));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
case "use": {
|
|
42
|
+
const account = rest[0];
|
|
43
|
+
if (!account) {
|
|
44
|
+
throw new Error("usage: cc98 account use <account>");
|
|
45
|
+
}
|
|
46
|
+
const record = await tokenStore.useAccount(account);
|
|
47
|
+
console.log(JSON.stringify({
|
|
48
|
+
current: record.account,
|
|
49
|
+
userId: record.userId,
|
|
50
|
+
username: record.username,
|
|
51
|
+
displayName: record.displayName
|
|
52
|
+
}, null, 2));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
case "remove": {
|
|
56
|
+
const account = rest[0];
|
|
57
|
+
if (!account) {
|
|
58
|
+
throw new Error("usage: cc98 account remove <account>");
|
|
59
|
+
}
|
|
60
|
+
await tokenStore.removeAccount(account);
|
|
61
|
+
console.log(JSON.stringify({ removed: account }, null, 2));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
default:
|
|
65
|
+
throw new Error(`unknown account command: ${subcommand}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function printAccountHelp() {
|
|
69
|
+
console.log(`cc98 account
|
|
70
|
+
|
|
71
|
+
Usage:
|
|
72
|
+
cc98 account list
|
|
73
|
+
cc98 account current
|
|
74
|
+
cc98 account use <account>
|
|
75
|
+
cc98 account remove <account>
|
|
76
|
+
|
|
77
|
+
Options:
|
|
78
|
+
-h, --help Show this help
|
|
79
|
+
`);
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/cli/commands/account.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/board.ts"],"names":[],"mappings":"AAIA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoChE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { createCliContext } from "../context.js";
|
|
2
|
+
import { extractAccountOption } from "../options.js";
|
|
3
|
+
import { extractPageOptions, parsePositiveInteger, printJson } from "../parse.js";
|
|
4
|
+
export async function boardCommand(args) {
|
|
5
|
+
const accountOption = extractAccountOption(args);
|
|
6
|
+
const [subcommandOrId, ...rest] = accountOption.args;
|
|
7
|
+
const { client } = createCliContext({ account: accountOption.account });
|
|
8
|
+
if (!subcommandOrId || subcommandOrId === "--help" || subcommandOrId === "-h" || subcommandOrId === "help") {
|
|
9
|
+
printBoardHelp();
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
if (/^\d+$/.test(subcommandOrId)) {
|
|
13
|
+
const boardId = parsePositiveInteger(subcommandOrId, "board-id");
|
|
14
|
+
const page = extractPageOptions(rest, { size: 20 });
|
|
15
|
+
printJson(await client.getBoardTopics(boardId, page.from, page.size));
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
switch (subcommandOrId) {
|
|
19
|
+
case "list":
|
|
20
|
+
printJson(await client.getAllBoards());
|
|
21
|
+
return;
|
|
22
|
+
case "info": {
|
|
23
|
+
const boardId = parsePositiveInteger(rest[0], "board-id");
|
|
24
|
+
printJson(await client.getBoardInfo(boardId));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
case "topics": {
|
|
28
|
+
const boardId = parsePositiveInteger(rest[0], "board-id");
|
|
29
|
+
const { best, args: pageArgs } = extractBestOption(rest.slice(1));
|
|
30
|
+
const page = extractPageOptions(pageArgs, { size: 20 });
|
|
31
|
+
printJson(await client.getBoardTopics(boardId, page.from, page.size, best));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
default:
|
|
35
|
+
throw new Error(`unknown board command: ${subcommandOrId}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function extractBestOption(args) {
|
|
39
|
+
const rest = [];
|
|
40
|
+
let best = false;
|
|
41
|
+
for (const arg of args) {
|
|
42
|
+
if (arg === "--best") {
|
|
43
|
+
best = true;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
rest.push(arg);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return { best, args: rest };
|
|
50
|
+
}
|
|
51
|
+
function printBoardHelp() {
|
|
52
|
+
console.log(`cc98 board
|
|
53
|
+
|
|
54
|
+
Usage:
|
|
55
|
+
cc98 board <board-id> [--from n] [--size n]
|
|
56
|
+
cc98 board list
|
|
57
|
+
cc98 board info <board-id>
|
|
58
|
+
cc98 board topics <board-id> [--from n] [--size n] [--best]
|
|
59
|
+
`);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=board.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board.js","sourceRoot":"","sources":["../../../src/cli/commands/board.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forum.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/forum.ts"],"names":[],"mappings":"AAIA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { createCliContext } from "../context.js";
|
|
2
|
+
import { extractAccountOption } from "../options.js";
|
|
3
|
+
import { printJson } from "../parse.js";
|
|
4
|
+
export async function forumCommand(args) {
|
|
5
|
+
const accountOption = extractAccountOption(args);
|
|
6
|
+
const [subcommand] = accountOption.args;
|
|
7
|
+
const { client } = createCliContext({ account: accountOption.account });
|
|
8
|
+
switch (subcommand) {
|
|
9
|
+
case undefined:
|
|
10
|
+
case "--help":
|
|
11
|
+
case "-h":
|
|
12
|
+
case "help":
|
|
13
|
+
printForumHelp();
|
|
14
|
+
return;
|
|
15
|
+
case "index":
|
|
16
|
+
printJson(await client.getForumIndex());
|
|
17
|
+
return;
|
|
18
|
+
case "boards":
|
|
19
|
+
case "all-boards":
|
|
20
|
+
printJson(await client.getAllBoards());
|
|
21
|
+
return;
|
|
22
|
+
case "card-stat":
|
|
23
|
+
printJson(await client.getCardStat());
|
|
24
|
+
return;
|
|
25
|
+
default:
|
|
26
|
+
throw new Error(`unknown forum command: ${subcommand}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function printForumHelp() {
|
|
30
|
+
console.log(`cc98 forum
|
|
31
|
+
|
|
32
|
+
Usage:
|
|
33
|
+
cc98 forum index
|
|
34
|
+
cc98 forum boards
|
|
35
|
+
cc98 forum card-stat
|
|
36
|
+
`);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=forum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forum.js","sourceRoot":"","sources":["../../../src/cli/commands/forum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;IACxC,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAExE,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,MAAM;YACT,cAAc,EAAE,CAAC;YACjB,OAAO;QACT,KAAK,OAAO;YACV,SAAS,CAAC,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;YACxC,OAAO;QACT,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY;YACf,SAAS,CAAC,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YACvC,OAAO;QACT,KAAK,WAAW;YACd,SAAS,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACtC,OAAO;QACT;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,CAAC,GAAG,CAAC;;;;;;CAMb,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAWA,wBAAsB,YAAY,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCrE"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { createCliContext } from "../context.js";
|
|
2
|
+
import { extractAccountOption } from "../options.js";
|
|
3
|
+
import { promptPassword, promptText, readStdinText } from "../prompt.js";
|
|
4
|
+
export async function loginCommand(args = []) {
|
|
5
|
+
const options = parseLoginArgs(args);
|
|
6
|
+
if (options.help) {
|
|
7
|
+
printLoginHelp();
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const { client, tokenStore } = createCliContext();
|
|
11
|
+
const username = options.username ?? (await promptText("CC98 username: ")).trim();
|
|
12
|
+
const password = options.passwordStdin
|
|
13
|
+
? (await readStdinText()).trimEnd()
|
|
14
|
+
: await promptPassword("CC98 password: ");
|
|
15
|
+
if (!username) {
|
|
16
|
+
throw new Error("username cannot be empty");
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
const token = await client.loginWithPassword(username, password);
|
|
20
|
+
const me = await client.getMeWithAccessToken(token.accessToken);
|
|
21
|
+
const account = options.account ?? getDefaultAccountName(me, username);
|
|
22
|
+
await tokenStore.saveAccount(account, {
|
|
23
|
+
accessToken: token.accessToken,
|
|
24
|
+
refreshToken: token.refreshToken,
|
|
25
|
+
userId: typeof me.id === "number" ? me.id : undefined,
|
|
26
|
+
username,
|
|
27
|
+
displayName: typeof me.name === "string" ? me.name : undefined
|
|
28
|
+
});
|
|
29
|
+
const name = typeof me.name === "string" ? me.name : username;
|
|
30
|
+
const id = typeof me.id === "number" ? `#${me.id}` : "";
|
|
31
|
+
console.log(`logged in as ${name}${id ? ` ${id}` : ""} (${account})`);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
throw normalizeLoginError(error);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function parseLoginArgs(args) {
|
|
38
|
+
const accountOption = extractAccountOption(args);
|
|
39
|
+
const options = {
|
|
40
|
+
account: accountOption.account,
|
|
41
|
+
passwordStdin: false,
|
|
42
|
+
help: false
|
|
43
|
+
};
|
|
44
|
+
for (let index = 0; index < accountOption.args.length; index += 1) {
|
|
45
|
+
const arg = accountOption.args[index];
|
|
46
|
+
if (arg === "--help" || arg === "-h") {
|
|
47
|
+
options.help = true;
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (arg === "--password-stdin") {
|
|
51
|
+
options.passwordStdin = true;
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (arg === "--username" || arg === "-u") {
|
|
55
|
+
const value = accountOption.args[index + 1];
|
|
56
|
+
if (!value) {
|
|
57
|
+
throw new Error(`missing value for ${arg}`);
|
|
58
|
+
}
|
|
59
|
+
options.username = value;
|
|
60
|
+
index += 1;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
throw new Error(`unknown login option: ${arg}`);
|
|
64
|
+
}
|
|
65
|
+
return options;
|
|
66
|
+
}
|
|
67
|
+
function printLoginHelp() {
|
|
68
|
+
console.log(`cc98 login
|
|
69
|
+
|
|
70
|
+
Usage:
|
|
71
|
+
cc98 login
|
|
72
|
+
cc98 login -u <username>
|
|
73
|
+
cc98 login --account <account>
|
|
74
|
+
printf '%s' "$CC98_PASSWORD" | cc98 login -u <username> --password-stdin
|
|
75
|
+
|
|
76
|
+
Options:
|
|
77
|
+
-u, --username <name> Provide the CC98 username
|
|
78
|
+
-a, --account <account> Save as this local account name
|
|
79
|
+
--password-stdin Read password from stdin
|
|
80
|
+
-h, --help Show this help
|
|
81
|
+
`);
|
|
82
|
+
}
|
|
83
|
+
function getDefaultAccountName(me, username) {
|
|
84
|
+
if (typeof me.name === "string" && me.name.trim()) {
|
|
85
|
+
return me.name.trim();
|
|
86
|
+
}
|
|
87
|
+
if (typeof me.id === "number") {
|
|
88
|
+
return String(me.id);
|
|
89
|
+
}
|
|
90
|
+
return username;
|
|
91
|
+
}
|
|
92
|
+
function normalizeLoginError(error) {
|
|
93
|
+
if (error instanceof Error) {
|
|
94
|
+
return new Error(`login failed: ${error.message}`);
|
|
95
|
+
}
|
|
96
|
+
return new Error(`login failed: ${String(error)}`);
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/logout.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBtE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createCliContext } from "../context.js";
|
|
2
|
+
import { extractAccountOption } from "../options.js";
|
|
3
|
+
export async function logoutCommand(args = []) {
|
|
4
|
+
const { account, args: rest } = extractAccountOption(args);
|
|
5
|
+
if (rest.includes("--all")) {
|
|
6
|
+
const { tokenStore } = createCliContext();
|
|
7
|
+
await tokenStore.clear();
|
|
8
|
+
console.log(JSON.stringify({ loggedOut: "all" }, null, 2));
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const { tokenStore } = createCliContext({ account });
|
|
12
|
+
const current = await tokenStore.getCurrentAccountName();
|
|
13
|
+
if (!current) {
|
|
14
|
+
console.log(JSON.stringify({ loggedOut: null }, null, 2));
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
await tokenStore.removeAccount(current);
|
|
18
|
+
console.log(JSON.stringify({ loggedOut: current }, null, 2));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/cli/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAiB,EAAE;IACrD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAE3D,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,EAAE,UAAU,EAAE,GAAG,gBAAgB,EAAE,CAAC;QAC1C,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,qBAAqB,EAAE,CAAC;IACzD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,MAAM,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"me.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/me.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createCliContext } from "../context.js";
|
|
2
|
+
import { extractAccountOption } from "../options.js";
|
|
3
|
+
export async function meCommand(args = []) {
|
|
4
|
+
const { account } = extractAccountOption(args);
|
|
5
|
+
const { client } = createCliContext({ account });
|
|
6
|
+
const me = await client.getMe();
|
|
7
|
+
console.log(JSON.stringify(me, null, 2));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=me.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"me.js","sourceRoot":"","sources":["../../../src/cli/commands/me.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAiB,EAAE;IACjD,MAAM,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/message.ts"],"names":[],"mappings":"AAIA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BlE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { createCliContext } from "../context.js";
|
|
2
|
+
import { extractAccountOption } from "../options.js";
|
|
3
|
+
import { extractPageOptions, parsePositiveInteger, printJson } from "../parse.js";
|
|
4
|
+
export async function messageCommand(args) {
|
|
5
|
+
const accountOption = extractAccountOption(args);
|
|
6
|
+
const [subcommand, ...rest] = accountOption.args;
|
|
7
|
+
const { client } = createCliContext({ account: accountOption.account });
|
|
8
|
+
switch (subcommand) {
|
|
9
|
+
case undefined:
|
|
10
|
+
case "--help":
|
|
11
|
+
case "-h":
|
|
12
|
+
case "help":
|
|
13
|
+
printMessageHelp();
|
|
14
|
+
return;
|
|
15
|
+
case "unread":
|
|
16
|
+
printJson(await client.getUnreadCount());
|
|
17
|
+
return;
|
|
18
|
+
case "recent": {
|
|
19
|
+
const page = extractPageOptions(rest, { size: 10 });
|
|
20
|
+
printJson(await client.getRecentChats(page.from, page.size));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
case "history": {
|
|
24
|
+
const userId = parsePositiveInteger(rest[0], "user-id");
|
|
25
|
+
const page = extractPageOptions(rest.slice(1), { size: 10 });
|
|
26
|
+
printJson(await client.getChatHistory(userId, page.from, page.size));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
default:
|
|
30
|
+
throw new Error(`unknown message command: ${subcommand}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function printMessageHelp() {
|
|
34
|
+
console.log(`cc98 message
|
|
35
|
+
|
|
36
|
+
Usage:
|
|
37
|
+
cc98 message unread
|
|
38
|
+
cc98 message recent [--from n] [--size n]
|
|
39
|
+
cc98 message history <user-id> [--from n] [--size n]
|
|
40
|
+
`);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/cli/commands/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAElF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc;IACjD,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;IACjD,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAExE,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,MAAM;YACT,gBAAgB,EAAE,CAAC;YACnB,OAAO;QACT,KAAK,QAAQ;YACX,SAAS,CAAC,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;YACzC,OAAO;QACT,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACpD,SAAS,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAC7D,SAAS,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,CAAC,GAAG,CAAC;;;;;;CAMb,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notice.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/notice.ts"],"names":[],"mappings":"AAMA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBjE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { createCliContext } from "../context.js";
|
|
2
|
+
import { extractAccountOption } from "../options.js";
|
|
3
|
+
import { extractPageOptions, printJson } from "../parse.js";
|
|
4
|
+
export async function noticeCommand(args) {
|
|
5
|
+
const accountOption = extractAccountOption(args);
|
|
6
|
+
const [typeArg, ...rest] = accountOption.args;
|
|
7
|
+
if (!typeArg || typeArg === "--help" || typeArg === "-h" || typeArg === "help") {
|
|
8
|
+
printNoticeHelp();
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
if (!isNoticeType(typeArg)) {
|
|
12
|
+
throw new Error("usage: cc98 notice <system|at|reply> [--from n] [--size n]");
|
|
13
|
+
}
|
|
14
|
+
const page = extractPageOptions(rest, { size: 10 });
|
|
15
|
+
const { client } = createCliContext({ account: accountOption.account });
|
|
16
|
+
printJson(await client.getNotices(typeArg, page.from, page.size));
|
|
17
|
+
}
|
|
18
|
+
function isNoticeType(value) {
|
|
19
|
+
return value === "system" || value === "at" || value === "reply";
|
|
20
|
+
}
|
|
21
|
+
function printNoticeHelp() {
|
|
22
|
+
console.log(`cc98 notice
|
|
23
|
+
|
|
24
|
+
Usage:
|
|
25
|
+
cc98 notice system [--from n] [--size n]
|
|
26
|
+
cc98 notice at [--from n] [--size n]
|
|
27
|
+
cc98 notice reply [--from n] [--size n]
|
|
28
|
+
`);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=notice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notice.js","sourceRoot":"","sources":["../../../src/cli/commands/notice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI5D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc;IAChD,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;IAE9C,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QAC/E,eAAe,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,SAAS,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,OAAO,CAAC;AACnE,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,CAAC,GAAG,CAAC;;;;;;CAMb,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/post.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB/D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createCliContext } from "../context.js";
|
|
2
|
+
import { extractAccountOption } from "../options.js";
|
|
3
|
+
import { parseInteger, parsePositiveInteger, printJson } from "../parse.js";
|
|
4
|
+
export async function postCommand(args) {
|
|
5
|
+
const accountOption = extractAccountOption(args);
|
|
6
|
+
const [subcommand, ...rest] = accountOption.args;
|
|
7
|
+
const { client } = createCliContext({ account: accountOption.account });
|
|
8
|
+
switch (subcommand) {
|
|
9
|
+
case undefined:
|
|
10
|
+
case "--help":
|
|
11
|
+
case "-h":
|
|
12
|
+
case "help":
|
|
13
|
+
printPostHelp();
|
|
14
|
+
return;
|
|
15
|
+
case "reaction-state": {
|
|
16
|
+
const postId = parsePositiveInteger(rest[0], "post-id");
|
|
17
|
+
printJson(await client.getPostReactionState(postId));
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
case "rate-reasons": {
|
|
21
|
+
const type = parseInteger(rest[0], "type");
|
|
22
|
+
printJson(await client.getPostRateReasons(type));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
default:
|
|
26
|
+
throw new Error(`unknown post command: ${subcommand}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function printPostHelp() {
|
|
30
|
+
console.log(`cc98 post
|
|
31
|
+
|
|
32
|
+
Usage:
|
|
33
|
+
cc98 post reaction-state <post-id>
|
|
34
|
+
cc98 post rate-reasons <type>
|
|
35
|
+
`);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=post.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post.js","sourceRoot":"","sources":["../../../src/cli/commands/post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;IACjD,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAExE,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,MAAM;YACT,aAAa,EAAE,CAAC;YAChB,OAAO;QACT,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACxD,SAAS,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QACD,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC3C,SAAS,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,CAAC,GAAG,CAAC;;;;;CAKb,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAUjE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createCliContext } from "../context.js";
|
|
2
|
+
import { extractAccountOption } from "../options.js";
|
|
3
|
+
export async function searchCommand(args) {
|
|
4
|
+
const accountOption = extractAccountOption(args);
|
|
5
|
+
const keyword = accountOption.args.join(" ").trim();
|
|
6
|
+
if (!keyword) {
|
|
7
|
+
throw new Error("usage: cc98 search <keyword>");
|
|
8
|
+
}
|
|
9
|
+
const { client } = createCliContext({ account: accountOption.account });
|
|
10
|
+
const result = await client.searchTopics(keyword);
|
|
11
|
+
console.log(JSON.stringify(result, null, 2));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc;IAChD,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topic.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/topic.ts"],"names":[],"mappings":"AAiBA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkGhE"}
|