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,295 @@
1
+ /**
2
+ * ファイル管理ユーティリティ
3
+ *
4
+ * 日報ファイルとYAML設定ファイルの読み書きを担当
5
+ */
6
+ import fs from 'fs/promises';
7
+ import path from 'path';
8
+ import matter from 'gray-matter';
9
+ import yaml from 'js-yaml';
10
+ let configPaths = {
11
+ projects: './sample/config/projects.yaml',
12
+ routines: './sample/config/routines.yaml',
13
+ reports: './sample/reports',
14
+ };
15
+ // タイムライン設定(ルート設定ファイルから読み込み)
16
+ let timelineConfig = {
17
+ hourHeight: 60,
18
+ maxHours: 36,
19
+ defaultStartHour: 8,
20
+ defaultEndHour: 20,
21
+ snapMinutes: 15,
22
+ };
23
+ // ルート設定ファイルの内容を保持
24
+ let rootConfig = {};
25
+ /**
26
+ * タイムライン設定をセット
27
+ */
28
+ export function setTimelineConfig(config) {
29
+ timelineConfig = { ...timelineConfig, ...config };
30
+ }
31
+ /**
32
+ * タイムライン設定を取得
33
+ */
34
+ export function getTimelineConfig() {
35
+ return { ...timelineConfig };
36
+ }
37
+ /**
38
+ * ルート設定をセット
39
+ */
40
+ export function setRootConfig(config) {
41
+ rootConfig = { ...config };
42
+ }
43
+ /**
44
+ * ルート設定を取得
45
+ */
46
+ export function getRootConfig() {
47
+ return { ...rootConfig };
48
+ }
49
+ /**
50
+ * 設定パスを初期化(環境変数から読み込み)
51
+ */
52
+ export function initConfigPaths() {
53
+ if (process.env.CONFIG_PROJECTS)
54
+ configPaths.projects = process.env.CONFIG_PROJECTS;
55
+ if (process.env.CONFIG_ROUTINES)
56
+ configPaths.routines = process.env.CONFIG_ROUTINES;
57
+ if (process.env.CONFIG_REPORTS)
58
+ configPaths.reports = process.env.CONFIG_REPORTS;
59
+ }
60
+ /**
61
+ * 設定パスを設定
62
+ */
63
+ export function setConfigPaths(paths) {
64
+ configPaths = { ...configPaths, ...paths };
65
+ }
66
+ /**
67
+ * 設定パスを取得
68
+ */
69
+ export function getConfigPaths() {
70
+ return { ...configPaths };
71
+ }
72
+ /**
73
+ * 日報ディレクトリを取得
74
+ */
75
+ export function getReportsPath() {
76
+ return configPaths.reports;
77
+ }
78
+ /**
79
+ * 日報ファイルパスを生成
80
+ */
81
+ export function getReportFilePath(date) {
82
+ const [year, month] = date.split('-');
83
+ return path.join(configPaths.reports, year, month, `${date}.md`);
84
+ }
85
+ /**
86
+ * 日報ファイルを読み込み
87
+ * @returns { content: Markdown本文, stats: frontmatterから取得した統計情報 } | null
88
+ */
89
+ export async function readReport(date) {
90
+ const filePath = getReportFilePath(date);
91
+ try {
92
+ const fileContent = await fs.readFile(filePath, 'utf-8');
93
+ const { content, data } = matter(fileContent);
94
+ const stats = data.planHours !== undefined ? {
95
+ planHours: data.planHours || 0,
96
+ resultHours: data.resultHours || 0,
97
+ todoCount: data.todoCount || 0,
98
+ todoCompleted: data.todoCompleted || 0,
99
+ todoInProgress: data.todoInProgress || 0,
100
+ projectHours: data.projectHours || {},
101
+ updatedAt: data.updatedAt || new Date().toISOString(),
102
+ } : null;
103
+ return { content: content.trim(), stats };
104
+ }
105
+ catch (error) {
106
+ if (error.code === 'ENOENT') {
107
+ return null;
108
+ }
109
+ throw error;
110
+ }
111
+ }
112
+ /**
113
+ * 日報ファイルを保存(frontmatter付き)
114
+ */
115
+ export async function writeReport(date, content, stats) {
116
+ const filePath = getReportFilePath(date);
117
+ const dir = path.dirname(filePath);
118
+ // ディレクトリを作成
119
+ await fs.mkdir(dir, { recursive: true });
120
+ // frontmatter付きコンテンツを生成
121
+ const frontmatter = {
122
+ planHours: stats.planHours,
123
+ resultHours: stats.resultHours,
124
+ todoCount: stats.todoCount,
125
+ todoCompleted: stats.todoCompleted,
126
+ todoInProgress: stats.todoInProgress,
127
+ projectHours: stats.projectHours,
128
+ updatedAt: stats.updatedAt,
129
+ };
130
+ const fileContent = matter.stringify(content.trim(), frontmatter);
131
+ // アトミック書き込み(一時ファイル経由)
132
+ const tempPath = `${filePath}.tmp`;
133
+ await fs.writeFile(tempPath, fileContent, 'utf-8');
134
+ await fs.rename(tempPath, filePath);
135
+ }
136
+ /**
137
+ * 日報ファイルを削除
138
+ */
139
+ export async function deleteReport(date) {
140
+ const filePath = getReportFilePath(date);
141
+ try {
142
+ await fs.unlink(filePath);
143
+ return true;
144
+ }
145
+ catch (error) {
146
+ if (error.code === 'ENOENT') {
147
+ return false;
148
+ }
149
+ throw error;
150
+ }
151
+ }
152
+ /**
153
+ * 指定年月の全日報のfrontmatter(統計情報)を取得
154
+ */
155
+ export async function getMonthReportStats(year, month) {
156
+ const monthStr = month.toString().padStart(2, '0');
157
+ const dirPath = path.join(configPaths.reports, year.toString(), monthStr);
158
+ const stats = new Map();
159
+ try {
160
+ const files = await fs.readdir(dirPath);
161
+ for (const file of files) {
162
+ if (!file.endsWith('.md'))
163
+ continue;
164
+ const date = file.replace('.md', '');
165
+ const filePath = path.join(dirPath, file);
166
+ try {
167
+ const fileContent = await fs.readFile(filePath, 'utf-8');
168
+ const { data } = matter(fileContent);
169
+ if (data.planHours !== undefined) {
170
+ stats.set(date, {
171
+ planHours: data.planHours || 0,
172
+ resultHours: data.resultHours || 0,
173
+ todoCount: data.todoCount || 0,
174
+ todoCompleted: data.todoCompleted || 0,
175
+ todoInProgress: data.todoInProgress || 0,
176
+ projectHours: data.projectHours || {},
177
+ updatedAt: data.updatedAt || '',
178
+ });
179
+ }
180
+ }
181
+ catch {
182
+ // ファイル読み込みエラーは無視
183
+ }
184
+ }
185
+ }
186
+ catch {
187
+ // ディレクトリが存在しない場合は空のMapを返す
188
+ }
189
+ return stats;
190
+ }
191
+ /**
192
+ * 設定ファイルを読み込み
193
+ */
194
+ export async function readConfig() {
195
+ // プロジェクト設定を読み込み
196
+ let projects = [];
197
+ try {
198
+ const projectsContent = await fs.readFile(configPaths.projects, 'utf-8');
199
+ const projectsData = yaml.load(projectsContent);
200
+ projects = projectsData?.projects || [];
201
+ }
202
+ catch {
203
+ // ファイルがない場合はデフォルト値
204
+ }
205
+ // ルーチン設定を読み込み
206
+ let routines = {};
207
+ try {
208
+ const routinesContent = await fs.readFile(configPaths.routines, 'utf-8');
209
+ const routinesData = yaml.load(routinesContent);
210
+ routines = routinesData?.routines || {};
211
+ }
212
+ catch {
213
+ // ファイルがない場合はデフォルト値
214
+ }
215
+ // Slack設定をルート設定から取得
216
+ const slackConfig = rootConfig.slack;
217
+ const slack = slackConfig ? { enabled: !!slackConfig.enabled } : undefined;
218
+ return { projects, routines, timeline: getTimelineConfig(), slack };
219
+ }
220
+ /**
221
+ * 設定ファイルを保存
222
+ */
223
+ export async function writeConfig(config) {
224
+ if (config.projects) {
225
+ const dir = path.dirname(configPaths.projects);
226
+ await fs.mkdir(dir, { recursive: true });
227
+ const projectsContent = yaml.dump({ projects: config.projects });
228
+ await fs.writeFile(configPaths.projects, projectsContent, 'utf-8');
229
+ }
230
+ if (config.routines) {
231
+ const dir = path.dirname(configPaths.routines);
232
+ await fs.mkdir(dir, { recursive: true });
233
+ const routinesContent = yaml.dump({ routines: config.routines });
234
+ await fs.writeFile(configPaths.routines, routinesContent, 'utf-8');
235
+ }
236
+ }
237
+ /**
238
+ * ファイルが存在するかチェック
239
+ */
240
+ export async function fileExists(filePath) {
241
+ try {
242
+ await fs.access(filePath);
243
+ return true;
244
+ }
245
+ catch {
246
+ return false;
247
+ }
248
+ }
249
+ /**
250
+ * 日報が存在する年月のリストを取得
251
+ */
252
+ export async function getAvailableYearMonths() {
253
+ const result = [];
254
+ try {
255
+ // 年ディレクトリを一覧
256
+ const years = await fs.readdir(configPaths.reports);
257
+ for (const yearStr of years) {
258
+ const year = parseInt(yearStr, 10);
259
+ if (isNaN(year))
260
+ continue;
261
+ const yearPath = path.join(configPaths.reports, yearStr);
262
+ const yearStat = await fs.stat(yearPath);
263
+ if (!yearStat.isDirectory())
264
+ continue;
265
+ // 月ディレクトリを一覧
266
+ const months = await fs.readdir(yearPath);
267
+ for (const monthStr of months) {
268
+ const month = parseInt(monthStr, 10);
269
+ if (isNaN(month) || month < 1 || month > 12)
270
+ continue;
271
+ const monthPath = path.join(yearPath, monthStr);
272
+ const monthStat = await fs.stat(monthPath);
273
+ if (!monthStat.isDirectory())
274
+ continue;
275
+ // .mdファイルが存在するか確認
276
+ const files = await fs.readdir(monthPath);
277
+ const hasReports = files.some(f => f.endsWith('.md'));
278
+ if (hasReports) {
279
+ result.push({ year, month });
280
+ }
281
+ }
282
+ }
283
+ }
284
+ catch {
285
+ // ディレクトリが存在しない場合は空配列を返す
286
+ }
287
+ // 年月でソート(降順:新しい順)
288
+ result.sort((a, b) => {
289
+ if (a.year !== b.year)
290
+ return b.year - a.year;
291
+ return b.month - a.month;
292
+ });
293
+ return result;
294
+ }
295
+ //# sourceMappingURL=fileManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileManager.js","sourceRoot":"","sources":["../../src/utils/fileManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Git連携ユーティリティ
3
+ *
4
+ * simple-gitを使用してGit操作を行う
5
+ */
6
+ /**
7
+ * Git ルートからの相対パスを取得
8
+ */
9
+ export declare function getRelativePathFromGitRoot(absolutePath: string): string;
10
+ /**
11
+ * Git commit
12
+ */
13
+ export declare function gitCommit(filePath: string, message?: string): Promise<{
14
+ success: boolean;
15
+ commitHash?: string;
16
+ error?: string;
17
+ }>;
18
+ /**
19
+ * Git push
20
+ */
21
+ export declare function gitPush(): Promise<{
22
+ success: boolean;
23
+ error?: string;
24
+ }>;
25
+ /**
26
+ * Git ステータス取得
27
+ */
28
+ export declare function getGitStatus(): Promise<{
29
+ branch: string;
30
+ uncommittedChanges: number;
31
+ modifiedFiles: string[];
32
+ lastCommit?: {
33
+ hash: string;
34
+ message: string;
35
+ date: string;
36
+ };
37
+ }>;
38
+ /**
39
+ * Gitリポジトリが初期化されているかチェック
40
+ */
41
+ export declare function isGitRepository(): Promise<boolean>;
42
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2CH;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CASvE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBpE;AAED;;GAEG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAY7E;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CAAC,CAwBD;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CASxD"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Git連携ユーティリティ
3
+ *
4
+ * simple-gitを使用してGit操作を行う
5
+ */
6
+ import { simpleGit } from 'simple-git';
7
+ import path from 'path';
8
+ import fs from 'fs';
9
+ import { getReportsPath } from './fileManager.js';
10
+ /**
11
+ * Gitリポジトリのルートを探す
12
+ */
13
+ function findGitRoot(startPath) {
14
+ let currentPath = path.resolve(startPath);
15
+ while (currentPath !== '/') {
16
+ const gitDir = path.join(currentPath, '.git');
17
+ if (fs.existsSync(gitDir)) {
18
+ return currentPath;
19
+ }
20
+ currentPath = path.dirname(currentPath);
21
+ }
22
+ return null;
23
+ }
24
+ /**
25
+ * Git インスタンスを取得
26
+ */
27
+ function getGit() {
28
+ const reportsPath = getReportsPath();
29
+ const gitRoot = findGitRoot(reportsPath);
30
+ if (!gitRoot) {
31
+ console.warn(`Git repository not found from: ${reportsPath}`);
32
+ }
33
+ const options = {
34
+ baseDir: gitRoot || reportsPath,
35
+ binary: 'git',
36
+ maxConcurrentProcesses: 1,
37
+ };
38
+ return simpleGit(options);
39
+ }
40
+ /**
41
+ * Git ルートからの相対パスを取得
42
+ */
43
+ export function getRelativePathFromGitRoot(absolutePath) {
44
+ const reportsPath = getReportsPath();
45
+ const gitRoot = findGitRoot(reportsPath);
46
+ if (!gitRoot) {
47
+ return absolutePath;
48
+ }
49
+ return path.relative(gitRoot, absolutePath);
50
+ }
51
+ /**
52
+ * Git commit
53
+ */
54
+ export async function gitCommit(filePath, message) {
55
+ const git = getGit();
56
+ try {
57
+ // ファイルをステージング
58
+ await git.add(filePath);
59
+ // コミット
60
+ const commitMessage = message || `日報更新: ${new Date().toISOString().split('T')[0]}`;
61
+ const result = await git.commit(commitMessage);
62
+ return {
63
+ success: true,
64
+ commitHash: result.commit,
65
+ };
66
+ }
67
+ catch (error) {
68
+ return {
69
+ success: false,
70
+ error: error instanceof Error ? error.message : 'Unknown error',
71
+ };
72
+ }
73
+ }
74
+ /**
75
+ * Git push
76
+ */
77
+ export async function gitPush() {
78
+ const git = getGit();
79
+ try {
80
+ await git.push();
81
+ return { success: true };
82
+ }
83
+ catch (error) {
84
+ return {
85
+ success: false,
86
+ error: error instanceof Error ? error.message : 'Unknown error',
87
+ };
88
+ }
89
+ }
90
+ /**
91
+ * Git ステータス取得
92
+ */
93
+ export async function getGitStatus() {
94
+ const git = getGit();
95
+ try {
96
+ const status = await git.status();
97
+ const log = await git.log({ maxCount: 1 });
98
+ return {
99
+ branch: status.current || 'unknown',
100
+ uncommittedChanges: status.files.length,
101
+ modifiedFiles: status.files.map(f => f.path),
102
+ lastCommit: log.latest ? {
103
+ hash: log.latest.hash,
104
+ message: log.latest.message,
105
+ date: log.latest.date,
106
+ } : undefined,
107
+ };
108
+ }
109
+ catch {
110
+ return {
111
+ branch: 'unknown',
112
+ uncommittedChanges: 0,
113
+ modifiedFiles: [],
114
+ };
115
+ }
116
+ }
117
+ /**
118
+ * Gitリポジトリが初期化されているかチェック
119
+ */
120
+ export async function isGitRepository() {
121
+ const git = getGit();
122
+ try {
123
+ await git.status();
124
+ return true;
125
+ }
126
+ catch {
127
+ return false;
128
+ }
129
+ }
130
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * ユーティリティのエクスポート
3
+ */
4
+ export * from './markdown.js';
5
+ export * from './fileManager.js';
6
+ export * from './git.js';
7
+ export * from './validator.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * ユーティリティのエクスポート
3
+ */
4
+ export * from './markdown.js';
5
+ export * from './fileManager.js';
6
+ export * from './git.js';
7
+ export * from './validator.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Markdown パーサー・ジェネレーター
3
+ *
4
+ * 日報のMarkdown形式を解析・生成する
5
+ */
6
+ import type { DailyReport, ReportStats } from '../types/index.js';
7
+ /**
8
+ * Markdownコンテンツをパースして DailyReport オブジェクトに変換
9
+ */
10
+ export declare function parseMarkdown(date: string, content: string): DailyReport;
11
+ /**
12
+ * DailyReport オブジェクトからMarkdownコンテンツを生成
13
+ */
14
+ export declare function generateMarkdown(report: DailyReport): string;
15
+ /**
16
+ * 統計情報を計算
17
+ */
18
+ export declare function calculateStats(report: DailyReport): ReportStats;
19
+ /**
20
+ * frontmatter付きMarkdownを生成
21
+ */
22
+ export declare function generateMarkdownWithFrontmatter(report: DailyReport, stats: ReportStats): string;
23
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/utils/markdown.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAsC,MAAM,mBAAmB,CAAC;AAEtG;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CA0IxE;AAkKD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAuD5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAwB/D;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAgB/F"}