From 6351b3d5b0c176fcd2cfcc7a054ff74210ab6b2c Mon Sep 17 00:00:00 2001 From: MinatoHikari <35342316+MinatoHikari@users.noreply.github.com> Date: Thu, 15 Dec 2022 11:27:02 +0800 Subject: [PATCH 1/5] feat(preset-web-fonts):add customRequest option --- packages/preset-web-fonts/README.md | 39 ++++++++++++++++++++++++++ packages/preset-web-fonts/src/index.ts | 5 +++- packages/preset-web-fonts/src/types.ts | 7 +++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/packages/preset-web-fonts/README.md b/packages/preset-web-fonts/README.md index 4daf709833..8a16e2cd1b 100644 --- a/packages/preset-web-fonts/README.md +++ b/packages/preset-web-fonts/README.md @@ -73,8 +73,47 @@ Currently supported Providers: - `bunny` - [Privacy-Friendly Google Fonts](https://fonts.bunny.net/) - `fontshare` - [Quality Font Service by ITF](https://www.fontshare.com/) +### Custom request function +Use your own request to fetch font source + +```ts +import presetWebFonts from '@unocss/preset-web-fonts' +import presetUno from '@unocss/preset-uno' +import axios from 'axios' +import ProxyAgent from 'proxy-agent' + +Unocss({ + presets: [ + presetUno(), + presetWebFonts({ + // use axios with an https proxy + customRequest: (url: string) => axios.get(url, { httpsAgent: new ProxyAgent('https://localhost:7890') }), + provider: 'google', + fonts: { + sans: 'Roboto', + mono: ['Fira Code', 'Fira Mono:400,700'], + // custom ones + lobster: 'Lobster', + lato: [ + { + name: 'Lato', + weights: ['400', '700'], + italic: true, + }, + { + name: 'sans-serif', + provider: 'none', + }, + ], + }, + }), + ], +}) +``` + PR welcome to add more providers 🙌 + ## Configuration Refer to the [type definition](https://github.com/unocss/unocss/blob/main/packages/preset-web-fonts/src/types.ts#L4) for all configurations available. diff --git a/packages/preset-web-fonts/src/index.ts b/packages/preset-web-fonts/src/index.ts index 2e8395a6dd..683ec0de7c 100644 --- a/packages/preset-web-fonts/src/index.ts +++ b/packages/preset-web-fonts/src/index.ts @@ -35,6 +35,7 @@ const preset = (options: WebFontsOptions = {}): Preset => { extendTheme = true, inlineImports = true, themeKey = 'fontFamily', + customRequest, } = options const fontObject = Object.fromEntries( @@ -49,7 +50,9 @@ const preset = (options: WebFontsOptions = {}): Preset => { if (inlineImports) { if (!importCache[url]) { const { $fetch } = await import('ohmyfetch') - importCache[url] = $fetch(url, { headers: {}, retry: 3 }) + importCache[url] = (customRequest + ? customRequest(url) + : $fetch(url, { headers: {}, retry: 3 })) .catch((e) => { console.error('Failed to fetch web fonts') console.error(e) diff --git a/packages/preset-web-fonts/src/types.ts b/packages/preset-web-fonts/src/types.ts index 38b390dfb2..04270ccfcb 100644 --- a/packages/preset-web-fonts/src/types.ts +++ b/packages/preset-web-fonts/src/types.ts @@ -42,6 +42,13 @@ export interface WebFontsOptions { * @default true */ inlineImports?: boolean + + /** + * Inline CSS @import() + * + * @default undefined + */ + customRequest?: (url: string) => Promise } export interface Provider { From 57969c5a4069753aa3be019c4490e4679594d508 Mon Sep 17 00:00:00 2001 From: Frozen FIsh <76603360+sudongyuer@users.noreply.github.com> Date: Fri, 16 Dec 2022 10:26:47 +0800 Subject: [PATCH 2/5] chore: update --- packages/preset-web-fonts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/preset-web-fonts/README.md b/packages/preset-web-fonts/README.md index 8a16e2cd1b..d27fb958c5 100644 --- a/packages/preset-web-fonts/README.md +++ b/packages/preset-web-fonts/README.md @@ -74,6 +74,7 @@ Currently supported Providers: - `fontshare` - [Quality Font Service by ITF](https://www.fontshare.com/) ### Custom request function + Use your own request to fetch font source ```ts @@ -110,7 +111,6 @@ Unocss({ ], }) ``` - PR welcome to add more providers 🙌 From 0138ac673c764ea538e50f7973e743071ec4f326 Mon Sep 17 00:00:00 2001 From: MinatoHikari <35342316+MinatoHikari@users.noreply.github.com> Date: Fri, 16 Dec 2022 10:28:46 +0800 Subject: [PATCH 3/5] Update packages/preset-web-fonts/README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: æīŠåļƒæ–Ŋ --- packages/preset-web-fonts/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/preset-web-fonts/README.md b/packages/preset-web-fonts/README.md index d27fb958c5..f6d2828322 100644 --- a/packages/preset-web-fonts/README.md +++ b/packages/preset-web-fonts/README.md @@ -113,7 +113,6 @@ Unocss({ ``` PR welcome to add more providers 🙌 - ## Configuration Refer to the [type definition](https://github.com/unocss/unocss/blob/main/packages/preset-web-fonts/src/types.ts#L4) for all configurations available. From 4891d4c8b239868bde1835ceae3ace261eac0b56 Mon Sep 17 00:00:00 2001 From: Frozen FIsh <76603360+sudongyuer@users.noreply.github.com> Date: Fri, 16 Dec 2022 10:30:49 +0800 Subject: [PATCH 4/5] chore: update --- packages/preset-web-fonts/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/preset-web-fonts/README.md b/packages/preset-web-fonts/README.md index f6d2828322..8cc3b41e18 100644 --- a/packages/preset-web-fonts/README.md +++ b/packages/preset-web-fonts/README.md @@ -111,6 +111,7 @@ Unocss({ ], }) ``` + PR welcome to add more providers 🙌 ## Configuration From 9bc5fa4424e40c8aab50961ab8aa59cc93374488 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Mon, 19 Dec 2022 14:28:37 +0100 Subject: [PATCH 5/5] chore: rename to `customFetch` --- packages/preset-web-fonts/README.md | 23 +++++------------------ packages/preset-web-fonts/src/index.ts | 21 ++++++++++----------- packages/preset-web-fonts/src/types.ts | 4 ++-- 3 files changed, 17 insertions(+), 31 deletions(-) diff --git a/packages/preset-web-fonts/README.md b/packages/preset-web-fonts/README.md index 8cc3b41e18..8742fbc536 100644 --- a/packages/preset-web-fonts/README.md +++ b/packages/preset-web-fonts/README.md @@ -73,9 +73,11 @@ Currently supported Providers: - `bunny` - [Privacy-Friendly Google Fonts](https://fonts.bunny.net/) - `fontshare` - [Quality Font Service by ITF](https://www.fontshare.com/) -### Custom request function +PR welcome to add more providers 🙌 + +### Custom fetch function -Use your own request to fetch font source +Use your own function to fetch font source. ```ts import presetWebFonts from '@unocss/preset-web-fonts' @@ -88,32 +90,17 @@ Unocss({ presetUno(), presetWebFonts({ // use axios with an https proxy - customRequest: (url: string) => axios.get(url, { httpsAgent: new ProxyAgent('https://localhost:7890') }), + customFetch: (url: string) => axios.get(url, { httpsAgent: new ProxyAgent('https://localhost:7890') }), provider: 'google', fonts: { sans: 'Roboto', mono: ['Fira Code', 'Fira Mono:400,700'], - // custom ones - lobster: 'Lobster', - lato: [ - { - name: 'Lato', - weights: ['400', '700'], - italic: true, - }, - { - name: 'sans-serif', - provider: 'none', - }, - ], }, }), ], }) ``` -PR welcome to add more providers 🙌 - ## Configuration Refer to the [type definition](https://github.com/unocss/unocss/blob/main/packages/preset-web-fonts/src/types.ts#L4) for all configurations available. diff --git a/packages/preset-web-fonts/src/index.ts b/packages/preset-web-fonts/src/index.ts index 683ec0de7c..1991f0f0fb 100644 --- a/packages/preset-web-fonts/src/index.ts +++ b/packages/preset-web-fonts/src/index.ts @@ -35,7 +35,7 @@ const preset = (options: WebFontsOptions = {}): Preset => { extendTheme = true, inlineImports = true, themeKey = 'fontFamily', - customRequest, + customFetch, } = options const fontObject = Object.fromEntries( @@ -49,16 +49,15 @@ const preset = (options: WebFontsOptions = {}): Preset => { async function importUrl(url: string) { if (inlineImports) { if (!importCache[url]) { - const { $fetch } = await import('ohmyfetch') - importCache[url] = (customRequest - ? customRequest(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 - }) + const promise = customFetch + ? customFetch(url) + : (await import('ohmyfetch')).$fetch(url, { headers: {}, retry: 3 }) + importCache[url] = promise.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] } diff --git a/packages/preset-web-fonts/src/types.ts b/packages/preset-web-fonts/src/types.ts index 04270ccfcb..8b31bac8b3 100644 --- a/packages/preset-web-fonts/src/types.ts +++ b/packages/preset-web-fonts/src/types.ts @@ -44,11 +44,11 @@ export interface WebFontsOptions { inlineImports?: boolean /** - * Inline CSS @import() + * Custom fetch function * * @default undefined */ - customRequest?: (url: string) => Promise + customFetch?: (url: string) => Promise } export interface Provider {