@madojs/mado 0.11.1 → 0.12.0

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 (219) hide show
  1. package/AGENTS.md +102 -25
  2. package/CHANGELOG.md +158 -1
  3. package/README.md +135 -172
  4. package/dist/src/component.d.ts +3 -2
  5. package/dist/src/component.js +98 -6
  6. package/dist/src/component.js.map +1 -1
  7. package/dist/src/css.js +34 -5
  8. package/dist/src/css.js.map +1 -1
  9. package/dist/src/head.d.ts +6 -6
  10. package/dist/src/head.js +6 -6
  11. package/dist/src/html/parser.d.ts +1 -1
  12. package/dist/src/html/parser.js +1 -1
  13. package/dist/src/html/template.js +24 -10
  14. package/dist/src/html/template.js.map +1 -1
  15. package/dist/src/index.d.ts +8 -4
  16. package/dist/src/index.js +13 -3
  17. package/dist/src/index.js.map +1 -1
  18. package/dist/src/page.d.ts +62 -28
  19. package/dist/src/page.js +5 -0
  20. package/dist/src/page.js.map +1 -1
  21. package/dist/src/resource.js +2 -1
  22. package/dist/src/resource.js.map +1 -1
  23. package/dist/src/router/base.d.ts +65 -0
  24. package/dist/src/router/base.js +168 -0
  25. package/dist/src/router/base.js.map +1 -0
  26. package/dist/src/router/manifest.js +75 -31
  27. package/dist/src/router/manifest.js.map +1 -1
  28. package/dist/src/router/match.d.ts +16 -2
  29. package/dist/src/router/match.js +41 -1
  30. package/dist/src/router/match.js.map +1 -1
  31. package/dist/src/router/navigation.js +58 -9
  32. package/dist/src/router/navigation.js.map +1 -1
  33. package/dist/src/static-runtime.d.ts +81 -0
  34. package/dist/src/static-runtime.js +209 -0
  35. package/dist/src/static-runtime.js.map +1 -0
  36. package/dist/src/vite/index.d.ts +31 -3
  37. package/dist/src/vite/index.js +49 -18
  38. package/dist/src/vite/index.js.map +1 -1
  39. package/docs/README.md +5 -8
  40. package/docs/architecture/adr/0001-browser-static-snapshots.md +132 -0
  41. package/docs/en/00-the-mado-way.md +1 -1
  42. package/docs/en/01-quickstart.md +183 -0
  43. package/docs/en/10-pages-and-components.md +271 -0
  44. package/docs/en/11-templates-and-signals.md +211 -0
  45. package/docs/en/12-routing.md +229 -0
  46. package/docs/en/13-data.md +225 -0
  47. package/docs/en/14-forms.md +244 -0
  48. package/docs/en/15-static-snapshots.md +181 -0
  49. package/docs/en/{10-app-architecture.md → 16-app-architecture.md} +53 -2
  50. package/docs/en/{13-deployment.md → 20-deployment.md} +59 -10
  51. package/docs/en/{14-testing.md → 22-testing.md} +6 -5
  52. package/docs/en/23-cookbook.md +292 -0
  53. package/docs/en/{18-api-freeze-map.md → 30-api-freeze-map.md} +12 -3
  54. package/docs/en/{20-v1-stability.md → 32-v1-stability.md} +3 -3
  55. package/docs/en/40-llm-guide.md +776 -0
  56. package/docs/en/{06-for-backenders.md → 41-for-backenders.md} +15 -16
  57. package/docs/en/{05-why-mado.md → 42-why-mado.md} +1 -1
  58. package/docs/en/README.md +97 -27
  59. package/docs/recipes/nginx/Containerfile +26 -0
  60. package/docs/recipes/nginx/nginx.conf +42 -0
  61. package/llms.txt +246 -211
  62. package/package.json +17 -10
  63. package/scripts/bake.mjs +4 -569
  64. package/scripts/cli/generate.mjs +55 -5
  65. package/scripts/cli/help.mjs +11 -5
  66. package/scripts/cli/index.mjs +20 -4
  67. package/scripts/cli/init.mjs +7 -2
  68. package/scripts/cli/release.mjs +20 -68
  69. package/scripts/docs-lint.mjs +170 -0
  70. package/scripts/package-smoke.mjs +67 -9
  71. package/scripts/preview.mjs +95 -6
  72. package/scripts/size-budget.mjs +5 -1
  73. package/scripts/static/browser.mjs +654 -0
  74. package/scripts/static/discover.mjs +281 -0
  75. package/scripts/static/output.mjs +141 -0
  76. package/scripts/static/serialize.mjs +212 -0
  77. package/scripts/static/server.mjs +167 -0
  78. package/scripts/static.mjs +191 -0
  79. package/starters/default/README.md +57 -55
  80. package/starters/default/package.json +3 -9
  81. package/starters/default/src/app.routes.ts +20 -33
  82. package/starters/default/src/components/feature-card.component.ts +40 -0
  83. package/starters/default/src/components/live-counter.component.ts +57 -0
  84. package/starters/default/src/content/guides.ts +55 -0
  85. package/starters/default/src/main.ts +9 -13
  86. package/starters/default/src/pages/app.page.ts +41 -0
  87. package/starters/default/src/pages/guide.page.ts +40 -0
  88. package/starters/default/src/pages/home.page.ts +49 -0
  89. package/starters/default/src/pages/not-found.page.ts +18 -0
  90. package/starters/default/src/styles/document.css +39 -0
  91. package/starters/default/src/styles/reset.css +37 -0
  92. package/starters/default/src/styles/tokens.css +30 -0
  93. package/starters/default/src/styles.d.ts +3 -1
  94. package/starters/default/src/vite-env.d.ts +1 -1
  95. package/starters/default/vite.config.ts +14 -1
  96. package/starters/modular/README.md +142 -0
  97. package/starters/modular/index.html +13 -0
  98. package/starters/modular/package.json +30 -0
  99. package/starters/modular/src/app.routes.ts +39 -0
  100. package/starters/{default → modular}/src/layouts/app-shell.layout.ts +8 -5
  101. package/starters/{default → modular}/src/layouts/auth-shell.layout.ts +3 -3
  102. package/starters/modular/src/main.ts +16 -0
  103. package/starters/{default → modular}/src/modules/billing/pages/invoices-list.page.ts +3 -3
  104. package/starters/{default → modular}/src/modules/home/home.page.ts +5 -7
  105. package/starters/modular/src/modules/home/not-found.page.ts +14 -0
  106. package/starters/modular/src/styles.d.ts +1 -0
  107. package/starters/modular/src/vite-env.d.ts +1 -0
  108. package/starters/modular/tsconfig.json +24 -0
  109. package/starters/modular/vite.config.ts +131 -0
  110. package/TODO.md +0 -79
  111. package/docs/en/01-routing.md +0 -152
  112. package/docs/en/02-project-layout.md +0 -124
  113. package/docs/en/03-static-bake.md +0 -249
  114. package/docs/en/04-ide-setup.md +0 -162
  115. package/docs/en/07-llm-pitfalls.md +0 -724
  116. package/docs/en/08-llm-zero-history-test.md +0 -56
  117. package/docs/en/09-shadow-vs-light-dom.md +0 -174
  118. package/docs/en/11-layouts.md +0 -113
  119. package/docs/en/12-auth-and-api.md +0 -124
  120. package/docs/en/16-bake-cookbook.md +0 -100
  121. package/docs/en/17-shadow-dom-forms.md +0 -192
  122. package/docs/fr/00-the-mado-way.md +0 -85
  123. package/docs/fr/01-routing.md +0 -120
  124. package/docs/fr/02-project-layout.md +0 -84
  125. package/docs/fr/03-static-bake.md +0 -289
  126. package/docs/fr/04-ide-setup.md +0 -162
  127. package/docs/fr/05-why-mado.md +0 -193
  128. package/docs/fr/06-for-backenders.md +0 -438
  129. package/docs/fr/07-llm-pitfalls.md +0 -625
  130. package/docs/fr/08-llm-zero-history-test.md +0 -38
  131. package/docs/fr/09-shadow-vs-light-dom.md +0 -65
  132. package/docs/fr/10-app-architecture.md +0 -138
  133. package/docs/fr/11-layouts.md +0 -47
  134. package/docs/fr/12-auth-and-api.md +0 -76
  135. package/docs/fr/13-deployment.md +0 -57
  136. package/docs/fr/14-testing.md +0 -41
  137. package/docs/fr/15-error-handling.md +0 -50
  138. package/docs/fr/16-bake-cookbook.md +0 -88
  139. package/docs/fr/17-shadow-dom-forms.md +0 -196
  140. package/docs/fr/18-api-freeze-map.md +0 -63
  141. package/docs/fr/19-reactivity-ordering.md +0 -97
  142. package/docs/fr/20-v1-stability.md +0 -88
  143. package/docs/fr/README.md +0 -27
  144. package/docs/ru/00-the-mado-way.md +0 -84
  145. package/docs/ru/01-routing.md +0 -119
  146. package/docs/ru/02-project-layout.md +0 -84
  147. package/docs/ru/03-static-bake.md +0 -250
  148. package/docs/ru/04-ide-setup.md +0 -144
  149. package/docs/ru/05-why-mado.md +0 -193
  150. package/docs/ru/06-for-backenders.md +0 -428
  151. package/docs/ru/07-llm-pitfalls.md +0 -624
  152. package/docs/ru/08-llm-zero-history-test.md +0 -57
  153. package/docs/ru/09-shadow-vs-light-dom.md +0 -63
  154. package/docs/ru/10-app-architecture.md +0 -152
  155. package/docs/ru/11-layouts.md +0 -47
  156. package/docs/ru/12-auth-and-api.md +0 -75
  157. package/docs/ru/13-deployment.md +0 -66
  158. package/docs/ru/14-testing.md +0 -50
  159. package/docs/ru/15-error-handling.md +0 -56
  160. package/docs/ru/16-bake-cookbook.md +0 -95
  161. package/docs/ru/17-shadow-dom-forms.md +0 -193
  162. package/docs/ru/18-api-freeze-map.md +0 -64
  163. package/docs/ru/19-reactivity-ordering.md +0 -95
  164. package/docs/ru/20-v1-stability.md +0 -82
  165. package/docs/ru/README.md +0 -25
  166. package/docs/uk/00-the-mado-way.md +0 -82
  167. package/docs/uk/01-routing.md +0 -76
  168. package/docs/uk/02-project-layout.md +0 -73
  169. package/docs/uk/03-static-bake.md +0 -48
  170. package/docs/uk/04-ide-setup.md +0 -26
  171. package/docs/uk/05-why-mado.md +0 -34
  172. package/docs/uk/06-for-backenders.md +0 -55
  173. package/docs/uk/07-llm-pitfalls.md +0 -145
  174. package/docs/uk/08-llm-zero-history-test.md +0 -34
  175. package/docs/uk/09-shadow-vs-light-dom.md +0 -58
  176. package/docs/uk/10-app-architecture.md +0 -97
  177. package/docs/uk/11-layouts.md +0 -47
  178. package/docs/uk/12-auth-and-api.md +0 -70
  179. package/docs/uk/13-deployment.md +0 -40
  180. package/docs/uk/14-testing.md +0 -34
  181. package/docs/uk/15-error-handling.md +0 -32
  182. package/docs/uk/16-bake-cookbook.md +0 -36
  183. package/docs/uk/17-shadow-dom-forms.md +0 -193
  184. package/docs/uk/18-api-freeze-map.md +0 -61
  185. package/docs/uk/19-reactivity-ordering.md +0 -95
  186. package/docs/uk/20-v1-stability.md +0 -83
  187. package/docs/uk/README.md +0 -27
  188. package/starters/default/src/modules/home/not-found.page.ts +0 -11
  189. /package/docs/en/{15-error-handling.md → 21-error-handling.md} +0 -0
  190. /package/docs/en/{19-reactivity-ordering.md → 31-reactivity-ordering.md} +0 -0
  191. /package/starters/{default → modular}/.editorconfig +0 -0
  192. /package/starters/{default → modular}/eslint.config.mjs +0 -0
  193. /package/starters/{default → modular}/public/favicon.svg +0 -0
  194. /package/starters/{default → modular}/src/modules/auth/_contracts/auth-api.types.ts +0 -0
  195. /package/starters/{default → modular}/src/modules/auth/auth.connector.ts +0 -0
  196. /package/starters/{default → modular}/src/modules/auth/auth.guard.ts +0 -0
  197. /package/starters/{default → modular}/src/modules/auth/auth.public.ts +0 -0
  198. /package/starters/{default → modular}/src/modules/auth/auth.routes.ts +0 -0
  199. /package/starters/{default → modular}/src/modules/auth/auth.service.ts +0 -0
  200. /package/starters/{default → modular}/src/modules/auth/auth.types.ts +0 -0
  201. /package/starters/{default → modular}/src/modules/auth/login.page.ts +0 -0
  202. /package/starters/{default → modular}/src/modules/billing/_contracts/stripe.types.ts +0 -0
  203. /package/starters/{default → modular}/src/modules/billing/api/stripe.connector.ts +0 -0
  204. /package/starters/{default → modular}/src/modules/billing/billing.public.ts +0 -0
  205. /package/starters/{default → modular}/src/modules/billing/billing.routes.ts +0 -0
  206. /package/starters/{default → modular}/src/modules/billing/billing.types.ts +0 -0
  207. /package/starters/{default → modular}/src/modules/billing/components/invoice-status-badge.component.ts +0 -0
  208. /package/starters/{default → modular}/src/modules/billing/data/invoices.resource.ts +0 -0
  209. /package/starters/{default → modular}/src/modules/billing/pages/invoice-detail.page.ts +0 -0
  210. /package/starters/{default → modular}/src/shared/http/http-client.ts +0 -0
  211. /package/starters/{default → modular}/src/shared/http/http-error.ts +0 -0
  212. /package/starters/{default → modular}/src/shared/http/interceptors.ts +0 -0
  213. /package/starters/{default → modular}/src/shared/lib/format-date.ts +0 -0
  214. /package/starters/{default → modular}/src/shared/styles/content.css +0 -0
  215. /package/starters/{default → modular}/src/shared/styles/reset.css +0 -0
  216. /package/starters/{default → modular}/src/shared/styles/shell.css +0 -0
  217. /package/starters/{default → modular}/src/shared/styles/tokens.css +0 -0
  218. /package/starters/{default → modular}/src/shared/ui/x-button.component.ts +0 -0
  219. /package/starters/{default → modular}/src/shared/ui/x-spinner.component.ts +0 -0
@@ -8,6 +8,7 @@
8
8
  import { signal } from "./../signal.js";
9
9
  import { html } from "../html/template.js";
10
10
  import { compile, matchRoute, } from "./match.js";
11
+ import { appBase, stripBase, withBase } from "./base.js";
11
12
  /**
12
13
  * Minimal History API router.
13
14
  *
@@ -30,7 +31,10 @@ export function router(routes, options = {}) {
30
31
  const useFocusManagement = options.focusManagement !== false;
31
32
  const compiled = Object.entries(routes).map(([p, h]) => compile(p, h));
32
33
  const fallback = compiled.find((r) => r.pattern === "*") ?? defaultFallback();
33
- const path = signal(location.pathname);
34
+ // Route pathname = browser pathname with the active Vite base stripped.
35
+ // The route matcher, route signal and any `path()` consumer always see
36
+ // base-free paths; `withBase()` re-adds it when we touch history.
37
+ const path = signal(stripBase(location.pathname));
34
38
  const cleanups = [];
35
39
  const scrollPositions = new Map();
36
40
  let currentScrollKey = locationKey();
@@ -55,7 +59,7 @@ export function router(routes, options = {}) {
55
59
  if (useScrollRestoration)
56
60
  saveScroll(scrollPositions, currentScrollKey);
57
61
  currentScrollKey = locationKey();
58
- path.set(location.pathname);
62
+ path.set(stripBase(location.pathname));
59
63
  if (useScrollRestoration)
60
64
  restoreScroll(scrollPositions, currentScrollKey);
61
65
  if (useFocusManagement)
@@ -87,8 +91,16 @@ export function router(routes, options = {}) {
87
91
  const url = new URL(a.href, location.href);
88
92
  if (url.origin !== location.origin)
89
93
  return;
94
+ // Foreign-base links escape SPA navigation entirely so the browser
95
+ // performs a real document load (avoids matching "/other/..." against
96
+ // routes registered under base "/mado/").
97
+ const b = appBase;
98
+ if (b !== "/" && !(url.pathname === b.slice(0, -1) || url.pathname.startsWith(b))) {
99
+ return;
100
+ }
90
101
  e.preventDefault();
91
- api.navigate(url.pathname + url.search + url.hash);
102
+ const routePath = stripBase(url.pathname);
103
+ api.navigate(routePath + url.search + url.hash);
92
104
  };
93
105
  document.addEventListener("click", onClick);
94
106
  cleanups.push(() => document.removeEventListener("click", onClick));
@@ -109,7 +121,16 @@ export function router(routes, options = {}) {
109
121
  const url = new URL(a.href, location.href);
110
122
  if (url.origin !== location.origin)
111
123
  return;
112
- options.prefetch(url.pathname);
124
+ // Foreign-base links escape SPA prefetch entirely — the manifest
125
+ // only knows base-free route paths and would never match
126
+ // "/mado/docs". Mirrors the click-interception check above.
127
+ const b = appBase;
128
+ if (b !== "/" && !(url.pathname === b.slice(0, -1) || url.pathname.startsWith(b))) {
129
+ return;
130
+ }
131
+ // The prefetch hook is fed manifest-shaped paths (no base),
132
+ // matching the route signal and loader registry.
133
+ options.prefetch(stripBase(url.pathname));
113
134
  }
114
135
  catch {
115
136
  /* noop */
