From 011df9bf7fcc8d092a601b2043e3c52f98e69aff Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Sat, 29 Oct 2022 02:51:38 +0300 Subject: [PATCH] feat: fix code block for old posts, and add might like section --- package-lock.json | 2187 ++++++++--------- public/education-data.json | 43 + public/skills-data.json | 96 + public/talks-data.json | 26 + public/work-data.json | 127 + src/components/ArticleCard.astro | 48 + src/layouts/BlogPost.astro | 99 +- src/layouts/Layout.astro | 4 +- src/pages/about.astro | 467 +--- .../2014/learn-git-part-1-introduction.md | 120 +- ...earn-git-part-2-getting-our-hands-dirty.md | 338 ++- .../learn-git-part-3-start-collaborate.md | 230 -- ...kyll-starter-kit-generator-2.1.0-is-out.md | 3 - ...ng-applications-with-haproxy-and-docker.md | 15 +- .../blog/2020/chapter-1-simple-twitter.md | 88 +- .../blog/2020/chapter-2-simple-twitter.md | 3 - .../blog/2020/chapter-3-simple-twitter.md | 3 - src/pages/blog/2020/crack-the-hash.md | 57 +- .../jekyll-starter-kit-generator-3.x.x.md | 3 - .../blog/2020/like-a-spy-with-hak5-toys.md | 49 +- .../blog/2020/new-design-for-the-blog.md | 3 - .../blog/2020/open-source-intelligence.md | 15 +- .../blog/2020/releasing-software-is-hard.md | 41 +- .../blog/2021/getting-to-know-my-neighbors.md | 3 - ...hugo-theme-with-developer-focus-in-mind.md | 19 +- src/pages/blog/2021/nestjs-graphql-mongodb.md | 56 +- src/pages/blog/2022/design-system.md | 3 - src/pages/blog/2022/github-email.md | 3 - src/pages/blog/2022/raspberry-pi.md | 3 - src/pages/contact.astro | 14 +- src/pages/index.astro | 97 +- 31 files changed, 2097 insertions(+), 2166 deletions(-) create mode 100644 public/education-data.json create mode 100644 public/skills-data.json create mode 100644 public/talks-data.json create mode 100644 public/work-data.json create mode 100644 src/components/ArticleCard.astro diff --git a/package-lock.json b/package-lock.json index 7f82623..47e9738 100644 --- a/package-lock.json +++ b/package-lock.json @@ -160,9 +160,9 @@ } }, "node_modules/@astrojs/compiler": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-0.25.2.tgz", - "integrity": "sha512-GE7uLvH7rSHuTHdMun+867TWsgYNYsaGuhvXsywcaabl4W4n/3b1kzgzrIsrXYBo51J0k6qD33mVdsHdvwv5rw==" + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-0.28.1.tgz", + "integrity": "sha512-rcuQs5kcT6OshfJxXkZ2Tn61V4/5UAmvZKma/qmNhpAdBkGk6J/1gJ/Gxa2sAS6WNUjUyVo5BRrdsNGW36qkoQ==" }, "node_modules/@astrojs/language-server": { "version": "0.26.2", @@ -218,9 +218,9 @@ } }, "node_modules/@astrojs/mdx": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-0.11.4.tgz", - "integrity": "sha512-b86Fzd87OCuYUGk7O59mwq0URqLdH40wUJC5UCkFmSquIrk8QNrZ7tdjriBfF+Wq3+2UT5JO4ahxIuP6N3cczQ==", + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-0.11.5.tgz", + "integrity": "sha512-zSlMX5unK4aIfg6NeYzlw0erLtvKpk71FWo11jYsMmmajYSU2JUk6maKWewERXGuVoY2YpC4W4Fl5dPn6jYGdQ==", "dependencies": { "@astrojs/prism": "^1.0.1", "@mdx-js/mdx": "^2.1.2", @@ -260,11 +260,11 @@ } }, "node_modules/@astrojs/partytown": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@astrojs/partytown/-/partytown-1.0.0.tgz", - "integrity": "sha512-rco5tOtBmmZ7mpoHFyARrMb5yKVJPwLghN9lFvl+R867E+0xRp6ZzP5o7pMySgZCUq093qzd1bkAsVS2I/8gpg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@astrojs/partytown/-/partytown-1.0.1.tgz", + "integrity": "sha512-JVmKwQa2aWMAmz3tkNHtg5hw7gOTI6ROyFIYcUQtN6j8aysEiWKnt4xzz67RvDWId1h7sIde87UeH+4YoEyGug==", "dependencies": { - "@builder.io/partytown": "^0.4.5", + "@builder.io/partytown": "^0.7.1", "mrmime": "^1.0.0" } }, @@ -280,9 +280,9 @@ } }, "node_modules/@astrojs/rss": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-1.0.2.tgz", - "integrity": "sha512-WPMW5a3D+nAbuu/i7LANfp1GnVrdnzcsUNrR7o8IvPJXJMjVGtDqdUqNDj20Rj3rwcWbOL2KVvGPMjCqx0tRWQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-1.0.3.tgz", + "integrity": "sha512-SkAUMnp/LpryOR5B69rlF69AjKE3YlIPRmWad5WoRVeAH1CEEvSh8sC8/qhtG9haPFYa9JoX6zp5V5MkUOop3A==", "dependencies": { "fast-xml-parser": "^4.0.8" } @@ -297,9 +297,9 @@ } }, "node_modules/@astrojs/tailwind": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@astrojs/tailwind/-/tailwind-2.0.2.tgz", - "integrity": "sha512-SDQYqrOLwrRdDzjoSs6Ha2YQzWJlzWnPTZM5t0aWoHukm3JPQg/omDTpiz/XqT4vupYMOsBQZ9WBuNyWVtMrVg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@astrojs/tailwind/-/tailwind-2.1.1.tgz", + "integrity": "sha512-Il6FODtu4AlwadleJS3VWmAOOmeCDKvAo3iof46p4iHtdeWLClyuH9kJXWrlzCS+QOfBSIfXxvwPJ3cbK5COlA==", "dependencies": { "@proload/core": "^0.3.2", "autoprefixer": "^10.4.7", @@ -348,28 +348,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz", - "integrity": "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.0.tgz", + "integrity": "sha512-Gt9jszFJYq7qzXVK4slhc6NzJXnOVmRECWcVjF/T23rNXD9NtWQ0W3qxdg+p9wWIB+VQw3GYV/U2Ha9bRTfs4w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", - "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", + "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.3", + "@babel/generator": "^7.19.6", "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.0", - "@babel/helpers": "^7.19.0", - "@babel/parser": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helpers": "^7.19.4", + "@babel/parser": "^7.19.6", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.3", - "@babel/types": "^7.19.3", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -393,11 +393,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz", - "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.0.tgz", + "integrity": "sha512-GUPcXxWibClgmYJuIwC2Bc2Lg+8b9VjaJ+HlNdACEVt+Wlr1eoU1OPZjZRm7Hzl0gaTsUZNQfeihvZJhG7oc3w==", "dependencies": { - "@babel/types": "^7.19.3", + "@babel/types": "^7.20.0", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -430,11 +430,11 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", - "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", "dependencies": { - "@babel/compat-data": "^7.19.3", + "@babel/compat-data": "^7.20.0", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", "semver": "^6.3.0" @@ -497,18 +497,18 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", - "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", + "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-simple-access": "^7.19.4", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4" }, "engines": { "node": ">=6.9.0" @@ -523,11 +523,11 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.19.4" }, "engines": { "node": ">=6.9.0" @@ -545,9 +545,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", "engines": { "node": ">=6.9.0" } @@ -569,13 +569,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", - "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.0.tgz", + "integrity": "sha512-aGMjYraN0zosCEthoGLdqot1oRsmxVTQRHadsUPz5QM44Zej2PYRz7XiDE7GqnkZnNtLbOuxqoZw42vkU7+XEQ==", "dependencies": { "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0" }, "engines": { "node": ">=6.9.0" @@ -595,9 +595,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz", - "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.0.tgz", + "integrity": "sha512-G9VgAhEaICnz8iiJeGJQyVl6J2nTjbW0xeisva0PK6XcKsga7BIaqm4ZF8Rg1Wbaqmy6znspNqhPaPkyukujzg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -651,18 +651,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz", - "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.0.tgz", + "integrity": "sha512-5+cAXQNARgjRUK0JWu2UBwja4JLSO/rBMPJzpsKb+oBF5xlUuCfljQepS4XypBQoiigL0VQjTZy6WiONtUdScQ==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.3", + "@babel/generator": "^7.20.0", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.3", - "@babel/types": "^7.19.3", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -671,11 +671,11 @@ } }, "node_modules/@babel/types": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz", - "integrity": "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz", + "integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==", "dependencies": { - "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, @@ -684,9 +684,9 @@ } }, "node_modules/@builder.io/partytown": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@builder.io/partytown/-/partytown-0.4.5.tgz", - "integrity": "sha512-HcHlmMYSpOxfJ0lFVxgZrvgIjz1Q8knlGuWkBpvjIp68j+xVWg969+sn7BCfyKhcGaYlnVOY/CEBHapQBcl0jw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@builder.io/partytown/-/partytown-0.7.1.tgz", + "integrity": "sha512-hvu2gG9NDtCa5aoL4JkvDe3E5SegXlHAkhtA+Az96uTtFA0PYuEPjDYGiayGTkZuRKUmxetebWjIFgSDNdlBOw==", "bin": { "partytown": "bin/partytown.cjs" } @@ -966,9 +966,9 @@ "integrity": "sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==" }, "node_modules/@esbuild/android-arm": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.10.tgz", - "integrity": "sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.12.tgz", + "integrity": "sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==", "cpu": [ "arm" ], @@ -1051,12 +1051,12 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "node_modules/@ljharb/has-package-exports-patterns": { @@ -1065,9 +1065,9 @@ "integrity": "sha512-4/RWEeXDO6bocPONheFe6gX/oQdP/bEpv0oL4HqjPP5DCenBSt0mHgahppY49N0CpsaqffdwPq+TlX9CYOq2Dw==" }, "node_modules/@mdx-js/mdx": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.1.3.tgz", - "integrity": "sha512-ahbb47HJIJ4xnifaL06tDJiSyLEy1EhFAStO7RZIm3GTa7yGW3NGhZaj+GUCveFgl5oI54pY4BgiLmYm97y+zg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.1.5.tgz", + "integrity": "sha512-zEG0lt+Bl/r5U6e0TOS7qDbsXICtemfAPquxWFsMbdzrvlWaqMGemLl+sjVpqlyaaiCiGVQBSGdCk0t1qXjkQg==", "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/mdx": "^2.0.0", @@ -1093,9 +1093,9 @@ } }, "node_modules/@mdx-js/rollup": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-2.1.3.tgz", - "integrity": "sha512-KaX9GcZ63TDaLNH9UYYE94+naZQldV2IUzmMkDVOlPxDtTh8kcEn8l6/4W1P79wxZZbakSOFejTuaYmcstl5sA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-2.1.5.tgz", + "integrity": "sha512-l90rSiwnEf6PnjH8uRXjZ1W0rR8p1fp1YIiDuA3uF7SOfxMQ98uymaIwI6BsX+8BC2dcWij7Racwp++JkvdOLQ==", "dependencies": { "@mdx-js/mdx": "^2.0.0", "@rollup/pluginutils": "^4.0.0", @@ -1357,9 +1357,9 @@ } }, "node_modules/@types/mdx": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.2.tgz", - "integrity": "sha512-mJGfgj4aWpiKb8C0nnJJchs1sHBHn0HugkVfqqyQi7Wn6mBRksLeQsPOFvih/Pu8L1vlDzfe/LidhVHBeUk3aQ==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.3.tgz", + "integrity": "sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==" }, "node_modules/@types/ms": { "version": "0.7.31", @@ -1375,9 +1375,9 @@ } }, "node_modules/@types/node": { - "version": "14.18.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.31.tgz", - "integrity": "sha512-vQAnaReSQkEDa8uwAyQby8bYGKu84R/deEc6mg5T8fX6gzCn8QW6rziSgsti1fNvsrswKUKPnVTi7uoB+u62Mw==" + "version": "14.18.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.33.tgz", + "integrity": "sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -1433,9 +1433,9 @@ "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==" }, "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "bin": { "acorn": "bin/acorn" }, @@ -1666,11 +1666,11 @@ } }, "node_modules/astro": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/astro/-/astro-1.4.4.tgz", - "integrity": "sha512-vxuHJ8C/3/NDau6EDUvi83JFDBK5Ylmo6VGAsUkdnutpGw77I4NoapoN56ANmU54ucYiu+x0apEPQvesY6GZiQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/astro/-/astro-1.6.1.tgz", + "integrity": "sha512-fECZFVxoSI0Yt76M57m6jf6jJ14I8IHfy0hR+WuahpWsbshijDBrK8RQ6pNwhaE1JzIbBQtYa34+BY0RSkwKNg==", "dependencies": { - "@astrojs/compiler": "^0.25.0", + "@astrojs/compiler": "^0.28.0", "@astrojs/language-server": "^0.26.2", "@astrojs/markdown-remark": "^1.1.3", "@astrojs/telemetry": "^1.0.1", @@ -1691,6 +1691,7 @@ "common-ancestor-path": "^1.0.1", "cookie": "^0.5.0", "debug": "^4.3.4", + "deepmerge-ts": "^4.2.2", "diff": "^5.1.0", "eol": "^0.9.1", "es-module-lexer": "^0.10.5", @@ -1701,6 +1702,7 @@ "gray-matter": "^4.0.3", "html-entities": "^2.3.3", "html-escaper": "^3.0.3", + "import-meta-resolve": "^2.1.0", "kleur": "^4.1.4", "magic-string": "^0.25.9", "mime": "^3.0.0", @@ -1714,7 +1716,7 @@ "recast": "^0.20.5", "rehype": "^12.0.1", "resolve": "^1.22.0", - "rollup": "~2.78.0", + "rollup": "^2.79.1", "semver": "^7.3.7", "shiki": "^0.11.1", "sirv": "^2.0.2", @@ -1726,7 +1728,8 @@ "typescript": "*", "unist-util-visit": "^4.1.0", "vfile": "^5.3.2", - "vite": "~3.1.3", + "vite": "~3.2.1", + "vitefu": "^0.1.0", "yargs-parser": "^21.0.1", "zod": "^3.17.3" }, @@ -1739,114 +1742,23 @@ } }, "node_modules/astro-compress": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/astro-compress/-/astro-compress-1.0.12.tgz", - "integrity": "sha512-yn/QUoG7ah+cSUGUsohzHhUot+pNodfInPoIuRC3pdUfw94c4U0HQ2tJv5d+u75LSNqDxn9/W/OIoGqqgZbCDQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/astro-compress/-/astro-compress-1.1.1.tgz", + "integrity": "sha512-T25dDubB7/9nNvlVHT8zi5XQbaQZPCMNb/Oq4D7C5ZYlIm4QJftPHnHodAE8qRHllTPZJCh0RCAiIaQlcPwsVg==", "dependencies": { "csso": "5.0.5", "deepmerge-ts": "4.2.2", "fast-glob": "3.2.12", "html-minifier-terser": "7.0.0", "sharp": "0.31.1", - "svgo": "2.8.0", + "svgo": "3.0.0", "terser": "5.15.1" } }, - "node_modules/astro/node_modules/execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/astro/node_modules/human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/astro/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/astro/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/astro/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/astro/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/astro/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/astro/node_modules/rollup": { - "version": "2.78.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", - "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "bin": { "rollup": "dist/bin/rollup" }, @@ -1857,17 +1769,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/astro/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -1878,9 +1779,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.12", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", - "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", "funding": [ { "type": "opencollective", @@ -1893,7 +1794,7 @@ ], "dependencies": { "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001407", + "caniuse-lite": "^1.0.30001426", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -1952,9 +1853,9 @@ } }, "node_modules/bl": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz", - "integrity": "sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", "dependencies": { "buffer": "^6.0.3", "inherits": "^2.0.4", @@ -2180,9 +2081,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001416", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001416.tgz", - "integrity": "sha512-06wzzdAkCPZO+Qm4e/eNghZBDfVNDsCgw33T27OwBH9unE9S478OYw//Q2L7Npf/zBzs7rjZOszIFQkwQKAEqA==", + "version": "1.0.30001426", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001426.tgz", + "integrity": "sha512-n7cosrHLl8AWt0wwZw/PJZgUg3lV0gk9LMI7ikGJwhyhgsd2Nb65vKvmSexCqq/J7rbH3mFG6yZZiPR5dLPW5A==", "funding": [ { "type": "opencollective", @@ -2290,9 +2191,9 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "node_modules/ci-info": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz", - "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==" + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", + "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==" }, "node_modules/clean-css": { "version": "5.2.0", @@ -2479,12 +2380,9 @@ "dev": true }, "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { "version": "0.5.0", @@ -2548,14 +2446,14 @@ } }, "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dependencies": { "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", "nth-check": "^2.0.1" }, "funding": { @@ -2710,11 +2608,14 @@ } }, "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dependencies": { "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/define-lazy-prop": { @@ -2741,9 +2642,12 @@ } }, "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/dequal": { "version": "2.0.3", @@ -2831,26 +2735,18 @@ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, "funding": { "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -2863,11 +2759,11 @@ ] }, "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dependencies": { - "domelementtype": "^2.2.0" + "domelementtype": "^2.3.0" }, "engines": { "node": ">= 4" @@ -2877,13 +2773,13 @@ } }, "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" @@ -2912,9 +2808,9 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/electron-to-chromium": { - "version": "1.4.274", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.274.tgz", - "integrity": "sha512-Fgn7JZQzq85I81FpKUNxVLAzoghy8JZJ4NIue+YfUYBbu1AkpgzFvNwzF/ZNZH9ElkmJD0TSWu1F2gTpw/zZlg==" + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "node_modules/emmet": { "version": "2.3.6", @@ -3412,6 +3308,28 @@ "node": ">=0.8.x" } }, + "node_modules/execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -3583,6 +3501,21 @@ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", "dev": true }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/find-yarn-workspace-root2": { "version": "1.2.16", "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz", @@ -3729,9 +3662,9 @@ "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" }, "node_modules/github-slugger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", - "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" }, "node_modules/glob": { "version": "7.2.3", @@ -4115,9 +4048,9 @@ } }, "node_modules/hastscript": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.0.2.tgz", - "integrity": "sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.1.0.tgz", + "integrity": "sha512-uBjaTTLN0MkCZxY/R2fWUOcu7FRtUVzKRO5P/RAfgsu3yFiMB1JWCO4AjeVkgHxAira1f2UecHK5WfS9QurlWA==", "dependencies": { "@types/hast": "^2.0.0", "comma-separated-tokens": "^2.0.0", @@ -4181,6 +4114,14 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -4594,9 +4535,9 @@ } }, "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dependencies": { "has": "^1.0.3" }, @@ -4690,6 +4631,17 @@ "node": ">=0.12.0" } }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-reference": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.0.tgz", @@ -4698,6 +4650,17 @@ "@types/estree": "*" } }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-unicode-supported": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", @@ -4890,6 +4853,20 @@ "node": ">=4" } }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -4918,9 +4895,9 @@ } }, "node_modules/log-symbols/node_modules/chalk": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.0.tgz", - "integrity": "sha512-56zD4khRTBoIyzUYAFgDDaPhUMN/fC/rySe6aZGqbj/VWiU2eI3l6ZLOtYGFZAV5v02mwPjtpzlrOveJiz5eZQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", + "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -5392,9 +5369,9 @@ } }, "node_modules/micromark": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.10.tgz", - "integrity": "sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", + "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", "funding": [ { "type": "GitHub Sponsors", @@ -6109,11 +6086,14 @@ } }, "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mimic-response": { @@ -6290,20 +6270,45 @@ "node": ">=0.10.0" } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dependencies": { - "boolbase": "^1.0.0" + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "engines": { "node": ">= 6" @@ -6326,14 +6331,14 @@ } }, "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dependencies": { - "mimic-fn": "^2.1.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6392,9 +6397,9 @@ } }, "node_modules/ora/node_modules/chalk": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.0.tgz", - "integrity": "sha512-56zD4khRTBoIyzUYAFgDDaPhUMN/fC/rySe6aZGqbj/VWiU2eI3l6ZLOtYGFZAV5v02mwPjtpzlrOveJiz5eZQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", + "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -6416,6 +6421,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ora/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ora/node_modules/restore-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", @@ -6440,6 +6467,42 @@ "node": ">=0.10.0" } }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -6547,6 +6610,14 @@ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -6608,6 +6679,14 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -6667,26 +6746,10 @@ "node": ">=8" } }, - "node_modules/pkg-dir/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, "node_modules/postcss": { - "version": "8.4.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", - "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", "funding": [ { "type": "opencollective", @@ -6769,11 +6832,11 @@ } }, "node_modules/postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", "dependencies": { - "postcss-selector-parser": "^6.0.6" + "postcss-selector-parser": "^6.0.10" }, "engines": { "node": ">=12.0" @@ -6842,82 +6905,6 @@ "node": ">=10" } }, - "node_modules/preferred-pm/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/preferred-pm/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/preferred-pm/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/preferred-pm/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/preferred-pm/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/preferred-pm/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/prettier": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", @@ -7027,6 +7014,17 @@ } ] }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -7057,14 +7055,6 @@ "pify": "^2.3.0" } }, - "node_modules/read-cache/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -7238,9 +7228,9 @@ } }, "node_modules/remark-mdx": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.3.tgz", - "integrity": "sha512-3SmtXOy9+jIaVctL8Cs3VAQInjRLGOwNXfrBB9KCT+EpJpKD3PQiy0x8hUNGyjQmdyOs40BqgPU7kYtH9uoR6w==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.5.tgz", + "integrity": "sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==", "dependencies": { "mdast-util-mdx": "^2.0.0", "micromark-extension-mdxjs": "^1.0.0" @@ -7396,6 +7386,30 @@ "node": ">=8" } }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/retext": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/retext/-/retext-8.1.0.tgz", @@ -7510,15 +7524,16 @@ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.2.3.tgz", + "integrity": "sha512-qfadtkY5kl0F5e4dXVdj2D+GtOdifasXHFMiL1SMf9ADQDv5Eti6xReef9FKj+iQPR2pvtqWna57s/PjARY4fg==", "peer": true, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=10.0.0" + "node": ">=14.18.0", + "npm": ">=8.0.0" }, "optionalDependencies": { "fsevents": "~2.3.2" @@ -7581,9 +7596,23 @@ } }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/safer-buffer": { "version": "2.1.2", @@ -7881,12 +7910,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -7895,25 +7918,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -7973,6 +7977,17 @@ "node": ">=0.10.0" } }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -8052,23 +8067,26 @@ } }, "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.0.tgz", + "integrity": "sha512-mSqPn6RDeNqJvCeqHERlfWJjd4crP/2PgFelil9WpTwC4D3okAUopPsH3lnEyl7ONXfDVyISOihDjO0uK8YVAA==", "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" + "css-select": "^5.1.0", + "css-tree": "^2.2.1", + "csso": "^5.0.5", + "picocolors": "^1.0.0" }, "bin": { "svgo": "bin/svgo" }, "engines": { - "node": ">=10.13.0" + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" } }, "node_modules/svgo/node_modules/commander": { @@ -8079,42 +8097,6 @@ "node": ">= 10" } }, - "node_modules/svgo/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/svgo/node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/svgo/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/svgo/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/synckit": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.7.3.tgz", @@ -8131,9 +8113,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz", - "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.1.tgz", + "integrity": "sha512-Uw+GVSxp5CM48krnjHObqoOwlCt5Qo6nw1jlCRwfGy68dSYb/LwS9ZFidYGRiM+w6rMawkZiu1mEMAsHYAfoLg==", "dependencies": { "arg": "^5.0.2", "chokidar": "^3.5.3", @@ -8141,18 +8123,19 @@ "detective": "^5.2.1", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.11", + "fast-glob": "^3.2.12", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.14", + "postcss": "^8.4.17", "postcss-import": "^14.1.0", "postcss-js": "^4.0.0", "postcss-load-config": "^3.1.4", - "postcss-nested": "5.0.6", + "postcss-nested": "6.0.0", "postcss-selector-parser": "^6.0.10", "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", @@ -8185,17 +8168,6 @@ "node": ">=10.13.0" } }, - "node_modules/tailwindcss/node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", @@ -8523,17 +8495,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/unified/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/unist-builder": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz", @@ -8787,14 +8748,14 @@ } }, "node_modules/vite": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.5.tgz", - "integrity": "sha512-V4Avke0b7h2zTWVJf8vq6TE3aH061NQ3b1ixHQyqdoE/5HIVsxVLCyTLjJtHVcsJ5fIKSHvOtflWpgavHS8RPw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.1.tgz", + "integrity": "sha512-ADtMkfHuWq4tskJsri2n2FZkORO8ZyhI+zIz7zTrDAgDEtct1jdxOg3YsZBfHhKjmMoWLOSCr+64qrEDGo/DbQ==", "dependencies": { "esbuild": "^0.15.9", - "postcss": "^8.4.16", + "postcss": "^8.4.18", "resolve": "^1.22.1", - "rollup": "~2.78.0" + "rollup": "^2.79.1" }, "bin": { "vite": "bin/vite.js" @@ -8809,6 +8770,7 @@ "less": "*", "sass": "*", "stylus": "*", + "sugarss": "*", "terser": "^5.4.0" }, "peerDependenciesMeta": { @@ -8821,15 +8783,18 @@ "stylus": { "optional": true }, + "sugarss": { + "optional": true + }, "terser": { "optional": true } } }, "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.10.tgz", - "integrity": "sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz", + "integrity": "sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==", "cpu": [ "loong64" ], @@ -8842,9 +8807,9 @@ } }, "node_modules/vite/node_modules/esbuild": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.10.tgz", - "integrity": "sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz", + "integrity": "sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -8853,34 +8818,34 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.15.10", - "@esbuild/linux-loong64": "0.15.10", - "esbuild-android-64": "0.15.10", - "esbuild-android-arm64": "0.15.10", - "esbuild-darwin-64": "0.15.10", - "esbuild-darwin-arm64": "0.15.10", - "esbuild-freebsd-64": "0.15.10", - "esbuild-freebsd-arm64": "0.15.10", - "esbuild-linux-32": "0.15.10", - "esbuild-linux-64": "0.15.10", - "esbuild-linux-arm": "0.15.10", - "esbuild-linux-arm64": "0.15.10", - "esbuild-linux-mips64le": "0.15.10", - "esbuild-linux-ppc64le": "0.15.10", - "esbuild-linux-riscv64": "0.15.10", - "esbuild-linux-s390x": "0.15.10", - "esbuild-netbsd-64": "0.15.10", - "esbuild-openbsd-64": "0.15.10", - "esbuild-sunos-64": "0.15.10", - "esbuild-windows-32": "0.15.10", - "esbuild-windows-64": "0.15.10", - "esbuild-windows-arm64": "0.15.10" + "@esbuild/android-arm": "0.15.12", + "@esbuild/linux-loong64": "0.15.12", + "esbuild-android-64": "0.15.12", + "esbuild-android-arm64": "0.15.12", + "esbuild-darwin-64": "0.15.12", + "esbuild-darwin-arm64": "0.15.12", + "esbuild-freebsd-64": "0.15.12", + "esbuild-freebsd-arm64": "0.15.12", + "esbuild-linux-32": "0.15.12", + "esbuild-linux-64": "0.15.12", + "esbuild-linux-arm": "0.15.12", + "esbuild-linux-arm64": "0.15.12", + "esbuild-linux-mips64le": "0.15.12", + "esbuild-linux-ppc64le": "0.15.12", + "esbuild-linux-riscv64": "0.15.12", + "esbuild-linux-s390x": "0.15.12", + "esbuild-netbsd-64": "0.15.12", + "esbuild-openbsd-64": "0.15.12", + "esbuild-sunos-64": "0.15.12", + "esbuild-windows-32": "0.15.12", + "esbuild-windows-64": "0.15.12", + "esbuild-windows-arm64": "0.15.12" } }, "node_modules/vite/node_modules/esbuild-android-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.10.tgz", - "integrity": "sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz", + "integrity": "sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==", "cpu": [ "x64" ], @@ -8893,9 +8858,9 @@ } }, "node_modules/vite/node_modules/esbuild-android-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.10.tgz", - "integrity": "sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz", + "integrity": "sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==", "cpu": [ "arm64" ], @@ -8908,9 +8873,9 @@ } }, "node_modules/vite/node_modules/esbuild-darwin-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.10.tgz", - "integrity": "sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz", + "integrity": "sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==", "cpu": [ "x64" ], @@ -8923,9 +8888,9 @@ } }, "node_modules/vite/node_modules/esbuild-darwin-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.10.tgz", - "integrity": "sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz", + "integrity": "sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==", "cpu": [ "arm64" ], @@ -8938,9 +8903,9 @@ } }, "node_modules/vite/node_modules/esbuild-freebsd-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.10.tgz", - "integrity": "sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz", + "integrity": "sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==", "cpu": [ "x64" ], @@ -8953,9 +8918,9 @@ } }, "node_modules/vite/node_modules/esbuild-freebsd-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.10.tgz", - "integrity": "sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz", + "integrity": "sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==", "cpu": [ "arm64" ], @@ -8968,9 +8933,9 @@ } }, "node_modules/vite/node_modules/esbuild-linux-32": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.10.tgz", - "integrity": "sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz", + "integrity": "sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==", "cpu": [ "ia32" ], @@ -8983,9 +8948,9 @@ } }, "node_modules/vite/node_modules/esbuild-linux-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.10.tgz", - "integrity": "sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz", + "integrity": "sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==", "cpu": [ "x64" ], @@ -8998,9 +8963,9 @@ } }, "node_modules/vite/node_modules/esbuild-linux-arm": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.10.tgz", - "integrity": "sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz", + "integrity": "sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==", "cpu": [ "arm" ], @@ -9013,9 +8978,9 @@ } }, "node_modules/vite/node_modules/esbuild-linux-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.10.tgz", - "integrity": "sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz", + "integrity": "sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==", "cpu": [ "arm64" ], @@ -9028,9 +8993,9 @@ } }, "node_modules/vite/node_modules/esbuild-linux-mips64le": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.10.tgz", - "integrity": "sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz", + "integrity": "sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==", "cpu": [ "mips64el" ], @@ -9043,9 +9008,9 @@ } }, "node_modules/vite/node_modules/esbuild-linux-ppc64le": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.10.tgz", - "integrity": "sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz", + "integrity": "sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==", "cpu": [ "ppc64" ], @@ -9058,9 +9023,9 @@ } }, "node_modules/vite/node_modules/esbuild-linux-riscv64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.10.tgz", - "integrity": "sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz", + "integrity": "sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==", "cpu": [ "riscv64" ], @@ -9073,9 +9038,9 @@ } }, "node_modules/vite/node_modules/esbuild-linux-s390x": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.10.tgz", - "integrity": "sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz", + "integrity": "sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==", "cpu": [ "s390x" ], @@ -9088,9 +9053,9 @@ } }, "node_modules/vite/node_modules/esbuild-netbsd-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.10.tgz", - "integrity": "sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz", + "integrity": "sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==", "cpu": [ "x64" ], @@ -9103,9 +9068,9 @@ } }, "node_modules/vite/node_modules/esbuild-openbsd-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.10.tgz", - "integrity": "sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz", + "integrity": "sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==", "cpu": [ "x64" ], @@ -9118,9 +9083,9 @@ } }, "node_modules/vite/node_modules/esbuild-sunos-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.10.tgz", - "integrity": "sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz", + "integrity": "sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==", "cpu": [ "x64" ], @@ -9133,9 +9098,9 @@ } }, "node_modules/vite/node_modules/esbuild-windows-32": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.10.tgz", - "integrity": "sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz", + "integrity": "sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==", "cpu": [ "ia32" ], @@ -9148,9 +9113,9 @@ } }, "node_modules/vite/node_modules/esbuild-windows-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.10.tgz", - "integrity": "sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz", + "integrity": "sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==", "cpu": [ "x64" ], @@ -9163,9 +9128,9 @@ } }, "node_modules/vite/node_modules/esbuild-windows-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.10.tgz", - "integrity": "sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz", + "integrity": "sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==", "cpu": [ "arm64" ], @@ -9178,9 +9143,9 @@ } }, "node_modules/vite/node_modules/rollup": { - "version": "2.78.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", - "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "bin": { "rollup": "dist/bin/rollup" }, @@ -9191,6 +9156,22 @@ "fsevents": "~2.3.2" } }, + "node_modules/vitefu": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.1.0.tgz", + "integrity": "sha512-5MQSHP9yr0HIve8q4XNb7QXfO1P4tzZDZP99qH0FM5ClcwYddeGXRDQ4TQYRUeXLjZ+vLecirHtGNpwFFUF7sw==", + "dependencies": { + "import-meta-resolve": "^2.1.0" + }, + "peerDependencies": { + "vite": "^3.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, "node_modules/vscode-css-languageservice": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.1.1.tgz", @@ -9330,14 +9311,6 @@ "node": ">=4" } }, - "node_modules/which-pm/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, "node_modules/widest-line": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", @@ -9378,9 +9351,9 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz", - "integrity": "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "engines": { "node": ">=12" }, @@ -9431,6 +9404,17 @@ "node": ">=6" } }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zod": { "version": "3.19.1", "resolved": "https://registry.npmjs.org/zod/-/zod-3.19.1.tgz", @@ -9575,9 +9559,9 @@ } }, "@astrojs/compiler": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-0.25.2.tgz", - "integrity": "sha512-GE7uLvH7rSHuTHdMun+867TWsgYNYsaGuhvXsywcaabl4W4n/3b1kzgzrIsrXYBo51J0k6qD33mVdsHdvwv5rw==" + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-0.28.1.tgz", + "integrity": "sha512-rcuQs5kcT6OshfJxXkZ2Tn61V4/5UAmvZKma/qmNhpAdBkGk6J/1gJ/Gxa2sAS6WNUjUyVo5BRrdsNGW36qkoQ==" }, "@astrojs/language-server": { "version": "0.26.2", @@ -9630,9 +9614,9 @@ } }, "@astrojs/mdx": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-0.11.4.tgz", - "integrity": "sha512-b86Fzd87OCuYUGk7O59mwq0URqLdH40wUJC5UCkFmSquIrk8QNrZ7tdjriBfF+Wq3+2UT5JO4ahxIuP6N3cczQ==", + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-0.11.5.tgz", + "integrity": "sha512-zSlMX5unK4aIfg6NeYzlw0erLtvKpk71FWo11jYsMmmajYSU2JUk6maKWewERXGuVoY2YpC4W4Fl5dPn6jYGdQ==", "requires": { "@astrojs/prism": "^1.0.1", "@mdx-js/mdx": "^2.1.2", @@ -9669,11 +9653,11 @@ } }, "@astrojs/partytown": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@astrojs/partytown/-/partytown-1.0.0.tgz", - "integrity": "sha512-rco5tOtBmmZ7mpoHFyARrMb5yKVJPwLghN9lFvl+R867E+0xRp6ZzP5o7pMySgZCUq093qzd1bkAsVS2I/8gpg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@astrojs/partytown/-/partytown-1.0.1.tgz", + "integrity": "sha512-JVmKwQa2aWMAmz3tkNHtg5hw7gOTI6ROyFIYcUQtN6j8aysEiWKnt4xzz67RvDWId1h7sIde87UeH+4YoEyGug==", "requires": { - "@builder.io/partytown": "^0.4.5", + "@builder.io/partytown": "^0.7.1", "mrmime": "^1.0.0" } }, @@ -9686,9 +9670,9 @@ } }, "@astrojs/rss": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-1.0.2.tgz", - "integrity": "sha512-WPMW5a3D+nAbuu/i7LANfp1GnVrdnzcsUNrR7o8IvPJXJMjVGtDqdUqNDj20Rj3rwcWbOL2KVvGPMjCqx0tRWQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-1.0.3.tgz", + "integrity": "sha512-SkAUMnp/LpryOR5B69rlF69AjKE3YlIPRmWad5WoRVeAH1CEEvSh8sC8/qhtG9haPFYa9JoX6zp5V5MkUOop3A==", "requires": { "fast-xml-parser": "^4.0.8" } @@ -9703,9 +9687,9 @@ } }, "@astrojs/tailwind": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@astrojs/tailwind/-/tailwind-2.0.2.tgz", - "integrity": "sha512-SDQYqrOLwrRdDzjoSs6Ha2YQzWJlzWnPTZM5t0aWoHukm3JPQg/omDTpiz/XqT4vupYMOsBQZ9WBuNyWVtMrVg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@astrojs/tailwind/-/tailwind-2.1.1.tgz", + "integrity": "sha512-Il6FODtu4AlwadleJS3VWmAOOmeCDKvAo3iof46p4iHtdeWLClyuH9kJXWrlzCS+QOfBSIfXxvwPJ3cbK5COlA==", "requires": { "@proload/core": "^0.3.2", "autoprefixer": "^10.4.7", @@ -9745,25 +9729,25 @@ } }, "@babel/compat-data": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz", - "integrity": "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==" + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.0.tgz", + "integrity": "sha512-Gt9jszFJYq7qzXVK4slhc6NzJXnOVmRECWcVjF/T23rNXD9NtWQ0W3qxdg+p9wWIB+VQw3GYV/U2Ha9bRTfs4w==" }, "@babel/core": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", - "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", + "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.3", + "@babel/generator": "^7.19.6", "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.0", - "@babel/helpers": "^7.19.0", - "@babel/parser": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helpers": "^7.19.4", + "@babel/parser": "^7.19.6", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.3", - "@babel/types": "^7.19.3", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -9779,11 +9763,11 @@ } }, "@babel/generator": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz", - "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.0.tgz", + "integrity": "sha512-GUPcXxWibClgmYJuIwC2Bc2Lg+8b9VjaJ+HlNdACEVt+Wlr1eoU1OPZjZRm7Hzl0gaTsUZNQfeihvZJhG7oc3w==", "requires": { - "@babel/types": "^7.19.3", + "@babel/types": "^7.20.0", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -9809,11 +9793,11 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", - "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", "requires": { - "@babel/compat-data": "^7.19.3", + "@babel/compat-data": "^7.20.0", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", "semver": "^6.3.0" @@ -9857,18 +9841,18 @@ } }, "@babel/helper-module-transforms": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", - "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", + "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-simple-access": "^7.19.4", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4" } }, "@babel/helper-plugin-utils": { @@ -9877,11 +9861,11 @@ "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" }, "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.19.4" } }, "@babel/helper-split-export-declaration": { @@ -9893,9 +9877,9 @@ } }, "@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==" + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" }, "@babel/helper-validator-identifier": { "version": "7.19.1", @@ -9908,13 +9892,13 @@ "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" }, "@babel/helpers": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", - "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.0.tgz", + "integrity": "sha512-aGMjYraN0zosCEthoGLdqot1oRsmxVTQRHadsUPz5QM44Zej2PYRz7XiDE7GqnkZnNtLbOuxqoZw42vkU7+XEQ==", "requires": { "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0" } }, "@babel/highlight": { @@ -9928,9 +9912,9 @@ } }, "@babel/parser": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz", - "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==" + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.0.tgz", + "integrity": "sha512-G9VgAhEaICnz8iiJeGJQyVl6J2nTjbW0xeisva0PK6XcKsga7BIaqm4ZF8Rg1Wbaqmy6znspNqhPaPkyukujzg==" }, "@babel/plugin-syntax-jsx": { "version": "7.18.6", @@ -9963,36 +9947,36 @@ } }, "@babel/traverse": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz", - "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.0.tgz", + "integrity": "sha512-5+cAXQNARgjRUK0JWu2UBwja4JLSO/rBMPJzpsKb+oBF5xlUuCfljQepS4XypBQoiigL0VQjTZy6WiONtUdScQ==", "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.3", + "@babel/generator": "^7.20.0", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.3", - "@babel/types": "^7.19.3", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz", - "integrity": "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz", + "integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==", "requires": { - "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } }, "@builder.io/partytown": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@builder.io/partytown/-/partytown-0.4.5.tgz", - "integrity": "sha512-HcHlmMYSpOxfJ0lFVxgZrvgIjz1Q8knlGuWkBpvjIp68j+xVWg969+sn7BCfyKhcGaYlnVOY/CEBHapQBcl0jw==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@builder.io/partytown/-/partytown-0.7.1.tgz", + "integrity": "sha512-hvu2gG9NDtCa5aoL4JkvDe3E5SegXlHAkhtA+Az96uTtFA0PYuEPjDYGiayGTkZuRKUmxetebWjIFgSDNdlBOw==" }, "@commitlint/config-validator": { "version": "17.1.0", @@ -10215,9 +10199,9 @@ "integrity": "sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==" }, "@esbuild/android-arm": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.10.tgz", - "integrity": "sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.12.tgz", + "integrity": "sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==", "optional": true }, "@esbuild/linux-loong64": { @@ -10272,12 +10256,12 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "@ljharb/has-package-exports-patterns": { @@ -10286,9 +10270,9 @@ "integrity": "sha512-4/RWEeXDO6bocPONheFe6gX/oQdP/bEpv0oL4HqjPP5DCenBSt0mHgahppY49N0CpsaqffdwPq+TlX9CYOq2Dw==" }, "@mdx-js/mdx": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.1.3.tgz", - "integrity": "sha512-ahbb47HJIJ4xnifaL06tDJiSyLEy1EhFAStO7RZIm3GTa7yGW3NGhZaj+GUCveFgl5oI54pY4BgiLmYm97y+zg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.1.5.tgz", + "integrity": "sha512-zEG0lt+Bl/r5U6e0TOS7qDbsXICtemfAPquxWFsMbdzrvlWaqMGemLl+sjVpqlyaaiCiGVQBSGdCk0t1qXjkQg==", "requires": { "@types/estree-jsx": "^1.0.0", "@types/mdx": "^2.0.0", @@ -10310,9 +10294,9 @@ } }, "@mdx-js/rollup": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-2.1.3.tgz", - "integrity": "sha512-KaX9GcZ63TDaLNH9UYYE94+naZQldV2IUzmMkDVOlPxDtTh8kcEn8l6/4W1P79wxZZbakSOFejTuaYmcstl5sA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-2.1.5.tgz", + "integrity": "sha512-l90rSiwnEf6PnjH8uRXjZ1W0rR8p1fp1YIiDuA3uF7SOfxMQ98uymaIwI6BsX+8BC2dcWij7Racwp++JkvdOLQ==", "requires": { "@mdx-js/mdx": "^2.0.0", "@rollup/pluginutils": "^4.0.0", @@ -10540,9 +10524,9 @@ } }, "@types/mdx": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.2.tgz", - "integrity": "sha512-mJGfgj4aWpiKb8C0nnJJchs1sHBHn0HugkVfqqyQi7Wn6mBRksLeQsPOFvih/Pu8L1vlDzfe/LidhVHBeUk3aQ==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.3.tgz", + "integrity": "sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==" }, "@types/ms": { "version": "0.7.31", @@ -10558,9 +10542,9 @@ } }, "@types/node": { - "version": "14.18.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.31.tgz", - "integrity": "sha512-vQAnaReSQkEDa8uwAyQby8bYGKu84R/deEc6mg5T8fX6gzCn8QW6rziSgsti1fNvsrswKUKPnVTi7uoB+u62Mw==" + "version": "14.18.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.33.tgz", + "integrity": "sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==" }, "@types/parse-json": { "version": "4.0.0", @@ -10618,9 +10602,9 @@ } }, "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" }, "acorn-jsx": { "version": "5.3.2", @@ -10793,11 +10777,11 @@ "integrity": "sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A==" }, "astro": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/astro/-/astro-1.4.4.tgz", - "integrity": "sha512-vxuHJ8C/3/NDau6EDUvi83JFDBK5Ylmo6VGAsUkdnutpGw77I4NoapoN56ANmU54ucYiu+x0apEPQvesY6GZiQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/astro/-/astro-1.6.1.tgz", + "integrity": "sha512-fECZFVxoSI0Yt76M57m6jf6jJ14I8IHfy0hR+WuahpWsbshijDBrK8RQ6pNwhaE1JzIbBQtYa34+BY0RSkwKNg==", "requires": { - "@astrojs/compiler": "^0.25.0", + "@astrojs/compiler": "^0.28.0", "@astrojs/language-server": "^0.26.2", "@astrojs/markdown-remark": "^1.1.3", "@astrojs/telemetry": "^1.0.1", @@ -10818,6 +10802,7 @@ "common-ancestor-path": "^1.0.1", "cookie": "^0.5.0", "debug": "^4.3.4", + "deepmerge-ts": "^4.2.2", "diff": "^5.1.0", "eol": "^0.9.1", "es-module-lexer": "^0.10.5", @@ -10828,6 +10813,7 @@ "gray-matter": "^4.0.3", "html-entities": "^2.3.3", "html-escaper": "^3.0.3", + "import-meta-resolve": "^2.1.0", "kleur": "^4.1.4", "magic-string": "^0.25.9", "mime": "^3.0.0", @@ -10841,7 +10827,7 @@ "recast": "^0.20.5", "rehype": "^12.0.1", "resolve": "^1.22.0", - "rollup": "~2.78.0", + "rollup": "^2.79.1", "semver": "^7.3.7", "shiki": "^0.11.1", "sirv": "^2.0.2", @@ -10853,89 +10839,33 @@ "typescript": "*", "unist-util-visit": "^4.1.0", "vfile": "^5.3.2", - "vite": "~3.1.3", + "vite": "~3.2.1", + "vitefu": "^0.1.0", "yargs-parser": "^21.0.1", "zod": "^3.17.3" }, "dependencies": { - "execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - } - }, - "human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==" - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" - }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "requires": { - "path-key": "^4.0.0" - } - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" - }, "rollup": { - "version": "2.78.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", - "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "requires": { "fsevents": "~2.3.2" } - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" } } }, "astro-compress": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/astro-compress/-/astro-compress-1.0.12.tgz", - "integrity": "sha512-yn/QUoG7ah+cSUGUsohzHhUot+pNodfInPoIuRC3pdUfw94c4U0HQ2tJv5d+u75LSNqDxn9/W/OIoGqqgZbCDQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/astro-compress/-/astro-compress-1.1.1.tgz", + "integrity": "sha512-T25dDubB7/9nNvlVHT8zi5XQbaQZPCMNb/Oq4D7C5ZYlIm4QJftPHnHodAE8qRHllTPZJCh0RCAiIaQlcPwsVg==", "requires": { "csso": "5.0.5", "deepmerge-ts": "4.2.2", "fast-glob": "3.2.12", "html-minifier-terser": "7.0.0", "sharp": "0.31.1", - "svgo": "2.8.0", + "svgo": "3.0.0", "terser": "5.15.1" } }, @@ -10946,12 +10876,12 @@ "dev": true }, "autoprefixer": { - "version": "10.4.12", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", - "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", "requires": { "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001407", + "caniuse-lite": "^1.0.30001426", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -10980,9 +10910,9 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "bl": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz", - "integrity": "sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", "requires": { "buffer": "^6.0.3", "inherits": "^2.0.4", @@ -11135,9 +11065,9 @@ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" }, "caniuse-lite": { - "version": "1.0.30001416", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001416.tgz", - "integrity": "sha512-06wzzdAkCPZO+Qm4e/eNghZBDfVNDsCgw33T27OwBH9unE9S478OYw//Q2L7Npf/zBzs7rjZOszIFQkwQKAEqA==" + "version": "1.0.30001426", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001426.tgz", + "integrity": "sha512-n7cosrHLl8AWt0wwZw/PJZgUg3lV0gk9LMI7ikGJwhyhgsd2Nb65vKvmSexCqq/J7rbH3mFG6yZZiPR5dLPW5A==" }, "ccount": { "version": "2.0.1", @@ -11201,9 +11131,9 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "ci-info": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz", - "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==" + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", + "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==" }, "clean-css": { "version": "5.2.0", @@ -11346,12 +11276,9 @@ "dev": true }, "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "requires": { - "safe-buffer": "~5.1.1" - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "cookie": { "version": "0.5.0", @@ -11397,14 +11324,14 @@ } }, "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "requires": { "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, @@ -11501,9 +11428,9 @@ "integrity": "sha512-Ka3Kb21tiWjvQvS9U+1Dx+aqFAHsdTnMdYptLTmC2VAmDFMugWMY1e15aTODstipmCun8iNuqeSfcx6rsUUk0Q==" }, "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "requires": { "clone": "^1.0.2" } @@ -11523,9 +11450,9 @@ } }, "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==" }, "dequal": { "version": "2.0.3", @@ -11589,20 +11516,13 @@ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "dependencies": { - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - } + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" } }, "domelementtype": { @@ -11611,21 +11531,21 @@ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" }, "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "requires": { - "domelementtype": "^2.2.0" + "domelementtype": "^2.3.0" } }, "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" } }, "dot-case": { @@ -11648,9 +11568,9 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "electron-to-chromium": { - "version": "1.4.274", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.274.tgz", - "integrity": "sha512-Fgn7JZQzq85I81FpKUNxVLAzoghy8JZJ4NIue+YfUYBbu1AkpgzFvNwzF/ZNZH9ElkmJD0TSWu1F2gTpw/zZlg==" + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "emmet": { "version": "2.3.6", @@ -11919,6 +11839,22 @@ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, + "execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, "expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -12042,6 +11978,15 @@ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", "dev": true }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, "find-yarn-workspace-root2": { "version": "1.2.16", "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz", @@ -12150,9 +12095,9 @@ "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" }, "github-slugger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", - "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" }, "glob": { "version": "7.2.3", @@ -12442,9 +12387,9 @@ "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==" }, "hastscript": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.0.2.tgz", - "integrity": "sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.1.0.tgz", + "integrity": "sha512-uBjaTTLN0MkCZxY/R2fWUOcu7FRtUVzKRO5P/RAfgsu3yFiMB1JWCO4AjeVkgHxAira1f2UecHK5WfS9QurlWA==", "requires": { "@types/hast": "^2.0.0", "comma-separated-tokens": "^2.0.0", @@ -12491,6 +12436,11 @@ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==" }, + "human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==" + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -12773,9 +12723,9 @@ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "requires": { "has": "^1.0.3" } @@ -12828,6 +12778,11 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" + }, "is-reference": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.0.tgz", @@ -12836,6 +12791,11 @@ "@types/estree": "*" } }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + }, "is-unicode-supported": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", @@ -12976,6 +12936,14 @@ } } }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -12998,9 +12966,9 @@ }, "dependencies": { "chalk": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.0.tgz", - "integrity": "sha512-56zD4khRTBoIyzUYAFgDDaPhUMN/fC/rySe6aZGqbj/VWiU2eI3l6ZLOtYGFZAV5v02mwPjtpzlrOveJiz5eZQ==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", + "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==" } } }, @@ -13359,9 +13327,9 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "micromark": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.10.tgz", - "integrity": "sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", + "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", "requires": { "@types/debug": "^4.0.0", "debug": "^4.0.0", @@ -13779,9 +13747,9 @@ "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" }, "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" }, "mimic-response": { "version": "3.1.0", @@ -13900,6 +13868,21 @@ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "requires": { + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" + } + } + }, "nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -13927,11 +13910,11 @@ } }, "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "requires": { - "mimic-fn": "^2.1.0" + "mimic-fn": "^4.0.0" } }, "open": { @@ -13968,9 +13951,9 @@ }, "dependencies": { "chalk": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.0.tgz", - "integrity": "sha512-56zD4khRTBoIyzUYAFgDDaPhUMN/fC/rySe6aZGqbj/VWiU2eI3l6ZLOtYGFZAV5v02mwPjtpzlrOveJiz5eZQ==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", + "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==" }, "cli-cursor": { "version": "4.0.0", @@ -13980,6 +13963,19 @@ "restore-cursor": "^4.0.0" } }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, "restore-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", @@ -13997,6 +13993,27 @@ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, "param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -14084,6 +14101,11 @@ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -14130,6 +14152,11 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -14170,23 +14197,13 @@ "requires": { "p-limit": "^2.2.0" } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" } } }, "postcss": { - "version": "8.4.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", - "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", "requires": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", @@ -14221,11 +14238,11 @@ } }, "postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", "requires": { - "postcss-selector-parser": "^6.0.6" + "postcss-selector-parser": "^6.0.10" } }, "postcss-selector-parser": { @@ -14270,51 +14287,6 @@ "find-yarn-workspace-root2": "1.2.16", "path-exists": "^4.0.0", "which-pm": "2.0.0" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - } } }, "prettier": { @@ -14387,6 +14359,11 @@ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -14411,13 +14388,6 @@ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "requires": { "pify": "^2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - } } }, "readable-stream": { @@ -14546,9 +14516,9 @@ } }, "remark-mdx": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.3.tgz", - "integrity": "sha512-3SmtXOy9+jIaVctL8Cs3VAQInjRLGOwNXfrBB9KCT+EpJpKD3PQiy0x8hUNGyjQmdyOs40BqgPU7kYtH9uoR6w==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.5.tgz", + "integrity": "sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==", "requires": { "mdast-util-mdx": "^2.0.0", "micromark-extension-mdxjs": "^1.0.0" @@ -14658,6 +14628,23 @@ "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } } }, "retext": { @@ -14749,9 +14736,9 @@ } }, "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.2.3.tgz", + "integrity": "sha512-qfadtkY5kl0F5e4dXVdj2D+GtOdifasXHFMiL1SMf9ADQDv5Eti6xReef9FKj+iQPR2pvtqWna57s/PjARY4fg==", "peer": true, "requires": { "fsevents": "~2.3.2" @@ -14794,9 +14781,9 @@ } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { "version": "2.1.2", @@ -15013,24 +15000,12 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } } }, "string-width": { @@ -15070,6 +15045,11 @@ "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -15130,50 +15110,22 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.0.tgz", + "integrity": "sha512-mSqPn6RDeNqJvCeqHERlfWJjd4crP/2PgFelil9WpTwC4D3okAUopPsH3lnEyl7ONXfDVyISOihDjO0uK8YVAA==", "requires": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" + "css-select": "^5.1.0", + "css-tree": "^2.2.1", + "csso": "^5.0.5", + "picocolors": "^1.0.0" }, "dependencies": { "commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "requires": { - "css-tree": "^1.1.2" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -15187,9 +15139,9 @@ } }, "tailwindcss": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz", - "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.1.tgz", + "integrity": "sha512-Uw+GVSxp5CM48krnjHObqoOwlCt5Qo6nw1jlCRwfGy68dSYb/LwS9ZFidYGRiM+w6rMawkZiu1mEMAsHYAfoLg==", "requires": { "arg": "^5.0.2", "chokidar": "^3.5.3", @@ -15197,18 +15149,19 @@ "detective": "^5.2.1", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.11", + "fast-glob": "^3.2.12", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.14", + "postcss": "^8.4.17", "postcss-import": "^14.1.0", "postcss-js": "^4.0.0", "postcss-load-config": "^3.1.4", - "postcss-nested": "5.0.6", + "postcss-nested": "6.0.0", "postcss-selector-parser": "^6.0.10", "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", @@ -15227,11 +15180,6 @@ "requires": { "is-glob": "^4.0.3" } - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" } } }, @@ -15458,13 +15406,6 @@ "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^5.0.0" - }, - "dependencies": { - "is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" - } } }, "unist-builder": { @@ -15635,182 +15576,190 @@ } }, "vite": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.5.tgz", - "integrity": "sha512-V4Avke0b7h2zTWVJf8vq6TE3aH061NQ3b1ixHQyqdoE/5HIVsxVLCyTLjJtHVcsJ5fIKSHvOtflWpgavHS8RPw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.1.tgz", + "integrity": "sha512-ADtMkfHuWq4tskJsri2n2FZkORO8ZyhI+zIz7zTrDAgDEtct1jdxOg3YsZBfHhKjmMoWLOSCr+64qrEDGo/DbQ==", "requires": { "esbuild": "^0.15.9", "fsevents": "~2.3.2", - "postcss": "^8.4.16", + "postcss": "^8.4.18", "resolve": "^1.22.1", - "rollup": "~2.78.0" + "rollup": "^2.79.1" }, "dependencies": { "@esbuild/linux-loong64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.10.tgz", - "integrity": "sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz", + "integrity": "sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==", "optional": true }, "esbuild": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.10.tgz", - "integrity": "sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz", + "integrity": "sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==", "requires": { - "@esbuild/android-arm": "0.15.10", - "@esbuild/linux-loong64": "0.15.10", - "esbuild-android-64": "0.15.10", - "esbuild-android-arm64": "0.15.10", - "esbuild-darwin-64": "0.15.10", - "esbuild-darwin-arm64": "0.15.10", - "esbuild-freebsd-64": "0.15.10", - "esbuild-freebsd-arm64": "0.15.10", - "esbuild-linux-32": "0.15.10", - "esbuild-linux-64": "0.15.10", - "esbuild-linux-arm": "0.15.10", - "esbuild-linux-arm64": "0.15.10", - "esbuild-linux-mips64le": "0.15.10", - "esbuild-linux-ppc64le": "0.15.10", - "esbuild-linux-riscv64": "0.15.10", - "esbuild-linux-s390x": "0.15.10", - "esbuild-netbsd-64": "0.15.10", - "esbuild-openbsd-64": "0.15.10", - "esbuild-sunos-64": "0.15.10", - "esbuild-windows-32": "0.15.10", - "esbuild-windows-64": "0.15.10", - "esbuild-windows-arm64": "0.15.10" + "@esbuild/android-arm": "0.15.12", + "@esbuild/linux-loong64": "0.15.12", + "esbuild-android-64": "0.15.12", + "esbuild-android-arm64": "0.15.12", + "esbuild-darwin-64": "0.15.12", + "esbuild-darwin-arm64": "0.15.12", + "esbuild-freebsd-64": "0.15.12", + "esbuild-freebsd-arm64": "0.15.12", + "esbuild-linux-32": "0.15.12", + "esbuild-linux-64": "0.15.12", + "esbuild-linux-arm": "0.15.12", + "esbuild-linux-arm64": "0.15.12", + "esbuild-linux-mips64le": "0.15.12", + "esbuild-linux-ppc64le": "0.15.12", + "esbuild-linux-riscv64": "0.15.12", + "esbuild-linux-s390x": "0.15.12", + "esbuild-netbsd-64": "0.15.12", + "esbuild-openbsd-64": "0.15.12", + "esbuild-sunos-64": "0.15.12", + "esbuild-windows-32": "0.15.12", + "esbuild-windows-64": "0.15.12", + "esbuild-windows-arm64": "0.15.12" } }, "esbuild-android-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.10.tgz", - "integrity": "sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz", + "integrity": "sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==", "optional": true }, "esbuild-android-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.10.tgz", - "integrity": "sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz", + "integrity": "sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==", "optional": true }, "esbuild-darwin-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.10.tgz", - "integrity": "sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz", + "integrity": "sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==", "optional": true }, "esbuild-darwin-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.10.tgz", - "integrity": "sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz", + "integrity": "sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==", "optional": true }, "esbuild-freebsd-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.10.tgz", - "integrity": "sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz", + "integrity": "sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==", "optional": true }, "esbuild-freebsd-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.10.tgz", - "integrity": "sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz", + "integrity": "sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==", "optional": true }, "esbuild-linux-32": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.10.tgz", - "integrity": "sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz", + "integrity": "sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==", "optional": true }, "esbuild-linux-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.10.tgz", - "integrity": "sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz", + "integrity": "sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==", "optional": true }, "esbuild-linux-arm": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.10.tgz", - "integrity": "sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz", + "integrity": "sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==", "optional": true }, "esbuild-linux-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.10.tgz", - "integrity": "sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz", + "integrity": "sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==", "optional": true }, "esbuild-linux-mips64le": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.10.tgz", - "integrity": "sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz", + "integrity": "sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==", "optional": true }, "esbuild-linux-ppc64le": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.10.tgz", - "integrity": "sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz", + "integrity": "sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==", "optional": true }, "esbuild-linux-riscv64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.10.tgz", - "integrity": "sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz", + "integrity": "sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==", "optional": true }, "esbuild-linux-s390x": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.10.tgz", - "integrity": "sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz", + "integrity": "sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==", "optional": true }, "esbuild-netbsd-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.10.tgz", - "integrity": "sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz", + "integrity": "sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==", "optional": true }, "esbuild-openbsd-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.10.tgz", - "integrity": "sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz", + "integrity": "sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==", "optional": true }, "esbuild-sunos-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.10.tgz", - "integrity": "sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz", + "integrity": "sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==", "optional": true }, "esbuild-windows-32": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.10.tgz", - "integrity": "sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz", + "integrity": "sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==", "optional": true }, "esbuild-windows-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.10.tgz", - "integrity": "sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz", + "integrity": "sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==", "optional": true }, "esbuild-windows-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.10.tgz", - "integrity": "sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz", + "integrity": "sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==", "optional": true }, "rollup": { - "version": "2.78.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", - "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "requires": { "fsevents": "~2.3.2" } } } }, + "vitefu": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.1.0.tgz", + "integrity": "sha512-5MQSHP9yr0HIve8q4XNb7QXfO1P4tzZDZP99qH0FM5ClcwYddeGXRDQ4TQYRUeXLjZ+vLecirHtGNpwFFUF7sw==", + "requires": { + "import-meta-resolve": "^2.1.0" + } + }, "vscode-css-languageservice": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.1.1.tgz", @@ -15918,13 +15867,6 @@ "requires": { "load-yaml-file": "^0.2.0", "path-exists": "^4.0.0" - }, - "dependencies": { - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - } } }, "which-pm-runs": { @@ -15957,9 +15899,9 @@ }, "dependencies": { "ansi-styles": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz", - "integrity": "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" } } }, @@ -15994,6 +15936,11 @@ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "optional": true }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + }, "zod": { "version": "3.19.1", "resolved": "https://registry.npmjs.org/zod/-/zod-3.19.1.tgz", diff --git a/public/education-data.json b/public/education-data.json new file mode 100644 index 0000000..999a1b4 --- /dev/null +++ b/public/education-data.json @@ -0,0 +1,43 @@ +[ + { + "title": "Deep Learning Foundations", + "startDate": "01/2017", + "endDate": "08/2017", + "school": { + "name": "Udacity", + "url": "https://www.udacity.com" + }, + "body": "A nanodegree program at Udacity", + "items": [ + "The program syllabus include: Neural Networks, Convolutional Neural Networks, Recurrent Neural Networks, Generative Adversarial Networks", + "The 5 projects I built during the program - GitHub", + "Completion certificate" + ] + }, + { + "title": "Bachelor's degree in Computer Science and Business Administration", + "startDate": " 06/2011", + "endDate": "06/2016", + "school": { + "name": "The Open University of Israel", + "url": "https://www.linkedin.com/edu/school?id=162040&trk=edu-cp-title" + }, + "body": "", + "items": [ + "Seminar paper in Business Ethics course (grade: 85)", + "Final project was in Java: GitHub Repo (grade: 95)", + "GPA: 76" + ] + }, + { + "title": "High School diploma", + "startDate": "01/2004", + "endDate": "01/2008", + "school": { + "name": "Ora Modi'im High School", + "url": "https://oramodiim.tik-tak.net" + }, + "body": "Majoring in computer science at Ora Modi'im High School", + "items": ["GPA: 82"] + } +] diff --git a/public/skills-data.json b/public/skills-data.json new file mode 100644 index 0000000..25d2ab1 --- /dev/null +++ b/public/skills-data.json @@ -0,0 +1,96 @@ +[ + { + "category": "Architecture", + "items": [ + { "name": "Microservices", "code": "fas fa-code" }, + { "name": "RESTful APIs", "code": "fas fa-code" }, + { "name": "GraphQL", "code": "fas fa-code" }, + { "name": "Data Structures & Algorithms", "code": "fas fa-code" }, + { "name": "SasS / PasS", "code": "fas fa-code" }, + { "name": "Microservices", "code": "fas fa-code" }, + { "name": "TDD (Test Driven Development)", "code": "fas fa-code" } + ] + }, + { + "category": "FrontEnd", + "items": [ + { "name": "HTML", "code": "fa-brands fa-html5" }, + { "name": "CSS / SCSS (Bootstrap, UIkit, Tailwind CSS, Material Design)", "code": "fa-brands fa-css3-alt" }, + { "name": "JavaScript (jQuery, Ajax)", "code": "fa-brands fa-js" }, + { "name": "Angular (cli, ngrx, material)", "code": "fa-brands fa-angular" }, + { "name": "Vue (vue router, pinia)", "code": "fa-brands fa-vuejs" } + ] + }, + { + "category": "BackEnd", + "items": [ + { "name": "Java (Spring)", "code": "fa-brands fa-java" }, + { "name": "Node.js (TypeScript, Express.js, NestJS)", "code": "fa-brands fa-node-js" }, + { "name": "Python (Django, Flask, Sanic)", "code": "fa-brands fa-python" }, + { "name": "Golang", "code": "fa-brands fa-golang" } + ] + }, + { + "category": "Tests", + "items": [ + { "name": "Mocha", "code": "fa-duotone fa-mug-hot" }, + { "name": "Jest", "code": "fa-duotone fa-crown" }, + { "name": "Vitest", "code": "fa-duotone fa-cloud-bolt" } + ] + }, + { + "category": "Platforms", + "items": [ + { "name": "Linux", "code": "fa-brands fa-linux" }, + { "name": "Git", "code": "fa-brands fa-git-alt" }, + { "name": "GitHub", "code": "fa-brands fa-github" } + ] + }, + { + "category": "Tools", + "items": [ + { "name": "Bash", "code": "fa-solid fa-rectangle-terminal" }, + { "name": "Jekyll", "code": "fa-solid fa-pencil" }, + { "name": "Hugo", "code": "fa-brands fa-markdown" }, + { "name": "Electron", "code": "fa-regular fa-atom-simple" }, + { "name": "Gulp", "code": "fa-brands fa-gulp" }, + { "name": "Ionic", "code": "fa-light fa-solar-system" }, + { "name": "Yeoman", "code": "fa-solid fa-user-ninja" }, + { "name": "Astro", "code": "fa-duotone fa-user-astronaut" }, + { "name": "Vite", "code": "fa-solid fa-bolt-lightning" }, + { "name": "RabbitMQ", "code": "fa-solid fa-rabbit-running" } + ] + }, + { + "category": "Databases", + "items": [ + { "name": "PostgreSQL", "code": "fa-solid fa-elephant" }, + { "name": "MongoDB", "code": "fa-brands fa-envira" }, + { "name": "RethinkDB", "code": "fas fa-database" }, + { "name": "Redis", "code": "fa-regular fa-file-binary" } + ] + }, + { + "category": "Clouds & Devops", + "items": [ + { "name": "AWS", "code": "fa-brands fa-aws" }, + { "name": "Docker", "code": "fa-brands fa-docker" }, + { "name": "Kubernetes", "code": "fa-light fa-ship" }, + { "name": "fa-brands fa-digital-ocean", "code": "Digital Ocean" }, + { "name": "fa-brands fa-google", "code": "Google Cloud Platform" }, + { "name": "fas fa-project-diagram", "code": "CI / CD" }, + { "name": "fas fa-server", "code": "Load Balancing" }, + { "name": "fa-solid fa-router", "code": "NGINX" } + ] + }, + { + "category": "Others", + "items": [ + { "name": "Doing Pen Testing By Night", "code": "fas fa-lock-open-alt" }, + { "name": "Coffee Drinker", "code": "fas fa-coffee" }, + { "name": "Open Source Contributer", "code": "fas fa-bug" }, + { "name": "Unix (Linux & Mac) User", "code": "fas fa-laptop" }, + { "name": "Love To Play With Arduino & Raspberry Pi", "code": "fad fa-microchip" } + ] + } +] diff --git a/public/talks-data.json b/public/talks-data.json new file mode 100644 index 0000000..05293ba --- /dev/null +++ b/public/talks-data.json @@ -0,0 +1,26 @@ +[ + { + "future": false, + "image": "/about/talks/pipenv-the-future-of-python-dependency-management.webp", + "title": "Pipenv: The future of Python dependency management", + "date": "4/12/17", + "meetupUrl": "https://www.meetup.com/PyWeb-IL/events/245071494", + "downloadUrl": "/about/talks/pipenv-the-future-of-python-dependency-management.pptx" + }, + { + "future": false, + "image": "/about/talks/api-star.webp", + "title": "API Star - Next generation framework!", + "date": "6/11/17", + "meetupUrl": "https://www.meetup.com/PyWeb-IL/events/243985794", + "downloadUrl": "/about/talks/api-star.pptx" + }, + { + "future": false, + "image": "/about/talks/404-sql-db-not-found.webp", + "title": "404 SQL DB not found. Meet RethinkDB", + "date": "11/8/16", + "meetupUrl": "https://www.meetup.com/RethinkDB-Israel-Meetup/events/217336482", + "downloadUrl": "/about/talks/404-sql-db-not-found.pptx" + } +] diff --git a/public/work-data.json b/public/work-data.json new file mode 100644 index 0000000..f70e33c --- /dev/null +++ b/public/work-data.json @@ -0,0 +1,127 @@ +[ + { + "title": "Lead Software Engineer (Team Leader)", + "startDate": "01/2020", + "endDate": "Present", + "company": { + "name": "Cognyte (formerly a Verint company)", + "url": "https://www.linkedin.com/company/cognyte" + }, + "body": "", + "items": [ + "WebintPro LTD was acquired by Cognyte (formerly a Verint company).", + "Write a compelete data pipeline using RabbitMQ message broker.", + "Rewrite the backend microservices from Express.js to NestJS.", + "Build a CI/CD for an Electron desktop application using GitHub actions and GCP." + ] + }, + { + "title": "Lead Software Engineer (Team Leader)", + "startDate": "02/2017", + "endDate": "12/2019", + "company": { + "name": "WebintPro Ltd", + "url": "https://www.linkedin.com/company/3296384" + }, + "body": "", + "items": [ + "Formed a team (4 full stack developers) to develop and maintains a system to fetch, analyze, and save big data from social networks.", + "The backend services was written in Python with Sanic framework and Node.js with Express.js framework.", + "The frontend dashboard was written in Angular using ngrx, material, and D3.js.", + "Using Docker & Kubernetes for deployment on Google Cloud Platform, with a compelete CI/CD (tests, code reviews, dev environment, etc).", + "Implements a Microservices architecture with Pub/Sub.", + "Using Deep Learning methodologies to extract and analyze data. And save it in MongoDB, and Redis Databases.", + "Created the project from scratch, build the team, manage it, doing code reviews, etc." + ] + }, + { + "title": "Senior Full Stack Software Engineer", + "startDate": "12/2015", + "endDate": "01/2017", + "company": { + "name": "Gizra - Internet Solutions", + "url": "https://www.linkedin.com/company/1776824" + }, + "body": "", + "items": [ + "Developing a system to connect between companies on varies projects, tracking, and managing them, for the European Union.", + "The Frontend is build with HTML5, CSS3, Bootstrap, JS, and jQuery. Backend written with Drupal in PHP and MySQL Database.", + "Working with Git on GitHub, doing code reviews, and writing tests with Behat (runs on Travis-CI).", + "Builds a Docker image for the system, and integrate continuous deployment methods." + ] + }, + { + "title": "Lead Software Engineer, Volunteer", + "startDate": "10/2015", + "endDate": "01/2019", + "company": { + "name": "The Public Knowledge Workshop", + "url": "https://www.linkedin.com/company/2471778" + }, + "body": "", + "items": [ + "Take part in Hackita02 program and one of the founders of \"Ways Of Time\" project that enable the National Library of Israel to upload and geotag their geographic maps collection, and open them to the public (Python, Django, Leaflet, PostGIS, MDL).", + "Lead developer of version 2.x of the \"Open Pension\" project. The project mission is to reveal what happens behind the Israeli pension market, while enabling the public to trace the money and expose corruption (Python, Django, Scrapy, PostgreSQL, Angular, ngrx, d3.js).", + "Ways Of Time Repo | Open Pension Website Repo | Open Pension Crawler Repo" + ] + }, + { + "title": "Full Stack Software Engineer", + "startDate": "07/2015", + "endDate": "11/2015", + "company": { + "name": "Restart Group - IT | WEB | Mobile | People", + "url": "https://www.linkedin.com/company/2484049" + }, + "body": "", + "items": [ + "Part of a team that develops and maintains a financial system, from end to end, that handles thousands of transactions to offshore bank accounts.", + "Implement a new Front-end design built with HTML5, CSS3, Bootstrap, JS and jQuery.", + "Back-end written in PHP, and DB in MySQL.", + "Implement new banks APIs." + ] + }, + { + "title": "Internet Expert", + "startDate": "03/2011", + "endDate": "12/2012", + "company": { + "name": "Cellcom Israel, Ltd", + "url": "https://www.linkedin.com/company/162949" + }, + "body": "", + "items": [ + "Tier 2 customer Support Expert Team.", + "Knowledge focal point for representatives at specialized Call centers.", + "Handling top level customer escalations and Gold customers support.", + "Experience working on UNIX-based switches with HP-UX, And with SAP & Amdocs systems.", + "Responsible for converting two call centers (Haifa and Beer Sheva) to specialized centers (provide training, and supervision throughout the beginning of the activity until go-live operation)." + ] + }, + { + "title": "Internet Service Representitive", + "startDate": "11/2009", + "endDate": "02/2011", + "company": { + "name": "Cellcom Israel, Ltd", + "url": "https://www.linkedin.com/company/162949" + }, + "body": "", + "items": [ + "Tier 1 customer Support Team.", + "Handling customer requirements and providing solutions on Internet, data and technical problems.", + "Rated at the 10% of the Company's outstanding employees in 2010 and a leader in service in the internet and technical Customer Service Center in 2011." + ] + }, + { + "title": "Military service (shortened for health reasons)", + "startDate": "03/2009", + "endDate": "10/2009", + "company": { + "name": "IDF (Israel Defense Forces)", + "url": "https://www.linkedin.com/company/israeldefenseforces" + }, + "body": "Administrative role in the logistics department at Sde Dov Air Force base.", + "items": [] + } +] diff --git a/src/components/ArticleCard.astro b/src/components/ArticleCard.astro new file mode 100644 index 0000000..67e9b54 --- /dev/null +++ b/src/components/ArticleCard.astro @@ -0,0 +1,48 @@ +--- +const { post } = Astro.props; +--- + +
+ +

