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,639 @@
1
+ /**
2
+ * Markdown Parser module
3
+ * Parses Markdown CV files into structured data
4
+ */
5
+ import remarkFrontmatter from 'remark-frontmatter';
6
+ import remarkGfm from 'remark-gfm';
7
+ import remarkParse from 'remark-parse';
8
+ import remarkStringify from 'remark-stringify';
9
+ import { unified } from 'unified';
10
+ import { parse as parseYaml } from 'yaml';
11
+ import { createParseError, failure, success, } from '../types/index.js';
12
+ import { METADATA_FIELDS, loadFromEnv, loadFromFrontmatter, } from '../types/metadata.js';
13
+ import { findSectionByTag, } from '../types/sections.js';
14
+ /**
15
+ * Create markdown processor
16
+ */
17
+ function createProcessor() {
18
+ return unified()
19
+ .use(remarkParse)
20
+ .use(remarkGfm)
21
+ .use(remarkFrontmatter, ['yaml'])
22
+ .use(remarkStringify);
23
+ }
24
+ /**
25
+ * Extract text from mdast node
26
+ */
27
+ function extractText(node) {
28
+ if ('value' in node && typeof node.value === 'string') {
29
+ return node.value;
30
+ }
31
+ if ('children' in node && Array.isArray(node.children)) {
32
+ return node.children.map(extractText).join('');
33
+ }
34
+ return '';
35
+ }
36
+ /**
37
+ * Parse frontmatter delimiter type
38
+ */
39
+ function parseFrontmatterDelimiter(content) {
40
+ const trimmed = content.trimStart();
41
+ if (trimmed.startsWith('---'))
42
+ return '---';
43
+ if (trimmed.startsWith('+++'))
44
+ return '+++';
45
+ return null;
46
+ }
47
+ /**
48
+ * Validate frontmatter delimiters match
49
+ */
50
+ function validateFrontmatterDelimiters(content, errors) {
51
+ const delimiter = parseFrontmatterDelimiter(content);
52
+ if (!delimiter) {
53
+ errors.push(createParseError('Missing frontmatter', 1, 1, 'frontmatter'));
54
+ return false;
55
+ }
56
+ const lines = content.split('\n');
57
+ let foundStart = false;
58
+ let foundEnd = false;
59
+ for (let i = 0; i < lines.length; i++) {
60
+ const line = lines[i]?.trim();
61
+ if (!foundStart && line === delimiter) {
62
+ foundStart = true;
63
+ }
64
+ else if (foundStart && !foundEnd && line === delimiter) {
65
+ foundEnd = true;
66
+ break;
67
+ }
68
+ }
69
+ if (!foundEnd) {
70
+ errors.push(createParseError(`Frontmatter must end with "${delimiter}" to match opening delimiter`, 1, 1, 'frontmatter'));
71
+ return false;
72
+ }
73
+ return true;
74
+ }
75
+ /**
76
+ * Extract and merge metadata from env vars and frontmatter
77
+ */
78
+ function extractMetadata(tree, errors) {
79
+ const yamlNode = tree.children.find((node) => node.type === 'yaml');
80
+ const frontmatter = {};
81
+ if (yamlNode && 'value' in yamlNode) {
82
+ try {
83
+ const parsed = parseYaml(String(yamlNode.value));
84
+ if (typeof parsed === 'object' && parsed !== null) {
85
+ Object.assign(frontmatter, parsed);
86
+ }
87
+ }
88
+ catch (e) {
89
+ const msg = e instanceof Error ? e.message : 'Unknown error';
90
+ errors.push(createParseError(`Invalid YAML frontmatter: ${msg}`, 1, 1, 'frontmatter'));
91
+ return null;
92
+ }
93
+ }
94
+ // Build metadata: env vars first, then frontmatter overrides
95
+ const metadata = {};
96
+ for (const fieldName of Object.keys(METADATA_FIELDS)) {
97
+ // Load from env first
98
+ let value = loadFromEnv(fieldName);
99
+ // Frontmatter overrides
100
+ const fmValue = loadFromFrontmatter(fieldName, frontmatter);
101
+ if (fmValue) {
102
+ value = fmValue;
103
+ }
104
+ if (value) {
105
+ // Parse dob field to Date type
106
+ if (fieldName === 'dob') {
107
+ metadata[fieldName] = parseDateOfBirth(value);
108
+ }
109
+ else if (fieldName === 'gender') {
110
+ metadata[fieldName] = parseGender(value);
111
+ }
112
+ else {
113
+ metadata[fieldName] = value;
114
+ }
115
+ }
116
+ }
117
+ return metadata;
118
+ }
119
+ /**
120
+ * Parse list items
121
+ */
122
+ function parseListItems(listNode) {
123
+ const items = [];
124
+ for (const item of listNode.children) {
125
+ if (item.type === 'listItem' && item.children) {
126
+ const text = item.children.map((child) => extractText(child)).join('');
127
+ items.push(text.trim());
128
+ }
129
+ }
130
+ return items;
131
+ }
132
+ /**
133
+ * Parse markdown table to rows
134
+ */
135
+ function parseTable(tableNode) {
136
+ const rows = [];
137
+ // Skip header row
138
+ for (let i = 1; i < tableNode.children.length; i++) {
139
+ const row = tableNode.children[i];
140
+ if (row?.type === 'tableRow' && row.children.length >= 3) {
141
+ const cells = row.children;
142
+ rows.push({
143
+ year: cells[0] ? extractText(cells[0]).trim() : '',
144
+ month: cells[1] ? extractText(cells[1]).trim() : '',
145
+ content: cells[2] ? extractText(cells[2]).trim() : '',
146
+ });
147
+ }
148
+ }
149
+ return rows;
150
+ }
151
+ /**
152
+ * Safely convert unknown value to string
153
+ */
154
+ function safeString(value) {
155
+ if (typeof value === 'string')
156
+ return value;
157
+ if (typeof value === 'number' || typeof value === 'boolean')
158
+ return String(value);
159
+ return '';
160
+ }
161
+ /**
162
+ * Safely convert unknown value to optional string
163
+ */
164
+ function safeOptionalString(value) {
165
+ if (value === undefined || value === null)
166
+ return undefined;
167
+ return safeString(value);
168
+ }
169
+ /**
170
+ * Parse date of birth string to Date object
171
+ * Supports formats: YYYY-MM-DD, YYYY/MM/DD, YYYY年MM月DD日, MM/DD/YYYY
172
+ */
173
+ function parseDateOfBirth(str) {
174
+ if (!str)
175
+ return undefined;
176
+ const s = str.trim();
177
+ // YYYY-MM-DD or YYYY/MM/DD
178
+ let m = s.match(/^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/);
179
+ if (m) {
180
+ return new Date(parseInt(m[1], 10), parseInt(m[2], 10) - 1, parseInt(m[3], 10));
181
+ }
182
+ // YYYY年MM月DD日
183
+ m = s.match(/^(\d{4})年(\d{1,2})月(\d{1,2})日$/);
184
+ if (m) {
185
+ return new Date(parseInt(m[1], 10), parseInt(m[2], 10) - 1, parseInt(m[3], 10));
186
+ }
187
+ // MM/DD/YYYY or MM-DD-YYYY
188
+ m = s.match(/^(\d{1,2})[-/](\d{1,2})[-/](\d{4})$/);
189
+ if (m) {
190
+ return new Date(parseInt(m[3], 10), parseInt(m[1], 10) - 1, parseInt(m[2], 10));
191
+ }
192
+ return undefined;
193
+ }
194
+ /**
195
+ * Parse year-month string to Date object (day defaults to 1)
196
+ * Supports formats: YYYY-MM, YYYY/MM, YYYY年MM月, YYYY (year only)
197
+ */
198
+ function parseYearMonth(str) {
199
+ if (!str)
200
+ return undefined;
201
+ const s = str.trim();
202
+ // YYYY-MM or YYYY/MM
203
+ let m = s.match(/^(\d{4})[-/](\d{1,2})$/);
204
+ if (m) {
205
+ return new Date(parseInt(m[1], 10), parseInt(m[2], 10) - 1, 1);
206
+ }
207
+ // YYYY年MM月
208
+ m = s.match(/^(\d{4})年(\d{1,2})月/);
209
+ if (m) {
210
+ return new Date(parseInt(m[1], 10), parseInt(m[2], 10) - 1, 1);
211
+ }
212
+ // YYYY only
213
+ m = s.match(/^(\d{4})$/);
214
+ if (m) {
215
+ return new Date(parseInt(m[1], 10), 0, 1);
216
+ }
217
+ return undefined;
218
+ }
219
+ /**
220
+ * Check if string represents "present" or "現在"
221
+ */
222
+ function isPresent(str) {
223
+ if (!str)
224
+ return false;
225
+ const s = str.trim().toLowerCase();
226
+ return s === 'present' || s === '現在';
227
+ }
228
+ /**
229
+ * Parse end date which can be a date or "present"/"現在"
230
+ */
231
+ function parseEndDate(str) {
232
+ if (!str)
233
+ return undefined;
234
+ if (isPresent(str))
235
+ return 'present';
236
+ return parseYearMonth(str);
237
+ }
238
+ /**
239
+ * Parse gender string to Gender type
240
+ * Supports: male/m/男, female/f/女, other
241
+ */
242
+ function parseGender(str) {
243
+ if (!str)
244
+ return undefined;
245
+ const s = str.trim().toLowerCase();
246
+ if (s === 'male' || s === 'm' || s === '男')
247
+ return 'male';
248
+ if (s === 'female' || s === 'f' || s === '女')
249
+ return 'female';
250
+ if (s === 'other')
251
+ return 'other';
252
+ return undefined;
253
+ }
254
+ /**
255
+ * Parse summary which can be a string or an array of strings
256
+ */
257
+ function parseSummary(value) {
258
+ if (!value)
259
+ return undefined;
260
+ if (typeof value === 'string')
261
+ return [value];
262
+ if (Array.isArray(value))
263
+ return value.map((s) => safeString(s));
264
+ return undefined;
265
+ }
266
+ /**
267
+ * Parse resume:education code block
268
+ */
269
+ function parseEducationBlock(code) {
270
+ try {
271
+ const parsed = parseYaml(code);
272
+ // Handle both single object and array
273
+ const items = Array.isArray(parsed) ? parsed : [parsed];
274
+ return items.map((item) => {
275
+ const obj = item;
276
+ return {
277
+ school: safeString(obj.school),
278
+ degree: safeOptionalString(obj.degree),
279
+ location: safeOptionalString(obj.location),
280
+ start: parseYearMonth(safeOptionalString(obj.start)),
281
+ end: parseYearMonth(safeOptionalString(obj.end)),
282
+ details: Array.isArray(obj.details) ? obj.details.map((d) => safeString(d)) : undefined,
283
+ };
284
+ });
285
+ }
286
+ catch {
287
+ return [];
288
+ }
289
+ }
290
+ /**
291
+ * Parse resume:experience code block
292
+ */
293
+ function parseExperienceBlock(code) {
294
+ try {
295
+ const parsed = parseYaml(code);
296
+ // Handle both single object and array
297
+ const items = Array.isArray(parsed) ? parsed : [parsed];
298
+ return items.map((item) => {
299
+ const obj = item;
300
+ const roles = [];
301
+ // Support both nested roles array and flat role definition
302
+ if (Array.isArray(obj.roles)) {
303
+ for (const roleItem of obj.roles) {
304
+ const role = roleItem;
305
+ const projects = [];
306
+ if (Array.isArray(role.projects)) {
307
+ for (const projItem of role.projects) {
308
+ const proj = projItem;
309
+ projects.push({
310
+ name: safeString(proj.name),
311
+ start: parseYearMonth(safeOptionalString(proj.start)),
312
+ end: parseYearMonth(safeOptionalString(proj.end)),
313
+ bullets: Array.isArray(proj.bullets)
314
+ ? proj.bullets.map((b) => safeString(b))
315
+ : undefined,
316
+ });
317
+ }
318
+ }
319
+ roles.push({
320
+ title: safeString(role.title),
321
+ team: safeOptionalString(role.team),
322
+ start: parseYearMonth(safeOptionalString(role.start)),
323
+ end: parseEndDate(safeOptionalString(role.end)),
324
+ summary: parseSummary(role.summary),
325
+ highlights: Array.isArray(role.highlights)
326
+ ? role.highlights.map((h) => safeString(h))
327
+ : undefined,
328
+ projects: projects.length > 0 ? projects : undefined,
329
+ });
330
+ }
331
+ }
332
+ else if (obj.role) {
333
+ // Flat role definition (role, team, start, end at top level)
334
+ const projects = [];
335
+ if (Array.isArray(obj.projects)) {
336
+ for (const projItem of obj.projects) {
337
+ const proj = projItem;
338
+ projects.push({
339
+ name: safeString(proj.name),
340
+ start: parseYearMonth(safeOptionalString(proj.start)),
341
+ end: parseYearMonth(safeOptionalString(proj.end)),
342
+ bullets: Array.isArray(proj.bullets)
343
+ ? proj.bullets.map((b) => safeString(b))
344
+ : undefined,
345
+ });
346
+ }
347
+ }
348
+ roles.push({
349
+ title: safeString(obj.role),
350
+ team: safeOptionalString(obj.team),
351
+ start: parseYearMonth(safeOptionalString(obj.start)),
352
+ end: parseEndDate(safeOptionalString(obj.end)),
353
+ summary: parseSummary(obj.summary),
354
+ highlights: Array.isArray(obj.highlights)
355
+ ? obj.highlights.map((h) => safeString(h))
356
+ : undefined,
357
+ projects: projects.length > 0 ? projects : undefined,
358
+ });
359
+ }
360
+ return {
361
+ company: safeString(obj.company),
362
+ location: safeOptionalString(obj.location),
363
+ roles,
364
+ };
365
+ });
366
+ }
367
+ catch {
368
+ return [];
369
+ }
370
+ }
371
+ /**
372
+ * Parse resume:certifications code block
373
+ */
374
+ function parseCertificationsBlock(code) {
375
+ try {
376
+ const parsed = parseYaml(code);
377
+ // Handle both single object and array
378
+ const items = Array.isArray(parsed) ? parsed : [parsed];
379
+ return items.map((item) => {
380
+ const obj = item;
381
+ return {
382
+ name: safeString(obj.name),
383
+ issuer: safeOptionalString(obj.issuer),
384
+ date: parseYearMonth(safeOptionalString(obj.date)),
385
+ url: safeOptionalString(obj.url),
386
+ };
387
+ });
388
+ }
389
+ catch {
390
+ return [];
391
+ }
392
+ }
393
+ function parseSkillsBlock(code) {
394
+ try {
395
+ const parsed = parseYaml(code);
396
+ // Check if it's the new format with columns and items at top level
397
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
398
+ const obj = parsed;
399
+ // Format 1: Simple items list (grid format)
400
+ if (Array.isArray(obj.items) && obj.items.every((i) => typeof i === 'string')) {
401
+ const columns = typeof obj.columns === 'number' ? obj.columns : undefined;
402
+ const items = obj.items.map((i) => safeString(i));
403
+ // Convert to single SkillEntry with empty category
404
+ return {
405
+ entries: [{ category: '', items, description: undefined, level: undefined }],
406
+ columns,
407
+ format: 'grid',
408
+ };
409
+ }
410
+ // Format 2 & 3: Categorized skills
411
+ if (Array.isArray(obj.categories)) {
412
+ const columns = typeof obj.columns === 'number' ? obj.columns : undefined;
413
+ const entries = obj.categories.map((cat) => {
414
+ const catObj = cat;
415
+ return {
416
+ category: safeString(catObj.category),
417
+ items: Array.isArray(catObj.items) ? catObj.items.map((i) => safeString(i)) : [],
418
+ description: safeOptionalString(catObj.description),
419
+ level: safeOptionalString(catObj.level),
420
+ };
421
+ });
422
+ return { entries, columns, format: 'categorized' };
423
+ }
424
+ }
425
+ // Legacy format: array of { category, items, level }
426
+ const items = Array.isArray(parsed) ? parsed : [parsed];
427
+ const entries = items.map((item) => {
428
+ const obj = item;
429
+ return {
430
+ category: safeString(obj.category),
431
+ items: Array.isArray(obj.items) ? obj.items.map((i) => safeString(i)) : [],
432
+ description: safeOptionalString(obj.description),
433
+ level: safeOptionalString(obj.level),
434
+ };
435
+ });
436
+ return { entries, columns: undefined, format: undefined };
437
+ }
438
+ catch {
439
+ return { entries: [], columns: undefined, format: undefined };
440
+ }
441
+ }
442
+ /**
443
+ * Parse resume:competencies code block
444
+ */
445
+ function parseCompetenciesBlock(code) {
446
+ try {
447
+ const parsed = parseYaml(code);
448
+ // Handle both single object and array
449
+ const items = Array.isArray(parsed) ? parsed : [parsed];
450
+ return items.map((item) => {
451
+ const obj = item;
452
+ return {
453
+ header: safeString(obj.header),
454
+ description: safeString(obj.description),
455
+ };
456
+ });
457
+ }
458
+ catch {
459
+ return [];
460
+ }
461
+ }
462
+ /**
463
+ * Parse resume:languages code block
464
+ */
465
+ function parseLanguagesBlock(code) {
466
+ try {
467
+ const parsed = parseYaml(code);
468
+ // Handle both single object and array
469
+ const items = Array.isArray(parsed) ? parsed : [parsed];
470
+ return items.map((item) => {
471
+ const obj = item;
472
+ return {
473
+ language: safeString(obj.language),
474
+ level: safeOptionalString(obj.level),
475
+ };
476
+ });
477
+ }
478
+ catch {
479
+ return [];
480
+ }
481
+ }
482
+ /**
483
+ * Parse section content from nodes
484
+ */
485
+ function parseSectionContent(nodes) {
486
+ // Collect all code blocks and merge entries by type
487
+ const educationEntries = [];
488
+ const experienceEntries = [];
489
+ const certificationEntries = [];
490
+ const skillEntries = [];
491
+ const competencyEntries = [];
492
+ const languageEntries = [];
493
+ let skillsColumns = undefined;
494
+ let skillsFormat = undefined;
495
+ for (const node of nodes) {
496
+ if (node.type === 'code') {
497
+ const codeNode = node;
498
+ if (codeNode.lang === 'resume:education') {
499
+ educationEntries.push(...parseEducationBlock(codeNode.value));
500
+ }
501
+ else if (codeNode.lang === 'resume:experience') {
502
+ experienceEntries.push(...parseExperienceBlock(codeNode.value));
503
+ }
504
+ else if (codeNode.lang === 'resume:certifications') {
505
+ certificationEntries.push(...parseCertificationsBlock(codeNode.value));
506
+ }
507
+ else if (codeNode.lang === 'resume:skills') {
508
+ const result = parseSkillsBlock(codeNode.value);
509
+ skillEntries.push(...result.entries);
510
+ if (result.columns !== undefined) {
511
+ skillsColumns = result.columns;
512
+ }
513
+ if (result.format !== undefined) {
514
+ skillsFormat = result.format;
515
+ }
516
+ }
517
+ else if (codeNode.lang === 'resume:competencies') {
518
+ competencyEntries.push(...parseCompetenciesBlock(codeNode.value));
519
+ }
520
+ else if (codeNode.lang === 'resume:languages') {
521
+ languageEntries.push(...parseLanguagesBlock(codeNode.value));
522
+ }
523
+ }
524
+ }
525
+ // Return merged entries if any structured blocks found
526
+ if (educationEntries.length > 0) {
527
+ return { type: 'education', entries: educationEntries };
528
+ }
529
+ if (experienceEntries.length > 0) {
530
+ return { type: 'experience', entries: experienceEntries };
531
+ }
532
+ if (certificationEntries.length > 0) {
533
+ return { type: 'certifications', entries: certificationEntries };
534
+ }
535
+ if (skillEntries.length > 0) {
536
+ return { type: 'skills', entries: skillEntries, options: { columns: skillsColumns, format: skillsFormat } };
537
+ }
538
+ if (competencyEntries.length > 0) {
539
+ return { type: 'competencies', entries: competencyEntries };
540
+ }
541
+ if (languageEntries.length > 0) {
542
+ return { type: 'languages', entries: languageEntries };
543
+ }
544
+ // Check for tables
545
+ for (const node of nodes) {
546
+ if (node.type === 'table') {
547
+ const rows = parseTable(node);
548
+ return { type: 'table', rows };
549
+ }
550
+ }
551
+ // Check for lists
552
+ for (const node of nodes) {
553
+ if (node.type === 'list') {
554
+ const items = parseListItems(node);
555
+ return { type: 'list', items };
556
+ }
557
+ }
558
+ // Default to text
559
+ const text = nodes
560
+ .filter((n) => n.type === 'paragraph')
561
+ .map((n) => extractText(n))
562
+ .join('\n\n');
563
+ return { type: 'text', text };
564
+ }
565
+ /**
566
+ * Parse sections from AST
567
+ */
568
+ function parseSections(tree) {
569
+ const sections = [];
570
+ const contentNodes = tree.children.filter((node) => node.type !== 'yaml');
571
+ let currentTitle = null;
572
+ let currentNodes = [];
573
+ for (const node of contentNodes) {
574
+ if (node.type === 'heading' && node.depth === 1) {
575
+ // Save previous section
576
+ if (currentTitle !== null) {
577
+ const sectionDef = findSectionByTag(currentTitle);
578
+ if (sectionDef) {
579
+ sections.push({
580
+ id: sectionDef.id,
581
+ title: currentTitle,
582
+ content: parseSectionContent(currentNodes),
583
+ });
584
+ }
585
+ }
586
+ // Start new section
587
+ currentTitle = node.children.map((c) => extractText(c)).join('');
588
+ currentNodes = [];
589
+ }
590
+ else if (currentTitle !== null) {
591
+ currentNodes.push(node);
592
+ }
593
+ }
594
+ // Don't forget last section
595
+ if (currentTitle !== null) {
596
+ const sectionDef = findSectionByTag(currentTitle);
597
+ if (sectionDef) {
598
+ sections.push({
599
+ id: sectionDef.id,
600
+ title: currentTitle,
601
+ content: parseSectionContent(currentNodes),
602
+ });
603
+ }
604
+ }
605
+ return sections;
606
+ }
607
+ /**
608
+ * Parse markdown content
609
+ */
610
+ export function parseMarkdown(markdown) {
611
+ const errors = [];
612
+ // Validate frontmatter delimiters
613
+ if (!validateFrontmatterDelimiters(markdown, errors)) {
614
+ return failure(errors);
615
+ }
616
+ try {
617
+ const processor = createProcessor();
618
+ const tree = processor.parse(markdown);
619
+ // Extract metadata
620
+ const metadata = extractMetadata(tree, errors);
621
+ if (!metadata) {
622
+ return failure(errors);
623
+ }
624
+ // Parse sections
625
+ const sections = parseSections(tree);
626
+ return success({
627
+ metadata,
628
+ sections,
629
+ rawContent: markdown,
630
+ });
631
+ }
632
+ catch (e) {
633
+ const msg = e instanceof Error ? e.message : 'Unknown error';
634
+ errors.push(createParseError(`Failed to parse markdown: ${msg}`, 1, 1, 'markdown'));
635
+ return failure(errors);
636
+ }
637
+ }
638
+ export default parseMarkdown;
639
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"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"}