chore: easier development for jsonresume-theme-custom thanks to vite
							
								
								
									
										11
									
								
								.markdownlint-cli2.jsonc
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,11 @@
 | 
			
		||||
{
 | 
			
		||||
  "config": {
 | 
			
		||||
    "default": true,
 | 
			
		||||
    "MD013": false,
 | 
			
		||||
    "MD024": false,
 | 
			
		||||
    "MD033": false,
 | 
			
		||||
    "MD041": false
 | 
			
		||||
  },
 | 
			
		||||
  "globs": ["**/*.{md,mdx}"],
 | 
			
		||||
  "ignores": ["**/node_modules"]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,7 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "default": true,
 | 
			
		||||
  "MD013": false,
 | 
			
		||||
  "MD024": false,
 | 
			
		||||
  "MD033": false,
 | 
			
		||||
  "MD041": false
 | 
			
		||||
}
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
import { useCallback, useEffect, useState, useRef } from 'react'
 | 
			
		||||
import useTranslation from 'next-translate/useTranslation'
 | 
			
		||||
import setLanguage from 'next-translate/setLanguage'
 | 
			
		||||
import classNames from 'classnames'
 | 
			
		||||
import classNames from 'clsx'
 | 
			
		||||
 | 
			
		||||
import i18n from 'i18n.json'
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import classNames from 'classnames'
 | 
			
		||||
import classNames from 'clsx'
 | 
			
		||||
 | 
			
		||||
