@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
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const searchCommand: Command;
3
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,SAiDtB,CAAC"}
@@ -0,0 +1,54 @@
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.searchCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const storage_1 = require("../lib/storage");
10
+ exports.searchCommand = new commander_1.Command('search')
11
+ .description('チートシートをキーワード検索')
12
+ .argument('<keyword>', '検索キーワード')
13
+ .action(async (keyword) => {
14
+ try {
15
+ const sheets = await (0, storage_1.getAllSheets)();
16
+ const lowerKeyword = keyword.toLowerCase();
17
+ const results = [];
18
+ for (const sheet of sheets) {
19
+ // 名前で検索
20
+ if (sheet.name.toLowerCase().includes(lowerKeyword)) {
21
+ results.push({
22
+ name: sheet.name,
23
+ type: sheet.type === 'text' ? 'テキスト' : '画像',
24
+ matchType: '名前',
25
+ });
26
+ continue;
27
+ }
28
+ // テキストシートの場合は内容も検索
29
+ if (sheet.type === 'text') {
30
+ const content = await (0, storage_1.readSheetContent)(sheet);
31
+ if (content.toLowerCase().includes(lowerKeyword)) {
32
+ results.push({
33
+ name: sheet.name,
34
+ type: 'テキスト',
35
+ matchType: '内容',
36
+ });
37
+ }
38
+ }
39
+ }
40
+ if (results.length === 0) {
41
+ console.log(chalk_1.default.yellow(`"${keyword}" に一致するシートが見つかりませんでした`));
42
+ return;
43
+ }
44
+ console.log(chalk_1.default.green(`${results.length} 件見つかりました:\n`));
45
+ for (const result of results) {
46
+ console.log(` ${chalk_1.default.cyan(result.name)} (${result.type}) - ${chalk_1.default.gray(result.matchType + 'で一致')}`);
47
+ }
48
+ }
49
+ catch (error) {
50
+ console.error(chalk_1.default.red(`エラー: ${error.message}`));
51
+ process.exit(1);
52
+ }
53
+ });
54
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,4CAAgE;AAEnD,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,gBAAgB,CAAC;KAC7B,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;KAChC,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAY,GAAE,CAAC;QACpC,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAwD,EAAE,CAAC;QAExE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,QAAQ;YACR,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;oBAC3C,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,mBAAmB;YACnB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,MAAM,IAAA,0BAAgB,EAAC,KAAK,CAAC,CAAC;gBAC9C,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;oBACjD,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,IAAI,EAAE,MAAM;wBACZ,SAAS,EAAE,IAAI;qBAChB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,IAAI,OAAO,uBAAuB,CAAC,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC;QAE1D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CACT,KAAK,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,OAAO,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE,CAC1F,CAAC;QACJ,CAAC;IACH,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 showCommand: Command;
3
+ //# sourceMappingURL=show.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAM5C,eAAO,MAAM,WAAW,SAoCpB,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.showCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const open_1 = __importDefault(require("open"));
10
+ const storage_1 = require("../lib/storage");
11
+ const markdown_1 = require("../lib/markdown");
12
+ exports.showCommand = new commander_1.Command('show')
13
+ .description('チートシートの内容を表示')
14
+ .argument('<name>', 'チートシートの名前')
15
+ .addOption(new commander_1.Option('-o, --open', '外部ビューアで開く(画像の場合)').hideHelp())
16
+ .option('-r, --raw', '生のMarkdownを表示')
17
+ .action(async (name, options) => {
18
+ try {
19
+ const sheet = await (0, storage_1.getSheet)(name);
20
+ if (!sheet) {
21
+ console.error(chalk_1.default.red(`エラー: シート "${name}" が見つかりません`));
22
+ process.exit(1);
23
+ }
24
+ if (sheet.type === 'text') {
25
+ const content = await (0, storage_1.readSheetContent)(sheet);
26
+ if (options.raw) {
27
+ console.log(content);
28
+ }
29
+ else {
30
+ console.log((0, markdown_1.renderMarkdown)(content));
31
+ }
32
+ }
33
+ else {
34
+ const filePath = (0, storage_1.getSheetFilePath)(sheet);
35
+ console.log(chalk_1.default.cyan(`画像ファイル: ${filePath}`));
36
+ if (options.open) {
37
+ await (0, open_1.default)(filePath);
38
+ console.log(chalk_1.default.green('外部ビューアで開きました'));
39
+ }
40
+ else {
41
+ console.log(chalk_1.default.gray('--open オプションで外部ビューアで開けます'));
42
+ }
43
+ }
44
+ }
45
+ catch (error) {
46
+ console.error(chalk_1.default.red(`エラー: ${error.message}`));
47
+ process.exit(1);
48
+ }
49
+ });
50
+ //# sourceMappingURL=show.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":";;;;;;AAAA,yCAA4C;AAC5C,kDAA0B;AAC1B,gDAAwB;AACxB,4CAA8E;AAC9E,8CAAiD;AAEpC,QAAA,WAAW,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,cAAc,CAAC;KAC3B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KAC/B,SAAS,CAAC,IAAI,kBAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC,QAAQ,EAAE,CAAC;KAClE,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC;KACpC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA0C,EAAE,EAAE;IACzE,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,MAAM,OAAO,GAAG,MAAM,IAAA,0BAAgB,EAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,IAAA,yBAAc,EAAC,OAAO,CAAC,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,IAAA,0BAAgB,EAAC,KAAK,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC,CAAC;YAE/C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAA,cAAI,EAAC,QAAQ,CAAC,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const commander_1 = require("commander");
4
+ const add_1 = require("./commands/add");
5
+ const list_1 = require("./commands/list");
6
+ const show_1 = require("./commands/show");
7
+ const search_1 = require("./commands/search");
8
+ const edit_1 = require("./commands/edit");
9
+ const remove_1 = require("./commands/remove");
10
+ const export_1 = require("./commands/export");
11
+ const storage_1 = require("./lib/storage");
12
+ const program = new commander_1.Command();
13
+ program
14
+ .name('cs')
15
+ .description('コマンドやツールのチートシートをローカルに保存・管理するCLIツール')
16
+ .version('1.0.0');
17
+ // コマンドを登録
18
+ program.addCommand(add_1.addCommand);
19
+ program.addCommand(list_1.listCommand);
20
+ program.addCommand(show_1.showCommand);
21
+ program.addCommand(search_1.searchCommand);
22
+ program.addCommand(edit_1.editCommand);
23
+ program.addCommand(remove_1.removeCommand);
24
+ program.addCommand(export_1.exportCommand);
25
+ // メイン処理
26
+ const main = async () => {
27
+ // ストレージを初期化
28
+ await (0, storage_1.initStorage)();
29
+ // コマンドをパース
30
+ program.parse(process.argv);
31
+ };
32
+ main().catch((error) => {
33
+ console.error('予期しないエラーが発生しました:', error.message);
34
+ process.exit(1);
35
+ });
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,yCAAoC;AACpC,wCAA4C;AAC5C,0CAA8C;AAC9C,0CAA8C;AAC9C,8CAAkD;AAClD,0CAA8C;AAC9C,8CAAkD;AAClD,8CAAkD;AAClD,2CAA4C;AAE5C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,oCAAoC,CAAC;KACjD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,UAAU;AACV,OAAO,CAAC,UAAU,CAAC,gBAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAElC,QAAQ;AACR,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;IACtB,YAAY;IACZ,MAAM,IAAA,qBAAW,GAAE,CAAC;IAEpB,WAAW;IACX,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare const CONFIG_DIR: string;
2
+ export declare const DATA_FILE: string;
3
+ export declare const SHEETS_DIR: string;
4
+ export declare const IMAGES_DIR: string;
5
+ export declare const getEditor: () => string;
6
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,QAAuD,CAAC;AAG/E,eAAO,MAAM,SAAS,QAAqC,CAAC;AAC5D,eAAO,MAAM,UAAU,QAAkC,CAAC;AAC1D,eAAO,MAAM,UAAU,QAAkC,CAAC;AAG1D,eAAO,MAAM,SAAS,QAAO,MAE5B,CAAC"}
@@ -0,0 +1,20 @@
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.getEditor = exports.IMAGES_DIR = exports.SHEETS_DIR = exports.DATA_FILE = exports.CONFIG_DIR = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const os_1 = __importDefault(require("os"));
9
+ // 設定ディレクトリのパス
10
+ exports.CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.config', 'cheatsheet-cli');
11
+ // 各ファイル・ディレクトリのパス
12
+ exports.DATA_FILE = path_1.default.join(exports.CONFIG_DIR, 'data.json');
13
+ exports.SHEETS_DIR = path_1.default.join(exports.CONFIG_DIR, 'sheets');
14
+ exports.IMAGES_DIR = path_1.default.join(exports.CONFIG_DIR, 'images');
15
+ // デフォルトのエディタ
16
+ const getEditor = () => {
17
+ return process.env.EDITOR || 'vim';
18
+ };
19
+ exports.getEditor = getEditor;
20
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,4CAAoB;AAEpB,cAAc;AACD,QAAA,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAE/E,kBAAkB;AACL,QAAA,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,WAAW,CAAC,CAAC;AAC/C,QAAA,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,QAAQ,CAAC,CAAC;AAC7C,QAAA,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,QAAQ,CAAC,CAAC;AAE1D,aAAa;AACN,MAAM,SAAS,GAAG,GAAW,EAAE;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;AACrC,CAAC,CAAC;AAFW,QAAA,SAAS,aAEpB"}
@@ -0,0 +1,6 @@
1
+ export declare const getDisplayWidth: (str: string) => number;
2
+ export declare const formatCodeBlock: (code: string, lang: string) => string;
3
+ export declare const processInline: (text: string) => string;
4
+ export declare const formatTable: (tableLines: string[]) => string;
5
+ export declare const renderMarkdown: (content: string) => string;
6
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/lib/markdown.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,MAG7C,CAAC;AAGF,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,MAqB5D,CAAC;AAGF,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAS5C,CAAC;AAGF,eAAO,MAAM,WAAW,GAAI,YAAY,MAAM,EAAE,KAAG,MAyBlD,CAAC;AAGF,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,MAgFhD,CAAC"}
@@ -0,0 +1,154 @@
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.renderMarkdown = exports.formatTable = exports.processInline = exports.formatCodeBlock = exports.getDisplayWidth = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const cli_table3_1 = __importDefault(require("cli-table3"));
9
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
10
+ const { highlight } = require('cli-highlight');
11
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
12
+ const stringWidth = require('string-width');
13
+ // ANSIエスケープコードを除去した文字列の表示幅を取得
14
+ const getDisplayWidth = (str) => {
15
+ const stripped = str.replace(/\x1b\[[0-9;]*m/g, '');
16
+ return stringWidth(stripped);
17
+ };
18
+ exports.getDisplayWidth = getDisplayWidth;
19
+ // コードブロックをボックスで囲む
20
+ const formatCodeBlock = (code, lang) => {
21
+ let highlighted;
22
+ try {
23
+ highlighted = highlight(code.trim(), { language: lang || 'bash', ignoreIllegals: true });
24
+ }
25
+ catch {
26
+ highlighted = code.trim();
27
+ }
28
+ const lines = highlighted.split('\n');
29
+ const maxLen = Math.max(...lines.map(l => (0, exports.getDisplayWidth)(l)), 30);
30
+ const langLabel = lang ? chalk_1.default.bgBlue.black(` ${lang} `) + '\n' : '';
31
+ const boxedLines = lines.map(line => {
32
+ const visibleLen = (0, exports.getDisplayWidth)(line);
33
+ const padding = ' '.repeat(Math.max(0, maxLen - visibleLen));
34
+ return chalk_1.default.gray('│ ') + line + padding + chalk_1.default.gray(' │');
35
+ });
36
+ return langLabel + chalk_1.default.gray('┌' + '─'.repeat(maxLen + 2) + '┐') + '\n' +
37
+ boxedLines.join('\n') + '\n' +
38
+ chalk_1.default.gray('└' + '─'.repeat(maxLen + 2) + '┘');
39
+ };
40
+ exports.formatCodeBlock = formatCodeBlock;
41
+ // インライン要素の処理
42
+ const processInline = (text) => {
43
+ // インラインコード
44
+ text = text.replace(/`([^`]+)`/g, (_, code) => chalk_1.default.bgGray.white(` ${code} `));
45
+ // 太字
46
+ text = text.replace(/\*\*([^*]+)\*\*/g, (_, t) => chalk_1.default.bold.yellow(t));
47
+ // 斜体
48
+ text = text.replace(/\*([^*]+)\*/g, (_, t) => chalk_1.default.italic(t));
49
+ return text;
50
+ };
51
+ exports.processInline = processInline;
52
+ // テーブルをフォーマット
53
+ const formatTable = (tableLines) => {
54
+ const rows = tableLines
55
+ .filter(line => !line.match(/^\|[-:\s|]+\|$/)) // セパレータ行を除外
56
+ .map(line => {
57
+ return line
58
+ .split('|')
59
+ .slice(1, -1) // 先頭と末尾の空要素を除去
60
+ .map(cell => (0, exports.processInline)(cell.trim()));
61
+ });
62
+ if (rows.length === 0)
63
+ return '';
64
+ const table = new cli_table3_1.default({
65
+ head: rows[0].map(h => chalk_1.default.cyan(h)),
66
+ chars: {
67
+ 'top': '─', 'top-mid': '┬', 'top-left': '┌', 'top-right': '┐',
68
+ 'bottom': '─', 'bottom-mid': '┴', 'bottom-left': '└', 'bottom-right': '┘',
69
+ 'left': '│', 'left-mid': '├', 'mid': '─', 'mid-mid': '┼',
70
+ 'right': '│', 'right-mid': '┤', 'middle': '│'
71
+ },
72
+ style: { head: [], border: ['gray'] }
73
+ });
74
+ rows.slice(1).forEach(row => table.push(row));
75
+ return table.toString();
76
+ };
77
+ exports.formatTable = formatTable;
78
+ // カスタムMarkdownレンダラー
79
+ const renderMarkdown = (content) => {
80
+ const lines = content.split('\n');
81
+ const result = [];
82
+ let inCodeBlock = false;
83
+ let codeBlockLang = '';
84
+ let codeBlockContent = [];
85
+ let inTable = false;
86
+ let tableContent = [];
87
+ for (const line of lines) {
88
+ // コードブロックの開始/終了
89
+ if (line.startsWith('```')) {
90
+ if (!inCodeBlock) {
91
+ inCodeBlock = true;
92
+ codeBlockLang = line.slice(3).trim();
93
+ codeBlockContent = [];
94
+ }
95
+ else {
96
+ result.push((0, exports.formatCodeBlock)(codeBlockContent.join('\n'), codeBlockLang));
97
+ inCodeBlock = false;
98
+ codeBlockLang = '';
99
+ }
100
+ continue;
101
+ }
102
+ if (inCodeBlock) {
103
+ codeBlockContent.push(line);
104
+ continue;
105
+ }
106
+ // テーブルの処理
107
+ const isTableLine = line.trim().startsWith('|') && line.trim().endsWith('|');
108
+ if (isTableLine) {
109
+ if (!inTable) {
110
+ inTable = true;
111
+ tableContent = [];
112
+ }
113
+ tableContent.push(line);
114
+ continue;
115
+ }
116
+ else if (inTable) {
117
+ result.push((0, exports.formatTable)(tableContent));
118
+ inTable = false;
119
+ tableContent = [];
120
+ }
121
+ // 見出し
122
+ if (line.startsWith('# ')) {
123
+ result.push('\n' + chalk_1.default.bold.magenta.underline(line.slice(2)) + '\n');
124
+ continue;
125
+ }
126
+ if (line.startsWith('## ')) {
127
+ result.push('\n' + chalk_1.default.bold.cyan(line.slice(3)));
128
+ continue;
129
+ }
130
+ if (line.startsWith('### ')) {
131
+ result.push('\n' + chalk_1.default.bold.green(line.slice(4)));
132
+ continue;
133
+ }
134
+ // リスト
135
+ if (line.match(/^[-*] /)) {
136
+ result.push(chalk_1.default.yellow(' • ') + (0, exports.processInline)(line.slice(2)));
137
+ continue;
138
+ }
139
+ // 水平線
140
+ if (line.match(/^-{3,}$/) || line.match(/^\*{3,}$/)) {
141
+ result.push(chalk_1.default.gray('─'.repeat(40)));
142
+ continue;
143
+ }
144
+ // 通常行
145
+ result.push((0, exports.processInline)(line));
146
+ }
147
+ // 末尾のテーブル処理
148
+ if (inTable) {
149
+ result.push((0, exports.formatTable)(tableContent));
150
+ }
151
+ return result.join('\n');
152
+ };
153
+ exports.renderMarkdown = renderMarkdown;
154
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/lib/markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Sheet } from '../types';
2
+ export interface SearchResult {
3
+ name: string;
4
+ type: 'text' | 'image';
5
+ matchType: 'name' | 'content';
6
+ }
7
+ export declare const matchByName: (sheet: Sheet, keyword: string) => boolean;
8
+ export declare const matchByContent: (content: string, keyword: string) => boolean;
9
+ export declare const createSearchResult: (sheet: Sheet, matchType: "name" | "content") => SearchResult;
10
+ export declare const searchSheetsByName: (sheets: Sheet[], keyword: string) => SearchResult[];
11
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/lib/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAGD,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,EAAE,SAAS,MAAM,KAAG,OAE3D,CAAC;AAGF,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,EAAE,SAAS,MAAM,KAAG,OAEjE,CAAC;AAGF,eAAO,MAAM,kBAAkB,GAC7B,OAAO,KAAK,EACZ,WAAW,MAAM,GAAG,SAAS,KAC5B,YAMF,CAAC;AAGF,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,KAAK,EAAE,EACf,SAAS,MAAM,KACd,YAAY,EAId,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.searchSheetsByName = exports.createSearchResult = exports.matchByContent = exports.matchByName = void 0;
4
+ // シート名で検索
5
+ const matchByName = (sheet, keyword) => {
6
+ return sheet.name.toLowerCase().includes(keyword.toLowerCase());
7
+ };
8
+ exports.matchByName = matchByName;
9
+ // コンテンツで検索
10
+ const matchByContent = (content, keyword) => {
11
+ return content.toLowerCase().includes(keyword.toLowerCase());
12
+ };
13
+ exports.matchByContent = matchByContent;
14
+ // 検索結果を生成
15
+ const createSearchResult = (sheet, matchType) => {
16
+ return {
17
+ name: sheet.name,
18
+ type: sheet.type,
19
+ matchType,
20
+ };
21
+ };
22
+ exports.createSearchResult = createSearchResult;
23
+ // シートを検索(名前のみ)
24
+ const searchSheetsByName = (sheets, keyword) => {
25
+ return sheets
26
+ .filter(sheet => (0, exports.matchByName)(sheet, keyword))
27
+ .map(sheet => (0, exports.createSearchResult)(sheet, 'name'));
28
+ };
29
+ exports.searchSheetsByName = searchSheetsByName;
30
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/lib/search.ts"],"names":[],"mappings":";;;AAQA,UAAU;AACH,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,OAAe,EAAW,EAAE;IACpE,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAClE,CAAC,CAAC;AAFW,QAAA,WAAW,eAEtB;AAEF,WAAW;AACJ,MAAM,cAAc,GAAG,CAAC,OAAe,EAAE,OAAe,EAAW,EAAE;IAC1E,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/D,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB;AAEF,UAAU;AACH,MAAM,kBAAkB,GAAG,CAChC,KAAY,EACZ,SAA6B,EACf,EAAE;IAChB,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS;KACV,CAAC;AACJ,CAAC,CAAC;AATW,QAAA,kBAAkB,sBAS7B;AAEF,eAAe;AACR,MAAM,kBAAkB,GAAG,CAChC,MAAe,EACf,OAAe,EACC,EAAE;IAClB,OAAO,MAAM;SACV,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAA,mBAAW,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SAC5C,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAA,0BAAkB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC;AAPW,QAAA,kBAAkB,sBAO7B"}
@@ -0,0 +1,15 @@
1
+ import { DataStore, Sheet } from '../types';
2
+ export declare const initStorage: () => Promise<void>;
3
+ export declare const loadData: () => Promise<DataStore>;
4
+ export declare const saveData: (data: DataStore) => Promise<void>;
5
+ export declare const getSheet: (name: string) => Promise<Sheet | undefined>;
6
+ export declare const addOrUpdateSheet: (sheet: Sheet) => Promise<void>;
7
+ export declare const removeSheet: (name: string) => Promise<boolean>;
8
+ export declare const getSheetFilePath: (sheet: Sheet) => string;
9
+ export declare const getAllSheets: () => Promise<Sheet[]>;
10
+ export declare const validateName: (name: string) => boolean;
11
+ export declare const isValidImageExtension: (filename: string) => boolean;
12
+ export declare const readSheetContent: (sheet: Sheet) => Promise<string>;
13
+ export declare const writeSheetContent: (sheet: Sheet, content: string) => Promise<void>;
14
+ export declare const copyFile: (src: string, dest: string) => Promise<void>;
15
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/lib/storage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,KAAK,EAA4C,MAAM,UAAU,CAAC;AAGtF,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CAShD,CAAC;AAGF,eAAO,MAAM,QAAQ,QAAa,OAAO,CAAC,SAAS,CAGlD,CAAC;AAGF,eAAO,MAAM,QAAQ,GAAU,MAAM,SAAS,KAAG,OAAO,CAAC,IAAI,CAE5D,CAAC;AAGF,eAAO,MAAM,QAAQ,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAGtE,CAAC;AAGF,eAAO,MAAM,gBAAgB,GAAU,OAAO,KAAK,KAAG,OAAO,CAAC,IAAI,CAWjE,CAAC;AAGF,eAAO,MAAM,WAAW,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,OAAO,CAmB/D,CAAC;AAGF,eAAO,MAAM,gBAAgB,GAAI,OAAO,KAAK,KAAG,MAK/C,CAAC;AAGF,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,KAAK,EAAE,CAGpD,CAAC;AAGF,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,OAE3C,CAAC;AAGF,eAAO,MAAM,qBAAqB,GAAI,UAAU,MAAM,KAAG,OAGxD,CAAC;AAGF,eAAO,MAAM,gBAAgB,GAAU,OAAO,KAAK,KAAG,OAAO,CAAC,MAAM,CAGnE,CAAC;AAGF,eAAO,MAAM,iBAAiB,GAAU,OAAO,KAAK,EAAE,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAGnF,CAAC;AAGF,eAAO,MAAM,QAAQ,GAAU,KAAK,MAAM,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAEtE,CAAC"}
@@ -0,0 +1,112 @@
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.copyFile = exports.writeSheetContent = exports.readSheetContent = exports.isValidImageExtension = exports.validateName = exports.getAllSheets = exports.getSheetFilePath = exports.removeSheet = exports.addOrUpdateSheet = exports.getSheet = exports.saveData = exports.loadData = exports.initStorage = void 0;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const config_1 = require("./config");
10
+ const types_1 = require("../types");
11
+ // ストレージの初期化
12
+ const initStorage = async () => {
13
+ await fs_extra_1.default.ensureDir(config_1.CONFIG_DIR);
14
+ await fs_extra_1.default.ensureDir(config_1.SHEETS_DIR);
15
+ await fs_extra_1.default.ensureDir(config_1.IMAGES_DIR);
16
+ if (!(await fs_extra_1.default.pathExists(config_1.DATA_FILE))) {
17
+ const initialData = { sheets: [] };
18
+ await fs_extra_1.default.writeJson(config_1.DATA_FILE, initialData, { spaces: 2 });
19
+ }
20
+ };
21
+ exports.initStorage = initStorage;
22
+ // データの読み込み
23
+ const loadData = async () => {
24
+ await (0, exports.initStorage)();
25
+ return fs_extra_1.default.readJson(config_1.DATA_FILE);
26
+ };
27
+ exports.loadData = loadData;
28
+ // データの保存
29
+ const saveData = async (data) => {
30
+ await fs_extra_1.default.writeJson(config_1.DATA_FILE, data, { spaces: 2 });
31
+ };
32
+ exports.saveData = saveData;
33
+ // シートの取得
34
+ const getSheet = async (name) => {
35
+ const data = await (0, exports.loadData)();
36
+ return data.sheets.find((sheet) => sheet.name === name);
37
+ };
38
+ exports.getSheet = getSheet;
39
+ // シートの追加または更新
40
+ const addOrUpdateSheet = async (sheet) => {
41
+ const data = await (0, exports.loadData)();
42
+ const existingIndex = data.sheets.findIndex((s) => s.name === sheet.name);
43
+ if (existingIndex >= 0) {
44
+ data.sheets[existingIndex] = sheet;
45
+ }
46
+ else {
47
+ data.sheets.push(sheet);
48
+ }
49
+ await (0, exports.saveData)(data);
50
+ };
51
+ exports.addOrUpdateSheet = addOrUpdateSheet;
52
+ // シートの削除
53
+ const removeSheet = async (name) => {
54
+ const data = await (0, exports.loadData)();
55
+ const sheet = data.sheets.find((s) => s.name === name);
56
+ if (!sheet) {
57
+ return false;
58
+ }
59
+ // ファイルを削除
60
+ const filePath = (0, exports.getSheetFilePath)(sheet);
61
+ if (await fs_extra_1.default.pathExists(filePath)) {
62
+ await fs_extra_1.default.remove(filePath);
63
+ }
64
+ // データから削除
65
+ data.sheets = data.sheets.filter((s) => s.name !== name);
66
+ await (0, exports.saveData)(data);
67
+ return true;
68
+ };
69
+ exports.removeSheet = removeSheet;
70
+ // シートファイルのパスを取得
71
+ const getSheetFilePath = (sheet) => {
72
+ if (sheet.type === 'text') {
73
+ return path_1.default.join(config_1.SHEETS_DIR, sheet.filename);
74
+ }
75
+ return path_1.default.join(config_1.IMAGES_DIR, sheet.filename);
76
+ };
77
+ exports.getSheetFilePath = getSheetFilePath;
78
+ // 全シートを取得
79
+ const getAllSheets = async () => {
80
+ const data = await (0, exports.loadData)();
81
+ return data.sheets;
82
+ };
83
+ exports.getAllSheets = getAllSheets;
84
+ // 名前のバリデーション
85
+ const validateName = (name) => {
86
+ return types_1.NAME_PATTERN.test(name);
87
+ };
88
+ exports.validateName = validateName;
89
+ // 画像ファイルの拡張子をチェック
90
+ const isValidImageExtension = (filename) => {
91
+ const ext = path_1.default.extname(filename).toLowerCase().slice(1);
92
+ return types_1.SUPPORTED_IMAGE_EXTENSIONS.includes(ext);
93
+ };
94
+ exports.isValidImageExtension = isValidImageExtension;
95
+ // シートの内容を読み込む(テキストのみ)
96
+ const readSheetContent = async (sheet) => {
97
+ const filePath = (0, exports.getSheetFilePath)(sheet);
98
+ return fs_extra_1.default.readFile(filePath, 'utf-8');
99
+ };
100
+ exports.readSheetContent = readSheetContent;
101
+ // シートの内容を書き込む(テキストのみ)
102
+ const writeSheetContent = async (sheet, content) => {
103
+ const filePath = (0, exports.getSheetFilePath)(sheet);
104
+ await fs_extra_1.default.writeFile(filePath, content, 'utf-8');
105
+ };
106
+ exports.writeSheetContent = writeSheetContent;
107
+ // ファイルをコピー
108
+ const copyFile = async (src, dest) => {
109
+ await fs_extra_1.default.copy(src, dest);
110
+ };
111
+ exports.copyFile = copyFile;
112
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/lib/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type SheetType = 'text' | 'image';
2
+ export interface Sheet {
3
+ name: string;
4
+ type: SheetType;
5
+ filename: string;
6
+ createdAt: string;
7
+ updatedAt: string;
8
+ }
9
+ export interface DataStore {
10
+ sheets: Sheet[];
11
+ }
12
+ export declare const SUPPORTED_IMAGE_EXTENSIONS: readonly ["png", "jpg", "jpeg", "gif", "webp", "svg"];
13
+ export declare const NAME_PATTERN: RegExp;
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAGzC,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAGD,eAAO,MAAM,0BAA0B,uDAAwD,CAAC;AAGhG,eAAO,MAAM,YAAY,QAAqB,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NAME_PATTERN = exports.SUPPORTED_IMAGE_EXTENSIONS = void 0;
4
+ // サポートする画像拡張子
5
+ exports.SUPPORTED_IMAGE_EXTENSIONS = ['png', 'jpg', 'jpeg', 'gif', 'webp', 'svg'];
6
+ // 名前のバリデーション用正規表現(英数字、ハイフン、アンダースコアのみ)
7
+ exports.NAME_PATTERN = /^[a-zA-Z0-9_-]+$/;
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAiBA,cAAc;AACD,QAAA,0BAA0B,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAU,CAAC;AAEhG,sCAAsC;AACzB,QAAA,YAAY,GAAG,kBAAkB,CAAC"}