font fixes
This commit is contained in:
parent
4c58ebb785
commit
6ab84eb125
1 changed files with 22 additions and 15 deletions
37
src/utils.js
37
src/utils.js
|
@ -196,16 +196,19 @@ export function fixTileJSONCenter(tileJSON) {
|
||||||
*/
|
*/
|
||||||
function getFontPbf(allowedFonts, fontPath, name, range, fallbacks) {
|
function getFontPbf(allowedFonts, fontPath, name, range, fallbacks) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
const fontMatch = name?.match(/^[\w\s-]+$/);
|
||||||
|
if (!name || typeof name !== 'string' || name.trim() === '' || !fontMatch) {
|
||||||
|
console.error('ERROR: Invalid font name: %s', 'invalid');
|
||||||
|
return reject('Invalid font name');
|
||||||
|
}
|
||||||
|
const sanitizedName = fontMatch[0];
|
||||||
|
const filename = path.join(fontPath, sanitizedName, `${range}.pbf`);
|
||||||
|
|
||||||
|
if (!/^\d+-\d+$/.test(range)) {
|
||||||
|
console.error('ERROR: Invalid range: %s', range);
|
||||||
|
return reject('Invalid range');
|
||||||
|
}
|
||||||
if (!allowedFonts || (allowedFonts[name] && fallbacks)) {
|
if (!allowedFonts || (allowedFonts[name] && fallbacks)) {
|
||||||
if (!name || typeof name !== 'string' || name.trim() === '') {
|
|
||||||
console.error('ERROR: Invalid font name: %s', String(name));
|
|
||||||
return reject('Invalid font name');
|
|
||||||
}
|
|
||||||
if (!/^\d+-\d+$/.test(range)) {
|
|
||||||
console.error('ERROR: Invalid range: %s', range);
|
|
||||||
return reject('Invalid range');
|
|
||||||
}
|
|
||||||
const filename = path.join(fontPath, name, `${range}.pbf`);
|
|
||||||
if (!fallbacks) {
|
if (!fallbacks) {
|
||||||
fallbacks = clone(allowedFonts || {});
|
fallbacks = clone(allowedFonts || {});
|
||||||
}
|
}
|
||||||
|
@ -213,11 +216,15 @@ function getFontPbf(allowedFonts, fontPath, name, range, fallbacks) {
|
||||||
// eslint-disable-next-line security/detect-non-literal-fs-filename
|
// eslint-disable-next-line security/detect-non-literal-fs-filename
|
||||||
fs.readFile(filename, (err, data) => {
|
fs.readFile(filename, (err, data) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error('ERROR: Font not found: %s, Error: %s', filename, err);
|
console.error(
|
||||||
|
'ERROR: Font not found: %s, Error: %s',
|
||||||
|
filename,
|
||||||
|
String(err),
|
||||||
|
);
|
||||||
if (fallbacks && Object.keys(fallbacks).length) {
|
if (fallbacks && Object.keys(fallbacks).length) {
|
||||||
let fallbackName;
|
let fallbackName;
|
||||||
|
|
||||||
let fontStyle = name.split(' ').pop();
|
let fontStyle = sanitizedName.split(' ').pop();
|
||||||
if (['Regular', 'Bold', 'Italic'].indexOf(fontStyle) < 0) {
|
if (['Regular', 'Bold', 'Italic'].indexOf(fontStyle) < 0) {
|
||||||
fontStyle = 'Regular';
|
fontStyle = 'Regular';
|
||||||
}
|
}
|
||||||
|
@ -228,10 +235,10 @@ function getFontPbf(allowedFonts, fontPath, name, range, fallbacks) {
|
||||||
fallbackName = Object.keys(fallbacks)[0];
|
fallbackName = Object.keys(fallbacks)[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.error(
|
console.error(
|
||||||
`ERROR: Trying to use %s as a fallback`,
|
`ERROR: Trying to use %s as a fallback for: %s`,
|
||||||
fallbackName,
|
fallbackName,
|
||||||
|
sanitizedName,
|
||||||
);
|
);
|
||||||
delete fallbacks[fallbackName];
|
delete fallbacks[fallbackName];
|
||||||
getFontPbf(null, fontPath, fallbackName, range, fallbacks).then(
|
getFontPbf(null, fontPath, fallbackName, range, fallbacks).then(
|
||||||
|
@ -239,14 +246,14 @@ function getFontPbf(allowedFonts, fontPath, name, range, fallbacks) {
|
||||||
reject,
|
reject,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
reject(`Font load error: ${name}`);
|
reject('Font load error');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
resolve(data);
|
resolve(data);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
reject(`Font not allowed: ${name}`);
|
reject('Font not allowed');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue