astro 5.7.5 → 5.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/image.css +5 -12
- package/dist/assets/fonts/config.d.ts +9 -9
- package/dist/assets/fonts/config.js +3 -4
- package/dist/assets/fonts/constants.d.ts +3 -73
- package/dist/assets/fonts/constants.js +16 -68
- package/dist/assets/fonts/definitions.d.ts +73 -0
- package/dist/assets/fonts/definitions.js +0 -0
- package/dist/assets/fonts/implementations/css-renderer.d.ts +9 -0
- package/dist/assets/fonts/implementations/css-renderer.js +42 -0
- package/dist/assets/fonts/implementations/data-collector.d.ts +3 -0
- package/dist/assets/fonts/implementations/data-collector.js +21 -0
- package/dist/assets/fonts/implementations/error-handler.d.ts +2 -0
- package/dist/assets/fonts/implementations/error-handler.js +33 -0
- package/dist/assets/fonts/implementations/font-fetcher.d.ts +8 -0
- package/dist/assets/fonts/implementations/font-fetcher.js +34 -0
- package/dist/assets/fonts/implementations/font-metrics-resolver.d.ts +5 -0
- package/dist/assets/fonts/implementations/font-metrics-resolver.js +60 -0
- package/dist/assets/fonts/implementations/font-type-extractor.d.ts +4 -0
- package/dist/assets/fonts/implementations/font-type-extractor.js +22 -0
- package/dist/assets/fonts/implementations/hasher.d.ts +2 -0
- package/dist/assets/fonts/implementations/hasher.js +14 -0
- package/dist/assets/fonts/implementations/local-provider-url-resolver.d.ts +5 -0
- package/dist/assets/fonts/implementations/local-provider-url-resolver.js +17 -0
- package/dist/assets/fonts/implementations/remote-font-provider-mod-resolver.d.ts +6 -0
- package/dist/assets/fonts/implementations/remote-font-provider-mod-resolver.js +20 -0
- package/dist/assets/fonts/implementations/remote-font-provider-resolver.d.ts +6 -0
- package/dist/assets/fonts/implementations/remote-font-provider-resolver.js +47 -0
- package/dist/assets/fonts/implementations/storage.d.ts +4 -0
- package/dist/assets/fonts/implementations/storage.js +14 -0
- package/dist/assets/fonts/implementations/system-fallbacks-provider.d.ts +11 -0
- package/dist/assets/fonts/implementations/system-fallbacks-provider.js +74 -0
- package/dist/assets/fonts/implementations/url-proxy-content-resolver.d.ts +5 -0
- package/dist/assets/fonts/implementations/url-proxy-content-resolver.js +28 -0
- package/dist/assets/fonts/implementations/url-proxy.d.ts +8 -0
- package/dist/assets/fonts/implementations/url-proxy.js +26 -0
- package/dist/assets/fonts/logic/extract-unifont-providers.d.ts +10 -0
- package/dist/assets/fonts/logic/extract-unifont-providers.js +28 -0
- package/dist/assets/fonts/logic/normalize-remote-font-faces.d.ts +6 -0
- package/dist/assets/fonts/logic/normalize-remote-font-faces.js +36 -0
- package/dist/assets/fonts/logic/optimize-fallbacks.d.ts +17 -0
- package/dist/assets/fonts/logic/optimize-fallbacks.js +47 -0
- package/dist/assets/fonts/logic/resolve-families.d.ts +17 -0
- package/dist/assets/fonts/logic/resolve-families.js +67 -0
- package/dist/assets/fonts/orchestrate.d.ts +37 -0
- package/dist/assets/fonts/orchestrate.js +125 -0
- package/dist/assets/fonts/providers/local.d.ts +6 -7
- package/dist/assets/fonts/providers/local.js +26 -29
- package/dist/assets/fonts/types.d.ts +32 -2
- package/dist/assets/fonts/utils.d.ts +17 -87
- package/dist/assets/fonts/utils.js +21 -183
- package/dist/assets/fonts/vite-plugin-fonts.js +98 -80
- package/dist/assets/internal.js +0 -2
- package/dist/assets/layout.js +4 -4
- package/dist/assets/types.d.ts +4 -4
- package/dist/content/content-layer.js +3 -3
- package/dist/core/config/schemas/base.d.ts +19 -19
- package/dist/core/config/schemas/base.js +1 -1
- package/dist/core/config/schemas/relative.d.ts +25 -25
- package/dist/core/constants.js +1 -1
- package/dist/core/dev/dev.js +1 -1
- package/dist/core/errors/errors-data.d.ts +2 -1
- package/dist/core/errors/errors-data.js +2 -1
- package/dist/core/messages.js +2 -2
- package/dist/core/routing/manifest/create.js +4 -1
- package/dist/types/public/config.d.ts +19 -22
- package/dist/vite-plugin-markdown/images.js +4 -4
- package/package.json +4 -4
- package/types/content.d.ts +11 -4
- package/dist/assets/fonts/load.d.ts +0 -20
- package/dist/assets/fonts/load.js +0 -162
- package/dist/assets/fonts/metrics.d.ts +0 -10
- package/dist/assets/fonts/metrics.js +0 -55
- package/dist/assets/fonts/providers/utils.d.ts +0 -9
- package/dist/assets/fonts/providers/utils.js +0 -37
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from "node:fs";
|
|
2
|
-
import * as unifont from "unifont";
|
|
3
|
-
import { AstroError, AstroErrorData } from "../../core/errors/index.js";
|
|
4
|
-
import { DEFAULTS, LOCAL_PROVIDER_NAME } from "./constants.js";
|
|
5
|
-
import { resolveLocalFont } from "./providers/local.js";
|
|
6
|
-
import {
|
|
7
|
-
familiesToUnifontProviders,
|
|
8
|
-
generateFallbacksCSS,
|
|
9
|
-
generateFontFace,
|
|
10
|
-
proxyURL
|
|
11
|
-
} from "./utils.js";
|
|
12
|
-
async function loadFonts({
|
|
13
|
-
base,
|
|
14
|
-
families,
|
|
15
|
-
storage,
|
|
16
|
-
hashToUrlMap,
|
|
17
|
-
resolvedMap,
|
|
18
|
-
hashString,
|
|
19
|
-
generateFallbackFontFace,
|
|
20
|
-
getMetricsForFamily,
|
|
21
|
-
log
|
|
22
|
-
}) {
|
|
23
|
-
const extractedProvidersResult = familiesToUnifontProviders({ families, hashString });
|
|
24
|
-
families = extractedProvidersResult.families;
|
|
25
|
-
const { resolveFont } = await unifont.createUnifont(extractedProvidersResult.providers, {
|
|
26
|
-
storage
|
|
27
|
-
});
|
|
28
|
-
for (const family of families) {
|
|
29
|
-
const preloadData = [];
|
|
30
|
-
let css = "";
|
|
31
|
-
const fallbacks = family.fallbacks ?? DEFAULTS.fallbacks;
|
|
32
|
-
const fallbackFontData = [];
|
|
33
|
-
const collect = ({ hash, type, value, data }, collectPreload) => {
|
|
34
|
-
const url = base + hash;
|
|
35
|
-
if (!hashToUrlMap.has(hash)) {
|
|
36
|
-
hashToUrlMap.set(hash, value);
|
|
37
|
-
if (collectPreload) {
|
|
38
|
-
preloadData.push({ url, type });
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
if (fallbacks && fallbacks.length > 0 && // If the same data has already been sent for this family, we don't want to have duplicate fallbacks
|
|
42
|
-
// Such scenario can occur with unicode ranges
|
|
43
|
-
!fallbackFontData.some((f) => JSON.stringify(f.data) === JSON.stringify(data))) {
|
|
44
|
-
fallbackFontData.push({
|
|
45
|
-
hash,
|
|
46
|
-
url: value,
|
|
47
|
-
data
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
return url;
|
|
51
|
-
};
|
|
52
|
-
let fonts;
|
|
53
|
-
if (family.provider === LOCAL_PROVIDER_NAME) {
|
|
54
|
-
const result = resolveLocalFont({
|
|
55
|
-
family,
|
|
56
|
-
proxyURL: ({ value, data }) => {
|
|
57
|
-
return proxyURL({
|
|
58
|
-
value,
|
|
59
|
-
// We hash based on the filepath and the contents, since the user could replace
|
|
60
|
-
// a given font file with completely different contents.
|
|
61
|
-
hashString: (v) => {
|
|
62
|
-
let content;
|
|
63
|
-
try {
|
|
64
|
-
content = readFileSync(value, "utf-8");
|
|
65
|
-
} catch (e) {
|
|
66
|
-
throw new AstroError(AstroErrorData.UnknownFilesystemError, { cause: e });
|
|
67
|
-
}
|
|
68
|
-
return hashString(v + content);
|
|
69
|
-
},
|
|
70
|
-
collect: (input) => collect({ ...input, data }, true)
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
fonts = result.fonts;
|
|
75
|
-
} else {
|
|
76
|
-
const result = await resolveFont(
|
|
77
|
-
family.name,
|
|
78
|
-
// We do not merge the defaults, we only provide defaults as a fallback
|
|
79
|
-
{
|
|
80
|
-
weights: family.weights ?? DEFAULTS.weights,
|
|
81
|
-
styles: family.styles ?? DEFAULTS.styles,
|
|
82
|
-
subsets: family.subsets ?? DEFAULTS.subsets,
|
|
83
|
-
fallbacks: family.fallbacks ?? DEFAULTS.fallbacks
|
|
84
|
-
},
|
|
85
|
-
// By default, unifont goes through all providers. We use a different approach
|
|
86
|
-
// where we specify a provider per font.
|
|
87
|
-
// Name has been set while extracting unifont providers from families (inside familiesToUnifontProviders)
|
|
88
|
-
[family.provider.name]
|
|
89
|
-
);
|
|
90
|
-
fonts = result.fonts.filter(
|
|
91
|
-
(font) => typeof font.meta?.priority === "number" ? font.meta.priority === 0 : true
|
|
92
|
-
).map((font) => {
|
|
93
|
-
let index = 0;
|
|
94
|
-
return {
|
|
95
|
-
...font,
|
|
96
|
-
src: font.src.map((source) => {
|
|
97
|
-
if ("name" in source) {
|
|
98
|
-
return source;
|
|
99
|
-
}
|
|
100
|
-
const proxied = {
|
|
101
|
-
...source,
|
|
102
|
-
originalURL: source.url,
|
|
103
|
-
url: proxyURL({
|
|
104
|
-
value: source.url,
|
|
105
|
-
// We only use the url for hashing since the service returns urls with a hash already
|
|
106
|
-
hashString,
|
|
107
|
-
// We only collect the first URL to avoid preloading fallback sources (eg. we only
|
|
108
|
-
// preload woff2 if woff is available)
|
|
109
|
-
collect: (data) => collect(
|
|
110
|
-
{
|
|
111
|
-
...data,
|
|
112
|
-
data: {
|
|
113
|
-
weight: font.weight,
|
|
114
|
-
style: font.style
|
|
115
|
-
}
|
|
116
|
-
},
|
|
117
|
-
index === 0
|
|
118
|
-
)
|
|
119
|
-
})
|
|
120
|
-
};
|
|
121
|
-
index++;
|
|
122
|
-
return proxied;
|
|
123
|
-
})
|
|
124
|
-
};
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
for (const data of fonts) {
|
|
128
|
-
css += generateFontFace(family.nameWithHash, {
|
|
129
|
-
src: data.src,
|
|
130
|
-
display: data.display ?? family.provider === LOCAL_PROVIDER_NAME ? void 0 : family.display,
|
|
131
|
-
unicodeRange: data.unicodeRange ?? family.provider === LOCAL_PROVIDER_NAME ? void 0 : family.unicodeRange,
|
|
132
|
-
weight: data.weight,
|
|
133
|
-
style: data.style,
|
|
134
|
-
stretch: data.stretch ?? family.provider === LOCAL_PROVIDER_NAME ? void 0 : family.stretch,
|
|
135
|
-
featureSettings: data.featureSettings ?? family.provider === LOCAL_PROVIDER_NAME ? void 0 : family.featureSettings,
|
|
136
|
-
variationSettings: data.variationSettings ?? family.provider === LOCAL_PROVIDER_NAME ? void 0 : family.variationSettings
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
const fallbackData = await generateFallbacksCSS({
|
|
140
|
-
family,
|
|
141
|
-
font: fallbackFontData,
|
|
142
|
-
fallbacks,
|
|
143
|
-
metrics: family.optimizedFallbacks ?? DEFAULTS.optimizedFallbacks ? {
|
|
144
|
-
getMetricsForFamily,
|
|
145
|
-
generateFontFace: generateFallbackFontFace
|
|
146
|
-
} : null
|
|
147
|
-
});
|
|
148
|
-
const cssVarValues = [family.nameWithHash];
|
|
149
|
-
if (fallbackData) {
|
|
150
|
-
if (fallbackData.css) {
|
|
151
|
-
css += fallbackData.css;
|
|
152
|
-
}
|
|
153
|
-
cssVarValues.push(...fallbackData.fallbacks);
|
|
154
|
-
}
|
|
155
|
-
css += `:root { ${family.cssVariable}: ${cssVarValues.join(", ")}; }`;
|
|
156
|
-
resolvedMap.set(family.cssVariable, { preloadData, css });
|
|
157
|
-
}
|
|
158
|
-
log("Fonts initialized");
|
|
159
|
-
}
|
|
160
|
-
export {
|
|
161
|
-
loadFonts
|
|
162
|
-
};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { type Font } from '@capsizecss/unpack';
|
|
2
|
-
export type FontFaceMetrics = Pick<Font, 'ascent' | 'descent' | 'lineGap' | 'unitsPerEm' | 'xWidthAvg'>;
|
|
3
|
-
export declare function readMetrics(family: string, buffer: Buffer): Promise<FontFaceMetrics>;
|
|
4
|
-
export declare function generateFallbackFontFace({ metrics, fallbackMetrics, name: fallbackName, font: fallbackFontName, properties, }: {
|
|
5
|
-
metrics: FontFaceMetrics;
|
|
6
|
-
fallbackMetrics: FontFaceMetrics;
|
|
7
|
-
name: string;
|
|
8
|
-
font: string;
|
|
9
|
-
properties: Record<string, string | undefined>;
|
|
10
|
-
}): string;
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { fromBuffer } from "@capsizecss/unpack";
|
|
2
|
-
import { renderFontFace, renderFontSrc } from "./utils.js";
|
|
3
|
-
const metricCache = {};
|
|
4
|
-
function filterRequiredMetrics({
|
|
5
|
-
ascent,
|
|
6
|
-
descent,
|
|
7
|
-
lineGap,
|
|
8
|
-
unitsPerEm,
|
|
9
|
-
xWidthAvg
|
|
10
|
-
}) {
|
|
11
|
-
return {
|
|
12
|
-
ascent,
|
|
13
|
-
descent,
|
|
14
|
-
lineGap,
|
|
15
|
-
unitsPerEm,
|
|
16
|
-
xWidthAvg
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
async function readMetrics(family, buffer) {
|
|
20
|
-
const metrics = await fromBuffer(buffer);
|
|
21
|
-
metricCache[family] = filterRequiredMetrics(metrics);
|
|
22
|
-
return metricCache[family];
|
|
23
|
-
}
|
|
24
|
-
function toPercentage(value, fractionDigits = 4) {
|
|
25
|
-
const percentage = value * 100;
|
|
26
|
-
return `${+percentage.toFixed(fractionDigits)}%`;
|
|
27
|
-
}
|
|
28
|
-
function generateFallbackFontFace({
|
|
29
|
-
metrics,
|
|
30
|
-
fallbackMetrics,
|
|
31
|
-
name: fallbackName,
|
|
32
|
-
font: fallbackFontName,
|
|
33
|
-
properties
|
|
34
|
-
}) {
|
|
35
|
-
const preferredFontXAvgRatio = metrics.xWidthAvg / metrics.unitsPerEm;
|
|
36
|
-
const fallbackFontXAvgRatio = fallbackMetrics.xWidthAvg / fallbackMetrics.unitsPerEm;
|
|
37
|
-
const sizeAdjust = preferredFontXAvgRatio / fallbackFontXAvgRatio;
|
|
38
|
-
const adjustedEmSquare = metrics.unitsPerEm * sizeAdjust;
|
|
39
|
-
const ascentOverride = metrics.ascent / adjustedEmSquare;
|
|
40
|
-
const descentOverride = Math.abs(metrics.descent) / adjustedEmSquare;
|
|
41
|
-
const lineGapOverride = metrics.lineGap / adjustedEmSquare;
|
|
42
|
-
return renderFontFace({
|
|
43
|
-
"font-family": fallbackName,
|
|
44
|
-
src: renderFontSrc([{ name: fallbackFontName }]),
|
|
45
|
-
"size-adjust": toPercentage(sizeAdjust),
|
|
46
|
-
"ascent-override": toPercentage(ascentOverride),
|
|
47
|
-
"descent-override": toPercentage(descentOverride),
|
|
48
|
-
"line-gap-override": toPercentage(lineGapOverride),
|
|
49
|
-
...properties
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
export {
|
|
53
|
-
generateFallbackFontFace,
|
|
54
|
-
readMetrics
|
|
55
|
-
};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { AstroFontProvider, ResolvedFontProvider } from '../types.js';
|
|
2
|
-
export declare function validateMod(mod: any, entrypoint: string): Pick<ResolvedFontProvider, 'provider'>;
|
|
3
|
-
export type ResolveMod = (id: string) => Promise<any>;
|
|
4
|
-
export interface ResolveProviderOptions {
|
|
5
|
-
root: URL;
|
|
6
|
-
provider: AstroFontProvider;
|
|
7
|
-
resolveMod: ResolveMod;
|
|
8
|
-
}
|
|
9
|
-
export declare function resolveProvider({ root, provider: { entrypoint, config }, resolveMod, }: ResolveProviderOptions): Promise<ResolvedFontProvider>;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { AstroError, AstroErrorData } from "../../../core/errors/index.js";
|
|
2
|
-
import { resolveEntrypoint } from "../utils.js";
|
|
3
|
-
function validateMod(mod, entrypoint) {
|
|
4
|
-
try {
|
|
5
|
-
if (typeof mod !== "object" || mod === null) {
|
|
6
|
-
throw new Error(`Expected an object for the module, but received ${typeof mod}.`);
|
|
7
|
-
}
|
|
8
|
-
if (typeof mod.provider !== "function") {
|
|
9
|
-
throw new Error(`Invalid provider export in module, expected a function.`);
|
|
10
|
-
}
|
|
11
|
-
return {
|
|
12
|
-
provider: mod.provider
|
|
13
|
-
};
|
|
14
|
-
} catch (cause) {
|
|
15
|
-
throw new AstroError(
|
|
16
|
-
{
|
|
17
|
-
...AstroErrorData.CannotLoadFontProvider,
|
|
18
|
-
message: AstroErrorData.CannotLoadFontProvider.message(entrypoint)
|
|
19
|
-
},
|
|
20
|
-
{ cause }
|
|
21
|
-
);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
async function resolveProvider({
|
|
25
|
-
root,
|
|
26
|
-
provider: { entrypoint, config },
|
|
27
|
-
resolveMod
|
|
28
|
-
}) {
|
|
29
|
-
const id = resolveEntrypoint(root, entrypoint.toString()).href;
|
|
30
|
-
const mod = await resolveMod(id);
|
|
31
|
-
const { provider } = validateMod(mod, id);
|
|
32
|
-
return { config, provider };
|
|
33
|
-
}
|
|
34
|
-
export {
|
|
35
|
-
resolveProvider,
|
|
36
|
-
validateMod
|
|
37
|
-
};
|