@volter/twin-googlefonts 0.0.0-stage → 1.0.1

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 (173) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +15 -2
  3. package/api/spec/SOURCE.md +17 -0
  4. package/api/spec/discovery.json +306 -0
  5. package/api/spec/openapi.json +647 -0
  6. package/api/spec/sources.json +6 -0
  7. package/api/src/fetch.ts +16 -0
  8. package/api/src/generated/surface.gen.json +1 -0
  9. package/api/src/generated/ui.gen.json +1 -0
  10. package/api/src/index.ts +3 -0
  11. package/api/src/manifest.ts +31 -0
  12. package/api/src/semantics/doors.ts +131 -0
  13. package/api/src/semantics/index.ts +8 -0
  14. package/api/src/semantics/shared.ts +1 -0
  15. package/api/src/semantics/states.ts +6 -0
  16. package/api/src/semantics/webfonts.ts +32 -0
  17. package/assets/spec/SOURCE.md +11 -0
  18. package/assets/spec/openapi.json +162 -0
  19. package/assets/spec/sources.json +1 -0
  20. package/assets/src/fetch.ts +14 -0
  21. package/assets/src/generated/surface.gen.json +1 -0
  22. package/assets/src/generated/ui.gen.json +1 -0
  23. package/assets/src/index.ts +3 -0
  24. package/assets/src/manifest.ts +19 -0
  25. package/assets/src/semantics/index.ts +10 -0
  26. package/assets/src/semantics/l.ts +4 -0
  27. package/assets/src/semantics/s.ts +4 -0
  28. package/assets/src/semantics/shared.ts +13 -0
  29. package/css/spec/SOURCE.md +15 -0
  30. package/css/spec/openapi.json +142 -0
  31. package/css/spec/sources.json +1 -0
  32. package/css/src/fetch.ts +14 -0
  33. package/css/src/generated/surface.gen.json +1 -0
  34. package/css/src/generated/ui.gen.json +1 -0
  35. package/css/src/index.ts +3 -0
  36. package/css/src/manifest.ts +19 -0
  37. package/css/src/semantics/css.ts +19 -0
  38. package/css/src/semantics/css2.ts +20 -0
  39. package/css/src/semantics/index.ts +10 -0
  40. package/css/src/semantics/shared.ts +1 -0
  41. package/dist/api/spec/SOURCE.md +17 -0
  42. package/dist/api/spec/discovery.json +306 -0
  43. package/dist/api/spec/openapi.json +647 -0
  44. package/dist/api/spec/sources.json +6 -0
  45. package/dist/api/src/fetch.d.ts +2 -0
  46. package/dist/api/src/fetch.js +15 -0
  47. package/dist/api/src/fetch.ts +16 -0
  48. package/dist/api/src/generated/surface.gen.json +1 -0
  49. package/dist/api/src/generated/ui.gen.json +1 -0
  50. package/dist/api/src/index.d.ts +2 -0
  51. package/dist/api/src/index.js +3 -0
  52. package/dist/api/src/index.ts +3 -0
  53. package/dist/api/src/manifest.d.ts +2 -0
  54. package/dist/api/src/manifest.js +29 -0
  55. package/dist/api/src/manifest.ts +31 -0
  56. package/dist/api/src/semantics/doors.d.ts +3 -0
  57. package/dist/api/src/semantics/doors.js +138 -0
  58. package/dist/api/src/semantics/doors.ts +131 -0
  59. package/dist/api/src/semantics/index.d.ts +2 -0
  60. package/dist/api/src/semantics/index.js +4 -0
  61. package/dist/api/src/semantics/index.ts +8 -0
  62. package/dist/api/src/semantics/shared.d.ts +1 -0
  63. package/dist/api/src/semantics/shared.js +1 -0
  64. package/dist/api/src/semantics/shared.ts +1 -0
  65. package/dist/api/src/semantics/states.d.ts +8 -0
  66. package/dist/api/src/semantics/states.js +6 -0
  67. package/dist/api/src/semantics/states.ts +6 -0
  68. package/dist/api/src/semantics/webfonts.d.ts +2 -0
  69. package/dist/api/src/semantics/webfonts.js +34 -0
  70. package/dist/api/src/semantics/webfonts.ts +32 -0
  71. package/dist/assets/spec/SOURCE.md +11 -0
  72. package/dist/assets/spec/openapi.json +162 -0
  73. package/dist/assets/spec/sources.json +1 -0
  74. package/dist/assets/src/fetch.d.ts +2 -0
  75. package/dist/assets/src/fetch.js +13 -0
  76. package/dist/assets/src/fetch.ts +14 -0
  77. package/dist/assets/src/generated/surface.gen.json +1 -0
  78. package/dist/assets/src/generated/ui.gen.json +1 -0
  79. package/dist/assets/src/index.d.ts +2 -0
  80. package/dist/assets/src/index.js +3 -0
  81. package/dist/assets/src/index.ts +3 -0
  82. package/dist/assets/src/manifest.d.ts +2 -0
  83. package/dist/assets/src/manifest.js +17 -0
  84. package/dist/assets/src/manifest.ts +19 -0
  85. package/dist/assets/src/semantics/index.d.ts +2 -0
  86. package/dist/assets/src/semantics/index.js +6 -0
  87. package/dist/assets/src/semantics/index.ts +10 -0
  88. package/dist/assets/src/semantics/l.d.ts +2 -0
  89. package/dist/assets/src/semantics/l.js +3 -0
  90. package/dist/assets/src/semantics/l.ts +4 -0
  91. package/dist/assets/src/semantics/s.d.ts +2 -0
  92. package/dist/assets/src/semantics/s.js +3 -0
  93. package/dist/assets/src/semantics/s.ts +4 -0
  94. package/dist/assets/src/semantics/shared.d.ts +2 -0
  95. package/dist/assets/src/semantics/shared.js +13 -0
  96. package/dist/assets/src/semantics/shared.ts +13 -0
  97. package/dist/css/spec/SOURCE.md +15 -0
  98. package/dist/css/spec/openapi.json +142 -0
  99. package/dist/css/spec/sources.json +1 -0
  100. package/dist/css/src/fetch.d.ts +2 -0
  101. package/dist/css/src/fetch.js +13 -0
  102. package/dist/css/src/fetch.ts +14 -0
  103. package/dist/css/src/generated/surface.gen.json +1 -0
  104. package/dist/css/src/generated/ui.gen.json +1 -0
  105. package/dist/css/src/index.d.ts +2 -0
  106. package/dist/css/src/index.js +3 -0
  107. package/dist/css/src/index.ts +3 -0
  108. package/dist/css/src/manifest.d.ts +2 -0
  109. package/dist/css/src/manifest.js +16 -0
  110. package/dist/css/src/manifest.ts +19 -0
  111. package/dist/css/src/semantics/css.d.ts +2 -0
  112. package/dist/css/src/semantics/css.js +19 -0
  113. package/dist/css/src/semantics/css.ts +19 -0
  114. package/dist/css/src/semantics/css2.d.ts +2 -0
  115. package/dist/css/src/semantics/css2.js +21 -0
  116. package/dist/css/src/semantics/css2.ts +20 -0
  117. package/dist/css/src/semantics/index.d.ts +2 -0
  118. package/dist/css/src/semantics/index.js +6 -0
  119. package/dist/css/src/semantics/index.ts +10 -0
  120. package/dist/css/src/semantics/shared.d.ts +1 -0
  121. package/dist/css/src/semantics/shared.js +1 -0
  122. package/dist/css/src/semantics/shared.ts +1 -0
  123. package/dist/journeys/customer-life.json +463 -0
  124. package/dist/journeys/customer-life.outline.md +24 -0
  125. package/dist/journeys/customer-life.outline.verdict.json +82 -0
  126. package/dist/journeys/customer-life.verdict.json +149 -0
  127. package/dist/journeys/decisions.json +54 -0
  128. package/dist/journeys/demand.json +67 -0
  129. package/dist/journeys/first-use.json +20 -0
  130. package/dist/src/cli.d.ts +2 -0
  131. package/dist/src/cli.js +21 -0
  132. package/dist/src/fetch.d.ts +2 -0
  133. package/dist/src/fetch.js +10 -0
  134. package/dist/src/index.d.ts +5 -0
  135. package/dist/src/index.js +15 -0
  136. package/dist/src/manifest.d.ts +2 -0
  137. package/dist/src/manifest.js +25 -0
  138. package/dist/src/semantics/seed.d.ts +2 -0
  139. package/dist/src/semantics/seed.js +141 -0
  140. package/dist/src/semantics/shared.d.ts +9 -0
  141. package/dist/src/semantics/shared.js +23 -0
  142. package/dist/src/server.d.ts +7 -0
  143. package/dist/src/server.js +7 -0
  144. package/dist/vendor/Inter-OFL.txt +93 -0
  145. package/dist/vendor/OFL.txt +94 -0
  146. package/dist/vendor/SOURCE.md +33 -0
  147. package/dist/vendor/antic.json +93 -0
  148. package/dist/vendor/inputs.json +460 -0
  149. package/dist/vendor/inter.json +44 -0
  150. package/dist/vendor/noto-sans-sc-text.json +24 -0
  151. package/generated/pack-facts.json +65 -0
  152. package/journeys/customer-life.json +463 -0
  153. package/journeys/customer-life.outline.md +24 -0
  154. package/journeys/customer-life.outline.verdict.json +82 -0
  155. package/journeys/customer-life.verdict.json +149 -0
  156. package/journeys/decisions.json +54 -0
  157. package/journeys/demand.json +67 -0
  158. package/journeys/first-use.json +20 -0
  159. package/package.json +41 -4
  160. package/src/cli.ts +22 -0
  161. package/src/fetch.ts +11 -0
  162. package/src/index.ts +17 -0
  163. package/src/manifest.ts +27 -0
  164. package/src/semantics/seed.ts +143 -0
  165. package/src/semantics/shared.ts +25 -0
  166. package/src/server.ts +8 -0
  167. package/vendor/Inter-OFL.txt +93 -0
  168. package/vendor/OFL.txt +94 -0
  169. package/vendor/SOURCE.md +33 -0
  170. package/vendor/antic.json +93 -0
  171. package/vendor/inputs.json +460 -0
  172. package/vendor/inter.json +44 -0
  173. package/vendor/noto-sans-sc-text.json +24 -0
