Socket
Socket
Sign inDemoInstall

@dicebear/converter

Package Overview
Dependencies
Maintainers
1
Versions
95
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 5.0.0-alpha.24 to 5.0.0-alpha.25

43

lib/core.js
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"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc