Urara-Blog/node_modules/.pnpm-store/v3/files/47/18a57c8fb1e837658c2086edd9d83007153043babe2396e5bddfd312627f7a88ba052e4fc2ce397251da0f3565af412909f7963f270ff599a9fa01b6c2930c
2022-08-14 01:14:53 +08:00

125 lines
3.8 KiB
Text

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
const core = require('@unocss/core');
const GoogleFontsProvider = createGoogleProvider("google", "https://fonts.googleapis.com");
function createGoogleProvider(name, host) {
return {
name,
getImportUrl(fonts) {
const strings = fonts.filter((i) => i.provider === name).map((i) => {
let name2 = i.name.replace(/\s+/g, "+");
if (i.weights?.length) {
name2 += i.italic ? `:ital,wght@${i.weights.flatMap((i2) => [`0,${i2}`, `1,${i2}`]).sort().join(";")}` : `:wght@${i.weights.sort().join(";")}`;
}
return `family=${name2}`;
}).join("&");
return `${host}/css2?${strings}&display=swap`;
},
getFontName(font) {
return `"${font.name}"`;
}
};
}
const BunnyFontsProvider = createGoogleProvider("bunny", "https://fonts.bunny.net");
const NoneProvider = {
name: "none",
getPreflight() {
return "";
},
getFontName(font) {
return font.name;
}
};
function normalizedFontMeta(meta, defaultProvider) {
if (typeof meta !== "string") {
meta.provider = meta.provider ?? defaultProvider;
return meta;
}
const [name, weights = ""] = meta.split(":");
return {
name,
weights: weights.split(/[,;]\s*/).filter(Boolean),
provider: defaultProvider
};
}
const providers = {
google: GoogleFontsProvider,
bunny: BunnyFontsProvider,
none: NoneProvider
};
const preset = (options = {}) => {
const {
provider: defaultProvider = "google",
extendTheme = true,
inlineImports = true,
themeKey = "fontFamily"
} = options;
const fontObject = Object.fromEntries(
Object.entries(options.fonts || {}).map(([name, meta]) => [name, core.toArray(meta).map((m) => normalizedFontMeta(m, defaultProvider))])
);
const fonts = Object.values(fontObject).flatMap((i) => i);
const importCache = {};
async function importUrl(url) {
if (inlineImports) {
if (!importCache[url]) {
const { $fetch } = await import('ohmyfetch');
importCache[url] = $fetch(url, { headers: {}, retry: 3 }).catch((e) => {
console.error("Failed to fetch web fonts");
console.error(e);
if (typeof process !== "undefined" && process.env.CI)
throw e;
});
}
return await importCache[url];
} else {
return `@import url('${url}')`;
}
}
const preset2 = {
name: "@unocss/preset-web-fonts",
preflights: [
{
async getCSS() {
const names = new Set(fonts.map((i) => i.provider || defaultProvider));
const preflights = [];
for (const name of names) {
const fontsForProvider = fonts.filter((i) => i.provider === name);
const provider = providers[name];
if (provider.getImportUrl) {
const url = provider.getImportUrl(fontsForProvider);
if (url)
preflights.push(await importUrl(url));
}
preflights.push(provider.getPreflight?.(fontsForProvider));
}
return preflights.filter(Boolean).join("\n");
}
}
]
};
if (extendTheme) {
preset2.extendTheme = (theme) => {
if (!theme[themeKey])
theme[themeKey] = {};
const obj = Object.fromEntries(
Object.entries(fontObject).map(([name, fonts2]) => [name, fonts2.map((f) => providers[f.provider || defaultProvider].getFontName(f))])
);
for (const key of Object.keys(obj)) {
if (typeof theme[themeKey][key] === "string")
theme[themeKey][key] = obj[key].map((i) => `${i},`).join("") + theme[themeKey][key];
else
theme[themeKey][key] = obj[key].join(",");
}
};
}
return preset2;
};
exports["default"] = preset;
exports.normalizedFontMeta = normalizedFontMeta;