@@ -0,0 +1,19 @@
1
+ import type { HandlerContext } from '@volter/world-core';
2
+ import { CATALOG, CSS, cssKey, htmlError } from './shared.ts';
3
+
4
+ // source: spec:getStylesheet "The representation is selected for the requesting browser."
5
+ export async function getStylesheet(ctx: HandlerContext): Promise<Response> {
6
+ const query = new URL(ctx.call.request.url).searchParams;
7
+ const family = query.get('family'), subset = query.get('subset') ?? 'latin';
8
+ if (!family || [...query.keys()].some(k => !['family','subset'].includes(k)))
9
+ return htmlError(400, 'Bad font request');
10
+ const generation = ctx.row(CATALOG, 'published')?.fingerprint;
11
+ const key = cssKey(ctx, family, subset, ctx.call.request.headers.get('user-agent') ?? '');
12
+ const row = generation === undefined ? undefined : ctx.row(CSS, String(generation) + ':' + key);
13
+ // Where the documentation stops: no supplied representation is a named
14
+ // refusal, not an invented conversion or another browser's font format.
15
+ if (!row) return htmlError(400, 'Font family or browser representation is not published');
16
+ const body = await ctx.blobs.get(String(row.blob));
17
+ if (!body) return htmlError(404, 'Font stylesheet not found');
18
+ return new Response(Uint8Array.from(body).buffer, { headers: { 'content-type': 'text/css; charset=utf-8', 'content-length': String(body.length), 'vary': 'User-Agent' } });
19
+ }
@@ -0,0 +1,2 @@
1
+ import type { HandlerContext } from '@volter/world-core';
2
+ export declare function getStylesheet2(ctx: HandlerContext): Promise<Response>;
@@ -0,0 +1,21 @@
1
+ import { CATALOG, CSS, css2Key, css2Query, htmlError } from "./shared.js";
2
+ // source: spec:getStylesheet2 "To request multiple families, specify the family= param for each family."
3
+ export async function getStylesheet2(ctx) {
4
+ const pairs = css2Query(new URL(ctx.call.request.url).searchParams);
5
+ if (!pairs)
6
+ return htmlError(400, 'Bad font request');
7
+ const generation = ctx.row(CATALOG, 'published')?.fingerprint;
8
+ const userAgent = ctx.call.request.headers.get('user-agent') ?? '';
9
+ const sheet = (agent) => generation === undefined ? undefined : ctx.row(CSS, String(generation) + ':' + css2Key(ctx, pairs, agent));
10
+ // Where the evidence stops: Google answered the same truetype stylesheet to no User-Agent, "node" and "undici"
11
+ // (vendor/inter.json). A request whose agent is not a browser's ("Mozilla/...") and has no representation of its
12
+ // own reads the one published for no agent; a browser without its own representation is refused, never sent
13
+ // another browser's format.
14
+ const row = sheet(userAgent) ?? (userAgent.startsWith('Mozilla/') ? undefined : sheet(''));
15
+ if (!row)
16
+ return htmlError(400, 'Font family or browser representation is not published');
17
+ const body = await ctx.blobs.get(String(row.blob));
18
+ if (!body)
19
+ return htmlError(404, 'Font stylesheet not found');
20
+ return new Response(Uint8Array.from(body).buffer, { headers: { 'content-type': 'text/css; charset=utf-8', 'content-length': String(body.length), 'access-control-allow-origin': '*' } });
21
+ }
@@ -0,0 +1,20 @@
1
+ import type { HandlerContext } from '@volter/world-core';
2
+ import { CATALOG, CSS, css2Key, css2Query, htmlError } from './shared.ts';
3
+
4
+ // source: spec:getStylesheet2 "To request multiple families, specify the family= param for each family."
5
+ export async function getStylesheet2(ctx: HandlerContext): Promise<Response> {
6
+ const pairs = css2Query(new URL(ctx.call.request.url).searchParams);
7
+ if (!pairs) return htmlError(400, 'Bad font request');
8
+ const generation = ctx.row(CATALOG, 'published')?.fingerprint;
9
+ const userAgent = ctx.call.request.headers.get('user-agent') ?? '';
10
+ const sheet = (agent: string) => generation === undefined ? undefined : ctx.row(CSS, String(generation) + ':' + css2Key(ctx, pairs, agent));
11
+ // Where the evidence stops: Google answered the same truetype stylesheet to no User-Agent, "node" and "undici"
12
+ // (vendor/inter.json). A request whose agent is not a browser's ("Mozilla/...") and has no representation of its
13
+ // own reads the one published for no agent; a browser without its own representation is refused, never sent
14
+ // another browser's format.
15
+ const row = sheet(userAgent) ?? (userAgent.startsWith('Mozilla/') ? undefined : sheet(''));
16
+ if (!row) return htmlError(400, 'Font family or browser representation is not published');
17
+ const body = await ctx.blobs.get(String(row.blob));
18
+ if (!body) return htmlError(404, 'Font stylesheet not found');
19
+ return new Response(Uint8Array.from(body).buffer, { headers: { 'content-type': 'text/css; charset=utf-8', 'content-length': String(body.length), 'access-control-allow-origin': '*' } });
20
+ }
@@ -0,0 +1,2 @@
1
+ import type { Handler } from '@volter/world-core';
2
+ export declare const cssSemantics: Record<string, Handler>;
@@ -0,0 +1,6 @@
1
+ import * as css from "./css.js";
2
+ import * as css2 from "./css2.js";
3
+ export const cssSemantics = {
4
+ getStylesheet: css.getStylesheet,
5
+ getStylesheet2: css2.getStylesheet2,
6
+ };
@@ -0,0 +1,10 @@
1
+ // GENERATED by scripts/create-pack.ts --index: the handler map, by operationId, from the families' files (each
2
+ // handler named as its operation). Do not edit; add a handler to its family's file and generate again.
3
+ import type { Handler } from '@volter/world-core';
4
+ import * as css from './css.ts';
5
+ import * as css2 from './css2.ts';
6
+
7
+ export const cssSemantics: Record<string, Handler> = {
8
+ getStylesheet: css.getStylesheet,
9
+ getStylesheet2: css2.getStylesheet2,
10
+ };
@@ -0,0 +1 @@
1
+ export * from '../../../src/semantics/shared.js';
@@ -0,0 +1 @@
1
+ export * from "../../../src/semantics/shared.js";
@@ -0,0 +1 @@
1
+ export * from '../../../src/semantics/shared.ts';