@nahisaho/katashiro-generator 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/citation/citation-generator.d.ts +68 -0
  2. package/dist/citation/citation-generator.d.ts.map +1 -0
  3. package/dist/citation/citation-generator.js +134 -0
  4. package/dist/citation/citation-generator.js.map +1 -0
  5. package/dist/citation/index.d.ts +6 -0
  6. package/dist/citation/index.d.ts.map +1 -0
  7. package/dist/citation/index.js +5 -0
  8. package/dist/citation/index.js.map +1 -0
  9. package/dist/export/export-service.d.ts +96 -0
  10. package/dist/export/export-service.d.ts.map +1 -0
  11. package/dist/export/export-service.js +278 -0
  12. package/dist/export/export-service.js.map +1 -0
  13. package/dist/export/index.d.ts +7 -0
  14. package/dist/export/index.d.ts.map +1 -0
  15. package/dist/export/index.js +7 -0
  16. package/dist/export/index.js.map +1 -0
  17. package/dist/index.d.ts +16 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +15 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/interfaces.d.ts +28 -0
  22. package/dist/interfaces.d.ts.map +1 -0
  23. package/dist/interfaces.js +5 -0
  24. package/dist/interfaces.js.map +1 -0
  25. package/dist/presentation/index.d.ts +7 -0
  26. package/dist/presentation/index.d.ts.map +1 -0
  27. package/dist/presentation/index.js +7 -0
  28. package/dist/presentation/index.js.map +1 -0
  29. package/dist/presentation/presentation-generator.d.ts +106 -0
  30. package/dist/presentation/presentation-generator.d.ts.map +1 -0
  31. package/dist/presentation/presentation-generator.js +250 -0
  32. package/dist/presentation/presentation-generator.js.map +1 -0
  33. package/dist/report/index.d.ts +6 -0
  34. package/dist/report/index.d.ts.map +1 -0
  35. package/dist/report/index.js +5 -0
  36. package/dist/report/index.js.map +1 -0
  37. package/dist/report/report-generator.d.ts +82 -0
  38. package/dist/report/report-generator.d.ts.map +1 -0
  39. package/dist/report/report-generator.js +262 -0
  40. package/dist/report/report-generator.js.map +1 -0
  41. package/dist/summary/index.d.ts +6 -0
  42. package/dist/summary/index.d.ts.map +1 -0
  43. package/dist/summary/index.js +5 -0
  44. package/dist/summary/index.js.map +1 -0
  45. package/dist/summary/summary-generator.d.ts +42 -0
  46. package/dist/summary/summary-generator.d.ts.map +1 -0
  47. package/dist/summary/summary-generator.js +140 -0
  48. package/dist/summary/summary-generator.js.map +1 -0
  49. package/dist/template/index.d.ts +6 -0
  50. package/dist/template/index.d.ts.map +1 -0
  51. package/dist/template/index.js +5 -0
  52. package/dist/template/index.js.map +1 -0
  53. package/dist/template/template-engine.d.ts +76 -0
  54. package/dist/template/template-engine.d.ts.map +1 -0
  55. package/dist/template/template-engine.js +165 -0
  56. package/dist/template/template-engine.js.map +1 -0
  57. package/dist/types.d.ts +42 -0
  58. package/dist/types.d.ts.map +1 -0
  59. package/dist/types.js +5 -0
  60. package/dist/types.js.map +1 -0
  61. package/package.json +39 -0