{post.frontmatter.title}

+
+ + + {`${post.frontmatter.title} + + +

+ { + post + .compiledContent() + .replace(/<[^>]*>?/gm, "") + .substring(0, 250) + } +

+ +
+ + published on + + + + + + + {post.frontmatter.category} + + +
+
diff --git a/src/layouts/BlogPost.astro b/src/layouts/BlogPost.astro index 620e1a6..f539ffc 100644 --- a/src/layouts/BlogPost.astro +++ b/src/layouts/BlogPost.astro @@ -1,5 +1,6 @@ --- import Layout from "./Layout.astro"; +import ArticleCard from "../components/ArticleCard.astro"; export interface Props { content: { @@ -9,18 +10,33 @@ export interface Props { authorLink: string; category: string; featuredImage: string; + tags: Array; }; } const { - content: { title, pubDate, author, authorLink, category, featuredImage }, + content: { title, pubDate, author, authorLink, category, featuredImage, tags }, headings, + url, } = Astro.props; const WORDS_PER_MINUTE = 200; const content = Astro.props.rawContent(); -const numberOfWords = content.split(/\s/g).length; +const numberOfWords = Math.floor(content.split(/\s/g).length * 0.95); const readTime = Math.ceil(numberOfWords / WORDS_PER_MINUTE); + +const mightLikePosts = (await Astro.glob("/src/pages/blog/**/*.{md,mdx}")) + .filter((post) => import.meta.env.MODE == "development" || !post.frontmatter.draft) + .filter((post) => post.url !== url) + .map((post) => { + const filteredArray = post.frontmatter.tags.filter((value: string) => tags.includes(value)); + const dupwPost = Object.assign({}, post); + dupwPost["match"] = filteredArray.length; + return dupwPost; + }) + .sort((a, b) => b.match - a.match) + .slice(0, 10) + .sort((a, b) => new Date(b.frontmatter.pubDate).valueOf() - new Date(a.frontmatter.pubDate).valueOf()); --- @@ -96,7 +112,7 @@ const readTime = Math.ceil(numberOfWords / WORDS_PER_MINUTE); > -
+

CONTENTS

{ headings.map((header: Record<"depth" | "slug" | "text", string>) => ( @@ -107,6 +123,16 @@ const readTime = Math.ceil(numberOfWords / WORDS_PER_MINUTE); }
+ +
+ +
+

📖 You might also like

+
+ + +
+
@@ -127,6 +153,10 @@ const readTime = Math.ceil(numberOfWords / WORDS_PER_MINUTE); @apply text-xl mt-3 mb-2 font-bold; } + .content h4 { + @apply text-lg mt-3 mb-2 font-bold; + } + .content :not(pre) > code { @apply bg-[#f5f5f5] text-[#e74c3c] px-2; } @@ -143,53 +173,92 @@ const readTime = Math.ceil(numberOfWords / WORDS_PER_MINUTE); @apply text-[#38bdf8]; } - code { + .content code { counter-reset: line; /* counter-reset: line 100; */ } - code[data-line-numbers] > .line::before { + .content code[data-line-numbers] > .line::before { content: counter(line); counter-increment: line; @apply inline-block text-right w-4 mr-5 text-zinc-600; } - /* code[data-line-numbers] > .line:first-of-type::before { + /* .content code[data-line-numbers] > .line:first-of-type::before { counter-set: line 100; } */ - code[data-line-numbers][data-language="bash"] > .line::before { + .content code[data-line-numbers][data-language="bash"] > .line::before { content: "$"; } - div[data-rehype-pretty-code-title] { + .content div[data-rehype-pretty-code-title] { @apply h-10 rounded-t-md pl-4 text-zinc-800 dark:text-zinc-300 flex items-center font-semibold bg-[#c8c8ff0d]; } - div[data-rehype-pretty-code-title]::before { + .content div[data-rehype-pretty-code-title]::before { content: url("/terminal-dots.svg"); @apply mr-8 pt-2; } - div[data-rehype-pretty-code-fragment] pre { + .content div[data-rehype-pretty-code-fragment] pre { @apply relative rounded-b-md m-0 bg-[#c8c8ff0d]; } - div[data-rehype-pretty-code-fragment] .line { + .content div[data-rehype-pretty-code-fragment] .line { @apply pl-2; } - div[data-rehype-pretty-code-fragment] code { + .content div[data-rehype-pretty-code-fragment] code { @apply flex flex-col overflow-x-scroll pb-2; } - div[data-rehype-pretty-code-fragment] .highlighted { + .content div[data-rehype-pretty-code-fragment] .highlighted { @apply bg-[#c8c8ff1a] border-l-[#60a5fa]; } - pre[data-language]:after { - /* @apply absolute right-3 bottom-2 text-zinc-600; */ + .content pre[data-language]:after { @apply absolute right-3 -top-8 text-zinc-600; content: attr(data-language); } + + .content table { + @apply block overflow-x-scroll; + } + + .content table th { + @apply border border-gray-300 p-2; + } + + .dark .content table th { + @apply border-neutral-900; + } + + .content table td { + @apply border border-gray-300 p-2; + } + + .dark .content table td { + @apply border-neutral-900; + } + + .content table > thead { + @apply bg-gray-200; + } + + .dark .content table > thead { + @apply bg-gray-900; + } + + .content table > tbody { + @apply bg-gray-100; + } + + .dark .content table > tbody { + @apply bg-gray-800; + } + + .content svg { + margin: 0 auto; + } diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 0b5fe5a..c9e5bb2 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -42,13 +42,13 @@ const { title } = Astro.props as Props; -
+
-
+
diff --git a/src/pages/about.astro b/src/pages/about.astro index 131ac4c..50491b5 100644 --- a/src/pages/about.astro +++ b/src/pages/about.astro @@ -1,5 +1,9 @@ --- import Layout from "../layouts/Layout.astro"; +import workData from "../../public/work-data.json"; +import talksData from "../../public/talks-data.json"; +import skillsData from "../../public/skills-data.json"; +import educationData from "../../public/education-data.json"; let repos: Array<{ code: string; title: string; name?: string; description?: string; url?: string; stars?: string; forks?: string }> = [ { code: "generator-jekyll-starter-kit", title: "Jekyll Starter Kit Generator" }, @@ -45,168 +49,27 @@ repos = repos.sort((a, b) => Number(b.stars) - Number(a.stars));
-
- -

- Lead Software Engineer (Team Leader) @ - Cognyte (formerly a Verint company) -

-
    -
  • WebintPro LTD was acquired by Cognyte (formerly a Verint company).
  • -
  • Write a compelete data pipeline using RabbitMQ message broker.
  • -
  • Rewrite the backend microservices from Express.js to NestJS.
  • -
  • Build a CI/CD for an Electron desktop application using GitHub actions and GCP.
  • -
-
- -
- -

- Lead Software Engineer (Team Leader) @ - WebintPro Ltd -

-
    -
  • Formed a team (4 full stack developers) to develop and maintains a system to fetch, analyze, and save big data from social networks.
  • -
  • The backend services was written in Python with Sanic framework and Node.js with Express.js framework.
  • -
  • The frontend dashboard was written in Angular using ngrx, material, and D3.js.
  • -
  • Using Docker & Kubernetes for deployment on Google Cloud Platform, with a compelete CI/CD (tests, code reviews, dev environment, etc).
  • -
  • Implements a Microservices architecture with Pub/Sub.
  • -
  • Using Deep Learning methodologies to extract and analyze data. And save it in MongoDB, and Redis Databases.
  • -
  • Created the project from scratch, build the team, manage it, doing code reviews, etc.
  • -
-
- -
- -

- Senior Full Stack Software Engineer @ - Gizra - Internet Solutions -

-
    -
  • Developing a system to connect between companies on varies projects, tracking, and managing them, for the European Union.
  • -
  • The Frontend is build with HTML5, CSS3, Bootstrap, JS, and jQuery. Backend written with Drupal in PHP and MySQL Database.
  • -
  • Working with Git on GitHub, doing code reviews, and writing tests with Behat (runs on Travis-CI).
  • -
  • Builds a Docker image for the system, and integrate continuous deployment methods.
  • -
-
- -
- -

- Lead Software Engineer, Volunteer @ - The Public Knowledge Workshop -

-
    -
  • - Take part in Hackita02 program and one of the founders of "Ways Of Time" project that enable the National Library of Israel to upload and geotag - their geographic maps collection, and open them to the public (Python, Django, Leaflet, PostGIS, MDL). -
  • -
  • - Lead developer of version 2.x of the "Open Pension" project. The project mission is to reveal what happens behind the Israeli pension market, - while enabling the public to trace the money and expose corruption (Python, Django, Scrapy, PostgreSQL, Angular, ngrx, d3.js). -
  • -
  • - Ways Of Time Repo | - Open Pension Website Repo | - Open Pension Crawler Repo -
  • -
-
- -
- -

- Full Stack Software Engineer @ - Restart Group - IT | WEB | Mobile | People -

-
    -
  • - Part of a team that develops and maintains a financial system, from end to end, that handles thousands of transactions to offshore bank accounts. -
  • -
  • Implement a new Front-end design built with HTML5, CSS3, Bootstrap, JS and jQuery.
  • -
  • Back-end written in PHP, and DB in MySQL.
  • -
  • Implement new banks APIs.
  • -
-
- -
- -

- Internet Expert @ - Cellcom Israel, Ltd -

-
    -
  • Tier 2 customer Support Expert Team.
  • -
  • Knowledge focal point for representatives at specialized Call centers.
  • -
  • Handling top level customer escalations and Gold customers support.
  • -
  • Experience working on UNIX-based switches with HP-UX, And with SAP & Amdocs systems.
  • -
  • - Responsible for converting two call centers (Haifa and Beer Sheva) to specialized centers (provide training, and supervision throughout the - beginning of the activity until go-live operation). -
  • -
-
- -
- -

- Internet Service Representitive @ - Cellcom Israel, Ltd -

-
    -
  • Tier 1 customer Support Team.
  • -
  • Handling customer requirements and providing solutions on Internet, data and technical problems.
  • -
  • - Rated at the 10% of the Company's outstanding employees in 2010 and a leader in service in the internet and technical Customer Service Center in - 2011. -
  • -
-
- -
- -

- Military service (shortened for health reasons) @ - IDF (Israel Defense Forces) -

-

Administrative role in the logistics department at Sde Dov Air Force base.

-
+ { + workData.map((work) => ( +
+ +

+ {work.title} @ + + {work.company.name} + +

+

{work.body}

+
    + {work.items.map((item) => ( +
  • + ))} +
+
+ )) + }
@@ -248,70 +111,27 @@ repos = repos.sort((a, b) => Number(b.stars) - Number(a.stars)); -
- -

- Deep Learning Foundations @ - Udacity -

-

A nanodegree program at Udacity

-
    -
  • - The program syllabus include: Neural Networks, Convolutional Neural Networks, Recurrent Neural Networks, Generative Adversarial Networks -
  • -
  • - The 5 projects I built during the program - GitHub -
  • -
  • Completion certificate
  • -
-
- -
- -

- Bachelor's degree in Computer Science and Business Administration @ - The Open University of Israel -

-

A nanodegree program at Udacity

-
    -
  • Seminar paper in Business Ethics course (grade: 85)
  • -
  • - Final project was in Java: GitHub Repo (grade: - 95) -
  • -
  • GPA: 76
  • -
-
- -
- -

- High School diploma @ - Ora Modi'im High School -

-

Majoring in computer science at Ora Modi'im High School

-
    -
  • GPA: 82
  • -
-
+ { + educationData.map((education) => ( +
+ +

+ {education.title} @ + + {education.school.name} + +

+

{education.body}

+
    + {education.items.map((item) => ( +
  • + ))} +
+
+ )) + } @@ -322,97 +142,21 @@ repos = repos.sort((a, b) => Number(b.stars) - Number(a.stars));

Skills

-
-

Architecture

-
- Microservices - RESTful APIs - GraphQL - Data Structures & Algorithms - SasS / PasS - TDD (Test Driven Development) -
-
- -
-

FrontEnd

-
- HTML - CSS / SCSS (Bootstrap, UIkit, Tailwind CSS, Material Design) - JavaScript (jQuery, Ajax) - Angular (cli, ngrx, material) - Vue (vue router, pinia) -
-
- -
-

BackEnd

-
- Java (Spring) - Node.js (TypeScript, Express.js, NestJS, Mocha, Jest) - Python (Django, Flask, Sanic) - Golang -
-
- -
-

Platforms

-
- Linux - Git - GitHub -
-
- -
-

Tools

-
- Bash - Jekyll - Hugo - Electron - Gulp - Ionic - Yeoman - Astro - RabbitMQ -
-
- -
-

Databases

-
- PostgreSQL - MongoDB - RethinkDB - Redis -
-
- -
-

Clouds & Devops

-
- AWS - Docker - Kubernetes - Digital Ocean - Google Cloud Platform - CI / CD - Load Balancing - NGINX -
-
- -
-

Others

-
- Doing Pen Testing By Night - Coffee Drinker - Open Source Contributer - Unix (Linux & Mac) User - Love To Play With Arduino & Raspberry Pi -
-
+ { + skillsData.map((skill) => ( +
+

{skill.category}

+
+ {skill.items.map((item) => ( + + + {item.name} + + ))} +
+
+ )) + } @@ -460,71 +204,30 @@ repos = repos.sort((a, b) => Number(b.stars) - Number(a.stars));
-
- Talk Thumbnail -
-

Pipenv: The future of Python dependency management

-

- | - - - Meetpup Page | - - - - Download - -

-
-
- -
- Talk Thumbnail -
-

API Star - Next generation framework!

-

- | - - - Meetpup Page | - - - Download - -

-
-
- -
- Talk Thumbnail -
-

404 SQL DB not found. Meet RethinkDB

-

- | - - - Meetpup Page | - - - Download - -

-
-
+ { + talksData.map((talk) => ( +
+ Talk Thumbnail +
+

{talk.title}

+

+ | + + + Meetpup Page + {" "} + | + + + + Download + + +

+
+
+ )) + }
diff --git a/src/pages/blog/2014/learn-git-part-1-introduction.md b/src/pages/blog/2014/learn-git-part-1-introduction.md index 229d760..a2d09d9 100644 --- a/src/pages/blog/2014/learn-git-part-1-introduction.md +++ b/src/pages/blog/2014/learn-git-part-1-introduction.md @@ -9,9 +9,6 @@ authorLink: "/about" tags: ["git", "learn", "github", "cli", "command line", "workflow", "linus torvalds"] category: "tools" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2014/learn-git-part-1-introduction/cover.webp" --- @@ -41,27 +38,27 @@ You had problems? just shout him a question he probably down the hallway. But wh Like most of CLI (command line) tools, `git` comes with a `help` command. So, if we ever got stuck we can always use it to find out about some command. -```bash -$ git help # print all the commands with a simple explanation. -$ git help config # print all the config command options with a simple explanation. +```bash showLineNumbers title=" " +git help # print all the commands with a simple explanation. +git help config # print all the config command options with a simple explanation. ``` ![git help command in the terminal](/posts/2014/learn-git-part-1-introduction/cli-git-help.webp "git help command in the terminal") To install git I'll use `brew` (on Mac), but it's pretty easy to install on any OS, just use [this guide](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) for you OS. After we installed it, the first thing we want to do is to set our username and email, so every commit (we'll get to what is commit in the future) will be belong to you. -``` -$ brew install git -$ git config --global user.name "" -$ git config --global user.email "" +```bash showLineNumbers title=" " +brew install git +git config --global user.name "" +git config --global user.email "" ``` We're ready to start working on our first repository (repo for short). Let's create a new one (just navigate to your wanted location in your file system with `cd`) and then initiate a new repo (you can do it with an empty directory or with a directory with some files in it already). This will create an invisible directory (directory that start with a dot (`.`)) with the name `git`. -```bash -$ cd projects -$ mkdir newProject -$ git init +```bash showLineNumbers title=" " +cd projects +mkdir newProject +git init ``` Now we have a local repository (not on any server, local to your computer). @@ -82,8 +79,13 @@ Once we understand the workflow in theory, we need to practice it. Maybe the most important command in `git` (in my opinion) is `status` - it allow us to check the changes that were made from the last `commit` (snapshot). Let's see what the result of this command will be after we initiate (with `git init`) the repo, and created a `README.md` file (didn't nothing like adding it to the _staging area_ or `commit` it). -```bash -$ git status +```bash showLineNumbers title=" " +git status +``` + +output: + +```txt title=" " On branch master No commits yet @@ -97,16 +99,21 @@ nothing added to commit but untracked files present (use "git add" to track) We can see we got couple of pieces of information back: -- We are on branch `master` (we'll take about branches later) +- We are on branch `main` (we'll take about branches later) - There is no commits yet in this repo. - We have a new file (file that `git` doesn't track) in the name of `README.md` - Nothing was added to the _staging area_, and `git` knows that there're files that it doesn't track yet (so we have something to give him, to adding to the _staging area_). So let's give `git` what it wants, let's start tracking this `README.md` file (with the `add` command and right after it the file itself), and then do another `status` command to see the output now. -```bash -$ git add README.md -$ git status +```bash showLineNumbers title=" " +git add README.md +git status +``` + +output: + +```txt title=" " On branch master No commits yet @@ -120,27 +127,42 @@ We see almost the same pieces of information, but now `git` have a file in his _ When we do the `commit` we basically take a snapshot of our file system in this exact time. Even a space means a change. This commit is added to the repo (project) timeline (it's accepted to draw it and imagine it as a timeline, because every `commit` has a timestamp, so we can place them all on a big timeline from the start of the project until now). -```bash -$ git commit -m "Created an empty README file" +```bash showLineNumbers title=" " +git commit -m "Created an empty README file" +``` + +output: + +```txt title=" " [master (root-commit) de7c8db] Created an empty README file 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 README.md ``` -if we write the `status` command again, we'll see there is no changes to be added to the _staging area_ or no changes in the _staging area_ to be `commit`ed. We also can see in the first line that we on branch `master`, for now everything you need to know on branches is that we have a timeline (branch) in the name of `master`, and we `commit` things to that branch (timeline). +if we write the `status` command again, we'll see there is no changes to be added to the _staging area_ or no changes in the _staging area_ to be `commit`ed. We also can see in the first line that we on branch `main`, for now everything you need to know on branches is that we have a timeline (branch) in the name of `main`, and we `commit` things to that branch (timeline). + +```bash showLineNumbers title=" " +git status +``` + +output: -```bash -$ git status +```txt title=" " On branch master nothing to commit, working tree clean ``` Now let's make some changes in `README.md` and create a new file named `LICENSE` (like we said Alice did in the [workflow section](#3-workflow)), and run the `status` command again. -```bash -$ echo "first change" > README.md -$ touch LICENSE -$ git status +```bash showLineNumbers title=" " +echo "first change" > README.md +touch LICENSE +git status +``` + +output: + +```txt title=" " On branch master Changes not staged for commit: (use "git add ..." to update what will be committed) @@ -160,9 +182,14 @@ To commit those files we need to add them to the _staging area_ first, we can do After we add them, we can use the `status` command again to see what have changed. We can see we have two files in the _staging area_, ready to be `commit`ed, one (`LICENSE`) is a new file, and the other (`README.md`) is a tracked file that just changed (modified). -```bash -$ git add --all -$ git status +```bash showLineNumbers title=" " +git add --all +git status +``` + +output: + +```txt title=" " On branch master Changes to be committed: (use "git restore --staged ..." to unstage) @@ -172,8 +199,13 @@ Changes to be committed: Now let's do a new `commit` (take a second snapshot) and then explore it a little bit. -```bash -$ git commit -m "Add a new LICENSE file and finish README" +```bash showLineNumbers title=" " +git commit -m "Add a new LICENSE file and finish README" +``` + +output: + +```txt title=" " [master 380c1e1] Add a new LICENSE file and finish README 2 files changed, 1 insertion(+) create mode 100644 LICENSE @@ -181,13 +213,18 @@ $ git commit -m "Add a new LICENSE file and finish README" To look at the history, the log, of the current timeline we can use the `log` command. We see there're two `commit`s in the branch (timeline) we're currently at. And also much more information: -- We're in the `master` branch (timeline). +- We're in the `main` branch (timeline). - The `commit`s hash, which is a unique string of number and letters to represent that `commit`. It's basically the name of the `commit`, with it we can reference that `commit`. - The author and the exact time and date of the `commit`. - The message of the commit (this is why the message is important. It should be understandable, concise and describe exactly what the changes are. It also accepted to write in present time and not history or future). -```bash -$ git log +```bash showLineNumbers title=" " +git log +``` + +output: + +```txt title=" " commit 380c1e1346008245c8268ccb039538df3e314b87 (HEAD -> master) Author: Nir Galon Date: Sat Oct 3 12:51:23 2020 +0300 @@ -203,14 +240,7 @@ Date: Sat Oct 3 02:03:24 2020 +0300 Like the drawing below, we can imagine it as two dots, where each dot is a `commit` (snapshot), and a line (timeline, the `branch`) is connected them. Going from the first (oldest) one at the left, to the newest one at the right. Where the most newest `commit`, the dot to the most right, is our current `commit` (`HEAD`). -{{< mermaid >}} -gitGraph: -options -{ "nodeSpacing": 150, "nodeRadius": 10 } -end -commit -commit -{{< /mermaid >}} +main0-8db70c31-af1da26   diff --git a/src/pages/blog/2014/learn-git-part-2-getting-our-hands-dirty.md b/src/pages/blog/2014/learn-git-part-2-getting-our-hands-dirty.md index c388892..bbfd450 100644 --- a/src/pages/blog/2014/learn-git-part-2-getting-our-hands-dirty.md +++ b/src/pages/blog/2014/learn-git-part-2-getting-our-hands-dirty.md @@ -9,9 +9,6 @@ authorLink: "/about" tags: ["git", "learn", "github", "cli", "command line", "undo", "revert", "repo", "merge", "collaboration"] category: "tools" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2014/learn-git-part-2-getting-our-hands-dirty/cover.webp" --- @@ -25,9 +22,15 @@ So, let's say Alice is just coming in and sat down in her work station, on the c To see the changes from the last commit, we can use the `diff` command. The output of the command is the changes that aren't in the _staging area_ - changes to files the `git` system already track, but we yet to `add` them and include those new changes. -The _"old"_ line will begin with a minus (`-`) at the start of the line, and the _"new"_ line of code (with the changes) will begin with a plus (`+`) at the start of it. In our case the `LICENSE` file was empty, so at we only see a plus line with the text we added to the file. +The _"old"_ line will begin with a minus (`-`) at the start of the line, and the _"new"_ line of code (with the changes) will begin with a plus (`+`) at the start of it. In our case the `LICENSE` file was empty, so we only see a plus line with the text we added to the file. + +```bash showLineNumbers title=" " +git diff +``` + +output: -```bash +```txt title=" " diff --git a/LICENSE b/LICENSE index e69de29..39604a4 100644 --- a/LICENSE @@ -42,18 +45,28 @@ If we now `add` the `LICENSE` file to the _staging area_ and then run again the Now, if we use the `status` command, we'll see there is a file changed, added to the _staging area_, and ready to be `commit`ed. But if we didn't mean to add it to the _staging area_ yet? What if Alice didn't finish with this file yet, and want add it to a different `commit` later on? -To remove files from the _staging area_ we'll use the `reset HEAD ` command. The elephant in the room - the `HEAD` in the command means the last `commit` in the current `branch` (timeline), in our case for the time being is `master`. So we actually reset the file to undo the changes, from the _staging area_, that were made until the last `commit`. +To remove files from the _staging area_ we'll use the `reset HEAD ` command. The elephant in the room - the `HEAD` in the command means the last `commit` in the current `branch` (timeline), in our case for the time being is `main`. So we actually reset the file to undo the changes, from the _staging area_, that were made until the last `commit`. + +```bash showLineNumbers title=" " +git reset HEAD LICENSE +``` + +output: -```bash -$ git reset HEAD LICENSE +```txt title=" " Unstaged changes after reset: M LICENSE ``` Now if we run the `status` command, we can see that changes were made to the `LICENSE` file, but are not staged. If we want to undo the changes completely and revert the file to his state in the last `commit` we can do it by using the `checkout `. -```bash -$ git checkout LICENSE +```bash showLineNumbers title=" " +git checkout LICENSE +``` + +output: + +```txt title=" " Updated 1 path from the index ``` @@ -69,9 +82,14 @@ For those type of cases we can use the `reset` command with a new flag, `soft HE So let's do some change to the `README.md` file, `add` it and `commit` it in one command (with a new flag). This type of `add` and `commit` is only allowed if the files is already been tracked. After we do it, let's use the `reset soft` command to undo it. -```bash -$ echo "This is a new line" > README.md -$ git commit -a -m "Modify README file" +```bash showLineNumbers title=" " +echo "This is a new line" > README.md +git commit -a -m "Modify README file" +``` + +output: + +```txt title=" " [master 017a141] Modify README file 1 file changed, 1 insertion(+), 1 deletion(-) $ git status @@ -89,8 +107,13 @@ Now we can still edit the `README.md` file and then `commit` everything together If you only want to add something to the last `commit`, and even change the last `commit` text, a simpler way is to use the `commit` command with the `amend` flag. It'll add everything in the _staging area_ to the last commit and you can change the text of the commit in the process. -```bash -$ git commit --amend -m "Add a new LICENSE file and add text to README" +```bash showLineNumbers title=" " +git commit --amend -m "Add a new LICENSE file and add text to README" +``` + +output: + +```txt title=" " [master 5870e6f] Add a new LICENSE file and add text to README Date: Sat Oct 3 12:51:23 2020 +0300 2 files changed, 1 insertion(+) @@ -99,8 +122,13 @@ $ git commit --amend -m "Add a new LICENSE file and add text to README" Another flag to know it the `hard`, it'll undo the changes like `soft`, but instead of leave them in the _staging area_ it'll delete them entirely like they never existed. -```bash -$ git reset --hard HEAD^ +```bash showLineNumbers title=" " +git reset --hard HEAD^ +``` + +output: + +```txt title=" " HEAD is now at de7c8db Created an empty README file ``` @@ -134,19 +162,29 @@ After we create the repo we'll get a URL from GitHub. This URL is the URL for th To `push` our code to the new [GitHub](https://github.com) `remote` repo we first need to config the GitHub repo address (the URL we got from them) as `remote` address so we can later push to that `remote` address. We'll do it with the `remote add ` command. -```bash -$ git remote add origin https://github.com/nirgn975/test.git -$ git remote -v +```bash showLineNumbers title=" " +git remote add origin https://github.com/nirgn975/test.git +git remote -v +``` + +output: + +```txt title=" " origin https://github.com/nirgn975/test.git (fetch) origin https://github.com/nirgn975/test.git (push) ``` I bet the first thing that comes to your head is "why we call our remote alias `origin`?", You're right, it's a bit wired, we can all if whatever we want. But `origin` is just a standard convention, and we'll love conventions. And the second command is just a way to print all the `remote` addresses, so we just make sure everything was added successfully. -Now, it's finally time to push our local branch (timeline) `master` to `origin` (the GitHub repo). You'll need to fill your username and password so GitHub will check if you have permissions to push to that repo. +Now, it's finally time to push our local branch (timeline) `main` to `origin` (the GitHub repo). You'll need to fill your username and password so GitHub will check if you have permissions to push to that repo. -```bash -$ git push origin master +```bash showLineNumbers title=" " +git push origin master +``` + +output: + +```txt title=" " Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Writing objects: 100% (3/3), 224 bytes | 224.00 KiB/s, done. @@ -159,8 +197,13 @@ If we refresh the GitHub repo page we'll see the `README` file there, and a new So, we `push`ed our repo to a `remote` source on GitHub (or any other `git` hosting), but how can Bob take this code to his local machine? Like we said before, with the `pull` command (we'll also use the `pull` command to sync our local repo with the `remote` one, so get changes other team members did and `push`). -```bash -$ git pull origin master +```bash showLineNumbers title=" " +git pull origin master +``` + +output: + +```txt title=" " From github.com:nirgn975/test * branch master -> FETCH_HEAD Already up to date. @@ -178,66 +221,91 @@ So, let's say Bob is working with Alice on the same team. It's his first day, an ![GitHub repo clone URL](/posts/2014/learn-git-part-2-getting-our-hands-dirty/github-repo-clone-url.webp "GitHub repo clone URL") -```bash -$ git clone https://github.com/nirgn975/test.git +```bash showLineNumbers title=" " +git clone https://github.com/nirgn975/test.git ``` The repo will be cloned on your local machine, in the directory that you were at in the terminal, to a new directory with the name of the of the repo. When you `clone` the repo to your local machine, the `git` system does 3 things: 1. Download the repo to your local machine in a directory with the name of the repo. 2. Add a `remote` with the `origin` name that alias to the repo URL. -3. `git` will configure a branch named `master` and point the `HEAD` to be the last `commit` from the `master` branch in the `origin`. +3. `git` will configure a branch named `main` and point the `HEAD` to be the last `commit` from the `main` branch in the `origin`.   ## 5. Merge the branches -Bob is ready now to work on the new feature, but to do this it's better to create a new `branch` (timeline) and not to work on the same main `branch` of the project (`master`). This is because while he work on his own feature, other people working on theirs features or bugs too, and if everyone will work on the same branch and `commit` frequently, it'll create a mess, and everyone will _"resolve conflicts"_ all of the time instead of working. +Bob is ready now to work on the new feature, but to do this it's better to create a new `branch` (timeline) and not to work on the same main `branch` of the project (`main`). This is because while he work on his own feature, other people working on theirs features or bugs too, and if everyone will work on the same branch and `commit` frequently, it'll create a mess, and everyone will _"resolve conflicts"_ all of the time instead of working. -To create a new `branch` out (or splits if you want) of the main `master` branch (the current branch we're in right now) can be done using the `branch` command. +To create a new `branch` out (or splits if you want) of the main `main` branch (the current branch we're in right now) can be done using the `branch` command. -```bash -$ git branch home-page +```bash showLineNumbers title=" " +git branch home-page ``` After we created the new branch, let's check on which branch we're in right now. -```bash -$ git branch +```bash showLineNumbers title=" " +git branch +``` + +output: + +```txt title=" " home-page * master ``` -We're still on `master`. So to move to the `home-page` branch, we'll use the `checkout` command. +We're still on `main`. So to move to the `home-page` branch, we'll use the `checkout` command. -```bash -$ git checkout home-page +```bash showLineNumbers title=" " +git checkout home-page +``` + +output: + +```txt title=" " Switched to branch 'home-page' ``` -Now we're in a different timeline (`branch`), we can do whatever we want and it'll just do it just in the `home-page` branch, and nothing will infect our `master` branch. Any time we want to can go back to `master` branch, and see the repo from `master` branch point of view (timeline). +Now we're in a different timeline (`branch`), we can do whatever we want and it'll just do it just in the `home-page` branch, and nothing will infect our `main` branch. Any time we want to can go back to `main` branch, and see the repo from `main` branch point of view (timeline). -In the meantime, while we work on our feature, if other members of the project finish their own work and merge it to `master`, we can always `checkout` back to `master`, and `pull` the new `commit`s in `master`, to see our coworkers job. +In the meantime, while we work on our feature, if other members of the project finish their own work and merge it to `main`, we can always `checkout` back to `main`, and `pull` the new `commit`s in `main`, to see our coworkers job. Now that we're on a new branch (`home-page`), let's create a new file called `index.html`, inside of it we'll add the basic html code we need for a simple web page, `add` it to the _staging area_, and commit the file. -```bash +```bash showLineNumbers title=" " $ touch index.html $ echo "\n\t\n\t\twebsite title\n\t\n\t\n\t\tcontent of website ...\n\t\n" >> index.html $ git add index.html $ git commit -m "Add basic html code" ``` -The `commit` we just did, will be added to the current (`home-page`) timeline (`branch`), and will not be seen in any other `branch`. If we write the `ls` command in the terminal (in the current directory) we'll see all of our project files (`README.md` and `index.html`), but if we'll `checkout` to the `master` branch we'll not see the `index.html` file, even if we write the `git log` command, we'll not see our latest `commit` in there. +The `commit` we just did, will be added to the current (`home-page`) timeline (`branch`), and will not be seen in any other `branch`. If we write the `ls` command in the terminal (in the current directory) we'll see all of our project files (`README.md` and `index.html`), but if we'll `checkout` to the `main` branch we'll not see the `index.html` file, even if we write the `git log` command, we'll not see our latest `commit` in there. Let's just check we aren't crazy and `checkout` back to the `home-page` branch, and then with the `ls` command makes sure we see our `index.html` file. -So, let's say we're done with this task, we did all of the things we had to do here and we're ready to `merge` this `home-page` branch to the `master` branch. To do this we're first need to go to the branch we want to `merge` things to (in our case `master`), and then use the `merge` command to actually merge the code from the other branch to the branch we are at right now. +So, let's say we're done with this task, we did all of the things we had to do here and we're ready to `merge` this `home-page` branch to the `main` branch. To do this we're first need to go to the branch we want to `merge` things to (in our case `main`), and then use the `merge` command to actually merge the code from the other branch to the branch we are at right now. + +```bash showLineNumbers title=" " +git checkout master +``` + +output: -```bash -$ git checkout master +```txt title=" " Switched to branch 'master' -$ git merge home-page +``` + +and then + +```bash showLineNumbers title=" " +git merge home-page +``` + +output: + +```txt title=" " Updating de7c8db..bfb8f2b Fast-forward index.html | 8 ++++++++ @@ -249,21 +317,31 @@ We can see that `git` tells us it's update the branch by _"Fast forward"_, but w When we finished `merge`ing the `branch`, we don't need it anymore, so we can just delete it. We'll use the `branch` command with the `d` flag to do it. -```bash -$ git branch -d home-page +```bash showLineNumbers title=" " +git branch -d home-page +``` + +output: + +```txt title=" " Deleted branch home-page (was bfb8f2b). ``` Now let's create a new `branch` to work on a new task, the branch will be called `basic-main` (because we'll add some basic code to the main website page - `index.html`). We can create the branch and then move to it in two separate commands like we did before, but there is a simpler way! We can use the `checkout` command with a flag (`b`) that tells to create the branch if doesn't exist yet, so this way, in one command we create the branch and then move (`checkout`) to it. -```bash -$ git checkout -b basic-main +```bash showLineNumbers title=" " +git checkout -b basic-main +``` + +output: + +```txt title=" " Switched to a new branch 'basic-main' ``` Then we'll add the `Go to detailed page!` line right after `content of website ..`. -```html +```html showLineNumbers title="index.html" website title @@ -277,14 +355,29 @@ Then we'll add the `Go to detailed page!` line right Now we can `commit` the change in `index.html` and create a new page, `detailed.html` that the link will redirect us to (when we click it). -```bash -$ git commit -a -m "Add a link to detailed page" +```bash showLineNumbers title=" " +git commit -a -m "Add a link to detailed page" +``` + +output: + +```txt title=" " [basic-main e979b01] Add a link to detailed page 1 file changed, 7 insertions(+), 6 deletions(-) -$ touch detailed.html -$ echo "\n\t\n\t\twebsite title\n\t\n\t\n\t\t

This is the detailed page

\n\t\n" >> detailed.html -$ git add detailed.html -$ git commit -a -m "Finish detailed page" +``` + +and then + +```bash showLineNumbers title=" " +touch detailed.html +echo "\n\t\n\t\twebsite title\n\t\n\t\n\t\t

This is the detailed page

\n\t\n" >> detailed.html +git add detailed.html +git commit -a -m "Finish detailed page" +``` + +output: + +```txt title=" " [basic-main af3853e] Finish detailed page 1 file changed, 8 insertions(+) create mode 100644 detailed.html @@ -292,38 +385,57 @@ $ git commit -a -m "Finish detailed page" Let's imagine how our repo branches (timelines) is looking right now. -{{< mermaid >}} -gitGraph: -options -{ "nodeSpacing": 100, "nodeRadius": 10 } -end -commit -commit -branch basicmain -checkout basicmain -commit -commit -{{< /mermaid >}} - -Right in the middle of our work on the `basic-main` branch, we get an email from our boss that there are bugs in `master` and we need to take care of it immediately. So let's head over to `master` (you can run `git branch` after you `checkout` to `master` just to make sure you're on `master`). - -```bash -$ git checkout master +mainbasic-main0-ce029c51-6a480ca2-bf0c4433-37f90c4 + +Right in the middle of our work on the `basic-main` branch, we get an email from our boss that there are bugs in `main` and we need to take care of it immediately. So let's head over to `main` (you can run `git branch` after you `checkout` to `main` just to make sure you're on `main`). + +```bash showLineNumbers title=" " +git checkout master +``` + +output: + +```txt title=" " Switched to branch 'master' ``` -We don't know if anyone of our team members done with their work and `merge` it to `master` while we worked on our feature branch, so let's make sure we have an updated `master` by `pull`ing any new `commit`s from `origin`. Let's fix what we need to fix, and `commit` and `push` it to `origin`. +We don't know if anyone of our team members done with their work and `merge` it to `main` while we worked on our feature branch, so let's make sure we have an updated `main` by `pull`ing any new `commit`s from `origin`. Let's fix what we need to fix, and `commit` and `push` it to `origin`. -```bash -$ git pull origin master +```bash showLineNumbers title=" " +git pull origin master +``` + +output: + +```txt title=" " From github.com:nirgn975/test * branch master -> FETCH_HEAD Already up to date. -$ echo "# Awesome Website\n\nThis is the repo for the awesome website" >> README.md -$ git commit -a -m "Add a description for the repo" +``` + +then + +```bash showLineNumbers title=" " +echo "# Awesome Website\n\nThis is the repo for the awesome website" >> README.md +git commit -a -m "Add a description for the repo" +``` + +output: + +```txt title=" " [master c247760] Add a description for the repo 1 file changed, 3 insertions(+) +``` + +and finally + +```bash showLineNumbers title=" " $ git push origin master +``` + +output: + +```txt title=" " Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 16 threads @@ -334,18 +446,55 @@ To github.com:nirgn975/test.git de7c8db..0baa97a master -> master ``` -Now that we put out the fire, let's head over to our `basic-main` branch, finish the work, `commit` it, and head back to `master` to merge it. +Now that we put out the fire, let's head over to our `basic-main` branch, finish the work, `commit` it, and head back to `main` to merge it. -```bash +```bash showLineNumbers title=" " $ git checkout basic-main + +``` + +output: + +```txt title=" " Switched to branch 'basic-main' -$ sed -i '' "s/content of website .../Welcome to the new website/g" index.html -$ git commit -a -m "Change welcome message" +``` + +then + +```bash showLineNumbers title=" " +sed -i '' "s/content of website .../Welcome to the new website/g" index.html +git commit -a -m "Change welcome message" + +``` + +output: + +```txt title=" " [basic-main a0ff187] Change welcome message 1 file changed, 1 insertion(+), 1 deletion(-) -$ git checkout master +``` + +then switch branches + +```bash showLineNumbers title=" " +git checkout master +``` + +otuput: + +```txt title=" " Switched to branch 'master' -$ git merge basic-main +``` + +and finally + +```bash showLineNumbers title=" " +git merge basic-main +``` + +output: + +```txt title=" " Merge made by the 'recursive' strategy. detailed.html | 8 ++++++++ index.html | 13 +++++++------ @@ -359,24 +508,7 @@ Because we merge two branches with changes in each of them, `git` is doing a _"r Let's imagine how to whole process looks like visually. -{{< mermaid >}} -gitGraph: -options -{ "nodeSpacing": 100, "nodeRadius": 10 } -end -commit -commit -branch basicmain -checkout basicmain -commit -commit -checkout master -commit -checkout basicmain -commit -checkout master -merge basicmain -{{< /mermaid >}} +mainbasic-main0-2649c2e1-ecceddb2-679d9c23-96c8df44-dd420985-8f60d6e   @@ -420,6 +552,6 @@ It's time to practice. Remember that the best practice is through your fingertip We now know how to see the changes that were made from the last `commit`, how to go back if we regret something we did in a `commit` or the commit message, or even forget to add something to the `commit`. -We upload the project to a remote repository (GitHub in this case), we created new branches, worked with other team members, and merge our code to the `master` branch (we go over a `merge` with no changes in `master` and with one **with** changes in `master`, but not in the same file - we'll talk about it in future chapter). +We upload the project to a remote repository (GitHub in this case), we created new branches, worked with other team members, and merge our code to the `main` branch (we go over a `merge` with no changes in `main` and with one **with** changes in `main`, but not in the same file - we'll talk about it in future chapter). We definitely learned a lot in this chapter! Don't forget to practice it through your fingers, it's the best way to learn something new. And don't hesitate to ask questions in the comments if something is not clear - I'll do my best to help. diff --git a/src/pages/blog/2014/learn-git-part-3-start-collaborate.md b/src/pages/blog/2014/learn-git-part-3-start-collaborate.md index a933105..180385c 100644 --- a/src/pages/blog/2014/learn-git-part-3-start-collaborate.md +++ b/src/pages/blog/2014/learn-git-part-3-start-collaborate.md @@ -9,237 +9,7 @@ authorLink: "/about" tags: ["git", "learn", "github"] category: "tools" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2014/learn-git-part-3-start-collaborate/cover.webp" --- I think everybody here at least heard about [GitHub](https://github.com) and maybe even about the file management system called [git](https://git-scm.com) which is everywhere in the development world those days. So, as a computer science student I choose to learn it, and what batter way to learn something then to write about it. - -So in this series of posts I'll document my journey to learn git (which is the base of GitHub as the only version control you can use on the platform). I hope more people can use it as a learning document or even to deepen their knowledge in the tool. - -  - -## 1. Some General Knowledge - -git is a distribute version control (basically a file management system with a db to save the changes that were made to those files over time) created by [Linus Torvalds](https://en.wikipedia.org/wiki/Linus_Torvalds) in 2005. Why he even created it you ask? He and some other Linux Kernel developers weren't happy with the source-control management (SCM) software they used at the time (BitKeeper). You can read in the [Wikipedia page of git](https://en.wikipedia.org/wiki/Git) about what exactly their issues was, but this is out of the scope of this post. - -**Why I even need a source control system?** - -This is a valid question. In the old days you were just edit your code, FTP it to your server, and that's it. Maybe you have one more fellow developer with you on the same project, he would have send you a piece of code, you paste it in the exact location in the file he told you too and that's it - FTP it to the server. - -You had problems? just shout him a question he probably down the hallway. But when software started to eat the world, getting bigger, more complex, with bigger teams, in different places in the world and different time zones it started to get messier. You need a version control to manage the code in different computers, try to merge pieces of code together, save the history (the changes that were made so we can go back in time in case we encounter some issue), and even want to know who made those changes. - -**How GitHub is related to all of this?** - -[GitHub](https://github.com) is a hosting company for `git` (repositories). The service was founded in 2008 and hosts public repos for free and private ones for a fee. But, from that simple idea, GitHub built a fully fledged software management system, it's now basically a way to manage the whole project with some social media capabilities and a way to share and contribute code. - -  - -## 2. Simple Commands - -Like most of CLI (command line) tools, `git` comes with a `help` command. So, if we ever got stuck we can always use it to find out about some command. - -```bash -$ git help # print all the commands with a simple explanation. -$ git help config # print all the config command options with a simple explanation. -``` - -![git help command in the terminal](/posts/2014/learn-git-part-1-introduction/cli-git-help.webp "git help command in the terminal") - -To install git I'll use `brew` (on Mac), but it's pretty easy to install on any OS, just use [this guide](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) for you OS. After we installed it, the first thing we want to do is to set our username and email, so every commit (we'll get to what is commit in the future) will be belong to you. - -``` -$ brew install git -$ git config --global user.name "" -$ git config --global user.email "" -``` - -We're ready to start working on our first repository (repo for short). Let's create a new one (just navigate to your wanted location in your file system with `cd`) and then initiate a new repo (you can do it with an empty directory or with a directory with some files in it already). This will create an invisible directory (directory that start with a dot (`.`)) with the name `git`. - -```bash -$ cd projects -$ mkdir newProject -$ git init -``` - -Now we have a local repository (not on any server, local to your computer). - -  - -## 3. Workflow - -Before we continue diving with the tool, I would like to take couple of minutes to go over the workflow with `git`. For convince I would borrow some names from the cryptography world: Alice and Bob. Let's suppose Alice created a file `README.md` and when a new file is created, it's start his life as an untracked file (that's means that the `git` system doesn't know about it), to make `git` track this file we need to add it to the _staging area_, and finally we make a `commit` - that's a `git` command to take a snapshot of all the files in the _staging area_. - -Now let's assume Alice working some more on the `README.md` file, doing some changes and even add a new file `LICENSE`, when she done, she need to add both of those files to the _staging area_, again, and `commit` those changes. This is pretty much will be our workflow at the moment. We'll making some work -> add the work that we done to the _staging area_ -> and commit it (taking the snapshot). - -  - -## 4. More Commands - -Once we understand the workflow in theory, we need to practice it. - -Maybe the most important command in `git` (in my opinion) is `status` - it allow us to check the changes that were made from the last `commit` (snapshot). Let's see what the result of this command will be after we initiate (with `git init`) the repo, and created a `README.md` file (didn't nothing like adding it to the _staging area_ or `commit` it). - -```bash -$ git status -On branch master - -No commits yet - -Untracked files: - (use "git add ..." to include in what will be committed) - README.md - -nothing added to commit but untracked files present (use "git add" to track) -``` - -We can see we got couple of pieces of information back: - -- We are on branch `master` (we'll take about branches later) -- There is no commits yet in this repo. -- We have a new file (file that `git` doesn't track) in the name of `README.md` -- Nothing was added to the _staging area_, and `git` knows that there're files that it doesn't track yet (so we have something to give him, to adding to the _staging area_). - -So let's give `git` what it wants, let's start tracking this `README.md` file (with the `add` command and right after it the file itself), and then do another `status` command to see the output now. - -```bash -$ git add README.md -$ git status -On branch master - -No commits yet - -Changes to be committed: - (use "git rm --cached ..." to unstage) - new file: README.md -``` - -We see almost the same pieces of information, but now `git` have a file in his _staging area_ (a file ready to be `commit`ed). So, it's time to do our first `commit`. To do this we'll use the `commit` command. A flag that the `commit` command have is `m` which means _"message"_, with this flag we can add a message to the `commit` to describe the changes this `commit` is do. - -When we do the `commit` we basically take a snapshot of our file system in this exact time. Even a space means a change. This commit is added to the repo (project) timeline (it's accepted to draw it and imagine it as a timeline, because every `commit` has a timestamp, so we can place them all on a big timeline from the start of the project until now). - -```bash -$ git commit -m "Created an empty README file" -[master (root-commit) de7c8db] Created an empty README file - 1 file changed, 0 insertions(+), 0 deletions(-) - create mode 100644 README.md -``` - -if we write the `status` command again, we'll see there is no changes to be added to the _staging area_ or no changes in the _staging area_ to be `commit`ed. We also can see in the first line that we on branch `master`, for now everything you need to know on branches is that we have a timeline (branch) in the name of `master`, and we `commit` things to that branch (timeline). - -```bash -$ git status -On branch master -nothing to commit, working tree clean -``` - -Now let's make some changes in `README.md` and create a new file named `LICENSE` (like we said Alice did in the [workflow section](#3-workflow)), and run the `status` command again. - -```bash -$ echo "first change" > README.md -$ touch LICENSE -$ git status -On branch master -Changes not staged for commit: - (use "git add ..." to update what will be committed) - (use "git restore ..." to discard changes in working directory) - modified: README.md - -Untracked files: - (use "git add ..." to include in what will be committed) - LICENSE - -no changes added to commit (use "git add" and/or "git commit -a") -``` - -`git` knows that the `README.md` file has changed! and those changes are not staged (not in the _staging area_, not ready to be `commit`ed). `git` also noticed we created a new file that it doesn't track (`LICENSE`). - -To commit those files we need to add them to the _staging area_ first, we can do it like we did it earlier with the `add` command and the two files (with a space between them), but we can do it more efficiently with the `all` flag - which will add all of the changes and untracked files to the _staging area_ (be careful with this flag because something you). - -After we add them, we can use the `status` command again to see what have changed. We can see we have two files in the _staging area_, ready to be `commit`ed, one (`LICENSE`) is a new file, and the other (`README.md`) is a tracked file that just changed (modified). - -```bash -$ git add --all -$ git status -On branch master -Changes to be committed: - (use "git restore --staged ..." to unstage) - new file: LICENSE - modified: README.md -``` - -Now let's do a new `commit` (take a second snapshot) and then explore it a little bit. - -```bash -$ git commit -m "Add a new LICENSE file and finish README" -[master 380c1e1] Add a new LICENSE file and finish README - 2 files changed, 1 insertion(+) - create mode 100644 LICENSE -``` - -To look at the history, the log, of the current timeline we can use the `log` command. We see there're two `commit`s in the branch (timeline) we're currently at. And also much more information: - -- We're in the `master` branch (timeline). -- The `commit`s hash, which is a unique string of number and letters to represent that `commit`. It's basically the name of the `commit`, with it we can reference that `commit`. -- The author and the exact time and date of the `commit`. -- The message of the commit (this is why the message is important. It should be understandable, concise and describe exactly what the changes are. It also accepted to write in present time and not history or future). - -```bash -$ git log -commit 380c1e1346008245c8268ccb039538df3e314b87 (HEAD -> master) -Author: Nir Galon -Date: Sat Oct 3 12:51:23 2020 +0300 - - Add a new LICENSE file and finish README - -commit de7c8db1ce767a3a757d760cb7200abe9d847c65 -Author: Nir Galon -Date: Sat Oct 3 02:03:24 2020 +0300 - - Created an empty README file -``` - -Like the drawing below, we can imagine it as two dots, where each dot is a `commit` (snapshot), and a line (timeline, the `branch`) is connected them. Going from the first (oldest) one at the left, to the newest one at the right. Where the most newest `commit`, the dot to the most right, is our current `commit` (`HEAD`). - -{{< mermaid >}} -gitGraph: -options -{ "nodeSpacing": 150, "nodeRadius": 10 } -end -commit -commit -{{< /mermaid >}} - -  - -## 5. Q & A - -Let's practice a little bit by going over the things we learned. - -### **Questions** - -1. You want to initiate a new repo. You're already in a directory with a file, what command do you write to do it? -2. You created some files, made a few `commit`s, you updated some files and the day is over, you want to do your last `commit` for the day and go home. But you don't remember what files you have changed from the last `commit`, what command can help you see the changes from the last `commit`? -3. You found out with the last command that you have only one file changed (`index.html`), make him ready to be `commit`ed. -4. Make a `commit`. -5. You created a new directory (`css`), with couple of files, add the entire directory (with all of it's files) to the _staging area_. -6. A colleague goes by your desk and ask you what have you been `commit`ed today, what command do you write to show him? - -### **Answers** - -1. The `git init` command. -2. The `git status` command. -3. The `git add` command: `git add index.html`. -4. The `git commit` command: `git commit -m "Add index.html"`. -5. To add an entire directory we'll just write it: `git add css`. -6. The `git log` command. - -  - -## 6. Summary - -So, we learn a bit about the history of `git`, why do we need it and how [GitHub](https://github.com) is related. From there we move on the learn some basic commands, the git workflow, and then to some of the most used commands in `git`. - -I recommend to learn through your fingers - to write all the commands yourself and see the output in your terminal. This is the best way to learn! Don't copy and paste answers to your terminal, write them yourself, slowly it'll get through and you'll remember and understand it all in no time. diff --git a/src/pages/blog/2017/jekyll-starter-kit-generator-2.1.0-is-out.md b/src/pages/blog/2017/jekyll-starter-kit-generator-2.1.0-is-out.md index 7291c90..31091d4 100644 --- a/src/pages/blog/2017/jekyll-starter-kit-generator-2.1.0-is-out.md +++ b/src/pages/blog/2017/jekyll-starter-kit-generator-2.1.0-is-out.md @@ -9,9 +9,6 @@ authorLink: "/about" tags: ["jekyll", "contribution", "github", "generator", "starter kit", "yeoman", "pwa", "npm"] category: "contribution" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2017/jekyll-starter-kit-generator-2.1.0-is-out/jekyll-starter-kit.webp" --- diff --git a/src/pages/blog/2017/load-balancing-applications-with-haproxy-and-docker.md b/src/pages/blog/2017/load-balancing-applications-with-haproxy-and-docker.md index 8aa1dfb..7ab47f8 100644 --- a/src/pages/blog/2017/load-balancing-applications-with-haproxy-and-docker.md +++ b/src/pages/blog/2017/load-balancing-applications-with-haproxy-and-docker.md @@ -9,15 +9,12 @@ authorLink: "/about" tags: ["development", "contribution", "docker", "haproxy", "load balance", "cloud", "devops", "nginx"] category: "tutorials" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2017/load-balancing-applications-with-haproxy-and-docker/lets-start.webp" --- A tutorial for a real world docker use case. -Recently I read a lot of articles about load balancing applications with Docker, Docker Compose, and Docker Swarm for my work. We have a couple of hundreds of instances and we need to manage them and do load balancing between them. +Recently I read a lot of articles about load balancing applications with [Docker](https://www.docker.com), Docker Compose, and Docker Swarm for my work. We have a couple of hundreds of instances and we need to manage them and do load balancing between them. There are a lot of articles about this topic, but sadly the use case they present is quit simple and because of that they really don’t help. Here is a couple of examples to what I mean: @@ -33,7 +30,7 @@ For that reason I decided to write this post and present the way we use. It’s Let’s start by creating our simple Node.js application. Create a file named `index.js` with the following code: -```javascript +```javascript showLineNumbers title="index.js" var http = require("http"); var os = require("os"); http @@ -46,7 +43,7 @@ http Now we need to dockerize the app, so we’ll create a file named `Dockerfile` with the following code: -```yaml +```yaml showLineNumbers title="Dockerfile" FROM node RUN mkdir -p /usr/src/app COPY index.js /usr/src/app @@ -62,9 +59,9 @@ Now we have a docker image of our simple (and awesome) Node.js app, and we can c ## 2. Enter Docker Compose -For our HTTP server we’ll use HAProxy, that means we need to create a container with HAProxy that will listen to port 80 and load balance the requests to the different Node.js containers on port 8080. To create our containers (Node.js apps and HAProxy) we’ll use Docker Compose, let’s write our `docker-compose.yml` file: +For our HTTP server we’ll use [HAProxy](http://www.haproxy.org), that means we need to create a container with HAProxy that will listen to port 80 and load balance the requests to the different Node.js containers on port 8080. To create our containers (Node.js apps and HAProxy) we’ll use [Docker Compose](https://docs.docker.com/compose), let’s write our `docker-compose.yml` file: -```yaml +```yaml showLineNumbers title="docker-compose.yml" version: "3" services: @@ -137,7 +134,7 @@ Now let’s look at our services by writing `docker service ls` and we’ll see We can also create a second version of our `awesome` app. Let’s change the code a little bit (let’s add some exclamation marks at the end): -```javascript +```javascript showLineNumbers title="index.js" var http = require("http"); var os = require("os"); http diff --git a/src/pages/blog/2020/chapter-1-simple-twitter.md b/src/pages/blog/2020/chapter-1-simple-twitter.md index 602ae5d..e92beba 100644 --- a/src/pages/blog/2020/chapter-1-simple-twitter.md +++ b/src/pages/blog/2020/chapter-1-simple-twitter.md @@ -6,12 +6,9 @@ draft: false author: "Nir Galon" authorLink: "/about" -tags: ["twitter", "development", "git", "github", "atom", "angular", "node.js", "monogodb", "robo 3t", "gcloud", "kubectl", "brew"] +tags: ["twitter", "development", "git", "github", "atom", "vuejs", "node.js", "monogodb", "robo 3t", "gcloud", "docker", "brew"] category: "development" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2020/chapter-1-simple-twitter/simple-twitter-cover.webp" --- @@ -35,8 +32,8 @@ While I'm using Mac and I'll show how to install everything on a Mac, it should I recommend to use a package manager to install everything on your machine, on mac it's `brew`. Once you have [brew](https://brew.sh/) installed on your machine all you need to do to install `git` is: -```shell -$ brew install git +```bash showLineNumbers title=" " +brew install git ``` That's it, now if you'll write `git` on your command line of choice you'll get as an output all the git commands you can use. @@ -51,9 +48,9 @@ GitHub is a web based git with some extra features. We don't need to install any After you sign up you'll need to confirm your account, so check your email. Now we need to config our local `git` with our `email` and `username`. We can do it by typing those command: -```shell -$ git config --global user.name "Nir Galon" -$ git config --global user.email nir@galon.io +```bash showLineNumbers title=" " +git config --global user.name "Nir Galon" +git config --global user.email nir@galon.io ``` That's it for now. Once we'll have some code, we'll open a new repository, commit the code to GitHub and talk about issues and pull requests. @@ -64,15 +61,15 @@ My code editor of choice is [Atom](https://atom.io/). But you have plenty of cho To install Atom with `brew` we need to add [cask](https://github.com/Homebrew/homebrew-cask), cask extends brew (Homebrew) and let us install macOS applications with brew. So let's add `cask`: -```shell -$ brew update -$ brew tap caskroom/cask +```bash showLineNumbers title=" " +brew update +brew tap caskroom/cask ``` And now we can install Atom -```shell -$ brew cask install atom +```bash showLineNumbers title=" " +brew cask install atom ```   @@ -87,10 +84,10 @@ MongoDB has it's advantages and disadvantages, but for our use case it fits the To install MongoDB we'll head over to the [MongoDB documentation](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x) and go through the instructions. First we'll add their tap to `brew`, then we'll install the mongodb community edition, and finally start the database through [brew services](https://github.com/Homebrew/homebrew-services). -```shell -$ brew tap mongodb/brew -$ brew install mongodb-community -$ brew services start mongodb-community +```bash showLineNumbers title=" " +brew tap mongodb/brew +brew install mongodb-community +brew services start mongodb-community ``` Now we have MongoDB installed and running on our local machine. But how can we see and run stuff? @@ -103,8 +100,8 @@ Robo 3T is a free and open-source cross-platform MongoDB GUI. With it we can see Success! so let's install it with `brew cask` -```shell -$ brew cask install robo-3t +```bash showLineNumbers title=" " +brew cask install robo-3t ```   @@ -117,8 +114,8 @@ To build our backend we'll use [Typescript](https://www.typescriptlang.org/). Ty I want to believe you already understand how useful is a package manager by now, but if you haven't let's use it again and install Node.js. -```shell -$ brew install node +```bash showLineNumbers title=" " +brew install node ``` ### 3.2. NPM @@ -131,33 +128,50 @@ When we'll build our backend we'll want to make requests to it and tests our cod [Insomnia](https://insomnia.rest) is one of the most popular ones out there, it's free and has a lot more features, so let's install it -```shell -$ brew cask install insomnia +```bash showLineNumbers title=" " +brew cask install insomnia ```   ## 4. Frontend Setup -To build our Frontend we'll use [Angular](https://angular.io/). Angular is a typeScript based open source web application framework led by Google. Okay, this is a lot of words, we know what is a web application (a user interface and logic that runs in a web browser), but what is a framework? +To build our Frontend we'll use [Vue.js](https://vuejs.org/). Vue is a JavaScript framework for building user interfaces. Okay, this is a lot of words, we know what is a web application (a user interface and logic that runs in a web browser), but what is a framework? A framework is an abstraction layer that may include support programs, compilers, code libraries, tool sets, and more. it's aim to facilitate software developments by allowing us to devote our time to meeting software requirements rather than dealing with the more standard low-level details of providing a working system. -### 4.1 Angular CLI +### 4.1 The official Vue scaffolding tool + +[`create-vue`](https://github.com/vuejs/create-vue) is the official Vue.js project scaffolding tool. It'll present to you some prompts for a number of optional features such as TypeScript and testing support, and will help us create a new project with everyting already configured. -Angular has a [CLI (Command Line Interface)](https://en.wikipedia.org/wiki/Command-line_interface) (surprisingly called [Angular CLI](https://cli.angular.io/)) to help us create a new project and components in the Angular way. It saves us time and guide us in the "right" direction. +it help us create a new project and components in the way. It saves us time and guide us in the "right" direction. -Angular is a JavaScript framework, so we'll use the JavaScript package manager, `npm`, to install it. +```bash showLineNumbers title=" " +npm init vue@latest +``` -```shell -$ npm install -g @angular/cli +example output: + +```txt title=" " +✔ Project name: … +✔ Add TypeScript? … No / Yes +✔ Add JSX Support? … No / Yes +✔ Add Vue Router for Single Page Application development? … No / Yes +✔ Add Pinia for state management? … No / Yes +✔ Add Vitest for Unit testing? … No / Yes +✔ Add Cypress for both Unit and End-to-End testing? … No / Yes +✔ Add ESLint for code quality? … No / Yes +✔ Add Prettier for code formatting? … No / Yes + +Scaffolding project in ./... +Done. ```   ## 5. Cloud / Devops Setup -When it'll be time to upload our project to the cloud (it'll be sooner then you might think), we'll use couple of tools to connect to our cloud provider and setup our infrastructure. The first will be `gcloud` because we'll use [GCP](https://cloud.google.com/) as our cloud provider (we'll talk about it more in the next chapter), the second will be `kubectl` because we'll use [Kubernetes](https://kubernetes.io/) as part of our infrastructure. +When it'll be time to upload our project to the cloud (it'll be sooner then you might think), we'll use couple of tools to connect to our cloud provider and setup our infrastructure. The first will be `gcloud` because we'll use [GCP](https://cloud.google.com) as our cloud provider (we'll talk about it more in the next chapter), the second will be `Docker` because we'll use [Docker](https://www.docker.com) as part of our infrastructure to build isolated images and we'll run them on [Cloud Run](https://cloud.google.com/run). ### 5.1 Google Cloud @@ -165,16 +179,16 @@ To use [GCP (Google Cloud Platform)](https://cloud.google.com/) from the command To install it, we just use `brew cask` command. This is a cli tool, so it probably should be just `brew`, but brew doesn't have a formulae for `gcloud` (don't ask me why, but I'm sure the internet has an answer for that somewhere), so lucky for us, `cask` has us cover. -```shell -$ brew cask install google-cloud-sdk +```bash showLineNumbers title=" " +brew cask install google-cloud-sdk ``` -### 5.2 Kubernetes +### 5.2 Docker -[Kubernetes](https://kubernetes.io/) is an open source container orchestration system for automating application deployment, scaling, and management. This is a lot of buzz words, I know. But Kubernetes is worth it. We'll use it to deploy and manage our backend on top of GCP. And to interact with it we need it's CLI (do you see a pattern here yet?). Kubernetes CLI called [kubectl](https://kubernetes.io/docs/reference/kubectl/overview/) and we can install it like any other CLI tool, with `brew`. +[Docker](https://www.docker.com) is a set of platform as a service products that use OS-level virtualization to deliver software in packages called containers. This is a lot of buzz words, I know. But Docker is worth it. We'll use it to build and deploy our backend on top of GCP (Cloud Run service). And to interact with it we need it's CLI (do you see a pattern here yet?), and we can install it like any other CLI tool, with `brew`. -```shell -$ brew install kubectl +```bash showLineNumbers title=" " +brew install --cask docker ```   diff --git a/src/pages/blog/2020/chapter-2-simple-twitter.md b/src/pages/blog/2020/chapter-2-simple-twitter.md index e6d159b..5a5c32b 100644 --- a/src/pages/blog/2020/chapter-2-simple-twitter.md +++ b/src/pages/blog/2020/chapter-2-simple-twitter.md @@ -9,9 +9,6 @@ authorLink: "/about" tags: ["twitter", "development", "mvp", "database", "collection", "architecture", "api", "schema"] category: "development" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2020/chapter-2-simple-twitter/simple-twitter-cover.webp" --- diff --git a/src/pages/blog/2020/chapter-3-simple-twitter.md b/src/pages/blog/2020/chapter-3-simple-twitter.md index ca5c9f3..1f8c7c2 100644 --- a/src/pages/blog/2020/chapter-3-simple-twitter.md +++ b/src/pages/blog/2020/chapter-3-simple-twitter.md @@ -26,9 +26,6 @@ tags: ] category: "development" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2020/chapter-3-simple-twitter/simple-twitter-cover.webp" --- diff --git a/src/pages/blog/2020/crack-the-hash.md b/src/pages/blog/2020/crack-the-hash.md index 535b80f..51fa3de 100644 --- a/src/pages/blog/2020/crack-the-hash.md +++ b/src/pages/blog/2020/crack-the-hash.md @@ -9,9 +9,6 @@ authorLink: "/about" tags: ["crack", "password", "hash", "hashcat", "gcp", "google cloud platform", "white hat", "pen test", "hacking"] category: "hacking" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2020/crack-the-hash/crack-passwords.webp" --- @@ -63,26 +60,26 @@ First we need to SSH into the machine, the easiest way to do it is to click on t After that the terminal is open, go to the [CUDA Toolkit download page](https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=2004&target_type=debnetwork) and chose the platform you want to install it to, it'll give you all the commands - just paste them in the terminal. In my case here they are: -```bash -$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin -$ sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 -$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub -$ sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /" -$ sudo apt-get update -$ sudo apt-get -y install cuda +```bash showLineNumbers title=" " +wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin +sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 +sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub +sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /" +sudo apt-get update +sudo apt-get -y install cuda ``` After everything is installed successfully it's time to install [Hashcat](https://hashcat.net). -```bash -$ wget https://hashcat.net/files/hashcat-6.1.1.7z -$ sudo apt install p7zip -$ p7zip -d hashcat-6.1.1.7z -$ sudo cp hashcat-6.1.1/hashcat64.bin /usr/bin/ -$ sudo ln -s /usr/bin/hashcat64.bin /usr/bin/hashcat -$ sudo cp -Rv hashcat-6.1.1/OpenCL/ /usr/bin/ -$ sudo cp hashcat-6.1.1/hashcat.hcstat2 /usr/bin/ -$ sudo cp hashcat-6.1.1/hashcat.hctune /usr/bin/ +```bash showLineNumbers title=" " +wget https://hashcat.net/files/hashcat-6.1.1.7z +sudo apt install p7zip +p7zip -d hashcat-6.1.1.7z +sudo cp hashcat-6.1.1/hashcat64.bin /usr/bin/ +sudo ln -s /usr/bin/hashcat64.bin /usr/bin/hashcat +sudo cp -Rv hashcat-6.1.1/OpenCL/ /usr/bin/ +sudo cp hashcat-6.1.1/hashcat.hcstat2 /usr/bin/ +sudo cp hashcat-6.1.1/hashcat.hctune /usr/bin/ ``` And now let's test that Hashcat is installed properly and recognize our GPU by running `sudo hashcat --benchmark`. @@ -97,15 +94,15 @@ The first thing we need is a password list. You can make your own password (word The best place to get some of it is the [SecList on GitHub](https://github.com/danielmiessler/SecLists/tree/master/Passwords), and one of the most popular list is the [rockyou](https://en.wikipedia.org/wiki/RockYou) one. So let's download it to our VM and use that list to crack some passwords. -```bash -$ wget https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt +```bash showLineNumbers title=" " +wget https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt ``` To crack a password you first need to know the hash type of that password - which hashing algorithm they use to encrypt the password (there are multiple ways to discover it, and also a lot of projects that are trying to do that automatically, but this is not the purpose of this post, so Google it). For testing I encrypt some text with [Bcrypt hash function](https://en.wikipedia.org/wiki/Bcrypt), here are the result: -``` +```txt title=" " $2b$04$jysbNjr164hK4E7tqk2B.OJoj4qAg9xHF4gLqain2m9pGb1bcsRf6 $2b$04$T.E6VXlAlt/K/gfVBBrs8eULxwBTDGVZ1CNsE.yJX5Yt9LjqH5bDO $2b$04$XMOmhaV4EM.8fDCVEk3GYOmSbHvVoSx1cDyxhSeebBmCZyGisq7sG @@ -116,8 +113,8 @@ Now, go to the [documentation of Hashcat](https://hashcat.net/wiki/doku.php?id=e A basic running is just to use the `m` flag with the mode 3200, the `o` flag to point Hashcat where to put all of the cracked passwords, and then just the file with the hashs (I put them in `test.txt` on the VM) and the file with the cleartext passwords list (the `rockyou.txt` we downloaded earlier). -```bash -$ sudo hashcat -m 3200 -o cracked.txt test.txt rockyou.txt +```bash showLineNumbers title=" " +sudo hashcat -m 3200 -o cracked.txt test.txt rockyou.txt ``` ![Basic Hash Cracking](/posts/2020/crack-the-hash/basic-hash-cracking.webp "Basic Hash Cracking") @@ -132,16 +129,16 @@ Using a ruleset we can change our wordlist to contain more variations of the exi So let's use those rules, first download the repo, next we need to `unzip` the zip file, and finally change the directory name. -```bash -$ wget https://github.com/praetorian-inc/Hob0Rules/archive/master.zip -$ unzip master.zip -$ mv Hob0Rules-master/ Hob0Rules +```bash showLineNumbers title=" " +wget https://github.com/praetorian-inc/Hob0Rules/archive/master.zip +unzip master.zip +mv Hob0Rules-master/ Hob0Rules ``` To run Hashcat again, but now with the rules we downloaded all we need to do is to use the `r` flag and point it to the path of the rule file. -```bash -$ sudo hashcat -m 3200 -o cracked.txt -r Hob0Rules/hob064.rule test.txt rockyou.txt +```bash showLineNumbers title=" " +sudo hashcat -m 3200 -o cracked.txt -r Hob0Rules/hob064.rule test.txt rockyou.txt ``` Now if you write `s` in the terminal to check the status progress of the cracking process you can see that instead of 57,377,536 passwords combinations that the `rockyou.txt` file contains, Hashcat checks 3,672,162,304 passwords combinations, because it uses uppercase and lowercase combinations of the same text that the `rockyou.txt` file contains. diff --git a/src/pages/blog/2020/jekyll-starter-kit-generator-3.x.x.md b/src/pages/blog/2020/jekyll-starter-kit-generator-3.x.x.md index e6174db..bc8b7a4 100644 --- a/src/pages/blog/2020/jekyll-starter-kit-generator-3.x.x.md +++ b/src/pages/blog/2020/jekyll-starter-kit-generator-3.x.x.md @@ -9,9 +9,6 @@ authorLink: "/about" tags: ["jekyll", "contribution", "github", "generator", "starter kit", "yeoman", "pwa", "npm"] category: "contribution" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2020/jekyll-starter-kit-generator-3.x.x/github-social-coding.webp" --- diff --git a/src/pages/blog/2020/like-a-spy-with-hak5-toys.md b/src/pages/blog/2020/like-a-spy-with-hak5-toys.md index 3c55fce..6797d52 100644 --- a/src/pages/blog/2020/like-a-spy-with-hak5-toys.md +++ b/src/pages/blog/2020/like-a-spy-with-hak5-toys.md @@ -9,9 +9,6 @@ authorLink: "/about" tags: ["spy", "screen crab", "key croc", "cloud c2", "hacking", "hak5", "white hat", "digital ocean"] category: "hacking" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2020/like-a-spy-with-hak5-toys/spy-cover.webp" --- @@ -55,24 +52,22 @@ Don't forget to add our droplet in _"Apply to Droplets"_ input, right before the Now the fun part begins, let's ssh to our server (replace `` with your droplet ip, in my case it's `165.227.156.17`). -```bash -$ ssh root@ +```bash showLineNumbers title=" " +ssh root@ ``` ![SSH into droplet](/posts/2020/like-a-spy-with-hak5-toys/ssh-to-droplet.webp "SSH into droplet") And install the `unzip` package so we can unzip the `zip` file we'll download with all the edition for Windows, Mac and Linux of C2 from Hak5. -```bash -$ sudo apt install unzip +```bash showLineNumbers title=" " +sudo apt install unzip ``` Now let's build a command to download the c2 (you can get the download URL from the email), save the file in the name `c2.zip`, unzip it, and run the relevant binary for our OS with the `hostname` point to our domain, and the `https` flag so [Let's Encrypt](https://letsencrypt.org) will automatically create a certificate for us. -```bash -$ wget https://c2.hak5.org/download/community -O c2.zip && \ -unzip c2.zip && \ -./c2_community-linux-64 -hostname cloud-c2.dev -https +```bash showLineNumbers title=" " +wget https://c2.hak5.org/download/community -O c2.zip && unzip c2.zip && ./c2_community-linux-64 -hostname cloud-c2.dev -https ``` The first time C2 runs, a database file is generated (named `c2.db` by default) in the same directory as the C2 binary. In that first run you'll see it print a _"Setup token"_, copy it, we'll need it to continue the setup process. @@ -108,14 +103,14 @@ Also, create a file named `config.txt` and in it add the wifi configuration. The For example: -``` +```txt title="config.txt" WIFI_SSID This network WIFI_PASS The P@$$word!! ``` Will be: -``` +```txt title="config.txt" WIFI_SSID This\ network WIFI_PASS The\ P\@\$\$word\!\! ``` @@ -154,7 +149,7 @@ Let's connect our Key Croc to our C2. Go to the C2 dashboard and add a new devic And let's add our wifi configuration so it would be able to connect to our C2 server. Like with the Screen Crab we need to edit the `config.txt` file (we already have the file in this case, and there're quit a few comments in there), we'll uncomment the `WIFI_SSID` and `WIFI_PASS` lines and add our wifi configuration there, in the same exact way we did with the Screen Crab, but in this case we have a new option to play with, an ssh one, so we can connect to the Key Croc via ssh and program it on the fly! -``` +```txt title="config.txt" WIFI_SSID This\ network WIFI_PASS The\ P\@\$\$word\!\! SSH ENABLE @@ -180,27 +175,27 @@ Everything is connected and working, but soon as we'll leave our Digital Ocean s First we're going to move the c2 file to `/usr/local/bin`. Why this directory? Because this is the directory in linux for programs that normal user may run. _"usr"_ - **U**NIX **S**ystem **R**esources, the location that system programs and libraries are stored. _"local"_ - for resources that were not shipped with the standard distribution. _"bin"_ - binary compiled executables. -```bash -$ sudo mv c2_community-linux-64 /usr/local/bin +```bash showLineNumbers title=" " +sudo mv c2_community-linux-64 /usr/local/bin ``` and then to create a new directly (in `/var`) for our database (the `c2.db` file that was automatically created). Why in `/var`? Because according to linux it's abbreviation is _"variable"_, and it should contains things that are prone to changes (such as websites, temporary files (`/var/tmp`) and databases). -```bash -$ sudo mkdir /var/c2 -$ sudo mv c2.db /var/c2 +```bash showLineNumbers title=" " +sudo mkdir /var/c2 +sudo mv c2.db /var/c2 ``` Now we need to create a new `systemd` service. This is the "right way" to keep the process alive once we leave the ssh connection, because this way (with `systemd`) if it crash the `systemd` will automatically reboot it and also we can capture the process logs to check what happened. -```bash -$ sudo touch /etc/systemd/system/c2.service -$ nano /etc/systemd/system/c2.service +```bash showLineNumbers title=" " +sudo touch /etc/systemd/system/c2.service +nano /etc/systemd/system/c2.service ``` And paste the text below (change the `cloud-c2.dev` to your domain name), save and exit nano. -``` +```txt [Unit] Description=Cloud C2 After=c2.service @@ -213,14 +208,14 @@ WantedBy=multi-user.target All we have left to do is to reload the `systemd` daemon, enable the new service we just created (if it's not enabled the service will start and stop only when you write the commands to start and stop it, if it's enabled it'll automatically start when the server is back up), and finally start it. -```bash -$ sudo systemctl daemon-reload && systemctl enable c2.service && systemctl start c2.service +```bash showLineNumbers title=" " +sudo systemctl daemon-reload && systemctl enable c2.service && systemctl start c2.service ``` You can check the status of the service we created with the `status` command of `systemctl`. -```bash -$ sudo systemctl status c2.service +```bash showLineNumbers title=" " +sudo systemctl status c2.service ``` ![systemd service runs our c2 successfully](/posts/2020/like-a-spy-with-hak5-toys/systemd-service-running.webp "systemd service runs our c2 successfully") diff --git a/src/pages/blog/2020/new-design-for-the-blog.md b/src/pages/blog/2020/new-design-for-the-blog.md index 16af559..23fc2b5 100644 --- a/src/pages/blog/2020/new-design-for-the-blog.md +++ b/src/pages/blog/2020/new-design-for-the-blog.md @@ -9,9 +9,6 @@ authorLink: "/about" tags: ["hugo", "design", "blog", "github", "commento.io", "plausible analytics"] category: "miscellaneous" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/blog-hero.webp" --- diff --git a/src/pages/blog/2020/open-source-intelligence.md b/src/pages/blog/2020/open-source-intelligence.md index e4c7b8f..0a43ac7 100644 --- a/src/pages/blog/2020/open-source-intelligence.md +++ b/src/pages/blog/2020/open-source-intelligence.md @@ -9,9 +9,6 @@ authorLink: "/about" tags: ["osint", "reconnaissance", "hacking", "white hat", "intelligence", "open source", "data leaks", "arjun", "hunter.io", "theHarvester", "sublist3r"] category: "hacking" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2020/open-source-intelligence/osint-cover.webp" --- @@ -60,7 +57,7 @@ We notice a bunch of things: The easiest thing to look up first are the IPs and the domain. The first IP (`84.17.46.157`) is from Netherlands, and the second (`154.127.57.238`) is from the South Africa, here are the full `JSON`s files I got from [ipstack](https://ipstack.com). I got the paid version of their API, but there is a free one and that's enough for our case here. -```json +```json showLineNumbers title=" " { "ip": "84.17.46.157", "type": "ipv4", @@ -111,7 +108,9 @@ The easiest thing to look up first are the IPs and the domain. The first IP (`84 } ``` -```json +and + +```json showLineNumbers title=" " { "ip": "154.127.57.238", "type": "ipv4", @@ -566,7 +565,7 @@ It looks like our guy, but this is not enough! we need more. Let's search his gmail (`slikeye1711@gmail.com`) on [Pipl](https://pipl.com), unfortunately we got nothing. -```json +```json showLineNumbers title=" " { "@http_status_code": 200, "@visible_sources": 0, @@ -603,7 +602,7 @@ So let's think of something different, in his profile page there was a new domai The third result is really interesting, it's from [cutestat website](https://www.cutestat.com), which is a website to provides various statistical reports like website valuation, traffic reports, social engagement, host information, domain WHOIS, etc. and it's perfect because it has a WHOIS record from `2017-06-14T17:05:39Z` with new data (probably before he had privacy protection on the domain). -``` +```txt title=" " Domain Name: SLIKEYE.COM Registry Domain ID: 2132972393_DOMAIN_COM-VRSN Registrar WHOIS Server: whois.resellercamp.com @@ -677,7 +676,7 @@ Unfortunately we didn't get new phone numbers or email addresses, but _"Forget P The new email address and phone number don't get us any result on Pipl, that's a bummer. Pipl is consistently failing us in this recon investigation. On the other hand a TrueCaller search for the phone number confirms the new email address we already found in the 2017 WHOIS record, and tell us his `carrier` and that he is verified by [TrueCaller](https://www.truecaller.com). -```json +```json showLineNumbers title=" " { "data": [ { diff --git a/src/pages/blog/2020/releasing-software-is-hard.md b/src/pages/blog/2020/releasing-software-is-hard.md index 190ae98..fe6df05 100644 --- a/src/pages/blog/2020/releasing-software-is-hard.md +++ b/src/pages/blog/2020/releasing-software-is-hard.md @@ -9,9 +9,6 @@ authorLink: "/about" tags: ["semver", "conventional commits", "github actions", "commitizen", "releases", "automation"] category: "tutorials" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2020/releasing-software-is-hard/software-development.webp" --- @@ -69,12 +66,12 @@ So, let's recap all the tools so far. If we'll use [commitizen](https://github.c Let's start by creating a simple `package.json` file with npm in our project directory (let's call it `deweb` because that's what the [namelix](https://namelix.com) generator generate for us). -```bash -$ mkdir deweb -$ cd deweb -$ git init -$ npm init -$ echo node_modules >> .gitignore +```bash showLineNumbers title=" " +mkdir deweb +cd deweb +git init +npm init +echo node_modules >> .gitignore ``` Here are my configurations. @@ -83,15 +80,15 @@ Here are my configurations. Now we need to install [commitizen](https://github.com/commitizen/cz-cli) and make our repo **commitizen friendly** -```bash -$ npm install commitizen -g -$ commitizen init cz-conventional-changelog --save-dev --save-exact +```bash showLineNumbers title=" " +npm install commitizen -g +commitizen init cz-conventional-changelog --save-dev --save-exact ``` This just tells commitizen which adapter we actually want our contributors to use when they try to commit to this repo. And now you can use `git cz` command instead of `git commit` and the commitizen prompt will guide your through the commit message and `commit` all the files. -```bash -$ git cz +```bash showLineNumbers title=" " +git cz ``` ![Commit With Commitizen](/posts/2020/releasing-software-is-hard/commit-with-commitizen.webp "Commit With Commitizen") @@ -104,14 +101,14 @@ Now, we can use [semantic-release](https://github.com/semantic-release/semantic- So, let's create a GitHub action that uses the [Release me!](https://github.com/marketplace/actions/release-me#create-a-release) action and run every time there is a milestones event on GitHub. -```bash -$ mkdir -p .github/workflows -$ touch .github/workflows/cd.yml +```bash showLineNumbers title=" " +mkdir -p .github/workflows +touch .github/workflows/cd.yml ``` In this file you should copy the default template of a [GitHub action](https://docs.github.com/en/free-pro-team@latest/actions), and use the [release-me-action](https://github.com/marketplace/actions/release-me#create-a-release). Then you need to change the `on` key on the top of the file `milestone` and just when a milestone closed. -```yaml +```yaml showLineNumbers title=".github/workflows/cd.yml" name: Continuous Deployment on: @@ -134,10 +131,10 @@ jobs: Now let's commit the new file and push it to GitHub. -```bash -$ git add . -$ git cz -$ git push origin main +```bash showLineNumbers title=" " +git add . +git cz +git push origin main ``` The last thing we need to do is to create a milestone in GitHub, then look at the **Actions** section and see our workflow, but we notice it doesn't run yet. diff --git a/src/pages/blog/2021/getting-to-know-my-neighbors.md b/src/pages/blog/2021/getting-to-know-my-neighbors.md index e06ad95..3c5a4e7 100644 --- a/src/pages/blog/2021/getting-to-know-my-neighbors.md +++ b/src/pages/blog/2021/getting-to-know-my-neighbors.md @@ -9,9 +9,6 @@ authorLink: "/about" tags: ["wifi pineapple", "man in the middle", "wifi attack", "hacking", "white hat", "hak5"] category: "hacking" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2021/getting-to-know-my-neighbors/blue-wireless-connection.webp" --- diff --git a/src/pages/blog/2021/hugo-theme-with-developer-focus-in-mind.md b/src/pages/blog/2021/hugo-theme-with-developer-focus-in-mind.md index 56ce767..c8c79aa 100644 --- a/src/pages/blog/2021/hugo-theme-with-developer-focus-in-mind.md +++ b/src/pages/blog/2021/hugo-theme-with-developer-focus-in-mind.md @@ -9,9 +9,6 @@ authorLink: "/about" tags: ["hugo", "theme", "contribution", "dark mode", "generate", "optimization", "performance", "accessibility", "best practices", "seo"] category: "contribution" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2021/hugo-theme-with-developer-focus-in-mind/hugo-logo-wide.webp" --- @@ -51,15 +48,15 @@ There are a lot of other great features that this theme have, like: If you want to use this theme, it can't get any easier then this. All you need to do is to install [Hugo](https://gohugo.io), create a new website, and clone this theme as a submodule -```bash -$ brew install hugo -$ hugo new site myownresume -$ git submodule add git@github.com:nirgn975/devRes.git themes/devRes +```bash showLineNumbers title=" " +brew install hugo +hugo new site myownresume +git submodule add git@github.com:nirgn975/devRes.git themes/devRes ``` -Now all you have left to do is just add it as a theme in your `config.toml` +Now all you have left to do is just config it as your theme -```toml +```toml showLineNumbers title="config.toml" theme = "devRes" ``` @@ -79,8 +76,8 @@ Great! All issues and pull requests are welcome. For local development just start [hugo](https://gohugo.io) with `exampleSite` as the source. -```bash -$ hugo server --source=exampleSite -v --gc +```bash showLineNumbers title=" " +hugo server --source=exampleSite -v --gc ```   diff --git a/src/pages/blog/2021/nestjs-graphql-mongodb.md b/src/pages/blog/2021/nestjs-graphql-mongodb.md index 3978778..54c0701 100644 --- a/src/pages/blog/2021/nestjs-graphql-mongodb.md +++ b/src/pages/blog/2021/nestjs-graphql-mongodb.md @@ -9,9 +9,6 @@ authorLink: "/about" tags: ["nestjs", "graphql", "mongodb", "expressjs", "node.js", "javascript", "typescript", "mongodb", "mongoose"] category: "development" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2021/nestjs-graphql-mongodb/nestjs-graphql-mongodb.webp" --- @@ -45,15 +42,15 @@ The NestJS GraphQL module we'll use ([`@nestjs/graphql`](https://github.com/nest So, the first thing we need to do is to install the Nest CLI tool globally and then create a project on our local machine. I'll call my project `server`, because I have such an active imagination. -```bash -$ npm i -g @nestjs/cli -$ nest new server -$ cd server +```bash showLineNumbers title=" " +npm i -g @nestjs/cli +nest new server +cd server ``` Once we created the project, our project directory tree will look like this -``` +```txt title=" " . ├── README.md ├── nest-cli.json @@ -83,13 +80,13 @@ Let's go over the files on the `src` directory: So, we don't need the controllers and the service files for the root module, let's just delete them. -```bash -$ rm src/app.controller.spec.ts src/app.controller.ts src/app.service.ts +```bash showLineNumbers title=" " +rm src/app.controller.spec.ts src/app.controller.ts src/app.service.ts ``` And then delete the `import` statements with their corresponding codes from the `controllers` and `providers` array, at the `app.module.ts` file. So at the end it'll look like this -```typescript +```typescript showLineNumbers title="app.module.ts" {5-6} import { Module } from "@nestjs/common"; @Module({ @@ -102,9 +99,9 @@ export class AppModule {} We'll create an API for a simple twitter clone, one with just users and tweets. So, let's create those two new modules with the Nest CLI. -```bash -$ nest g module users -$ nest g module tweets +```bash showLineNumbers title="" +nest g module users +nest g module tweets ```   @@ -117,14 +114,13 @@ My dream is to create a single model (as a typescript classes) and let Nest gene The first thing we need to do is to install some required packages. -```bash -$ npm install @nestjs/graphql @nestjs/apollo graphql apollo-server-express +```bash showLineNumbers title="" +npm install @nestjs/graphql @nestjs/apollo graphql apollo-server-express ``` Once the packages are installed, we can import the `GraphQLModule` and configure it with the `forRoot()` static method, and then we'll use `autoSchemaFile` to tell Nest where to auto create the the GraphQL schema file. -```typescript -// app.module.transform +```typescript showLineNumbers title="app.module.ts" {1,3-4,6-7,10-17} import { join } from "path"; import { Module } from "@nestjs/common"; import { GraphQLModule } from "@nestjs/graphql"; @@ -150,15 +146,14 @@ export class AppModule {} Now, we'll create a two classes, the first for our `User` model, in the `users` module (directory). And the second for the `Tweet` model, in the `tweets` module. -```bash -$ nest g class users/models/user.model -$ nest g class tweets/models/tweet.model +```bash showLineNumbers title=" " +nest g class users/models/user.model +nest g class tweets/models/tweet.model ``` The `user.model` would be with those fields: -```typescript -// user.model.ts +```typescript showLineNumbers title="user.model.ts" export class User { _id: string; username: string; @@ -170,8 +165,7 @@ export class User { And the `tweet.model` will look like: -```typescript -// tweet.model.ts +```typescript showLineNumbers title="tweet.model.ts" export class Tweet { _id: string; text: String; @@ -182,16 +176,16 @@ export class Tweet { The next step is to generate a service that handle all of the data stuff, because for now we'll not save it in the database, we'll just have an array to save data to and retrieve it from. -```bash -$ nest generate service users -$ nest generate service tweets +```bash showLineNumbers title=" " +nest generate service users +nest generate service tweets ``` Now we can create the resolvers which are basically the controllers in GraphQL world. -```bash -$ nest generate resolver users -$ nest generate resolver tweets +```bash showLineNumbers title=" " +nest generate resolver users +nest generate resolver tweets ```   diff --git a/src/pages/blog/2022/design-system.md b/src/pages/blog/2022/design-system.md index f906a96..a2fa4c3 100644 --- a/src/pages/blog/2022/design-system.md +++ b/src/pages/blog/2022/design-system.md @@ -9,9 +9,6 @@ authorLink: "/about" tags: ["design system", "component library", "vuejs", "storybook", "typescript", "tailwind", "sfc", "composition", "vite"] category: "development" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2022/design-system/hero.webp" --- diff --git a/src/pages/blog/2022/github-email.md b/src/pages/blog/2022/github-email.md index 9983947..7d4fe7c 100644 --- a/src/pages/blog/2022/github-email.md +++ b/src/pages/blog/2022/github-email.md @@ -9,9 +9,6 @@ authorLink: "/about" tags: ["github", "private email", "domain"] category: "tutorials" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2022/github-email/google-email.webp" --- diff --git a/src/pages/blog/2022/raspberry-pi.md b/src/pages/blog/2022/raspberry-pi.md index 8736f0d..0346e11 100644 --- a/src/pages/blog/2022/raspberry-pi.md +++ b/src/pages/blog/2022/raspberry-pi.md @@ -9,9 +9,6 @@ authorLink: "/about" tags: ["raspberry pi"] category: "tutorials" -hiddenFromHomePage: false -hiddenFromSearch: false - featuredImage: "/posts/2022/raspberry-pi/raspberry-pi-hero.webp" --- diff --git a/src/pages/contact.astro b/src/pages/contact.astro index 13346c2..4136d94 100644 --- a/src/pages/contact.astro +++ b/src/pages/contact.astro @@ -3,10 +3,20 @@ import Layout from "../layouts/Layout.astro"; --- -
+
+

+ Hi!
My name is Nir Galon, I'm a geek who always want to learn new things. I work as a software engineer and I love what I do! +

+

+ To learn more about me you can visit my about page or just follow me on + twitter or + github. If you wish to contact me, the best way is to + just drop a message below. +

+
diff --git a/src/pages/index.astro b/src/pages/index.astro index 3907d5b..a1481b3 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,5 +1,11 @@ --- import Layout from "../layouts/Layout.astro"; +import talksData from "../../public/talks-data.json"; +import ArticleCard from "../components/ArticleCard.astro"; + +const upcomingTalks = talksData.filter((talk) => talk.future); +const recentTalk = talksData.filter((talk) => !talk.future)[0]; +upcomingTalks.push(recentTalk); const posts = (await Astro.glob("./**/*.{md,mdx}")) .filter((post) => import.meta.env.MODE == "development" || !post.frontmatter.draft) @@ -18,50 +24,7 @@ const posts = (await Astro.glob("./**/*.{md,mdx}"))
- { - posts.map((post) => ( -
- -

{post.frontmatter.title}

-
- - - {`${post.frontmatter.title} - - -

- {post - .compiledContent() - .replace(/<[^>]*>?/gm, "") - .substring(0, 250)} -

- -
- - published on - - - - - - - {post.frontmatter.category} - - -
-
- )) - } + {posts.map((post) => )}
@@ -71,27 +34,31 @@ const posts = (await Astro.glob("./**/*.{md,mdx}"))

Upcoming & Recent Talks

-
-
- Talk Thumbnail -
-

Pipenv: The future of Python dependency management

-

- | - - Meetpup Page - | - - Download - -

-
-
+
+ { + upcomingTalks.map((talk) => ( +
+ Talk Thumbnail +
+

{talk.title}

+

+ | + + + Meetpup Page + {" "} + | + + + + Download + + +

+
+
+ )) + }