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,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data extraction and transformation for Rirekisho (履歴書)
|
|
3
|
+
*/
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Utility Functions
|
|
6
|
+
// ============================================================================
|
|
7
|
+
function escapeHtml(text) {
|
|
8
|
+
return text
|
|
9
|
+
.replace(/&/g, '&')
|
|
10
|
+
.replace(/</g, '<')
|
|
11
|
+
.replace(/>/g, '>')
|
|
12
|
+
.replace(/"/g, '"')
|
|
13
|
+
.replace(/'/g, ''');
|
|
14
|
+
}
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// Date Functions
|
|
17
|
+
// ============================================================================
|
|
18
|
+
function calculateAge(dob, refDate) {
|
|
19
|
+
let age = refDate.getFullYear() - dob.getFullYear();
|
|
20
|
+
const monthDiff = refDate.getMonth() - dob.getMonth();
|
|
21
|
+
if (monthDiff < 0 || (monthDiff === 0 && refDate.getDate() < dob.getDate())) {
|
|
22
|
+
age--;
|
|
23
|
+
}
|
|
24
|
+
return age;
|
|
25
|
+
}
|
|
26
|
+
function formatDateOfBirth(dob) {
|
|
27
|
+
return {
|
|
28
|
+
year: String(dob.getFullYear()),
|
|
29
|
+
month: String(dob.getMonth() + 1),
|
|
30
|
+
day: String(dob.getDate()),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function formatYearMonth(date) {
|
|
34
|
+
return {
|
|
35
|
+
year: String(date.getFullYear()),
|
|
36
|
+
month: String(date.getMonth() + 1),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function getTodayDate() {
|
|
40
|
+
const today = new Date();
|
|
41
|
+
return {
|
|
42
|
+
year: today.getFullYear(),
|
|
43
|
+
month: today.getMonth() + 1,
|
|
44
|
+
day: today.getDate(),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// ============================================================================
|
|
48
|
+
// Personal Information Extraction
|
|
49
|
+
// ============================================================================
|
|
50
|
+
export function extractPersonalInfo(metadata, today) {
|
|
51
|
+
const genderDisplay = metadata.gender === 'male'
|
|
52
|
+
? '男'
|
|
53
|
+
: metadata.gender === 'female'
|
|
54
|
+
? '女'
|
|
55
|
+
: '';
|
|
56
|
+
return {
|
|
57
|
+
name: escapeHtml(metadata.name_ja ?? metadata.name),
|
|
58
|
+
furigana: escapeHtml(metadata.name_furigana ?? ''),
|
|
59
|
+
phone: metadata.phone_number ? escapeHtml(metadata.phone_number) : '',
|
|
60
|
+
phone2: metadata.phone_number2 ? escapeHtml(metadata.phone_number2) : '',
|
|
61
|
+
address: metadata.home_address ? escapeHtml(metadata.home_address) : '',
|
|
62
|
+
addressFurigana: escapeHtml(metadata.home_address_furigana ?? ''),
|
|
63
|
+
postCode: escapeHtml(metadata.post_code ?? ''),
|
|
64
|
+
address2: escapeHtml(metadata.home_address2 ?? ''),
|
|
65
|
+
address2Furigana: escapeHtml(metadata.home_address2_furigana ?? ''),
|
|
66
|
+
postCode2: escapeHtml(metadata.post_code2 ?? ''),
|
|
67
|
+
email: escapeHtml(metadata.email_address),
|
|
68
|
+
email2: escapeHtml(metadata.email_address2 ?? ''),
|
|
69
|
+
gender: genderDisplay,
|
|
70
|
+
dob: metadata.dob ? formatDateOfBirth(metadata.dob) : null,
|
|
71
|
+
age: metadata.dob ? calculateAge(metadata.dob, today) : null,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
// ============================================================================
|
|
75
|
+
// Table Row Extraction
|
|
76
|
+
// ============================================================================
|
|
77
|
+
function extractTableRows(content) {
|
|
78
|
+
if (content.type === 'table')
|
|
79
|
+
return [...content.rows];
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
function educationToTableRows(entries) {
|
|
83
|
+
const rows = [];
|
|
84
|
+
for (const entry of entries) {
|
|
85
|
+
if (entry.start) {
|
|
86
|
+
const formatted = formatYearMonth(entry.start);
|
|
87
|
+
rows.push({
|
|
88
|
+
year: formatted.year,
|
|
89
|
+
month: formatted.month,
|
|
90
|
+
content: `${entry.school}${entry.degree ? ' ' + entry.degree : ''} 入学`,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if (entry.end) {
|
|
94
|
+
const formatted = formatYearMonth(entry.end);
|
|
95
|
+
const degree = entry.degree ?? '';
|
|
96
|
+
const isGraduateSchool = degree.includes('修士') || degree.includes('博士');
|
|
97
|
+
const suffix = isGraduateSchool ? '修了' : '卒業';
|
|
98
|
+
rows.push({
|
|
99
|
+
year: formatted.year,
|
|
100
|
+
month: formatted.month,
|
|
101
|
+
content: `${entry.school}${entry.degree ? ' ' + entry.degree : ''} ${suffix}`,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return rows;
|
|
106
|
+
}
|
|
107
|
+
function experienceToTableRows(entries) {
|
|
108
|
+
const rows = [];
|
|
109
|
+
for (const entry of entries) {
|
|
110
|
+
for (const role of entry.roles) {
|
|
111
|
+
if (role.start) {
|
|
112
|
+
const formatted = formatYearMonth(role.start);
|
|
113
|
+
rows.push({
|
|
114
|
+
year: formatted.year,
|
|
115
|
+
month: formatted.month,
|
|
116
|
+
content: `${entry.company} 入社`,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
if (role.end && role.end !== 'present') {
|
|
120
|
+
const formatted = formatYearMonth(role.end);
|
|
121
|
+
rows.push({
|
|
122
|
+
year: formatted.year,
|
|
123
|
+
month: formatted.month,
|
|
124
|
+
content: `${entry.company} 退社`,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return rows;
|
|
130
|
+
}
|
|
131
|
+
function certificationsToTableRows(entries) {
|
|
132
|
+
const rows = [];
|
|
133
|
+
for (const entry of entries) {
|
|
134
|
+
if (entry.date) {
|
|
135
|
+
const formatted = formatYearMonth(entry.date);
|
|
136
|
+
rows.push({
|
|
137
|
+
year: formatted.year,
|
|
138
|
+
month: formatted.month,
|
|
139
|
+
content: entry.name,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
rows.push({ year: '', month: '', content: entry.name });
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return rows;
|
|
147
|
+
}
|
|
148
|
+
function sortTableRows(rows, order) {
|
|
149
|
+
return [...rows].sort((a, b) => {
|
|
150
|
+
const yearA = parseInt(a.year, 10) || 0;
|
|
151
|
+
const monthA = parseInt(a.month, 10) || 0;
|
|
152
|
+
const yearB = parseInt(b.year, 10) || 0;
|
|
153
|
+
const monthB = parseInt(b.month, 10) || 0;
|
|
154
|
+
const dateA = yearA * 100 + monthA;
|
|
155
|
+
const dateB = yearB * 100 + monthB;
|
|
156
|
+
return order === 'asc' ? dateA - dateB : dateB - dateA;
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
// ============================================================================
|
|
160
|
+
// History Data Building
|
|
161
|
+
// ============================================================================
|
|
162
|
+
export function buildHistoryData(sections, order) {
|
|
163
|
+
const rows = [];
|
|
164
|
+
const edu = sections.find((s) => s.id === 'education');
|
|
165
|
+
if (edu) {
|
|
166
|
+
rows.push(['', '', '学歴']);
|
|
167
|
+
let tableRows = edu.content.type === 'education'
|
|
168
|
+
? educationToTableRows(edu.content.entries)
|
|
169
|
+
: extractTableRows(edu.content);
|
|
170
|
+
tableRows = sortTableRows(tableRows, order);
|
|
171
|
+
for (const row of tableRows) {
|
|
172
|
+
rows.push([row.year, row.month, row.content]);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
const work = sections.find((s) => s.id === 'experience');
|
|
176
|
+
if (work) {
|
|
177
|
+
rows.push(['', '', '職歴']);
|
|
178
|
+
let tableRows = work.content.type === 'experience'
|
|
179
|
+
? experienceToTableRows(work.content.entries)
|
|
180
|
+
: extractTableRows(work.content);
|
|
181
|
+
tableRows = sortTableRows(tableRows, order);
|
|
182
|
+
for (const row of tableRows) {
|
|
183
|
+
rows.push([row.year, row.month, row.content]);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (!rows.some((r) => r[2] === '現在に至る'))
|
|
187
|
+
rows.push(['', '', '現在に至る']);
|
|
188
|
+
if (!rows.some((r) => r[2] === '以上'))
|
|
189
|
+
rows.push(['', '', '以上']);
|
|
190
|
+
return rows;
|
|
191
|
+
}
|
|
192
|
+
export function buildLicenseData(sections, order) {
|
|
193
|
+
const sec = sections.find((s) => s.id === 'certifications');
|
|
194
|
+
if (!sec)
|
|
195
|
+
return [];
|
|
196
|
+
let tableRows = sec.content.type === 'certifications'
|
|
197
|
+
? certificationsToTableRows(sec.content.entries)
|
|
198
|
+
: extractTableRows(sec.content);
|
|
199
|
+
tableRows = sortTableRows(tableRows, order);
|
|
200
|
+
return tableRows.map((row) => [row.year, row.month, row.content]);
|
|
201
|
+
}
|
|
202
|
+
export function getSectionText(sections, ids) {
|
|
203
|
+
for (const id of ids) {
|
|
204
|
+
const sec = sections.find((s) => s.id === id);
|
|
205
|
+
if (sec && sec.content.type === 'text') {
|
|
206
|
+
return escapeHtml(sec.content.text);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return '';
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Get list items from a section (for competencies)
|
|
213
|
+
*/
|
|
214
|
+
export function getSectionList(sections, ids) {
|
|
215
|
+
for (const id of ids) {
|
|
216
|
+
const sec = sections.find((s) => s.id === id);
|
|
217
|
+
if (sec) {
|
|
218
|
+
if (sec.content.type === 'list') {
|
|
219
|
+
return sec.content.items.map((item) => escapeHtml(item));
|
|
220
|
+
}
|
|
221
|
+
if (sec.content.type === 'competencies') {
|
|
222
|
+
return sec.content.entries.map((entry) => escapeHtml(`${entry.header}: ${entry.description}`));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return [];
|
|
227
|
+
}
|
|
228
|
+
// ============================================================================
|
|
229
|
+
// Data Counting
|
|
230
|
+
// ============================================================================
|
|
231
|
+
export function countDataRows(sections) {
|
|
232
|
+
// Count history rows (education + experience entries)
|
|
233
|
+
let historyDataRows = 0;
|
|
234
|
+
const edu = sections.find((s) => s.id === 'education');
|
|
235
|
+
if (edu) {
|
|
236
|
+
if (edu.content.type === 'education') {
|
|
237
|
+
// Each education entry generates 2 rows (入学 + 卒業/修了)
|
|
238
|
+
historyDataRows += edu.content.entries.length * 2;
|
|
239
|
+
}
|
|
240
|
+
else if (edu.content.type === 'table') {
|
|
241
|
+
historyDataRows += edu.content.rows.length;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
const work = sections.find((s) => s.id === 'experience');
|
|
245
|
+
if (work) {
|
|
246
|
+
if (work.content.type === 'experience') {
|
|
247
|
+
// Each role generates 1-2 rows (入社 + optional 退職)
|
|
248
|
+
for (const entry of work.content.entries) {
|
|
249
|
+
for (const role of entry.roles) {
|
|
250
|
+
historyDataRows += 1; // 入社
|
|
251
|
+
if (role.end && role.end !== 'present') {
|
|
252
|
+
historyDataRows += 1; // 退職
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
else if (work.content.type === 'table') {
|
|
258
|
+
historyDataRows += work.content.rows.length;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// Count license rows
|
|
262
|
+
let licenseDataRows = 0;
|
|
263
|
+
const cert = sections.find((s) => s.id === 'certifications');
|
|
264
|
+
if (cert) {
|
|
265
|
+
if (cert.content.type === 'certifications') {
|
|
266
|
+
licenseDataRows = cert.content.entries.length;
|
|
267
|
+
}
|
|
268
|
+
else if (cert.content.type === 'table') {
|
|
269
|
+
licenseDataRows = cert.content.rows.length;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return { historyDataRows, licenseDataRows };
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../../src/generator/rirekisho/data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rirekisho (履歴書) Generator
|
|
3
|
+
* Based on 厚生労働省 履歴書様式例 format
|
|
4
|
+
*
|
|
5
|
+
* This module generates a two-page rirekisho in landscape orientation.
|
|
6
|
+
* The layout is calculated to ensure the bottom edges of the left and right
|
|
7
|
+
* pages align perfectly.
|
|
8
|
+
*/
|
|
9
|
+
import type { RirekishoInput, RirekishoOptions } from './types.js';
|
|
10
|
+
export type { RirekishoInput, RirekishoOptions } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Generate HTML for a rirekisho document
|
|
13
|
+
*
|
|
14
|
+
* @param input - The input data containing metadata and sections
|
|
15
|
+
* @param options - Generation options including paper size and chronological order
|
|
16
|
+
* @returns Complete HTML document string
|
|
17
|
+
* @throws Error if the data cannot fit on the page
|
|
18
|
+
*/
|
|
19
|
+
export declare function generateRirekishoHTML(input: RirekishoInput, options: RirekishoOptions): string;
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generator/rirekisho/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnE;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAkDR"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rirekisho (履歴書) Generator
|
|
3
|
+
* Based on 厚生労働省 履歴書様式例 format
|
|
4
|
+
*
|
|
5
|
+
* This module generates a two-page rirekisho in landscape orientation.
|
|
6
|
+
* The layout is calculated to ensure the bottom edges of the left and right
|
|
7
|
+
* pages align perfectly.
|
|
8
|
+
*/
|
|
9
|
+
import { buildLeftPage, buildRightPage } from './components.js';
|
|
10
|
+
import { buildHistoryData, buildLicenseData, countDataRows, extractPersonalInfo, getSectionList, getSectionText, getTodayDate, } from './data.js';
|
|
11
|
+
import { calculateLayout, validateLayout } from './layout.js';
|
|
12
|
+
import { generateCSS } from './styles.js';
|
|
13
|
+
/**
|
|
14
|
+
* Generate HTML for a rirekisho document
|
|
15
|
+
*
|
|
16
|
+
* @param input - The input data containing metadata and sections
|
|
17
|
+
* @param options - Generation options including paper size and chronological order
|
|
18
|
+
* @returns Complete HTML document string
|
|
19
|
+
* @throws Error if the data cannot fit on the page
|
|
20
|
+
*/
|
|
21
|
+
export function generateRirekishoHTML(input, options) {
|
|
22
|
+
const order = options.chronologicalOrder ?? 'asc';
|
|
23
|
+
const hideMotivation = options.hideMotivation ?? false;
|
|
24
|
+
const today = new Date();
|
|
25
|
+
const todayDate = getTodayDate();
|
|
26
|
+
// Count data rows for layout calculation
|
|
27
|
+
const dataCounts = countDataRows(input.sections);
|
|
28
|
+
// Calculate layout dimensions
|
|
29
|
+
const layout = calculateLayout({
|
|
30
|
+
paperSize: options.paperSize,
|
|
31
|
+
hideMotivation,
|
|
32
|
+
dataCounts,
|
|
33
|
+
});
|
|
34
|
+
// Validate layout can fit the data
|
|
35
|
+
const validationError = validateLayout(layout);
|
|
36
|
+
if (validationError) {
|
|
37
|
+
throw new Error(validationError);
|
|
38
|
+
}
|
|
39
|
+
// Extract data
|
|
40
|
+
const info = extractPersonalInfo(input.metadata, today);
|
|
41
|
+
const history = buildHistoryData(input.sections, order);
|
|
42
|
+
const license = buildLicenseData(input.sections, order);
|
|
43
|
+
const motivation = getSectionText(input.sections, ['motivation']);
|
|
44
|
+
const competencies = getSectionList(input.sections, ['competencies']);
|
|
45
|
+
const notes = getSectionText(input.sections, ['notes']);
|
|
46
|
+
// Generate HTML with full-width footer
|
|
47
|
+
return `<!DOCTYPE html>
|
|
48
|
+
<html lang="ja">
|
|
49
|
+
<head>
|
|
50
|
+
<meta charset="UTF-8">
|
|
51
|
+
<title>${info.name} - 履歴書</title>
|
|
52
|
+
<style>${generateCSS(layout)}</style>
|
|
53
|
+
</head>
|
|
54
|
+
<body>
|
|
55
|
+
<div class="spread">
|
|
56
|
+
<main class="spread-content">
|
|
57
|
+
${buildLeftPage({ layout, info, history, today: todayDate, photoDataUri: options.photoDataUri })}
|
|
58
|
+
${buildRightPage({ layout, history, license, motivation, competencies, notes })}
|
|
59
|
+
</main>
|
|
60
|
+
<footer class="spread-footer">
|
|
61
|
+
※「性別」欄:記載は任意です。未記載とすることも可能です。
|
|
62
|
+
</footer>
|
|
63
|
+
</div>
|
|
64
|
+
</body>
|
|
65
|
+
</html>`;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generator/rirekisho/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,YAAY,GACb,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM1C;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAqB,EACrB,OAAyB;IAEzB,MAAM,KAAK,GAAG,OAAO,CAAC,kBAAkB,IAAI,KAAK,CAAC;IAClD,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC;IACvD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;IACzB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IAEjC,yCAAyC;IACzC,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEjD,8BAA8B;IAC9B,MAAM,MAAM,GAAG,eAAe,CAAC;QAC7B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,cAAc;QACd,UAAU;KACX,CAAC,CAAC;IAEH,mCAAmC;IACnC,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IAED,eAAe;IACf,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAExD,uCAAuC;IACvC,OAAO;;;;WAIE,IAAI,CAAC,IAAI;WACT,WAAW,CAAC,MAAM,CAAC;;;;;QAKtB,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;QAC9F,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;;;;;;;QAO7E,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layout calculation for Rirekisho (履歴書)
|
|
3
|
+
*
|
|
4
|
+
* This module calculates the optimal layout for the rirekisho document,
|
|
5
|
+
* ensuring that:
|
|
6
|
+
* 1. All content fits within the page
|
|
7
|
+
* 2. Left and right page bottoms align perfectly
|
|
8
|
+
* 3. Font sizes don't go below minimum
|
|
9
|
+
* 4. Each section has at least its minimum height
|
|
10
|
+
*/
|
|
11
|
+
import type { LayoutDimensions, LayoutInput } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Calculate complete layout dimensions for the rirekisho document
|
|
14
|
+
*/
|
|
15
|
+
export declare function calculateLayout(input: LayoutInput): LayoutDimensions;
|
|
16
|
+
/**
|
|
17
|
+
* Validate that the layout can accommodate the data
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateLayout(layout: LayoutDimensions): string | null;
|
|
20
|
+
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/generator/rirekisho/layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EAGZ,MAAM,YAAY,CAAC;AAuWpB;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,gBAAgB,CAqGpE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAKtE"}
|