mdjournal 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 (62) hide show
  1. package/README.md +209 -0
  2. package/dist/cli.d.ts +12 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +601 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/index.d.ts +8 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +100 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/routes/calendar.d.ts +8 -0
  11. package/dist/routes/calendar.d.ts.map +1 -0
  12. package/dist/routes/calendar.js +115 -0
  13. package/dist/routes/calendar.js.map +1 -0
  14. package/dist/routes/config.d.ts +9 -0
  15. package/dist/routes/config.d.ts.map +1 -0
  16. package/dist/routes/config.js +75 -0
  17. package/dist/routes/config.js.map +1 -0
  18. package/dist/routes/gcal.d.ts +10 -0
  19. package/dist/routes/gcal.d.ts.map +1 -0
  20. package/dist/routes/gcal.js +100 -0
  21. package/dist/routes/gcal.js.map +1 -0
  22. package/dist/routes/index.d.ts +8 -0
  23. package/dist/routes/index.d.ts.map +1 -0
  24. package/dist/routes/index.js +8 -0
  25. package/dist/routes/index.js.map +1 -0
  26. package/dist/routes/reports.d.ts +10 -0
  27. package/dist/routes/reports.d.ts.map +1 -0
  28. package/dist/routes/reports.js +175 -0
  29. package/dist/routes/reports.js.map +1 -0
  30. package/dist/types/index.d.ts +190 -0
  31. package/dist/types/index.d.ts.map +1 -0
  32. package/dist/types/index.js +5 -0
  33. package/dist/types/index.js.map +1 -0
  34. package/dist/utils/configValidator.d.ts +43 -0
  35. package/dist/utils/configValidator.d.ts.map +1 -0
  36. package/dist/utils/configValidator.js +435 -0
  37. package/dist/utils/configValidator.js.map +1 -0
  38. package/dist/utils/fileManager.d.ts +101 -0
  39. package/dist/utils/fileManager.d.ts.map +1 -0
  40. package/dist/utils/fileManager.js +295 -0
  41. package/dist/utils/fileManager.js.map +1 -0
  42. package/dist/utils/git.d.ts +42 -0
  43. package/dist/utils/git.d.ts.map +1 -0
  44. package/dist/utils/git.js +130 -0
  45. package/dist/utils/git.js.map +1 -0
  46. package/dist/utils/index.d.ts +8 -0
  47. package/dist/utils/index.d.ts.map +1 -0
  48. package/dist/utils/index.js +8 -0
  49. package/dist/utils/index.js.map +1 -0
  50. package/dist/utils/markdown.d.ts +23 -0
  51. package/dist/utils/markdown.d.ts.map +1 -0
  52. package/dist/utils/markdown.js +378 -0
  53. package/dist/utils/markdown.js.map +1 -0
  54. package/dist/utils/slack.d.ts +24 -0
  55. package/dist/utils/slack.d.ts.map +1 -0
  56. package/dist/utils/slack.js +90 -0
  57. package/dist/utils/slack.js.map +1 -0
  58. package/dist/utils/validator.d.ts +66 -0
  59. package/dist/utils/validator.d.ts.map +1 -0
  60. package/dist/utils/validator.js +359 -0
  61. package/dist/utils/validator.js.map +1 -0
  62. package/package.json +64 -0
