@gonzui/csheet-cli 1.0.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 (56) hide show
  1. package/README.ja.md +126 -0
  2. package/README.md +126 -0
  3. package/bin/cs.js +2 -0
  4. package/dist/commands/add.d.ts +3 -0
  5. package/dist/commands/add.d.ts.map +1 -0
  6. package/dist/commands/add.js +148 -0
  7. package/dist/commands/add.js.map +1 -0
  8. package/dist/commands/edit.d.ts +3 -0
  9. package/dist/commands/edit.d.ts.map +1 -0
  10. package/dist/commands/edit.js +58 -0
  11. package/dist/commands/edit.js.map +1 -0
  12. package/dist/commands/export.d.ts +3 -0
  13. package/dist/commands/export.d.ts.map +1 -0
  14. package/dist/commands/export.js +36 -0
  15. package/dist/commands/export.js.map +1 -0
  16. package/dist/commands/list.d.ts +3 -0
  17. package/dist/commands/list.d.ts.map +1 -0
  18. package/dist/commands/list.js +42 -0
  19. package/dist/commands/list.js.map +1 -0
  20. package/dist/commands/remove.d.ts +3 -0
  21. package/dist/commands/remove.d.ts.map +1 -0
  22. package/dist/commands/remove.js +50 -0
  23. package/dist/commands/remove.js.map +1 -0
  24. package/dist/commands/search.d.ts +3 -0
  25. package/dist/commands/search.d.ts.map +1 -0
  26. package/dist/commands/search.js +54 -0
  27. package/dist/commands/search.js.map +1 -0
  28. package/dist/commands/show.d.ts +3 -0
  29. package/dist/commands/show.d.ts.map +1 -0
  30. package/dist/commands/show.js +50 -0
  31. package/dist/commands/show.js.map +1 -0
  32. package/dist/index.d.ts +2 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +36 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/lib/config.d.ts +6 -0
  37. package/dist/lib/config.d.ts.map +1 -0
  38. package/dist/lib/config.js +20 -0
  39. package/dist/lib/config.js.map +1 -0
  40. package/dist/lib/markdown.d.ts +6 -0
  41. package/dist/lib/markdown.d.ts.map +1 -0
  42. package/dist/lib/markdown.js +154 -0
  43. package/dist/lib/markdown.js.map +1 -0
  44. package/dist/lib/search.d.ts +11 -0
  45. package/dist/lib/search.d.ts.map +1 -0
  46. package/dist/lib/search.js +30 -0
  47. package/dist/lib/search.js.map +1 -0
  48. package/dist/lib/storage.d.ts +15 -0
  49. package/dist/lib/storage.d.ts.map +1 -0
  50. package/dist/lib/storage.js +112 -0
  51. package/dist/lib/storage.js.map +1 -0
  52. package/dist/types.d.ts +14 -0
  53. package/dist/types.d.ts.map +1 -0
  54. package/dist/types.js +8 -0
  55. package/dist/types.js.map +1 -0
  56. package/package.json +55 -0
