@dicebear/converter
Advanced tools
Comparing version 5.0.0-alpha.24 to 5.0.0-alpha.25
import { getMimeType } from './utils/mime-type.js'; | ||
import { ensureSize } from './utils/svg.js'; | ||
const encoder = new TextEncoder(); | ||
const decoder = new TextDecoder(); | ||
export const toFormat = function (svg, format, exif) { | ||
return { | ||
toDataUri: async () => { | ||
return toDataUri(await toBlob(svg, format, exif)); | ||
return toDataUri(await toArrayBuffer(svg, format, exif), format); | ||
}, | ||
toFile: async (name) => { | ||
return toFile(await toBlob(svg, format, exif), name); | ||
return toFile(await toArrayBuffer(svg, format, exif), format, name); | ||
}, | ||
toArrayBuffer: async () => { | ||
return (await toBlob(svg, format, exif)).arrayBuffer(); | ||
return toArrayBuffer(svg, format, exif); | ||
}, | ||
}; | ||
}; | ||
async function toDataUri(blob) { | ||
if (blob.type === getMimeType('svg')) { | ||
return `data:image/svg+xml;utf8,${encodeURIComponent(await blob.text())}`; | ||
async function toDataUri(arrayBuffer, format) { | ||
if (format === 'svg') { | ||
return `data:${getMimeType('svg')};utf8,${encodeURIComponent(decoder.decode(arrayBuffer))}`; | ||
} | ||
else { | ||
return new Promise((resolve, reject) => { | ||
const reader = new FileReader(); | ||
reader.readAsDataURL(blob); | ||
reader.onload = () => resolve(reader.result); | ||
reader.onerror = (e) => reject(e); | ||
}); | ||
let binary = ''; | ||
const bytes = new Uint8Array(arrayBuffer); | ||
const len = bytes.byteLength; | ||
for (let i = 0; i < len; i++) { | ||
binary += String.fromCharCode(bytes[i]); | ||
} | ||
return `data:${getMimeType(format)};base64,${window.btoa(binary)}`; | ||
} | ||
} | ||
async function toFile(blob, name) { | ||
async function toFile(arrayBuffer, format, name) { | ||
const link = document.createElement('a'); | ||
link.href = await toDataUri(blob); | ||
link.href = await toDataUri(arrayBuffer, format); | ||
link.download = name; | ||
@@ -36,3 +39,3 @@ link.click(); | ||
} | ||
async function toBlob(rawSvg, format, exif) { | ||
async function toArrayBuffer(rawSvg, format, exif) { | ||
if (exif) { | ||
@@ -43,6 +46,6 @@ console.warn('The `exif` option is not supported in the browser version of `@dicebear/converter`.'); | ||
if (format === 'svg') { | ||
return new Blob([rawSvg], { type: getMimeType('svg') }); | ||
return encoder.encode(rawSvg); | ||
} | ||
let { svg, size } = ensureSize(rawSvg); | ||
const svgBlob = new Blob([svg], { type: getMimeType('svg') }); | ||
const svgArrayBuffer = encoder.encode(svg); | ||
const canvas = document.createElement('canvas'); | ||
@@ -62,3 +65,3 @@ canvas.width = size; | ||
img.height = size; | ||
img.setAttribute('src', await toDataUri(svgBlob)); | ||
img.setAttribute('src', await toDataUri(svgArrayBuffer, 'svg')); | ||
return new Promise((resolve, reject) => { | ||
@@ -68,3 +71,5 @@ img.onload = () => { | ||
canvas.toBlob((blob) => { | ||
blob ? resolve(blob) : reject(new Error('Could not create blob')); | ||
blob | ||
? resolve(blob.arrayBuffer()) | ||
: reject(new Error('Could not create blob')); | ||
}, `image/${format}`); | ||
@@ -71,0 +76,0 @@ }; |
@@ -7,3 +7,3 @@ /*! | ||
*/ | ||
export * from './core.js'; | ||
export { toFormat } from './core.js'; | ||
export * from './types.js'; |
@@ -7,3 +7,3 @@ /*! | ||
*/ | ||
export * from './core.js'; | ||
export { toFormat } from './core.js'; | ||
export * from './types.js'; |
import { promises as fs } from 'node:fs'; | ||
import { Blob } from 'node:buffer'; | ||
import { getMimeType } from '../utils/mime-type.js'; | ||
@@ -7,28 +6,30 @@ import { ensureSize } from '../utils/svg.js'; | ||
import { ensurePackage } from '../utils/package-helper.js'; | ||
const encoder = new TextEncoder(); | ||
const decoder = new TextDecoder(); | ||
export const toFormat = function (svg, format, exif) { | ||
return { | ||
toDataUri: async () => { | ||
return toDataUri(await toBlob(svg, format, exif)); | ||
return toDataUri(await toArrayBuffer(svg, format, exif), format); | ||
}, | ||
toFile: async (name) => { | ||
return toFile(await toBlob(svg, format, exif), name); | ||
return toFile(await toArrayBuffer(svg, format, exif), name); | ||
}, | ||
toArrayBuffer: async () => { | ||
return (await toBlob(svg, format, exif)).arrayBuffer(); | ||
return toArrayBuffer(svg, format, exif); | ||
}, | ||
}; | ||
}; | ||
async function toDataUri(blob) { | ||
if (blob.type === getMimeType('svg')) { | ||
return `data:${blob.type};utf8,${encodeURIComponent(await blob.text())}`; | ||
async function toDataUri(arrayBuffer, format) { | ||
if (format === 'svg') { | ||
return `data:${getMimeType(format)};utf8,${encodeURIComponent(decoder.decode(arrayBuffer))}`; | ||
} | ||
else { | ||
const buffer = Buffer.from(await blob.arrayBuffer()); | ||
return `data:image/${blob.type};base64,${buffer.toString('base64')}`; | ||
const buffer = Buffer.from(arrayBuffer); | ||
return `data:${getMimeType(format)};base64,${buffer.toString('base64')}`; | ||
} | ||
} | ||
async function toFile(blob, name) { | ||
return fs.writeFile(name, Buffer.from(await blob.arrayBuffer())); | ||
async function toFile(arrayBuffer, name) { | ||
return fs.writeFile(name, Buffer.from(arrayBuffer)); | ||
} | ||
async function toBlob(rawSvg, format, exif) { | ||
async function toArrayBuffer(rawSvg, format, exif) { | ||
if (format === 'svg') { | ||
@@ -38,3 +39,3 @@ if (exif) { | ||
} | ||
return new Blob([rawSvg], { type: getMimeType('svg') }); | ||
return encoder.encode(rawSvg); | ||
} | ||
@@ -70,3 +71,3 @@ await ensurePackage('@resvg/resvg-js', '1.4.0'); | ||
} | ||
return new Blob([buffer], { type: getMimeType(format) }); | ||
return buffer.buffer; | ||
} |
/*! | ||
* DiceBear Convert (@dicebear/converter) | ||
* DiceBear Converter (@dicebear/converter) | ||
* | ||
@@ -7,3 +7,3 @@ * Code licensed under MIT (https://github.com/dicebear/dicebear/blob/main/LICENSE) | ||
*/ | ||
export * from './core.js'; | ||
export { toFormat } from './core.js'; | ||
export * from '../types.js'; |
/*! | ||
* DiceBear Convert (@dicebear/converter) | ||
* DiceBear Converter (@dicebear/converter) | ||
* | ||
@@ -7,3 +7,3 @@ * Code licensed under MIT (https://github.com/dicebear/dicebear/blob/main/LICENSE) | ||
*/ | ||
export * from './core.js'; | ||
export { toFormat } from './core.js'; | ||
export * from '../types.js'; |
{ | ||
"name": "@dicebear/converter", | ||
"version": "5.0.0-alpha.24", | ||
"version": "5.0.0-alpha.25", | ||
"description": "SVG Converter for DiceBear", | ||
@@ -56,3 +56,3 @@ "keywords": [ | ||
}, | ||
"gitHead": "e54519daa65236ed864496663266f0bac5f06118" | ||
"gitHead": "734200558f38d22fd831e84cfeff82d8caa242fe" | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
546010
239