@@ -140,15 +161,18 @@ export function router(routes, options = {}) {
140
161
  },
141
162
  path,
142
163
  navigate(to, opts) {
164
+ // `to` is a ROUTE path (no base). Re-add the active base before we
165
+ // touch history so the browser URL has the correct prefix.
166
+ const url = toBrowserUrl(to);
143
167
  const apply = () => {
144
168
  if (useScrollRestoration)
145
169
  saveScroll(scrollPositions, currentScrollKey);
146
170
  if (opts?.replace)
147
- history.replaceState(null, "", to);
171
+ history.replaceState(null, "", url);
148
172
  else
149
- history.pushState(null, "", to);
173
+ history.pushState(null, "", url);
150
174
  currentScrollKey = locationKey();
151
- path.set(location.pathname);
175
+ path.set(stripBase(location.pathname));
152
176
  // An in-page #hash must scroll to its target even when the pathname is
153
177
  // unchanged (signal dedup would otherwise swallow the navigation and
154
178
  // leave anchor links dead). (FABLE_REPORT.md finding #9)
@@ -228,10 +252,11 @@ function defaultFallback() {
228
252
  export function navigate(to, opts) {
229
253
  if (typeof history === "undefined" || typeof window === "undefined")
230
254
  return;
255
+ const url = toBrowserUrl(to);
231
256
  if (opts?.replace)
232
- history.replaceState(null, "", to);
257
+ history.replaceState(null, "", url);
233
258
  else
234
- history.pushState(null, "", to);
259
+ history.pushState(null, "", url);
235
260
  // popstate is NOT dispatched automatically on pushState/replaceState,
236
261
  // so we dispatch it manually — all active routers will hear and update.
237
262
  window.dispatchEvent(new PopStateEvent("popstate"));
@@ -244,6 +269,30 @@ export function navigate(to, opts) {
244
269
  function locationKey() {
245
270
  return `${location.pathname}${location.search}${location.hash}`;
246
271
  }
272
+ /**
273
+ * Convert a route path + optional query/hash into a full browser URL with
274
+ * the active Vite base re-applied. Pure: no DOM access beyond the
275
+ * resolved `appBase` constant.
276
+ */
277
+ function toBrowserUrl(to) {
278
+ if (!to)
279
+ return withBase("/");
280
+ let path = to;
281
+ let suffix = "";
282
+ const hashAt = path.indexOf("#");
283
+ if (hashAt >= 0) {
284
+ suffix = path.slice(hashAt) + suffix;
285
+ path = path.slice(0, hashAt);
286
+ }
287
+ const queryAt = path.indexOf("?");
288
+ if (queryAt >= 0) {
289
+ suffix = path.slice(queryAt) + suffix;
290
+ path = path.slice(0, queryAt);
291
+ }
292
+ if (!path)
293
+ path = "/";
294
+ return withBase(path) + suffix;
295
+ }
247
296
  function saveScroll(positions, key) {
248
297
  const maybeWindow = window;
249
298
  positions.set(key, {
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../../src/router/navigation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../../src/router/navigation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import type { JsonValue } from "./page.js";
2
+ export interface StaticDiagnostics {
3
+ routeReady: boolean;
4
+ pending: string[];
5
+ lastRouterState: string | null;
6
+ errors: string[];
7
+ expectedPathname: string | null;
8
+ }
9
+ export interface WhenStableOptions {
10
+ /**
11
+ * Cap on time to wait for the route to call `routeReady()`. Defaults
12
+ * to 15s — long enough to load and render even a slow code-split
13
+ * route, short enough that a deadlocked one fails loudly.
14
+ */
15
+ routeReadyMs?: number;
16
+ /**
17
+ * Cap on time to wait for tracked resources (initial fetches, lazy
18
+ * imports created before `routeReady()`) to settle once the route is
19
+ * ready. Defaults to 15s.
20
+ */
21
+ resourcesMs?: number;
22
+ /**
23
+ * Cap on time to wait for `document.fonts.ready`. Web fonts that
24
+ * never resolve must not block the snapshot pipeline indefinitely.
25
+ * Defaults to 5s. We log a diagnostic and proceed on timeout.
26
+ */
27
+ fontsMs?: number;
28
+ /**
29
+ * Cap on time to wait for two paint frames so async style or layout
30
+ * effects can flush before serialization. Defaults to 1s.
31
+ */
32
+ paintMs?: number;
33
+ }
34
+ export interface MadoStaticRuntime {
35
+ beginRoute(pathname: string): void;
36
+ routeReady(state?: string): void;
37
+ track<T>(promise: Promise<T>, label: string): Promise<T>;
38
+ whenStable(options?: WhenStableOptions): Promise<void>;
39
+ diagnostics(): StaticDiagnostics;
40
+ setRouterState(state: string): void;
41
+ recordError(error: unknown): void;
42
+ }
43
+ declare global {
44
+ interface Window {
45
+ /**
46
+ * Build-time signal that this document is being rendered by the static
47
+ * snapshot capture harness. Set by Mado runtime when the document
48
+ * carries the `data-mado-static-capture` attribute. CSP-safe: it does
49
+ * NOT come from an inline script.
50
+ */
51
+ __MADO_STATIC_MODE__?: boolean;
52
+ __MADO_STATIC__?: MadoStaticRuntime;
53
+ }
54
+ }
55
+ /**
56
+ * Consume the build-time seed for the active route exactly once.
57
+ *
58
+ * Lifecycle: discovery encodes the seed into the snapshot as a
59
+ * `<script type="application/json" data-mado-static-data>` element. On the
60
+ * first client boot of a static route the router calls
61
+ * `consumeStaticSeed(pathname)` from a single place.
62
+ *
63
+ * - In production (no capture marker): the script element is removed
64
+ * after parsing so subsequent SPA navigations cannot resurrect a stale
65
+ * seed.
66
+ * - During build-time capture (data-mado-static-capture present): the
67
+ * script element is preserved so the serializer can keep it in the
68
+ * final snapshot HTML — that way the real client boot receives the
69
+ * same seed once again.
70
+ *
71
+ * Returns `undefined` if no seed is present, the JSON is malformed, or the
72
+ * pathname does not match. The router passes the result into both
73
+ * `page.head(params, seed)` and `page.load(params, seed)`.
74
+ */
75
+ export declare function consumeStaticSeed(pathname: string): JsonValue | undefined;
76
+ export declare function getStaticRuntime(): MadoStaticRuntime | null;
77
+ export declare function trackStatic<T>(promise: Promise<T>, label: string): Promise<T>;
78
+ export declare function beginStaticRoute(pathname: string): void;
79
+ export declare function markStaticRouteReady(state?: string): void;
80
+ export declare function setStaticRouterState(state: string): void;
81
+ export declare function recordStaticError(error: unknown): void;
@@ -0,0 +1,209 @@
1
+ import { flushSync } from "./signal.js";
2
+ import { stripBase } from "./router/base.js";
3
+ /**
4
+ * Consume the build-time seed for the active route exactly once.
5
+ *
6
+ * Lifecycle: discovery encodes the seed into the snapshot as a
7
+ * `<script type="application/json" data-mado-static-data>` element. On the
8
+ * first client boot of a static route the router calls
9
+ * `consumeStaticSeed(pathname)` from a single place.
10
+ *
11
+ * - In production (no capture marker): the script element is removed
12
+ * after parsing so subsequent SPA navigations cannot resurrect a stale
13
+ * seed.
14
+ * - During build-time capture (data-mado-static-capture present): the
15
+ * script element is preserved so the serializer can keep it in the
16
+ * final snapshot HTML — that way the real client boot receives the
17
+ * same seed once again.
18
+ *
19
+ * Returns `undefined` if no seed is present, the JSON is malformed, or the
20
+ * pathname does not match. The router passes the result into both
21
+ * `page.head(params, seed)` and `page.load(params, seed)`.
22
+ */
23
+ export function consumeStaticSeed(pathname) {
24
+ if (typeof document === "undefined")
25
+ return undefined;
26
+ const el = document.querySelector('script[type="application/json"][data-mado-static-data]');
27
+ if (!el || el.textContent == null)
28
+ return undefined;
29
+ // The attribute MAY carry the pathname it was emitted for; an empty or
30
+ // missing value means "the only seed in this document", and we accept it
31
+ // for the active route. A non-empty mismatch indicates a stale fragment
32
+ // from a previous route — drop it.
33
+ const elPath = el.getAttribute("data-mado-static-data");
34
+ if (elPath && elPath !== pathname)
35
+ return undefined;
36
+ const preserve = document.documentElement.hasAttribute("data-mado-static-capture");
37
+ try {
38
+ const value = JSON.parse(el.textContent);
39
+ if (!preserve)
40
+ el.remove();
41
+ return value;
42
+ }
43
+ catch {
44
+ if (!preserve)
45
+ el.remove();
46
+ return undefined;
47
+ }
48
+ }
49
+ function detectCaptureMode() {
50
+ if (typeof document === "undefined")
51
+ return false;
52
+ return document.documentElement.hasAttribute("data-mado-static-capture");
53
+ }
54
+ export function getStaticRuntime() {
55
+ if (typeof window === "undefined")
56
+ return null;
57
+ if (window.__MADO_STATIC__)
58
+ return window.__MADO_STATIC__;
59
+ const enabled = window.__MADO_STATIC_MODE__ === true || detectCaptureMode();
60
+ if (!enabled)
61
+ return null;
62
+ window.__MADO_STATIC_MODE__ = true;
63
+ window.__MADO_STATIC__ = createStaticRuntime();
64
+ return window.__MADO_STATIC__;
65
+ }
66
+ export function trackStatic(promise, label) {
67
+ return getStaticRuntime()?.track(promise, label) ?? promise;
68
+ }
69
+ export function beginStaticRoute(pathname) {
70
+ getStaticRuntime()?.beginRoute(pathname);
71
+ }
72
+ export function markStaticRouteReady(state = "ready") {
73
+ getStaticRuntime()?.routeReady(state);
74
+ }
75
+ export function setStaticRouterState(state) {
76
+ getStaticRuntime()?.setRouterState(state);
77
+ }
78
+ export function recordStaticError(error) {
79
+ getStaticRuntime()?.recordError(error);
80
+ }
81
+ function createStaticRuntime() {
82
+ let nextId = 1;
83
+ let routeReady = false;
84
+ let lastRouterState = null;
85
+ let expectedPathname = null;
86
+ const pending = new Map();
87
+ const errors = [];
88
+ const diagnostics = () => ({
89
+ routeReady,
90
+ pending: [...pending.values()].sort(),
91
+ lastRouterState,
92
+ errors: [...errors],
93
+ expectedPathname,
94
+ });
95
+ // Both `beginRoute()` callers and the `routeReady()` comparison live on
96
+ // the BASE-FREE pathname (the route key the matcher uses). Strip the
97
+ // active Vite base so capture under any deployment shape compares
98
+ // apples to apples.
99
+ const currentPathname = () => typeof location !== "undefined" ? stripBase(location.pathname) : null;
100
+ const runtime = {
101
+ beginRoute(pathname) {
102
+ expectedPathname = pathname;
103
+ routeReady = false;
104
+ lastRouterState = "begin";
105
+ },
106
+ routeReady(state = "ready") {
107
+ // If the runtime moved to a different pathname (effect-driven redirect,
108
+ // guard verdict), only acknowledge readiness for the active path; the
109
+ // capture harness compares pathname before serialization.
110
+ const here = currentPathname();
111
+ if (expectedPathname != null && here != null && here !== expectedPathname) {
112
+ // Stale completion of an old route; do not mark as ready.
113
+ return;
114
+ }
115
+ routeReady = true;
116
+ lastRouterState = state;
117
+ },
118
+ track(promise, label) {
119
+ const id = nextId++;
120
+ pending.set(id, label);
121
+ return Promise.resolve(promise).finally(() => {
122
+ pending.delete(id);
123
+ });
124
+ },
125
+ async whenStable(options = {}) {
126
+ const routeReadyMs = options.routeReadyMs ?? 15_000;
127
+ const resourcesMs = options.resourcesMs ?? 15_000;
128
+ // 1) Route ready: wait until the router calls `markStaticRouteReady`
129
+ // for the active pathname. Resources, fonts and paint frames are
130
+ // irrelevant until the route itself has committed.
131
+ await waitFor(() => routeReady && errors.length === 0, routeReadyMs, () => {
132
+ const d = diagnostics();
133
+ return (`[mado:static] route did not become ready in ${routeReadyMs}ms. ` +
134
+ `state=${d.lastRouterState ?? "unknown"} ` +
135
+ `pending=${d.pending.join(", ") || "none"} ` +
136
+ `errors=${d.errors.join(" | ") || "none"}`);
137
+ });
138
+ // 2) Tracked resources: any `resource()` created before route ready
139
+ // is part of the initial render contract; the snapshot waits for
140
+ // it. Resources created after `routeReady` count as background
141
+ // work and are NOT awaited — they would otherwise let a stray
142
+ // `setInterval` keep capture pinned forever.
143
+ await waitFor(() => pending.size === 0 && errors.length === 0, resourcesMs, () => {
144
+ const d = diagnostics();
145
+ return (`[mado:static] route ready but resources did not settle in ${resourcesMs}ms. ` +
146
+ `pending=${d.pending.join(", ") || "none"} ` +
147
+ `errors=${d.errors.join(" | ") || "none"}`);
148
+ });
149
+ // 3) One last quiet pass: flushSync + microtask drain to ensure
150
+ // any final reactive effect committed during step 2 has
151
+ // rendered before the caller serializes the document.
152
+ try {
153
+ flushSync();
154
+ }
155
+ catch {
156
+ /* best effort; diagnostics already capture page errors */
157
+ }
158
+ await microtask();
159
+ },
160
+ diagnostics,
161
+ setRouterState(state) {
162
+ lastRouterState = state;
163
+ },
164
+ recordError(error) {
165
+ errors.push(error instanceof Error ? error.message : String(error));
166
+ },
167
+ };
168
+ return runtime;
169
+ }
170
+ function microtask() {
171
+ return Promise.resolve();
172
+ }
173
+ function delay(ms) {
174
+ return new Promise((resolve) => setTimeout(resolve, ms));
175
+ }
176
+ /**
177
+ * Poll `predicate` until it returns true or `timeoutMs` elapses. Calls
178
+ * `flushSync()` once per pass so reactive effects scheduled during the
179
+ * tick get a chance to commit before the next check. On timeout throws
180
+ * the message returned by `describe()` so each phase of `whenStable`
181
+ * produces a phase-specific diagnostic.
182
+ */
183
+ async function waitFor(predicate, timeoutMs, describe) {
184
+ const started = Date.now();
185
+ // Two consecutive quiet ticks before we declare success: the predicate
186
+ // can transition transiently while a microtask flush rebuilds the
187
+ // route view.
188
+ let quietPasses = 0;
189
+ while (Date.now() - started < timeoutMs) {
190
+ try {
191
+ flushSync();
192
+ }
193
+ catch {
194
+ /* page errors surface separately via recordError */
195
+ }
196
+ await microtask();
197
+ if (predicate()) {
198
+ quietPasses++;
199
+ if (quietPasses >= 2)
200
+ return;
201
+ }
202
+ else {
203
+ quietPasses = 0;
204
+ }
205
+ await delay(10);
206
+ }
207
+ throw new Error(describe());
208
+ }
209
+ //# sourceMappingURL=static-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-runtime.js","sourceRoot":"","sources":["../../src/static-runtime.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,38 @@
1
1
  import type { Plugin } from "vite";
2
2
  export interface MadoVitePluginOptions {
3
+ /**
4
+ * Public origin used to build absolute URLs for static snapshots
5
+ * (sitemap entries, canonical links, OpenGraph URLs).
6
+ *
7
+ * mado({ site: "https://madojs.dev" })
8
+ *
9
+ * Combined with Vite's `base`, the canonical URL for a route is
10
+ * `site + base + pathname`. Required when at least one page declares
11
+ * `static`; otherwise the build emits absolute URLs that point
12
+ * nowhere.
13
+ */
14
+ site?: string;
3
15
  }
4
16
  /**
5
17
  * Vite integration for Mado apps.
6
18
  *
7
- * The plugin is intentionally small: Vite owns dev serving, HTML processing,
8
- * assets and bundling; Mado keeps its runtime and static bake semantics.
19
+ * Intentionally minimal: Vite owns dev serving, HTML processing, assets
20
+ * and bundling. This plugin is the bridge that hands the snapshot CLI the
21
+ * three pieces of resolved Vite config it needs and asks Vite for a
22
+ * Mado-flavoured full reload on TypeScript/JavaScript changes.
23
+ *
24
+ * What it owns:
25
+ * 1. a small `build.target` default (matches what the runtime relies on);
26
+ * 2. forcing a full page reload when a `.ts` / `.js` module updates,
27
+ * so signals / components do not have to track HMR state;
28
+ * 3. emitting `_mado/build.json` into the output so
29
+ * `scripts/static.mjs` can read the resolved Vite `base`, `assetsDir`
30
+ * and the user-declared `site` without parsing `vite.config.ts`.
31
+ *
32
+ * What it does NOT own:
33
+ * - HTML ownership (Vite keeps that),
34
+ * - publicDir / outDir / assetsDir defaults (Vite already supplies them),
35
+ * - snapshot orchestration (CLI keeps that),
36
+ * - SSR or hydration.
9
37
  */
10
- export declare function mado(_options?: MadoVitePluginOptions): Plugin;
38
+ export declare function mado(options?: MadoVitePluginOptions): Plugin;
@@ -1,32 +1,63 @@
1
- import { resolve } from "node:path";
2
1
  /**
3
2
  * Vite integration for Mado apps.
4
3
  *
5
- * The plugin is intentionally small: Vite owns dev serving, HTML processing,
6
- * assets and bundling; Mado keeps its runtime and static bake semantics.
4
+ * Intentionally minimal: Vite owns dev serving, HTML processing, assets
5
+ * and bundling. This plugin is the bridge that hands the snapshot CLI the
6
+ * three pieces of resolved Vite config it needs and asks Vite for a
7
+ * Mado-flavoured full reload on TypeScript/JavaScript changes.
8
+ *
9
+ * What it owns:
10
+ * 1. a small `build.target` default (matches what the runtime relies on);
11
+ * 2. forcing a full page reload when a `.ts` / `.js` module updates,
12
+ * so signals / components do not have to track HMR state;
13
+ * 3. emitting `_mado/build.json` into the output so
14
+ * `scripts/static.mjs` can read the resolved Vite `base`, `assetsDir`
15
+ * and the user-declared `site` without parsing `vite.config.ts`.
16
+ *
17
+ * What it does NOT own:
18
+ * - HTML ownership (Vite keeps that),
19
+ * - publicDir / outDir / assetsDir defaults (Vite already supplies them),
20
+ * - snapshot orchestration (CLI keeps that),
21
+ * - SSR or hydration.
7
22
  */
8
- export function mado(_options = {}) {
9
- let root = process.cwd();
23
+ export function mado(options = {}) {
24
+ let resolved = null;
10
25
  return {
11
26
  name: "mado",
12
- config(userConfig) {
13
- root = resolve(process.cwd(), userConfig.root ?? ".");
27
+ config() {
14
28
  return {
15
- appType: "spa",
16
- publicDir: "public",
17
- build: {
18
- outDir: "out",
19
- assetsDir: "assets",
20
- target: "es2022",
21
- },
29
+ build: { target: "es2022" },
22
30
  };
23
31
  },
32
+ configResolved(config) {
33
+ resolved = config;
34
+ },
24
35
  handleHotUpdate(ctx) {
25
- if (/\.(ts|js)$/.test(ctx.file)) {
26
- ctx.server.ws.send({ type: "full-reload" });
27
- return [];
36
+ if (!/\.[cm]?[jt]s$/.test(ctx.file))
37
+ return;
38
+ // Invalidate the module graph first; otherwise the reload would
39
+ // serve cached modules and miss the change. Mirrors the canonical
40
+ // Vite "force full reload" recipe.
41
+ const invalidated = new Set();
42
+ for (const mod of ctx.modules) {
43
+ ctx.server.moduleGraph.invalidateModule(mod, invalidated, ctx.timestamp, true);
28
44
  }
29
- return undefined;
45
+ ctx.server.ws.send({ type: "full-reload" });
46
+ return [];
47
+ },
48
+ generateBundle() {
49
+ if (!resolved)
50
+ return;
51
+ this.emitFile({
52
+ type: "asset",
53
+ fileName: "_mado/build.json",
54
+ source: JSON.stringify({
55
+ site: options.site ?? null,
56
+ base: resolved.base,
57
+ assetsDir: resolved.build.assetsDir,
58
+ outDir: resolved.build.outDir,
59
+ }),
60
+ });
30
61
  },
31
62
  };
32
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/vite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC;;;;;GAKG;AACH,MAAM,UAAU,IAAI,CAAC,WAAkC,EAAE;IACvD,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEzB,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,MAAM,CAAC,UAAU;YACf,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;YAEtD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,QAAQ;gBACnB,KAAK,EAAE;oBACL,MAAM,EAAE,KAAK;oBACb,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,QAAQ;iBACjB;aACF,CAAC;QACJ,CAAC;QACD,eAAe,CAAC,GAAG;YACjB,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;gBAC5C,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/vite/index.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,IAAI,CAAC,UAAiC,EAAE;IACtD,IAAI,QAAQ,GAA0B,IAAI,CAAC;IAE3C,OAAO;QACL,IAAI,EAAE,MAAM;QAEZ,MAAM;YACJ,OAAO;gBACL,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;aAC5B,CAAC;QACJ,CAAC;QAED,cAAc,CAAC,MAAM;YACnB,QAAQ,GAAG,MAAM,CAAC;QACpB,CAAC;QAED,eAAe,CAAC,GAAG;YACjB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO;YAC5C,gEAAgE;YAChE,kEAAkE;YAClE,mCAAmC;YACnC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAW,CAAC;YACvC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC9B,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,gBAAgB,CACrC,GAAG,EACH,WAAyB,EACzB,GAAG,CAAC,SAAS,EACb,IAAI,CACL,CAAC;YACJ,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;YAC5C,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,cAAc;YACZ,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACtB,IAAI,CAAC,QAAQ,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,kBAAkB;gBAC5B,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC;oBACrB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;oBAC1B,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS;oBACnC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;iBAC9B,CAAC;aACH,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
package/docs/README.md CHANGED
@@ -1,12 +1,9 @@
1
1
  # Mado docs
2
2
 
3
- Documentation is organized by language.
3
+ Canonical project documentation is maintained in English only.
4
4
 
5
- | Language | Status |
6
- |---|---|
7
- | [Français](./fr/README.md) | translated |
8
- | [English](./en/README.md) | translated |
9
- | [Ukrainian](./uk/README.md) | translated |
10
- | [Russian](./ru/README.md) | translated |
5
+ - [English documentation](./en/README.md)
11
6
 
12
- Translations and comment localization are tracked separately from core work.
7
+ Older translations (`fr/`, `uk/`, `ru/`) were removed at v0.12. They
8
+ remain available in git history and the `v0.11.1` tag for any
9
+ external links that still need them.