@@ -0,0 +1,359 @@
1
+ /**
2
+ * 日報Markdownフォーマット バリデーター
3
+ *
4
+ * 既存の日報データを仕様に照らし合わせて検証し、
5
+ * 差分を検出・報告する
6
+ */
7
+ /**
8
+ * 日報Markdownをバリデート
9
+ */
10
+ export function validateReport(content, filePath, options = {}) {
11
+ const lines = content.split('\n');
12
+ const issues = [];
13
+ const dateMatch = filePath.match(/(\d{4}-\d{2}-\d{2})\.md$/);
14
+ const date = dateMatch ? dateMatch[1] : 'unknown';
15
+ const skipRules = new Set(options.skipRules || []);
16
+ let currentSection = '';
17
+ let currentTodoProject = '';
18
+ let hasHeader = false;
19
+ let hasPlanSection = false;
20
+ let hasResultSection = false;
21
+ let hasTodoSection = false;
22
+ for (let i = 0; i < lines.length; i++) {
23
+ const line = lines[i];
24
+ const lineNum = i + 1;
25
+ // === ヘッダー検証 ===
26
+ if (i === 0) {
27
+ if (!skipRules.has('header-format')) {
28
+ if (!line.match(/^#\s+\[日報\]\s+.+\s+\d{4}-\d{2}-\d{2}/)) {
29
+ issues.push({
30
+ line: lineNum,
31
+ severity: 'error',
32
+ code: 'header-format',
33
+ message: 'ヘッダーが正しい形式ではありません',
34
+ suggestion: '形式: # [日報] {名前} {YYYY-MM-DD}',
35
+ });
36
+ }
37
+ else {
38
+ hasHeader = true;
39
+ }
40
+ }
41
+ }
42
+ // === セクション区切り線 `==========` の検出 ===
43
+ if (!skipRules.has('separator-line') && line.match(/^=+$/)) {
44
+ issues.push({
45
+ line: lineNum,
46
+ severity: 'warning',
47
+ code: 'separator-line',
48
+ message: '旧形式のセクション区切り線が検出されました',
49
+ suggestion: 'この行を削除してください',
50
+ });
51
+ }
52
+ // === セクション検出 ===
53
+ if (line.match(/^##\s+\[PLAN\]/i)) {
54
+ currentSection = 'plan';
55
+ hasPlanSection = true;
56
+ continue;
57
+ }
58
+ if (line.match(/^##\s+\[RESULT\]/i)) {
59
+ currentSection = 'result';
60
+ hasResultSection = true;
61
+ continue;
62
+ }
63
+ if (line.match(/^##\s+\[TODO\]/i)) {
64
+ currentSection = 'todo';
65
+ hasTodoSection = true;
66
+ currentTodoProject = '';
67
+ continue;
68
+ }
69
+ if (line.match(/^##\s+\[NOTE\]/i)) {
70
+ currentSection = 'note';
71
+ continue;
72
+ }
73
+ if (line.match(/^##\s+/)) {
74
+ currentSection = 'other';
75
+ continue;
76
+ }
77
+ // === PLAN/RESULT セクション内の検証 ===
78
+ if (currentSection === 'plan' || currentSection === 'result') {
79
+ // 場所サブセクション(旧形式)の検出
80
+ if (!skipRules.has('location-subsection') && line.match(/^###\s+\[(?:home|office|remote)\]/i)) {
81
+ issues.push({
82
+ line: lineNum,
83
+ severity: 'warning',
84
+ code: 'location-subsection',
85
+ message: '旧形式の場所サブセクションが検出されました',
86
+ suggestion: 'この行を削除してください。場所情報は不要です',
87
+ });
88
+ continue;
89
+ }
90
+ // タスク行の検証
91
+ if (line.match(/^\*\s+\d{2}:\d{2}/)) {
92
+ // 時刻 [プロジェクト] タスク名 形式のチェック
93
+ const taskMatch = line.match(/^\*\s+(\d{2}:\d{2})\s+\[([^\]]+)\]\s+(.+)$/);
94
+ const endTimeMatch = line.match(/^\*\s+(\d{2}:\d{2})\s*$/);
95
+ if (!taskMatch && !endTimeMatch) {
96
+ if (!skipRules.has('schedule-item-format')) {
97
+ issues.push({
98
+ line: lineNum,
99
+ severity: 'warning',
100
+ code: 'schedule-item-format',
101
+ message: 'スケジュール項目の形式が正しくありません',
102
+ suggestion: '形式: * HH:MM [プロジェクト] タスク名 または * HH:MM (終了時刻)',
103
+ });
104
+ }
105
+ }
106
+ else if (taskMatch) {
107
+ // 時刻形式のチェック
108
+ const time = taskMatch[1];
109
+ if (!skipRules.has('time-format')) {
110
+ const [h, m] = time.split(':').map(Number);
111
+ if (h < 0 || h > 36 || m < 0 || m > 59) {
112
+ issues.push({
113
+ line: lineNum,
114
+ severity: 'error',
115
+ code: 'time-format',
116
+ message: `不正な時刻形式です: ${time}`,
117
+ suggestion: '時刻は00:00~36:00の範囲で指定してください',
118
+ });
119
+ }
120
+ }
121
+ }
122
+ }
123
+ }
124
+ // === TODO セクション内の検証 ===
125
+ if (currentSection === 'todo') {
126
+ // プロジェクトグループヘッダーの検出
127
+ if (line.match(/^###\s+/)) {
128
+ const projectMatch = line.match(/^###\s+(\S+)/);
129
+ if (projectMatch) {
130
+ currentTodoProject = projectMatch[1];
131
+ }
132
+ continue;
133
+ }
134
+ // TODO項目の検証
135
+ if (line.match(/^[-*]\s+\[/)) {
136
+ // リストマーカーの統一チェック
137
+ if (!skipRules.has('todo-list-marker') && line.startsWith('*')) {
138
+ issues.push({
139
+ line: lineNum,
140
+ severity: 'info',
141
+ code: 'todo-list-marker',
142
+ message: 'TODOのリストマーカーが "*" です',
143
+ suggestion: '"-" に統一することを推奨します',
144
+ });
145
+ }
146
+ // TODO形式の解析
147
+ const todoMatch = line.match(/^[-*]\s+\[([xX\s\*\-])\]\s*(.*)$/);
148
+ if (todoMatch) {
149
+ const todoContent = todoMatch[2];
150
+ // 旧形式の検出: - [ステータス] [プロジェクト] タスク名(期限)
151
+ const oldFormatMatch = todoContent.match(/^\[([^\]]+)\]\s+(.*)$/);
152
+ if (oldFormatMatch && !skipRules.has('todo-inline-project')) {
153
+ issues.push({
154
+ line: lineNum,
155
+ severity: 'warning',
156
+ code: 'todo-inline-project',
157
+ message: 'プロジェクトコードがTODO行内にあります(旧形式)',
158
+ suggestion: `"### ${oldFormatMatch[1]}" のようにプロジェクトヘッダーでグループ化してください`,
159
+ });
160
+ }
161
+ // 括弧形式の期限検出: (期限)や (期限)
162
+ if (!skipRules.has('todo-deadline-format')) {
163
+ const deadlineParenMatch = todoContent.match(/[((]([^))]+)[))]/);
164
+ if (deadlineParenMatch) {
165
+ const deadlineText = deadlineParenMatch[1];
166
+ // 日付形式かどうかをチェック
167
+ if (deadlineText.match(/\d/) || deadlineText.match(/月|末|頭|中旬/)) {
168
+ issues.push({
169
+ line: lineNum,
170
+ severity: 'warning',
171
+ code: 'todo-deadline-format',
172
+ message: `期限が括弧形式です: ${deadlineParenMatch[0]}`,
173
+ suggestion: '@YYYY-MM-DD 形式に変換してください',
174
+ });
175
+ }
176
+ }
177
+ }
178
+ }
179
+ }
180
+ // ネストされたTODO(旧形式)の検出
181
+ if (!skipRules.has('nested-todo') && line.match(/^\s{2,}[-*]\s+\[/)) {
182
+ issues.push({
183
+ line: lineNum,
184
+ severity: 'warning',
185
+ code: 'nested-todo',
186
+ message: 'ネストされたTODO項目が検出されました(旧形式)',
187
+ suggestion: 'インデントを削除してフラットなリストにしてください',
188
+ });
189
+ }
190
+ // プロジェクト名だけの行(ネストTODOの親)の検出
191
+ if (!skipRules.has('project-only-line')) {
192
+ const projectOnlyMatch = line.match(/^-\s+\[([^\]]+)\]\s+(\S+)\s*$/);
193
+ if (projectOnlyMatch && !projectOnlyMatch[1].match(/[xX\s\*\-]/)) {
194
+ // これはステータスマークではなくプロジェクトコードの可能性が高い
195
+ issues.push({
196
+ line: lineNum,
197
+ severity: 'info',
198
+ code: 'project-only-line',
199
+ message: 'プロジェクト名のみの行の可能性があります',
200
+ suggestion: 'この形式が意図的な場合は無視してください',
201
+ });
202
+ }
203
+ }
204
+ }
205
+ }
206
+ // === 必須セクションの存在チェック ===
207
+ if (!skipRules.has('required-sections')) {
208
+ if (!hasHeader) {
209
+ issues.push({
210
+ line: 1,
211
+ severity: 'error',
212
+ code: 'required-sections',
213
+ message: 'ヘッダーがありません',
214
+ suggestion: '# [日報] {名前} {YYYY-MM-DD} 形式のヘッダーを追加してください',
215
+ });
216
+ }
217
+ if (!hasPlanSection) {
218
+ issues.push({
219
+ line: 1,
220
+ severity: 'warning',
221
+ code: 'required-sections',
222
+ message: 'PLANセクションがありません',
223
+ suggestion: '## [PLAN] セクションを追加してください',
224
+ });
225
+ }
226
+ if (!hasResultSection) {
227
+ issues.push({
228
+ line: 1,
229
+ severity: 'warning',
230
+ code: 'required-sections',
231
+ message: 'RESULTセクションがありません',
232
+ suggestion: '## [RESULT] セクションを追加してください',
233
+ });
234
+ }
235
+ }
236
+ // サマリー計算
237
+ const summary = {
238
+ errors: issues.filter((i) => i.severity === 'error').length,
239
+ warnings: issues.filter((i) => i.severity === 'warning').length,
240
+ infos: issues.filter((i) => i.severity === 'info').length,
241
+ };
242
+ // 有効性判定
243
+ const isValid = options.strict
244
+ ? summary.errors === 0 && summary.warnings === 0
245
+ : summary.errors === 0;
246
+ return {
247
+ file: filePath,
248
+ date,
249
+ isValid,
250
+ issues,
251
+ summary,
252
+ };
253
+ }
254
+ /**
255
+ * バリデーション結果をフォーマットして出力用文字列を生成
256
+ */
257
+ export function formatValidationResult(result, options = {}) {
258
+ const { color = true, verbose = false } = options;
259
+ const lines = [];
260
+ // ANSI カラーコード
261
+ const colors = {
262
+ reset: color ? '\x1b[0m' : '',
263
+ red: color ? '\x1b[31m' : '',
264
+ yellow: color ? '\x1b[33m' : '',
265
+ blue: color ? '\x1b[34m' : '',
266
+ green: color ? '\x1b[32m' : '',
267
+ dim: color ? '\x1b[2m' : '',
268
+ };
269
+ const severityColors = {
270
+ error: colors.red,
271
+ warning: colors.yellow,
272
+ info: colors.blue,
273
+ };
274
+ const severityIcons = {
275
+ error: '✗',
276
+ warning: '⚠',
277
+ info: 'ℹ',
278
+ };
279
+ // ファイルヘッダー
280
+ const statusIcon = result.isValid ? `${colors.green}✓${colors.reset}` : `${colors.red}✗${colors.reset}`;
281
+ lines.push(`${statusIcon} ${result.file}`);
282
+ // 問題がある場合のみ詳細を表示
283
+ if (result.issues.length > 0) {
284
+ for (const issue of result.issues) {
285
+ if (!verbose && issue.severity === 'info')
286
+ continue;
287
+ const icon = severityIcons[issue.severity];
288
+ const colorCode = severityColors[issue.severity];
289
+ const locationStr = `${colors.dim}L${issue.line}${colors.reset}`;
290
+ lines.push(` ${colorCode}${icon}${colors.reset} ${locationStr} [${issue.code}] ${issue.message}`);
291
+ if (verbose && issue.suggestion) {
292
+ lines.push(` ${colors.dim}→ ${issue.suggestion}${colors.reset}`);
293
+ }
294
+ }
295
+ // サマリー
296
+ const parts = [];
297
+ if (result.summary.errors > 0) {
298
+ parts.push(`${colors.red}${result.summary.errors} error(s)${colors.reset}`);
299
+ }
300
+ if (result.summary.warnings > 0) {
301
+ parts.push(`${colors.yellow}${result.summary.warnings} warning(s)${colors.reset}`);
302
+ }
303
+ if (verbose && result.summary.infos > 0) {
304
+ parts.push(`${colors.blue}${result.summary.infos} info(s)${colors.reset}`);
305
+ }
306
+ if (parts.length > 0) {
307
+ lines.push(` ${colors.dim}──${colors.reset} ${parts.join(', ')}`);
308
+ }
309
+ }
310
+ return lines.join('\n');
311
+ }
312
+ /**
313
+ * 複数のバリデーション結果をサマリー出力
314
+ */
315
+ export function formatValidationSummary(results, options = {}) {
316
+ const { color = true } = options;
317
+ const colors = {
318
+ reset: color ? '\x1b[0m' : '',
319
+ red: color ? '\x1b[31m' : '',
320
+ yellow: color ? '\x1b[33m' : '',
321
+ green: color ? '\x1b[32m' : '',
322
+ };
323
+ const totalFiles = results.length;
324
+ const validFiles = results.filter((r) => r.isValid).length;
325
+ const invalidFiles = totalFiles - validFiles;
326
+ const totalErrors = results.reduce((sum, r) => sum + r.summary.errors, 0);
327
+ const totalWarnings = results.reduce((sum, r) => sum + r.summary.warnings, 0);
328
+ const lines = [];
329
+ lines.push('');
330
+ lines.push('═══════════════════════════════════════════════════════════════');
331
+ lines.push('検証サマリー');
332
+ lines.push('───────────────────────────────────────────────────────────────');
333
+ lines.push(`ファイル数: ${totalFiles}`);
334
+ lines.push(` ${colors.green}✓ 有効: ${validFiles}${colors.reset}`);
335
+ if (invalidFiles > 0) {
336
+ lines.push(` ${colors.red}✗ 無効: ${invalidFiles}${colors.reset}`);
337
+ }
338
+ lines.push(`エラー: ${colors.red}${totalErrors}${colors.reset}`);
339
+ lines.push(`警告: ${colors.yellow}${totalWarnings}${colors.reset}`);
340
+ lines.push('═══════════════════════════════════════════════════════════════');
341
+ return lines.join('\n');
342
+ }
343
+ /**
344
+ * バリデーションルール一覧
345
+ */
346
+ export const VALIDATION_RULES = {
347
+ 'header-format': '日報ヘッダーの形式チェック',
348
+ 'separator-line': 'セクション区切り線(=====)の検出',
349
+ 'location-subsection': '場所サブセクション(### [home])の検出',
350
+ 'schedule-item-format': 'PLAN/RESULT項目の形式チェック',
351
+ 'time-format': '時刻形式のチェック',
352
+ 'todo-list-marker': 'TODOリストマーカーの統一チェック',
353
+ 'todo-inline-project': 'TODO行内のプロジェクトコード検出',
354
+ 'todo-deadline-format': '期限の括弧形式検出',
355
+ 'nested-todo': 'ネストされたTODO検出',
356
+ 'project-only-line': 'プロジェクト名のみの行検出',
357
+ 'required-sections': '必須セクションの存在チェック',
358
+ };
359
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "mdjournal",
3
+ "version": "1.0.0",
4
+ "description": "Markdown日報を視覚的に管理するダッシュボードアプリケーション",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "mdjournal": "./dist/cli.js"
10
+ },
11
+ "scripts": {
12
+ "dev": "tsx src/cli.ts",
13
+ "dev:watch": "tsx watch src/cli.ts",
14
+ "build": "tsc",
15
+ "start": "node dist/cli.js",
16
+ "test": "echo \"No tests yet\" && exit 0",
17
+ "lint": "eslint src --ext .ts",
18
+ "prepublishOnly": "npm run build"
19
+ },
20
+ "dependencies": {
21
+ "cors": "^2.8.5",
22
+ "express": "^4.18.2",
23
+ "gray-matter": "^4.0.3",
24
+ "js-yaml": "^4.1.0",
25
+ "remark": "^15.0.1",
26
+ "remark-parse": "^11.0.0",
27
+ "simple-git": "^3.22.0",
28
+ "unified": "^11.0.4"
29
+ },
30
+ "devDependencies": {
31
+ "@types/cors": "^2.8.17",
32
+ "@types/express": "^4.17.21",
33
+ "@types/js-yaml": "^4.0.9",
34
+ "@types/node": "^20.10.5",
35
+ "tsx": "^4.7.0",
36
+ "typescript": "^5.3.3"
37
+ },
38
+ "files": [
39
+ "dist",
40
+ "README.md"
41
+ ],
42
+ "keywords": [
43
+ "daily-report",
44
+ "journal",
45
+ "dashboard",
46
+ "markdown",
47
+ "todo",
48
+ "timeline",
49
+ "time-tracking"
50
+ ],
51
+ "author": "foo-ogawa",
52
+ "license": "MIT",
53
+ "homepage": "https://github.com/foo-ogawa/mdjournal#readme",
54
+ "bugs": {
55
+ "url": "https://github.com/foo-ogawa/mdjournal/issues"
56
+ },
57
+ "repository": {
58
+ "type": "git",
59
+ "url": "git+https://github.com/foo-ogawa/mdjournal.git"
60
+ },
61
+ "engines": {
62
+ "node": ">=20.0.0"
63
+ }
64
+ }