@escape-game-over/atlas 0.1.115 → 0.1.117

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 (62) hide show
  1. package/README.md +1 -1
  2. package/docs/NOT-BUILT.md +2 -2
  3. package/package.json +2 -2
  4. package/src/analytics/ids.ts +1 -13
  5. package/src/analytics/index.ts +18 -18
  6. package/src/analytics/storage.ts +34 -39
  7. package/src/analytics/vendor-settings.ts +162 -0
  8. package/src/astro/axon-event.ts +2 -4
  9. package/src/astro/axon-pixel.ts +3 -6
  10. package/src/astro/clarity-event.ts +2 -4
  11. package/src/astro/clarity.ts +3 -6
  12. package/src/astro/consent.ts +3 -6
  13. package/src/astro/drip-event.ts +2 -4
  14. package/src/astro/drip.ts +2 -7
  15. package/src/astro/escape-navigator-consent.ts +2 -6
  16. package/src/astro/escapeall-calendar.ts +2 -5
  17. package/src/astro/google-event.ts +3 -7
  18. package/src/astro/google-map.ts +3 -5
  19. package/src/astro/images.ts +12 -26
  20. package/src/astro/index.ts +2 -9
  21. package/src/astro/meta-event.ts +2 -4
  22. package/src/astro/meta-pixel.ts +4 -8
  23. package/src/astro/public-files.ts +11 -52
  24. package/src/astro/site-routes.ts +11 -55
  25. package/src/astro/snap-event.ts +2 -4
  26. package/src/astro/snap-pixel.ts +3 -6
  27. package/src/astro/tiktok-event.ts +2 -4
  28. package/src/astro/tiktok-pixel.ts +70 -39
  29. package/src/astro/umami-event.ts +2 -6
  30. package/src/astro/vendors.ts +64 -0
  31. package/src/config.ts +8 -17
  32. package/src/content/rich.ts +15 -18
  33. package/src/i18n/catalog.ts +20 -1
  34. package/src/i18n/define.ts +0 -5
  35. package/src/i18n/translate.ts +9 -48
  36. package/src/index.ts +24 -166
  37. package/src/jsonld/article.ts +7 -17
  38. package/src/jsonld/business.ts +27 -28
  39. package/src/jsonld/creative-work.ts +8 -20
  40. package/src/jsonld/node.ts +37 -7
  41. package/src/jsonld/organization.ts +21 -30
  42. package/src/jsonld/place.ts +2 -6
  43. package/src/jsonld/product.ts +16 -22
  44. package/src/jsonld/service.ts +21 -37
  45. package/src/jsonld/video.ts +4 -8
  46. package/src/jsonld/website.ts +3 -5
  47. package/src/meta/content.ts +14 -66
  48. package/src/meta/index.ts +10 -32
  49. package/src/project.ts +4 -18
  50. package/src/routes/define.ts +0 -13
  51. package/src/routes/family.ts +135 -3
  52. package/src/site/api.ts +1 -21
  53. package/src/site/create.ts +17 -26
  54. package/src/site/define.ts +13 -9
  55. package/src/site/page.ts +1 -10
  56. package/src/warn.ts +6 -6
  57. package/src/analytics/axon-pixel.ts +0 -24
  58. package/src/analytics/clarity.ts +0 -29
  59. package/src/analytics/drip.ts +0 -20
  60. package/src/analytics/meta-pixel.ts +0 -29
  61. package/src/analytics/snap-pixel.ts +0 -28
  62. package/src/analytics/tiktok-pixel.ts +0 -29
