chore: deps bump

This commit is contained in:
Art Rosnovsky
2024-09-11 13:20:17 -07:00
parent fe645eac55
commit abc3820ef7
9 changed files with 1842 additions and 1280 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

View File

@@ -1,13 +1,19 @@
import { generatePdf } from './utils/generatePdf';
import { getLogger } from './utils/logger';
const logger = getLogger("MAIN");
const INPUT_FILE_PATH = `${process.cwd()}/resume.md`;
const OUTPUT_FILE_PATH = `${process.cwd()}/output/art_rosnovsky_software_engineer.pdf`;
(async () => {
logger.info(`INPUT_FILE_PATH: ${INPUT_FILE_PATH}`);
logger.info(`OUTPUT_FILE_PATH: ${OUTPUT_FILE_PATH}`);
try {
logger.info("Generating PDF...");
await generatePdf(INPUT_FILE_PATH, OUTPUT_FILE_PATH);
} catch (error: any) {
console.error(`Error occurred: ${error.message}`);
logger.error(`Error occurred: ${error.message}`);
process.exit(1);
}
})
})()

View File

@@ -1,10 +1,10 @@
{
"name": "resume-manager",
"version": "1.0.1",
"version": "1.0.2",
"description": "Converts Markdown resume to PDF format.",
"main": "dist/index.js",
"scripts": {
"build": "ts-node index.ts",
"build": "ts-node index.ts | pino-pretty",
"test": "NODE_ENV=\"test\" node --no-warnings --require \"ts-node/register\" --test **/**/*.test.ts"
},
"keywords": [
@@ -19,12 +19,14 @@
"dependencies": {
"markdown-pdf": "^11.0.0",
"md-to-pdf": "^5.2.4",
"typescript": "^5.2.2"
"pino": "^9.4.0",
"pino-pretty": "^11.2.2",
"typescript": "^5.6.2"
},
"devDependencies": {
"@types/markdown-pdf": "^9.0.5",
"@types/node": "latest",
"ts-node": "latest",
"@types/node": "^22.5.4",
"ts-node": "^10.9.2",
"typescript": "latest"
},
"engines": {

2986
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -8,33 +8,40 @@ pdf_options:
margin: 25mm
---
# Art Rosnovsky
# Software Engineer
## Software Engineer
## Art Rosnovsky
> job@rosnovsky.us | [github.com/rosnovsky](https://github.com/rosnovsky) | Washington state | **Remote Only** |
Dedicated `JavaScript`/`TypeScript` Engineer with a knack for ` React`, `Kubernetes`, and CI/CD. I champion sustainable, ethical tech that makes a positive impact, by building stable, scalable, efficient, and maintainable software.
Dedicated `JavaScript`/`TypeScript` Engineer, passionately working with ` React`, serverless, `Kubernetes` and CI/CD. I champion sustainable, ethical tech that makes a positive impact, by building stable, scalable, efficient, and maintainable software.
## Technical Skills
- **Front End**: `JavaScript`, `TypeScript`, `React`, `Svelte`, `Tailwind`, `CSS`, `HTML`
- **Back End**: `Node.js`, `Express`, `Next.js`, `MongoDB`, `PostgreSQL`, `tRPC`, RESTful APIs
- **Dev Tools/DevOps**: Git, `Docker`, `Kubernetes`, `Jira`, `AWS`, `Azure`, CI/CD (`GitHub Actions`, `Gitlab Pipelines`)
- **Dev Tools/DevOps**: `Git`, `Docker`, `Kubernetes`, `Jira`, `AWS`, `Azure`, `CI/CD` (`GitHub Actions`, `Gitlab Pipelines`)
- **Other**: former frontline reporter, can fly single-engine aircraft
## Work Experience
### Senior Developer (Auth0)
> **[BeyondID](https://beyondid.com)**, Remote • Apr 2024 - Present
- Implemented end-to-end CIAM solutions for Fortune 500 companies.
- Developed and produced training materials for internal teams.
- Developed a variety of internal CIAM-related tools.
### Software Engineer
> **[Okta](https://okta.com)**, Remote • Mar 2021 - April 2024
> **[Auth0](https://auth0.com)**, Remote • Mar 2021 - April 2024
- Delivered the [Quarterly Snapshot](https://auth0.com/docs/get-started/tenant-settings/auth0-teams/quarterly-snapshot) feature on schedule.
- Enhanced Technical Account Managers' workflow by building internal tools for Quarterly Snapshots covering **$20M** worth of ARR.
- Developed, deployed, and stabilized an internal AI/ML tool, enhancing knowledge sharing and delivery within the Customer First teams **saving over $10K** of SME productive time every year
- Saved **$20K** annually on AWS bills by strategically decommissioning idle resources
- Improved and delivered a multitude of high-profile company-wide internal tools
- Implemented critical security improvements to key in-house Customer Success tools
- Developed, deployed, and stabilized an internal AI & ML tool, enhancing knowledge sharing and delivery within the Customer First teams **saving over $10K** of SME productive time every year.
- Saved **$20K** annually on AWS bills by strategically decommissioning idle resources.
- Improved and delivered a multitude of high-profile company-wide internal tools.
- Implemented critical security improvements to key in-house Customer Success tools.
### Developer Support Engineer
@@ -44,6 +51,8 @@ Dedicated `JavaScript`/`TypeScript` Engineer with a knack for ` React`, `Kuberne
- Assisted hundreds of major enterprise customers with complex CIAM integration use cases.
- Guided hundreds of developers through Identity Management implementations in every environment imaginable.
<div class="page-break"></div>
### Software Engineer
> **[Microsoft](https://microsoft.com)**, Redmond, WA • Apr 2019 - Oct 2019
@@ -51,8 +60,6 @@ Dedicated `JavaScript`/`TypeScript` Engineer with a knack for ` React`, `Kuberne
- Crafted both the UI and backend for an internal search application using `C#`, `.NET Core`, `MSSQL`, and `React`, scaling it from a prototype to a full-scale production app.
- Saved hundreds of hours of account managers' productive time by implementing a slick search UI and functionality
<div class="page-break"></div>
### Software Engineer
> **Transmark Logistics**, Kent, WA • Oct 2018 — Mar 2019
@@ -77,27 +84,14 @@ Dedicated `JavaScript`/`TypeScript` Engineer with a knack for ` React`, `Kuberne
## Education
### Fanshawe College of Applied Art and Technology
> London, Canada • AA, Multimedia Design
- Developed 'Hourglass', a student assignment management system.
- Produced a PSA for the local branch of Big Brothers Big Sisters
### RUDN University
> Moscow, Russia • BA, Journalism
- Frontline reporter for country's largest news outlets
- Reported live from significant events, including terrorist incidents.
### Udacity Nanodegree
- Data Foundations
- AA, Multimedia Design from [Fanshawe College of Applied Art and Technology](https://fanshawe.ca) (London, Canada)
- BA, Journalism from [RUDN University](https://rudn.ru) (Moscow, Russia)
- Data Foundations from [Udacity Nanodegree](https://www.udacity.com/) (Remote)
## Languages
- Russian — Bilingual (comprehend Belarusian, Ukrainian)
- English — Bilingual
- Russian — Bilingual (comprehend Ukrainian 🇺🇦, Belarusian)
- Arabic — Basic
## Publications

View File

@@ -1,8 +1,11 @@
import fs from 'node:fs';
import { getLogger } from './logger';
const logger = getLogger("fsChecks");
export const checkFileExists = (filePath: string) => {
if (!fs.existsSync(filePath)) {
console.error(`File ${filePath} does not exist.`);
logger.error(`File ${filePath} does not exist.`);
return false;
}
return true;
@@ -11,7 +14,7 @@ export const checkFileExists = (filePath: string) => {
export const checkFolderExists = (folderPath: string) => {
const folder = folderPath.split('/').slice(0, -1).join('/');
if (!fs.existsSync(folder)) {
console.error(`Folder ${folder} does not exist.`);
logger.error(`Folder ${folder} does not exist.`);
return false;
}
return true;

View File

@@ -1,25 +1,32 @@
import path from 'node:path';
import fs from 'node:fs';
import path from 'node:path';
import { checkFileExists, checkFolderExists } from './fsChecks';
import { getLogger } from './logger';
import { markdownToPdf } from './markdownToPdf';
const logger = getLogger("generatePdf");
export async function generatePdf(inputFilePath: string, outputFilePath: string) {
logger.info("Checking if input file exists...");
if (!checkFileExists(inputFilePath)) {
throw new Error(`File ${inputFilePath} does not exist. How am I supposed to build you a resume, mate?`);
}
logger.info("Checking if output folder exists...");
if (!checkFolderExists(outputFilePath)) {
fs.mkdirSync(outputFilePath.split('/').slice(0, -1).join("/"), { recursive: true });
}
try {
logger.info("Trying to generate PDF...");
const pdf = await markdownToPdf(inputFilePath);
if (pdf) {
logger.info("Writing PDF to file...");
fs.writeFileSync(path.resolve(__dirname, outputFilePath), pdf.content);
return;
}
} catch (error: any) {
console.error(`Error occurred: ${error.message}`);
logger.error(`Error occurred: ${error.message}`);
throw error;
}
}

14
utils/logger.ts Normal file
View File

@@ -0,0 +1,14 @@
import pino from "pino";
export const getLogger = (name: string) => {
return pino({
level: process.env.NODE_ENV === "production" ? "debug" : "debug",
name,
formatters: {
level: (label) => {
return { level: label };
},
},
levelVal: 10,
})
}

View File

@@ -1,11 +1,17 @@
import mdToPdf from 'md-to-pdf';
import { getLogger } from './logger';
const logger = getLogger("markdownToPdf");
export const markdownToPdf = async (inputFilePath: string) => {
try {
logger.info("Converting Markdown to PDF...");
const pdf = await mdToPdf({ path: inputFilePath });
logger.info("PDF generated successfully!");
return pdf;
} catch (error: any) {
console.error(`Error occurred: ${error.message}`);
logger.error(`Error occurred: ${error.message}`);
throw error;
}
}