mirror of
https://github.com/theoludwig/theoludwig.git
synced 2025-05-29 22:37:44 +02:00
Compare commits
18 Commits
Author | SHA1 | Date | |
---|---|---|---|
5f3dfad988
|
|||
b231381cb3
|
|||
bbb2e56512
|
|||
66cf6d7438
|
|||
2a635bf3ba
|
|||
9f79b88202
|
|||
23d9caf578
|
|||
7febe6d1f9
|
|||
c4650c34d9
|
|||
0eb780485c
|
|||
cd5e92b64a
|
|||
982b148329
|
|||
0febee5b51
|
|||
3502f51735
|
|||
493df4e2f2
|
|||
c2c9b59c7a
|
|||
f6e3008ab9
|
|||
15e94cec64
|
@ -7,8 +7,8 @@
|
|||||||
"vscode": {
|
"vscode": {
|
||||||
"settings": {
|
"settings": {
|
||||||
"remote.autoForwardPorts": false,
|
"remote.autoForwardPorts": false,
|
||||||
"remote.localPortHost": "allInterfaces",
|
"remote.localPortHost": "allInterfaces"
|
||||||
},
|
}
|
||||||
},
|
},
|
||||||
"extensions": [
|
"extensions": [
|
||||||
"editorconfig.editorconfig",
|
"editorconfig.editorconfig",
|
||||||
@ -17,8 +17,8 @@
|
|||||||
"davidanson.vscode-markdownlint",
|
"davidanson.vscode-markdownlint",
|
||||||
"bradlc.vscode-tailwindcss",
|
"bradlc.vscode-tailwindcss",
|
||||||
"mikestead.dotenv",
|
"mikestead.dotenv",
|
||||||
"ms-azuretools.vscode-docker",
|
"ms-azuretools.vscode-docker"
|
||||||
],
|
]
|
||||||
},
|
},
|
||||||
"remoteUser": "node",
|
"remoteUser": "node"
|
||||||
}
|
}
|
||||||
|
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@ -13,7 +13,7 @@ jobs:
|
|||||||
- uses: "actions/checkout@v4.1.1"
|
- uses: "actions/checkout@v4.1.1"
|
||||||
|
|
||||||
- name: "Setup Node.js"
|
- name: "Setup Node.js"
|
||||||
uses: "actions/setup-node@v4.0.1"
|
uses: "actions/setup-node@v4.0.2"
|
||||||
with:
|
with:
|
||||||
node-version: "20.x"
|
node-version: "20.x"
|
||||||
cache: "npm"
|
cache: "npm"
|
||||||
|
2
.github/workflows/lint.yml
vendored
2
.github/workflows/lint.yml
vendored
@ -13,7 +13,7 @@ jobs:
|
|||||||
- uses: "actions/checkout@v4.1.1"
|
- uses: "actions/checkout@v4.1.1"
|
||||||
|
|
||||||
- name: "Setup Node.js"
|
- name: "Setup Node.js"
|
||||||
uses: "actions/setup-node@v4.0.1"
|
uses: "actions/setup-node@v4.0.2"
|
||||||
with:
|
with:
|
||||||
node-version: "20.x"
|
node-version: "20.x"
|
||||||
cache: "npm"
|
cache: "npm"
|
||||||
|
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@ -21,7 +21,7 @@ jobs:
|
|||||||
git_commit_gpgsign: true
|
git_commit_gpgsign: true
|
||||||
|
|
||||||
- name: "Setup Node.js"
|
- name: "Setup Node.js"
|
||||||
uses: "actions/setup-node@v4.0.1"
|
uses: "actions/setup-node@v4.0.2"
|
||||||
with:
|
with:
|
||||||
node-version: "20.x"
|
node-version: "20.x"
|
||||||
cache: "npm"
|
cache: "npm"
|
||||||
|
4
.github/workflows/test.yml
vendored
4
.github/workflows/test.yml
vendored
@ -13,7 +13,7 @@ jobs:
|
|||||||
- uses: "actions/checkout@v4.1.1"
|
- uses: "actions/checkout@v4.1.1"
|
||||||
|
|
||||||
- name: "Setup Node.js"
|
- name: "Setup Node.js"
|
||||||
uses: "actions/setup-node@v4.0.1"
|
uses: "actions/setup-node@v4.0.2"
|
||||||
with:
|
with:
|
||||||
node-version: "20.x"
|
node-version: "20.x"
|
||||||
cache: "npm"
|
cache: "npm"
|
||||||
@ -30,7 +30,7 @@ jobs:
|
|||||||
- uses: "actions/checkout@v4.1.1"
|
- uses: "actions/checkout@v4.1.1"
|
||||||
|
|
||||||
- name: "Setup Node.js"
|
- name: "Setup Node.js"
|
||||||
uses: "actions/setup-node@v4.0.1"
|
uses: "actions/setup-node@v4.0.2"
|
||||||
with:
|
with:
|
||||||
node-version: "20.x"
|
node-version: "20.x"
|
||||||
cache: "npm"
|
cache: "npm"
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
FROM node:20.11.0 AS builder-dependencies
|
FROM node:20.12.2 AS builder-dependencies
|
||||||
WORKDIR /usr/src/application
|
WORKDIR /usr/src/application
|
||||||
COPY ./package*.json ./
|
COPY ./package*.json ./
|
||||||
RUN npm clean-install
|
RUN npm clean-install
|
||||||
|
|
||||||
FROM node:20.11.0 AS builder
|
FROM node:20.12.2 AS builder
|
||||||
ENV NEXT_TELEMETRY_DISABLED=1
|
ENV NEXT_TELEMETRY_DISABLED=1
|
||||||
ENV IS_STANDALONE=true
|
ENV IS_STANDALONE=true
|
||||||
WORKDIR /usr/src/application
|
WORKDIR /usr/src/application
|
||||||
@ -11,7 +11,7 @@ COPY --from=builder-dependencies /usr/src/application/node_modules ./node_module
|
|||||||
COPY ./ ./
|
COPY ./ ./
|
||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|
||||||
FROM node:20.11.0-slim AS runner
|
FROM node:20.12.2-slim AS runner
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
ENV HOSTNAME=0.0.0.0
|
ENV HOSTNAME=0.0.0.0
|
||||||
ENV NEXT_TELEMETRY_DISABLED=1
|
ENV NEXT_TELEMETRY_DISABLED=1
|
||||||
|
@ -25,7 +25,7 @@ const BlogPage = async (): Promise<JSX.Element> => {
|
|||||||
return (
|
return (
|
||||||
<main className="flex flex-1 flex-col flex-wrap items-center">
|
<main className="flex flex-1 flex-col flex-wrap items-center">
|
||||||
<div className="mt-10 flex flex-col items-center">
|
<div className="mt-10 flex flex-col items-center">
|
||||||
<h1 className="text-4xl font-semibold text-yellow dark:text-yellow-dark">
|
<h1 className="text-4xl font-semibold text-primary dark:text-primary-dark">
|
||||||
Blog
|
Blog
|
||||||
</h1>
|
</h1>
|
||||||
<p className="mt-6 text-center" data-cy="blog-post-date">
|
<p className="mt-6 text-center" data-cy="blog-post-date">
|
||||||
|
@ -18,7 +18,7 @@ const ErrorHandling = (props: ErrorHandlingProps): JSX.Element => {
|
|||||||
<h1 className="my-6 text-4xl font-semibold">
|
<h1 className="my-6 text-4xl font-semibold">
|
||||||
Error{" "}
|
Error{" "}
|
||||||
<span
|
<span
|
||||||
className="text-yellow dark:text-yellow-dark"
|
className="text-primary dark:text-primary-dark"
|
||||||
data-cy="status-code"
|
data-cy="status-code"
|
||||||
>
|
>
|
||||||
500
|
500
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
.prose a,
|
.prose a,
|
||||||
.prose strong {
|
.prose strong {
|
||||||
@apply !font-semibold text-yellow dark:text-yellow-dark;
|
@apply !font-semibold text-primary dark:text-primary-dark;
|
||||||
}
|
}
|
||||||
|
|
||||||
strong,
|
strong,
|
||||||
|
@ -57,10 +57,13 @@ const RootLayout = (props: RootLayoutProps): JSX.Element => {
|
|||||||
return (
|
return (
|
||||||
<html
|
<html
|
||||||
lang={i18n.locale}
|
lang={i18n.locale}
|
||||||
className={classNames({
|
className={classNames(
|
||||||
dark: theme === "dark",
|
{
|
||||||
light: theme === "light",
|
dark: theme === "dark",
|
||||||
})}
|
light: theme === "light",
|
||||||
|
},
|
||||||
|
"scroll-smooth",
|
||||||
|
)}
|
||||||
style={{
|
style={{
|
||||||
colorScheme: theme,
|
colorScheme: theme,
|
||||||
}}
|
}}
|
||||||
|
@ -10,7 +10,7 @@ const NotFound = (): JSX.Element => {
|
|||||||
<h1 className="my-6 text-4xl font-semibold">
|
<h1 className="my-6 text-4xl font-semibold">
|
||||||
{i18n.translate("errors.error")}{" "}
|
{i18n.translate("errors.error")}{" "}
|
||||||
<span
|
<span
|
||||||
className="text-yellow dark:text-yellow-dark"
|
className="text-primary dark:text-primary-dark"
|
||||||
data-cy="status-code"
|
data-cy="status-code"
|
||||||
>
|
>
|
||||||
404
|
404
|
||||||
@ -20,7 +20,7 @@ const NotFound = (): JSX.Element => {
|
|||||||
{i18n.translate("errors.not-found")}{" "}
|
{i18n.translate("errors.not-found")}{" "}
|
||||||
<Link
|
<Link
|
||||||
href="/"
|
href="/"
|
||||||
className="text-yellow hover:underline dark:text-yellow-dark"
|
className="text-primary hover:underline dark:text-primary-dark"
|
||||||
>
|
>
|
||||||
{i18n.translate("errors.return-to-home-page")}
|
{i18n.translate("errors.return-to-home-page")}
|
||||||
</Link>
|
</Link>
|
||||||
|
@ -21,7 +21,7 @@ export const BlogPost = async (props: BlogPostProps): Promise<JSX.Element> => {
|
|||||||
return (
|
return (
|
||||||
<main className="break-wrap-words flex flex-1 flex-col flex-wrap items-center justify-center">
|
<main className="break-wrap-words flex flex-1 flex-col flex-wrap items-center justify-center">
|
||||||
<div className="my-10 flex flex-col items-center text-center">
|
<div className="my-10 flex flex-col items-center text-center">
|
||||||
<h1 className="text-3xl font-semibold text-yellow dark:text-yellow-dark">
|
<h1 className="text-3xl font-semibold text-primary dark:text-primary-dark">
|
||||||
{blogPost.frontmatter.title}
|
{blogPost.frontmatter.title}
|
||||||
</h1>
|
</h1>
|
||||||
<p className="mt-2" data-cy="blog-post-date">
|
<p className="mt-2" data-cy="blog-post-date">
|
||||||
|
@ -9,37 +9,34 @@ export const BlogPosts = async (): Promise<JSX.Element> => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex w-full items-center justify-center p-8">
|
<div className="flex w-full items-center justify-center p-8">
|
||||||
<div className="w-[1600px]" data-cy="blog-posts">
|
<ul className="w-[1600px]" data-cy="blog-posts">
|
||||||
{posts.map((post, index) => {
|
{posts.map((post) => {
|
||||||
const postPublishedOn = date.format(
|
const postPublishedOn = date.format(
|
||||||
new Date(post.frontmatter.publishedOn),
|
new Date(post.frontmatter.publishedOn),
|
||||||
"DD/MM/YYYY",
|
"DD/MM/YYYY",
|
||||||
)
|
)
|
||||||
return (
|
return (
|
||||||
<Link
|
<li key={post.slug}>
|
||||||
href={`/blog/${post.slug}`}
|
<Link href={`/blog/${post.slug}`} locale="en" data-cy={post.slug}>
|
||||||
key={index}
|
<ShadowContainer className="cursor-pointer p-6 transition-all duration-300 ease-in-out hover:scale-[1.02]">
|
||||||
locale="en"
|
<h2
|
||||||
data-cy={post.slug}
|
data-cy="blog-post-title"
|
||||||
>
|
className="text-xl font-semibold text-primary dark:text-primary-dark"
|
||||||
<ShadowContainer className="cursor-pointer p-6 transition duration-200 ease-in-out hover:-translate-y-2">
|
>
|
||||||
<h2
|
{post.frontmatter.title}
|
||||||
data-cy="blog-post-title"
|
</h2>
|
||||||
className="text-xl font-semibold text-yellow dark:text-yellow-dark"
|
<p data-cy="blog-post-date" className="mt-2">
|
||||||
>
|
{postPublishedOn}
|
||||||
{post.frontmatter.title}
|
</p>
|
||||||
</h2>
|
<p data-cy="blog-post-description" className="mt-3">
|
||||||
<p data-cy="blog-post-date" className="mt-2">
|
{post.frontmatter.description}
|
||||||
{postPublishedOn}
|
</p>
|
||||||
</p>
|
</ShadowContainer>
|
||||||
<p data-cy="blog-post-description" className="mt-3">
|
</Link>
|
||||||
{post.frontmatter.description}
|
</li>
|
||||||
</p>
|
|
||||||
</ShadowContainer>
|
|
||||||
</Link>
|
|
||||||
)
|
)
|
||||||
})}
|
})}
|
||||||
</div>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -19,13 +19,13 @@ A clean code is a code that is **easy** to **read** and easy to **understand**.
|
|||||||
|
|
||||||
But I promise it is not a code that is easy to write, in fact it is really **hard to write Clean Code**.
|
But I promise it is not a code that is easy to write, in fact it is really **hard to write Clean Code**.
|
||||||
|
|
||||||
We could ask ourselves, what is **easy** to **read** and easy to **understand** ?
|
We could ask ourselves, what is **easy** to **read** and easy to **understand**?
|
||||||
|
|
||||||
It depends of many factors, and is somewhat relative to each one of us. The **perfect** Clean code **doesn't exist**, but we can try to be **as perfect as possible**.
|
It depends of many factors, and is somewhat relative to each one of us. The **perfect** Clean code **doesn't exist**, but we can try to be **as perfect as possible**.
|
||||||
|
|
||||||
## Why is it so important?
|
## Why is it so important?
|
||||||
|
|
||||||
Code like that works great, but it is not enough, even if the code will be read by the computer and understood by the machine, we should not forget that the code is **written by human** and will be also **read by human** not only a machine.
|
Code that works is great, but not enough, even if the code will be read and understood by the computer, we should not forget that the code is **written by human** and will be also **read by human** not only a machine.
|
||||||
|
|
||||||
For example the [Linux kernel](https://www.kernel.org/), is one of the biggest open source project with many contributors worldwide. Last data shows that it is about **20 millions** lines of code.
|
For example the [Linux kernel](https://www.kernel.org/), is one of the biggest open source project with many contributors worldwide. Last data shows that it is about **20 millions** lines of code.
|
||||||
|
|
||||||
|
@ -84,7 +84,10 @@ git add .
|
|||||||
git add <file>
|
git add <file>
|
||||||
|
|
||||||
# Commit changes
|
# Commit changes
|
||||||
git commit -m "chore: initial commit"
|
git commit -m "Commit message"
|
||||||
|
|
||||||
|
# Commit changes in the past
|
||||||
|
git commit --date "10 day ago" -m "Commit message"
|
||||||
|
|
||||||
# Add remote repository
|
# Add remote repository
|
||||||
git remote add <remote> <url>
|
git remote add <remote> <url>
|
||||||
|
@ -15,7 +15,7 @@ We don't want to "reinvent the wheel" and rewrite everything from scratch for ea
|
|||||||
|
|
||||||
However, it is important to draw a line between what dependencies are worth the cost and which are not.
|
However, it is important to draw a line between what dependencies are worth the cost and which are not.
|
||||||
|
|
||||||
Most likely adding a [JavaScript npm package `is-odd`](https://www.npmjs.com/package/is-odd) to check if a number is odd or even for example, is not worth it. Writing it ourselves is easier and allows a better maintenance in the long term.
|
Most likely adding a [JavaScript npm package `is-odd`](https://www.npmjs.com/package/is-odd) to check if a number is odd or even for example, is not worth it. Writing it ourselves allows a better maintenance in the long term.
|
||||||
|
|
||||||
Learning **how to solve problems** and how to write efficient code is very important and also a very broad and complicated topic, so this blog post will only be an **introduction to the subject**, and will not go in depth.
|
Learning **how to solve problems** and how to write efficient code is very important and also a very broad and complicated topic, so this blog post will only be an **introduction to the subject**, and will not go in depth.
|
||||||
|
|
||||||
@ -240,7 +240,7 @@ Here is a list of classes of functions that are commonly encountered when analyz
|
|||||||
|
|
||||||
### Estimating efficiency
|
### Estimating efficiency
|
||||||
|
|
||||||
By checking the time complexity of an algorithm, it is possible to check before implementing the algorithm,that it is efficient enough for the problem.
|
By checking the time complexity of an algorithm, it is possible to check before implementing the algorithm, that it is efficient enough for the problem.
|
||||||
|
|
||||||
Example: assume that the time limit for a problem is 1 second and the input size is $n = 10^5$. If the time complexity is $O(n^2)$, the algorithm will perform about $(10^5)^2 = 10^{10}$ operations.
|
Example: assume that the time limit for a problem is 1 second and the input size is $n = 10^5$. If the time complexity is $O(n^2)$, the algorithm will perform about $(10^5)^2 = 10^{10}$ operations.
|
||||||
|
|
||||||
@ -286,7 +286,7 @@ Contiguous subarray is any sub series of elements in a given array that are cont
|
|||||||
|
|
||||||
**Explanation:** The subarray with the largest sum is `[2, 4, -3, 5, 2]` which has a sum of `10`.
|
**Explanation:** The subarray with the largest sum is `[2, 4, -3, 5, 2]` which has a sum of `10`.
|
||||||
|
|
||||||
### Worst solution: Brute force
|
### Worst solution: Brute force ($O(n^3)$)
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def maximum_subarray_sum_cubic(array: list[int]) -> int:
|
def maximum_subarray_sum_cubic(array: list[int]) -> int:
|
||||||
@ -309,7 +309,7 @@ def maximum_subarray_sum_cubic(array: list[int]) -> int:
|
|||||||
return best_sum
|
return best_sum
|
||||||
```
|
```
|
||||||
|
|
||||||
### Better solution: Linear time
|
### Better solution: Linear time ($O(n)$)
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def maximum_subarray_sum_linear(array: list[int]) -> int:
|
def maximum_subarray_sum_linear(array: list[int]) -> int:
|
||||||
|
@ -9,7 +9,7 @@ export const FooterText = (): JSX.Element => {
|
|||||||
<p>
|
<p>
|
||||||
<Link
|
<Link
|
||||||
href="/"
|
href="/"
|
||||||
className="font-semibold text-yellow hover:underline dark:text-yellow-dark"
|
className="font-semibold text-primary hover:underline dark:text-primary-dark"
|
||||||
>
|
>
|
||||||
Théo LUDWIG
|
Théo LUDWIG
|
||||||
</Link>{" "}
|
</Link>{" "}
|
||||||
|
@ -16,7 +16,7 @@ export const FooterVersion = (props: FooterVersionProps): JSX.Element => {
|
|||||||
Version{" "}
|
Version{" "}
|
||||||
<a
|
<a
|
||||||
data-cy="version-link"
|
data-cy="version-link"
|
||||||
className="font-semibold text-yellow hover:underline dark:text-yellow-dark"
|
className="font-semibold text-primary hover:underline dark:text-primary-dark"
|
||||||
href={versionLink}
|
href={versionLink}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
|
import { getVersion } from "@/utils/getVersion"
|
||||||
|
|
||||||
import { FooterText } from "./FooterText"
|
import { FooterText } from "./FooterText"
|
||||||
import { FooterVersion } from "./FooterVersion"
|
import { FooterVersion } from "./FooterVersion"
|
||||||
|
|
||||||
export const Footer = async (): Promise<JSX.Element> => {
|
export const Footer = async (): Promise<JSX.Element> => {
|
||||||
const { readPackage } = await import("read-pkg")
|
const version = await getVersion()
|
||||||
const { version } = await readPackage()
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<footer className="flex flex-col items-center justify-center border-t-2 border-gray-600 bg-white py-6 text-lg dark:border-gray-400 dark:bg-black">
|
<footer className="flex flex-col items-center justify-center border-t-2 border-gray-600 bg-white py-6 text-lg dark:border-gray-400 dark:bg-black">
|
||||||
|
@ -14,8 +14,11 @@ export const Header = (): JSX.Element => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<header className="sticky top-0 z-50 flex w-full justify-between border-b-2 border-gray-600 bg-white px-6 py-2 dark:border-gray-400 dark:bg-black">
|
<header className="sticky top-0 z-50 flex w-full justify-between border-b-2 border-gray-600 bg-white px-6 py-2 dark:border-gray-400 dark:bg-black">
|
||||||
<Link href="/">
|
<h1>
|
||||||
<h1 className="flex items-center justify-center">
|
<Link
|
||||||
|
href="/"
|
||||||
|
className="flex items-center justify-center transition-all duration-300 ease-in-out hover:scale-[1.03]"
|
||||||
|
>
|
||||||
<Image
|
<Image
|
||||||
quality={100}
|
quality={100}
|
||||||
className="size-16"
|
className="size-16"
|
||||||
@ -23,17 +26,17 @@ export const Header = (): JSX.Element => {
|
|||||||
alt="Théo LUDWIG"
|
alt="Théo LUDWIG"
|
||||||
priority
|
priority
|
||||||
/>
|
/>
|
||||||
<strong className="ml-1 hidden font-headline font-semibold text-yellow dark:text-yellow-dark sm:block sm:text-xl">
|
<strong className="ml-1 hidden font-headline font-semibold text-primary dark:text-primary-dark sm:block sm:text-xl">
|
||||||
Théo LUDWIG
|
Théo LUDWIG
|
||||||
</strong>
|
</strong>
|
||||||
</h1>
|
</Link>
|
||||||
</Link>
|
</h1>
|
||||||
<div className="flex justify-between">
|
<div className="flex justify-between">
|
||||||
<div className="flex flex-col items-center justify-center px-6">
|
<div className="flex flex-col items-center justify-center px-6">
|
||||||
<Link
|
<Link
|
||||||
href="/blog"
|
href="/blog"
|
||||||
data-cy="header-blog-link"
|
data-cy="header-blog-link"
|
||||||
className="font-semibold text-yellow hover:underline dark:text-yellow-dark"
|
className="font-semibold text-primary hover:underline dark:text-primary-dark"
|
||||||
>
|
>
|
||||||
Blog
|
Blog
|
||||||
</Link>
|
</Link>
|
||||||
|
@ -20,14 +20,11 @@ export const InterestParagraph = (
|
|||||||
const { title, description } = props
|
const { title, description } = props
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<div className="my-6 text-center text-gray dark:text-gray-dark">
|
||||||
<p className="my-6 text-center text-gray dark:text-gray-dark">
|
<h3 className="text-lg font-semibold text-primary dark:text-primary-dark">
|
||||||
<strong className="text-lg font-semibold text-yellow dark:text-yellow-dark">
|
{title}
|
||||||
{title}
|
</h3>
|
||||||
</strong>
|
<p className="my-2">{htmlParser(description)}</p>
|
||||||
<br />
|
</div>
|
||||||
<span>{htmlParser(description)}</span>
|
|
||||||
</p>
|
|
||||||
</>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ export const InterestItem = (props: InterestItemProps): JSX.Element => {
|
|||||||
return (
|
return (
|
||||||
<li className="m-2 size-8" title={title}>
|
<li className="m-2 size-8" title={title}>
|
||||||
<FontAwesomeIcon
|
<FontAwesomeIcon
|
||||||
className="block size-full text-yellow dark:text-yellow-dark"
|
className="block size-full text-primary dark:text-primary-dark"
|
||||||
icon={fontAwesomeIcon}
|
icon={fontAwesomeIcon}
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
|
@ -16,8 +16,8 @@ export const Interests = (): JSX.Element => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="max-w-full">
|
<div className="max-w-full">
|
||||||
{paragraphs.map((paragraph, index) => {
|
{paragraphs.map((paragraph) => {
|
||||||
return <InterestParagraph key={index} {...paragraph} />
|
return <InterestParagraph key={paragraph.id} {...paragraph} />
|
||||||
})}
|
})}
|
||||||
<InterestsList />
|
<InterestsList />
|
||||||
</div>
|
</div>
|
||||||
|
@ -11,16 +11,18 @@ export const Repository = (props: RepositoryProps): JSX.Element => {
|
|||||||
const { name, description, href } = props
|
const { name, description, href } = props
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ShadowContainer className="relative !mb-4 max-h-32 cursor-pointer p-6 transition-transform duration-200 ease-in-out hover:-translate-y-2">
|
<li>
|
||||||
<a href={href} target="_blank" rel="noopener noreferrer">
|
<a href={href} target="_blank" rel="noopener noreferrer">
|
||||||
<div className="flex">
|
<ShadowContainer className="relative !mb-4 max-h-32 cursor-pointer p-6 transition-all duration-300 ease-in-out hover:scale-[1.03]">
|
||||||
<GitHubIcon className="mr-2 h-6" />
|
<h3 className="flex">
|
||||||
<span className="font-semibold text-yellow dark:text-yellow-dark">
|
<GitHubIcon className="mr-2 h-6" />
|
||||||
{name}
|
<span className="font-semibold text-primary dark:text-primary-dark">
|
||||||
</span>
|
{name}
|
||||||
</div>
|
</span>
|
||||||
<p className="my-4">{description}</p>
|
</h3>
|
||||||
|
<p className="my-4">{description}</p>
|
||||||
|
</ShadowContainer>
|
||||||
</a>
|
</a>
|
||||||
</ShadowContainer>
|
</li>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ export const OpenSource = (): JSX.Element => {
|
|||||||
<p className="text-center">
|
<p className="text-center">
|
||||||
{i18n.translate("home.open-source.description")}
|
{i18n.translate("home.open-source.description")}
|
||||||
</p>
|
</p>
|
||||||
<div className="my-6 grid grid-cols-1 gap-6 md:w-10/12 md:grid-cols-2">
|
<ul className="my-6 grid grid-cols-1 gap-6 md:w-10/12 md:grid-cols-2">
|
||||||
<Repository
|
<Repository
|
||||||
name="nodejs/node"
|
name="nodejs/node"
|
||||||
description="Node.js JavaScript runtime ✨🐢🚀✨"
|
description="Node.js JavaScript runtime ✨🐢🚀✨"
|
||||||
@ -31,7 +31,7 @@ export const OpenSource = (): JSX.Element => {
|
|||||||
description="The React Framework"
|
description="The React Framework"
|
||||||
href="https://github.com/vercel/next.js/commits?author=theoludwig"
|
href="https://github.com/vercel/next.js/commits?author=theoludwig"
|
||||||
/>
|
/>
|
||||||
</div>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ export const PortfolioItem = (props: PortfolioItemProps): JSX.Element => {
|
|||||||
const { title, description, link, image } = props
|
const { title, description, link, image } = props
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ShadowContainer className="relative cursor-pointer items-center sm:ml-10">
|
<li>
|
||||||
<a
|
<a
|
||||||
className="group inline-flex justify-center"
|
className="group inline-flex justify-center"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
@ -21,23 +21,25 @@ export const PortfolioItem = (props: PortfolioItemProps): JSX.Element => {
|
|||||||
href={link}
|
href={link}
|
||||||
aria-label={title}
|
aria-label={title}
|
||||||
>
|
>
|
||||||
<div className="flex justify-center">
|
<ShadowContainer className="relative cursor-pointer items-center sm:ml-10">
|
||||||
<Image
|
<div className="flex justify-center">
|
||||||
quality={100}
|
<Image
|
||||||
className="size-auto transition-opacity duration-500 group-hover:opacity-20 dark:group-hover:opacity-5"
|
quality={100}
|
||||||
width={300}
|
className="size-auto transition-opacity duration-500 group-hover:opacity-20 dark:group-hover:opacity-5"
|
||||||
height={300}
|
width={300}
|
||||||
src={image}
|
height={300}
|
||||||
alt={title}
|
src={image}
|
||||||
/>
|
alt={title}
|
||||||
</div>
|
/>
|
||||||
<div className="absolute bottom-0 h-auto overflow-hidden text-center opacity-0 transition-opacity duration-500 group-hover:opacity-100">
|
</div>
|
||||||
<h3 className="my-6 text-2xl font-semibold text-yellow dark:text-yellow-dark">
|
<div className="absolute bottom-0 h-auto overflow-hidden text-center opacity-0 transition-opacity duration-500 group-hover:opacity-100">
|
||||||
{title}
|
<h3 className="my-6 text-2xl font-semibold text-primary dark:text-primary-dark">
|
||||||
</h3>
|
{title}
|
||||||
<p className="mx-4 my-6 font-semibold">{description}</p>
|
</h3>
|
||||||
</div>
|
<p className="mx-4 my-6 font-semibold">{description}</p>
|
||||||
|
</div>
|
||||||
|
</ShadowContainer>
|
||||||
</a>
|
</a>
|
||||||
</ShadowContainer>
|
</li>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -12,10 +12,10 @@ export const Portfolio = (): JSX.Element => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex w-full flex-wrap justify-center px-3">
|
<ul className="flex w-full flex-wrap justify-center px-3">
|
||||||
{items.map((item, index) => {
|
{items.map((item) => {
|
||||||
return <PortfolioItem key={index} {...item} />
|
return <PortfolioItem key={item.title} {...item} />
|
||||||
})}
|
})}
|
||||||
</div>
|
</ul>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ export const ProfileDescriptionBottom = (): JSX.Element => {
|
|||||||
<br />
|
<br />
|
||||||
<a
|
<a
|
||||||
href="/curriculum-vitae/index.html"
|
href="/curriculum-vitae/index.html"
|
||||||
className="font-semibold text-yellow hover:underline dark:text-yellow-dark"
|
className="font-semibold text-primary hover:underline dark:text-primary-dark"
|
||||||
>
|
>
|
||||||
Curriculum vitæ ({i18n.translate("common.fr-FR")})
|
Curriculum vitæ ({i18n.translate("common.fr-FR")})
|
||||||
</a>
|
</a>
|
||||||
|
@ -5,7 +5,7 @@ export const ProfileInformation = (): JSX.Element => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="mb-6 border-b-2 border-gray-600 pb-2 font-headline dark:border-gray-400">
|
<div className="mb-6 border-b-2 border-gray-600 pb-2 font-headline dark:border-gray-400">
|
||||||
<h1 className="mb-2 text-4xl font-semibold text-yellow dark:text-yellow-dark">
|
<h1 className="mb-2 text-4xl font-semibold text-primary dark:text-primary-dark">
|
||||||
Théo LUDWIG
|
Théo LUDWIG
|
||||||
</h1>
|
</h1>
|
||||||
<h2 className="mb-3 text-base">
|
<h2 className="mb-3 text-base">
|
||||||
|
@ -5,6 +5,7 @@ import { useMemo } from "react"
|
|||||||
import { useI18n } from "@/i18n/i18n.client"
|
import { useI18n } from "@/i18n/i18n.client"
|
||||||
import { BIRTH_DATE, BIRTH_DATE_STRING, getAge } from "@/utils/getAge"
|
import { BIRTH_DATE, BIRTH_DATE_STRING, getAge } from "@/utils/getAge"
|
||||||
import type { CookiesStore } from "@/utils/constants"
|
import type { CookiesStore } from "@/utils/constants"
|
||||||
|
import { useIsMounted } from "@/hooks/useIsMounted"
|
||||||
|
|
||||||
import { ProfileItem } from "./ProfileItem"
|
import { ProfileItem } from "./ProfileItem"
|
||||||
|
|
||||||
@ -21,6 +22,8 @@ export const ProfileList = (props: ProfileListProps): JSX.Element => {
|
|||||||
return getAge(BIRTH_DATE)
|
return getAge(BIRTH_DATE)
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
|
const { isMounted } = useIsMounted()
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ul className="m-0 list-none p-0">
|
<ul className="m-0 list-none p-0">
|
||||||
<ProfileItem
|
<ProfileItem
|
||||||
@ -29,10 +32,15 @@ export const ProfileList = (props: ProfileListProps): JSX.Element => {
|
|||||||
/>
|
/>
|
||||||
<ProfileItem
|
<ProfileItem
|
||||||
title={i18n.translate("home.about.birth-date")}
|
title={i18n.translate("home.about.birth-date")}
|
||||||
value={`${BIRTH_DATE_STRING} (${age} ${i18n.translate(
|
value={
|
||||||
"home.about.years-old",
|
isMounted
|
||||||
)})`}
|
? `${BIRTH_DATE_STRING} (${age} ${i18n.translate(
|
||||||
|
"home.about.years-old",
|
||||||
|
)})`
|
||||||
|
: BIRTH_DATE_STRING
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<ProfileItem
|
<ProfileItem
|
||||||
title={i18n.translate("home.about.nationality")}
|
title={i18n.translate("home.about.nationality")}
|
||||||
value="Alsace, France"
|
value="Alsace, France"
|
||||||
|
@ -13,7 +13,7 @@ export const SocialMediaItem = (props: SocialMediaItemProps): JSX.Element => {
|
|||||||
aria-label={ariaLabel}
|
aria-label={ariaLabel}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="relative inline-block bg-transparent"
|
className="relative inline-block bg-transparent transition-all duration-300 ease-in-out hover:scale-110"
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</a>
|
</a>
|
||||||
|
@ -27,13 +27,13 @@ export const SkillComponent = (props: SkillComponentProps): JSX.Element => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<a
|
<li>
|
||||||
href={skillProperties.link}
|
<a
|
||||||
className="mx-2 max-w-xl text-yellow hover:underline dark:text-yellow-dark"
|
href={skillProperties.link}
|
||||||
target="_blank"
|
className="mx-2 flex max-w-xl flex-col items-center justify-center text-center text-primary hover:underline dark:text-primary-dark"
|
||||||
rel="noopener noreferrer"
|
target="_blank"
|
||||||
>
|
rel="noopener noreferrer"
|
||||||
<div className="text-center">
|
>
|
||||||
<Image
|
<Image
|
||||||
className="inline size-16"
|
className="inline size-16"
|
||||||
quality={100}
|
quality={100}
|
||||||
@ -43,7 +43,7 @@ export const SkillComponent = (props: SkillComponentProps): JSX.Element => {
|
|||||||
src={getImage()}
|
src={getImage()}
|
||||||
/>
|
/>
|
||||||
<p className="mt-1 font-semibold">{skill}</p>
|
<p className="mt-1 font-semibold">{skill}</p>
|
||||||
</div>
|
</a>
|
||||||
</a>
|
</li>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -14,11 +14,11 @@ export const SkillsSection = (props: SkillsSectionProps): JSX.Element => {
|
|||||||
<div className="flex flex-wrap px-4 py-6">
|
<div className="flex flex-wrap px-4 py-6">
|
||||||
<div className="flex-1">
|
<div className="flex-1">
|
||||||
<div className="mb-8 border-b border-gray-600 dark:border-white/10">
|
<div className="mb-8 border-b border-gray-600 dark:border-white/10">
|
||||||
<h3 className="my-3 text-xl font-semibold text-yellow dark:text-yellow-dark">
|
<h3 className="my-3 text-xl font-semibold text-primary dark:text-primary-dark">
|
||||||
{title}
|
{title}
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-wrap justify-around">{children}</div>
|
<ul className="flex flex-wrap justify-around">{children}</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -16,7 +16,7 @@ export const Loader = (props: LoaderProps): JSX.Element => {
|
|||||||
height,
|
height,
|
||||||
}}
|
}}
|
||||||
className={classNames(
|
className={classNames(
|
||||||
"inline-block animate-spin rounded-full border-[3px] border-current border-t-transparent text-yellow dark:text-yellow-dark",
|
"inline-block animate-spin rounded-full border-[3px] border-current border-t-transparent text-primary dark:text-primary-dark",
|
||||||
className,
|
className,
|
||||||
)}
|
)}
|
||||||
role="status"
|
role="status"
|
||||||
|
@ -6,7 +6,7 @@ export const SectionHeading = (props: SectionHeadingProps): JSX.Element => {
|
|||||||
return (
|
return (
|
||||||
<h2
|
<h2
|
||||||
{...rest}
|
{...rest}
|
||||||
className="mb-3 mt-1 text-center text-4xl font-semibold text-yellow dark:text-yellow-dark"
|
className="mb-3 mt-1 text-center text-4xl font-semibold text-primary dark:text-primary-dark"
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</h2>
|
</h2>
|
||||||
|
@ -57,8 +57,8 @@ export const Section = (props: SectionProps): JSX.Element => {
|
|||||||
</p>
|
</p>
|
||||||
) : null}
|
) : null}
|
||||||
<div className="w-full px-3">
|
<div className="w-full px-3">
|
||||||
<ShadowContainer>
|
<ShadowContainer className="w-full px-2 py-4 leading-8 sm:px-16">
|
||||||
<div className="w-full px-16 py-4 leading-8">{children}</div>
|
{children}
|
||||||
</ShadowContainer>
|
</ShadowContainer>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
428
curriculum-vitae/package-lock.json
generated
428
curriculum-vitae/package-lock.json
generated
@ -12,16 +12,16 @@
|
|||||||
"modern-normalize": "2.0.0"
|
"modern-normalize": "2.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "20.11.16",
|
"@types/node": "20.12.7",
|
||||||
"date-and-time": "3.1.1",
|
"date-and-time": "3.1.1",
|
||||||
"vite": "5.0.12",
|
"vite": "5.2.8",
|
||||||
"vite-plugin-html": "3.2.2"
|
"vite-plugin-html": "3.2.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/aix-ppc64": {
|
"node_modules/@esbuild/aix-ppc64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
|
||||||
"integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==",
|
"integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
@ -35,9 +35,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/android-arm": {
|
"node_modules/@esbuild/android-arm": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
|
||||||
"integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==",
|
"integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@ -51,9 +51,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/android-arm64": {
|
"node_modules/@esbuild/android-arm64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
|
||||||
"integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==",
|
"integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -67,9 +67,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/android-x64": {
|
"node_modules/@esbuild/android-x64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
|
||||||
"integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==",
|
"integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -83,9 +83,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/darwin-arm64": {
|
"node_modules/@esbuild/darwin-arm64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
|
||||||
"integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==",
|
"integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -99,9 +99,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/darwin-x64": {
|
"node_modules/@esbuild/darwin-x64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
|
||||||
"integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==",
|
"integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -115,9 +115,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/freebsd-arm64": {
|
"node_modules/@esbuild/freebsd-arm64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
|
||||||
"integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==",
|
"integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -131,9 +131,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/freebsd-x64": {
|
"node_modules/@esbuild/freebsd-x64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
|
||||||
"integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==",
|
"integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -147,9 +147,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-arm": {
|
"node_modules/@esbuild/linux-arm": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
|
||||||
"integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==",
|
"integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@ -163,9 +163,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-arm64": {
|
"node_modules/@esbuild/linux-arm64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
|
||||||
"integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==",
|
"integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -179,9 +179,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-ia32": {
|
"node_modules/@esbuild/linux-ia32": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
|
||||||
"integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==",
|
"integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
@ -195,9 +195,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-loong64": {
|
"node_modules/@esbuild/linux-loong64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
|
||||||
"integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==",
|
"integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"loong64"
|
"loong64"
|
||||||
],
|
],
|
||||||
@ -211,9 +211,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-mips64el": {
|
"node_modules/@esbuild/linux-mips64el": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
|
||||||
"integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==",
|
"integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"mips64el"
|
"mips64el"
|
||||||
],
|
],
|
||||||
@ -227,9 +227,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-ppc64": {
|
"node_modules/@esbuild/linux-ppc64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
|
||||||
"integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==",
|
"integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
@ -243,9 +243,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-riscv64": {
|
"node_modules/@esbuild/linux-riscv64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
|
||||||
"integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==",
|
"integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
@ -259,9 +259,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-s390x": {
|
"node_modules/@esbuild/linux-s390x": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
|
||||||
"integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==",
|
"integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
@ -275,9 +275,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-x64": {
|
"node_modules/@esbuild/linux-x64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
|
||||||
"integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==",
|
"integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -291,9 +291,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/netbsd-x64": {
|
"node_modules/@esbuild/netbsd-x64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
|
||||||
"integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==",
|
"integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -307,9 +307,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/openbsd-x64": {
|
"node_modules/@esbuild/openbsd-x64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
|
||||||
"integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==",
|
"integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -323,9 +323,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/sunos-x64": {
|
"node_modules/@esbuild/sunos-x64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
|
||||||
"integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==",
|
"integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -339,9 +339,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/win32-arm64": {
|
"node_modules/@esbuild/win32-arm64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
|
||||||
"integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==",
|
"integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -355,9 +355,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/win32-ia32": {
|
"node_modules/@esbuild/win32-ia32": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
|
||||||
"integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==",
|
"integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
@ -371,9 +371,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/win32-x64": {
|
"node_modules/@esbuild/win32-x64": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
|
||||||
"integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==",
|
"integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -387,45 +387,45 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jridgewell/gen-mapping": {
|
"node_modules/@jridgewell/gen-mapping": {
|
||||||
"version": "0.3.3",
|
"version": "0.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
|
||||||
"integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
|
"integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jridgewell/set-array": "^1.0.1",
|
"@jridgewell/set-array": "^1.2.1",
|
||||||
"@jridgewell/sourcemap-codec": "^1.4.10",
|
"@jridgewell/sourcemap-codec": "^1.4.10",
|
||||||
"@jridgewell/trace-mapping": "^0.3.9"
|
"@jridgewell/trace-mapping": "^0.3.24"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.0.0"
|
"node": ">=6.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jridgewell/resolve-uri": {
|
"node_modules/@jridgewell/resolve-uri": {
|
||||||
"version": "3.1.1",
|
"version": "3.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
||||||
"integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
|
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.0.0"
|
"node": ">=6.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jridgewell/set-array": {
|
"node_modules/@jridgewell/set-array": {
|
||||||
"version": "1.1.2",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
|
||||||
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
|
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.0.0"
|
"node": ">=6.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jridgewell/source-map": {
|
"node_modules/@jridgewell/source-map": {
|
||||||
"version": "0.3.5",
|
"version": "0.3.6",
|
||||||
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
|
||||||
"integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
|
"integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jridgewell/gen-mapping": "^0.3.0",
|
"@jridgewell/gen-mapping": "^0.3.5",
|
||||||
"@jridgewell/trace-mapping": "^0.3.9"
|
"@jridgewell/trace-mapping": "^0.3.25"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jridgewell/sourcemap-codec": {
|
"node_modules/@jridgewell/sourcemap-codec": {
|
||||||
@ -435,9 +435,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@jridgewell/trace-mapping": {
|
"node_modules/@jridgewell/trace-mapping": {
|
||||||
"version": "0.3.22",
|
"version": "0.3.25",
|
||||||
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz",
|
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
|
||||||
"integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==",
|
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jridgewell/resolve-uri": "^3.1.0",
|
"@jridgewell/resolve-uri": "^3.1.0",
|
||||||
@ -493,9 +493,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-android-arm-eabi": {
|
"node_modules/@rollup/rollup-android-arm-eabi": {
|
||||||
"version": "4.9.6",
|
"version": "4.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.2.tgz",
|
||||||
"integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==",
|
"integrity": "sha512-ahxSgCkAEk+P/AVO0vYr7DxOD3CwAQrT0Go9BJyGQ9Ef0QxVOfjDZMiF4Y2s3mLyPrjonchIMH/tbWHucJMykQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@ -506,9 +506,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-android-arm64": {
|
"node_modules/@rollup/rollup-android-arm64": {
|
||||||
"version": "4.9.6",
|
"version": "4.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.2.tgz",
|
||||||
"integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==",
|
"integrity": "sha512-lAarIdxZWbFSHFSDao9+I/F5jDaKyCqAPMq5HqnfpBw8dKDiCaaqM0lq5h1pQTLeIqueeay4PieGR5jGZMWprw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -519,9 +519,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-darwin-arm64": {
|
"node_modules/@rollup/rollup-darwin-arm64": {
|
||||||
"version": "4.9.6",
|
"version": "4.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.2.tgz",
|
||||||
"integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==",
|
"integrity": "sha512-SWsr8zEUk82KSqquIMgZEg2GE5mCSfr9sE/thDROkX6pb3QQWPp8Vw8zOq2GyxZ2t0XoSIUlvHDkrf5Gmf7x3Q==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -532,9 +532,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-darwin-x64": {
|
"node_modules/@rollup/rollup-darwin-x64": {
|
||||||
"version": "4.9.6",
|
"version": "4.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.2.tgz",
|
||||||
"integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==",
|
"integrity": "sha512-o/HAIrQq0jIxJAhgtIvV5FWviYK4WB0WwV91SLUnsliw1lSAoLsmgEEgRWzDguAFeUEUUoIWXiJrPqU7vGiVkA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -545,9 +545,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
||||||
"version": "4.9.6",
|
"version": "4.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.2.tgz",
|
||||||
"integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==",
|
"integrity": "sha512-nwlJ65UY9eGq91cBi6VyDfArUJSKOYt5dJQBq8xyLhvS23qO+4Nr/RreibFHjP6t+5ap2ohZrUJcHv5zk5ju/g==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@ -558,9 +558,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
||||||
"version": "4.9.6",
|
"version": "4.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.2.tgz",
|
||||||
"integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==",
|
"integrity": "sha512-Pg5TxxO2IVlMj79+c/9G0LREC9SY3HM+pfAwX7zj5/cAuwrbfj2Wv9JbMHIdPCfQpYsI4g9mE+2Bw/3aeSs2rQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -571,9 +571,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
||||||
"version": "4.9.6",
|
"version": "4.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.2.tgz",
|
||||||
"integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==",
|
"integrity": "sha512-cAOTjGNm84gc6tS02D1EXtG7tDRsVSDTBVXOLbj31DkwfZwgTPYZ6aafSU7rD/4R2a34JOwlF9fQayuTSkoclA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -583,10 +583,23 @@
|
|||||||
"linux"
|
"linux"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
|
||||||
|
"version": "4.14.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.2.tgz",
|
||||||
|
"integrity": "sha512-4RyT6v1kXb7C0fn6zV33rvaX05P0zHoNzaXI/5oFHklfKm602j+N4mn2YvoezQViRLPnxP8M1NaY4s/5kXO5cw==",
|
||||||
|
"cpu": [
|
||||||
|
"ppc64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
||||||
"version": "4.9.6",
|
"version": "4.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.2.tgz",
|
||||||
"integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==",
|
"integrity": "sha512-KNUH6jC/vRGAKSorySTyc/yRYlCwN/5pnMjXylfBniwtJx5O7X17KG/0efj8XM3TZU7raYRXJFFReOzNmL1n1w==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
@ -596,10 +609,23 @@
|
|||||||
"linux"
|
"linux"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
||||||
|
"version": "4.14.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.2.tgz",
|
||||||
|
"integrity": "sha512-xPV4y73IBEXToNPa3h5lbgXOi/v0NcvKxU0xejiFw6DtIYQqOTMhZ2DN18/HrrP0PmiL3rGtRG9gz1QE8vFKXQ==",
|
||||||
|
"cpu": [
|
||||||
|
"s390x"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
||||||
"version": "4.9.6",
|
"version": "4.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.2.tgz",
|
||||||
"integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==",
|
"integrity": "sha512-QBhtr07iFGmF9egrPOWyO5wciwgtzKkYPNLVCFZTmr4TWmY0oY2Dm/bmhHjKRwZoGiaKdNcKhFtUMBKvlchH+Q==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -610,9 +636,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-x64-musl": {
|
"node_modules/@rollup/rollup-linux-x64-musl": {
|
||||||
"version": "4.9.6",
|
"version": "4.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.2.tgz",
|
||||||
"integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==",
|
"integrity": "sha512-8zfsQRQGH23O6qazZSFY5jP5gt4cFvRuKTpuBsC1ZnSWxV8ZKQpPqOZIUtdfMOugCcBvFGRa1pDC/tkf19EgBw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -623,9 +649,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
||||||
"version": "4.9.6",
|
"version": "4.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.2.tgz",
|
||||||
"integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==",
|
"integrity": "sha512-H4s8UjgkPnlChl6JF5empNvFHp77Jx+Wfy2EtmYPe9G22XV+PMuCinZVHurNe8ggtwoaohxARJZbaH/3xjB/FA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@ -636,9 +662,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
||||||
"version": "4.9.6",
|
"version": "4.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.2.tgz",
|
||||||
"integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==",
|
"integrity": "sha512-djqpAjm/i8erWYF0K6UY4kRO3X5+T4TypIqw60Q8MTqSBaQNpNXDhxdjpZ3ikgb+wn99svA7jxcXpiyg9MUsdw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
@ -649,9 +675,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
||||||
"version": "4.9.6",
|
"version": "4.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.2.tgz",
|
||||||
"integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==",
|
"integrity": "sha512-teAqzLT0yTYZa8ZP7zhFKEx4cotS8Tkk5XiqNMJhD4CpaWB1BHARE4Qy+RzwnXvSAYv+Q3jAqCVBS+PS+Yee8Q==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@ -668,9 +694,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "20.11.16",
|
"version": "20.12.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.16.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz",
|
||||||
"integrity": "sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==",
|
"integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"undici-types": "~5.26.4"
|
"undici-types": "~5.26.4"
|
||||||
@ -941,15 +967,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/dotenv": {
|
"node_modules/dotenv": {
|
||||||
"version": "16.4.1",
|
"version": "16.4.5",
|
||||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
|
||||||
"integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==",
|
"integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/motdotla/dotenv?sponsor=1"
|
"url": "https://dotenvx.com"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/dotenv-expand": {
|
"node_modules/dotenv-expand": {
|
||||||
@ -962,9 +988,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ejs": {
|
"node_modules/ejs": {
|
||||||
"version": "3.1.9",
|
"version": "3.1.10",
|
||||||
"resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz",
|
"resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
|
||||||
"integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==",
|
"integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"jake": "^10.8.5"
|
"jake": "^10.8.5"
|
||||||
@ -986,9 +1012,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/esbuild": {
|
"node_modules/esbuild": {
|
||||||
"version": "0.19.12",
|
"version": "0.20.2",
|
||||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
|
||||||
"integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==",
|
"integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
@ -998,29 +1024,29 @@
|
|||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@esbuild/aix-ppc64": "0.19.12",
|
"@esbuild/aix-ppc64": "0.20.2",
|
||||||
"@esbuild/android-arm": "0.19.12",
|
"@esbuild/android-arm": "0.20.2",
|
||||||
"@esbuild/android-arm64": "0.19.12",
|
"@esbuild/android-arm64": "0.20.2",
|
||||||
"@esbuild/android-x64": "0.19.12",
|
"@esbuild/android-x64": "0.20.2",
|
||||||
"@esbuild/darwin-arm64": "0.19.12",
|
"@esbuild/darwin-arm64": "0.20.2",
|
||||||
"@esbuild/darwin-x64": "0.19.12",
|
"@esbuild/darwin-x64": "0.20.2",
|
||||||
"@esbuild/freebsd-arm64": "0.19.12",
|
"@esbuild/freebsd-arm64": "0.20.2",
|
||||||
"@esbuild/freebsd-x64": "0.19.12",
|
"@esbuild/freebsd-x64": "0.20.2",
|
||||||
"@esbuild/linux-arm": "0.19.12",
|
"@esbuild/linux-arm": "0.20.2",
|
||||||
"@esbuild/linux-arm64": "0.19.12",
|
"@esbuild/linux-arm64": "0.20.2",
|
||||||
"@esbuild/linux-ia32": "0.19.12",
|
"@esbuild/linux-ia32": "0.20.2",
|
||||||
"@esbuild/linux-loong64": "0.19.12",
|
"@esbuild/linux-loong64": "0.20.2",
|
||||||
"@esbuild/linux-mips64el": "0.19.12",
|
"@esbuild/linux-mips64el": "0.20.2",
|
||||||
"@esbuild/linux-ppc64": "0.19.12",
|
"@esbuild/linux-ppc64": "0.20.2",
|
||||||
"@esbuild/linux-riscv64": "0.19.12",
|
"@esbuild/linux-riscv64": "0.20.2",
|
||||||
"@esbuild/linux-s390x": "0.19.12",
|
"@esbuild/linux-s390x": "0.20.2",
|
||||||
"@esbuild/linux-x64": "0.19.12",
|
"@esbuild/linux-x64": "0.20.2",
|
||||||
"@esbuild/netbsd-x64": "0.19.12",
|
"@esbuild/netbsd-x64": "0.20.2",
|
||||||
"@esbuild/openbsd-x64": "0.19.12",
|
"@esbuild/openbsd-x64": "0.20.2",
|
||||||
"@esbuild/sunos-x64": "0.19.12",
|
"@esbuild/sunos-x64": "0.20.2",
|
||||||
"@esbuild/win32-arm64": "0.19.12",
|
"@esbuild/win32-arm64": "0.20.2",
|
||||||
"@esbuild/win32-ia32": "0.19.12",
|
"@esbuild/win32-ia32": "0.20.2",
|
||||||
"@esbuild/win32-x64": "0.19.12"
|
"@esbuild/win32-x64": "0.20.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/estree-walker": {
|
"node_modules/estree-walker": {
|
||||||
@ -1046,9 +1072,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/fastq": {
|
"node_modules/fastq": {
|
||||||
"version": "1.17.0",
|
"version": "1.17.1",
|
||||||
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz",
|
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
|
||||||
"integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==",
|
"integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"reusify": "^1.0.4"
|
"reusify": "^1.0.4"
|
||||||
@ -1395,9 +1421,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/postcss": {
|
"node_modules/postcss": {
|
||||||
"version": "8.4.33",
|
"version": "8.4.38",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
|
||||||
"integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==",
|
"integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -1416,7 +1442,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"nanoid": "^3.3.7",
|
"nanoid": "^3.3.7",
|
||||||
"picocolors": "^1.0.0",
|
"picocolors": "^1.0.0",
|
||||||
"source-map-js": "^1.0.2"
|
"source-map-js": "^1.2.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^10 || ^12 || >=14"
|
"node": "^10 || ^12 || >=14"
|
||||||
@ -1462,9 +1488,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/rollup": {
|
"node_modules/rollup": {
|
||||||
"version": "4.9.6",
|
"version": "4.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.2.tgz",
|
||||||
"integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==",
|
"integrity": "sha512-WkeoTWvuBoFjFAhsEOHKRoZ3r9GfTyhh7Vff1zwebEFLEFjT1lG3784xEgKiTa7E+e70vsC81roVL2MP4tgEEQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/estree": "1.0.5"
|
"@types/estree": "1.0.5"
|
||||||
@ -1477,19 +1503,21 @@
|
|||||||
"npm": ">=8.0.0"
|
"npm": ">=8.0.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@rollup/rollup-android-arm-eabi": "4.9.6",
|
"@rollup/rollup-android-arm-eabi": "4.14.2",
|
||||||
"@rollup/rollup-android-arm64": "4.9.6",
|
"@rollup/rollup-android-arm64": "4.14.2",
|
||||||
"@rollup/rollup-darwin-arm64": "4.9.6",
|
"@rollup/rollup-darwin-arm64": "4.14.2",
|
||||||
"@rollup/rollup-darwin-x64": "4.9.6",
|
"@rollup/rollup-darwin-x64": "4.14.2",
|
||||||
"@rollup/rollup-linux-arm-gnueabihf": "4.9.6",
|
"@rollup/rollup-linux-arm-gnueabihf": "4.14.2",
|
||||||
"@rollup/rollup-linux-arm64-gnu": "4.9.6",
|
"@rollup/rollup-linux-arm64-gnu": "4.14.2",
|
||||||
"@rollup/rollup-linux-arm64-musl": "4.9.6",
|
"@rollup/rollup-linux-arm64-musl": "4.14.2",
|
||||||
"@rollup/rollup-linux-riscv64-gnu": "4.9.6",
|
"@rollup/rollup-linux-powerpc64le-gnu": "4.14.2",
|
||||||
"@rollup/rollup-linux-x64-gnu": "4.9.6",
|
"@rollup/rollup-linux-riscv64-gnu": "4.14.2",
|
||||||
"@rollup/rollup-linux-x64-musl": "4.9.6",
|
"@rollup/rollup-linux-s390x-gnu": "4.14.2",
|
||||||
"@rollup/rollup-win32-arm64-msvc": "4.9.6",
|
"@rollup/rollup-linux-x64-gnu": "4.14.2",
|
||||||
"@rollup/rollup-win32-ia32-msvc": "4.9.6",
|
"@rollup/rollup-linux-x64-musl": "4.14.2",
|
||||||
"@rollup/rollup-win32-x64-msvc": "4.9.6",
|
"@rollup/rollup-win32-arm64-msvc": "4.14.2",
|
||||||
|
"@rollup/rollup-win32-ia32-msvc": "4.14.2",
|
||||||
|
"@rollup/rollup-win32-x64-msvc": "4.14.2",
|
||||||
"fsevents": "~2.3.2"
|
"fsevents": "~2.3.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1526,9 +1554,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/source-map-js": {
|
"node_modules/source-map-js": {
|
||||||
"version": "1.0.2",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
|
||||||
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
|
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
@ -1557,9 +1585,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/terser": {
|
"node_modules/terser": {
|
||||||
"version": "5.27.0",
|
"version": "5.30.3",
|
||||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz",
|
"resolved": "https://registry.npmjs.org/terser/-/terser-5.30.3.tgz",
|
||||||
"integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==",
|
"integrity": "sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jridgewell/source-map": "^0.3.3",
|
"@jridgewell/source-map": "^0.3.3",
|
||||||
@ -1614,14 +1642,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vite": {
|
"node_modules/vite": {
|
||||||
"version": "5.0.12",
|
"version": "5.2.8",
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-5.2.8.tgz",
|
||||||
"integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==",
|
"integrity": "sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esbuild": "^0.19.3",
|
"esbuild": "^0.20.1",
|
||||||
"postcss": "^8.4.32",
|
"postcss": "^8.4.38",
|
||||||
"rollup": "^4.2.0"
|
"rollup": "^4.13.0"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"vite": "bin/vite.js"
|
"vite": "bin/vite.js"
|
||||||
|
@ -13,9 +13,9 @@
|
|||||||
"modern-normalize": "2.0.0"
|
"modern-normalize": "2.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "20.11.16",
|
"@types/node": "20.12.7",
|
||||||
"date-and-time": "3.1.1",
|
"date-and-time": "3.1.1",
|
||||||
"vite": "5.0.12",
|
"vite": "5.2.8",
|
||||||
"vite-plugin-html": "3.2.2"
|
"vite-plugin-html": "3.2.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
15
hooks/useIsMounted.ts
Normal file
15
hooks/useIsMounted.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import { useEffect, useState } from "react"
|
||||||
|
|
||||||
|
export interface UseIsMountedResult {
|
||||||
|
isMounted: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
export const useIsMounted = (): UseIsMountedResult => {
|
||||||
|
const [isMounted, setIsMounted] = useState(false)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setIsMounted(true)
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
return { isMounted }
|
||||||
|
}
|
@ -25,6 +25,6 @@ const translations = {
|
|||||||
|
|
||||||
export const i18n = new I18n(translations, {
|
export const i18n = new I18n(translations, {
|
||||||
defaultLocale: DEFAULT_LOCALE,
|
defaultLocale: DEFAULT_LOCALE,
|
||||||
availableLocales: LOCALES.slice(),
|
availableLocales: [...LOCALES],
|
||||||
enableFallback: true,
|
enableFallback: true,
|
||||||
})
|
})
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Open-Source Enthusiast",
|
"title": "Open-Source Enthusiast",
|
||||||
"description": "I value the <strong>sharing of knowledge and collaboration</strong> to collectively resolve problems. <br /> The source code of the website is available on <a class='text-yellow dark:text-yellow-dark hover:underline font-semibold' href='https://github.com/theoludwig/theoludwig' target='_blank' rel='noopener noreferrer'>GitHub</a>.",
|
"description": "I value the <strong>sharing of knowledge and collaboration</strong> to collectively resolve problems. <br /> The source code of the website is available on <a class='text-primary dark:text-primary-dark hover:underline font-semibold' href='https://github.com/theoludwig/theoludwig' target='_blank' rel='noopener noreferrer'>GitHub</a>.",
|
||||||
"id": "open-source"
|
"id": "open-source"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Enthousiaste de l'Open-Source",
|
"title": "Enthousiaste de l'Open-Source",
|
||||||
"description": "J'apprécie le <strong>partage des connaissances et la collaboration</strong> pour résoudre des défis collectivement. <br /> Le code source du site est accessible sur <a class='text-yellow dark:text-yellow-dark hover:underline font-semibold' href='https://github.com/theoludwig/theoludwig' target='_blank' rel='noopener noreferrer'>GitHub</a>.",
|
"description": "J'apprécie le <strong>partage des connaissances et la collaboration</strong> pour résoudre des défis collectivement. <br /> Le code source du site est accessible sur <a class='text-primary dark:text-primary-dark hover:underline font-semibold' href='https://github.com/theoludwig/theoludwig' target='_blank' rel='noopener noreferrer'>GitHub</a>.",
|
||||||
"id": "open-source"
|
"id": "open-source"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
11338
package-lock.json
generated
11338
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
68
package.json
68
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "theoludwig",
|
"name": "theoludwig",
|
||||||
"version": "3.2.2",
|
"version": "3.2.5",
|
||||||
"private": true,
|
"private": true,
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -29,19 +29,19 @@
|
|||||||
"postinstall": "husky"
|
"postinstall": "husky"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fontsource/montserrat": "5.0.16",
|
"@fontsource/montserrat": "5.0.17",
|
||||||
"@formatjs/intl-localematcher": "0.5.4",
|
"@formatjs/intl-localematcher": "0.5.4",
|
||||||
"@fortawesome/fontawesome-svg-core": "6.5.1",
|
"@fortawesome/fontawesome-svg-core": "6.5.2",
|
||||||
"@fortawesome/free-brands-svg-icons": "6.5.1",
|
"@fortawesome/free-brands-svg-icons": "6.5.2",
|
||||||
"@fortawesome/free-solid-svg-icons": "6.5.1",
|
"@fortawesome/free-solid-svg-icons": "6.5.2",
|
||||||
"@fortawesome/react-fontawesome": "0.2.0",
|
"@fortawesome/react-fontawesome": "0.2.0",
|
||||||
"@giscus/react": "2.4.0",
|
"@giscus/react": "3.0.0",
|
||||||
"clsx": "2.1.0",
|
"clsx": "2.1.0",
|
||||||
"date-and-time": "3.1.1",
|
"date-and-time": "3.1.1",
|
||||||
"gray-matter": "4.0.3",
|
"gray-matter": "4.0.3",
|
||||||
"html-react-parser": "5.1.1",
|
"html-react-parser": "5.1.10",
|
||||||
"i18n-js": "4.3.2",
|
"i18n-js": "4.3.2",
|
||||||
"katex": "0.16.9",
|
"katex": "0.16.10",
|
||||||
"negotiator": "0.6.3",
|
"negotiator": "0.6.3",
|
||||||
"next": "14.1.0",
|
"next": "14.1.0",
|
||||||
"next-mdx-remote": "4.4.1",
|
"next-mdx-remote": "4.4.1",
|
||||||
@ -53,50 +53,50 @@
|
|||||||
"rehype-slug": "5.1.0",
|
"rehype-slug": "5.1.0",
|
||||||
"remark-gfm": "3.0.1",
|
"remark-gfm": "3.0.1",
|
||||||
"remark-math": "5.1.1",
|
"remark-math": "5.1.1",
|
||||||
"sharp": "0.33.2",
|
"sharp": "0.33.3",
|
||||||
"shiki": "0.14.7",
|
"shiki": "0.14.7",
|
||||||
"unified": "10.1.2",
|
"unified": "10.1.2",
|
||||||
"unist-util-visit": "5.0.0",
|
"unist-util-visit": "5.0.0",
|
||||||
"universal-cookie": "7.0.2"
|
"universal-cookie": "7.1.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@commitlint/cli": "18.6.0",
|
"@commitlint/cli": "19.1.0",
|
||||||
"@commitlint/config-conventional": "18.6.0",
|
"@commitlint/config-conventional": "19.1.0",
|
||||||
"@saithodev/semantic-release-backmerge": "4.0.1",
|
"@saithodev/semantic-release-backmerge": "4.0.1",
|
||||||
"@semantic-release/git": "10.0.1",
|
"@semantic-release/git": "10.0.1",
|
||||||
"@tailwindcss/typography": "0.5.10",
|
"@tailwindcss/typography": "0.5.12",
|
||||||
"@total-typescript/ts-reset": "0.5.1",
|
"@total-typescript/ts-reset": "0.5.1",
|
||||||
"@tsconfig/strictest": "2.0.2",
|
"@tsconfig/strictest": "2.0.5",
|
||||||
"@types/negotiator": "0.6.3",
|
"@types/negotiator": "0.6.3",
|
||||||
"@types/node": "20.11.16",
|
"@types/node": "20.12.7",
|
||||||
"@types/react": "18.2.51",
|
"@types/react": "18.2.78",
|
||||||
"@types/unist": "3.0.2",
|
"@types/unist": "3.0.2",
|
||||||
"@typescript-eslint/eslint-plugin": "6.20.0",
|
"@typescript-eslint/eslint-plugin": "7.6.0",
|
||||||
"@typescript-eslint/parser": "6.20.0",
|
"@typescript-eslint/parser": "7.6.0",
|
||||||
"autoprefixer": "10.4.17",
|
"autoprefixer": "10.4.19",
|
||||||
"curriculum-vitae": "file:./curriculum-vitae",
|
"curriculum-vitae": "file:./curriculum-vitae",
|
||||||
"cypress": "13.6.4",
|
"cypress": "13.7.3",
|
||||||
"editorconfig-checker": "5.1.2",
|
"editorconfig-checker": "5.1.5",
|
||||||
"eslint": "8.56.0",
|
"eslint": "8.56.0",
|
||||||
"eslint-config-conventions": "13.1.0",
|
"eslint-config-conventions": "14.1.0",
|
||||||
"eslint-config-next": "14.1.0",
|
"eslint-config-next": "14.1.0",
|
||||||
"eslint-config-prettier": "9.1.0",
|
"eslint-config-prettier": "9.1.0",
|
||||||
"eslint-plugin-import": "2.29.1",
|
"eslint-plugin-import": "2.29.1",
|
||||||
"eslint-plugin-prettier": "5.1.3",
|
"eslint-plugin-prettier": "5.1.3",
|
||||||
"eslint-plugin-promise": "6.1.1",
|
"eslint-plugin-promise": "6.1.1",
|
||||||
"eslint-plugin-tailwindcss": "3.14.1",
|
"eslint-plugin-tailwindcss": "3.14.2",
|
||||||
"eslint-plugin-unicorn": "50.0.1",
|
"eslint-plugin-unicorn": "51.0.1",
|
||||||
"html-w3c-validator": "1.6.1",
|
"html-w3c-validator": "1.6.1",
|
||||||
"husky": "9.0.10",
|
"husky": "9.0.11",
|
||||||
"lint-staged": "15.2.1",
|
"lint-staged": "15.2.2",
|
||||||
"markdownlint-cli2": "0.12.1",
|
"markdownlint-cli2": "0.13.0",
|
||||||
"markdownlint-rule-relative-links": "2.3.1",
|
"markdownlint-rule-relative-links": "2.3.2",
|
||||||
"postcss": "8.4.33",
|
"postcss": "8.4.38",
|
||||||
"prettier": "3.2.4",
|
"prettier": "3.2.5",
|
||||||
"prettier-plugin-tailwindcss": "0.5.11",
|
"prettier-plugin-tailwindcss": "0.5.13",
|
||||||
"semantic-release": "23.0.0",
|
"semantic-release": "23.0.8",
|
||||||
"start-server-and-test": "2.0.3",
|
"start-server-and-test": "2.0.3",
|
||||||
"tailwindcss": "3.4.1",
|
"tailwindcss": "3.4.3",
|
||||||
"typescript": "5.3.3"
|
"typescript": "5.4.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ const tailwindConfig = {
|
|||||||
DEFAULT: "#333333",
|
DEFAULT: "#333333",
|
||||||
dark: "#b7c0c9",
|
dark: "#b7c0c9",
|
||||||
},
|
},
|
||||||
yellow: {
|
primary: {
|
||||||
DEFAULT: "#006cff",
|
DEFAULT: "#006cff",
|
||||||
dark: "#00aeff",
|
dark: "#00aeff",
|
||||||
},
|
},
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"baseUrl": ".",
|
"baseUrl": ".",
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/*": ["./*"],
|
"@/*": ["./*"]
|
||||||
},
|
},
|
||||||
"types": ["@total-typescript/ts-reset", "cypress"],
|
"types": ["@total-typescript/ts-reset", "cypress"],
|
||||||
"noEmit": true,
|
"noEmit": true,
|
||||||
@ -20,10 +20,10 @@
|
|||||||
"isolatedModules": true,
|
"isolatedModules": true,
|
||||||
"plugins": [
|
"plugins": [
|
||||||
{
|
{
|
||||||
"name": "next",
|
"name": "next"
|
||||||
},
|
}
|
||||||
],
|
]
|
||||||
},
|
},
|
||||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
||||||
"exclude": ["node_modules", ".next"],
|
"exclude": ["node_modules", ".next"]
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
export const BIRTH_DATE_DAY = "31" as const
|
export const BIRTH_DATE_DAY = "31"
|
||||||
export const BIRTH_DATE_MONTH = "03" as const
|
export const BIRTH_DATE_MONTH = "03"
|
||||||
export const BIRTH_DATE_YEAR = "2003" as const
|
export const BIRTH_DATE_YEAR = "2003"
|
||||||
export const BIRTH_DATE_STRING =
|
export const BIRTH_DATE_STRING =
|
||||||
`${BIRTH_DATE_DAY}/${BIRTH_DATE_MONTH}/${BIRTH_DATE_YEAR}` as const
|
`${BIRTH_DATE_DAY}/${BIRTH_DATE_MONTH}/${BIRTH_DATE_YEAR}` as const
|
||||||
export const BIRTH_DATE_ISO_8601 =
|
export const BIRTH_DATE_ISO_8601 =
|
||||||
|
8
utils/getVersion.ts
Normal file
8
utils/getVersion.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
export const getVersion = async (): Promise<string> => {
|
||||||
|
if (process.env.NODE_ENV === "development") {
|
||||||
|
return "0.0.0-development"
|
||||||
|
}
|
||||||
|
const { readPackage } = await import("read-pkg")
|
||||||
|
const { version } = await readPackage()
|
||||||
|
return version
|
||||||
|
}
|
Reference in New Issue
Block a user