@@ -0,0 +1,64 @@
1
+ import type {
2
+ CONSENT_UPDATE_GLOBAL,
3
+ GOOGLE_EVENT_GLOBAL,
4
+ GoogleEventSink,
5
+ } from "../analytics/google.ts";
6
+ import type { Axon } from "./axon-pixel.ts";
7
+ import type { Clarity } from "./clarity.ts";
8
+ import type { ConsentChoices } from "./consent.ts";
9
+ import type { Fbq } from "./meta-pixel.ts";
10
+ import type { Snaptr } from "./snap-pixel.ts";
11
+ import type { Ttq } from "./tiktok-pixel.ts";
12
+
13
+ /** The callback the Maps API calls once it has loaded: `?callback=` names it. */
14
+ export const GOOGLE_MAPS_CALLBACK = "__atlasGoogleMaps";
15
+
16
+ /**
17
+ * Every global Atlas's scripts read or define: the vendors' own, and the ones
18
+ * Atlas's head script leaves for its modules.
19
+ *
20
+ * Each is optional, since a vendor's snippet defines it only once it runs,
21
+ * and a blocker can stop that. A file reads them through `vendors()` rather
22
+ * than casting `window` at each site.
23
+ *
24
+ * Not a `declare global`: that would put `window.fbq` in every app's types,
25
+ * on sites without Meta too. These stay Atlas's.
26
+ */
27
+ interface Vendors {
28
+ fbq?: Fbq;
29
+ _fbq?: Fbq;
30
+ ttq?: Ttq;
31
+ TiktokAnalyticsObject?: string;
32
+ snaptr?: Snaptr;
33
+ axon?: Axon;
34
+ clarity?: Clarity;
35
+ _dcq?: unknown[][];
36
+ _dcs?: { account?: string };
37
+ umami?: { track(event: string, data?: object): void };
38
+ EscapeNavigator?: {
39
+ __pendingConsent?: { analytics: boolean; ads: boolean };
40
+ setConsent?: (consent: { analytics: boolean; ads: boolean }) => void;
41
+ };
42
+ // Its script builds selectors by appending to the one it is given, so the
43
+ // calendar is named by its id, not handed over as an element.
44
+ GetBookingCalendra?: (
45
+ selector: string,
46
+ settings: Record<string, unknown>
47
+ ) => void;
48
+ [GOOGLE_MAPS_CALLBACK]?: () => void;
49
+ }
50
+
51
+ /** Atlas's head script's, under the names it is emitted with. */
52
+ type HeadGlobals = {
53
+ [Name in typeof CONSENT_UPDATE_GLOBAL]?: (choices: ConsentChoices) => void;
54
+ } & {
55
+ [Name in typeof GOOGLE_EVENT_GLOBAL]?: GoogleEventSink;
56
+ };
57
+
58
+ /**
59
+ * `window`, typed with the globals above. A function, not a constant, so a
60
+ * module that imports it touches `window` only when it runs in a browser.
61
+ */
62
+ export function vendors(): Window & Vendors & HeadGlobals {
63
+ return window;
64
+ }
package/src/config.ts CHANGED
@@ -173,15 +173,6 @@ export function defineSiteConfig<
173
173
  return config;
174
174
  }
175
175
 
176
- /**
177
- * What a project may restate about a locale.
178
- *
179
- * Only the label: writing direction is a fact about the script a language is
180
- * written in, not a choice a deployment makes, so it is derived from the tag.
181
- * The label is the one part that is a matter of taste.
182
- */
183
- export type LocaleMetaOverride = Pick<LocaleMeta, "label">;
184
-
185
176
  /**
186
177
  * Editor-facing error for a locale this site does not declare at all.
187
178
  *
@@ -199,27 +190,27 @@ export interface LocaleNotEnabled<L extends string> {
199
190
  }
200
191
 
201
192
  /**
202
- * Applies a project's overrides and derives the tag fields from the key.
193
+ * Each published locale's label, the project's where it gives one, with the
194
+ * tag fields derived from its key.
203
195
  *
204
196
  * The locale key is the language tag, and `ogLocale` is that tag with `-`
205
197
  * swapped for `_` — Open Graph writes `en_US` where BCP 47 writes `en-US`.
206
198
  * `dir` comes from the tag's script, so `ar-EG` and `az-Arab-IR` are
207
199
  * right-to-left and `az-AZ` is not.
208
200
  */
