diff --git a/.gitignore b/.gitignore
index 07f94c5..cb8cc80 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,6 +28,3 @@ pnpm-debug.log*
/playwright-report/
/blob-report/
/playwright/.cache/
-
-# Custom
-src/assets/
diff --git a/src/pages/next.astro b/src/pages/next.astro
index 587781a..e6c1c0f 100644
--- a/src/pages/next.astro
+++ b/src/pages/next.astro
@@ -3,22 +3,18 @@ import Layout from '../layouts/Layout.astro'
import Button from '../templates/components/Button/Button.tsx'
import Image from '../templates/components/Image/Image'
import Page from '../templates/components/Page/Page'
-import sampleA from '../templates/images/sample.avif'
-import sampleW from '../templates/images/sample.avif'
-import OptimizeImage from '../templates/components/Optimizer/OptimizeImage'
---
-
+
Built-in Components
-
+
diff --git a/src/templates/components/Image/Image.tsx b/src/templates/components/Image/Image.tsx
index 2df6d4c..bfb3b19 100644
--- a/src/templates/components/Image/Image.tsx
+++ b/src/templates/components/Image/Image.tsx
@@ -1,17 +1,35 @@
+import sharp from 'sharp'
+import fs from 'fs'
+
interface Props {
- avif: string
- webp: string
+ src: string
size?: number
alt?: string
}
+const convertImage = async (props: Props) => {
+ const avifOutputPath = `src/assets/optimized/${props.src.split('.').slice(0, -1).join('.')}.avif`
+ const webpOutputPath = `src/assets/optimized/${props.src.split('.').slice(0, -1).join('.')}.webp`
+
+ if (!fs.existsSync(webpOutputPath) || !fs.existsSync(avifOutputPath)) {
+ const avifBuffer = await sharp(`src/assets/images/${props.src}`).avif({ quality: 60 }).resize(props.size).toBuffer()
+ await sharp(avifBuffer).toFile(avifOutputPath)
+
+ const webpBuffer = await sharp(`src/assets/images/${props.src}`).webp({ quality: 75 }).resize(props.size).toBuffer()
+ await sharp(webpBuffer).toFile(webpOutputPath)
+ }
+}
+
export default (props: Props) => {
+ const imageSrc = `src/assets/optimized/${props.src.split('.').slice(0, -1).join('.')}.webp`
+ convertImage(props)
+
return (
<>
-
-
-
+
+
+
>
)
diff --git a/src/templates/components/Optimizer/OptimizeImage.tsx b/src/templates/components/Optimizer/OptimizeImage.tsx
deleted file mode 100644
index 4edf349..0000000
--- a/src/templates/components/Optimizer/OptimizeImage.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import sharp from 'sharp'
-
-interface Props {
- src: string
- size?: number
-}
-
-const convertImage = async (props: Props) => {
- const avifOutputPath = `src/templates/images/${props.src.split('.').slice(0, -1).join('.')}.avif`
- const webpOutputPath = `src/templates/images/${props.src.split('.').slice(0, -1).join('.')}.webp`
-
- const avifBuffer = await sharp(`src/assets/images/${props.src}`).avif({ quality: 60 }).resize(props.size).toBuffer()
- await sharp(avifBuffer).toFile(avifOutputPath)
-
- const webpBuffer = await sharp(`src/assets/images/${props.src}`).webp({ quality: 75 }).resize(props.size).toBuffer()
- await sharp(webpBuffer).toFile(webpOutputPath)
-}
-
-export default (props: Props) => {
- convertImage(props)
-}
diff --git a/src/templates/components/Optimizer/OptimizeLogo.tsx b/src/templates/components/Optimizer/OptimizeLogo.tsx
index 83172d8..fb39b0d 100644
--- a/src/templates/components/Optimizer/OptimizeLogo.tsx
+++ b/src/templates/components/Optimizer/OptimizeLogo.tsx
@@ -2,6 +2,7 @@ import sharp from 'sharp'
interface Props {
size?: number
+ alt?: string
}
const convertLogo = async (props: Props) => {
diff --git a/src/templates/images/sample.avif b/src/templates/images/sample.avif
deleted file mode 100644
index 78c62db..0000000
Binary files a/src/templates/images/sample.avif and /dev/null differ
diff --git a/src/templates/images/sample.webp b/src/templates/images/sample.webp
deleted file mode 100644
index 0cb2279..0000000
Binary files a/src/templates/images/sample.webp and /dev/null differ