astro 5.16.2 → 5.16.4

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.
Files changed (65) hide show
  1. package/dist/actions/runtime/server.d.ts +5 -4
  2. package/dist/actions/runtime/server.js +0 -1
  3. package/dist/assets/fonts/definitions.d.ts +8 -3
  4. package/dist/assets/fonts/infra/build-remote-font-provider-mod-resolver.d.ts +3 -1
  5. package/dist/assets/fonts/infra/build-remote-font-provider-mod-resolver.js +5 -7
  6. package/dist/assets/fonts/infra/build-url-proxy-hash-resolver.d.ts +15 -5
  7. package/dist/assets/fonts/infra/build-url-proxy-hash-resolver.js +17 -10
  8. package/dist/assets/fonts/infra/build-url-resolver.d.ts +10 -5
  9. package/dist/assets/fonts/infra/build-url-resolver.js +33 -27
  10. package/dist/assets/fonts/infra/cached-font-fetcher.d.ts +11 -7
  11. package/dist/assets/fonts/infra/cached-font-fetcher.js +35 -29
  12. package/dist/assets/fonts/infra/capsize-font-metrics-resolver.d.ts +18 -5
  13. package/dist/assets/fonts/infra/capsize-font-metrics-resolver.js +45 -40
  14. package/dist/assets/fonts/infra/data-collector.d.ts +10 -3
  15. package/dist/assets/fonts/infra/data-collector.js +30 -16
  16. package/dist/assets/fonts/infra/dev-remote-font-provider-mod-resolver.d.ts +7 -3
  17. package/dist/assets/fonts/infra/dev-remote-font-provider-mod-resolver.js +11 -9
  18. package/dist/assets/fonts/infra/dev-url-proxy-hash-resolver.d.ts +15 -5
  19. package/dist/assets/fonts/infra/dev-url-proxy-hash-resolver.js +31 -22
  20. package/dist/assets/fonts/infra/dev-url-resolver.d.ts +9 -4
  21. package/dist/assets/fonts/infra/dev-url-resolver.js +24 -20
  22. package/dist/assets/fonts/infra/font-type-extractor.d.ts +4 -1
  23. package/dist/assets/fonts/infra/font-type-extractor.js +14 -16
  24. package/dist/assets/fonts/infra/fontace-font-file-reader.d.ts +10 -1
  25. package/dist/assets/fonts/infra/fontace-font-file-reader.js +18 -20
  26. package/dist/assets/fonts/infra/levenshtein-string-matcher.d.ts +4 -1
  27. package/dist/assets/fonts/infra/levenshtein-string-matcher.js +119 -121
  28. package/dist/assets/fonts/infra/local-url-proxy-content-resolver.d.ts +4 -0
  29. package/dist/assets/fonts/infra/local-url-proxy-content-resolver.js +14 -0
  30. package/dist/assets/fonts/infra/minifiable-css-renderer.d.ts +8 -3
  31. package/dist/assets/fonts/infra/minifiable-css-renderer.js +12 -10
  32. package/dist/assets/fonts/infra/remote-font-provider-resolver.d.ts +9 -4
  33. package/dist/assets/fonts/infra/remote-font-provider-resolver.js +42 -38
  34. package/dist/assets/fonts/infra/remote-url-proxy-content-resolver.d.ts +4 -0
  35. package/dist/assets/fonts/infra/remote-url-proxy-content-resolver.js +9 -0
  36. package/dist/assets/fonts/infra/require-local-provider-url-resolver.d.ts +8 -4
  37. package/dist/assets/fonts/infra/require-local-provider-url-resolver.js +17 -12
  38. package/dist/assets/fonts/infra/system-fallbacks-provider.d.ts +5 -10
  39. package/dist/assets/fonts/infra/system-fallbacks-provider.js +8 -11
  40. package/dist/assets/fonts/infra/unstorage-fs-storage.d.ts +11 -0
  41. package/dist/assets/fonts/infra/unstorage-fs-storage.js +26 -0
  42. package/dist/assets/fonts/infra/url-proxy.d.ts +16 -7
  43. package/dist/assets/fonts/infra/url-proxy.js +46 -27
  44. package/dist/assets/fonts/infra/xxhash-hasher.d.ts +6 -1
  45. package/dist/assets/fonts/infra/xxhash-hasher.js +13 -9
  46. package/dist/assets/fonts/orchestrate.d.ts +1 -2
  47. package/dist/assets/fonts/utils.d.ts +1 -2
  48. package/dist/assets/fonts/vite-plugin-fonts.js +43 -46
  49. package/dist/cli/infra/build-time-astro-version-provider.js +1 -1
  50. package/dist/content/content-layer.js +3 -3
  51. package/dist/core/app/index.js +8 -2
  52. package/dist/core/constants.js +1 -1
  53. package/dist/core/csp/runtime.d.ts +11 -0
  54. package/dist/core/csp/runtime.js +35 -0
  55. package/dist/core/dev/dev.js +1 -1
  56. package/dist/core/messages.js +2 -2
  57. package/dist/core/render-context.js +25 -5
  58. package/dist/core/util/pathname.d.ts +10 -0
  59. package/dist/core/util/pathname.js +17 -0
  60. package/dist/vite-plugin-astro-server/request.js +9 -2
  61. package/package.json +2 -2
  62. package/dist/assets/fonts/infra/fs-storage.d.ts +0 -4
  63. package/dist/assets/fonts/infra/fs-storage.js +0 -14
  64. package/dist/assets/fonts/infra/url-proxy-content-resolver.d.ts +0 -3
  65. package/dist/assets/fonts/infra/url-proxy-content-resolver.js +0 -23