209
- export function mergeLocaleMeta<L extends string>(
201
+ export function resolveLocaleMeta<L extends string>(
210
202
  base: Readonly<Record<L, LocaleMeta>>,
211
- overrides: Readonly<Partial<Record<L, LocaleMetaOverride>>> | undefined,
212
- locales: readonly L[]
203
+ locales: readonly L[],
204
+ labels: Readonly<Partial<Record<L, string>>>
213
205
  ): Readonly<Record<L, ResolvedLocaleMeta>> {
214
206
  const merged: Record<string, ResolvedLocaleMeta> = {};
215
207
  for (const locale of locales) {
216
- const defaults = base[locale];
217
- if (defaults === undefined) {
208
+ const meta = base[locale];
209
+ if (meta === undefined) {
218
210
  throw new Error(`No locale metadata for "${locale}".`);
219
211
  }
220
- const meta = { ...defaults, ...overrides?.[locale] };
221
212
  merged[locale] = {
222
- label: meta.label,
213
+ label: labels[locale] ?? meta.label,
223
214
  dir: writingDirection(locale),
224
215
  htmlLang: locale,
225
216
  ogLocale: locale.replace(/-/g, "_"),
@@ -61,8 +61,8 @@ export type Span =
61
61
  /**
62
62
  * A link, in the three shapes a destination actually comes in.
63
63
  *
64
- * **A union rather than an optional `url` and an `external` flag**, for the
65
- * reason `PageKind` is one: those two fields could disagree, and `external:
64
+ * **A union rather than an optional `url` and an `external` flag**: those
65
+ * two fields could disagree, and `external:
66
66
  * true` with no absolute URL is a state that means nothing and would still
67
67
  * type-check. Here the discriminant *is* the answer — a consumer that needs
68
68
  * an absolute URL narrows on `to` and gets one, or is told plainly that this
@@ -297,16 +297,15 @@ export function createRichText<
297
297
  ): RichTextFor<Catalog, RouteId, Links, Values> {
298
298
  const { catalog, locale, link, origin, links, values } = options;
299
299
 
300
- return <K extends StringKeys<Catalog>>(
301
- ...args: RichArgsOf<Catalog, K, RouteId, Links, Values>
300
+ // Untyped inside: the return type is what callers see, keys and params
301
+ // checked. Placeholder values and link targets are both strings once here —
302
+ // the distinction they are worth making is entirely a compile-time one.
303
+ return (
304
+ key: string,
305
+ params?: Readonly<Record<string, string>>
302
306
  ): RichText => {
303
- // The conditional tuple cannot be destructured directly; the runtime
304
- // shape is always `[key]` or `[key, params]`. As in `createTranslate`.
305
- // Placeholder values and link targets are both strings once here — the
306
- // distinction they are worth making is entirely a compile-time one.
307
- const [key, params] = args as [K, Readonly<Record<string, string>>?];
308
- const at = `Message "${String(key)}" (${locale})`;
309
- const template = lookupTemplate(catalog, locale, String(key));
307
+ const at = `Message "${key}" (${locale})`;
308
+ const template = lookupTemplate(catalog, locale, key);
310
309
 
311
310
  return parseMarks(template, at).map((span) =>
312
311
  resolve(span, at, params, { links, values }, link, origin)
@@ -379,7 +378,7 @@ function fill(
379
378
  * The destination a slot was filled with.
380
379
  *
381
380
  * `Object.hasOwn` rather than reading the index straight, for the reason
382
- * `createRawTranslate` uses it: `__proto__` is a legal slot name by `SLOT`, so
381
+ * `createTranslate` uses it: `__proto__` is a legal slot name by `SLOT`, so
383
382
  * a plain object would answer with `Object.prototype` — not `undefined`, and so
384
383
  * not caught below.
385
384
  *
@@ -620,12 +619,10 @@ export function createPlainText<
620
619
  ): PlainTextFor<Catalog, Values> {
621
620
  const { catalog, locale, values } = options;
622
621
 
623
- return <K extends StringKeys<Catalog>>(
624
- ...args: TranslateArgsOf<Catalog, K, Values>
625
- ): string => {
626
- const [key, params] = args as [K, Readonly<Record<string, string>>?];
627
- const at = `Message "${String(key)}" (${locale})`;
628
- const template = lookupTemplate(catalog, locale, String(key));
622
+ // Untyped inside, as `rich()`: the return type is what callers see.
623
+ return (key: string, params?: Readonly<Record<string, string>>): string => {
624
+ const at = `Message "${key}" (${locale})`;
625
+ const template = lookupTemplate(catalog, locale, key);
629
626
 
630
627
  return collapse(
631
628
  parseMarks(template, at).map((span) =>
@@ -29,6 +29,8 @@ export interface ProjectCatalog<Base, Published extends string, Override, Add> {
29
29
  readonly override: Override;
30
30
  /** Messages only this project has. */
31
31
  readonly add: Add;
32
+ /** The project's names for its languages, where the site's do not fit. */
33
+ readonly labels: Readonly<Partial<Record<Published, string>>>;
32
34
  }
33
35
 
34
36
  /**
@@ -99,7 +101,8 @@ export type OverrideChecks<Base, Published extends string, O> = NoExcessKeys<
99
101
  * - `override` keys exist in the base catalog, keep its `{placeholders}` and
100
102
  * `[marks]`, and are written only for published locales;
101
103
  * - `add` keys are new to the base catalog, written for exactly the published
102
- * locales, with the same `{placeholders}` and `[marks]` in each.
104
+ * locales, with the same `{placeholders}` and `[marks]` in each;
105
+ * - `labels` are for published locales.
103
106
  */
104
107
  export function defineCatalog<
105
108
  const C extends SiteConfigShape,
@@ -119,6 +122,13 @@ export function defineCatalog<
119
122
  readonly override: Override &
120
123
  ValidateOverrideCatalog<Override, Base, LocalesOf<C>>;
121
124
  readonly add?: Add & ValidateAdditions<Add, Base, Published>;
125
+ /**
126
+ * A language's name in the language switcher, replacing the site's
127
+ * label for that locale on this project only. `NoInfer`, so a label
128
+ * cannot widen the published locales: a locale written here that
129
+ * `locales` lacks is an error on its own line.
130
+ */
131
+ readonly labels?: Readonly<Partial<Record<NoInfer<Published>, string>>>;
122
132
  }
123
133
  ): ProjectCatalog<Base, Published, Override, Add> {
124
134
  // Checked at runtime as well as in the type: an Astro config is evaluated
@@ -144,10 +154,19 @@ export function defineCatalog<
144
154
  );
145
155
  }
146
156
  }
