@dicebear/converter 9.2.1 → 9.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/node/core.js +17 -21
- package/lib/types.d.ts +7 -0
- package/lib/utils/svg.d.ts +2 -0
- package/lib/utils/svg.js +14 -0
- package/package.json +8 -8
package/lib/node/core.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { promises as fs } from 'node:fs';
|
|
2
2
|
import { getMimeType } from '../utils/mime-type.js';
|
|
3
|
-
import { ensureSize } from '../utils/svg.js';
|
|
3
|
+
import { ensureSize, getMetadata } from '../utils/svg.js';
|
|
4
4
|
import * as tmp from 'tmp-promise';
|
|
5
5
|
import { renderAsync } from '@resvg/resvg-js';
|
|
6
6
|
import sharp from 'sharp';
|
|
@@ -65,31 +65,27 @@ async function toBuffer(rawSvg, format, exif, options) {
|
|
|
65
65
|
// https://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata
|
|
66
66
|
// https://developers.google.com/search/docs/appearance/structured-data/image-license-metadata
|
|
67
67
|
function getExif(svg) {
|
|
68
|
+
const metadata = getMetadata(svg);
|
|
68
69
|
const exif = {};
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const licenseUrl = svg.match(/<dcterms:license[^>]*>(.*?)<\/dcterms:license>/s);
|
|
73
|
-
const copyright = svg.match(/<dc:rights[^>]*>(.*?)<\/dc:rights>/s);
|
|
74
|
-
if (sourceName) {
|
|
75
|
-
exif['IPTC:ObjectName'] = sourceName[1];
|
|
76
|
-
exif['XMP-dc:Title'] = sourceName[1];
|
|
70
|
+
if (metadata.title) {
|
|
71
|
+
exif['IPTC:ObjectName'] = metadata.title;
|
|
72
|
+
exif['XMP-dc:Title'] = metadata.title;
|
|
77
73
|
}
|
|
78
|
-
if (
|
|
79
|
-
exif['XMP-plus:LicensorURL'] =
|
|
74
|
+
if (metadata.source) {
|
|
75
|
+
exif['XMP-plus:LicensorURL'] = metadata.source;
|
|
80
76
|
}
|
|
81
|
-
if (
|
|
82
|
-
exif['IPTC:By-line'] =
|
|
83
|
-
exif['XMP-dc:Creator'] =
|
|
84
|
-
exif['IPTC:Credit'] =
|
|
85
|
-
exif['XMP-photoshop:Credit'] =
|
|
77
|
+
if (metadata.creator) {
|
|
78
|
+
exif['IPTC:By-line'] = metadata.creator;
|
|
79
|
+
exif['XMP-dc:Creator'] = metadata.creator;
|
|
80
|
+
exif['IPTC:Credit'] = metadata.creator;
|
|
81
|
+
exif['XMP-photoshop:Credit'] = metadata.creator;
|
|
86
82
|
}
|
|
87
|
-
if (
|
|
88
|
-
exif['XMP-xmpRights:WebStatement'] =
|
|
83
|
+
if (metadata.license) {
|
|
84
|
+
exif['XMP-xmpRights:WebStatement'] = metadata.license;
|
|
89
85
|
}
|
|
90
|
-
if (copyright) {
|
|
91
|
-
exif['IPTC:CopyrightNotice'] = copyright
|
|
92
|
-
exif['XMP-dc:Rights'] = copyright
|
|
86
|
+
if (metadata.copyright) {
|
|
87
|
+
exif['IPTC:CopyrightNotice'] = metadata.copyright;
|
|
88
|
+
exif['XMP-dc:Rights'] = metadata.copyright;
|
|
93
89
|
}
|
|
94
90
|
return exif;
|
|
95
91
|
}
|
package/lib/types.d.ts
CHANGED
package/lib/utils/svg.d.ts
CHANGED
package/lib/utils/svg.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { XMLParser } from 'fast-xml-parser';
|
|
1
2
|
export function ensureSize(svg, defaultSize = 512) {
|
|
2
3
|
let size = defaultSize;
|
|
3
4
|
svg = svg.replace(/<svg([^>]*)/, (match, g1) => {
|
|
@@ -21,3 +22,16 @@ export function ensureSize(svg, defaultSize = 512) {
|
|
|
21
22
|
});
|
|
22
23
|
return { svg, size };
|
|
23
24
|
}
|
|
25
|
+
export function getMetadata(svg) {
|
|
26
|
+
var _a, _b;
|
|
27
|
+
const parser = new XMLParser();
|
|
28
|
+
const xml = parser.parse(svg);
|
|
29
|
+
const rdfDescription = (_b = (_a = xml.svg.metadata) === null || _a === void 0 ? void 0 : _a['rdf:RDF']) === null || _b === void 0 ? void 0 : _b['rdf:Description'];
|
|
30
|
+
return {
|
|
31
|
+
title: rdfDescription === null || rdfDescription === void 0 ? void 0 : rdfDescription['dc:title'],
|
|
32
|
+
source: rdfDescription === null || rdfDescription === void 0 ? void 0 : rdfDescription['dc:source'],
|
|
33
|
+
creator: rdfDescription === null || rdfDescription === void 0 ? void 0 : rdfDescription['dc:creator'],
|
|
34
|
+
license: rdfDescription === null || rdfDescription === void 0 ? void 0 : rdfDescription['dcterms:license'],
|
|
35
|
+
copyright: rdfDescription === null || rdfDescription === void 0 ? void 0 : rdfDescription['dc:rights'],
|
|
36
|
+
};
|
|
37
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dicebear/converter",
|
|
3
|
-
"version": "9.2.
|
|
3
|
+
"version": "9.2.3",
|
|
4
4
|
"description": "SVG Converter for DiceBear",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dicebear"
|
|
@@ -37,15 +37,15 @@
|
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@resvg/resvg-js": "^2.6.2",
|
|
40
|
-
"exiftool-vendored": "^
|
|
41
|
-
"
|
|
40
|
+
"exiftool-vendored": "^30.2.0",
|
|
41
|
+
"fast-xml-parser": "^5.2.5",
|
|
42
|
+
"sharp": "^0.34.2",
|
|
42
43
|
"tmp-promise": "^3.0.3"
|
|
43
44
|
},
|
|
44
45
|
"devDependencies": {
|
|
45
|
-
"@tsconfig/recommended": "^1.0.
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"typescript": "^5.1.6",
|
|
46
|
+
"@tsconfig/recommended": "^1.0.10",
|
|
47
|
+
"del-cli": "^6.0.0",
|
|
48
|
+
"typescript": "^5.8.3",
|
|
49
49
|
"uvu": "^0.5.6"
|
|
50
50
|
},
|
|
51
51
|
"engines": {
|
|
@@ -54,5 +54,5 @@
|
|
|
54
54
|
"publishConfig": {
|
|
55
55
|
"access": "public"
|
|
56
56
|
},
|
|
57
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "8cfdc4d029c9de6a82fef4e27ed67b5e2cd14a30"
|
|
58
58
|
}
|