@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.
- package/LICENSE +202 -0
- package/README.md +15 -2
- package/api/spec/SOURCE.md +17 -0
- package/api/spec/discovery.json +306 -0
- package/api/spec/openapi.json +647 -0
- package/api/spec/sources.json +6 -0
- package/api/src/fetch.ts +16 -0
- package/api/src/generated/surface.gen.json +1 -0
- package/api/src/generated/ui.gen.json +1 -0
- package/api/src/index.ts +3 -0
- package/api/src/manifest.ts +31 -0
- package/api/src/semantics/doors.ts +131 -0
- package/api/src/semantics/index.ts +8 -0
- package/api/src/semantics/shared.ts +1 -0
- package/api/src/semantics/states.ts +6 -0
- package/api/src/semantics/webfonts.ts +32 -0
- package/assets/spec/SOURCE.md +11 -0
- package/assets/spec/openapi.json +162 -0
- package/assets/spec/sources.json +1 -0
- package/assets/src/fetch.ts +14 -0
- package/assets/src/generated/surface.gen.json +1 -0
- package/assets/src/generated/ui.gen.json +1 -0
- package/assets/src/index.ts +3 -0
- package/assets/src/manifest.ts +19 -0
- package/assets/src/semantics/index.ts +10 -0
- package/assets/src/semantics/l.ts +4 -0
- package/assets/src/semantics/s.ts +4 -0
- package/assets/src/semantics/shared.ts +13 -0
- package/css/spec/SOURCE.md +15 -0
- package/css/spec/openapi.json +142 -0
- package/css/spec/sources.json +1 -0
- package/css/src/fetch.ts +14 -0
- package/css/src/generated/surface.gen.json +1 -0
- package/css/src/generated/ui.gen.json +1 -0
- package/css/src/index.ts +3 -0
- package/css/src/manifest.ts +19 -0
- package/css/src/semantics/css.ts +19 -0
- package/css/src/semantics/css2.ts +20 -0
- package/css/src/semantics/index.ts +10 -0
- package/css/src/semantics/shared.ts +1 -0
- package/dist/api/spec/SOURCE.md +17 -0
- package/dist/api/spec/discovery.json +306 -0
- package/dist/api/spec/openapi.json +647 -0
- package/dist/api/spec/sources.json +6 -0
- package/dist/api/src/fetch.d.ts +2 -0
- package/dist/api/src/fetch.js +15 -0
- package/dist/api/src/fetch.ts +16 -0
- package/dist/api/src/generated/surface.gen.json +1 -0
- package/dist/api/src/generated/ui.gen.json +1 -0
- package/dist/api/src/index.d.ts +2 -0
- package/dist/api/src/index.js +3 -0
- package/dist/api/src/index.ts +3 -0
- package/dist/api/src/manifest.d.ts +2 -0
- package/dist/api/src/manifest.js +29 -0
- package/dist/api/src/manifest.ts +31 -0
- package/dist/api/src/semantics/doors.d.ts +3 -0
- package/dist/api/src/semantics/doors.js +138 -0
- package/dist/api/src/semantics/doors.ts +131 -0
- package/dist/api/src/semantics/index.d.ts +2 -0
- package/dist/api/src/semantics/index.js +4 -0
- package/dist/api/src/semantics/index.ts +8 -0
- package/dist/api/src/semantics/shared.d.ts +1 -0
- package/dist/api/src/semantics/shared.js +1 -0
- package/dist/api/src/semantics/shared.ts +1 -0
- package/dist/api/src/semantics/states.d.ts +8 -0
- package/dist/api/src/semantics/states.js +6 -0
- package/dist/api/src/semantics/states.ts +6 -0
- package/dist/api/src/semantics/webfonts.d.ts +2 -0
- package/dist/api/src/semantics/webfonts.js +34 -0
- package/dist/api/src/semantics/webfonts.ts +32 -0
- package/dist/assets/spec/SOURCE.md +11 -0
- package/dist/assets/spec/openapi.json +162 -0
- package/dist/assets/spec/sources.json +1 -0
- package/dist/assets/src/fetch.d.ts +2 -0
- package/dist/assets/src/fetch.js +13 -0
- package/dist/assets/src/fetch.ts +14 -0
- package/dist/assets/src/generated/surface.gen.json +1 -0
- package/dist/assets/src/generated/ui.gen.json +1 -0
- package/dist/assets/src/index.d.ts +2 -0
- package/dist/assets/src/index.js +3 -0
- package/dist/assets/src/index.ts +3 -0
- package/dist/assets/src/manifest.d.ts +2 -0
- package/dist/assets/src/manifest.js +17 -0
- package/dist/assets/src/manifest.ts +19 -0
- package/dist/assets/src/semantics/index.d.ts +2 -0
- package/dist/assets/src/semantics/index.js +6 -0
- package/dist/assets/src/semantics/index.ts +10 -0
- package/dist/assets/src/semantics/l.d.ts +2 -0
- package/dist/assets/src/semantics/l.js +3 -0
- package/dist/assets/src/semantics/l.ts +4 -0
- package/dist/assets/src/semantics/s.d.ts +2 -0
- package/dist/assets/src/semantics/s.js +3 -0
- package/dist/assets/src/semantics/s.ts +4 -0
- package/dist/assets/src/semantics/shared.d.ts +2 -0
- package/dist/assets/src/semantics/shared.js +13 -0
- package/dist/assets/src/semantics/shared.ts +13 -0
- package/dist/css/spec/SOURCE.md +15 -0
- package/dist/css/spec/openapi.json +142 -0
- package/dist/css/spec/sources.json +1 -0
- package/dist/css/src/fetch.d.ts +2 -0
- package/dist/css/src/fetch.js +13 -0
- package/dist/css/src/fetch.ts +14 -0
- package/dist/css/src/generated/surface.gen.json +1 -0
- package/dist/css/src/generated/ui.gen.json +1 -0
- package/dist/css/src/index.d.ts +2 -0
- package/dist/css/src/index.js +3 -0
- package/dist/css/src/index.ts +3 -0
- package/dist/css/src/manifest.d.ts +2 -0
- package/dist/css/src/manifest.js +16 -0
- package/dist/css/src/manifest.ts +19 -0
- package/dist/css/src/semantics/css.d.ts +2 -0
- package/dist/css/src/semantics/css.js +19 -0
- package/dist/css/src/semantics/css.ts +19 -0
- package/dist/css/src/semantics/css2.d.ts +2 -0
- package/dist/css/src/semantics/css2.js +21 -0
- package/dist/css/src/semantics/css2.ts +20 -0
- package/dist/css/src/semantics/index.d.ts +2 -0
- package/dist/css/src/semantics/index.js +6 -0
- package/dist/css/src/semantics/index.ts +10 -0
- package/dist/css/src/semantics/shared.d.ts +1 -0
- package/dist/css/src/semantics/shared.js +1 -0
- package/dist/css/src/semantics/shared.ts +1 -0
- package/dist/journeys/customer-life.json +463 -0
- package/dist/journeys/customer-life.outline.md +24 -0
- package/dist/journeys/customer-life.outline.verdict.json +82 -0
- package/dist/journeys/customer-life.verdict.json +149 -0
- package/dist/journeys/decisions.json +54 -0
- package/dist/journeys/demand.json +67 -0
- package/dist/journeys/first-use.json +20 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +21 -0
- package/dist/src/fetch.d.ts +2 -0
- package/dist/src/fetch.js +10 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.js +15 -0
- package/dist/src/manifest.d.ts +2 -0
- package/dist/src/manifest.js +25 -0
- package/dist/src/semantics/seed.d.ts +2 -0
- package/dist/src/semantics/seed.js +141 -0
- package/dist/src/semantics/shared.d.ts +9 -0
- package/dist/src/semantics/shared.js +23 -0
- package/dist/src/server.d.ts +7 -0
- package/dist/src/server.js +7 -0
- package/dist/vendor/Inter-OFL.txt +93 -0
- package/dist/vendor/OFL.txt +94 -0
- package/dist/vendor/SOURCE.md +33 -0
- package/dist/vendor/antic.json +93 -0
- package/dist/vendor/inputs.json +460 -0
- package/dist/vendor/inter.json +44 -0
- package/dist/vendor/noto-sans-sc-text.json +24 -0
- package/generated/pack-facts.json +65 -0
- package/journeys/customer-life.json +463 -0
- package/journeys/customer-life.outline.md +24 -0
- package/journeys/customer-life.outline.verdict.json +82 -0
- package/journeys/customer-life.verdict.json +149 -0
- package/journeys/decisions.json +54 -0
- package/journeys/demand.json +67 -0
- package/journeys/first-use.json +20 -0
- package/package.json +41 -4
- package/src/cli.ts +22 -0
- package/src/fetch.ts +11 -0
- package/src/index.ts +17 -0
- package/src/manifest.ts +27 -0
- package/src/semantics/seed.ts +143 -0
- package/src/semantics/shared.ts +25 -0
- package/src/server.ts +8 -0
- package/vendor/Inter-OFL.txt +93 -0
- package/vendor/OFL.txt +94 -0
- package/vendor/SOURCE.md +33 -0
- package/vendor/antic.json +93 -0
- package/vendor/inputs.json +460 -0
- package/vendor/inter.json +44 -0
- 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,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,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';
|