157
+ const labels = own.labels ?? {};
158
+ for (const locale of Object.keys(labels)) {
159
+ if (!own.locales.some((published) => published === locale)) {
160
+ throw new Error(
161
+ `labels: "${locale}" is not among this catalog's locales, so its label would never be shown.`
162
+ );
163
+ }
164
+ }
147
165
  return {
148
166
  base,
149
167
  locales: own.locales,
150
168
  override: own.override,
151
169
  add: add as Add,
170
+ labels,
152
171
  };
153
172
  }
@@ -54,11 +54,6 @@ export type OverrideCatalog<L extends string> = Readonly<
54
54
  Record<string, OverrideEntry<L>>
55
55
  >;
56
56
 
57
- /** The locale union a catalog covers, read back off its own entries. */
58
- export type LocalesOfCatalog<Catalog> = StringKeys<
59
- Catalog[StringKeys<Catalog>]
60
- >;
61
-
62
57
  type SelfConsistent<E, K> = [MismatchedLocales<E, EntryTokens<E>>] extends [
63
58
  never,
64
59
  ]
@@ -78,13 +78,7 @@ export type MergedCatalog<L extends string> = Readonly<
78
78
  Record<string, Readonly<Record<L, string>>>
79
79
  >;
80
80
 
81
- /** Untyped translation lookup, wrapped below in a key-aware signature. */
82
- export type RawTranslate = (
83
- key: string,
84
- params?: Readonly<Record<string, string>>
85
- ) => string;
86
-
87
- export interface RawTranslateOptions<L extends string> {
81
+ export interface TranslateOptions<L extends string> {
88
82
  readonly catalog: MergedCatalog<L>;
89
83
  readonly locale: L;
90
84
  /**
@@ -120,7 +114,11 @@ export function lookupTemplate<L extends string>(
120
114
  }
121
115
 
122
116
  /**
123
- * Builds the runtime half of `t()`.
117
+ * Builds `t()`.
118
+ *
119
+ * Untyped: `site.translate` declares the key-aware `TranslateFor` as what it
120
+ * returns, and this function fits that type with no cast. The key and params
121
+ * checks live in the type; what fails at runtime fails here.
124
122
  *
125
123
  * Every failure here is a build-time failure by design: a static site should not
126
124
  * ship a page with a literal `{name}` in the markup, so a missing message or an
@@ -132,9 +130,9 @@ export function lookupTemplate<L extends string>(
132
130
  * failure wearing different brackets. `rich()` reads those, and `plain()` gives
133
131
  * back the sentence without them.
134
132
  */
135
- export function createRawTranslate<L extends string>(
136
- options: RawTranslateOptions<L>
137
- ): RawTranslate {
133
+ export function createTranslate<L extends string>(
134
+ options: TranslateOptions<L>
135
+ ): (key: string, params?: Readonly<Record<string, string>>) => string {
138
136
  const { catalog, locale, values } = options;
139
137
 
140
138
  return (key, params) => {
@@ -211,40 +209,3 @@ export type TranslateFor<Catalog, Bound extends string = never> = <
211
209
  >(
212
210
  ...args: TranslateArgsOf<Catalog, K, Bound>
213
211
  ) => string;
214
-
215
- /**
216
- * Builds the typed `t()` factory for one catalog type.
217
- *
218
- * Curried for the usual reason — `Catalog` must be supplied explicitly while the
219
- * locale stays inferred, and TypeScript has no partial type-argument inference.
220
- * `Catalog` is the *base* catalog's type (it carries the literal strings the
221
- * placeholders are read from); the value passed in is the merged runtime
222
- * catalog, which only needs to be indexable by key and locale.
223
- */
224
- export function createTranslateFactory<Catalog, L extends string>() {
225
- return function createTranslate<Bound extends string = never>(
226
- catalog: MergedCatalog<L>,
227
- locale: L,
228
- values?: Readonly<Record<Bound, string>>
229
- ): TranslateFor<Catalog, Bound> {
230
- const raw = createRawTranslate({
231
- catalog,
232
- locale,
233
- ...(values === undefined ? {} : { values }),
234
- });
235
-
236
- function t<K extends StringKeys<Catalog>>(
237
- ...args: TranslateArgsOf<Catalog, K, Bound>
238
- ): string {
239
- // The conditional tuple cannot be destructured directly; the runtime
240
- // shape is always `[key]` or `[key, params]`.
241
- const [key, params] = args as [
242
- K,
243
- Readonly<Record<string, string>>?,
244
- ];
245
- return raw(key, params);
246
- }
247
-
248
- return t;
249
- };
250
- }
package/src/index.ts CHANGED
@@ -18,19 +18,14 @@ export {
18
18
  CONSENT_CATEGORIES,
19
19
  CONSENT_MONTHS,
20
20
  type ConsentCategory,
21
- type ConsentChoice,
22
- type ConsentChoices,
23
21
  } from "./analytics/consent-storage.ts";
24
22
  export {
25
23
  type AnalyticsSettings,
26
- type AnalyticsTags,
27
24
  type AxonPixelSettings,
28
25
  type ClaritySettings,
29
- CONSENT_UPDATE_GLOBAL,
30
26
  type ConsentDefaults,
31
27
  type ConsentState,
32
28
  consentRequired,
33
- consentVendors,
34
29
  type DripSettings,
35
30
  type GoogleSettings,
36
31
  type GoogleTagId,
@@ -45,74 +40,36 @@ export {
45
40
  type Uuid,
46
41
  } from "./analytics/index.ts";
47
42
  export {
48
- type AtlasStoredId,
49
- compareStoredItems,
50
- type Lifetime,
51
43
  STORAGE_VENDOR_NAMES,
52
- type StorageVendor,
53
44
  type StoredId,
54
45
  type StoredItem,
55
46
  type StoredItemsOptions,
56
47
  storedItems,
57
- withPurposes,
58
48
  } from "./analytics/storage.ts";
59
- export {
60
- checkEscapeNavigator,
61
- ESCAPE_NAVIGATOR_LOADER,
62
- type EscapeNavigatorVars,
63
- type EscapeNavigatorWidget,
64
- escapeNavigatorLanguage,
65
- } from "./booking/escape-navigator.ts";
66
- export {
67
- checkEscapeAll,
68
- ESCAPEALL_LANGUAGES,
69
- type EscapeAllLanguage,
70
- type EscapeAllVars,
71
- type EscapeAllWidget,
72
- escapeAllAssets,
73
- escapeAllLanguage,
74
- } from "./booking/escapeall.ts";
75
- export {
76
- checkFourEscape,
77
- FOUR_ESCAPE_LANGUAGES,
78
- FOUR_ESCAPE_SCRIPT,
79
- FOUR_ESCAPE_STYLESHEET,
80
- type FourEscapeLanguage,
81
- type FourEscapeVars,
82
- type FourEscapeWidget,
83
- fourEscapeLanguage,
84
- fourEscapeSettings,
85
- fourEscapeStyle,
86
- } from "./booking/four-escape.ts";
49
+ export type { EscapeNavigatorWidget } from "./booking/escape-navigator.ts";
87
50
  export type {
88
- BookingVendor,
89
- BookingVendorVars,
90
- BookingWidget,
91
- BookingWidgetVars,
92
- } from "./booking/widget.ts";
51
+ EscapeAllLanguage,
52
+ EscapeAllWidget,
53
+ } from "./booking/escapeall.ts";
93
54
  export type {
94
- LanguageTag,
95
- LocaleMeta,
96
- LocalesOf,
97
- ResolvedLocaleMeta,
98
- RoutingConfig,
99
- SiteConfigShape,
100
- } from "./config.ts";
55
+ FourEscapeLanguage,
56
+ FourEscapeVars,
57
+ FourEscapeWidget,
58
+ } from "./booking/four-escape.ts";
59
+ export type { BookingVendor, BookingWidget } from "./booking/widget.ts";
60
+ export type { LanguageTag, LocaleMeta, LocalesOf } from "./config.ts";
101
61
  export {
102
62
  type AddressFormatOptions,
103
63
  type AddressLineOptions,
104
64
  addressLine,
105
65
  addressLines,
106
- assertCoordinates,
107
66
  type CallingCode,
108
67
  type Coordinates,
109
68
  type CountryCode,
110
69
  type E164,
111
70
  type EmailAddress,
112
71
  e164,
113
- e164Of,
114
72
  formatPhone,
115
- isEmailAddress,
116
73
  type MailtoUrl,
117
74
  mailtoHref,
118
75
  type PhoneNumber,
@@ -132,44 +89,26 @@ export {
132
89
  // them has a second `rich()` that is not bound to the site's route table — so
133
90
  // a slot filled with a route id resolves against nothing there. `site.rich(locale)` is
134
91
  // the only way in, and `Span` is what a renderer switches on.
135
- export {
136
- html,
137
- type LinkTarget,
138
- type MessageBindings,
139
- type PlainTextFor,
140
- plain,
141
- type RichText,
142
- type RichTextFor,
143
- type Span,
144
- } from "./content/index.ts";
145
- export {
146
- COUNTRY_CODES,
147
- countriesFor,
148
- type NamedCountry,
149
- } from "./countries.ts";
92
+ export { html, plain, type RichText, type Span } from "./content/index.ts";
93
+ export { countriesFor, type NamedCountry } from "./countries.ts";
150
94
  // `quantitiesOf`, `quantityRange` and `isContiguous` are deliberately not here.
151
95
  // They are how lib decides between "2–6" and "2, 4, 6", and a consumer holding
152
96
  // them writes that decision a second time — which is how `llms.txt` came to
153
97
  // advertise a range for a room that skips sizes. `formatQuantities` answers it
154
98
  // for prose and `quantitiesFor` for structured data; both read the same tiers.
155
99
  export type { CurrencyCode } from "./currency.ts";
156
- export type { GeneratedFile } from "./file.ts";
157
100
  export type { PublicFilePath, PublicFileRegistry } from "./files.ts";
158
101
  export type { Font, Fonts } from "./fonts.ts";
159
102
  export {
160
- assertHours,
161
103
  type DayHours,
162
104
  type FormattedHours,
163
105
  formatHours,
164
- formatTime,
165
- groupHours,
166
106
  type HourCycle,
167
107
  type HoursFormat,
168
108
  type HoursGroup,
169
109
  type HoursSentenceFormat,
170
110
  hoursSentence,
171
111
  type OpenStatus,
172
- openStatus,
173
112
  type TimeFormat,
174
113
  type TimeOfDay,
175
114
  type TimeRange,
@@ -177,42 +116,18 @@ export {
177
116
  type Weekday,
178
117
  type WeeklyHours,
179
118
  } from "./hours.ts";
180
- export type {
181
- CatalogKey,
182
- MessagesOf,
183
- ProjectCatalog,
184
- PublishedOf,
185
- } from "./i18n/catalog.ts";
186
- export type {
187
- BaseCatalog,
188
- CatalogCovers,
189
- MessageOverrides,
190
- OverrideCatalog,
191
- } from "./i18n/define.ts";
192
- export type {
193
- EntryPlaceholders,
194
- Placeholders,
195
- } from "./i18n/placeholders.ts";
196
- export type {
197
- MessageParamsOf,
198
- TranslateArgsOf,
199
- TranslateFor,
200
- } from "./i18n/translate.ts";
119
+ export type { CatalogKey } from "./i18n/catalog.ts";
120
+ export type { CatalogCovers, MessageOverrides } from "./i18n/define.ts";
121
+ export type { MessageParamsOf } from "./i18n/translate.ts";
201
122
  export type { ImageAsset } from "./image.ts";
202
123
  export {
203
- type ArticleInput,
204
- article,
205
- type BreadcrumbStep,
206
124
  type BusinessId,
207
- breadcrumbList,
208
125
  businessId,
209
- type CatalogEntry,
210
126
  type CreativeWorkInput,
211
127
  type CreativeWorkProperty,
212
128
  creativeWork,
213
129
  type FaqEntry,
214
130
  faqPage,
215
- geoCoordinates,
216
131
  type JsonLdNode,
217
132
  type LocalBusinessInput,
218
133
  localBusiness,
@@ -220,45 +135,30 @@ export {
220
135
  type OrganizationId,
221
136
  type OrganizationInput,
222
137
  offerCatalog,
223
- openingHours,
224
138
  organization,
225
139
  organizationId,
226
140
  type ProductInput,
227
- postalAddress,
228
141
  product,
229
142
  quantitativeValue,
230
143
  quantitiesFor,
231
144
  type ServiceArea,
232
145
  type ServiceId,
233
146
  type ServiceInput,
234
- serializeJsonLd,
235
147
  service,
236
- serviceId,
237
148
  type VideoInput,
238
149
  type VideoSource,
239
150
  videoObject,
240
151
  type WebsiteId,
241
152
  type WebsiteInput,
242
153
  website,
243
- websiteId,
244
154
  } from "./jsonld/index.ts";
245
- export {
246
- buildLlms,
247
- type LlmsConfig,
248
- type LlmsItem,
249
- type LlmsSection,
250
- } from "./llms.ts";
155
+ export type { LlmsSection } from "./llms.ts";
251
156
  export { googleMapsUrl, type MapPlace, type MapsTarget } from "./map.ts";
252
157
  export {
253
158
  type ArticleContent,
254
- buildMeta,
255
- buildNotFoundMeta,
256
159
  fitDescription,
257
160
  fitTitle,
258
161
  type MetaContent,
259
- type MetaTag,
260
- type OpenGraphType,
261
- type PageKind,
262
162
  type RobotsPolicy,
263
163
  type ShareImage,
264
164
  type SiteVerification,
@@ -267,8 +167,6 @@ export {
267
167
  type AudiencePrice,
268
168
  type AudienceTier,
269
169
  amountAt,
270
- assertAudiences,
271
- assertPriceTiers,
272
170
  formatQuantities,
273
171
  type Price,
274
172
  type PriceTier,
@@ -284,70 +182,30 @@ export {
284
182
  type PriceFormat,
285
183
  } from "./price-format.ts";
286
184
  export type {
287
- DefinedProject,
288
- ProjectInput,
289
- ProjectRouteId,
290
- } from "./project.ts";
291
- export {
292
- buildCloudflareRedirects,
293
- buildRedirects,
294
- type CloudflareRedirectsOptions,
295
- type ExternalUrl,
296
- type ProjectRedirects,
297
- type RedirectKind,
298
- type RedirectRule,
299
- type RedirectStatus,
300
- type RedirectTarget,
301
- type ResolvedRedirect,
302
- type SitePath,
303
- type ValidateRedirectTargets,
185
+ ProjectRedirects,
186
+ RedirectKind,
187
+ RedirectRule,
188
+ RedirectTarget,
189
+ SitePath,
304
190
  } from "./redirects.ts";
305
- export type { RobotsConfig, RobotsGroup } from "./robots.ts";
306
- export type {
307
- ChangeFreq,
308
- EnabledRouteIdFor,
309
- RouteData,
310
- RouteOverride,
311
- RouteOverrides,
312
- RouteRegistry,
313
- RouteSitemap,
314
- } from "./routes/define.ts";
315
- export {
316
- enableRoutes,
317
- type FamilyMember,
318
- type FamilyMemberInput,
319
- type FamilyMemberSlugs,
320
- type FamilyOptions,
321
- familyGuard,
322
- familyMemberSlugs,
323
- type RouteIdsOf,
324
- } from "./routes/family.ts";
325
- export type { RouteEntry } from "./routes/resolve.ts";
191
+ export type { RouteFamily, RouteIdsOf } from "./routes/family.ts";
326
192
  export { defineSite } from "./site/define.ts";
327
193
  export type {
328
- Alternate,
329
194
  Crumb,
330
195
  LinkOptions,
331
196
  LlmsOptions,
332
- LocaleLink,
333
197
  PageContent,
334
198
  PageMeta,
335
199
  PageProps,
336
200
  PerRoute,
337
- Site,
338
- StaticPath,
339
201
  } from "./site/index.ts";
340
- export type { Sitemap, SitemapConfig } from "./sitemap.ts";
341
- export { TIME_ZONES, type TimeZone } from "./time-zones.ts";
342
- export type { IsoDate, Letter, NonEmpty, StringKeys } from "./types.ts";
202
+ export type { TimeZone } from "./time-zones.ts";
203
+ export type { IsoDate, NonEmpty, StringKeys } from "./types.ts";
343
204
  export {
344
205
  absoluteUrl,
345
- type Hash,
346
206
  type HttpsUrl,
347
- isHash,
348
207
  isHttpsUrl,
349
208
  isUrlPath,
350
209
  joinUrl,
351
- normalizeOrigin,
352
210
  type UrlPath,
353
211
  } from "./url.ts";