package/README.ja.md ADDED
@@ -0,0 +1,126 @@
1
+ # cheatsheet-cli (cs)
2
+
3
+ コマンドやツールのチートシートをローカルに保存・管理できるCLIツール。
4
+
5
+ [English README](./README.md)
6
+
7
+ ## インストール
8
+
9
+ ```bash
10
+ npm install -g cheatsheet-cli
11
+ ```
12
+
13
+ ## コマンド一覧
14
+
15
+ | コマンド | 説明 |
16
+ |---------|------|
17
+ | `cs add <name>` | チートシートを追加($EDITORでエディタ起動、未設定ならvim) |
18
+ | `cs add <name> --file <path>` | 既存ファイルから追加 |
19
+ | `cs list` | 一覧表示 |
20
+ | `cs show <name>` | 内容を表示(Markdownレンダリング付き) |
21
+ | `cs show <name> --raw` | 生のMarkdownを表示 |
22
+ | `cs search <keyword>` | ファイル名と内容からキーワード検索 |
23
+ | `cs edit <name>` | エディタで編集 |
24
+ | `cs rm <name>` | 削除(確認プロンプトあり) |
25
+ | `cs rm <name> --force` | 確認なしで削除 |
26
+ | `cs export <name>` | カレントディレクトリにエクスポート |
27
+ | `cs export <name> --out <path>` | 指定パスにエクスポート |
28
+
29
+ ## 使用例
30
+
31
+ ### チートシートの追加
32
+
33
+ ```bash
34
+ # エディタで新規作成
35
+ cs add git-commands
36
+
37
+ # 既存ファイルから追加
38
+ cs add docker-tips --file ~/notes/docker.md
39
+ ```
40
+
41
+ ### 表示
42
+
43
+ ```bash
44
+ # 一覧表示
45
+ cs list
46
+
47
+ # 内容表示(Markdownレンダリング)
48
+ cs show git-commands
49
+
50
+ # 生のMarkdownを表示
51
+ cs show git-commands --raw
52
+ ```
53
+
54
+ ### 検索
55
+
56
+ ```bash
57
+ # 名前と内容から検索
58
+ cs search commit
59
+ ```
60
+
61
+ ### 編集・削除
62
+
63
+ ```bash
64
+ # エディタで編集
65
+ cs edit git-commands
66
+
67
+ # 確認付きで削除
68
+ cs rm old-cheatsheet
69
+
70
+ # 確認なしで削除
71
+ cs rm old-cheatsheet --force
72
+ ```
73
+
74
+ ### エクスポート
75
+
76
+ ```bash
77
+ # カレントディレクトリに出力
78
+ cs export git-commands
79
+
80
+ # 指定パスに出力
81
+ cs export git-commands --out ~/backup/
82
+ ```
83
+
84
+ ## 機能
85
+
86
+ - **Markdownレンダリング**: コードブロックのシンタックスハイライト、テーブルの整形、見出しの色分け
87
+ - **全文検索**: チートシート名と内容からキーワード検索
88
+ - **エディタ連携**: 環境変数 `$EDITOR` を使用(未設定時はvim)
89
+
90
+ ## データ保存場所
91
+
92
+ チートシートは `~/.config/cheatsheet-cli/` に保存されます:
93
+
94
+ ```
95
+ ~/.config/cheatsheet-cli/
96
+ ├── data.json # メタデータ
97
+ └── sheets/ # Markdownファイル
98
+ └── {name}.md
99
+ ```
100
+
101
+ ## 命名規則
102
+
103
+ チートシート名に使用できる文字:
104
+ - 英数字(a-z, A-Z, 0-9)
105
+ - ハイフン(-)
106
+ - アンダースコア(_)
107
+
108
+ ## 開発
109
+
110
+ ```bash
111
+ # 依存関係のインストール
112
+ npm install
113
+
114
+ # ビルド
115
+ npm run build
116
+
117
+ # テスト実行
118
+ npm test
119
+
120
+ # ウォッチモード
121
+ npm run test:watch
122
+ ```
123
+
124
+ ## ライセンス
125
+
126
+ MIT
package/README.md ADDED
@@ -0,0 +1,126 @@
1
+ # cheatsheet-cli (cs)
2
+
3
+ A CLI tool for managing command and tool cheatsheets locally.
4
+
5
+ [日本語版 README](./README.ja.md)
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install -g cheatsheet-cli
11
+ ```
12
+
13
+ ## Commands
14
+
15
+ | Command | Description |
16
+ |---------|-------------|
17
+ | `cs add <name>` | Add a cheatsheet (opens $EDITOR, defaults to vim) |
18
+ | `cs add <name> --file <path>` | Add from an existing file |
19
+ | `cs list` | List all cheatsheets |
20
+ | `cs show <name>` | Display cheatsheet content (with Markdown rendering) |
21
+ | `cs show <name> --raw` | Display raw Markdown |
22
+ | `cs search <keyword>` | Search by filename and content |
23
+ | `cs edit <name>` | Edit a cheatsheet |
24
+ | `cs rm <name>` | Delete a cheatsheet (with confirmation) |
25
+ | `cs rm <name> --force` | Delete without confirmation |
26
+ | `cs export <name>` | Export to current directory |
27
+ | `cs export <name> --out <path>` | Export to specified path |
28
+
29
+ ## Usage Examples
30
+
31
+ ### Add a new cheatsheet
32
+
33
+ ```bash
34
+ # Open editor to create new cheatsheet
35
+ cs add git-commands
36
+
37
+ # Add from existing file
38
+ cs add docker-tips --file ~/notes/docker.md
39
+ ```
40
+
41
+ ### View cheatsheets
42
+
43
+ ```bash
44
+ # List all cheatsheets
45
+ cs list
46
+
47
+ # Show with Markdown rendering
48
+ cs show git-commands
49
+
50
+ # Show raw Markdown
51
+ cs show git-commands --raw
52
+ ```
53
+
54
+ ### Search
55
+
56
+ ```bash
57
+ # Search by name or content
58
+ cs search commit
59
+ ```
60
+
61
+ ### Edit and delete
62
+
63
+ ```bash
64
+ # Edit in $EDITOR
65
+ cs edit git-commands
66
+
67
+ # Delete with confirmation
68
+ cs rm old-cheatsheet
69
+
70
+ # Delete without confirmation
71
+ cs rm old-cheatsheet --force
72
+ ```
73
+
74
+ ### Export
75
+
76
+ ```bash
77
+ # Export to current directory
78
+ cs export git-commands
79
+
80
+ # Export to specific path
81
+ cs export git-commands --out ~/backup/
82
+ ```
83
+
84
+ ## Features
85
+
86
+ - **Markdown Rendering**: Syntax highlighting for code blocks, formatted tables, colored headings
87
+ - **Full-text Search**: Search by cheatsheet name and content
88
+ - **Editor Integration**: Uses `$EDITOR` environment variable (defaults to vim)
89
+
90
+ ## Data Storage
91
+
92
+ Cheatsheets are stored in `~/.config/cheatsheet-cli/`:
93
+
94
+ ```
95
+ ~/.config/cheatsheet-cli/
96
+ ├── data.json # Metadata
97
+ └── sheets/ # Markdown files
98
+ └── {name}.md
99
+ ```
100
+
101
+ ## Naming Rules
102
+
103
+ Cheatsheet names can only contain:
104
+ - Alphanumeric characters (a-z, A-Z, 0-9)
105
+ - Hyphens (-)
106
+ - Underscores (_)
107
+
108
+ ## Development
109
+
110
+ ```bash
111
+ # Install dependencies
112
+ npm install
113
+
114
+ # Build
115
+ npm run build
116
+
117
+ # Run tests
118
+ npm test
119
+
120
+ # Watch mode
121
+ npm run test:watch
122
+ ```
123
+
124
+ ## License
125
+
126
+ MIT
package/bin/cs.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require('../dist/index.js');
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const addCommand: Command;
3
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAwD5C,eAAO,MAAM,UAAU,SAuHnB,CAAC"}
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.addCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ const child_process_1 = require("child_process");
12
+ const readline_1 = __importDefault(require("readline"));
13
+ const storage_1 = require("../lib/storage");
14
+ const config_1 = require("../lib/config");
15
+ // 上書き確認プロンプト
16
+ const confirmOverwrite = async (name) => {
17
+ const rl = readline_1.default.createInterface({
18
+ input: process.stdin,
19
+ output: process.stdout,
20
+ });
21
+ return new Promise((resolve) => {
22
+ rl.question(chalk_1.default.yellow(`シート "${name}" は既に存在します。上書きしますか? (y/N): `), (answer) => {
23
+ rl.close();
24
+ resolve(answer.toLowerCase() === 'y');
25
+ });
26
+ });
27
+ };
28
+ // エディタを起動してテキストを編集
29
+ const openEditor = (filePath) => {
30
+ return new Promise((resolve, reject) => {
31
+ const editor = (0, config_1.getEditor)();
32
+ const child = (0, child_process_1.spawn)(editor, [filePath], {
33
+ stdio: 'inherit',
34
+ });
35
+ child.on('exit', (code) => {
36
+ if (code === 0) {
37
+ resolve();
38
+ }
39
+ else {
40
+ reject(new Error(`エディタが終了コード ${code} で終了しました`));
41
+ }
42
+ });
43
+ child.on('error', (err) => {
44
+ reject(err);
45
+ });
46
+ });
47
+ };
48
+ exports.addCommand = new commander_1.Command('add')
49
+ .description('チートシートを追加')
50
+ .argument('<name>', 'チートシートの名前')
51
+ .option('-f, --file <path>', '既存ファイルから追加')
52
+ .addOption(new commander_1.Option('-i, --image <path>', '画像ファイルを追加').hideHelp())
53
+ .action(async (name, options) => {
54
+ // 名前のバリデーション
55
+ if (!(0, storage_1.validateName)(name)) {
56
+ console.error(chalk_1.default.red('エラー: 名前には英数字、ハイフン、アンダースコアのみ使用できます'));
57
+ process.exit(1);
58
+ }
59
+ // 既存シートのチェック
60
+ const existingSheet = await (0, storage_1.getSheet)(name);
61
+ if (existingSheet) {
62
+ const shouldOverwrite = await confirmOverwrite(name);
63
+ if (!shouldOverwrite) {
64
+ console.log(chalk_1.default.yellow('キャンセルしました'));
65
+ return;
66
+ }
67
+ }
68
+ const now = new Date().toISOString();
69
+ try {
70
+ if (options.image) {
71
+ // 画像ファイルから追加
72
+ const imagePath = path_1.default.resolve(options.image);
73
+ if (!(await fs_extra_1.default.pathExists(imagePath))) {
74
+ console.error(chalk_1.default.red(`エラー: ファイルが見つかりません: ${imagePath}`));
75
+ process.exit(1);
76
+ }
77
+ if (!(0, storage_1.isValidImageExtension)(imagePath)) {
78
+ console.error(chalk_1.default.red('エラー: サポートされていない画像形式です (png, jpg, jpeg, gif, webp, svg)'));
79
+ process.exit(1);
80
+ }
81
+ const ext = path_1.default.extname(imagePath);
82
+ const filename = `${name}${ext}`;
83
+ const destPath = path_1.default.join(config_1.IMAGES_DIR, filename);
84
+ await (0, storage_1.copyFile)(imagePath, destPath);
85
+ const sheet = {
86
+ name,
87
+ type: 'image',
88
+ filename,
89
+ createdAt: existingSheet?.createdAt || now,
90
+ updatedAt: now,
91
+ };
92
+ await (0, storage_1.addOrUpdateSheet)(sheet);
93
+ console.log(chalk_1.default.green(`画像シート "${name}" を追加しました`));
94
+ }
95
+ else if (options.file) {
96
+ // 既存テキストファイルから追加
97
+ const filePath = path_1.default.resolve(options.file);
98
+ if (!(await fs_extra_1.default.pathExists(filePath))) {
99
+ console.error(chalk_1.default.red(`エラー: ファイルが見つかりません: ${filePath}`));
100
+ process.exit(1);
101
+ }
102
+ const content = await fs_extra_1.default.readFile(filePath, 'utf-8');
103
+ const filename = `${name}.md`;
104
+ const destPath = path_1.default.join(config_1.SHEETS_DIR, filename);
105
+ await fs_extra_1.default.writeFile(destPath, content, 'utf-8');
106
+ const sheet = {
107
+ name,
108
+ type: 'text',
109
+ filename,
110
+ createdAt: existingSheet?.createdAt || now,
111
+ updatedAt: now,
112
+ };
113
+ await (0, storage_1.addOrUpdateSheet)(sheet);
114
+ console.log(chalk_1.default.green(`テキストシート "${name}" を追加しました`));
115
+ }
116
+ else {
117
+ // エディタで新規作成
118
+ const filename = `${name}.md`;
119
+ const filePath = path_1.default.join(config_1.SHEETS_DIR, filename);
120
+ // 既存のファイルがない場合は空ファイルを作成
121
+ if (!(await fs_extra_1.default.pathExists(filePath))) {
122
+ await fs_extra_1.default.writeFile(filePath, '', 'utf-8');
123
+ }
124
+ await openEditor(filePath);
125
+ // エディタ終了後、ファイルが空でないかチェック
126
+ const content = await fs_extra_1.default.readFile(filePath, 'utf-8');
127
+ if (content.trim() === '') {
128
+ await fs_extra_1.default.remove(filePath);
129
+ console.log(chalk_1.default.yellow('内容が空のためキャンセルしました'));
130
+ return;
131
+ }
132
+ const sheet = {
133
+ name,
134
+ type: 'text',
135
+ filename,
136
+ createdAt: existingSheet?.createdAt || now,
137
+ updatedAt: now,
138
+ };
139
+ await (0, storage_1.addOrUpdateSheet)(sheet);
140
+ console.log(chalk_1.default.green(`テキストシート "${name}" を追加しました`));
141
+ }
142
+ }
143
+ catch (error) {
144
+ console.error(chalk_1.default.red(`エラー: ${error.message}`));
145
+ process.exit(1);
146
+ }
147
+ });
148
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const editCommand: Command;
3
+ //# sourceMappingURL=edit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,eAAO,MAAM,WAAW,SA6BpB,CAAC"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.editCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const child_process_1 = require("child_process");
10
+ const storage_1 = require("../lib/storage");
11
+ const config_1 = require("../lib/config");
12
+ // エディタを起動してテキストを編集
13
+ const openEditor = (filePath) => {
14
+ return new Promise((resolve, reject) => {
15
+ const editor = (0, config_1.getEditor)();
16
+ const child = (0, child_process_1.spawn)(editor, [filePath], {
17
+ stdio: 'inherit',
18
+ });
19
+ child.on('exit', (code) => {
20
+ if (code === 0) {
21
+ resolve();
22
+ }
23
+ else {
24
+ reject(new Error(`エディタが終了コード ${code} で終了しました`));
25
+ }
26
+ });
27
+ child.on('error', (err) => {
28
+ reject(err);
29
+ });
30
+ });
31
+ };
32
+ exports.editCommand = new commander_1.Command('edit')
33
+ .description('チートシートを編集(テキストのみ)')
34
+ .argument('<name>', 'チートシートの名前')
35
+ .action(async (name) => {
36
+ try {
37
+ const sheet = await (0, storage_1.getSheet)(name);
38
+ if (!sheet) {
39
+ console.error(chalk_1.default.red(`エラー: シート "${name}" が見つかりません`));
40
+ process.exit(1);
41
+ }
42
+ if (sheet.type !== 'text') {
43
+ console.error(chalk_1.default.red('エラー: 画像シートは編集できません'));
44
+ process.exit(1);
45
+ }
46
+ const filePath = (0, storage_1.getSheetFilePath)(sheet);
47
+ await openEditor(filePath);
48
+ // 更新日時を更新
49
+ sheet.updatedAt = new Date().toISOString();
50
+ await (0, storage_1.addOrUpdateSheet)(sheet);
51
+ console.log(chalk_1.default.green(`シート "${name}" を更新しました`));
52
+ }
53
+ catch (error) {
54
+ console.error(chalk_1.default.red(`エラー: ${error.message}`));
55
+ process.exit(1);
56
+ }
57
+ });
58
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,iDAAsC;AACtC,4CAA8E;AAC9E,0CAA0C;AAE1C,mBAAmB;AACnB,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAiB,EAAE;IACrD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE;YACtC,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,IAAI,UAAU,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEW,QAAA,WAAW,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,mBAAmB,CAAC;KAChC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC/B,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;IAC7B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAA,kBAAQ,EAAC,IAAI,CAAC,CAAC;QAEnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,aAAa,IAAI,YAAY,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAA,0BAAgB,EAAC,KAAK,CAAC,CAAC;QACzC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE3B,UAAU;QACV,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,IAAA,0BAAgB,EAAC,KAAK,CAAC,CAAC;QAE9B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAS,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const exportCommand: Command;
3
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,aAAa,SA0BtB,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.exportCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ const storage_1 = require("../lib/storage");
12
+ exports.exportCommand = new commander_1.Command('export')
13
+ .description('チートシートをエクスポート')
14
+ .argument('<name>', 'チートシートの名前')
15
+ .option('-o, --out <path>', '出力先パス')
16
+ .action(async (name, options) => {
17
+ try {
18
+ const sheet = await (0, storage_1.getSheet)(name);
19
+ if (!sheet) {
20
+ console.error(chalk_1.default.red(`エラー: シート "${name}" が見つかりません`));
21
+ process.exit(1);
22
+ }
23
+ const srcPath = (0, storage_1.getSheetFilePath)(sheet);
24
+ const destDir = options.out ? path_1.default.resolve(options.out) : process.cwd();
25
+ const destPath = path_1.default.join(destDir, sheet.filename);
26
+ // 出力先ディレクトリが存在することを確認
27
+ await fs_extra_1.default.ensureDir(destDir);
28
+ await fs_extra_1.default.copy(srcPath, destPath);
29
+ console.log(chalk_1.default.green(`エクスポートしました: ${destPath}`));
30
+ }
31
+ catch (error) {
32
+ console.error(chalk_1.default.red(`エラー: ${error.message}`));
33
+ process.exit(1);
34
+ }
35
+ });
36
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,gDAAwB;AACxB,wDAA0B;AAC1B,4CAA4D;AAE/C,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,eAAe,CAAC;KAC5B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC/B,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC;KACnC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAyB,EAAE,EAAE;IACxD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAA,kBAAQ,EAAC,IAAI,CAAC,CAAC;QAEnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,aAAa,IAAI,YAAY,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,0BAAgB,EAAC,KAAK,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACxE,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEpD,sBAAsB;QACtB,MAAM,kBAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAE5B,MAAM,kBAAE,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAS,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const listCommand: Command;
3
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SAkCpB,CAAC"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.listCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const cli_table3_1 = __importDefault(require("cli-table3"));
10
+ const storage_1 = require("../lib/storage");
11
+ exports.listCommand = new commander_1.Command('list')
12
+ .description('チートシート一覧を表示')
13
+ .action(async () => {
14
+ try {
15
+ const sheets = await (0, storage_1.getAllSheets)();
16
+ if (sheets.length === 0) {
17
+ console.log(chalk_1.default.yellow('チートシートがありません'));
18
+ return;
19
+ }
20
+ // 更新日時でソート(新しい順)
21
+ sheets.sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());
22
+ const table = new cli_table3_1.default({
23
+ head: [
24
+ chalk_1.default.cyan('名前'),
25
+ chalk_1.default.cyan('種類'),
26
+ chalk_1.default.cyan('更新日時'),
27
+ ],
28
+ colWidths: [30, 10, 25],
29
+ });
30
+ for (const sheet of sheets) {
31
+ const typeLabel = sheet.type === 'text' ? 'テキスト' : '画像';
32
+ const updatedAt = new Date(sheet.updatedAt).toLocaleString('ja-JP');
33
+ table.push([sheet.name, typeLabel, updatedAt]);
34
+ }
35
+ console.log(table.toString());
36
+ }
37
+ catch (error) {
38
+ console.error(chalk_1.default.red(`エラー: ${error.message}`));
39
+ process.exit(1);
40
+ }
41
+ });
42
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,4DAA+B;AAC/B,4CAA8C;AAEjC,QAAA,WAAW,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,aAAa,CAAC;KAC1B,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAY,GAAE,CAAC;QAEpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,iBAAiB;QACjB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAEzF,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;YACtB,IAAI,EAAE;gBACJ,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChB,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChB,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC;aACnB;YACD,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;SACxB,CAAC,CAAC;QAEH,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YACxD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACpE,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAS,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const removeCommand: Command;
3
+ //# sourceMappingURL=remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,eAAO,MAAM,aAAa,SA2BtB,CAAC"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.removeCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const readline_1 = __importDefault(require("readline"));
10
+ const storage_1 = require("../lib/storage");
11
+ // 削除確認プロンプト
12
+ const confirmDelete = async (name) => {
13
+ const rl = readline_1.default.createInterface({
14
+ input: process.stdin,
15
+ output: process.stdout,
16
+ });
17
+ return new Promise((resolve) => {
18
+ rl.question(chalk_1.default.yellow(`シート "${name}" を削除しますか? (y/N): `), (answer) => {
19
+ rl.close();
20
+ resolve(answer.toLowerCase() === 'y');
21
+ });
22
+ });
23
+ };
24
+ exports.removeCommand = new commander_1.Command('rm')
25
+ .description('チートシートを削除')
26
+ .argument('<name>', 'チートシートの名前')
27
+ .option('-f, --force', '確認をスキップ')
28
+ .action(async (name, options) => {
29
+ try {
30
+ const sheet = await (0, storage_1.getSheet)(name);
31
+ if (!sheet) {
32
+ console.error(chalk_1.default.red(`エラー: シート "${name}" が見つかりません`));
33
+ process.exit(1);
34
+ }
35
+ if (!options.force) {
36
+ const shouldDelete = await confirmDelete(name);
37
+ if (!shouldDelete) {
38
+ console.log(chalk_1.default.yellow('キャンセルしました'));
39
+ return;
40
+ }
41
+ }
42
+ await (0, storage_1.removeSheet)(name);
43
+ console.log(chalk_1.default.green(`シート "${name}" を削除しました`));
44
+ }
45
+ catch (error) {
46
+ console.error(chalk_1.default.red(`エラー: ${error.message}`));
47
+ process.exit(1);
48
+ }
49
+ });
50
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,wDAAgC;AAChC,4CAAuD;AAEvD,YAAY;AACZ,MAAM,aAAa,GAAG,KAAK,EAAE,IAAY,EAAoB,EAAE;IAC7D,MAAM,EAAE,GAAG,kBAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CACT,eAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,oBAAoB,CAAC,EAC9C,CAAC,MAAM,EAAE,EAAE;YACT,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC;QACxC,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEW,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,IAAI,CAAC;KAC3C,WAAW,CAAC,WAAW,CAAC;KACxB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC/B,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC;KAChC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA4B,EAAE,EAAE;IAC3D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAA,kBAAQ,EAAC,IAAI,CAAC,CAAC;QAEnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,aAAa,IAAI,YAAY,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;gBACvC,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,IAAA,qBAAW,EAAC,IAAI,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAS,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}