@@ -1,25 +1,29 @@
1
1
  import { joinPaths, prependForwardSlash } from "../../../core/path.js";
2
2
  import { createPlaceholderURL, stringifyPlaceholderURL } from "../../utils/url.js";
3
- function createDevUrlResolver({
4
- base,
5
- searchParams
6
- }) {
7
- let resolved = false;
8
- return {
9
- resolve(hash) {
10
- resolved ||= true;
11
- const urlPath = prependForwardSlash(joinPaths(base, hash));
12
- const url = createPlaceholderURL(urlPath);
13
- searchParams.forEach((value, key) => {
14
- url.searchParams.set(key, value);
15
- });
16
- return stringifyPlaceholderURL(url);
17
- },
18
- getCspResources() {
19
- return resolved ? ["'self'"] : [];
20
- }
21
- };
3
+ class DevUrlResolver {
4
+ #resolved = false;
5
+ #base;
6
+ #searchParams;
7
+ constructor({
8
+ base,
9
+ searchParams
10
+ }) {
11
+ this.#base = base;
12
+ this.#searchParams = searchParams;
13
+ }
14
+ resolve(hash) {
15
+ this.#resolved ||= true;
16
+ const urlPath = prependForwardSlash(joinPaths(this.#base, hash));
17
+ const url = createPlaceholderURL(urlPath);
18
+ this.#searchParams.forEach((value, key) => {
19
+ url.searchParams.set(key, value);
20
+ });
21
+ return stringifyPlaceholderURL(url);
22
+ }
23
+ get cspResources() {
24
+ return this.#resolved ? ["'self'"] : [];
25
+ }
22
26
  }
23
27
  export {
24
- createDevUrlResolver
28
+ DevUrlResolver
25
29
  };
@@ -1,2 +1,5 @@
1
1
  import type { FontTypeExtractor } from '../definitions.js';
2
- export declare function createFontTypeExtractor(): FontTypeExtractor;
2
+ import type { FontType } from '../types.js';
3
+ export declare class RealFontTypeExtractor implements FontTypeExtractor {
4
+ extract(url: string): FontType;
5
+ }
@@ -1,23 +1,21 @@
1
1
  import { extname } from "node:path";
2
2
  import { AstroError, AstroErrorData } from "../../../core/errors/index.js";
3
3
  import { isFontType } from "../utils.js";
4
- function createFontTypeExtractor() {
5
- return {
6
- extract(url) {
7
- const extension = extname(url).slice(1);
8
- if (!isFontType(extension)) {
9
- throw new AstroError(
10
- {
11
- ...AstroErrorData.CannotExtractFontType,
12
- message: AstroErrorData.CannotExtractFontType.message(url)
13
- },
14
- { cause: `Unexpected extension, got "${extension}"` }
15
- );
16
- }
17
- return extension;
4
+ class RealFontTypeExtractor {
5
+ extract(url) {
6
+ const extension = extname(url).slice(1);
7
+ if (!isFontType(extension)) {
8
+ throw new AstroError(
9
+ {
10
+ ...AstroErrorData.CannotExtractFontType,
11
+ message: AstroErrorData.CannotExtractFontType.message(url)
12
+ },
13
+ { cause: `Unexpected extension, got "${extension}"` }
14
+ );
18
15
  }
19
- };
16
+ return extension;
17
+ }
20
18
  }
21
19
  export {
22
- createFontTypeExtractor
20
+ RealFontTypeExtractor
23
21
  };
@@ -1,2 +1,11 @@
1
1
  import type { FontFileReader } from '../definitions.js';
2
- export declare function createFontaceFontFileReader(): FontFileReader;
2
+ import type { Style } from '../types.js';
3
+ export declare class FontaceFontFileReader implements FontFileReader {
4
+ extract({ family, url }: {
5
+ family: string;
6
+ url: string;
7
+ }): {
8
+ weight: string;
9
+ style: Style;
10
+ };
11
+ }
@@ -1,27 +1,25 @@
1
1
  import { readFileSync } from "node:fs";
2
2
  import { fontace } from "fontace";
3
3
  import { AstroError, AstroErrorData } from "../../../core/errors/index.js";
4
- function createFontaceFontFileReader() {
5
- return {
6
- extract({ family, url }) {
7
- try {
8
- const data = fontace(readFileSync(url));
9
- return {
10
- weight: data.weight,
11
- style: data.style
12
- };
13
- } catch (cause) {
14
- throw new AstroError(
15
- {
16
- ...AstroErrorData.CannotDetermineWeightAndStyleFromFontFile,
17
- message: AstroErrorData.CannotDetermineWeightAndStyleFromFontFile.message(family, url)
18
- },
19
- { cause }
20
- );
21
- }
4
+ class FontaceFontFileReader {
5
+ extract({ family, url }) {
6
+ try {
7
+ const data = fontace(readFileSync(url));
8
+ return {
9
+ weight: data.weight,
10
+ style: data.style
11
+ };
12
+ } catch (cause) {
13
+ throw new AstroError(
14
+ {
15
+ ...AstroErrorData.CannotDetermineWeightAndStyleFromFontFile,
16
+ message: AstroErrorData.CannotDetermineWeightAndStyleFromFontFile.message(family, url)
17
+ },
18
+ { cause }
19
+ );
22
20
  }
23
- };
21
+ }
24
22
  }
25
23
  export {
26
- createFontaceFontFileReader
24
+ FontaceFontFileReader
27
25
  };
@@ -1,2 +1,5 @@
1
1
  import type { StringMatcher } from '../definitions.js';
2
- export declare function createLevenshteinStringMatcher(): StringMatcher;
2
+ export declare class LevenshteinStringMatcher implements StringMatcher {
3
+ #private;
4
+ getClosestMatch(target: string, candidates: Array<string>): string;
5
+ }
@@ -1,65 +1,99 @@
1
- const peq = new Uint32Array(65536);
2
- const myers_32 = (a, b) => {
3
- const n = a.length;
4
- const m = b.length;
5
- const lst = 1 << n - 1;
6
- let pv = -1;
7
- let mv = 0;
8
- let sc = n;
9
- let i = n;
10
- while (i--) {
11
- peq[a.charCodeAt(i)] |= 1 << i;
12
- }
13
- for (i = 0; i < m; i++) {
14
- let eq = peq[b.charCodeAt(i)];
15
- const xv = eq | mv;
16
- eq |= (eq & pv) + pv ^ pv;
17
- mv |= ~(eq | pv);
18
- pv &= eq;
19
- if (mv & lst) {
20
- sc++;
1
+ class LevenshteinStringMatcher {
2
+ #peq = new Uint32Array(65536);
3
+ #myers_32(a, b) {
4
+ const n = a.length;
5
+ const m = b.length;
6
+ const lst = 1 << n - 1;
7
+ let pv = -1;
8
+ let mv = 0;
9
+ let sc = n;
10
+ let i = n;
11
+ while (i--) {
12
+ this.#peq[a.charCodeAt(i)] |= 1 << i;
21
13
  }
22
- if (pv & lst) {
23
- sc--;
14
+ for (i = 0; i < m; i++) {
15
+ let eq = this.#peq[b.charCodeAt(i)];
16
+ const xv = eq | mv;
17
+ eq |= (eq & pv) + pv ^ pv;
18
+ mv |= ~(eq | pv);
19
+ pv &= eq;
20
+ if (mv & lst) {
21
+ sc++;
22
+ }
23
+ if (pv & lst) {
24
+ sc--;
25
+ }
26
+ mv = mv << 1 | 1;
27
+ pv = pv << 1 | ~(xv | mv);
28
+ mv &= xv;
24
29
  }
25
- mv = mv << 1 | 1;
26
- pv = pv << 1 | ~(xv | mv);
27
- mv &= xv;
28
- }
29
- i = n;
30
- while (i--) {
31
- peq[a.charCodeAt(i)] = 0;
32
- }
33
- return sc;
34
- };
35
- const myers_x = (b, a) => {
36
- const n = a.length;
37
- const m = b.length;
38
- const mhc = [];
39
- const phc = [];
40
- const hsize = Math.ceil(n / 32);
41
- const vsize = Math.ceil(m / 32);
42
- for (let i = 0; i < hsize; i++) {
43
- phc[i] = -1;
44
- mhc[i] = 0;
30
+ i = n;
31
+ while (i--) {
32
+ this.#peq[a.charCodeAt(i)] = 0;
33
+ }
34
+ return sc;
45
35
  }
46
- let j = 0;
47
- for (; j < vsize - 1; j++) {
48
- let mv2 = 0;
49
- let pv2 = -1;
50
- const start2 = j * 32;
51
- const vlen2 = Math.min(32, m) + start2;
52
- for (let k = start2; k < vlen2; k++) {
53
- peq[b.charCodeAt(k)] |= 1 << k;
36
+ #myers_x(b, a) {
37
+ const n = a.length;
38
+ const m = b.length;
39
+ const mhc = [];
40
+ const phc = [];
41
+ const hsize = Math.ceil(n / 32);
42
+ const vsize = Math.ceil(m / 32);
43
+ for (let i = 0; i < hsize; i++) {
44
+ phc[i] = -1;
45
+ mhc[i] = 0;
46
+ }
47
+ let j = 0;
48
+ for (; j < vsize - 1; j++) {
49
+ let mv2 = 0;
50
+ let pv2 = -1;
51
+ const start2 = j * 32;
52
+ const vlen2 = Math.min(32, m) + start2;
53
+ for (let k = start2; k < vlen2; k++) {
54
+ this.#peq[b.charCodeAt(k)] |= 1 << k;
55
+ }
56
+ for (let i = 0; i < n; i++) {
57
+ const eq = this.#peq[a.charCodeAt(i)];
58
+ const pb = phc[i / 32 | 0] >>> i & 1;
59
+ const mb = mhc[i / 32 | 0] >>> i & 1;
60
+ const xv = eq | mv2;
61
+ const xh = ((eq | mb) & pv2) + pv2 ^ pv2 | eq | mb;
62
+ let ph = mv2 | ~(xh | pv2);
63
+ let mh = pv2 & xh;
64
+ if (ph >>> 31 ^ pb) {
65
+ phc[i / 32 | 0] ^= 1 << i;
66
+ }
67
+ if (mh >>> 31 ^ mb) {
68
+ mhc[i / 32 | 0] ^= 1 << i;
69
+ }
70
+ ph = ph << 1 | pb;
71
+ mh = mh << 1 | mb;
72
+ pv2 = mh | ~(xv | ph);
73
+ mv2 = ph & xv;
74
+ }
75
+ for (let k = start2; k < vlen2; k++) {
76
+ this.#peq[b.charCodeAt(k)] = 0;
77
+ }
78
+ }
79
+ let mv = 0;
80
+ let pv = -1;
81
+ const start = j * 32;
82
+ const vlen = Math.min(32, m - start) + start;
83
+ for (let k = start; k < vlen; k++) {
84
+ this.#peq[b.charCodeAt(k)] |= 1 << k;
54
85
  }
86
+ let score = m;
55
87
  for (let i = 0; i < n; i++) {
56
- const eq = peq[a.charCodeAt(i)];
88
+ const eq = this.#peq[a.charCodeAt(i)];
57
89
  const pb = phc[i / 32 | 0] >>> i & 1;
58
90
  const mb = mhc[i / 32 | 0] >>> i & 1;
59
- const xv = eq | mv2;
60
- const xh = ((eq | mb) & pv2) + pv2 ^ pv2 | eq | mb;
61
- let ph = mv2 | ~(xh | pv2);
62
- let mh = pv2 & xh;
91
+ const xv = eq | mv;
92
+ const xh = ((eq | mb) & pv) + pv ^ pv | eq | mb;
93
+ let ph = mv | ~(xh | pv);
94
+ let mh = pv & xh;
95
+ score += ph >>> m - 1 & 1;
96
+ score -= mh >>> m - 1 & 1;
63
97
  if (ph >>> 31 ^ pb) {
64
98
  phc[i / 32 | 0] ^= 1 << i;
65
99
  }
@@ -68,80 +102,44 @@ const myers_x = (b, a) => {
68
102
  }
69
103
  ph = ph << 1 | pb;
70
104
  mh = mh << 1 | mb;
71
- pv2 = mh | ~(xv | ph);
72
- mv2 = ph & xv;
105
+ pv = mh | ~(xv | ph);
106
+ mv = ph & xv;
73
107
  }
74
- for (let k = start2; k < vlen2; k++) {
75
- peq[b.charCodeAt(k)] = 0;
108
+ for (let k = start; k < vlen; k++) {
109
+ this.#peq[b.charCodeAt(k)] = 0;
76
110
  }
111
+ return score;
77
112
  }
78
- let mv = 0;
79
- let pv = -1;
80
- const start = j * 32;
81
- const vlen = Math.min(32, m - start) + start;
82
- for (let k = start; k < vlen; k++) {
83
- peq[b.charCodeAt(k)] |= 1 << k;
84
- }
85
- let score = m;
86
- for (let i = 0; i < n; i++) {
87
- const eq = peq[a.charCodeAt(i)];
88
- const pb = phc[i / 32 | 0] >>> i & 1;
89
- const mb = mhc[i / 32 | 0] >>> i & 1;
90
- const xv = eq | mv;
91
- const xh = ((eq | mb) & pv) + pv ^ pv | eq | mb;
92
- let ph = mv | ~(xh | pv);
93
- let mh = pv & xh;
94
- score += ph >>> m - 1 & 1;
95
- score -= mh >>> m - 1 & 1;
96
- if (ph >>> 31 ^ pb) {
97
- phc[i / 32 | 0] ^= 1 << i;
113
+ #distance(a, b) {
114
+ if (a.length < b.length) {
115
+ const tmp = b;
116
+ b = a;
117
+ a = tmp;
98
118
  }
99
- if (mh >>> 31 ^ mb) {
100
- mhc[i / 32 | 0] ^= 1 << i;
119
+ if (b.length === 0) {
120
+ return a.length;
101
121
  }
102
- ph = ph << 1 | pb;
103
- mh = mh << 1 | mb;
104
- pv = mh | ~(xv | ph);
105
- mv = ph & xv;
106
- }
107
- for (let k = start; k < vlen; k++) {
108
- peq[b.charCodeAt(k)] = 0;
109
- }
110
- return score;
111
- };
112
- const distance = (a, b) => {
113
- if (a.length < b.length) {
114
- const tmp = b;
115
- b = a;
116
- a = tmp;
117
- }
118
- if (b.length === 0) {
119
- return a.length;
120
- }
121
- if (a.length <= 32) {
122
- return myers_32(a, b);
123
- }
124
- return myers_x(a, b);
125
- };
126
- const closest = (str, arr) => {
127
- let min_distance = Infinity;
128
- let min_index = 0;
129
- for (let i = 0; i < arr.length; i++) {
130
- const dist = distance(str, arr[i]);
131
- if (dist < min_distance) {
132
- min_distance = dist;
133
- min_index = i;
122
+ if (a.length <= 32) {
123
+ return this.#myers_32(a, b);
134
124
  }
125
+ return this.#myers_x(a, b);
135
126
  }
136
- return arr[min_index];
137
- };
138
- function createLevenshteinStringMatcher() {
139
- return {
140
- getClosestMatch(target, candidates) {
141
- return closest(target, candidates);
127
+ #closest(str, arr) {
128
+ let min_distance = Infinity;
129
+ let min_index = 0;
130
+ for (let i = 0; i < arr.length; i++) {
131
+ const dist = this.#distance(str, arr[i]);
132
+ if (dist < min_distance) {
133
+ min_distance = dist;
134
+ min_index = i;
135
+ }
142
136
  }
143
- };
137
+ return arr[min_index];
138
+ }
139
+ getClosestMatch(target, candidates) {
140
+ return this.#closest(target, candidates);
141
+ }
144
142
  }
145
143
  export {
146
- createLevenshteinStringMatcher
144
+ LevenshteinStringMatcher
147
145
  };
@@ -0,0 +1,4 @@
1
+ import type { UrlProxyContentResolver } from '../definitions.js';
2
+ export declare class LocalUrlProxyContentResolver implements UrlProxyContentResolver {
3
+ resolve(url: string): string;
4
+ }
@@ -0,0 +1,14 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { AstroError, AstroErrorData } from "../../../core/errors/index.js";
3
+ class LocalUrlProxyContentResolver {
4
+ resolve(url) {
5
+ try {
6
+ return url + readFileSync(url, "utf-8");
7
+ } catch (cause) {
8
+ throw new AstroError(AstroErrorData.UnknownFilesystemError, { cause });
9
+ }
10
+ }
11
+ }
12
+ export {
13
+ LocalUrlProxyContentResolver
14
+ };
@@ -4,6 +4,11 @@ export declare function renderCssVariable(key: string, values: Array<string>, mi
4
4
  export declare function withFamily(family: string, properties: CssProperties): CssProperties;
5
5
  /** If the value contains spaces (which would be incorrectly interpreted), we wrap it in quotes. */
6
6
  export declare function handleValueWithSpaces(value: string): string;
7
- export declare function createMinifiableCssRenderer({ minify }: {
8
- minify: boolean;
9
- }): CssRenderer;
7
+ export declare class MinifiableCssRenderer implements CssRenderer {
8
+ #private;
9
+ constructor({ minify }: {
10
+ minify: boolean;
11
+ });
12
+ generateFontFace(family: string, properties: CssProperties): string;
13
+ generateCssVariable(key: string, values: Array<string>): string;
14
+ }
@@ -23,18 +23,20 @@ function handleValueWithSpaces(value) {
23
23
  }
24
24
  return value;
25
25
  }
26
- function createMinifiableCssRenderer({ minify }) {
27
- return {
28
- generateFontFace(family, properties) {
29
- return renderFontFace(withFamily(family, properties), minify);
30
- },
31
- generateCssVariable(key, values) {
32
- return renderCssVariable(key, values, minify);
33
- }
34
- };
26
+ class MinifiableCssRenderer {
27
+ #minify;
28
+ constructor({ minify }) {
29
+ this.#minify = minify;
30
+ }
31
+ generateFontFace(family, properties) {
32
+ return renderFontFace(withFamily(family, properties), this.#minify);
33
+ }
34
+ generateCssVariable(key, values) {
35
+ return renderCssVariable(key, values, this.#minify);
36
+ }
35
37
  }
36
38
  export {
37
- createMinifiableCssRenderer,
39
+ MinifiableCssRenderer,
38
40
  handleValueWithSpaces,
39
41
  renderCssVariable,
40
42
  renderFontFace,
@@ -1,5 +1,10 @@
1
1
  import type { RemoteFontProviderModResolver, RemoteFontProviderResolver } from '../definitions.js';
2
- export declare function createRemoteFontProviderResolver({ root, modResolver, }: {
3
- root: URL;
4
- modResolver: RemoteFontProviderModResolver;
5
- }): RemoteFontProviderResolver;
2
+ import type { AstroFontProvider, ResolvedFontProvider } from '../types.js';
3
+ export declare class RealRemoteFontProviderResolver implements RemoteFontProviderResolver {
4
+ #private;
5
+ constructor({ root, modResolver, }: {
6
+ root: URL;
7
+ modResolver: RemoteFontProviderModResolver;
8
+ });
9
+ resolve({ entrypoint, config }: AstroFontProvider): Promise<ResolvedFontProvider>;
10
+ }
@@ -1,45 +1,49 @@
1
1
  import { AstroError, AstroErrorData } from "../../../core/errors/index.js";
2
2
  import { resolveEntrypoint } from "../utils.js";
3
- function validateMod({
4
- mod,
5
- entrypoint
6
- }) {
7
- try {
8
- if (typeof mod !== "object" || mod === null) {
9
- throw new Error(`Expected an object for the module, but received ${typeof mod}.`);
10
- }
11
- if (typeof mod.provider !== "function") {
12
- throw new Error(`Invalid provider export in module, expected a function.`);
13
- }
14
- return {
15
- provider: mod.provider
16
- };
17
- } catch (cause) {
18
- throw new AstroError(
19
- {
20
- ...AstroErrorData.CannotLoadFontProvider,
21
- message: AstroErrorData.CannotLoadFontProvider.message(entrypoint)
22
- },
23
- { cause }
24
- );
3
+ class RealRemoteFontProviderResolver {
4
+ #root;
5
+ #modResolver;
6
+ constructor({
7
+ root,
8
+ modResolver
9
+ }) {
10
+ this.#root = root;
11
+ this.#modResolver = modResolver;
25
12
  }
26
- }
27
- function createRemoteFontProviderResolver({
28
- root,
29
- modResolver
30
- }) {
31
- return {
32
- async resolve({ entrypoint, config }) {
33
- const id = resolveEntrypoint(root, entrypoint.toString()).href;
34
- const mod = await modResolver.resolve(id);
35
- const { provider } = validateMod({
36
- mod,
37
- entrypoint: id
38
- });
39
- return { config, provider };
13
+ #validateMod({
14
+ mod,
15
+ entrypoint
16
+ }) {
17
+ try {
18
+ if (typeof mod !== "object" || mod === null) {
19
+ throw new Error(`Expected an object for the module, but received ${typeof mod}.`);
20
+ }
21
+ if (typeof mod.provider !== "function") {
22
+ throw new Error(`Invalid provider export in module, expected a function.`);
23
+ }
24
+ return {
25
+ provider: mod.provider
26
+ };
27
+ } catch (cause) {
28
+ throw new AstroError(
29
+ {
30
+ ...AstroErrorData.CannotLoadFontProvider,
31
+ message: AstroErrorData.CannotLoadFontProvider.message(entrypoint)
32
+ },
33
+ { cause }
34
+ );
40
35
  }
41
- };
36
+ }
37
+ async resolve({ entrypoint, config }) {
38
+ const id = resolveEntrypoint(this.#root, entrypoint.toString()).href;
39
+ const mod = await this.#modResolver.resolve(id);
40
+ const { provider } = this.#validateMod({
41
+ mod,
42
+ entrypoint: id
43
+ });
44
+ return { config, provider };
45
+ }
42
46
  }
43
47
  export {
44
- createRemoteFontProviderResolver
48
+ RealRemoteFontProviderResolver
45
49
  };
@@ -0,0 +1,4 @@
1
+ import type { UrlProxyContentResolver } from '../definitions.js';
2
+ export declare class RemoteUrlProxyContentResolver implements UrlProxyContentResolver {
3
+ resolve(url: string): string;
4
+ }
@@ -0,0 +1,9 @@
1
+ class RemoteUrlProxyContentResolver {
2
+ // Passthrough, the remote provider URL is enough
3
+ resolve(url) {
4
+ return url;
5
+ }
6
+ }
7
+ export {
8
+ RemoteUrlProxyContentResolver
9
+ };
@@ -1,5 +1,9 @@
1
1
  import type { LocalProviderUrlResolver } from '../definitions.js';
2
- export declare function createRequireLocalProviderUrlResolver({ root, intercept, }: {
3
- root: URL;
4
- intercept?: (path: string) => void;
5
- }): LocalProviderUrlResolver;
2
+ export declare class RequireLocalProviderUrlResolver implements LocalProviderUrlResolver {
3
+ #private;
4
+ constructor({ root, intercept, }: {
5
+ root: URL;
6
+ intercept?: ((path: string) => void) | undefined;
7
+ });
8
+ resolve(input: string): string;
9
+ }