@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.
- package/AGENTS.md +102 -25
- package/CHANGELOG.md +158 -1
- package/README.md +135 -172
- package/dist/src/component.d.ts +3 -2
- package/dist/src/component.js +98 -6
- package/dist/src/component.js.map +1 -1
- package/dist/src/css.js +34 -5
- package/dist/src/css.js.map +1 -1
- package/dist/src/head.d.ts +6 -6
- package/dist/src/head.js +6 -6
- package/dist/src/html/parser.d.ts +1 -1
- package/dist/src/html/parser.js +1 -1
- package/dist/src/html/template.js +24 -10
- package/dist/src/html/template.js.map +1 -1
- package/dist/src/index.d.ts +8 -4
- package/dist/src/index.js +13 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/page.d.ts +62 -28
- package/dist/src/page.js +5 -0
- package/dist/src/page.js.map +1 -1
- package/dist/src/resource.js +2 -1
- package/dist/src/resource.js.map +1 -1
- package/dist/src/router/base.d.ts +65 -0
- package/dist/src/router/base.js +168 -0
- package/dist/src/router/base.js.map +1 -0
- package/dist/src/router/manifest.js +75 -31
- package/dist/src/router/manifest.js.map +1 -1
- package/dist/src/router/match.d.ts +16 -2
- package/dist/src/router/match.js +41 -1
- package/dist/src/router/match.js.map +1 -1
- package/dist/src/router/navigation.js +58 -9
- package/dist/src/router/navigation.js.map +1 -1
- package/dist/src/static-runtime.d.ts +81 -0
- package/dist/src/static-runtime.js +209 -0
- package/dist/src/static-runtime.js.map +1 -0
- package/dist/src/vite/index.d.ts +31 -3
- package/dist/src/vite/index.js +49 -18
- package/dist/src/vite/index.js.map +1 -1
- package/docs/README.md +5 -8
- package/docs/architecture/adr/0001-browser-static-snapshots.md +132 -0
- package/docs/en/00-the-mado-way.md +1 -1
- package/docs/en/01-quickstart.md +183 -0
- package/docs/en/10-pages-and-components.md +271 -0
- package/docs/en/11-templates-and-signals.md +211 -0
- package/docs/en/12-routing.md +229 -0
- package/docs/en/13-data.md +225 -0
- package/docs/en/14-forms.md +244 -0
- package/docs/en/15-static-snapshots.md +181 -0
- package/docs/en/{10-app-architecture.md → 16-app-architecture.md} +53 -2
- package/docs/en/{13-deployment.md → 20-deployment.md} +59 -10
- package/docs/en/{14-testing.md → 22-testing.md} +6 -5
- package/docs/en/23-cookbook.md +292 -0
- package/docs/en/{18-api-freeze-map.md → 30-api-freeze-map.md} +12 -3
- package/docs/en/{20-v1-stability.md → 32-v1-stability.md} +3 -3
- package/docs/en/40-llm-guide.md +776 -0
- package/docs/en/{06-for-backenders.md → 41-for-backenders.md} +15 -16
- package/docs/en/{05-why-mado.md → 42-why-mado.md} +1 -1
- package/docs/en/README.md +97 -27
- package/docs/recipes/nginx/Containerfile +26 -0
- package/docs/recipes/nginx/nginx.conf +42 -0
- package/llms.txt +246 -211
- package/package.json +17 -10
- package/scripts/bake.mjs +4 -569
- package/scripts/cli/generate.mjs +55 -5
- package/scripts/cli/help.mjs +11 -5
- package/scripts/cli/index.mjs +20 -4
- package/scripts/cli/init.mjs +7 -2
- package/scripts/cli/release.mjs +20 -68
- package/scripts/docs-lint.mjs +170 -0
- package/scripts/package-smoke.mjs +67 -9
- package/scripts/preview.mjs +95 -6
- package/scripts/size-budget.mjs +5 -1
- package/scripts/static/browser.mjs +654 -0
- package/scripts/static/discover.mjs +281 -0
- package/scripts/static/output.mjs +141 -0
- package/scripts/static/serialize.mjs +212 -0
- package/scripts/static/server.mjs +167 -0
- package/scripts/static.mjs +191 -0
- package/starters/default/README.md +57 -55
- package/starters/default/package.json +3 -9
- package/starters/default/src/app.routes.ts +20 -33
- package/starters/default/src/components/feature-card.component.ts +40 -0
- package/starters/default/src/components/live-counter.component.ts +57 -0
- package/starters/default/src/content/guides.ts +55 -0
- package/starters/default/src/main.ts +9 -13
- package/starters/default/src/pages/app.page.ts +41 -0
- package/starters/default/src/pages/guide.page.ts +40 -0
- package/starters/default/src/pages/home.page.ts +49 -0
- package/starters/default/src/pages/not-found.page.ts +18 -0
- package/starters/default/src/styles/document.css +39 -0
- package/starters/default/src/styles/reset.css +37 -0
- package/starters/default/src/styles/tokens.css +30 -0
- package/starters/default/src/styles.d.ts +3 -1
- package/starters/default/src/vite-env.d.ts +1 -1
- package/starters/default/vite.config.ts +14 -1
- package/starters/modular/README.md +142 -0
- package/starters/modular/index.html +13 -0
- package/starters/modular/package.json +30 -0
- package/starters/modular/src/app.routes.ts +39 -0
- package/starters/{default → modular}/src/layouts/app-shell.layout.ts +8 -5
- package/starters/{default → modular}/src/layouts/auth-shell.layout.ts +3 -3
- package/starters/modular/src/main.ts +16 -0
- package/starters/{default → modular}/src/modules/billing/pages/invoices-list.page.ts +3 -3
- package/starters/{default → modular}/src/modules/home/home.page.ts +5 -7
- package/starters/modular/src/modules/home/not-found.page.ts +14 -0
- package/starters/modular/src/styles.d.ts +1 -0
- package/starters/modular/src/vite-env.d.ts +1 -0
- package/starters/modular/tsconfig.json +24 -0
- package/starters/modular/vite.config.ts +131 -0
- package/TODO.md +0 -79
- package/docs/en/01-routing.md +0 -152
- package/docs/en/02-project-layout.md +0 -124
- package/docs/en/03-static-bake.md +0 -249
- package/docs/en/04-ide-setup.md +0 -162
- package/docs/en/07-llm-pitfalls.md +0 -724
- package/docs/en/08-llm-zero-history-test.md +0 -56
- package/docs/en/09-shadow-vs-light-dom.md +0 -174
- package/docs/en/11-layouts.md +0 -113
- package/docs/en/12-auth-and-api.md +0 -124
- package/docs/en/16-bake-cookbook.md +0 -100
- package/docs/en/17-shadow-dom-forms.md +0 -192
- package/docs/fr/00-the-mado-way.md +0 -85
- package/docs/fr/01-routing.md +0 -120
- package/docs/fr/02-project-layout.md +0 -84
- package/docs/fr/03-static-bake.md +0 -289
- package/docs/fr/04-ide-setup.md +0 -162
- package/docs/fr/05-why-mado.md +0 -193
- package/docs/fr/06-for-backenders.md +0 -438
- package/docs/fr/07-llm-pitfalls.md +0 -625
- package/docs/fr/08-llm-zero-history-test.md +0 -38
- package/docs/fr/09-shadow-vs-light-dom.md +0 -65
- package/docs/fr/10-app-architecture.md +0 -138
- package/docs/fr/11-layouts.md +0 -47
- package/docs/fr/12-auth-and-api.md +0 -76
- package/docs/fr/13-deployment.md +0 -57
- package/docs/fr/14-testing.md +0 -41
- package/docs/fr/15-error-handling.md +0 -50
- package/docs/fr/16-bake-cookbook.md +0 -88
- package/docs/fr/17-shadow-dom-forms.md +0 -196
- package/docs/fr/18-api-freeze-map.md +0 -63
- package/docs/fr/19-reactivity-ordering.md +0 -97
- package/docs/fr/20-v1-stability.md +0 -88
- package/docs/fr/README.md +0 -27
- package/docs/ru/00-the-mado-way.md +0 -84
- package/docs/ru/01-routing.md +0 -119
- package/docs/ru/02-project-layout.md +0 -84
- package/docs/ru/03-static-bake.md +0 -250
- package/docs/ru/04-ide-setup.md +0 -144
- package/docs/ru/05-why-mado.md +0 -193
- package/docs/ru/06-for-backenders.md +0 -428
- package/docs/ru/07-llm-pitfalls.md +0 -624
- package/docs/ru/08-llm-zero-history-test.md +0 -57
- package/docs/ru/09-shadow-vs-light-dom.md +0 -63
- package/docs/ru/10-app-architecture.md +0 -152
- package/docs/ru/11-layouts.md +0 -47
- package/docs/ru/12-auth-and-api.md +0 -75
- package/docs/ru/13-deployment.md +0 -66
- package/docs/ru/14-testing.md +0 -50
- package/docs/ru/15-error-handling.md +0 -56
- package/docs/ru/16-bake-cookbook.md +0 -95
- package/docs/ru/17-shadow-dom-forms.md +0 -193
- package/docs/ru/18-api-freeze-map.md +0 -64
- package/docs/ru/19-reactivity-ordering.md +0 -95
- package/docs/ru/20-v1-stability.md +0 -82
- package/docs/ru/README.md +0 -25
- package/docs/uk/00-the-mado-way.md +0 -82
- package/docs/uk/01-routing.md +0 -76
- package/docs/uk/02-project-layout.md +0 -73
- package/docs/uk/03-static-bake.md +0 -48
- package/docs/uk/04-ide-setup.md +0 -26
- package/docs/uk/05-why-mado.md +0 -34
- package/docs/uk/06-for-backenders.md +0 -55
- package/docs/uk/07-llm-pitfalls.md +0 -145
- package/docs/uk/08-llm-zero-history-test.md +0 -34
- package/docs/uk/09-shadow-vs-light-dom.md +0 -58
- package/docs/uk/10-app-architecture.md +0 -97
- package/docs/uk/11-layouts.md +0 -47
- package/docs/uk/12-auth-and-api.md +0 -70
- package/docs/uk/13-deployment.md +0 -40
- package/docs/uk/14-testing.md +0 -34
- package/docs/uk/15-error-handling.md +0 -32
- package/docs/uk/16-bake-cookbook.md +0 -36
- package/docs/uk/17-shadow-dom-forms.md +0 -193
- package/docs/uk/18-api-freeze-map.md +0 -61
- package/docs/uk/19-reactivity-ordering.md +0 -95
- package/docs/uk/20-v1-stability.md +0 -83
- package/docs/uk/README.md +0 -27
- package/starters/default/src/modules/home/not-found.page.ts +0 -11
- /package/docs/en/{15-error-handling.md → 21-error-handling.md} +0 -0
- /package/docs/en/{19-reactivity-ordering.md → 31-reactivity-ordering.md} +0 -0
- /package/starters/{default → modular}/.editorconfig +0 -0
- /package/starters/{default → modular}/eslint.config.mjs +0 -0
- /package/starters/{default → modular}/public/favicon.svg +0 -0
- /package/starters/{default → modular}/src/modules/auth/_contracts/auth-api.types.ts +0 -0
- /package/starters/{default → modular}/src/modules/auth/auth.connector.ts +0 -0
- /package/starters/{default → modular}/src/modules/auth/auth.guard.ts +0 -0
- /package/starters/{default → modular}/src/modules/auth/auth.public.ts +0 -0
- /package/starters/{default → modular}/src/modules/auth/auth.routes.ts +0 -0
- /package/starters/{default → modular}/src/modules/auth/auth.service.ts +0 -0
- /package/starters/{default → modular}/src/modules/auth/auth.types.ts +0 -0
- /package/starters/{default → modular}/src/modules/auth/login.page.ts +0 -0
- /package/starters/{default → modular}/src/modules/billing/_contracts/stripe.types.ts +0 -0
- /package/starters/{default → modular}/src/modules/billing/api/stripe.connector.ts +0 -0
- /package/starters/{default → modular}/src/modules/billing/billing.public.ts +0 -0
- /package/starters/{default → modular}/src/modules/billing/billing.routes.ts +0 -0
- /package/starters/{default → modular}/src/modules/billing/billing.types.ts +0 -0
- /package/starters/{default → modular}/src/modules/billing/components/invoice-status-badge.component.ts +0 -0
- /package/starters/{default → modular}/src/modules/billing/data/invoices.resource.ts +0 -0
- /package/starters/{default → modular}/src/modules/billing/pages/invoice-detail.page.ts +0 -0
- /package/starters/{default → modular}/src/shared/http/http-client.ts +0 -0
- /package/starters/{default → modular}/src/shared/http/http-error.ts +0 -0
- /package/starters/{default → modular}/src/shared/http/interceptors.ts +0 -0
- /package/starters/{default → modular}/src/shared/lib/format-date.ts +0 -0
- /package/starters/{default → modular}/src/shared/styles/content.css +0 -0
- /package/starters/{default → modular}/src/shared/styles/reset.css +0 -0
- /package/starters/{default → modular}/src/shared/styles/shell.css +0 -0
- /package/starters/{default → modular}/src/shared/styles/tokens.css +0 -0
- /package/starters/{default → modular}/src/shared/ui/x-button.component.ts +0 -0
- /package/starters/{default → modular}/src/shared/ui/x-spinner.component.ts +0 -0
|
@@ -261,21 +261,20 @@ This is like `context.WithValue` / `ctx.Value` in Go, but reactive.
|
|
|
261
261
|
|
|
262
262
|
---
|
|
263
263
|
|
|
264
|
-
## SEO — not SSR, but
|
|
264
|
+
## SEO — not SSR, but static snapshots (like `templ generate` in Go)
|
|
265
265
|
|
|
266
|
-
If you're used to server-side rendering for SEO, in Mado this is solved differently: **prerender at build time**.
|
|
266
|
+
If you're used to server-side rendering for SEO, in Mado this is solved differently: **browser-rendered prerender at build time**.
|
|
267
267
|
|
|
268
268
|
```ts
|
|
269
269
|
// src/modules/<module>/pages/product.ts
|
|
270
270
|
export default page({
|
|
271
|
-
|
|
272
|
-
paths: () => api.allProductSlugs(),
|
|
273
|
-
|
|
274
|
-
revalidate: 3600,
|
|
271
|
+
static: {
|
|
272
|
+
paths: () => api.allProductSlugs(), // build-time fetch
|
|
273
|
+
initialData: ({ slug }) => api.getProduct(slug),
|
|
275
274
|
},
|
|
276
|
-
head: (
|
|
275
|
+
head: (_, data) => ({
|
|
277
276
|
description: data.description,
|
|
278
|
-
canonical: `/product/${slug}`,
|
|
277
|
+
canonical: `/product/${data.slug}`,
|
|
279
278
|
og: { title: data.name, image: data.image },
|
|
280
279
|
}),
|
|
281
280
|
view: ({ params }) => html`<x-product data-slug=${params.slug} />`,
|
|
@@ -283,12 +282,12 @@ export default page({
|
|
|
283
282
|
```
|
|
284
283
|
|
|
285
284
|
```bash
|
|
286
|
-
npm run
|
|
285
|
+
npm run release # → out/product/iphone-15/index.html (+ sitemap)
|
|
287
286
|
```
|
|
288
287
|
|
|
289
288
|
The crawler sees ready-made HTML with meta tags. The user sees the same thing + interactivity after JS loads.
|
|
290
289
|
|
|
291
|
-
More details: [`
|
|
290
|
+
More details: [`15-static-snapshots.md`](./15-static-snapshots.md).
|
|
292
291
|
|
|
293
292
|
---
|
|
294
293
|
|
|
@@ -403,7 +402,8 @@ Module connectors build on this transport and map DTOs to domain types.
|
|
|
403
402
|
|
|
404
403
|
- **Hooks and hook rules.** Not in Mado. Signals are ordinary functions.
|
|
405
404
|
- **VDOM and reconciliation.** None. Signals update the DOM directly, surgically.
|
|
406
|
-
- **Webpack/
|
|
405
|
+
- **Webpack/Babel configs.** Vite is the transport; the starter ships one
|
|
406
|
+
three-line `vite.config.ts` with `mado()`.
|
|
407
407
|
- **`useEffect` dependency arrays.** `effect()` sees what you read on its own.
|
|
408
408
|
- **State management libraries** (Redux/Zustand). Signals + context.
|
|
409
409
|
- **CSS-in-JS transformations.** Shadow DOM + `css\`\`` + cssVars.
|
|
@@ -418,7 +418,7 @@ These are new concepts. Not scary, but they are additions to your React/Vue base
|
|
|
418
418
|
1. **Custom Elements / Shadow DOM.** `<x-foo>` is not a div, it is a full-fledged element with its own DOM. Slots, scoped CSS. One evening of MDN reading.
|
|
419
419
|
2. **`attribute` vs `property`.** Attribute is a string in HTML (`data-id="5"`), property is a JS property (`el.id = 5`). `?attr=${flag}` and `.prop=${value}` in templates refer to different things. Main rule: **numbers/objects/arrays — via `.prop`, flags — via `?attr`, strings — via `attr`**.
|
|
420
420
|
3. **Signals.** If it's your first time — you'll get stuck for 10 minutes, then it's easier than hooks.
|
|
421
|
-
4. **`html\`\``-templates.** It's just a JS function with highlighting via [lit-plugin](./
|
|
421
|
+
4. **`html\`\``-templates.** It's just a JS function with highlighting via [lit-plugin](./01-quickstart.md#4-ide-setup). Not magic.
|
|
422
422
|
|
|
423
423
|
Everything else — standard browser + TypeScript.
|
|
424
424
|
|
|
@@ -426,7 +426,6 @@ Everything else — standard browser + TypeScript.
|
|
|
426
426
|
|
|
427
427
|
## What's missing (honestly)
|
|
428
428
|
|
|
429
|
-
- No hot reload, only full reload via SSE. Sufficient for most cases, but not like Vite.
|
|
430
429
|
- No browser extension dev-tools. Use `localStorage.madoDebug = '1'` + console.
|
|
431
430
|
- No StackBlitz starters (yet).
|
|
432
431
|
- No AI assistant that knows Mado as well as React. When in doubt — read `src/`, it's not scary.
|
|
@@ -435,9 +434,9 @@ Everything else — standard browser + TypeScript.
|
|
|
435
434
|
|
|
436
435
|
## Further reading
|
|
437
436
|
|
|
438
|
-
- **[`
|
|
439
|
-
- **[`
|
|
440
|
-
- **[`
|
|
437
|
+
- **[`12-routing.md`](./12-routing.md)** — the router in detail.
|
|
438
|
+
- **[`16-app-architecture.md`](./16-app-architecture.md)** — project structure.
|
|
439
|
+
- **[`15-static-snapshots.md`](./15-static-snapshots.md)** — SEO without SSR.
|
|
441
440
|
- **External `madojs-examples` workspace** — full demos (landing + admin).
|
|
442
441
|
|
|
443
442
|
If something is unclear — open an issue, or just open the source. It really is readable in an evening.
|
|
@@ -39,7 +39,7 @@ If your case does not fall into the last point — Mado is most likely not the b
|
|
|
39
39
|
| Router | none, you need to find one (`@lit-labs/router`, etc) | included: `routes()` + layout groups + prefetch |
|
|
40
40
|
| Data fetching | none, you need to assemble it | `resource()` + `mutation()` + glob invalidation |
|
|
41
41
|
| Forms | none | `useForm()` with HTML-like constraints |
|
|
42
|
-
| SEO / static | complex (`@lit-labs/ssr`) | `
|
|
42
|
+
| SEO / static | complex (`@lit-labs/ssr`) | `mado static` (real Chromium snapshot + DSD) |
|
|
43
43
|
| Build | needs framework-specific build plugins | Vite transport + native runtime |
|
|
44
44
|
| Code style | classes + decorators | functions + tagged templates |
|
|
45
45
|
| Ecosystem | real (Shoelace, Material Web, etc.) | none |
|
package/docs/en/README.md
CHANGED
|
@@ -1,27 +1,97 @@
|
|
|
1
|
-
# Mado
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
|
26
|
-
|
|
|
27
|
-
|
|
|
1
|
+
# Mado documentation
|
|
2
|
+
|
|
3
|
+
> Canonical project documentation. English-only since v0.12.
|
|
4
|
+
|
|
5
|
+
Read top-to-bottom for a complete mental model, or jump to the
|
|
6
|
+
section you need from the matrix below.
|
|
7
|
+
|
|
8
|
+
## Reading paths
|
|
9
|
+
|
|
10
|
+
- **First time here?** Start with [00 — The Mado way](./00-the-mado-way.md)
|
|
11
|
+
and then [01 — Quickstart](./01-quickstart.md).
|
|
12
|
+
- **Already shipped one Mado app?** Skim
|
|
13
|
+
[10 — Pages and components](./10-pages-and-components.md) and
|
|
14
|
+
[30 — API freeze map](./30-api-freeze-map.md).
|
|
15
|
+
- **Coming from React / Vue / Next?**
|
|
16
|
+
[42 — Why Mado](./42-why-mado.md) and
|
|
17
|
+
[40 — LLM guide](./40-llm-guide.md) cover the mental shifts.
|
|
18
|
+
- **Backend developer?** [41 — For backenders](./41-for-backenders.md)
|
|
19
|
+
is the express lane.
|
|
20
|
+
|
|
21
|
+
## Map
|
|
22
|
+
|
|
23
|
+
### Start here
|
|
24
|
+
|
|
25
|
+
| Section | File |
|
|
26
|
+
| ----------------------------- | ------------------------------------------ |
|
|
27
|
+
| The Mado way (philosophy) | [00-the-mado-way.md](./00-the-mado-way.md) |
|
|
28
|
+
| Quickstart | [01-quickstart.md](./01-quickstart.md) |
|
|
29
|
+
|
|
30
|
+
### Concepts (read once)
|
|
31
|
+
|
|
32
|
+
| Section | File |
|
|
33
|
+
| ---------------------------------- | ---------------------------------------------------------- |
|
|
34
|
+
| Pages and components | [10-pages-and-components.md](./10-pages-and-components.md) |
|
|
35
|
+
| Templates and signals | [11-templates-and-signals.md](./11-templates-and-signals.md) |
|
|
36
|
+
| Routing | [12-routing.md](./12-routing.md) |
|
|
37
|
+
| Data — `resource()` / `mutation()` | [13-data.md](./13-data.md) |
|
|
38
|
+
| Forms | [14-forms.md](./14-forms.md) |
|
|
39
|
+
| Static snapshots | [15-static-snapshots.md](./15-static-snapshots.md) |
|
|
40
|
+
| App architecture | [16-app-architecture.md](./16-app-architecture.md) |
|
|
41
|
+
|
|
42
|
+
### Production
|
|
43
|
+
|
|
44
|
+
| Section | File |
|
|
45
|
+
| ------------------ | ---------------------------------------------- |
|
|
46
|
+
| Deployment | [20-deployment.md](./20-deployment.md) |
|
|
47
|
+
| Error handling | [21-error-handling.md](./21-error-handling.md) |
|
|
48
|
+
| Testing | [22-testing.md](./22-testing.md) |
|
|
49
|
+
| Cookbook | [23-cookbook.md](./23-cookbook.md) |
|
|
50
|
+
|
|
51
|
+
### Reference
|
|
52
|
+
|
|
53
|
+
| Section | File |
|
|
54
|
+
| ---------------------- | ---------------------------------------------------------- |
|
|
55
|
+
| API freeze map | [30-api-freeze-map.md](./30-api-freeze-map.md) |
|
|
56
|
+
| Reactivity ordering | [31-reactivity-ordering.md](./31-reactivity-ordering.md) |
|
|
57
|
+
| v1 stability contract | [32-v1-stability.md](./32-v1-stability.md) |
|
|
58
|
+
|
|
59
|
+
### Meta
|
|
60
|
+
|
|
61
|
+
| Section | File |
|
|
62
|
+
| ------------------------------------------------------ | ------------------------------------------ |
|
|
63
|
+
| LLM guide (pitfalls + zero-history test) | [40-llm-guide.md](./40-llm-guide.md) |
|
|
64
|
+
| For backenders | [41-for-backenders.md](./41-for-backenders.md) |
|
|
65
|
+
| Why Mado vs Lit / Solid / Svelte / htmx / React | [42-why-mado.md](./42-why-mado.md) |
|
|
66
|
+
|
|
67
|
+
## Migrating from v0.11.x doc layout
|
|
68
|
+
|
|
69
|
+
The 0.12 release reorganised `docs/en/` into the groups above and
|
|
70
|
+
collapsed several overlapping files. Old → new map:
|
|
71
|
+
|
|
72
|
+
<!-- docs-lint:allow-legacy-mention -->
|
|
73
|
+
|
|
74
|
+
| Old (v0.11.x) | New (v0.12) |
|
|
75
|
+
| ----------------------------------- | ---------------------------------------------------------- |
|
|
76
|
+
| `01-routing.md` | `12-routing.md` |
|
|
77
|
+
| `02-project-layout.md` | merged into `16-app-architecture.md` |
|
|
78
|
+
| `03-static-bake.md` | `15-static-snapshots.md` |
|
|
79
|
+
| `04-ide-setup.md` | merged into `01-quickstart.md` |
|
|
80
|
+
| `05-why-mado.md` | `42-why-mado.md` |
|
|
81
|
+
| `06-for-backenders.md` | `41-for-backenders.md` |
|
|
82
|
+
| `07-llm-pitfalls.md` | merged into `40-llm-guide.md` |
|
|
83
|
+
| `08-llm-zero-history-test.md` | merged into `40-llm-guide.md` |
|
|
84
|
+
| `09-shadow-vs-light-dom.md` | replaced by `10-pages-and-components.md` |
|
|
85
|
+
| `10-app-architecture.md` | `16-app-architecture.md` |
|
|
86
|
+
| `11-layouts.md` | merged into `12-routing.md` |
|
|
87
|
+
| `12-auth-and-api.md` | merged into `13-data.md` |
|
|
88
|
+
| `13-deployment.md` | `20-deployment.md` |
|
|
89
|
+
| `14-testing.md` | `22-testing.md` |
|
|
90
|
+
| `15-error-handling.md` | `21-error-handling.md` |
|
|
91
|
+
| `16-bake-cookbook.md` | `23-cookbook.md` |
|
|
92
|
+
| `17-shadow-dom-forms.md` | merged into `14-forms.md` |
|
|
93
|
+
| `18-api-freeze-map.md` | `30-api-freeze-map.md` |
|
|
94
|
+
| `19-reactivity-ordering.md` | `31-reactivity-ordering.md` |
|
|
95
|
+
| `20-v1-stability.md` | `32-v1-stability.md` |
|
|
96
|
+
|
|
97
|
+
<!-- /docs-lint:allow-legacy-mention -->
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Optional generated-app container recipe.
|
|
2
|
+
#
|
|
3
|
+
# Usage from your app root after copying this directory to ./docker:
|
|
4
|
+
# docker build -f docker/Containerfile -t myapp .
|
|
5
|
+
|
|
6
|
+
FROM node:24-alpine AS builder
|
|
7
|
+
WORKDIR /app
|
|
8
|
+
|
|
9
|
+
COPY package.json package-lock.json* pnpm-lock.yaml* ./
|
|
10
|
+
RUN if [ -f pnpm-lock.yaml ]; then \
|
|
11
|
+
corepack enable && pnpm install --frozen-lockfile; \
|
|
12
|
+
elif [ -f package-lock.json ]; then \
|
|
13
|
+
npm ci; \
|
|
14
|
+
else \
|
|
15
|
+
npm install; \
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
COPY . .
|
|
19
|
+
RUN npm run release
|
|
20
|
+
|
|
21
|
+
FROM nginx:alpine AS runtime
|
|
22
|
+
COPY docker/nginx.conf /etc/nginx/conf.d/default.conf
|
|
23
|
+
COPY --from=builder /app/out /usr/share/nginx/html
|
|
24
|
+
|
|
25
|
+
EXPOSE 80
|
|
26
|
+
HEALTHCHECK --interval=30s --timeout=3s CMD wget -qO- http://localhost/ >/dev/null || exit 1
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Static nginx config for a Mado app released with `mado release`.
|
|
2
|
+
#
|
|
3
|
+
# Serves:
|
|
4
|
+
# - Vite hashed assets from /assets/ with immutable caching;
|
|
5
|
+
# - precompressed .gz files written by `mado release`;
|
|
6
|
+
# - baked route HTML when present;
|
|
7
|
+
# - index.html as SPA fallback for client-only routes.
|
|
8
|
+
|
|
9
|
+
server {
|
|
10
|
+
listen 80;
|
|
11
|
+
server_name _;
|
|
12
|
+
root /usr/share/nginx/html;
|
|
13
|
+
index index.html;
|
|
14
|
+
|
|
15
|
+
gzip_static on;
|
|
16
|
+
# brotli_static on; # requires ngx_brotli module
|
|
17
|
+
|
|
18
|
+
gzip on;
|
|
19
|
+
gzip_types text/plain text/css application/javascript application/json image/svg+xml;
|
|
20
|
+
gzip_min_length 1024;
|
|
21
|
+
gzip_comp_level 6;
|
|
22
|
+
|
|
23
|
+
location ^~ /assets/ {
|
|
24
|
+
add_header Cache-Control "public, max-age=31536000, immutable";
|
|
25
|
+
try_files $uri =404;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
location ~* \.html$ {
|
|
29
|
+
add_header Cache-Control "no-cache, must-revalidate";
|
|
30
|
+
try_files $uri =404;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
location ~* \.(svg|png|jpe?g|gif|ico|webp|avif|woff2?)$ {
|
|
34
|
+
add_header Cache-Control "public, max-age=86400";
|
|
35
|
+
try_files $uri =404;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
location / {
|
|
39
|
+
add_header Cache-Control "no-cache, must-revalidate";
|
|
40
|
+
try_files $uri $uri/ /index.html;
|
|
41
|
+
}
|
|
42
|
+
}
|