@invisibleloop/pulse 0.20.11 → 0.20.20
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/package.json +6 -5
- package/public/.pulse-ui-version +1 -1
- package/scripts/build.js +26 -0
- package/scripts/release-version.js +17 -8
- package/scripts/strip-server.test.js +60 -0
- package/src/agent/checklist.md +8 -12
- package/src/agent/commands/pulse-start.md +2 -0
- package/src/agent/commands/verify.md +30 -8
- package/src/agent/guide-components.md +7 -25
- package/src/agent/guide-routing.md +0 -12
- package/src/agent/guide-server.md +102 -1
- package/src/agent/guide-spec.md +8 -1
- package/src/agent/guide-styles.md +23 -0
- package/src/agent/identity.md +9 -0
- package/src/agent/workflow.md +4 -23
- package/src/cli/check-bundles.js +113 -0
- package/src/cli/check-bundles.test.js +137 -0
- package/src/cli/cli.test.js +105 -0
- package/src/cli/dev.js +48 -3
- package/src/cli/diagnose.js +105 -0
- package/src/cli/diagnose.test.js +124 -0
- package/src/cli/discover.js +9 -2
- package/src/cli/index.js +171 -9
- package/src/cli/process-utils.js +57 -0
- package/src/cli/process-utils.test.js +114 -0
- package/src/cli/review.js +391 -0
- package/src/cli/review.test.js +143 -0
- package/src/cli/scaffold.js +9 -4
- package/src/cli/stamp.js +102 -0
- package/src/cli/stamp.test.js +149 -0
- package/src/cli/start.js +15 -2
- package/src/cli/validate.js +184 -0
- package/src/cli/validate.test.js +153 -0
- package/src/mcp/mcp.test.js +261 -30
- package/src/mcp/server.js +207 -515
- package/src/mcp/validate-worker.js +18 -1
- package/src/runtime/index.js +144 -11
- package/src/runtime/runtime.test.js +199 -0
- package/src/runtime/ssr.js +13 -6
- package/src/runtime/ssr.test.js +31 -0
- package/src/server/index.js +162 -9
- package/src/server/server.test.js +225 -2
- package/src/spec/schema.js +1 -1
- package/src/ui/index.js +0 -5
- package/src/ui/ui.test.js +0 -75
- package/types/ui.d.ts +0 -21
- package/.claude/commands/build-page.md +0 -63
- package/.claude/commands/new-doc-page.md +0 -45
- package/.claude/commands/pulse-start.md +0 -11
- package/.claude/commands/pulse-stop.md +0 -5
- package/.claude/commands/verify.md +0 -118
- package/.claude/pulse-checklist.md +0 -189
- package/.github/workflows/ci.yml +0 -25
- package/.github/workflows/publish.yml +0 -45
- package/.pulse/load-reports/home/1773432711417.json +0 -22
- package/.pulse-verified +0 -1
- package/AGENTS.md +0 -697
- package/CLAUDE.md +0 -697
- package/README.md +0 -95
- package/benchmark/public/dist/counter.boot-PO6SNSJZ.js +0 -8
- package/benchmark/public/dist/home.boot-YK6VAEQI.js +0 -6
- package/benchmark/public/dist/manifest.json +0 -5
- package/benchmark/public/dist/runtime-5Y7ESAIB.js +0 -2
- package/benchmark/public/dist/runtime-KO4BHUQ3.js +0 -49
- package/benchmark/results/2026-03-27-09-20.json +0 -188
- package/benchmark/results/2026-03-27-09-21.json +0 -188
- package/benchmark/results/2026-03-27-09-29.json +0 -188
- package/benchmark/results/2026-03-27-10-14.json +0 -188
- package/benchmark/results/2026-03-27-10-18.json +0 -232
- package/benchmark/src/pages/counter.js +0 -37
- package/benchmark/src/pages/home.js +0 -21
- package/docs/.claude/commands/pulse-build.md +0 -7
- package/docs/.claude/commands/pulse-dev.md +0 -7
- package/docs/.claude/commands/pulse-start.md +0 -9
- package/docs/.claude/commands/pulse-stop.md +0 -5
- package/docs/.claude/commands/verify.md +0 -84
- package/docs/.claude/coverage-check.js +0 -196
- package/docs/.claude/pulse-checklist.md +0 -189
- package/docs/public/.pulse-ui-version +0 -1
- package/docs/public/andypixel.css +0 -237
- package/docs/public/bookworms.css +0 -422
- package/docs/public/coutumes.css +0 -561
- package/docs/public/docs.css +0 -2388
- package/docs/public/favicon.svg +0 -4
- package/docs/public/home-brut.css +0 -982
- package/docs/public/images/bookworms/hero-books.jpg +0 -0
- package/docs/public/images/bookworms/how-we-read-now.jpg +0 -0
- package/docs/public/images/bookworms/lantern-keepers.jpg +0 -0
- package/docs/public/images/bookworms/provincial-bookseller.jpg +0 -0
- package/docs/public/images/journey/178.jpg +0 -0
- package/docs/public/images/journey/29.jpg +0 -0
- package/docs/public/images/retrowheels/hero.jpg +0 -0
- package/docs/public/images/shop/devbook-pro.jpg +0 -0
- package/docs/public/images/suzukibento/1015.jpg +0 -0
- package/docs/public/images/suzukibento/1025.jpg +0 -0
- package/docs/public/images/suzukibento/1043.jpg +0 -0
- package/docs/public/images/suzukibento/1059.jpg +0 -0
- package/docs/public/images/suzukibento/1062.jpg +0 -0
- package/docs/public/images/suzukibento/1084.jpg +0 -0
- package/docs/public/images/swish/1469334031218-e382a71b716b.jpg +0 -0
- package/docs/public/images/swish/1483985988355-763728e1935b.jpg +0 -0
- package/docs/public/images/swish/1485518882345-15568b007407.jpg +0 -0
- package/docs/public/images/swish/1490481651871-ab68de25d43d.jpg +0 -0
- package/docs/public/images/swish/1496747611176-843222e1e57c.jpg +0 -0
- package/docs/public/images/swish/1502716119720-b23a93e5fe1b.jpg +0 -0
- package/docs/public/images/swish/1539109136881-3be0616acf4b.jpg +0 -0
- package/docs/public/images/swish/1551803091-e20673f15770.jpg +0 -0
- package/docs/public/images/swish/1558769132-cb1aea458c5e.jpg +0 -0
- package/docs/public/images/swish/1572804013309-59a88b7e92f1.jpg +0 -0
- package/docs/public/img/heic1501a.jpg +0 -0
- package/docs/public/img/placeholder-landscape.svg +0 -18
- package/docs/public/img/placeholder-square.svg +0 -14
- package/docs/public/img/placeholder-tall.svg +0 -22
- package/docs/public/journey.css +0 -528
- package/docs/public/menu.js +0 -327
- package/docs/public/pulse-ui.css +0 -3028
- package/docs/public/pulse-ui.js +0 -257
- package/docs/public/retrowheels.css +0 -425
- package/docs/public/shop.css +0 -269
- package/docs/public/sparkys.css +0 -382
- package/docs/public/suzukibento.css +0 -517
- package/docs/public/swish.css +0 -394
- package/docs/public/theme.css +0 -52
- package/docs/public/themes/lumio.css +0 -50
- package/docs/public/themes/observatory.css +0 -104
- package/docs/server.js +0 -161
- package/docs/src/lib/component-page.js +0 -49
- package/docs/src/lib/highlight.js +0 -2
- package/docs/src/lib/layout.js +0 -190
- package/docs/src/lib/metrics-store.js +0 -6
- package/docs/src/lib/nav.js +0 -171
- package/docs/src/lib/stats.js +0 -81
- package/docs/src/pages/accessibility.js +0 -157
- package/docs/src/pages/actions.js +0 -194
- package/docs/src/pages/auth.js +0 -176
- package/docs/src/pages/caching.js +0 -95
- package/docs/src/pages/components/accordion.js +0 -48
- package/docs/src/pages/components/alert.js +0 -35
- package/docs/src/pages/components/app-badge.js +0 -41
- package/docs/src/pages/components/avatar.js +0 -35
- package/docs/src/pages/components/badge.js +0 -36
- package/docs/src/pages/components/breadcrumbs.js +0 -94
- package/docs/src/pages/components/button.js +0 -84
- package/docs/src/pages/components/card.js +0 -225
- package/docs/src/pages/components/charts.js +0 -283
- package/docs/src/pages/components/checkbox.js +0 -129
- package/docs/src/pages/components/cluster.js +0 -47
- package/docs/src/pages/components/container.js +0 -40
- package/docs/src/pages/components/cta.js +0 -54
- package/docs/src/pages/components/divider.js +0 -37
- package/docs/src/pages/components/empty.js +0 -36
- package/docs/src/pages/components/feature.js +0 -60
- package/docs/src/pages/components/fieldset.js +0 -65
- package/docs/src/pages/components/fileupload.js +0 -128
- package/docs/src/pages/components/footer.js +0 -58
- package/docs/src/pages/components/grid.js +0 -169
- package/docs/src/pages/components/heading.js +0 -107
- package/docs/src/pages/components/hero.js +0 -123
- package/docs/src/pages/components/icons.js +0 -410
- package/docs/src/pages/components/image.js +0 -71
- package/docs/src/pages/components/input.js +0 -51
- package/docs/src/pages/components/media.js +0 -51
- package/docs/src/pages/components/modal.js +0 -111
- package/docs/src/pages/components/nav.js +0 -136
- package/docs/src/pages/components/phone-frame.js +0 -74
- package/docs/src/pages/components/progress.js +0 -102
- package/docs/src/pages/components/prose.js +0 -111
- package/docs/src/pages/components/pullquote.js +0 -71
- package/docs/src/pages/components/radio.js +0 -194
- package/docs/src/pages/components/rating.js +0 -106
- package/docs/src/pages/components/search.js +0 -61
- package/docs/src/pages/components/section.js +0 -98
- package/docs/src/pages/components/segmented.js +0 -121
- package/docs/src/pages/components/select.js +0 -45
- package/docs/src/pages/components/slider.js +0 -115
- package/docs/src/pages/components/spinner.js +0 -73
- package/docs/src/pages/components/stack.js +0 -48
- package/docs/src/pages/components/stat.js +0 -55
- package/docs/src/pages/components/stepper.js +0 -66
- package/docs/src/pages/components/table.js +0 -45
- package/docs/src/pages/components/textarea.js +0 -31
- package/docs/src/pages/components/toggle.js +0 -84
- package/docs/src/pages/components/tooltip.js +0 -48
- package/docs/src/pages/components.js +0 -200
- package/docs/src/pages/config.js +0 -193
- package/docs/src/pages/constraints.js +0 -100
- package/docs/src/pages/deploy.js +0 -233
- package/docs/src/pages/error-pages.js +0 -99
- package/docs/src/pages/extending.js +0 -198
- package/docs/src/pages/faq.js +0 -99
- package/docs/src/pages/forms.js +0 -129
- package/docs/src/pages/getting-started.js +0 -147
- package/docs/src/pages/guard.js +0 -120
- package/docs/src/pages/home.js +0 -350
- package/docs/src/pages/how-it-works.js +0 -244
- package/docs/src/pages/hydration.js +0 -108
- package/docs/src/pages/images.js +0 -120
- package/docs/src/pages/markdown.js +0 -156
- package/docs/src/pages/meta.js +0 -193
- package/docs/src/pages/mutations.js +0 -107
- package/docs/src/pages/navigation.js +0 -85
- package/docs/src/pages/performance.js +0 -157
- package/docs/src/pages/persist.js +0 -89
- package/docs/src/pages/project-structure.js +0 -91
- package/docs/src/pages/prompt-examples.js +0 -186
- package/docs/src/pages/raw-responses.js +0 -122
- package/docs/src/pages/routing.js +0 -120
- package/docs/src/pages/server-api.js +0 -291
- package/docs/src/pages/server-data.js +0 -203
- package/docs/src/pages/slash-commands.js +0 -55
- package/docs/src/pages/spec.js +0 -207
- package/docs/src/pages/state.js +0 -102
- package/docs/src/pages/store.js +0 -203
- package/docs/src/pages/streaming.js +0 -107
- package/docs/src/pages/stripe.js +0 -194
- package/docs/src/pages/supabase.js +0 -324
- package/docs/src/pages/templates/andypixel.js +0 -260
- package/docs/src/pages/templates/blog-post.js +0 -226
- package/docs/src/pages/templates/bookworms.js +0 -227
- package/docs/src/pages/templates/coutumes.js +0 -237
- package/docs/src/pages/templates/journey.js +0 -186
- package/docs/src/pages/templates/mobile-app.js +0 -371
- package/docs/src/pages/templates/retrowheels.js +0 -355
- package/docs/src/pages/templates/shop.js +0 -268
- package/docs/src/pages/templates/sparkys.js +0 -264
- package/docs/src/pages/templates/suzukibento.js +0 -200
- package/docs/src/pages/templates/swish.js +0 -313
- package/docs/src/pages/templates.js +0 -534
- package/docs/src/pages/testing.js +0 -199
- package/docs/src/pages/validation.js +0 -138
- package/examples/.claude/commands/pulse-build.md +0 -7
- package/examples/.claude/commands/pulse-dev.md +0 -7
- package/examples/.claude/commands/pulse-start.md +0 -9
- package/examples/.claude/commands/pulse-stop.md +0 -5
- package/examples/.claude/commands/verify.md +0 -84
- package/examples/.claude/coverage-check.js +0 -196
- package/examples/.claude/pulse-checklist.md +0 -189
- package/examples/andypixel.css +0 -237
- package/examples/andypixel.js +0 -258
- package/examples/bookworms.css +0 -422
- package/examples/bookworms.js +0 -225
- package/examples/contact.js +0 -166
- package/examples/counter.js +0 -94
- package/examples/dev.server.js +0 -110
- package/examples/examples.test.js +0 -394
- package/examples/journey.css +0 -528
- package/examples/journey.js +0 -186
- package/examples/pricing.js +0 -262
- package/examples/products.js +0 -190
- package/examples/public/.pulse-ui-version +0 -1
- package/examples/public/pulse-ui.css +0 -3028
- package/examples/public/pulse-ui.js +0 -257
- package/examples/quiz.js +0 -208
- package/examples/retrowheels.css +0 -425
- package/examples/retrowheels.js +0 -353
- package/examples/shared.js +0 -84
- package/examples/suzukibento.css +0 -513
- package/examples/suzukibento.js +0 -200
- package/examples/swish.css +0 -394
- package/examples/swish.js +0 -311
- package/examples/todos.js +0 -162
- package/src/ui/fieldset.js +0 -37
- package/src/ui/phone-frame.js +0 -40
- package/src/ui/search.js +0 -78
- package/src/ui/segmented.js +0 -50
- package/src/ui/tooltip.js +0 -28
package/README.md
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
# Pulse
|
|
2
|
-
|
|
3
|
-
**A spec-first, AI-native web framework.** Early access.
|
|
4
|
-
|
|
5
|
-
Write a plain JavaScript object that describes what a page does. Pulse handles routing, SSR, hydration, client-side navigation, compression, security headers, and caching automatically.
|
|
6
|
-
|
|
7
|
-
```js
|
|
8
|
-
export default {
|
|
9
|
-
route: '/counter',
|
|
10
|
-
meta: {
|
|
11
|
-
title: 'Counter',
|
|
12
|
-
styles: ['/app.css'],
|
|
13
|
-
},
|
|
14
|
-
|
|
15
|
-
state: { count: 0 },
|
|
16
|
-
|
|
17
|
-
constraints: {
|
|
18
|
-
count: { min: 0, max: 10 },
|
|
19
|
-
},
|
|
20
|
-
|
|
21
|
-
view: (state) => `
|
|
22
|
-
<main id="main-content">
|
|
23
|
-
<p>${state.count}</p>
|
|
24
|
-
<button data-event="decrement">−</button>
|
|
25
|
-
<button data-event="increment">+</button>
|
|
26
|
-
</main>
|
|
27
|
-
`,
|
|
28
|
-
|
|
29
|
-
mutations: {
|
|
30
|
-
increment: (state) => ({ count: state.count + 1 }),
|
|
31
|
-
decrement: (state) => ({ count: state.count - 1 }),
|
|
32
|
-
},
|
|
33
|
-
}
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## Requirements
|
|
37
|
-
|
|
38
|
-
Node.js 22 or later.
|
|
39
|
-
|
|
40
|
-
## Getting started
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
npm install -g @invisibleloop/pulse
|
|
44
|
-
mkdir my-project && cd my-project
|
|
45
|
-
pulse
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
Running `pulse` in an empty directory scaffolds a new project and starts an AI coding session. Your agent has MCP tools and slash commands available from the first prompt.
|
|
49
|
-
|
|
50
|
-
Full documentation: **[pulseframework.dev](https://pulseframework.dev)**
|
|
51
|
-
|
|
52
|
-
## Key ideas
|
|
53
|
-
|
|
54
|
-
**The spec is the source of truth.** Every page is a single JS object — data fetching, state, mutations, async actions, and view all in one place. No separate files for routes, controllers, or templates.
|
|
55
|
-
|
|
56
|
-
**Performance is built in.** Streaming SSR, immutable asset caching, and zero layout shift are automatic. Every scaffolded project targets Lighthouse 100 for Accessibility, Best Practices, and SEO — and is fast by design (streaming HTML before data resolves, CLS 0.00).
|
|
57
|
-
|
|
58
|
-
**No client-side dependencies.** Pulse ships no runtime framework to the browser — only a small hydration bundle (~2 kB brotli) that binds your spec's mutations and actions to the DOM.
|
|
59
|
-
|
|
60
|
-
**AI-native.** The CLI starts an MCP server alongside the dev server, giving the coding agent tools to create pages, validate specs, and run Lighthouse audits — all without leaving the editor.
|
|
61
|
-
|
|
62
|
-
## CLI
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
pulse # scaffold a new project or start AI session
|
|
66
|
-
pulse dev # dev server (default port 3000)
|
|
67
|
-
pulse build # production build → public/dist/
|
|
68
|
-
pulse start # production server
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
## Docs
|
|
72
|
-
|
|
73
|
-
Full reference at [pulseframework.dev](https://pulseframework.dev):
|
|
74
|
-
|
|
75
|
-
- **Getting started** — install, scaffold, first page
|
|
76
|
-
- **The spec** — full reference for every property
|
|
77
|
-
- **State, mutations, actions** — client interactivity
|
|
78
|
-
- **Server data** — async data fetching before render
|
|
79
|
-
- **Routing** — dynamic routes and URL params
|
|
80
|
-
- **Streaming SSR** — shell + deferred segments
|
|
81
|
-
- **Caching** — per-page TTL and HTTP cache headers
|
|
82
|
-
- **Guard** — authentication and authorisation before data fetches
|
|
83
|
-
- **Validation & constraints** — declarative form validation and state bounds
|
|
84
|
-
- **Raw responses** — RSS feeds, sitemaps, JSON APIs
|
|
85
|
-
- **Markdown** — built-in parser for blog posts and docs pages, zero browser JS
|
|
86
|
-
- **Performance** — how the framework hits Lighthouse 100
|
|
87
|
-
- **UI components** — 50+ built-in components
|
|
88
|
-
|
|
89
|
-
## Status
|
|
90
|
-
|
|
91
|
-
This is an early-access release. The core architecture is stable and production-quality, but the API may evolve before v1. Feedback and issues welcome on [GitHub](https://github.com/invisibleloop/pulse-framework).
|
|
92
|
-
|
|
93
|
-
## License
|
|
94
|
-
|
|
95
|
-
MIT
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import{a as n,b as u}from"./runtime-5Y7ESAIB.js";var o={route:"/counter",hydrate:"/src/pages/counter.js",meta:{title:"Counter \u2014 Pulse Benchmark",styles:["/pulse.css"]},state:{count:0},constraints:{count:{min:0,max:10}},mutations:{increment:t=>({count:t.count+1}),decrement:t=>({count:t.count-1})},view:(t,r)=>`
|
|
2
|
-
<main id="main-content">
|
|
3
|
-
<p>${r.greeting}</p>
|
|
4
|
-
<p>Count: ${t.count}</p>
|
|
5
|
-
<button data-event="decrement">\u2212</button>
|
|
6
|
-
<button data-event="increment">+</button>
|
|
7
|
-
</main>
|
|
8
|
-
`};var e=document.getElementById("pulse-root");e&&!e.dataset.pulseMounted&&(e.dataset.pulseMounted="1",n(o,e,window.__PULSE_SERVER__||{},{ssr:!0}),u(e,n));var m=o;export{m as default};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import{a as e,b as i}from"./runtime-5Y7ESAIB.js";var o={route:"/home",meta:{title:"Home \u2014 Pulse Benchmark",styles:["/pulse.css"]},state:{},view:()=>`
|
|
2
|
-
<main id="main-content">
|
|
3
|
-
<h1>Pulse Benchmark</h1>
|
|
4
|
-
<p>Static page \u2014 no client-side interactivity.</p>
|
|
5
|
-
</main>
|
|
6
|
-
`};var t=document.getElementById("pulse-root");t&&!t.dataset.pulseMounted&&(t.dataset.pulseMounted="1",e(o,t,window.__PULSE_SERVER__||{},{ssr:!0}),i(t,e));var r=o;export{r as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var E={},V=!1,R={},D=!1,k=new Set;function U(t){V||(E={...t||{}},V=!0)}function q(){return E}function K(t){return k.add(t),()=>k.delete(t)}function P(t){E={...E,...t};for(let o of k)o(E)}function H(t){D||(R=t||{},D=!0)}function N(t,o){let r=R[t];if(!r){console.warn(`[Pulse] No store mutation found for "${t}"`);return}P(r(E,o))}var T=t=>import("./runtime-KO4BHUQ3.js").then(o=>o.showToast(t));function ft(t,o,r={},s={}){if(!t||t.state===void 0||!t.view)throw new Error("[Pulse] mount: spec must have state and view");typeof window<"u"&&(U(window.__PULSE_STORE__||{}),s.store?.mutations&&H(s.store.mutations));let e=new Set(t.store||[]),i={};for(let[u,c]of Object.entries(r))e.has(u)||(i[u]=c);function a(){if(!e.size)return i;let u=q(),c={};for(let w of e)u[w]!==void 0&&(c[w]=u[w]);return{...c,...i}}let n=z(t.state),h=t.persist?.length?`pulse:${t.route||location.pathname}`:null,y=!1;if(h)try{let u=JSON.parse(localStorage.getItem(h)||"{}");t.persist.forEach(c=>{u[c]!==void 0&&u[c]!==t.state[c]&&(n[c]=u[c],y=!0)})}catch{}function d(){if(h)try{let u={};t.persist.forEach(c=>{u[c]=n[c]}),localStorage.setItem(h,JSON.stringify(u))}catch{}}let m=null;function f(){let u;try{u=Z(t,n,a())}catch(c){console.error("[Pulse] View error:",c);let w=a();u=t.onViewError?t.onViewError(c,n,w):ot(c)}u!==m&&(m=u,et(o,u))}function S(u,c){if(t.mutations?.[u]){let w=t.mutations[u](n,c);w?._toast&&T(w._toast);let{_toast:C,...g}=w??{},p=n;n=x({...n,...g},t.constraints),d(),$(p,n)&&f();return}if(t.actions?.[u]){b(u,t.actions[u],n,c);return}console.warn(`[Pulse] No mutation or action found for "${u}"`)}async function b(u,c,w,C){if(c.onStart){let g=c.onStart(w,C);g?._toast&&T(g._toast);let{_toast:p,...M}=g??{},_=n;n=x({...n,...M},t.constraints),$(_,n)&&f()}if(c.validate){let g=rt(n,t.validation);if(g.length>0){console.warn(`[Pulse] Validation failed for action "${u}":`,g);let p=c.onError?.(n,{validation:g})??{};p._toast&&T(p._toast);let{_toast:M,..._}=p,L=n;n=x({...n,..._},t.constraints),$(L,n)&&f();return}}try{let g=await c.run(n,a(),C),p=c.onSuccess(n,g)??{};p._storeUpdate&&P(p._storeUpdate),p._toast&&T(p._toast);let{_storeUpdate:M,_toast:_,...L}=p,Y=n;n=x({...n,...L},t.constraints),$(Y,n)&&f()}catch(g){console.error(`[Pulse] Action "${u}" failed:`,g);let p=c.onError(n,g)??{};p._toast&&T(p._toast);let{_toast:M,..._}=p,L=n;n=x({...n,..._},t.constraints),$(L,n)&&f()}d()}let v=new AbortController;tt(o,S,v.signal);let l=e.size>0?K(()=>f()):null;return s.ssr&&!y||f(),{getState:()=>z(n),dispatch:S,refresh:f,destroy:()=>{l?.(),v.abort(),o.innerHTML=""}}}function Z(t,o,r){return typeof t.view=="function"?t.view(o,r):Object.values(t.view).map(s=>s(o,r)).join("")}function tt(t,o,r){let s=r?{signal:r}:{};t.addEventListener("click",e=>{let i=e.target?.closest?.("[data-store-event]");if(i){let[m,f]=A(i.dataset.storeEvent);m==="click"&&(e.preventDefault(),N(f,e));return}let a=e.target?.closest?.("[data-dialog-open]");if(a){let m=document.getElementById(a.dataset.dialogOpen);m?.showModal&&(e.preventDefault(),m.showModal());return}let n=e.target?.closest?.("[data-dialog-close]");if(n){let m=n.closest("dialog");m&&(e.preventDefault(),m.close());return}if(e.target?.tagName==="DIALOG"){e.target.close();return}let h=e.target?.closest?.("[data-event]");if(!h)return;let[y,d]=A(h.dataset.event);y==="click"&&(e.preventDefault(),o(d,e))},s),t.addEventListener("change",e=>{let i=e.target?.closest?.("[data-store-event]");if(i){let[y,d]=A(i.dataset.storeEvent);y==="change"&&N(d,e);return}let a=e.target?.closest?.("[data-event]");if(!a)return;let[n,h]=A(a.dataset.event);n==="change"&&I(a,h,e,o)},s),t.addEventListener("input",e=>{let i=e.target?.closest?.("[data-store-event]");if(i){let[y,d]=A(i.dataset.storeEvent);y==="input"&&N(d,e);return}let a=e.target?.closest?.("[data-event]");if(!a)return;let[n,h]=A(a.dataset.event);n==="input"&&I(a,h,e,o)},s),t.addEventListener("submit",e=>{let i=e.target?.closest?.("[data-action]");i&&(e.preventDefault(),o(i.dataset.action,new FormData(i)),i.hasAttribute("data-reset")&&i.reset())},s)}function et(t,o){if(typeof document>"u"){t.innerHTML=o;return}let r=document.createElement("div");r.innerHTML=o,O(t,r)}function O(t,o){let r=Array.from(o.childNodes),s=r.filter(i=>i.nodeType===1);if(s.length>0&&s.every(i=>i.getAttribute("data-key")!==null)){nt(t,s);return}let e=Array.from(t.childNodes);for(r.forEach((i,a)=>{let n=e[a];if(!n){t.appendChild(i.cloneNode(!0));return}if(n.nodeType!==i.nodeType||n.nodeName!==i.nodeName){t.replaceChild(i.cloneNode(!0),n);return}if(i.nodeType===3){n.nodeValue!==i.nodeValue&&(n.nodeValue=i.nodeValue);return}i.nodeType===1&&(B(n,i),O(n,i))});t.childNodes.length>r.length;)t.removeChild(t.lastChild)}function nt(t,o){let r=new Map;for(let e of t.childNodes)if(e.nodeType===1){let i=e.getAttribute("data-key");i!==null&&r.set(i,e)}let s=null;for(let e=o.length-1;e>=0;e--){let i=o[e],a=i.getAttribute("data-key"),n=r.get(a);n?(r.delete(a),B(n,i),O(n,i)):n=i.cloneNode(!0),(n.nextSibling!==s||n.parentNode!==t)&&t.insertBefore(n,s),s=n}for(let e of r.values())t.removeChild(e)}function B(t,o){for(let{name:r,value:s}of Array.from(o.attributes))t.getAttribute(r)!==s&&t.setAttribute(r,s);for(let{name:r}of Array.from(t.attributes))o.hasAttribute(r)||t.removeAttribute(r)}function A(t){let o=t.split(":");return o.length===1?["click",o[0]]:[o[0],o[1]]}function I(t,o,r,s){let e=parseInt(t.dataset.debounce,10);if(e>0){J(t,"d",o,e,a=>s(o,a))(r);return}let i=parseInt(t.dataset.throttle,10);if(i>0){J(t,"t",o,i,a=>s(o,a))(r);return}s(o,r)}function x(t,o){if(!o)return t;let s=Object.keys(o).some(e=>e.includes("."))?structuredClone(t):t;for(let[e,i]of Object.entries(o)){let{obj:a,key:n}=F(s,e);a===null||a[n]===void 0||(i.min!==void 0&&typeof a[n]=="number"&&(a[n]=Math.max(a[n],i.min)),i.max!==void 0&&typeof a[n]=="number"&&(a[n]=Math.min(a[n],i.max)))}return s}function rt(t,o){if(!o)return[];let r=[];for(let[s,e]of Object.entries(o)){let{obj:i,key:a}=F(t,s),n=i?.[a];if(e.required&&!n){r.push({path:s,rule:"required",message:`${s} is required`});continue}n==null||n===""||(e.minLength!==void 0&&String(n).length<e.minLength&&r.push({path:s,rule:"minLength",message:`${s} must be at least ${e.minLength} characters`}),e.maxLength!==void 0&&String(n).length>e.maxLength&&r.push({path:s,rule:"maxLength",message:`${s} must be no more than ${e.maxLength} characters`}),e.min!==void 0&&Number(n)<e.min&&r.push({path:s,rule:"min",message:`${s} must be at least ${e.min}`}),e.max!==void 0&&Number(n)>e.max&&r.push({path:s,rule:"max",message:`${s} must be no more than ${e.max}`}),e.format==="email"&&!st(String(n))&&r.push({path:s,rule:"format",message:`${s} must be a valid email address`}),e.format==="url"&&!ut(String(n))&&r.push({path:s,rule:"format",message:`${s} must be a valid URL`}),e.format==="numeric"&&isNaN(Number(n))&&r.push({path:s,rule:"format",message:`${s} must be numeric`}),e.pattern&&!e.pattern.test(String(n))&&r.push({path:s,rule:"pattern",message:`${s} does not match the required format`}))}return r}function F(t,o){let r=o.split("."),s=r.pop(),e=t;for(let i of r){if(e==null||typeof e!="object")return{obj:null,key:s};e=e[i]}return{obj:e,key:s}}function z(t){return structuredClone(t)}function $(t,o){if(t===o)return!1;let r=Object.keys(t);return r.length!==Object.keys(o).length?!0:r.some(s=>t[s]!==o[s])}function ot(t){return`<div style="padding:1rem;color:#b91c1c;background:#fef2f2;border:1px solid #fca5a5;border-radius:.375rem;font-family:monospace;font-size:.875rem"><strong>View error</strong>${t?.message?`: ${t.message}`:""}</div>`}function st(t){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)}var j=new WeakMap;function J(t,o,r,s,e){j.has(t)||j.set(t,{});let i=j.get(t),a=`${o}:${r}:${s}`;return i[a]||(i[a]=o==="d"?it(e,s):at(e,s)),i[a]}function it(t,o){let r;return function(...s){clearTimeout(r),r=setTimeout(()=>t(...s),o)}}function at(t,o){let r=0;return function(...s){let e=Date.now();e-r>=o&&(r=e,t(...s))}}function ut(t){try{return new URL(t),!0}catch{return!1}}function mt(t,o){history.replaceState({pulse:!0,path:location.pathname},"",location.pathname);let r=null;async function s(e,i){try{let a=await fetch(e,{headers:{"X-Pulse-Navigate":"true"}});if(!a.ok){location.href=e;return}if((a.headers.get("content-type")||"").includes("application/x-ndjson")){let h=a.body.getReader(),y=new TextDecoder,d="",m=null,f={},S=new Map,b=async v=>{if(!v.trim())return;let l=JSON.parse(v);if(l.type==="meta")m=l.hydrate,document.title=l.title||document.title,G(l.styles),await X(l.scripts);else if(l.type==="html"){t.innerHTML=l.html;for(let u of l.deferred||[]){let c=t.querySelector(`[id="pd-${u}"]`);c&&S.set(u,c)}i&&history.pushState({pulse:!0,path:e},"",e),Q(t)}else if(l.type==="deferred"){let u=S.get(l.id);if(u){let c=document.createElement("div");c.innerHTML=l.html,u.replaceWith(...c.childNodes),S.delete(l.id)}}else l.type==="done"&&(l.storeState&&window.__updatePulseStore__&&window.__updatePulseStore__(l.storeState),f=l.serverState||{})};for(;;){let{done:v,value:l}=await h.read();if(v)break;d+=y.decode(l,{stream:!0});let u=d.split(`
|
|
2
|
-
`);d=u.pop();for(let c of u)await b(c)}if(d&&await b(d),W(t),document.dispatchEvent(new CustomEvent("pulse:navigate")),m&&o){r?.destroy(),t.dataset.pulseMounted="1",window.__PULSE_SERVER__=f;let{default:v}=await import(m);v&&(r=o(v,t,f))}}else{let{html:h,title:y,styles:d,scripts:m,hydrate:f,serverState:S,storeState:b}=await a.json();if(b&&window.__updatePulseStore__&&window.__updatePulseStore__(b),t.innerHTML=h,document.title=y||document.title,G(d),await X(m),W(t),i&&history.pushState({pulse:!0,path:e},"",e),f&&o){r?.destroy(),t.dataset.pulseMounted="1",window.__PULSE_SERVER__=S||{};let{default:v}=await import(f);v&&(r=o(v,t,S||{}))}document.dispatchEvent(new CustomEvent("pulse:navigate")),Q(t)}}catch{location.href=e}}return document.addEventListener("click",e=>{let i=e.target.closest("a");if(!i)return;let a=i.getAttribute("href");if(!a)return;let n;try{n=new URL(a,location.origin)}catch{return}n.origin===location.origin&&(e.ctrlKey||e.metaKey||e.shiftKey||e.altKey||i.target&&i.target!=="_self"||(e.preventDefault(),s(n.pathname+n.search,!0)))}),window.addEventListener("popstate",e=>{e.state?.pulse&&s(location.pathname+location.search,!1)}),{setMount:e=>{r=e}}}function W(t){t.querySelectorAll("script:not([src])").forEach(o=>{let r=document.createElement("script");r.textContent=o.textContent,document.head.appendChild(r),r.remove()})}function G(t){if(!Array.isArray(t))return;let o=new Set([...document.querySelectorAll('link[rel="stylesheet"]')].map(r=>r.getAttribute("href")));for(let r of t)if(!o.has(r)){let s=document.createElement("link");s.rel="stylesheet",s.href=r,document.head.appendChild(s)}}function X(t){if(!Array.isArray(t))return Promise.resolve();let o=new Set([...document.querySelectorAll("script[src]")].map(r=>r.getAttribute("src")));return Promise.all(t.filter(r=>!o.has(r)).map(r=>new Promise(s=>{let e=document.createElement("script");e.src=r,e.onload=s,e.onerror=s,document.head.appendChild(e)})))}function Q(t){window.scrollTo({top:0,behavior:"instant"});let o=t.querySelector("#main-content, main, h1")||t;o.hasAttribute("tabindex")||(o.setAttribute("tabindex","-1"),o.addEventListener("blur",()=>o.removeAttribute("tabindex"),{once:!0})),o.focus({preventScroll:!0})}export{ft as a,mt as b};
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
var l="pulse-toasts";var m=new Set(["success","error","warning","info"]),p=`
|
|
2
|
-
#pulse-toasts {
|
|
3
|
-
position: fixed;
|
|
4
|
-
top: 1rem;
|
|
5
|
-
right: 1rem;
|
|
6
|
-
z-index: 9999;
|
|
7
|
-
display: flex;
|
|
8
|
-
flex-direction: column;
|
|
9
|
-
gap: .5rem;
|
|
10
|
-
pointer-events: none;
|
|
11
|
-
max-width: min(24rem, calc(100vw - 2rem));
|
|
12
|
-
}
|
|
13
|
-
.pulse-toast {
|
|
14
|
-
display: flex;
|
|
15
|
-
align-items: flex-start;
|
|
16
|
-
gap: .75rem;
|
|
17
|
-
padding: .75rem 1rem;
|
|
18
|
-
border-radius: .5rem;
|
|
19
|
-
box-shadow: 0 4px 16px rgba(0,0,0,.2);
|
|
20
|
-
font-size: .875rem;
|
|
21
|
-
line-height: 1.4;
|
|
22
|
-
pointer-events: all;
|
|
23
|
-
opacity: 0;
|
|
24
|
-
transform: translateX(calc(100% + 1.5rem));
|
|
25
|
-
transition: opacity .2s ease, transform .2s ease;
|
|
26
|
-
background: #1e293b;
|
|
27
|
-
color: #f8fafc;
|
|
28
|
-
}
|
|
29
|
-
.pulse-toast--visible {
|
|
30
|
-
opacity: 1;
|
|
31
|
-
transform: translateX(0);
|
|
32
|
-
}
|
|
33
|
-
.pulse-toast--success { background: #166534; }
|
|
34
|
-
.pulse-toast--error { background: #991b1b; }
|
|
35
|
-
.pulse-toast--warning { background: #92400e; }
|
|
36
|
-
.pulse-toast-message { flex: 1; }
|
|
37
|
-
.pulse-toast-close {
|
|
38
|
-
background: none;
|
|
39
|
-
border: none;
|
|
40
|
-
color: inherit;
|
|
41
|
-
cursor: pointer;
|
|
42
|
-
padding: 0 0 0 .25rem;
|
|
43
|
-
font-size: 1.125rem;
|
|
44
|
-
line-height: 1;
|
|
45
|
-
opacity: .7;
|
|
46
|
-
flex-shrink: 0;
|
|
47
|
-
}
|
|
48
|
-
.pulse-toast-close:hover { opacity: 1; }
|
|
49
|
-
`,c=!1;function f(){if(c)return;c=!0;let e=document.createElement("style");e.textContent=p,document.head.appendChild(e)}function g(){let e=document.getElementById(l);return e||(f(),e=document.createElement("div"),e.id=l,e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","false"),document.body.appendChild(e)),e}function b(e){if(typeof document>"u")return;let{message:a,variant:i="info",duration:r=4e3}=typeof e=="string"?{message:e}:e;if(!a)return;let u=m.has(i)?i:"info",n=g();for(;n.children.length>=5;)n.firstElementChild?.remove();let t=document.createElement("div");t.className=`pulse-toast pulse-toast--${u}`,t.setAttribute("role","status");let o=document.createElement("span");o.className="pulse-toast-message",o.textContent=a;let s=document.createElement("button");s.className="pulse-toast-close",s.setAttribute("aria-label","Dismiss notification"),s.textContent="\xD7",s.addEventListener("click",()=>d(t)),t.appendChild(o),t.appendChild(s),n.appendChild(t),requestAnimationFrame(()=>t.classList.add("pulse-toast--visible")),r>0&&setTimeout(()=>d(t),r)}function d(e){e.classList.remove("pulse-toast--visible"),e.addEventListener("transitionend",()=>e.remove(),{once:!0})}export{b as showToast};
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"timestamp": "2026-03-27T09:20:25.195Z",
|
|
3
|
-
"node": "v22.19.0",
|
|
4
|
-
"suites": [
|
|
5
|
-
{
|
|
6
|
-
"label": "simple",
|
|
7
|
-
"path": "/bench/simple",
|
|
8
|
-
"iterations": 100,
|
|
9
|
-
"ttfb": {
|
|
10
|
-
"mean": 0.18965339000000087,
|
|
11
|
-
"p50": 0.17383399999999938,
|
|
12
|
-
"p95": 0.29887500000000955,
|
|
13
|
-
"p99": 0.3626250000000084,
|
|
14
|
-
"min": 0.14820799999998258,
|
|
15
|
-
"max": 0.3626250000000084
|
|
16
|
-
},
|
|
17
|
-
"total": {
|
|
18
|
-
"mean": 0.21540463999999956,
|
|
19
|
-
"p50": 0.19762500000001637,
|
|
20
|
-
"p95": 0.32587499999999636,
|
|
21
|
-
"p99": 0.40537499999999227,
|
|
22
|
-
"min": 0.16808299999999576,
|
|
23
|
-
"max": 0.40537499999999227
|
|
24
|
-
},
|
|
25
|
-
"bodyBytes": 1054,
|
|
26
|
-
"serverData": null,
|
|
27
|
-
"serverRender": null
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"label": "data-1",
|
|
31
|
-
"path": "/bench/data-1",
|
|
32
|
-
"iterations": 100,
|
|
33
|
-
"ttfb": {
|
|
34
|
-
"mean": 0.7174741700000027,
|
|
35
|
-
"p50": 0.6867910000000848,
|
|
36
|
-
"p95": 1.1546250000001237,
|
|
37
|
-
"p99": 1.5141250000001492,
|
|
38
|
-
"min": 0.26679200000012315,
|
|
39
|
-
"max": 1.5141250000001492
|
|
40
|
-
},
|
|
41
|
-
"total": {
|
|
42
|
-
"mean": 22.057245399999985,
|
|
43
|
-
"p50": 22.128749999999854,
|
|
44
|
-
"p95": 22.988791999999876,
|
|
45
|
-
"p99": 23.292291999999975,
|
|
46
|
-
"min": 20.543083000000024,
|
|
47
|
-
"max": 23.292291999999975
|
|
48
|
-
},
|
|
49
|
-
"bodyBytes": 4384,
|
|
50
|
-
"serverData": null,
|
|
51
|
-
"serverRender": null
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"label": "data-3",
|
|
55
|
-
"path": "/bench/data-3",
|
|
56
|
-
"iterations": 100,
|
|
57
|
-
"ttfb": {
|
|
58
|
-
"mean": 0.7575587300000006,
|
|
59
|
-
"p50": 0.7104169999997794,
|
|
60
|
-
"p95": 1.4852919999998448,
|
|
61
|
-
"p99": 1.7593329999999696,
|
|
62
|
-
"min": 0.2626669999999649,
|
|
63
|
-
"max": 1.7593329999999696
|
|
64
|
-
},
|
|
65
|
-
"total": {
|
|
66
|
-
"mean": 31.95738079999998,
|
|
67
|
-
"p50": 32.02441699999963,
|
|
68
|
-
"p95": 32.793916999999965,
|
|
69
|
-
"p99": 33.06345800000008,
|
|
70
|
-
"min": 30.259124999999585,
|
|
71
|
-
"max": 33.06345800000008
|
|
72
|
-
},
|
|
73
|
-
"bodyBytes": 1246,
|
|
74
|
-
"serverData": null,
|
|
75
|
-
"serverRender": null
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"label": "cached",
|
|
79
|
-
"path": "/bench/cached",
|
|
80
|
-
"iterations": 100,
|
|
81
|
-
"ttfb": {
|
|
82
|
-
"mean": 0.1528695300000345,
|
|
83
|
-
"p50": 0.13799999999991996,
|
|
84
|
-
"p95": 0.2255829999994603,
|
|
85
|
-
"p99": 0.48387499999989814,
|
|
86
|
-
"min": 0.09737500000028376,
|
|
87
|
-
"max": 0.48387499999989814
|
|
88
|
-
},
|
|
89
|
-
"total": {
|
|
90
|
-
"mean": 0.16491832000000614,
|
|
91
|
-
"p50": 0.14895900000010442,
|
|
92
|
-
"p95": 0.2435829999994894,
|
|
93
|
-
"p99": 0.49779099999977916,
|
|
94
|
-
"min": 0.10537500000009459,
|
|
95
|
-
"max": 0.49779099999977916
|
|
96
|
-
},
|
|
97
|
-
"bodyBytes": 988,
|
|
98
|
-
"serverData": null,
|
|
99
|
-
"serverRender": null
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
"label": "nav/simple",
|
|
103
|
-
"path": "/bench/simple",
|
|
104
|
-
"iterations": 100,
|
|
105
|
-
"ttfb": {
|
|
106
|
-
"mean": 0.13343495999998595,
|
|
107
|
-
"p50": 0.1262909999995827,
|
|
108
|
-
"p95": 0.19287500000064028,
|
|
109
|
-
"p99": 0.423333000000639,
|
|
110
|
-
"min": 0.08924999999999272,
|
|
111
|
-
"max": 0.423333000000639
|
|
112
|
-
},
|
|
113
|
-
"total": {
|
|
114
|
-
"mean": 0.14239336000002367,
|
|
115
|
-
"p50": 0.13475000000016735,
|
|
116
|
-
"p95": 0.20391700000072888,
|
|
117
|
-
"p99": 0.4311250000000655,
|
|
118
|
-
"min": 0.09600000000045839,
|
|
119
|
-
"max": 0.4311250000000655
|
|
120
|
-
},
|
|
121
|
-
"bodyBytes": 244,
|
|
122
|
-
"serverData": null,
|
|
123
|
-
"serverRender": null
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
"label": "nav/data-1",
|
|
127
|
-
"path": "/bench/data-1",
|
|
128
|
-
"iterations": 100,
|
|
129
|
-
"ttfb": {
|
|
130
|
-
"mean": 21.82076291000002,
|
|
131
|
-
"p50": 21.85304200000064,
|
|
132
|
-
"p95": 22.433207999999468,
|
|
133
|
-
"p99": 23.03662499999973,
|
|
134
|
-
"min": 20.698709000000235,
|
|
135
|
-
"max": 23.03662499999973
|
|
136
|
-
},
|
|
137
|
-
"total": {
|
|
138
|
-
"mean": 21.865540849999878,
|
|
139
|
-
"p50": 21.896166999998968,
|
|
140
|
-
"p95": 22.511749999999665,
|
|
141
|
-
"p99": 23.08691699999963,
|
|
142
|
-
"min": 20.723042000000532,
|
|
143
|
-
"max": 23.08691699999963
|
|
144
|
-
},
|
|
145
|
-
"bodyBytes": 3513,
|
|
146
|
-
"serverData": null,
|
|
147
|
-
"serverRender": null
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
"label": "nav/data-3",
|
|
151
|
-
"path": "/bench/data-3",
|
|
152
|
-
"iterations": 100,
|
|
153
|
-
"ttfb": {
|
|
154
|
-
"mean": 31.878054999999968,
|
|
155
|
-
"p50": 31.92083300000013,
|
|
156
|
-
"p95": 32.69962499999929,
|
|
157
|
-
"p99": 33.174958999999944,
|
|
158
|
-
"min": 30.299708999998984,
|
|
159
|
-
"max": 33.174958999999944
|
|
160
|
-
},
|
|
161
|
-
"total": {
|
|
162
|
-
"mean": 31.93094377999998,
|
|
163
|
-
"p50": 31.96887500000048,
|
|
164
|
-
"p95": 32.76958299999933,
|
|
165
|
-
"p99": 33.27116700000079,
|
|
166
|
-
"min": 30.37066699999923,
|
|
167
|
-
"max": 33.27116700000079
|
|
168
|
-
},
|
|
169
|
-
"bodyBytes": 375,
|
|
170
|
-
"serverData": null,
|
|
171
|
-
"serverRender": null
|
|
172
|
-
}
|
|
173
|
-
],
|
|
174
|
-
"bundles": {
|
|
175
|
-
"contact.boot": {
|
|
176
|
-
"file": "contact.boot-IBC3WEQQ.js",
|
|
177
|
-
"bytes": 2506
|
|
178
|
-
},
|
|
179
|
-
"counter.boot": {
|
|
180
|
-
"file": "counter.boot-VUWQFE5L.js",
|
|
181
|
-
"bytes": 1229
|
|
182
|
-
},
|
|
183
|
-
"runtime": {
|
|
184
|
-
"file": "runtime-YLZ4ZGK4.js",
|
|
185
|
-
"bytes": 7017
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"timestamp": "2026-03-27T09:21:12.621Z",
|
|
3
|
-
"node": "v22.19.0",
|
|
4
|
-
"suites": [
|
|
5
|
-
{
|
|
6
|
-
"label": "simple",
|
|
7
|
-
"path": "/bench/simple",
|
|
8
|
-
"iterations": 100,
|
|
9
|
-
"ttfb": {
|
|
10
|
-
"mean": 0.18461582000000049,
|
|
11
|
-
"p50": 0.1646250000000009,
|
|
12
|
-
"p95": 0.2852500000000191,
|
|
13
|
-
"p99": 0.42183299999999235,
|
|
14
|
-
"min": 0.1447080000000085,
|
|
15
|
-
"max": 0.42183299999999235
|
|
16
|
-
},
|
|
17
|
-
"total": {
|
|
18
|
-
"mean": 0.21154751000000033,
|
|
19
|
-
"p50": 0.18912499999999,
|
|
20
|
-
"p95": 0.31433400000000233,
|
|
21
|
-
"p99": 0.4727500000000191,
|
|
22
|
-
"min": 0.1662499999999909,
|
|
23
|
-
"max": 0.4727500000000191
|
|
24
|
-
},
|
|
25
|
-
"bodyBytes": 1107,
|
|
26
|
-
"serverData": null,
|
|
27
|
-
"serverRender": null
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"label": "data-1",
|
|
31
|
-
"path": "/bench/data-1",
|
|
32
|
-
"iterations": 100,
|
|
33
|
-
"ttfb": {
|
|
34
|
-
"mean": 0.6358262399999944,
|
|
35
|
-
"p50": 0.5394169999999576,
|
|
36
|
-
"p95": 1.2368329999999332,
|
|
37
|
-
"p99": 2.6608750000000327,
|
|
38
|
-
"min": 0.22608299999990322,
|
|
39
|
-
"max": 2.6608750000000327
|
|
40
|
-
},
|
|
41
|
-
"total": {
|
|
42
|
-
"mean": 22.039515369999986,
|
|
43
|
-
"p50": 22.052624999999807,
|
|
44
|
-
"p95": 23.031082999999853,
|
|
45
|
-
"p99": 23.720332999999982,
|
|
46
|
-
"min": 20.468165999999655,
|
|
47
|
-
"max": 23.720332999999982
|
|
48
|
-
},
|
|
49
|
-
"bodyBytes": 4437,
|
|
50
|
-
"serverData": null,
|
|
51
|
-
"serverRender": null
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"label": "data-3",
|
|
55
|
-
"path": "/bench/data-3",
|
|
56
|
-
"iterations": 100,
|
|
57
|
-
"ttfb": {
|
|
58
|
-
"mean": 0.5651482699999678,
|
|
59
|
-
"p50": 0.49766700000009223,
|
|
60
|
-
"p95": 1.3021660000003976,
|
|
61
|
-
"p99": 1.4529170000000704,
|
|
62
|
-
"min": 0.23220799999944575,
|
|
63
|
-
"max": 1.4529170000000704
|
|
64
|
-
},
|
|
65
|
-
"total": {
|
|
66
|
-
"mean": 31.685546209999952,
|
|
67
|
-
"p50": 31.745542000000114,
|
|
68
|
-
"p95": 32.82679100000041,
|
|
69
|
-
"p99": 33.18908300000021,
|
|
70
|
-
"min": 29.795499999999265,
|
|
71
|
-
"max": 33.18908300000021
|
|
72
|
-
},
|
|
73
|
-
"bodyBytes": 1299,
|
|
74
|
-
"serverData": null,
|
|
75
|
-
"serverRender": null
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"label": "cached",
|
|
79
|
-
"path": "/bench/cached",
|
|
80
|
-
"iterations": 100,
|
|
81
|
-
"ttfb": {
|
|
82
|
-
"mean": 0.1482587500000227,
|
|
83
|
-
"p50": 0.13324999999986176,
|
|
84
|
-
"p95": 0.2303750000000946,
|
|
85
|
-
"p99": 0.3728339999997843,
|
|
86
|
-
"min": 0.10658300000068266,
|
|
87
|
-
"max": 0.3728339999997843
|
|
88
|
-
},
|
|
89
|
-
"total": {
|
|
90
|
-
"mean": 0.16088121999998292,
|
|
91
|
-
"p50": 0.145542000000205,
|
|
92
|
-
"p95": 0.24883299999964947,
|
|
93
|
-
"p99": 0.3845839999994496,
|
|
94
|
-
"min": 0.11658299999999144,
|
|
95
|
-
"max": 0.3845839999994496
|
|
96
|
-
},
|
|
97
|
-
"bodyBytes": 1041,
|
|
98
|
-
"serverData": null,
|
|
99
|
-
"serverRender": null
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
"label": "nav/simple",
|
|
103
|
-
"path": "/bench/simple",
|
|
104
|
-
"iterations": 100,
|
|
105
|
-
"ttfb": {
|
|
106
|
-
"mean": 0.11078830999994352,
|
|
107
|
-
"p50": 0.10883399999966059,
|
|
108
|
-
"p95": 0.12508299999990413,
|
|
109
|
-
"p99": 0.37304199999925913,
|
|
110
|
-
"min": 0.09274999999979627,
|
|
111
|
-
"max": 0.37304199999925913
|
|
112
|
-
},
|
|
113
|
-
"total": {
|
|
114
|
-
"mean": 0.1193449899999905,
|
|
115
|
-
"p50": 0.11745799999971496,
|
|
116
|
-
"p95": 0.13524999999935972,
|
|
117
|
-
"p99": 0.38433399999939866,
|
|
118
|
-
"min": 0.09883399999944231,
|
|
119
|
-
"max": 0.38433399999939866
|
|
120
|
-
},
|
|
121
|
-
"bodyBytes": 244,
|
|
122
|
-
"serverData": null,
|
|
123
|
-
"serverRender": null
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
"label": "nav/data-1",
|
|
127
|
-
"path": "/bench/data-1",
|
|
128
|
-
"iterations": 100,
|
|
129
|
-
"ttfb": {
|
|
130
|
-
"mean": 21.61796121999997,
|
|
131
|
-
"p50": 21.62274999999954,
|
|
132
|
-
"p95": 22.23725000000013,
|
|
133
|
-
"p99": 22.784042000000227,
|
|
134
|
-
"min": 20.593541999999616,
|
|
135
|
-
"max": 22.784042000000227
|
|
136
|
-
},
|
|
137
|
-
"total": {
|
|
138
|
-
"mean": 21.65816495000001,
|
|
139
|
-
"p50": 21.65904099999989,
|
|
140
|
-
"p95": 22.343792000000576,
|
|
141
|
-
"p99": 22.863250000000335,
|
|
142
|
-
"min": 20.61554199999955,
|
|
143
|
-
"max": 22.863250000000335
|
|
144
|
-
},
|
|
145
|
-
"bodyBytes": 3513,
|
|
146
|
-
"serverData": null,
|
|
147
|
-
"serverRender": null
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
"label": "nav/data-3",
|
|
151
|
-
"path": "/bench/data-3",
|
|
152
|
-
"iterations": 100,
|
|
153
|
-
"ttfb": {
|
|
154
|
-
"mean": 31.698053359999975,
|
|
155
|
-
"p50": 31.66662499999984,
|
|
156
|
-
"p95": 32.492291999999,
|
|
157
|
-
"p99": 32.72829199999978,
|
|
158
|
-
"min": 30.043375000001106,
|
|
159
|
-
"max": 32.72829199999978
|
|
160
|
-
},
|
|
161
|
-
"total": {
|
|
162
|
-
"mean": 31.743360929999927,
|
|
163
|
-
"p50": 31.71479199999885,
|
|
164
|
-
"p95": 32.56791599999997,
|
|
165
|
-
"p99": 32.881624999999985,
|
|
166
|
-
"min": 30.08008300000074,
|
|
167
|
-
"max": 32.881624999999985
|
|
168
|
-
},
|
|
169
|
-
"bodyBytes": 375,
|
|
170
|
-
"serverData": null,
|
|
171
|
-
"serverRender": null
|
|
172
|
-
}
|
|
173
|
-
],
|
|
174
|
-
"bundles": {
|
|
175
|
-
"contact.boot": {
|
|
176
|
-
"file": "contact.boot-IBC3WEQQ.js",
|
|
177
|
-
"bytes": 2506
|
|
178
|
-
},
|
|
179
|
-
"counter.boot": {
|
|
180
|
-
"file": "counter.boot-VUWQFE5L.js",
|
|
181
|
-
"bytes": 1229
|
|
182
|
-
},
|
|
183
|
-
"runtime": {
|
|
184
|
-
"file": "runtime-YLZ4ZGK4.js",
|
|
185
|
-
"bytes": 7017
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|