98 lines
4.8 KiB
Plaintext
98 lines
4.8 KiB
Plaintext
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.validateGoogleFontFunctionCall = void 0;
|
|
const constants_1 = require("../constants");
|
|
const format_available_values_1 = require("../format-available-values");
|
|
const next_font_error_1 = require("../next-font-error");
|
|
const google_fonts_metadata_1 = require("./google-fonts-metadata");
|
|
/**
|
|
* Validate the data recieved from next-swc next-transform-font on next/font/google calls
|
|
*/
|
|
function validateGoogleFontFunctionCall(functionName, fontFunctionArgument) {
|
|
let { weight, style, preload = true, display = 'swap', axes, fallback, adjustFontFallback = true, variable, subsets, } = fontFunctionArgument || {};
|
|
if (functionName === '') {
|
|
(0, next_font_error_1.nextFontError)(`next/font/google has no default export`);
|
|
}
|
|
const fontFamily = functionName.replace(/_/g, ' ');
|
|
// Get the Google font metadata, we'll use this to validate the font arguments and to print better error messages
|
|
const fontFamilyData = google_fonts_metadata_1.googleFontsMetadata[fontFamily];
|
|
if (!fontFamilyData) {
|
|
(0, next_font_error_1.nextFontError)(`Unknown font \`${fontFamily}\``);
|
|
}
|
|
const availableSubsets = fontFamilyData.subsets;
|
|
if (availableSubsets.length === 0) {
|
|
// If the font doesn't have any preloadeable subsets, disable preload
|
|
preload = false;
|
|
}
|
|
else if (preload) {
|
|
if (!subsets) {
|
|
(0, next_font_error_1.nextFontError)(`Preload is enabled but no subsets were specified for font \`${fontFamily}\`. Please specify subsets or disable preloading if your intended subset can't be preloaded.\nAvailable subsets: ${(0, format_available_values_1.formatAvailableValues)(availableSubsets)}\n\nRead more: https://nextjs.org/docs/messages/google-fonts-missing-subsets`);
|
|
}
|
|
subsets.forEach((subset) => {
|
|
if (!availableSubsets.includes(subset)) {
|
|
(0, next_font_error_1.nextFontError)(`Unknown subset \`${subset}\` for font \`${fontFamily}\`.\nAvailable subsets: ${(0, format_available_values_1.formatAvailableValues)(availableSubsets)}`);
|
|
}
|
|
});
|
|
}
|
|
const fontWeights = fontFamilyData.weights;
|
|
const fontStyles = fontFamilyData.styles;
|
|
// Get the unique weights and styles from the function call
|
|
const weights = !weight
|
|
? []
|
|
: [...new Set(Array.isArray(weight) ? weight : [weight])];
|
|
const styles = !style
|
|
? []
|
|
: [...new Set(Array.isArray(style) ? style : [style])];
|
|
if (weights.length === 0) {
|
|
// Set variable as default, throw if not available
|
|
if (fontWeights.includes('variable')) {
|
|
weights.push('variable');
|
|
}
|
|
else {
|
|
(0, next_font_error_1.nextFontError)(`Missing weight for font \`${fontFamily}\`.\nAvailable weights: ${(0, format_available_values_1.formatAvailableValues)(fontWeights)}`);
|
|
}
|
|
}
|
|
if (weights.length > 1 && weights.includes('variable')) {
|
|
(0, next_font_error_1.nextFontError)(`Unexpected \`variable\` in weight array for font \`${fontFamily}\`. You only need \`variable\`, it includes all available weights.`);
|
|
}
|
|
weights.forEach((selectedWeight) => {
|
|
if (!fontWeights.includes(selectedWeight)) {
|
|
(0, next_font_error_1.nextFontError)(`Unknown weight \`${selectedWeight}\` for font \`${fontFamily}\`.\nAvailable weights: ${(0, format_available_values_1.formatAvailableValues)(fontWeights)}`);
|
|
}
|
|
});
|
|
if (styles.length === 0) {
|
|
if (fontStyles.length === 1) {
|
|
// Handle default style for fonts that only have italic
|
|
styles.push(fontStyles[0]);
|
|
}
|
|
else {
|
|
// Otherwise set default style to normal
|
|
styles.push('normal');
|
|
}
|
|
}
|
|
styles.forEach((selectedStyle) => {
|
|
if (!fontStyles.includes(selectedStyle)) {
|
|
(0, next_font_error_1.nextFontError)(`Unknown style \`${selectedStyle}\` for font \`${fontFamily}\`.\nAvailable styles: ${(0, format_available_values_1.formatAvailableValues)(fontStyles)}`);
|
|
}
|
|
});
|
|
if (!constants_1.allowedDisplayValues.includes(display)) {
|
|
(0, next_font_error_1.nextFontError)(`Invalid display value \`${display}\` for font \`${fontFamily}\`.\nAvailable display values: ${(0, format_available_values_1.formatAvailableValues)(constants_1.allowedDisplayValues)}`);
|
|
}
|
|
if (weights[0] !== 'variable' && axes) {
|
|
(0, next_font_error_1.nextFontError)('Axes can only be defined for variable fonts');
|
|
}
|
|
return {
|
|
fontFamily,
|
|
weights,
|
|
styles,
|
|
display,
|
|
preload,
|
|
selectedVariableAxes: axes,
|
|
fallback,
|
|
adjustFontFallback,
|
|
variable,
|
|
subsets,
|
|
};
|
|
}
|
|
exports.validateGoogleFontFunctionCall = validateGoogleFontFunctionCall;
|