md2cv 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 (87) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +674 -0
  3. package/README.md +219 -0
  4. package/dist/bin.d.ts +6 -0
  5. package/dist/bin.d.ts.map +1 -0
  6. package/dist/bin.js +10 -0
  7. package/dist/bin.js.map +1 -0
  8. package/dist/cli/index.d.ts +50 -0
  9. package/dist/cli/index.d.ts.map +1 -0
  10. package/dist/cli/index.js +278 -0
  11. package/dist/cli/index.js.map +1 -0
  12. package/dist/generator/index.d.ts +36 -0
  13. package/dist/generator/index.d.ts.map +1 -0
  14. package/dist/generator/index.js +302 -0
  15. package/dist/generator/index.js.map +1 -0
  16. package/dist/generator/resume_en.d.ts +22 -0
  17. package/dist/generator/resume_en.d.ts.map +1 -0
  18. package/dist/generator/resume_en.js +524 -0
  19. package/dist/generator/resume_en.js.map +1 -0
  20. package/dist/generator/resume_ja.d.ts +22 -0
  21. package/dist/generator/resume_ja.d.ts.map +1 -0
  22. package/dist/generator/resume_ja.js +440 -0
  23. package/dist/generator/resume_ja.js.map +1 -0
  24. package/dist/generator/rirekisho/components.d.ts +83 -0
  25. package/dist/generator/rirekisho/components.d.ts.map +1 -0
  26. package/dist/generator/rirekisho/components.js +405 -0
  27. package/dist/generator/rirekisho/components.js.map +1 -0
  28. package/dist/generator/rirekisho/data.d.ts +18 -0
  29. package/dist/generator/rirekisho/data.d.ts.map +1 -0
  30. package/dist/generator/rirekisho/data.js +274 -0
  31. package/dist/generator/rirekisho/data.js.map +1 -0
  32. package/dist/generator/rirekisho/index.d.ts +20 -0
  33. package/dist/generator/rirekisho/index.d.ts.map +1 -0
  34. package/dist/generator/rirekisho/index.js +67 -0
  35. package/dist/generator/rirekisho/index.js.map +1 -0
  36. package/dist/generator/rirekisho/layout.d.ts +20 -0
  37. package/dist/generator/rirekisho/layout.d.ts.map +1 -0
  38. package/dist/generator/rirekisho/layout.js +354 -0
  39. package/dist/generator/rirekisho/layout.js.map +1 -0
  40. package/dist/generator/rirekisho/styles.d.ts +9 -0
  41. package/dist/generator/rirekisho/styles.d.ts.map +1 -0
  42. package/dist/generator/rirekisho/styles.js +362 -0
  43. package/dist/generator/rirekisho/styles.js.map +1 -0
  44. package/dist/generator/rirekisho/types.d.ts +163 -0
  45. package/dist/generator/rirekisho/types.d.ts.map +1 -0
  46. package/dist/generator/rirekisho/types.js +80 -0
  47. package/dist/generator/rirekisho/types.js.map +1 -0
  48. package/dist/index.d.ts +10 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +10 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/parser/index.d.ts +21 -0
  53. package/dist/parser/index.d.ts.map +1 -0
  54. package/dist/parser/index.js +639 -0
  55. package/dist/parser/index.js.map +1 -0
  56. package/dist/types/config.d.ts +64 -0
  57. package/dist/types/config.d.ts.map +1 -0
  58. package/dist/types/config.js +5 -0
  59. package/dist/types/config.js.map +1 -0
  60. package/dist/types/errors.d.ts +78 -0
  61. package/dist/types/errors.d.ts.map +1 -0
  62. package/dist/types/errors.js +146 -0
  63. package/dist/types/errors.js.map +1 -0
  64. package/dist/types/index.d.ts +9 -0
  65. package/dist/types/index.d.ts.map +1 -0
  66. package/dist/types/index.js +9 -0
  67. package/dist/types/index.js.map +1 -0
  68. package/dist/types/metadata.d.ts +55 -0
  69. package/dist/types/metadata.d.ts.map +1 -0
  70. package/dist/types/metadata.js +136 -0
  71. package/dist/types/metadata.js.map +1 -0
  72. package/dist/types/result.d.ts +50 -0
  73. package/dist/types/result.d.ts.map +1 -0
  74. package/dist/types/result.js +74 -0
  75. package/dist/types/result.js.map +1 -0
  76. package/dist/types/sections.d.ts +168 -0
  77. package/dist/types/sections.d.ts.map +1 -0
  78. package/dist/types/sections.js +122 -0
  79. package/dist/types/sections.js.map +1 -0
  80. package/dist/validator/index.d.ts +20 -0
  81. package/dist/validator/index.d.ts.map +1 -0
  82. package/dist/validator/index.js +67 -0
  83. package/dist/validator/index.js.map +1 -0
  84. package/examples/example-cv-en.md +77 -0
  85. package/examples/example-cv-ja.md +116 -0
  86. package/examples/sample-photo.png +0 -0
  87. package/package.json +93 -0
