Initial commit
This commit is contained in:
98
node_modules/astro/dist/assets/fonts/infra/unifont-font-resolver.js
generated
vendored
Normal file
98
node_modules/astro/dist/assets/fonts/infra/unifont-font-resolver.js
generated
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
import { createUnifont, defineFontProvider } from "unifont";
|
||||
class UnifontFontResolver {
|
||||
#unifont;
|
||||
#hasher;
|
||||
constructor({
|
||||
unifont,
|
||||
hasher
|
||||
}) {
|
||||
this.#unifont = unifont;
|
||||
this.#hasher = hasher;
|
||||
}
|
||||
static idFromProvider({ hasher, provider }) {
|
||||
const hash = hasher.hashObject({
|
||||
name: provider.name,
|
||||
...provider.config
|
||||
});
|
||||
return `${provider.name}-${hash}`;
|
||||
}
|
||||
static astroToUnifontProvider(astroProvider, root) {
|
||||
return defineFontProvider(astroProvider.name, async (_options, ctx) => {
|
||||
await astroProvider?.init?.({ ...ctx, root });
|
||||
return {
|
||||
async resolveFont(familyName, { options, ...rest }) {
|
||||
return await astroProvider.resolveFont({ familyName, options, ...rest });
|
||||
},
|
||||
async listFonts() {
|
||||
return astroProvider.listFonts?.();
|
||||
}
|
||||
};
|
||||
})(astroProvider.config);
|
||||
}
|
||||
static extractUnifontProviders({
|
||||
families,
|
||||
hasher,
|
||||
root
|
||||
}) {
|
||||
const providers = /* @__PURE__ */ new Map();
|
||||
for (const { provider } of families) {
|
||||
const id = this.idFromProvider({ hasher, provider });
|
||||
if (!providers.has(id)) {
|
||||
const unifontProvider = this.astroToUnifontProvider(provider, root);
|
||||
unifontProvider._name = this.idFromProvider({ hasher, provider });
|
||||
providers.set(id, unifontProvider);
|
||||
}
|
||||
}
|
||||
return Array.from(providers.values());
|
||||
}
|
||||
static async create({
|
||||
families,
|
||||
hasher,
|
||||
storage,
|
||||
root
|
||||
}) {
|
||||
return new UnifontFontResolver({
|
||||
unifont: await createUnifont(this.extractUnifontProviders({ families, hasher, root }), {
|
||||
storage,
|
||||
// TODO: consider enabling, would require new astro errors
|
||||
throwOnError: false
|
||||
}),
|
||||
hasher
|
||||
});
|
||||
}
|
||||
async resolveFont({
|
||||
familyName,
|
||||
provider,
|
||||
options,
|
||||
...rest
|
||||
}) {
|
||||
const id = UnifontFontResolver.idFromProvider({
|
||||
hasher: this.#hasher,
|
||||
provider
|
||||
});
|
||||
const { fonts } = await this.#unifont.resolveFont(
|
||||
familyName,
|
||||
{
|
||||
// Options are currently namespaced by provider name, it may change in
|
||||
// https://github.com/unjs/unifont/pull/287
|
||||
options: {
|
||||
[id]: options
|
||||
},
|
||||
...rest
|
||||
},
|
||||
[id]
|
||||
);
|
||||
return fonts;
|
||||
}
|
||||
async listFonts({ provider }) {
|
||||
return await this.#unifont.listFonts([
|
||||
UnifontFontResolver.idFromProvider({
|
||||
hasher: this.#hasher,
|
||||
provider
|
||||
})
|
||||
]);
|
||||
}
|
||||
}
|
||||
export {
|
||||
UnifontFontResolver
|
||||
};
|
||||
Reference in New Issue
Block a user