Skip to content

Commit 20c1655

Browse files
committed
feat: added getBase64 and formatted code
1 parent 0ccd48a commit 20c1655

File tree

7 files changed

+61
-11
lines changed

7 files changed

+61
-11
lines changed

.github/workflows/docs.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ on:
44
push:
55
branches: [main]
66
paths:
7-
- "docs/**"
8-
- "package.json" # for versioning
7+
- 'docs/**'
8+
- 'package.json' # for versioning
99

1010
# leave empty, we just want the button
1111
workflow_dispatch:

docs/.vitepress/config.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { defineConfig } from 'vitepress'
2-
import { name } from '../../package.json';
2+
import { name } from '../../package.json'
33

4-
const isProd = process.env.NODE_ENV === 'production';
4+
const isProd = process.env.NODE_ENV === 'production'
55

66
// https://vitepress.dev/reference/site-config
77
export default defineConfig({
8-
title: "Utilstash",
9-
description: "A utility package for various common tasks",
8+
title: 'Utilstash',
9+
description: 'A utility package for various common tasks',
1010
themeConfig: {
1111
// https://vitepress.dev/reference/default-theme-config
1212
nav: [
@@ -28,5 +28,5 @@ export default defineConfig({
2828
{ icon: 'github', link: 'https://github.com/vuejs/vitepress' }
2929
]
3030
},
31-
base: isProd ? `/${name}/` : undefined,
31+
base: isProd ? `/${name}/` : undefined
3232
})

docs/api-examples.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,15 @@ const { theme, page, frontmatter } = useData()
1818
## Results
1919

2020
### Theme Data
21+
2122
<pre>{{ theme }}</pre>
2223

2324
### Page Data
25+
2426
<pre>{{ page }}</pre>
2527

2628
### Page Frontmatter
29+
2730
<pre>{{ frontmatter }}</pre>
2831
```
2932

@@ -36,12 +39,15 @@ const { site, theme, page, frontmatter } = useData()
3639
## Results
3740

3841
### Theme Data
42+
3943
<pre>{{ theme }}</pre>
4044

4145
### Page Data
46+
4247
<pre>{{ page }}</pre>
4348

4449
### Page Frontmatter
50+
4551
<pre>{{ frontmatter }}</pre>
4652

4753
## More

docs/index.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
layout: home
44

55
hero:
6-
name: "Utilstash"
7-
text: "A utility package for various common tasks"
6+
name: 'Utilstash'
7+
text: 'A utility package for various common tasks'
88
tagline: Streamline your development with a versatile toolkit of utilities.
99
actions:
1010
- theme: brand
@@ -22,4 +22,3 @@ features:
2222
- title: Optimized for Performance
2323
details: Benefit from optimized and efficient functions that ensure smooth and reliable operation.
2424
---
25-

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,4 @@
4242
"peerDependencies": {
4343
"typescript": "^5.0.0"
4444
}
45-
}
45+
}

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ export { getFileDataURI } from '@/utils/get-file-data-uri'
66
export { validateFile } from '@/utils/validate-file'
77
export { getFileExtension } from '@/utils/get-file-extension'
88
export { formatFileSize } from '@/utils/format-file-size'
9+
export { getBase64 } from '@/utils/get-base64'

src/utils/get-base64.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
const isBrowser =
2+
typeof window !== 'undefined' && typeof window.document !== 'undefined'
3+
4+
export const getBase64 = (
5+
file: File | Buffer,
6+
mimeType?: string
7+
): Promise<string> => {
8+
if (isBrowser) {
9+
return new Promise((resolve, reject) => {
10+
if (!(file instanceof File)) {
11+
reject(
12+
new Error(
13+
'Invalid file type for browser environment. Expected a File object.'
14+
)
15+
)
16+
return
17+
}
18+
19+
const reader = new FileReader()
20+
reader.onloadend = () => {
21+
const base64File = reader.result as string
22+
resolve(`data:${file.type};base64,${base64File.split(',')[1]}`)
23+
}
24+
reader.onerror = () => reject(new Error('Error reading file'))
25+
26+
reader.readAsDataURL(file)
27+
})
28+
} else {
29+
return new Promise((resolve, reject) => {
30+
if (!(file instanceof Buffer)) {
31+
reject(
32+
new Error(
33+
'Invalid file type for Node.js environment. Expected a Buffer object.'
34+
)
35+
)
36+
return
37+
}
38+
39+
const base64File = file.toString('base64')
40+
const mime = mimeType || 'application/octet-stream' // Provide a default MIME type if not provided
41+
resolve(`data:${mime};base64,${base64File}`)
42+
})
43+
}
44+
}

0 commit comments

Comments
 (0)