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.
- package/CHANGELOG.md +19 -0
- package/LICENSE +674 -0
- package/README.md +219 -0
- package/dist/bin.d.ts +6 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +10 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli/index.d.ts +50 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +278 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/generator/index.d.ts +36 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +302 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/resume_en.d.ts +22 -0
- package/dist/generator/resume_en.d.ts.map +1 -0
- package/dist/generator/resume_en.js +524 -0
- package/dist/generator/resume_en.js.map +1 -0
- package/dist/generator/resume_ja.d.ts +22 -0
- package/dist/generator/resume_ja.d.ts.map +1 -0
- package/dist/generator/resume_ja.js +440 -0
- package/dist/generator/resume_ja.js.map +1 -0
- package/dist/generator/rirekisho/components.d.ts +83 -0
- package/dist/generator/rirekisho/components.d.ts.map +1 -0
- package/dist/generator/rirekisho/components.js +405 -0
- package/dist/generator/rirekisho/components.js.map +1 -0
- package/dist/generator/rirekisho/data.d.ts +18 -0
- package/dist/generator/rirekisho/data.d.ts.map +1 -0
- package/dist/generator/rirekisho/data.js +274 -0
- package/dist/generator/rirekisho/data.js.map +1 -0
- package/dist/generator/rirekisho/index.d.ts +20 -0
- package/dist/generator/rirekisho/index.d.ts.map +1 -0
- package/dist/generator/rirekisho/index.js +67 -0
- package/dist/generator/rirekisho/index.js.map +1 -0
- package/dist/generator/rirekisho/layout.d.ts +20 -0
- package/dist/generator/rirekisho/layout.d.ts.map +1 -0
- package/dist/generator/rirekisho/layout.js +354 -0
- package/dist/generator/rirekisho/layout.js.map +1 -0
- package/dist/generator/rirekisho/styles.d.ts +9 -0
- package/dist/generator/rirekisho/styles.d.ts.map +1 -0
- package/dist/generator/rirekisho/styles.js +362 -0
- package/dist/generator/rirekisho/styles.js.map +1 -0
- package/dist/generator/rirekisho/types.d.ts +163 -0
- package/dist/generator/rirekisho/types.d.ts.map +1 -0
- package/dist/generator/rirekisho/types.js +80 -0
- package/dist/generator/rirekisho/types.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/index.d.ts +21 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +639 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/types/config.d.ts +64 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +5 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/errors.d.ts +78 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +146 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/metadata.d.ts +55 -0
- package/dist/types/metadata.d.ts.map +1 -0
- package/dist/types/metadata.js +136 -0
- package/dist/types/metadata.js.map +1 -0
- package/dist/types/result.d.ts +50 -0
- package/dist/types/result.d.ts.map +1 -0
- package/dist/types/result.js +74 -0
- package/dist/types/result.js.map +1 -0
- package/dist/types/sections.d.ts +168 -0
- package/dist/types/sections.d.ts.map +1 -0
- package/dist/types/sections.js +122 -0
- package/dist/types/sections.js.map +1 -0
- package/dist/validator/index.d.ts +20 -0
- package/dist/validator/index.d.ts.map +1 -0
- package/dist/validator/index.js +67 -0
- package/dist/validator/index.js.map +1 -0
- package/examples/example-cv-en.md +77 -0
- package/examples/example-cv-ja.md +116 -0
- package/examples/sample-photo.png +0 -0
- 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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"}
|