@dytsou/resume-converter 2.0.4 → 2.1.1
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/.github/PULL_REQUEST_TEMPLATE.md +14 -0
- package/.github/workflows/update-year.yml +57 -0
- package/.husky/pre-commit +3 -0
- package/.prettierignore +18 -0
- package/.prettierrc +10 -0
- package/LICENSE +1 -1
- package/README.md +7 -1
- package/eslint.config.js +3 -1
- package/latex/resume.tex +3 -3
- package/package.json +16 -10
- package/scripts/config.mjs +22 -0
- package/scripts/convert-latex.mjs +32 -713
- package/scripts/converter.mjs +76 -0
- package/scripts/html-helpers.mjs +64 -0
- package/scripts/html-template.mjs +166 -0
- package/scripts/html-transformers.mjs +366 -0
- package/scripts/latex-parser.mjs +74 -0
- package/scripts/utils.mjs +29 -0
- package/src/App.tsx +3 -1
- package/src/components/DownloadFromDriveButton.tsx +6 -4
- package/src/index.css +9 -3
- package/src/utils/googleDriveUtils.ts +1 -1
- package/src/utils/resumeUtils.ts +1 -1
- package/vite.config.ts +1 -2
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
## Type of changes
|
|
2
|
+
|
|
3
|
+
- Feature/Fix/Docs/Refactor/CI/Test/Chore
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
- Add XXX
|
|
8
|
+
- Resolve issue #XXX
|
|
9
|
+
|
|
10
|
+
<!-- Provide a brief description of the changes made in this pull request. -->
|
|
11
|
+
|
|
12
|
+
## Additional Information
|
|
13
|
+
|
|
14
|
+
<!-- Optional: Add any other information that would be helpful for the reviewer. Like detail spec, decisions, trade-offs, links, etc. -->
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
name: Update Year in LICENSE and Footer
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
# Run on January 1st at 00:00 UTC each year
|
|
6
|
+
- cron: "0 0 1 1 *"
|
|
7
|
+
workflow_dispatch: # Allow manual trigger
|
|
8
|
+
push:
|
|
9
|
+
branches: [main]
|
|
10
|
+
paths:
|
|
11
|
+
- "LICENSE"
|
|
12
|
+
- "scripts/html-template.mjs"
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: write
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
update-year:
|
|
19
|
+
name: Update Year
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
steps:
|
|
22
|
+
- name: Checkout repository
|
|
23
|
+
uses: actions/checkout@v6
|
|
24
|
+
with:
|
|
25
|
+
fetch-depth: 0
|
|
26
|
+
|
|
27
|
+
- name: Get current year
|
|
28
|
+
id: get_year
|
|
29
|
+
run: echo "year=$(date +%Y)" >> $GITHUB_OUTPUT
|
|
30
|
+
|
|
31
|
+
- name: Update LICENSE year
|
|
32
|
+
run: |
|
|
33
|
+
CURRENT_YEAR="${{ steps.get_year.outputs.year }}"
|
|
34
|
+
# Update the year in LICENSE file (format: Copyright (c) YYYY)
|
|
35
|
+
# Use sed to replace the 4-digit year while preserving the rest of the line
|
|
36
|
+
sed -i "s/Copyright (c) [0-9]\{4\}/Copyright (c) ${CURRENT_YEAR}/" LICENSE
|
|
37
|
+
echo "Updated LICENSE year to ${CURRENT_YEAR}"
|
|
38
|
+
|
|
39
|
+
- name: Check for changes
|
|
40
|
+
id: git_check
|
|
41
|
+
run: |
|
|
42
|
+
if git diff --quiet LICENSE; then
|
|
43
|
+
echo "changed=false" >> $GITHUB_OUTPUT
|
|
44
|
+
else
|
|
45
|
+
echo "changed=true" >> $GITHUB_OUTPUT
|
|
46
|
+
echo "Changes detected in LICENSE"
|
|
47
|
+
git diff LICENSE
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
- name: Commit and push changes
|
|
51
|
+
if: steps.git_check.outputs.changed == 'true'
|
|
52
|
+
run: |
|
|
53
|
+
git config --local user.email "action@github.com"
|
|
54
|
+
git config --local user.name "GitHub Action"
|
|
55
|
+
git add LICENSE
|
|
56
|
+
git commit -m "chore: update copyright year to ${{ steps.get_year.outputs.year }}"
|
|
57
|
+
git push
|
package/.prettierignore
ADDED
package/.prettierrc
ADDED
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -39,6 +39,7 @@ resume/
|
|
|
39
39
|
Place your `.tex` files in the `latex/` directory. The converter will automatically process all files with a `.tex` extension.
|
|
40
40
|
|
|
41
41
|
Example structure:
|
|
42
|
+
|
|
42
43
|
```
|
|
43
44
|
latex/
|
|
44
45
|
├── my-research-paper.tex
|
|
@@ -80,6 +81,7 @@ git push origin main
|
|
|
80
81
|
```
|
|
81
82
|
|
|
82
83
|
The GitHub Actions workflow will:
|
|
84
|
+
|
|
83
85
|
1. Install dependencies
|
|
84
86
|
2. Convert all LaTeX files
|
|
85
87
|
3. Validate conversion success
|
|
@@ -137,6 +139,7 @@ Modify the CSS in `scripts/convert-latex.mjs` to customize the HTML output appea
|
|
|
137
139
|
### Document Metadata
|
|
138
140
|
|
|
139
141
|
The converter extracts metadata from LaTeX commands:
|
|
142
|
+
|
|
140
143
|
- `\title{...}` - Document title
|
|
141
144
|
- `\author{...}` - Author names
|
|
142
145
|
- `\date{...}` - Publication date
|
|
@@ -144,6 +147,7 @@ The converter extracts metadata from LaTeX commands:
|
|
|
144
147
|
## Deployment
|
|
145
148
|
|
|
146
149
|
Your site will be available at:
|
|
150
|
+
|
|
147
151
|
```
|
|
148
152
|
https://<username>.github.io/<repository-name>/
|
|
149
153
|
```
|
|
@@ -153,6 +157,7 @@ https://<username>.github.io/<repository-name>/
|
|
|
153
157
|
### Conversion Fails
|
|
154
158
|
|
|
155
159
|
Check the GitHub Actions logs to see which LaTeX file failed and why. Common issues:
|
|
160
|
+
|
|
156
161
|
- Unsupported LaTeX packages
|
|
157
162
|
- Syntax errors in LaTeX source
|
|
158
163
|
- Missing closing braces
|
|
@@ -164,6 +169,7 @@ If deployment is blocked, the CI/CD pipeline detected conversion failures. Fix t
|
|
|
164
169
|
### Local Testing
|
|
165
170
|
|
|
166
171
|
Run the conversion locally to debug issues:
|
|
172
|
+
|
|
167
173
|
```bash
|
|
168
174
|
pnpm run convert
|
|
169
175
|
```
|
|
@@ -183,4 +189,4 @@ Check the generated files in `public/converted-docs/` and review `public/documen
|
|
|
183
189
|
|
|
184
190
|
## License
|
|
185
191
|
|
|
186
|
-
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
192
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
package/eslint.config.js
CHANGED
|
@@ -3,6 +3,7 @@ import globals from 'globals';
|
|
|
3
3
|
import reactHooks from 'eslint-plugin-react-hooks';
|
|
4
4
|
import reactRefresh from 'eslint-plugin-react-refresh';
|
|
5
5
|
import tseslint from 'typescript-eslint';
|
|
6
|
+
import prettier from 'eslint-config-prettier';
|
|
6
7
|
|
|
7
8
|
export default tseslint.config(
|
|
8
9
|
{ ignores: ['dist'] },
|
|
@@ -24,5 +25,6 @@ export default tseslint.config(
|
|
|
24
25
|
{ allowConstantExport: true },
|
|
25
26
|
],
|
|
26
27
|
},
|
|
27
|
-
}
|
|
28
|
+
},
|
|
29
|
+
prettier
|
|
28
30
|
);
|
package/latex/resume.tex
CHANGED
|
@@ -197,9 +197,9 @@
|
|
|
197
197
|
|
|
198
198
|
\section{Technical Skills}
|
|
199
199
|
\resumeHeadingListStart{}
|
|
200
|
-
\resumeSectionType{Languages}{}{ Python, C++, Go,
|
|
201
|
-
\resumeSectionType{Frameworks \& Libraries}{}{React.js, Node.js, Flutter,
|
|
202
|
-
\resumeSectionType{Tools \& Technologies}{}{Git, PostgreSQL,
|
|
200
|
+
\resumeSectionType{Languages}{}{ Python, C++, Go, JavaScript, TypeScript, Dart, HTML, CSS, Verilog, LabVIEW}
|
|
201
|
+
\resumeSectionType{Frameworks \& Libraries}{}{React.js (Vite), Node.js, React Native (Expo), Tailwind CSS, Flutter, Flask, FastAPI, OpenGL}
|
|
202
|
+
\resumeSectionType{Tools \& Technologies}{}{Git, PostgreSQL, Docker, Linux, Postman, Playwright, Vitest, Grafana}
|
|
203
203
|
\resumeSectionType{Specialized Skills}{}{Web Development: Full-stack development with React frontend and backend APIs}
|
|
204
204
|
\resumeSectionType{}{}{Game Development: OpenGL-based 3D graphics and LabVIEW multiplayer systems}
|
|
205
205
|
% \resumeSectionType{}{}{Bot Development: LINE bot applications with Python}
|
package/package.json
CHANGED
|
@@ -1,30 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dytsou/resume-converter",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@unified-latex/unified-latex-to-hast": "^1.8.3",
|
|
7
7
|
"@unified-latex/unified-latex-util-parse": "^1.8.3",
|
|
8
8
|
"hast-util-to-html": "^9.0.5",
|
|
9
9
|
"mathjax-full": "^3.2.2",
|
|
10
|
-
"react": "^19.2.
|
|
11
|
-
"react-dom": "^19.2.
|
|
10
|
+
"react": "^19.2.3",
|
|
11
|
+
"react-dom": "^19.2.3",
|
|
12
12
|
"rehype-stringify": "^10.0.1",
|
|
13
13
|
"unified": "^11.0.5"
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
|
-
"@eslint/js": "^9.39.
|
|
16
|
+
"@eslint/js": "^9.39.2",
|
|
17
17
|
"@types/react": "^19.2.7",
|
|
18
18
|
"@types/react-dom": "^19.2.3",
|
|
19
|
-
"@vitejs/plugin-react": "^5.1.
|
|
20
|
-
"eslint": "^9.39.
|
|
19
|
+
"@vitejs/plugin-react": "^5.1.2",
|
|
20
|
+
"eslint": "^9.39.2",
|
|
21
|
+
"eslint-config-prettier": "^10.1.8",
|
|
21
22
|
"eslint-plugin-react-hooks": "^7.0.1",
|
|
22
|
-
"eslint-plugin-react-refresh": "^0.4.
|
|
23
|
-
"globals": "^
|
|
23
|
+
"eslint-plugin-react-refresh": "^0.4.26",
|
|
24
|
+
"globals": "^17.0.0",
|
|
25
|
+
"husky": "^9.1.7",
|
|
26
|
+
"prettier": "^3.7.4",
|
|
24
27
|
"typescript": "^5.5.3",
|
|
25
|
-
"typescript-eslint": "^8.
|
|
26
|
-
"vite": "^7.
|
|
28
|
+
"typescript-eslint": "^8.52.0",
|
|
29
|
+
"vite": "^7.3.1"
|
|
27
30
|
},
|
|
31
|
+
"license": "MIT",
|
|
28
32
|
"publishConfig": {
|
|
29
33
|
"access": "public"
|
|
30
34
|
},
|
|
@@ -33,6 +37,8 @@
|
|
|
33
37
|
"build": "pnpm run convert && vite build",
|
|
34
38
|
"convert": "node scripts/convert-latex.mjs",
|
|
35
39
|
"lint": "eslint .",
|
|
40
|
+
"format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,css,md}\"",
|
|
41
|
+
"format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,json,css,md}\"",
|
|
36
42
|
"preview": "vite preview",
|
|
37
43
|
"typecheck": "tsc --noEmit -p tsconfig.app.json",
|
|
38
44
|
"release": "pnpm run convert && pnpm run build && pnpm run publish",
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration constants for LaTeX to HTML conversion
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export const CONFIG = {
|
|
6
|
+
latexDir: './latex',
|
|
7
|
+
outputDir: './public/converted-docs',
|
|
8
|
+
manifestFile: './public/documents-manifest.json',
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const ICON_MAP = {
|
|
12
|
+
faLinkedin: 'fab fa-linkedin',
|
|
13
|
+
faGithub: 'fab fa-github',
|
|
14
|
+
faEnvelope: 'fas fa-envelope',
|
|
15
|
+
faMobile: 'fas fa-mobile',
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export const LIST_MARKERS = {
|
|
19
|
+
start: '<span class="macro macro-resumeItemListStart"></span>',
|
|
20
|
+
end: '<span class="macro macro-resumeItemListEnd"></span>',
|
|
21
|
+
item: '<span class="macro macro-resumeItem"></span>',
|
|
22
|
+
};
|