@@ -0,0 +1,440 @@
1
+ /**
2
+ * Japanese CV Generator (職務経歴書スタイル)
3
+ * Generates HTML for Japanese CV format with Mincho font
4
+ */
5
+ import { isSectionValidForFormat } from '../types/sections.js';
6
+ /**
7
+ * Page size dimensions in mm
8
+ */
9
+ const PAGE_SIZES = {
10
+ a3: { width: 420, height: 297 },
11
+ a4: { width: 210, height: 297 },
12
+ b4: { width: 364, height: 257 },
13
+ b5: { width: 176, height: 250 },
14
+ letter: { width: 215.9, height: 279.4 },
15
+ };
16
+ /**
17
+ * Default number of columns for skills grid
18
+ */
19
+ const DEFAULT_SKILLS_COLUMNS = 3;
20
+ /**
21
+ * Escape HTML special characters
22
+ */
23
+ function escapeHtml(text) {
24
+ return text
25
+ .replace(/&/g, '&')
26
+ .replace(/</g, '&lt;')
27
+ .replace(/>/g, '&gt;')
28
+ .replace(/"/g, '&quot;')
29
+ .replace(/'/g, '&#039;');
30
+ }
31
+ /**
32
+ * Format date for Japanese display
33
+ */
34
+ function formatDate(date) {
35
+ if (!date)
36
+ return '';
37
+ return `${date.getFullYear()}年${date.getMonth() + 1}月`;
38
+ }
39
+ /**
40
+ * Format end date which can be Date or 'present'
41
+ */
42
+ function formatEndDate(end) {
43
+ if (!end)
44
+ return '';
45
+ if (end === 'present')
46
+ return '現在';
47
+ return formatDate(end);
48
+ }
49
+ /**
50
+ * Format date range
51
+ */
52
+ function formatDateRange(start, end) {
53
+ const startStr = formatDate(start);
54
+ const endStr = formatEndDate(end);
55
+ if (startStr && endStr)
56
+ return `${startStr} - ${endStr}`;
57
+ if (startStr)
58
+ return startStr;
59
+ return '';
60
+ }
61
+ /**
62
+ * Get current date in Japanese format (yyyy年mm月dd日現在)
63
+ */
64
+ function getCurrentDateJa() {
65
+ const now = new Date();
66
+ return `${now.getFullYear()}年${now.getMonth() + 1}月${now.getDate()}日現在`;
67
+ }
68
+ /**
69
+ * Generate base CSS styles
70
+ */
71
+ function generateStyles(paperSize) {
72
+ const size = PAGE_SIZES[paperSize];
73
+ return `
74
+ @page {
75
+ size: ${size.width}mm ${size.height}mm;
76
+ margin: 15mm;
77
+ }
78
+ * {
79
+ margin: 0;
80
+ padding: 0;
81
+ box-sizing: border-box;
82
+ }
83
+ body {
84
+ font-family: "Yu Mincho", "Hiragino Mincho Pro", "MS Mincho", serif;
85
+ font-size: 10pt;
86
+ line-height: 1.6;
87
+ color: #333;
88
+ background: #fff;
89
+ max-width: 800px;
90
+ margin: 0 auto;
91
+ padding: 20px;
92
+ }
93
+ header {
94
+ margin-bottom: 20px;
95
+ padding-bottom: 15px;
96
+ }
97
+ .document-title {
98
+ text-align: center;
99
+ font-size: 18pt;
100
+ font-weight: bold;
101
+ margin-bottom: 12px;
102
+ color: #000;
103
+ }
104
+ .header-info {
105
+ display: flex;
106
+ flex-direction: column;
107
+ align-items: flex-end;
108
+ }
109
+ .header-name {
110
+ font-size: 10pt;
111
+ color: #000;
112
+ }
113
+ .header-date {
114
+ font-size: 10pt;
115
+ color: #333;
116
+ }
117
+ section {
118
+ margin-bottom: 16px;
119
+ page-break-inside: avoid;
120
+ break-inside: avoid;
121
+ }
122
+ h2 {
123
+ font-size: 12pt;
124
+ font-weight: bold;
125
+ border-bottom: 1px solid #333;
126
+ padding-bottom: 3px;
127
+ margin-bottom: 10px;
128
+ color: #000;
129
+ }
130
+ .entry {
131
+ margin-bottom: 12px;
132
+ page-break-inside: avoid;
133
+ break-inside: avoid;
134
+ }
135
+ .entry-header {
136
+ display: flex;
137
+ justify-content: space-between;
138
+ align-items: baseline;
139
+ flex-wrap: wrap;
140
+ }
141
+ .entry-title {
142
+ font-weight: bold;
143
+ color: #000;
144
+ }
145
+ .cert-item {
146
+ font-size: 9pt;
147
+ color: #000;
148
+ margin-bottom: 2px;
149
+ }
150
+ .lang-item {
151
+ font-size: 9pt;
152
+ }
153
+ .entry-subtitle {
154
+ font-size: 9pt;
155
+ color: #333;
156
+ }
157
+ .entry-date {
158
+ color: #333;
159
+ font-size: 9pt;
160
+ }
161
+ .entry-summary {
162
+ margin-top: 4px;
163
+ font-size: 9pt;
164
+ }
165
+ ul {
166
+ margin-left: 18px;
167
+ margin-top: 4px;
168
+ }
169
+ li {
170
+ margin-bottom: 2px;
171
+ font-size: 9pt;
172
+ }
173
+ p {
174
+ margin-bottom: 8px;
175
+ font-size: 10pt;
176
+ }
177
+ .skills-grid {
178
+ display: grid;
179
+ grid-template-columns: 1fr 1fr 1fr;
180
+ gap: 2px 20px;
181
+ }
182
+ .skill-item {
183
+ font-size: 9pt;
184
+ }
185
+ .skill-category {
186
+ margin-bottom: 4px;
187
+ font-size: 9pt;
188
+ }
189
+ .skill-category-name {
190
+ font-weight: bold;
191
+ }
192
+ @media print {
193
+ body {
194
+ padding: 0;
195
+ max-width: none;
196
+ }
197
+ }
198
+ `;
199
+ }
200
+ /**
201
+ * Render education section
202
+ * Format:
203
+ * <school> <start - end>
204
+ * <degree> — <location>
205
+ * <details>
206
+ */
207
+ function renderEducation(entries) {
208
+ return entries
209
+ .map((entry) => {
210
+ const dateRange = formatDateRange(entry.start, entry.end);
211
+ let html = '<div class="entry">';
212
+ // Title line: <school> —— <date range>
213
+ html += '<div class="entry-header">';
214
+ html += `<span class="entry-title">${escapeHtml(entry.school)}</span>`;
215
+ if (dateRange) {
216
+ html += `<span class="entry-date">${escapeHtml(dateRange)}</span>`;
217
+ }
218
+ html += '</div>';
219
+ // Subtitle line: <degree> — <location>
220
+ const subtitleParts = [];
221
+ if (entry.degree) {
222
+ subtitleParts.push(escapeHtml(entry.degree));
223
+ }
224
+ if (entry.location) {
225
+ subtitleParts.push(escapeHtml(entry.location));
226
+ }
227
+ if (subtitleParts.length > 0) {
228
+ html += `<div class="entry-subtitle">${subtitleParts.join(' — ')}</div>`;
229
+ }
230
+ // Details
231
+ if (entry.details && entry.details.length > 0) {
232
+ html += '<ul>';
233
+ for (const detail of entry.details) {
234
+ html += `<li>${escapeHtml(detail)}</li>`;
235
+ }
236
+ html += '</ul>';
237
+ }
238
+ html += '</div>';
239
+ return html;
240
+ })
241
+ .join('\n');
242
+ }
243
+ /**
244
+ * Render experience section
245
+ * Format:
246
+ * <company> —— <title> <start - end>
247
+ * <summary>
248
+ * <highlights>
249
+ */
250
+ function renderExperience(entries) {
251
+ return entries
252
+ .flatMap((entry) => {
253
+ return entry.roles.map((role) => {
254
+ const dateRange = formatDateRange(role.start, role.end);
255
+ let html = '<div class="entry">';
256
+ // Title line: <company> —— <title> <date range>
257
+ html += '<div class="entry-header">';
258
+ html += `<span class="entry-title">${escapeHtml(entry.company)} —— ${escapeHtml(role.title)}</span>`;
259
+ if (dateRange) {
260
+ html += `<span class="entry-date">${escapeHtml(dateRange)}</span>`;
261
+ }
262
+ html += '</div>';
263
+ // Summary
264
+ if (role.summary && role.summary.length > 0) {
265
+ html += '<div class="entry-summary">';
266
+ html += role.summary.map((s) => escapeHtml(s)).join(' ');
267
+ html += '</div>';
268
+ }
269
+ // Highlights
270
+ if (role.highlights && role.highlights.length > 0) {
271
+ html += '<ul>';
272
+ for (const highlight of role.highlights) {
273
+ html += `<li>${escapeHtml(highlight)}</li>`;
274
+ }
275
+ html += '</ul>';
276
+ }
277
+ html += '</div>';
278
+ return html;
279
+ });
280
+ })
281
+ .join('\n');
282
+ }
283
+ /**
284
+ * Render certifications section
285
+ */
286
+ function renderCertifications(entries) {
287
+ return entries
288
+ .map((entry) => {
289
+ let html = `<div class="cert-item">• ${escapeHtml(entry.name)}`;
290
+ if (entry.date) {
291
+ html += ` (${escapeHtml(formatDate(entry.date))})`;
292
+ }
293
+ html += '</div>';
294
+ return html;
295
+ })
296
+ .join('\n');
297
+ }
298
+ /**
299
+ * Render skills section - supports grid and categorized formats
300
+ */
301
+ function renderSkills(entries, options) {
302
+ // Check if categorized format (entries have non-empty category with description)
303
+ const isCategorized = options.format === 'categorized' ||
304
+ entries.some(e => e.category && (e.description || e.items.length > 0));
305
+ if (isCategorized && entries.some(e => e.category)) {
306
+ // Categorized format: • <category>: <description or items>
307
+ return entries
308
+ .filter(e => e.category)
309
+ .map((entry) => {
310
+ const content = entry.description || entry.items.join('、');
311
+ return `<div class="skill-category">• <span class="skill-category-name">${escapeHtml(entry.category)}:</span> ${escapeHtml(content)}</div>`;
312
+ })
313
+ .join('\n');
314
+ }
315
+ // Grid format: flatten all items
316
+ const allItems = [];
317
+ for (const entry of entries) {
318
+ for (const item of entry.items) {
319
+ allItems.push(item);
320
+ }
321
+ }
322
+ if (allItems.length === 0) {
323
+ return '';
324
+ }
325
+ const columns = options.columns ?? DEFAULT_SKILLS_COLUMNS;
326
+ let html = `<div class="skills-grid" style="grid-template-columns: repeat(${columns}, 1fr);">`;
327
+ for (const item of allItems) {
328
+ html += `<div class="skill-item">• ${escapeHtml(item)}</div>`;
329
+ }
330
+ html += '</div>';
331
+ return html;
332
+ }
333
+ /**
334
+ * Render skills from list content as grid
335
+ */
336
+ function renderSkillsList(items, columns = DEFAULT_SKILLS_COLUMNS) {
337
+ if (items.length === 0) {
338
+ return '';
339
+ }
340
+ let html = `<div class="skills-grid" style="grid-template-columns: repeat(${columns}, 1fr);">`;
341
+ for (const item of items) {
342
+ html += `<div class="skill-item">• ${escapeHtml(item)}</div>`;
343
+ }
344
+ html += '</div>';
345
+ return html;
346
+ }
347
+ /**
348
+ * Render languages section
349
+ */
350
+ function renderLanguages(entries) {
351
+ return entries
352
+ .map((entry) => {
353
+ let html = `<span class="lang-item">${escapeHtml(entry.language)}`;
354
+ if (entry.level) {
355
+ html += ` (${escapeHtml(entry.level)})`;
356
+ }
357
+ html += '</span>';
358
+ return html;
359
+ })
360
+ .join(' • ');
361
+ }
362
+ /**
363
+ * Render section content
364
+ */
365
+ function renderSectionContent(content, sectionId) {
366
+ switch (content.type) {
367
+ case 'text':
368
+ return `<p>${escapeHtml(content.text)}</p>`;
369
+ case 'list':
370
+ // For skills section, render as grid
371
+ if (sectionId === 'skills') {
372
+ return renderSkillsList(content.items);
373
+ }
374
+ return ('<ul>' + content.items.map((item) => `<li>${escapeHtml(item)}</li>`).join('\n') + '</ul>');
375
+ case 'education':
376
+ return renderEducation(content.entries);
377
+ case 'experience':
378
+ return renderExperience(content.entries);
379
+ case 'certifications':
380
+ return renderCertifications(content.entries);
381
+ case 'skills':
382
+ return renderSkills(content.entries, content.options);
383
+ case 'languages':
384
+ return renderLanguages(content.entries);
385
+ case 'table':
386
+ return ('<ul>' +
387
+ content.rows.map((row) => `<li>${escapeHtml(row.content)}</li>`).join('\n') +
388
+ '</ul>');
389
+ default:
390
+ return '';
391
+ }
392
+ }
393
+ /**
394
+ * Filter sections by format validity, preserving input order
395
+ * Note: Section ordering is now handled by filterAndOrderSections in generator/index.ts
396
+ */
397
+ function filterSections(sections) {
398
+ return sections.filter(section => isSectionValidForFormat(section.id, 'cv'));
399
+ }
400
+ /**
401
+ * Generate Japanese HTML CV
402
+ */
403
+ export function generateCVJaHTML(cv, options) {
404
+ const styles = generateStyles(options.paperSize);
405
+ const name = cv.metadata.name_ja ?? cv.metadata.name;
406
+ const currentDate = getCurrentDateJa();
407
+ // Filter sections (order is preserved from input)
408
+ const filteredSections = filterSections(cv.sections);
409
+ const sectionsHtml = filteredSections
410
+ .map((section) => {
411
+ return `
412
+ <section>
413
+ <h2>${escapeHtml(section.title)}</h2>
414
+ ${renderSectionContent(section.content, section.id)}
415
+ </section>`;
416
+ })
417
+ .join('\n');
418
+ return `<!DOCTYPE html>
419
+ <html lang="ja">
420
+ <head>
421
+ <meta charset="UTF-8">
422
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
423
+ <title>${escapeHtml(name)} - 職務経歴書</title>
424
+ <style>${styles}</style>
425
+ </head>
426
+ <body>
427
+ <header>
428
+ <div class="document-title">職務経歴書</div>
429
+ <div class="header-info">
430
+ <div class="header-name">${escapeHtml(name)}</div>
431
+ <div class="header-date">${escapeHtml(currentDate)}</div>
432
+ </div>
433
+ </header>
434
+ <main>
435
+ ${sectionsHtml}
436
+ </main>
437
+ </body>
438
+ </html>`;
439
+ }
440
+ //# sourceMappingURL=resume_ja.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume_ja.js","sourceRoot":"","sources":["../../src/generator/resume_ja.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * HTML components for Rirekisho (履歴書)
3
+ */
4
+ import type { HistoryRow, LayoutDimensions, PersonalInfo, TodayDate } from './types.js';
5
+ export interface HeaderProps {
6
+ readonly layout: LayoutDimensions;
7
+ readonly today: TodayDate;
8
+ }
9
+ export declare function buildHeader({ layout, today }: HeaderProps): string;
10
+ export interface NameSectionProps {
11
+ readonly layout: LayoutDimensions;
12
+ readonly info: PersonalInfo;
13
+ }
14
+ export declare function buildNameSection({ layout, info }: NameSectionProps): string;
15
+ export interface BirthGenderRowProps {
16
+ readonly layout: LayoutDimensions;
17
+ readonly info: PersonalInfo;
18
+ }
19
+ export declare function buildBirthGenderRow({ layout, info, }: BirthGenderRowProps): string;
20
+ export interface AddressRowProps {
21
+ readonly layout: LayoutDimensions;
22
+ readonly info: PersonalInfo;
23
+ readonly isPrimary: boolean;
24
+ }
25
+ export declare function buildAddressRow({ layout, info, isPrimary, }: AddressRowProps): string;
26
+ export interface PhotoBoxProps {
27
+ readonly layout: LayoutDimensions;
28
+ /** Base64 encoded photo data URI */
29
+ readonly photoDataUri?: string | undefined;
30
+ }
31
+ export declare function buildPhotoBox({ layout, photoDataUri }: PhotoBoxProps): string;
32
+ export interface HistoryTableProps {
33
+ readonly layout: LayoutDimensions;
34
+ readonly data: readonly HistoryRow[];
35
+ readonly rowCount: number;
36
+ readonly title: string;
37
+ readonly height?: number;
38
+ }
39
+ export declare function buildHistoryTable({ layout, data, rowCount, title, height, }: HistoryTableProps): string;
40
+ export interface LicenseTableProps {
41
+ readonly layout: LayoutDimensions;
42
+ readonly data: readonly HistoryRow[];
43
+ readonly height?: number;
44
+ }
45
+ export declare function buildLicenseTable({ layout, data, height, }: LicenseTableProps): string;
46
+ export interface SectionBoxProps {
47
+ readonly layout: LayoutDimensions;
48
+ readonly title: string;
49
+ readonly subtitle?: string;
50
+ readonly content: string;
51
+ readonly listItems?: readonly string[];
52
+ readonly height?: number;
53
+ readonly minHeight?: number;
54
+ }
55
+ export declare function buildSectionBox({ layout, title, subtitle, content, listItems, height, minHeight, }: SectionBoxProps): string;
56
+ export interface LeftPageProps {
57
+ readonly layout: LayoutDimensions;
58
+ readonly info: PersonalInfo;
59
+ readonly history: readonly HistoryRow[];
60
+ readonly today: TodayDate;
61
+ /** Base64 encoded photo data URI */
62
+ readonly photoDataUri?: string | undefined;
63
+ }
64
+ /**
65
+ * Get adjusted history data for left and right pages
66
+ * If "職歴" is at the last row of left page, leave an empty row instead
67
+ */
68
+ export declare function getAdjustedHistoryData(history: readonly HistoryRow[], leftHistoryRows: number): {
69
+ leftData: readonly HistoryRow[];
70
+ rightData: readonly HistoryRow[];
71
+ shokurekiMovedToRight: boolean;
72
+ };
73
+ export declare function buildLeftPage({ layout, info, history, today, photoDataUri, }: LeftPageProps): string;
74
+ export interface RightPageProps {
75
+ readonly layout: LayoutDimensions;
76
+ readonly history: readonly HistoryRow[];
77
+ readonly license: readonly HistoryRow[];
78
+ readonly motivation: string;
79
+ readonly competencies: readonly string[];
80
+ readonly notes: string;
81
+ }
82
+ export declare function buildRightPage({ layout, history, license, motivation, competencies, notes, }: RightPageProps): string;
83
+ //# sourceMappingURL=components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/generator/rirekisho/components.ts"],"names":[],"mappings":"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"}