@@ -0,0 +1,262 @@
1
+ /**
2
+ * ReportGenerator - レポート生成
3
+ *
4
+ * @requirement REQ-GEN-001
5
+ * @design DES-KATASHIRO-001 §2.3 Generator Container
6
+ * @task TSK-030
7
+ */
8
+ import { ok, err } from '@nahisaho/katashiro-core';
9
+ /**
10
+ * レポート生成実装
11
+ */
12
+ export class ReportGenerator {
13
+ /**
14
+ * レポートを生成
15
+ */
16
+ async generateReport(content, config) {
17
+ try {
18
+ const sections = this.extractSections(content);
19
+ if (config.format === 'markdown') {
20
+ return ok(this.generateMarkdown(content, sections, config));
21
+ }
22
+ else {
23
+ return ok(this.generateHtml(content, sections, config));
24
+ }
25
+ }
26
+ catch (error) {
27
+ return err(error instanceof Error ? error : new Error(String(error)));
28
+ }
29
+ }
30
+ /**
31
+ * セクションを作成
32
+ */
33
+ createSection(heading, level, content, subsections) {
34
+ return {
35
+ heading,
36
+ level,
37
+ content,
38
+ subsections,
39
+ };
40
+ }
41
+ /**
42
+ * 目次を生成
43
+ */
44
+ generateToc(sections) {
45
+ const lines = ['## 目次\n'];
46
+ const addToToc = (section, depth = 0) => {
47
+ const indent = ' '.repeat(depth);
48
+ const anchor = this.slugify(section.heading);
49
+ lines.push(`${indent}- [${section.heading}](#${anchor})`);
50
+ if (section.subsections) {
51
+ for (const sub of section.subsections) {
52
+ addToToc(sub, depth + 1);
53
+ }
54
+ }
55
+ };
56
+ for (const section of sections) {
57
+ addToToc(section);
58
+ }
59
+ return lines.join('\n');
60
+ }
61
+ /**
62
+ * ソースをフォーマット
63
+ */
64
+ formatSources(sources, format) {
65
+ if (sources.length === 0)
66
+ return '';
67
+ if (format === 'markdown') {
68
+ const lines = ['## 参考文献\n'];
69
+ sources.forEach((source, index) => {
70
+ const title = source.metadata?.title ?? source.url;
71
+ lines.push(`[${index + 1}] ${title} - ${source.url}`);
72
+ });
73
+ return lines.join('\n');
74
+ }
75
+ else {
76
+ const items = sources.map((source, index) => {
77
+ const title = source.metadata?.title ?? source.url;
78
+ return `<li>[${index + 1}] <a href="${this.escapeHtml(source.url)}">${this.escapeHtml(title)}</a></li>`;
79
+ }).join('\n');
80
+ return `<section class="references">
81
+ <h2>参考文献</h2>
82
+ <ol>
83
+ ${items}
84
+ </ol>
85
+ </section>`;
86
+ }
87
+ }
88
+ /**
89
+ * コンテンツからセクションを抽出
90
+ */
91
+ extractSections(content) {
92
+ const body = content.body;
93
+ const sections = [];
94
+ // Simple extraction: split by paragraphs
95
+ const paragraphs = body.split(/\n\n+/).filter(p => p.trim());
96
+ if (paragraphs.length > 0) {
97
+ sections.push({
98
+ heading: '概要',
99
+ level: 2,
100
+ content: paragraphs[0] ?? '',
101
+ });
102
+ }
103
+ if (paragraphs.length > 1) {
104
+ sections.push({
105
+ heading: '詳細',
106
+ level: 2,
107
+ content: paragraphs.slice(1).join('\n\n'),
108
+ });
109
+ }
110
+ return sections;
111
+ }
112
+ /**
113
+ * Markdownレポートを生成
114
+ */
115
+ generateMarkdown(content, sections, config) {
116
+ const parts = [];
117
+ // Title
118
+ if (config.includeTitle !== false) {
119
+ parts.push(`# ${content.title}\n`);
120
+ }
121
+ // Date
122
+ if (config.includeDate) {
123
+ parts.push(`*作成日: ${new Date(content.createdAt).toLocaleDateString('ja-JP')}*\n`);
124
+ }
125
+ // TOC
126
+ if (config.includeToc) {
127
+ parts.push(this.generateToc(sections));
128
+ parts.push('');
129
+ }
130
+ // Sections
131
+ for (const section of sections) {
132
+ parts.push(this.renderMarkdownSection(section));
133
+ }
134
+ // Sources
135
+ if (config.includeSources && content.sources.length > 0) {
136
+ parts.push('');
137
+ parts.push(this.formatSources(content.sources, 'markdown'));
138
+ }
139
+ return parts.join('\n');
140
+ }
141
+ /**
142
+ * HTMLレポートを生成
143
+ */
144
+ generateHtml(content, sections, config) {
145
+ const parts = [];
146
+ parts.push('<!DOCTYPE html>');
147
+ parts.push('<html lang="ja">');
148
+ parts.push('<head>');
149
+ parts.push(`<meta charset="UTF-8">`);
150
+ parts.push(`<meta name="viewport" content="width=device-width, initial-scale=1.0">`);
151
+ parts.push(`<title>${this.escapeHtml(content.title)}</title>`);
152
+ parts.push('<style>');
153
+ parts.push(this.getDefaultStyles());
154
+ parts.push('</style>');
155
+ parts.push('</head>');
156
+ parts.push('<body>');
157
+ parts.push('<article>');
158
+ // Title
159
+ if (config.includeTitle !== false) {
160
+ parts.push(`<h1>${this.escapeHtml(content.title)}</h1>`);
161
+ }
162
+ // Date
163
+ if (config.includeDate) {
164
+ parts.push(`<p class="date">作成日: ${new Date(content.createdAt).toLocaleDateString('ja-JP')}</p>`);
165
+ }
166
+ // Sections
167
+ for (const section of sections) {
168
+ parts.push(this.renderHtmlSection(section));
169
+ }
170
+ // Sources
171
+ if (config.includeSources && content.sources.length > 0) {
172
+ parts.push(this.formatSources(content.sources, 'html'));
173
+ }
174
+ parts.push('</article>');
175
+ parts.push('</body>');
176
+ parts.push('</html>');
177
+ return parts.join('\n');
178
+ }
179
+ /**
180
+ * Markdownセクションをレンダリング
181
+ */
182
+ renderMarkdownSection(section) {
183
+ const parts = [];
184
+ const heading = '#'.repeat(section.level) + ' ' + section.heading;
185
+ parts.push(heading);
186
+ parts.push('');
187
+ if (section.content) {
188
+ parts.push(section.content);
189
+ parts.push('');
190
+ }
191
+ if (section.subsections) {
192
+ for (const sub of section.subsections) {
193
+ parts.push(this.renderMarkdownSection(sub));
194
+ }
195
+ }
196
+ return parts.join('\n');
197
+ }
198
+ /**
199
+ * HTMLセクションをレンダリング
200
+ */
201
+ renderHtmlSection(section) {
202
+ const parts = [];
203
+ const tag = `h${Math.min(section.level, 6)}`;
204
+ const id = this.slugify(section.heading);
205
+ parts.push(`<section id="${id}">`);
206
+ parts.push(`<${tag}>${this.escapeHtml(section.heading)}</${tag}>`);
207
+ if (section.content) {
208
+ const paragraphs = section.content.split(/\n\n+/);
209
+ for (const p of paragraphs) {
210
+ if (p.trim()) {
211
+ parts.push(`<p>${this.escapeHtml(p.trim())}</p>`);
212
+ }
213
+ }
214
+ }
215
+ if (section.subsections) {
216
+ for (const sub of section.subsections) {
217
+ parts.push(this.renderHtmlSection(sub));
218
+ }
219
+ }
220
+ parts.push('</section>');
221
+ return parts.join('\n');
222
+ }
223
+ /**
224
+ * スラグを生成
225
+ */
226
+ slugify(text) {
227
+ return text
228
+ .toLowerCase()
229
+ .replace(/[^\w\u3040-\u309f\u30a0-\u30ff\u4e00-\u9faf]+/g, '-')
230
+ .replace(/^-+|-+$/g, '');
231
+ }
232
+ /**
233
+ * HTMLエスケープ
234
+ */
235
+ escapeHtml(text) {
236
+ return text
237
+ .replace(/&/g, '&amp;')
238
+ .replace(/</g, '&lt;')
239
+ .replace(/>/g, '&gt;')
240
+ .replace(/"/g, '&quot;')
241
+ .replace(/'/g, '&#039;');
242
+ }
243
+ /**
244
+ * デフォルトスタイル
245
+ */
246
+ getDefaultStyles() {
247
+ return `
248
+ body {
249
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
250
+ max-width: 800px;
251
+ margin: 0 auto;
252
+ padding: 2rem;
253
+ line-height: 1.6;
254
+ }
255
+ h1, h2, h3 { margin-top: 2rem; }
256
+ .date { color: #666; font-style: italic; }
257
+ .references { margin-top: 3rem; border-top: 1px solid #ccc; padding-top: 1rem; }
258
+ .references ol { padding-left: 1.5rem; }
259
+ `.trim();
260
+ }
261
+ }
262
+ //# sourceMappingURL=report-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-generator.js","sourceRoot":"","sources":["../../src/report/report-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Summary module exports
3
+ */
4
+ export { SummaryGenerator, } from './summary-generator.js';
5
+ export type { SummaryConfig, } from './summary-generator.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/summary/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,aAAa,GACd,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Summary module exports
3
+ */
4
+ export { SummaryGenerator, } from './summary-generator.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/summary/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,GACjB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * SummaryGenerator - 要約生成
3
+ *
4
+ * @requirement REQ-GEN-002
5
+ * @design DES-KATASHIRO-001 §2.3 Generator Container
6
+ * @task TSK-031
7
+ */
8
+ import { type Result, type Content } from '@nahisaho/katashiro-core';
9
+ /**
10
+ * 要約設定
11
+ */
12
+ export interface SummaryConfig {
13
+ readonly maxLength: number;
14
+ readonly style?: 'extractive' | 'abstractive';
15
+ readonly preserveKeywords?: boolean;
16
+ }
17
+ /**
18
+ * 要約生成実装
19
+ */
20
+ export declare class SummaryGenerator {
21
+ /**
22
+ * コンテンツから要約を生成
23
+ */
24
+ generateSummary(content: Content, config: SummaryConfig): Promise<Result<string, Error>>;
25
+ /**
26
+ * 複数ソースから統合要約を生成
27
+ */
28
+ generateMultiSourceSummary(contents: Content[], config: SummaryConfig): Promise<Result<string, Error>>;
29
+ /**
30
+ * キーポイントを抽出
31
+ */
32
+ extractKeyPoints(text: string, maxPoints: number): string[];
33
+ /**
34
+ * 箇条書き形式の要約を生成
35
+ */
36
+ generateBulletSummary(content: Content, maxBullets: number): Promise<Result<string, Error>>;
37
+ /**
38
+ * 抽出型要約を実行
39
+ */
40
+ private extractiveSummarize;
41
+ }
42
+ //# sourceMappingURL=summary-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-generator.d.ts","sourceRoot":"","sources":["../../src/summary/summary-generator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAW,KAAK,MAAM,EAAE,KAAK,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC;IAC9C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAgBjC;;OAEG;IACG,0BAA0B,CAC9B,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAkBjC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAyC3D;;OAEG;IACG,qBAAqB,CACzB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAmBjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAkC5B"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * SummaryGenerator - 要約生成
3
+ *
4
+ * @requirement REQ-GEN-002
5
+ * @design DES-KATASHIRO-001 §2.3 Generator Container
6
+ * @task TSK-031
7
+ */
8
+ import { ok, err } from '@nahisaho/katashiro-core';
9
+ /**
10
+ * 要約生成実装
11
+ */
12
+ export class SummaryGenerator {
13
+ /**
14
+ * コンテンツから要約を生成
15
+ */
16
+ async generateSummary(content, config) {
17
+ try {
18
+ const text = content.body.trim();
19
+ if (!text) {
20
+ return ok('');
21
+ }
22
+ // Simple extractive summarization
23
+ const summary = this.extractiveSummarize(text, config.maxLength);
24
+ return ok(summary);
25
+ }
26
+ catch (error) {
27
+ return err(error instanceof Error ? error : new Error(String(error)));
28
+ }
29
+ }
30
+ /**
31
+ * 複数ソースから統合要約を生成
32
+ */
33
+ async generateMultiSourceSummary(contents, config) {
34
+ try {
35
+ if (contents.length === 0) {
36
+ return ok('');
37
+ }
38
+ // Combine all content
39
+ const allText = contents
40
+ .map(c => `【${c.title}】${c.body}`)
41
+ .join('\n\n');
42
+ const summary = this.extractiveSummarize(allText, config.maxLength);
43
+ return ok(summary);
44
+ }
45
+ catch (error) {
46
+ return err(error instanceof Error ? error : new Error(String(error)));
47
+ }
48
+ }
49
+ /**
50
+ * キーポイントを抽出
51
+ */
52
+ extractKeyPoints(text, maxPoints) {
53
+ // Split into sentences
54
+ const sentences = text
55
+ .split(/[。!?.!?]+/)
56
+ .map(s => s.trim())
57
+ .filter(s => s.length > 5);
58
+ if (sentences.length === 0) {
59
+ return [];
60
+ }
61
+ // Score sentences by importance indicators
62
+ const scored = sentences.map(sentence => {
63
+ let score = 0;
64
+ // Boost sentences with key phrases
65
+ if (/第[一二三四五]に|まず|次に|最後に|重要/u.test(sentence)) {
66
+ score += 3;
67
+ }
68
+ if (/です|ます|である/u.test(sentence)) {
69
+ score += 1;
70
+ }
71
+ // Penalize very short sentences
72
+ if (sentence.length < 10) {
73
+ score -= 2;
74
+ }
75
+ // Boost longer, substantial sentences
76
+ if (sentence.length > 30 && sentence.length < 100) {
77
+ score += 2;
78
+ }
79
+ return { sentence, score };
80
+ });
81
+ // Sort by score and take top points
82
+ return scored
83
+ .sort((a, b) => b.score - a.score)
84
+ .slice(0, maxPoints)
85
+ .map(s => s.sentence);
86
+ }
87
+ /**
88
+ * 箇条書き形式の要約を生成
89
+ */
90
+ async generateBulletSummary(content, maxBullets) {
91
+ try {
92
+ const keyPoints = this.extractKeyPoints(content.body, maxBullets);
93
+ if (keyPoints.length === 0) {
94
+ // Fallback: split into chunks
95
+ const chunks = content.body.split(/[。!?.!?]+/).filter(s => s.trim());
96
+ const limited = chunks.slice(0, maxBullets);
97
+ const bullets = limited.map(p => `• ${p.trim()}`).join('\n');
98
+ return ok(bullets || '• ' + content.body.slice(0, 50));
99
+ }
100
+ const bullets = keyPoints.map(p => `• ${p}`).join('\n');
101
+ return ok(bullets);
102
+ }
103
+ catch (error) {
104
+ return err(error instanceof Error ? error : new Error(String(error)));
105
+ }
106
+ }
107
+ /**
108
+ * 抽出型要約を実行
109
+ */
110
+ extractiveSummarize(text, maxLength) {
111
+ if (text.length <= maxLength) {
112
+ return text;
113
+ }
114
+ // Split into sentences
115
+ const sentences = text.split(/([。!?.!?]+)/).filter(s => s.trim());
116
+ // Reconstruct sentences with punctuation
117
+ const fullSentences = [];
118
+ for (let i = 0; i < sentences.length; i += 2) {
119
+ const content = sentences[i] ?? '';
120
+ const punctuation = sentences[i + 1] ?? '';
121
+ if (content.trim()) {
122
+ fullSentences.push(content + punctuation);
123
+ }
124
+ }
125
+ // Take sentences until we exceed maxLength
126
+ let result = '';
127
+ for (const sentence of fullSentences) {
128
+ if ((result + sentence).length > maxLength) {
129
+ break;
130
+ }
131
+ result += sentence;
132
+ }
133
+ // If we couldn't fit any sentence, truncate
134
+ if (!result) {
135
+ return text.slice(0, maxLength - 3) + '...';
136
+ }
137
+ return result.trim();
138
+ }
139
+ }
140
+ //# sourceMappingURL=summary-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-generator.js","sourceRoot":"","sources":["../../src/summary/summary-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Template module exports
3
+ */
4
+ export { TemplateEngine, } from './template-engine.js';
5
+ export type { Template, HelperFunction, } from './template-engine.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/template/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,QAAQ,EACR,cAAc,GACf,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Template module exports
3
+ */
4
+ export { TemplateEngine, } from './template-engine.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/template/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,cAAc,GACf,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * TemplateEngine - テンプレートエンジン
3
+ *
4
+ * @requirement REQ-GEN-004
5
+ * @design DES-KATASHIRO-001 §2.3 Generator Container
6
+ * @task TSK-034
7
+ */
8
+ /**
9
+ * テンプレート
10
+ */
11
+ export interface Template {
12
+ readonly name: string;
13
+ readonly content: string;
14
+ readonly description?: string;
15
+ }
16
+ /**
17
+ * ヘルパー関数型
18
+ */
19
+ export type HelperFunction = (value: unknown, ...args: unknown[]) => string;
20
+ /**
21
+ * テンプレートエンジン実装
22
+ */
23
+ export declare class TemplateEngine {
24
+ private templates;
25
+ private helpers;
26
+ constructor();
27
+ /**
28
+ * テンプレートをレンダリング
29
+ */
30
+ render(template: string, data: Record<string, unknown>): string;
31
+ /**
32
+ * 名前付きテンプレートをレンダリング
33
+ */
34
+ renderNamed(name: string, data: Record<string, unknown>): string;
35
+ /**
36
+ * テンプレートを登録
37
+ */
38
+ registerTemplate(name: string, content: string): void;
39
+ /**
40
+ * ヘルパーを登録
41
+ */
42
+ registerHelper(name: string, fn: HelperFunction): void;
43
+ /**
44
+ * ビルトインテンプレート一覧
45
+ */
46
+ getBuiltInTemplates(): Template[];
47
+ /**
48
+ * 条件分岐を処理
49
+ */
50
+ private processConditionals;
51
+ /**
52
+ * eachループを処理
53
+ */
54
+ private processEachLoops;
55
+ /**
56
+ * ヘルパーを処理
57
+ */
58
+ private processHelpers;
59
+ /**
60
+ * 変数を処理
61
+ */
62
+ private processVariables;
63
+ /**
64
+ * ネストしたオブジェクトから値を取得
65
+ */
66
+ private getValue;
67
+ /**
68
+ * ビルトインヘルパーを登録
69
+ */
70
+ private registerBuiltInHelpers;
71
+ /**
72
+ * ビルトインテンプレートを登録
73
+ */
74
+ private registerBuiltInTemplates;
75
+ }
76
+ //# sourceMappingURL=template-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../../src/template/template-engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC;AAE5E;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,OAAO,CAA0C;;IAOzD;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAkB/D;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAQhE;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAIrD;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,GAAG,IAAI;IAItD;;OAEG;IACH,mBAAmB,IAAI,QAAQ,EAAE;IAoBjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAchB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAU9B;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAKjC"}