export const Icon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {
 | 
			
		||||
  const { children, className, ...rest } = props
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import classNames from 'classnames'
 | 
			
		||||
import classNames from 'clsx'
 | 
			
		||||
 | 
			
		||||
type ShadowContainerProps = React.ComponentPropsWithRef<'div'>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								jsonresume-theme-custom/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,4 +1,22 @@
 | 
			
		||||
# Logs
 | 
			
		||||
logs
 | 
			
		||||
*.log
 | 
			
		||||
npm-debug.log*
 | 
			
		||||
yarn-debug.log*
 | 
			
		||||
yarn-error.log*
 | 
			
		||||
pnpm-debug.log*
 | 
			
		||||
lerna-debug.log*
 | 
			
		||||
 | 
			
		||||
node_modules
 | 
			
		||||
theme/index.html
 | 
			
		||||
dist
 | 
			
		||||
.parcel-cache
 | 
			
		||||
dist-ssr
 | 
			
		||||
*.local
 | 
			
		||||
 | 
			
		||||
# Editor directories and files
 | 
			
		||||
.idea
 | 
			
		||||
.DS_Store
 | 
			
		||||
*.suo
 | 
			
		||||
*.ntvs*
 | 
			
		||||
*.njsproj
 | 
			
		||||
*.sln
 | 
			
		||||
*.sw?
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1015 B After Width: | Height: | Size: 1015 B  | 
| 
		 Before Width: | Height: | Size: 986 B After Width: | Height: | Size: 986 B  | 
| 
		 Before Width: | Height: | Size: 629 B After Width: | Height: | Size: 629 B  | 
| 
		 Before Width: | Height: | Size: 912 B After Width: | Height: | Size: 912 B  | 
| 
		 Before Width: | Height: | Size: 528 B After Width: | Height: | Size: 528 B  | 
@@ -5,10 +5,7 @@
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
			
		||||
    <title><%= locals.basics.name %></title>
 | 
			
		||||
    <link rel="icon" type="image/png" href="<%= locals.basics.image %>" />
 | 
			
		||||
 | 
			
		||||
    <style>
 | 
			
		||||
      @import './styles/global.css';
 | 
			
		||||
    </style>
 | 
			
		||||
    <link rel="stylesheet" href="./styles/global.css" />
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
    <div class="container-fluid">
 | 
			
		||||
@@ -59,7 +56,7 @@
 | 
			
		||||
            <div class="background-details">
 | 
			
		||||
              <div class="detail" id="about">
 | 
			
		||||
                <div class="icon">
 | 
			
		||||
                  <img src="data-url:./images/user.svg" alt="user" />
 | 
			
		||||
                  <img src="./images/user.svg" alt="user" />
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="info">
 | 
			
		||||
                  <h4 class="title text-uppercase">À propos</h4>
 | 
			
		||||
@@ -75,10 +72,7 @@
 | 
			
		||||
 | 
			
		||||
              <div class="detail" id="work-experience">
 | 
			
		||||
                <div class="icon">
 | 
			
		||||
                  <img
 | 
			
		||||
                    src="data-url:./images/building-columns.svg"
 | 
			
		||||
                    alt="work"
 | 
			
		||||
                  />
 | 
			
		||||
                  <img src="./images/building-columns.svg" alt="work" />
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="info">
 | 
			
		||||
                  <h4 class="title text-uppercase">Expériences</h4>
 | 
			
		||||
@@ -117,7 +111,7 @@
 | 
			
		||||
 | 
			
		||||
              <div class="detail" id="skills">
 | 
			
		||||
                <div class="icon">
 | 
			
		||||
                  <img src="data-url:./images/toolbox.svg" alt="toolbox" />
 | 
			
		||||
                  <img src="./images/toolbox.svg" alt="toolbox" />
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="info">
 | 
			
		||||
                  <h4 class="title text-uppercase">Compétences</h4>
 | 
			
		||||
@@ -144,10 +138,7 @@
 | 
			
		||||
 | 
			
		||||
              <div class="detail" id="education">
 | 
			
		||||
                <div class="icon">
 | 
			
		||||
                  <img
 | 
			
		||||
                    src="data-url:./images/graduation-cap.svg"
 | 
			
		||||
                    alt="graduation"
 | 
			
		||||
                  />
 | 
			
		||||
                  <img src="./images/graduation-cap.svg" alt="graduation" />
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="info">
 | 
			
		||||
                  <h4 class="title text-uppercase">Éducation</h4>
 | 
			
		||||
@@ -183,7 +174,7 @@
 | 
			
		||||
 | 
			
		||||
              <div class="detail" id="interests">
 | 
			
		||||
                <div class="icon">
 | 
			
		||||
                  <img src="data-url:./images/heart.svg" alt="heart" />
 | 
			
		||||
                  <img src="./images/heart.svg" alt="heart" />
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="info">
 | 
			
		||||
                  <h4 class="title text-uppercase">Intérets</h4>
 | 
			
		||||
							
								
								
									
										5174
									
								
								jsonresume-theme-custom/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						@@ -3,16 +3,18 @@
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "type": "module",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "dev": "vite",
 | 
			
		||||
    "build": "vite build",
 | 
			
		||||
    "preview": "vite preview"
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "date-and-time": "2.4.0",
 | 
			
		||||
    "ejs": "3.1.8",
 | 
			
		||||
    "modern-normalize": "1.1.0"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@parcel/config-default": "2.6.2",
 | 
			
		||||
    "@parcel/core": "2.6.2",
 | 
			
		||||
    "@parcel/optimizer-data-url": "2.6.2",
 | 
			
		||||
    "@parcel/transformer-inline-string": "2.6.2",
 | 
			
		||||
    "parcel": "2.6.2"
 | 
			
		||||
    "@types/node": "18.6.2",
 | 
			
		||||
    "date-and-time": "2.4.1",
 | 
			
		||||
    "vite": "3.0.3",
 | 
			
		||||
    "vite-plugin-html": "3.2.0"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										118
									
								
								jsonresume-theme-custom/resume.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,118 @@
 | 
			
		||||
{
 | 
			
		||||
  "$schema": "https://raw.githubusercontent.com/jsonresume/resume-schema/v1.0.0/schema.json",
 | 
			
		||||
  "meta": {
 | 
			
		||||
    "theme": "custom"
 | 
			
		||||
  },
 | 
			
		||||
  "basics": {
 | 
			
		||||
    "name": "Théo LUDWIG",
 | 
			
		||||
    "label": "Développeur Full Stack Junior • Passionné de High-Tech",
 | 
			
		||||
    "image": "https://divlo.fr/images/logo_orange.png",
 | 
			
		||||
    "email": "contact@divlo.fr",
 | 
			
		||||
    "location": {},
 | 
			
		||||
    "url": "https://divlo.fr",
 | 
			
		||||
    "summary": "Je me forme en autodidacte dans l'informatique en suivant des formations en ligne et je suis aussi un étudiant à l'université suivant la formation \"BUT Informatique\" (première année). <br/> Je mets en pratique tout ce que j'apprends et réalise de nombreux projets."
 | 
			
		||||
  },
 | 
			
		||||
  "education": [
 | 
			
		||||
    {
 | 
			
		||||
      "startDate": "2022",
 | 
			
		||||
      "studyType": "Diplôme du Bachelor Universitaire de Technologie (BUT) Informatique",
 | 
			
		||||
      "institution": "IUT Robert Schuman à Illkirch-Graffenstaden",
 | 
			
		||||
      "score": "En cours"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "startDate": "2019",
 | 
			
		||||
      "endDate": "2021",
 | 
			
		||||
      "studyType": "Diplôme du Baccalauréat Général (Mathématiques et Numériques Sciences Informatiques)",
 | 
			
		||||
      "institution": "Lycée Heinrich Nessel à Haguenau",
 | 
			
		||||
      "score": "Mention Assez Bien"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "startDate": "2014",
 | 
			
		||||
      "endDate": "2018",
 | 
			
		||||
      "studyType": "Diplôme national du brevet",
 | 
			
		||||
      "institution": "Collège Gustave Doré à Hochfelden",
 | 
			
		||||
      "score": "Mention Bien"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "work": [
 | 
			
		||||
    {
 | 
			
		||||
      "summary": "Développement site web en React.js et Strapi afin de répondre <a href=\"https://www.nuitdelinfo.com/nuitinfo/_media/infos:la_nuit_de_l_info_2021_-_sujet.pdf\">au sujet de la Nuit de l'Info 2021</a>.<br /> TOP 1 France: Défi de l'entreprise <a href=\"https://www.nuitdelinfo.com/inscription/defis/300\">ToolPad</a>.",
 | 
			
		||||
      "website": "https://www.nuitdelinfo.com/",
 | 
			
		||||
      "name": "La Nuit de l'info 2021",
 | 
			
		||||
      "position": "Participation avec l'équipe <a href=\"https://www.nuitdelinfo.com/inscription/equipes/46\">Who are We</a>",
 | 
			
		||||
      "startDate": "2021-12-02",
 | 
			
		||||
      "endDate": "2021-12-03"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "summary": "Agent administratif en vue de faire face au sucroît temporaire d'activités liés à la numérisation des plans des postes sources <br /> actuellement sous format papier calque suite à la libération des locaux des archives.",
 | 
			
		||||
      "website": "https://www.es.fr/",
 | 
			
		||||
      "name": "ÉS (Électricité de Strasbourg)",
 | 
			
		||||
      "location": "5 Rue André Marie Ampère, 67450 Mundolsheim",
 | 
			
		||||
      "position": "Emploi d'été en qualité d'agent administratif",
 | 
			
		||||
      "startDate": "2021-07-07",
 | 
			
		||||
      "endDate": "2021-07-30"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "summary": "Hackathon développement d'une landing page et web scraping.",
 | 
			
		||||
      "website": "https://www.wildcodeschool.fr/",
 | 
			
		||||
      "name": "Wild Code School",
 | 
			
		||||
      "location": "32 Rue du Bass. d'Austerlitz, 67100 Strasbourg",
 | 
			
		||||
      "position": "Stage initiation métier développeur web",
 | 
			
		||||
      "startDate": "2019-06-24",
 | 
			
		||||
      "endDate": "2019-06-28"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "summary": "Développement d'un site web pour trouver un restaurant à la pause repas.",
 | 
			
		||||
      "website": "https://www.itpartners.fr/",
 | 
			
		||||
      "name": "Tribe | IT Partners",
 | 
			
		||||
      "location": "16 Rue du Parc, 67205 Oberhausbergen",
 | 
			
		||||
      "position": "Stage initiation métier développeur web",
 | 
			
		||||
      "startDate": "2019-06-17",
 | 
			
		||||
      "endDate": "2019-06-21"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "summary": "Apprentissage du métier \"Chargé de communication\" et des logiciels de graphisme tels que \"Adobe Photoshop\".",
 | 
			
		||||
      "website": "https://www.es.fr/",
 | 
			
		||||
      "name": "ÉS (Électricité de Strasbourg)",
 | 
			
		||||
      "location": "26 Bd du Président-Wilson, 67000 Strasbourg",
 | 
			
		||||
      "position": "Stage de découverte (3ème)",
 | 
			
		||||
      "startDate": "2018-02-19",
 | 
			
		||||
      "endDate": "2018-02-23"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "interests": [
 | 
			
		||||
    {
 | 
			
		||||
      "name": "Développeur Full Stack Junior"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "name": "Passionné de High-Tech"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "name": "Enthousiaste de l'Open-Source"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "skills": [
 | 
			
		||||
    {
 | 
			
		||||
      "keywords": ["JavaScript", "TypeScript", "Python", "C/C++"],
 | 
			
		||||
      "name": "Langages de programmation"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "keywords": ["HTML", "CSS", "Tailwind CSS", "React.js (+ Next.js)"],
 | 
			
		||||
      "name": "Front-end"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "keywords": ["Node.js", "Fastify", "PostgreSQL", "MySQL"],
 | 
			
		||||
      "name": "Back-end"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "keywords": [
 | 
			
		||||
        "GNU/Linux",
 | 
			
		||||
        "Ubuntu",
 | 
			
		||||
        "Visual Studio Code",
 | 
			
		||||
        "git",
 | 
			
		||||
        "Docker"
 | 
			
		||||
      ],
 | 
			
		||||
      "name": "Logiciels et outils"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,21 +1,19 @@
 | 
			
		||||
import { fileURLToPath } from 'node:url'
 | 
			
		||||
import fs from 'node:fs'
 | 
			
		||||
 | 
			
		||||
import { render } from '../index.js'
 | 
			
		||||
import { build } from 'vite'
 | 
			
		||||
 | 
			
		||||
const jsonResumeURL = new URL('../../resume.json', import.meta.url)
 | 
			
		||||
const publicResumeURL = new URL(
 | 
			
		||||
  '../../public/curriculum-vitae.html',
 | 
			
		||||
const jsonResumeThemeCustom = new URL('../', import.meta.url)
 | 
			
		||||
const jsonResumeThemeCustomDist = new URL('./dist', jsonResumeThemeCustom)
 | 
			
		||||
const publicResumeOutputURL = new URL(
 | 
			
		||||
  '../../public/curriculum-vitae',
 | 
			
		||||
  import.meta.url
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const dataResumeStringJSON = await fs.promises.readFile(jsonResumeURL, {
 | 
			
		||||
  encoding: 'utf-8'
 | 
			
		||||
})
 | 
			
		||||
const dataResumeJSON = JSON.parse(dataResumeStringJSON)
 | 
			
		||||
const dataResumeIndexHTML = await render(dataResumeJSON)
 | 
			
		||||
await fs.promises.writeFile(publicResumeURL, dataResumeIndexHTML, {
 | 
			
		||||
  encoding: 'utf-8'
 | 
			
		||||
await build({
 | 
			
		||||
  root: fileURLToPath(jsonResumeThemeCustom)
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
console.log('Resume generated successfully!')
 | 
			
		||||
console.log(`See it at ${publicResumeURL}`)
 | 
			
		||||
await fs.promises.cp(jsonResumeThemeCustomDist, publicResumeOutputURL, {
 | 
			
		||||
  recursive: true
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
@import 'npm:modern-normalize/modern-normalize.css';
 | 
			
		||||
@import 'modern-normalize/modern-normalize.css';
 | 
			
		||||
 | 
			
		||||
body {
 | 
			
		||||
  font-family: 'Montserrat', 'Arial', 'sans-serif';
 | 
			
		||||
							
								
								
									
										33
									
								
								jsonresume-theme-custom/vite.config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,33 @@
 | 
			
		||||
import fs from 'node:fs'
 | 
			
		||||
 | 
			
		||||
import { defineConfig } from 'vite'
 | 
			
		||||
import { createHtmlPlugin } from 'vite-plugin-html'
 | 
			
		||||
import date from 'date-and-time'
 | 
			
		||||
 | 
			
		||||
const jsonResumeURL = new URL('./resume.json', import.meta.url)
 | 
			
		||||
const dataResumeStringJSON = await fs.promises.readFile(jsonResumeURL, {
 | 
			
		||||
  encoding: 'utf-8'
 | 
			
		||||
})
 | 
			
		||||
const resume = JSON.parse(dataResumeStringJSON)
 | 
			
		||||
 | 
			
		||||
// https://vitejs.dev/config/
 | 
			
		||||
export default defineConfig({
 | 
			
		||||
  build: {
 | 
			
		||||
    assetsDir: './'
 | 
			
		||||
  },
 | 
			
		||||
  plugins: [
 | 
			
		||||
    createHtmlPlugin({
 | 
			
		||||
      inject: {
 | 
			
		||||
        data: {
 | 
			
		||||
          date,
 | 
			
		||||
          locals: {
 | 
			
		||||
            ...resume
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
  ],
 | 
			
		||||
  css: {
 | 
			
		||||
    postcss: {}
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										6403
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
							
								
								
									
										28
									
								
								package.json
									
									
									
									
									
								
							
							
						
						@@ -17,7 +17,7 @@
 | 
			
		||||
    "export": "next export",
 | 
			
		||||
    "lint:commit": "commitlint",
 | 
			
		||||
    "lint:editorconfig": "editorconfig-checker",
 | 
			
		||||
    "lint:markdown": "markdownlint \"**/*.{md,mdx}\" --dot --ignore-path \".gitignore\"",
 | 
			
		||||
    "lint:markdown": "markdownlint-cli2",
 | 
			
		||||
    "lint:typescript": "eslint \"**/*.{js,jsx,ts,tsx}\"",
 | 
			
		||||
    "lint:prettier": "prettier \".\" --check --ignore-path \".gitignore\"",
 | 
			
		||||
    "lint:staged": "lint-staged",
 | 
			
		||||
@@ -27,22 +27,21 @@
 | 
			
		||||
    "test:e2e": "start-server-and-test \"start\" \"http://localhost:3000\" \"cypress run\"",
 | 
			
		||||
    "test:e2e:dev": "start-server-and-test \"dev\" \"http://localhost:3000\" \"cypress open\"",
 | 
			
		||||
    "resume:build": "node ./jsonresume-theme-custom/scripts/build.js",
 | 
			
		||||
    "resume:dev": "nodemon ./jsonresume-theme-custom/scripts/build.js --watch ./jsonresume-theme-custom/theme -e js,css,ejs",
 | 
			
		||||
    "release": "semantic-release",
 | 
			
		||||
    "deploy": "vercel",
 | 
			
		||||
    "postinstall": "husky install"
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@fontsource/montserrat": "4.5.11",
 | 
			
		||||
    "@fortawesome/fontawesome-svg-core": "6.1.1",
 | 
			
		||||
    "@fortawesome/free-brands-svg-icons": "6.1.1",
 | 
			
		||||
    "@fortawesome/free-solid-svg-icons": "6.1.1",
 | 
			
		||||
    "@fortawesome/fontawesome-svg-core": "6.1.2",
 | 
			
		||||
    "@fortawesome/free-brands-svg-icons": "6.1.2",
 | 
			
		||||
    "@fortawesome/free-solid-svg-icons": "6.1.2",
 | 
			
		||||
    "@fortawesome/react-fontawesome": "0.2.0",
 | 
			
		||||
    "classnames": "2.3.1",
 | 
			
		||||
    "date-and-time": "2.4.0",
 | 
			
		||||
    "clsx": "1.2.1",
 | 
			
		||||
    "date-and-time": "2.4.1",
 | 
			
		||||
    "gray-matter": "4.0.3",
 | 
			
		||||
    "html-react-parser": "3.0.1",
 | 
			
		||||
    "next": "12.2.3",
 | 
			
		||||
    "next": "12.2.2",
 | 
			
		||||
    "next-mdx-remote": "4.1.0",
 | 
			
		||||
    "next-pwa": "5.5.4",
 | 
			
		||||
    "next-themes": "0.2.0",
 | 
			
		||||
@@ -69,16 +68,16 @@
 | 
			
		||||
    "@testing-library/jest-dom": "5.16.4",
 | 
			
		||||
    "@testing-library/react": "13.3.0",
 | 
			
		||||
    "@types/jest": "27.5.0",
 | 
			
		||||
    "@types/node": "18.0.6",
 | 
			
		||||
    "@types/node": "18.6.2",
 | 
			
		||||
    "@types/react": "18.0.15",
 | 
			
		||||
    "@types/unist": "2.0.6",
 | 
			
		||||
    "@typescript-eslint/eslint-plugin": "5.30.7",
 | 
			
		||||
    "@typescript-eslint/eslint-plugin": "5.31.0",
 | 
			
		||||
    "autoprefixer": "10.4.7",
 | 
			
		||||
    "cypress": "10.3.1",
 | 
			
		||||
    "editorconfig-checker": "4.0.2",
 | 
			
		||||
    "eslint": "8.20.0",
 | 
			
		||||
    "eslint-config-conventions": "3.0.0",
 | 
			
		||||
    "eslint-config-next": "12.2.3",
 | 
			
		||||
    "eslint-config-next": "12.2.2",
 | 
			
		||||
    "eslint-config-prettier": "8.5.0",
 | 
			
		||||
    "eslint-plugin-import": "2.26.0",
 | 
			
		||||
    "eslint-plugin-prettier": "4.2.1",
 | 
			
		||||
@@ -89,16 +88,15 @@
 | 
			
		||||
    "jest": "27.5.1",
 | 
			
		||||
    "jsonresume-theme-custom": "file:./jsonresume-theme-custom",
 | 
			
		||||
    "lint-staged": "13.0.3",
 | 
			
		||||
    "markdownlint-cli": "0.32.0",
 | 
			
		||||
    "markdownlint-cli2": "0.5.0",
 | 
			
		||||
    "next-secure-headers": "2.2.0",
 | 
			
		||||
    "nodemon": "2.0.19",
 | 
			
		||||
    "postcss": "8.4.14",
 | 
			
		||||
    "prettier": "2.7.1",
 | 
			
		||||
    "prettier-plugin-tailwindcss": "0.1.12",
 | 
			
		||||
    "prettier-plugin-tailwindcss": "0.1.13",
 | 
			
		||||
    "semantic-release": "19.0.3",
 | 
			
		||||
    "start-server-and-test": "1.14.0",
 | 
			
		||||
    "tailwindcss": "3.1.6",
 | 
			
		||||
    "typescript": "4.7.4",
 | 
			
		||||
    "vercel": "27.2.0"
 | 
			
		||||
    "vercel": "27.3.0"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||