⬅️ Back to Table of Contents
📄 index.ts
📊 Analysis Summary
Metric |
Count |
🔧 Functions |
4 |
📦 Imports |
8 |
📊 Variables & Constants |
4 |
⚡ Async/Await Patterns |
3 |
🟢 Vue Composition API |
1 |
📐 Interfaces |
4 |
📚 Table of Contents
🛠️ File Location:
📂 packages/core/useBase64/index.ts
📦 Imports
Name |
Source |
MaybeRefOrGetter |
vue |
ShallowRef |
vue |
isClient |
@vueuse/shared |
isRef |
vue |
shallowRef |
vue |
toValue |
vue |
watch |
vue |
getDefaultSerialization |
./serialization |
Variables & Constants
Name |
Type |
Kind |
Value |
Exported |
img |
HTMLImageElement |
const |
_target.cloneNode(false) as HTMLImageElement |
✗ |
ctx |
CanvasRenderingContext2D |
const |
canvas.getContext('2d')! |
✗ |
_serializeFn |
any |
const |
options?.serializer || getDefaultSerialization(_target) |
✗ |
fr |
FileReader |
const |
new FileReader() |
✗ |
Async/Await Patterns
Type |
Function |
Await Expressions |
Promise Chains |
promise-chain |
execute |
none |
new Promise(...), imgLoaded(img).then(() => { |
const canvas = document.createElement('canvas') |
|
|
|
const ctx = canvas.getContext('2d')! |
|
|
|
canvas.width = img.width |
|
|
|
canvas.height = img.height |
|
|
|
ctx.drawImage(img, 0, 0, canvas.width, canvas.height) |
|
|
|
resolve(canvas.toDataURL(options?.type, options?.quality)) |
|
|
|
}).catch, imgLoaded(img).then, promise.value.then |
|
|
|
promise-chain |
imgLoaded |
none |
new Promise(...) |
promise-chain |
blobToBase64 |
none |
new Promise(...) |
Vue Composition API
Name |
Type |
Reactive Variables |
Composables |
watch |
watch |
none |
none |
Functions
useBase64(target: MaybeRefOrGetter<string | undefined>, options: UseBase64Options): UseBase64Return
Code
export function useBase64(target: MaybeRefOrGetter<string | undefined>, options?: UseBase64Options): UseBase64Return
- Parameters:
target: MaybeRefOrGetter<string | undefined>
options: UseBase64Options
- Return Type:
UseBase64Return
execute(): any
Code
function execute() {
if (!isClient)
return
promise.value = new Promise<string>((resolve, reject) => {
try {
const _target = toValue(target)
if (_target == null) {
resolve('')
}
else if (typeof _target === 'string') {
resolve(blobToBase64(new Blob([_target], { type: 'text/plain' })))
}
else if (_target instanceof Blob) {
resolve(blobToBase64(_target))
}
else if (_target instanceof ArrayBuffer) {
resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))))
}
else if (_target instanceof HTMLCanvasElement) {
resolve(_target.toDataURL(options?.type, options?.quality))
}
else if (_target instanceof HTMLImageElement) {
const img = _target.cloneNode(false) as HTMLImageElement
img.crossOrigin = 'Anonymous'
imgLoaded(img).then(() => {
const canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')!
canvas.width = img.width
canvas.height = img.height
ctx.drawImage(img, 0, 0, canvas.width, canvas.height)
resolve(canvas.toDataURL(options?.type, options?.quality))
}).catch(reject)
}
else if (typeof _target === 'object') {
const _serializeFn = options?.serializer || getDefaultSerialization(_target)
const serialized = _serializeFn(_target)
return resolve(blobToBase64(new Blob([serialized], { type: 'application/json' })))
}
else {
reject(new Error('target is unsupported types'))
}
}
catch (error) {
reject(error)
}
})
promise.value.then((res) => {
base64.value = options?.dataUrl === false
? res.replace(/^data:.*?;base64,/, '')
: res
})
return promise.value
}
- Return Type:
any
- Calls:
toValue (from vue)
resolve
blobToBase64
window.btoa
String.fromCharCode
_target.toDataURL
_target.cloneNode
imgLoaded(img).then(() => {
const canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')!
canvas.width = img.width
canvas.height = img.height
ctx.drawImage(img, 0, 0, canvas.width, canvas.height)
resolve(canvas.toDataURL(options?.type, options?.quality))
}).catch
getDefaultSerialization (from ./serialization)
_serializeFn
reject
promise.value.then
res.replace
imgLoaded(img: HTMLImageElement): Promise<void>
Code
function imgLoaded(img: HTMLImageElement) {
return new Promise<void>((resolve, reject) => {
if (!img.complete) {
img.onload = () => {
resolve()
}
img.onerror = reject
}
else {
resolve()
}
})
}
- Parameters:
img: HTMLImageElement
- Return Type:
Promise<void>
- Calls:
resolve
blobToBase64(blob: Blob): Promise<string>
Code
function blobToBase64(blob: Blob) {
return new Promise<string>((resolve, reject) => {
const fr = new FileReader()
fr.onload = (e) => {
resolve(e.target!.result as string)
}
fr.onerror = reject
fr.readAsDataURL(blob)
})
}
- Parameters:
blob: Blob
- Return Type:
Promise<string>
- Calls:
resolve
fr.readAsDataURL
Interfaces
UseBase64Options
Interface Code
export interface UseBase64Options {
/**
* Output as Data URL format
*
* @default true
*/
dataUrl?: boolean
}
Properties
Name |
Type |
Optional |
Description |
dataUrl |
boolean |
✓ |
|
ToDataURLOptions
Interface Code
export interface ToDataURLOptions extends UseBase64Options {
/**
* MIME type
*/
type?: string | undefined
/**
* Image quality of jpeg or webp
*/
quality?: any
}
Properties
Name |
Type |
Optional |
Description |
type |
string | undefined |
✓ |
|
quality |
any |
✓ |
|
UseBase64ObjectOptions<T>
Interface Code
export interface UseBase64ObjectOptions<T> extends UseBase64Options {
serializer?: (v: T) => string
}
Properties
Name |
Type |
Optional |
Description |
serializer |
(v: T) => string |
✓ |
|
UseBase64Return
Interface Code
export interface UseBase64Return {
base64: ShallowRef<string>
promise: ShallowRef<Promise<string>>
execute: () => Promise<string>
}
Properties
Name |
Type |
Optional |
Description |
base64 |
ShallowRef<string> |
✗ |
|
promise |
ShallowRef<Promise<string>> |
✗ |
|
execute |
() => Promise<string> |
✗ |
|