Skip to content

feat(vapor): hydration #13226

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 890 commits into
base: minor
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
890 commits
Select commit Hold shift + click to select a range
4b61006
wip: slots
yyx990803 Dec 7, 2024
e6d4a24
wip: adjust slots codegen
yyx990803 Dec 7, 2024
aa96762
wip: dynamic slots
yyx990803 Dec 7, 2024
407b9ab
chore: BlockFn
yyx990803 Dec 7, 2024
f413e00
chore: element -> node
yyx990803 Dec 7, 2024
f8a7046
wip: slot props
yyx990803 Dec 8, 2024
9a8645d
wip: adjust slot props compilation
yyx990803 Dec 8, 2024
7e8edcd
build: add runtime-with-vapor format + fix sfc playground for vapor mode
yyx990803 Dec 8, 2024
d376f00
build: trim vapor intenral helper exports form runtime-core in non-es…
yyx990803 Dec 8, 2024
30a7e79
chore: fix playground import
yyx990803 Dec 8, 2024
6f5493c
wip: make dev mode work for sfc generated code
yyx990803 Dec 8, 2024
e8067f1
wip: prepare hmr for vapor
yyx990803 Dec 8, 2024
6c40186
chore: fix vdom slots currentInstance
yyx990803 Dec 8, 2024
4833c1c
wip: vapor hmr rerender
yyx990803 Dec 8, 2024
6f44934
build: fix esm-bundler vapor re-exports
yyx990803 Dec 8, 2024
bb0787b
wip: prepare hmr reload
yyx990803 Dec 8, 2024
83be45e
wip: optimize vapor currentInstance setting
yyx990803 Dec 8, 2024
4f613dc
chore: remove vue/vapor
yyx990803 Dec 8, 2024
ac5f1cf
chore: fix vapor playground tsconfig
yyx990803 Dec 8, 2024
366dcb7
wip: vapor app.unmount + unmounted hooks
yyx990803 Dec 8, 2024
54c29ab
wip: vapor hmr reload
yyx990803 Dec 8, 2024
f2b69d7
chore: remove non-function-related changes from vapor branch
yyx990803 Nov 11, 2024
4df4624
chore: make vapor compiler tests pass
yyx990803 Dec 9, 2024
edde81c
wip: respect inheritAttrs
yyx990803 Dec 9, 2024
2b05c1e
wip: remove setInheritAttrs codegen
yyx990803 Dec 9, 2024
2bbb6d2
fix(scheduler): recover nextTick from error in post flush cb
yyx990803 Dec 9, 2024
ec23ab9
test(vapor): renderEffect
yyx990803 Dec 9, 2024
b7aec13
test(vapor): block tests
yyx990803 Dec 9, 2024
ac43b11
fix(reactivity): toRefs should be allowed on plain objects
yyx990803 Dec 9, 2024
8540ee4
test(vapor): componentProps
yyx990803 Dec 9, 2024
527905a
test(vapor): errorHandling
yyx990803 Dec 9, 2024
ab6f75d
test(vapor): skip todo tests
yyx990803 Dec 9, 2024
c2ff3bd
chore: fix compat props default test
yyx990803 Dec 10, 2024
017c860
build: fix mutli format build script
yyx990803 Dec 10, 2024
dc90783
chore: fix sfc playground build
yyx990803 Dec 10, 2024
08c4967
wip: avoid iife for vapor prod mode
yyx990803 Dec 10, 2024
443ac60
chore: remove stale test lines
yyx990803 Dec 10, 2024
48fc65f
test(vapor): apiCreateVaporApp
yyx990803 Dec 10, 2024
89707e8
test(vapor): inject
yyx990803 Dec 10, 2024
c2e7312
test(vapor): lifecycle (partial)
yyx990803 Dec 10, 2024
217e1e6
wip(vapor): make createComponent rawProps/rawSlots accept wider types…
yyx990803 Dec 10, 2024
baf68a0
test(vapor): apiSetupContext
yyx990803 Dec 10, 2024
12ef121
test(vapor): api expose (partial)
yyx990803 Dec 10, 2024
4366a7e
test(vapor): apiWatch
yyx990803 Dec 10, 2024
25989f6
chore: update compiler-vapor inline mode snapshots
yyx990803 Dec 10, 2024
a1276f7
test(vapor): componentAttrs
yyx990803 Dec 10, 2024
5648dda
test(vapor): componentEmits
yyx990803 Dec 10, 2024
7f3b883
chore: make types pass in vapor directive tests
yyx990803 Dec 10, 2024
dff54a1
test(vapor): componentSlots
yyx990803 Dec 10, 2024
b191beb
chore: fix vapor apiExpose test
yyx990803 Dec 10, 2024
dbdc0aa
chore: make compile type consistent
yyx990803 Dec 10, 2024
92526b0
chore: fix dts build
yyx990803 Dec 11, 2024
23fe7f9
chore: make type check pass
yyx990803 Dec 11, 2024
4e17b0b
chore: disable continuous release for vapor for now
yyx990803 Dec 11, 2024
1bb9a0f
refactor: drop recordPropMetadata + merge renderEffect (#301)
edison1105 Dec 11, 2024
64e007e
chore: Merge branch 'main' into vapor
yyx990803 Dec 11, 2024
e41858c
chore: todos
yyx990803 Dec 11, 2024
badd995
ci: fix continuous release vapor skip
yyx990803 Dec 11, 2024
dfe06f8
wip: cache setProp prev value on element, simplify codegen
yyx990803 Dec 11, 2024
4505727
wip: refactor vapor vBind codegen
yyx990803 Dec 12, 2024
c4b853d
chore: remove no longer needed file
yyx990803 Dec 12, 2024
e388053
chore: fix setStyle and tests
yyx990803 Dec 12, 2024
0d1df25
wip(vapor): templateRef adjustments
yyx990803 Dec 12, 2024
023f72f
test(vapor): useTemplateRef tests
yyx990803 Dec 13, 2024
4160b6d
test(vapor): fix templateRef compiler tests
yyx990803 Dec 13, 2024
f9a6e8c
wip(vapor): handle class / style merging behavior
yyx990803 Dec 13, 2024
c07734d
wip(vapor): further tweak single root attr fallthrough behavior
yyx990803 Dec 13, 2024
76e8d2c
wip(vapor): init feature flags + set devtools when creating vapor app
yyx990803 Dec 14, 2024
bcb9209
wip(vapor): optimize unmounted children removal
yyx990803 Dec 14, 2024
4318129
wip(vapor): createIf
yyx990803 Dec 14, 2024
6c0e8a8
wip(vapor): handle slot fallback when content changes
yyx990803 Dec 14, 2024
e79a6df
fix(vapor/defineProps): register type bindings before compile templat…
edison1105 Dec 16, 2024
bd13001
refactor(vapor): import v-o withModifiers or withKeys on demand (#12539)
edison1105 Dec 16, 2024
ef6986f
refactor(compiler-vapor): move operation with constant values out of …
edison1105 Dec 16, 2024
757b3df
refactor(compiler-vapor): cache inline handlers passed to component (…
edison1105 Jan 8, 2025
58b4974
refactor(compiler-vapor): cache multiple access to the same expressio…
edison1105 Jan 8, 2025
20cd429
fix(compiler-vapor): once modifier work with component event (#12606)
edison1105 Jan 8, 2025
679cbdf
fix(reactivity): ensure multiple effectScope `on()` and `off()` calls…
edison1105 Jan 8, 2025
0b7f508
refactor(runtime-vapor): cache event handlers on element (#12610)
edison1105 Jan 28, 2025
b6d5399
fix(runtime-vapor): properly normalize emits options if emits is an a…
edison1105 Jan 28, 2025
fd2917c
fix(runtime-vapor): properly handle dynamic slot work with v-if (#12660)
edison1105 Jan 29, 2025
8008509
refactor: fix type errors
yyx990803 Jan 29, 2025
1394485
refactor(runtime-core): useModel work with vapor mode (#12666)
edison1105 Jan 29, 2025
7b22299
test(runtime-vapor): port tests from rendererComponent.spec.ts (#12677)
edison1105 Jan 29, 2025
733d6fc
test: update test cases (#12678)
edison1105 Jan 29, 2025
568e824
fix(runtime-vapor): properly mount component only with template in pr…
edison1105 Jan 29, 2025
674151c
chore: Merge branch 'minor' into vapor
yyx990803 Jan 29, 2025
1e9062c
refactor(reactivity): avoid setting up debug flags on falsy onTrigger…
yyx990803 Jan 29, 2025
e6ba91c
perf: avoid now() overhead during dev measure calls
yyx990803 Jan 29, 2025
181d340
wip(vapor): v-for
yyx990803 Jan 29, 2025
6979952
refactor(reactivity): improve shallowRef treeshaking
yyx990803 Jan 29, 2025
e49c5a1
test(vapor): enable more test cases
yyx990803 Jan 30, 2025
fca1aef
wip: v-for destructure expression rewrite (part 1)
yyx990803 Jan 30, 2025
1ff6b13
refactor: remove prefixIdentifier and mode usage in compiler-vapor
yyx990803 Jan 30, 2025
5d88c53
wip(compiler-vapor): support expressions in idMap
yyx990803 Jan 30, 2025
95cf749
wip(vapor): support rest elements in v-for destructure
yyx990803 Jan 30, 2025
c89e01e
wip(vapor): support default values in v-for destructure
yyx990803 Jan 30, 2025
34a0ad7
wip(vapor): optimize v-for getItem
yyx990803 Jan 30, 2025
a13db00
chore: mark test as todo
yyx990803 Jan 30, 2025
2b0731a
test(vapor): add test cases for v-for destructure with rest and defau…
yyx990803 Jan 31, 2025
cad7f0e
wip(vapor): improve v-for codegen + minor optimization
yyx990803 Jan 31, 2025
9f1025d
wip(vapor): createDynamicComponent
yyx990803 Jan 31, 2025
e5af194
wip(vapor): simplified builtin directive v-show
yyx990803 Jan 31, 2025
aa28e9c
refactor: reuse htmlNesting from compiler-dom
yyx990803 Jan 31, 2025
5a62266
wip(vapor): v-model text reuse from runtime-dom
yyx990803 Feb 1, 2025
01d6aa0
chore(lint): allow DOM globals in runtime-vapor
yyx990803 Feb 1, 2025
250127c
wip(vapor): v-model checkbox, radio, select, dynamic
yyx990803 Feb 1, 2025
d51403c
wip(vapor): v-show work on components
yyx990803 Feb 2, 2025
0392eb4
test(vapor): update vModel compiler tests
yyx990803 Feb 2, 2025
1f25e0d
test(vapor): v-model runtime tests
yyx990803 Feb 2, 2025
3464620
wip(vapor): vapor in vdom interop
yyx990803 Feb 2, 2025
4d65b15
wip(vapor): match vapor internal flag generated by compiler-sfc with …
yyx990803 Feb 3, 2025
c2a91a8
wip(vapor): treat `<script vapor>` as setup
yyx990803 Feb 3, 2025
aa84afc
wip(vapor): per-file vapor support in sfc playground
yyx990803 Feb 3, 2025
724e63c
chore: sync runtime-vapor version with other packages and tweak packa…
yyx990803 Feb 3, 2025
3d98183
chore: fix dts test
yyx990803 Feb 3, 2025
02d30be
chore: remove no longer needed vue-vapor references
yyx990803 Feb 3, 2025
816cbcc
chore: fix runtime vapor exports + size script
yyx990803 Feb 3, 2025
ddfd836
chore: update compiler-vapor package.json
yyx990803 Feb 3, 2025
b20bcf1
chore: fix runtime-vapor dts build
yyx990803 Feb 3, 2025
f09e343
wip(vapor): optimize vapor interop update
yyx990803 Feb 4, 2025
c3e4f66
wip(vapor): vdom in vapor interop
yyx990803 Feb 4, 2025
4b12529
wip(vapor): fix setScopeId for vdom in vapor
yyx990803 Feb 4, 2025
be5c2a2
wip: vdom in vapor hmr reload
yyx990803 Feb 4, 2025
ccd42b1
refactor: adjust vapor/vdom interop
yyx990803 Feb 5, 2025
a770a83
wip(vapor): support vapor component as root in vdom app
yyx990803 Feb 5, 2025
99d70dd
wip(vapor): vdom slots in vapor component
yyx990803 Feb 6, 2025
bcd2eb7
wip(vapor): fix component unmount when not at block root level
yyx990803 Feb 7, 2025
7005628
chore: bump playground vite plugin version
yyx990803 Feb 7, 2025
23939d0
wip(vapor): vapor slots in vdom
yyx990803 Feb 7, 2025
2a0cfc0
chore: warn vapor hydration for now
yyx990803 Feb 8, 2025
6a185ab
chore: move benchmark and local playground in to packages-private
yyx990803 Feb 8, 2025
ade6ed4
chore: improve build script to only build package when format is valid
yyx990803 Feb 8, 2025
cd93dad
test(vapor): e2e interop test for vapor
yyx990803 Feb 8, 2025
8549a24
wip(vapor): custom directives
yyx990803 Feb 8, 2025
ba0594d
test(vapor): vapor todomvc e2e test
yyx990803 Feb 8, 2025
a2b320b
chore: fix ci
yyx990803 Feb 8, 2025
69422d5
wip(vapor): optimize event handling
yyx990803 Feb 8, 2025
11383ae
wip(vapor): fix v-for update check + avoid unnecessary tracking overh…
yyx990803 Feb 9, 2025
1ef15c7
perf: optimize toDisplayString
yyx990803 Feb 9, 2025
c317a06
chore: use inline vitest env comment
yyx990803 Feb 10, 2025
6df8c01
chore: benchmark reference
yyx990803 Feb 10, 2025
5396e74
chore: use catalog vue plugin
yyx990803 Feb 10, 2025
a2b4289
refactor(vapor): avoid unnecessary wrapping for event handlers
yyx990803 Feb 10, 2025
263318d
perf(vapor): generate simpler evenet delegation code when possible
yyx990803 Feb 10, 2025
bd5c158
perf(vapor): optimize cache property lookup
yyx990803 Feb 10, 2025
528705f
perf(vapor): v-for remove all fast path
yyx990803 Feb 10, 2025
a2fa0db
wip(vapor): improve node traversal codegen
yyx990803 Feb 10, 2025
5d1c6ca
perf(vapor): optimize text bindings and v-text
yyx990803 Feb 11, 2025
222ced2
perf(vapor): optimize v-if in once mode
yyx990803 Feb 12, 2025
63cf2ee
refactor: adjust isConstantNode
yyx990803 Feb 12, 2025
242cc15
refactor(vapor): use bitwise flags for v-for runtime optimizations
yyx990803 Feb 12, 2025
4121de4
refactor(vapor): reorg node op helpers + remove children helper
yyx990803 Feb 12, 2025
d487063
chore: fix mishandled regex const check
yyx990803 Feb 12, 2025
8254b5f
test(vapor): test case for dom event handling
yyx990803 Feb 12, 2025
10993af
chore: vscode setting
yyx990803 Feb 12, 2025
1b50feb
perf(vapor): use nthChild instead of nextn (#12847)
edison1105 Feb 12, 2025
c6fe9f9
wip(vapor): new impl + test for vapor custom directive
yyx990803 Feb 12, 2025
e1d26b1
ci(pkg-pr-new): add vapor branch (#12944)
zhiyuanzmj Feb 26, 2025
b7977d4
refactor(reactivity): sync alien-signals 1.0.4 changes (#12791)
johnsoncodehk Feb 25, 2025
fb484f4
fix(vapor): handle vapor mode with empty script (#12910)
edison1105 Feb 28, 2025
05d9b42
fix(vapor): handle next host node for vapor component (#12820)
edison1105 Feb 28, 2025
ad5bb16
fix(compiler-vapor): properly cache variable used in object property …
edison1105 Feb 28, 2025
a95b5e7
feat(runtime-vapor): expose VaporFragment for jsx-vapor (#12890)
zhiyuanzmj Feb 28, 2025
5452404
feat(compiler-vapor): add jsx support for setText and createTextNode …
zhiyuanzmj Feb 28, 2025
bce7164
feat(runtime-vapor): support functional component for defineVaporComp…
zhiyuanzmj Feb 28, 2025
64270ae
wip(vapor): basic hydration
yyx990803 Feb 12, 2025
e9d912a
wip(vapor): more hydration
yyx990803 Mar 7, 2025
bb50640
test: fix missed warning assertion
yyx990803 Mar 7, 2025
97c40a6
refactor(vapor): refactor interpolation transform to make it hydratio…
yyx990803 Mar 7, 2025
a2415de
wip(vapor): text hydration tests
yyx990803 Mar 9, 2025
e3a33e6
wip(vapor): component hydration
yyx990803 Mar 10, 2025
9722574
wip(vapor): adjust children and block generation order for hydration
yyx990803 Mar 11, 2025
f6d7b90
wip(vapor): corresponding runtime behavior for if/for/slot-outlet pos…
yyx990803 Mar 11, 2025
9ff6177
chore(vapor): remove no longer needed CREATE_TEXT_NODE IR type
yyx990803 Mar 11, 2025
3a9d6f7
fix(vapor): properly handle return when compiling vapor component for…
yyx990803 Mar 11, 2025
a51dd42
test(vapor): refactor hydration tests to include compilation
yyx990803 Mar 11, 2025
2a76b52
wip(vapor): fix children gen for dynamic with anchor insertion
yyx990803 Mar 11, 2025
e5e4d29
wip(vapor): test cases
yyx990803 Mar 12, 2025
2696f14
wip(vapor): fix insertion for vdom interop
yyx990803 Mar 12, 2025
f78a9d0
Merge branch 'minor' into vapor
edison1105 Apr 1, 2025
9ab8e4c
chore: update lockfile
edison1105 Apr 1, 2025
e5dd701
feat(vapor/hydration): handle component with anchor insertion
edison1105 Apr 21, 2025
9c30fd4
wip: save
edison1105 Apr 22, 2025
d8443d3
wip: refactor
edison1105 Apr 22, 2025
3108d91
refactor: skip dynamic anchors and empty text nodes
edison1105 Apr 23, 2025
1248172
wip: save
edison1105 Apr 23, 2025
25b8fbe
refactor: add enableHydrationNodeLookup and disableHydrationNodeLooku…
edison1105 Apr 23, 2025
3e7f093
chore: dont process text/comment node as dynamic
edison1105 Apr 23, 2025
04eadd8
wip: refactor
edison1105 Apr 23, 2025
b5762b5
wip: add tests + skip fragment end anchor
edison1105 Apr 24, 2025
38d4889
wip: hydrate v-if
edison1105 Apr 24, 2025
e9c9e49
wip: refactor hydration for v-if
edison1105 Apr 24, 2025
612cde7
wip: test hydrate v-if in PROD
edison1105 Apr 25, 2025
4d8284b
test: update
edison1105 Apr 25, 2025
34b9a4b
wip: hydation for dynamic component
edison1105 Apr 25, 2025
aad75fd
wip: refactor
edison1105 Apr 25, 2025
e6e0160
wip: v-for hydration
edison1105 Apr 25, 2025
7a842ab
wip: refactor
edison1105 Apr 26, 2025
ca34d4a
wip: add more tests
edison1105 Apr 26, 2025
42a421a
wip: hydration for slots
edison1105 Apr 26, 2025
2f00264
fix(compiler-vapor): move `next`, `child` and `nthChild` before setI…
zhiyuanzmj Apr 27, 2025
700f49e
wip: hydration for slots
edison1105 Apr 27, 2025
e5399c3
wip: vdom interop
edison1105 Apr 28, 2025
4253b0c
wip: update
edison1105 Apr 28, 2025
d281d62
wip: vdom hydration interop
edison1105 Apr 29, 2025
ea34f2f
wip: vdom interop
edison1105 Apr 29, 2025
3e69504
fix(compiler-vapor): properly handle static ref in inline mode
edison1105 Apr 29, 2025
a9496de
test: more tests
edison1105 Apr 29, 2025
d776a26
chore: tweaks
edison1105 Apr 30, 2025
d8ae428
chore: Merge branch 'minor' into vapor
edison1105 May 8, 2025
5036f91
test(compiler-vapor): add index test for v-for (#13004)
zhiyuanzmj May 15, 2025
122f758
test(compiler-vapor): fix v-for test (#13347)
zhiyuanzmj May 19, 2025
1ef6e6e
chore: update package graph to include vapor packages [ci skip]
yyx990803 May 20, 2025
08f9c1d
fix(compiler-vapor): properly locate last if node (#13399)
edison1105 Jun 18, 2025
978c47f
feat(compiler-vapor): resolve implicitly self-referencing component (…
edison1105 Jun 18, 2025
ffb7ba7
fix(runtime-vapor): prevent passing an empty string to classList.add …
zhiyuanzmj Jun 18, 2025
e5a5957
fix(runtime-vapor): set ref on dynamic component (#13172)
edison1105 Jun 18, 2025
99482a4
fix(compiler-vapor): prevent caching variables in function expression…
zhiyuanzmj Jun 18, 2025
99a8c6d
fix(runtime-vapor): reset insertion state to avoid duplicate block in…
edison1105 Jun 18, 2025
ff7fa88
fix(compiler-vapor): move `next`, `child` and `nthChild` before setIn…
zhiyuanzmj Jun 18, 2025
a0c42ff
chore: Merge branch 'minor' into vapor
edison1105 Jun 18, 2025
7d84010
fix(runtime-vapor): respect immutability for readonly reactive arrays…
jh-leong Jun 18, 2025
88ef97f
chore(local-playground): fix vapor tsconfig include path (#13490)
jh-leong Jun 18, 2025
6f8ea35
fix(runtime-vapor): should not fallthrough emit handlers to vdom chil…
edison1105 Jun 20, 2025
cb92511
fix(compiler-vapor): don't generate default slot for whitespace when …
zhiyuanzmj Jun 20, 2025
a6e4966
fix(runtime-vapor): dynamic component fallback rendering with inserti…
edison1105 Jun 20, 2025
ed05053
fix(compiler-vapor): prevent caching UpdateExpression (#13346)
zhiyuanzmj Jun 20, 2025
504fa10
fix(compiler-vapor): prevent v-for components from being single root …
runyasak Jun 20, 2025
b9dc865
fix(runtime-vapor): properly mount component when using setInsertionS…
edison1105 Jun 20, 2025
b96447d
chore(compiler-vapor): use compiler-dom instead of compiler-core (#13…
zhiyuanzmj Jun 20, 2025
d65675d
fix(runtime-vapor): dynamic component work with insertionState (#13142)
edison1105 Jun 20, 2025
6f6ab1a
fix(runtime-vapor): dynamic component attrs fallthrough (#13466)
edison1105 Jun 20, 2025
2250d41
fix(compiler-vapor): remove types for expressions (#13395)
zhiyuanzmj Jun 20, 2025
430216a
fix(runtime-vapor): should not warn invalid watch source when directl…
edison1105 Jun 20, 2025
bf7424a
fix(compiler-vapor): correct execution order of operations (#13351)
zhiyuanzmj Jun 20, 2025
c86bf7b
chore: update snap
edison1105 Jun 20, 2025
7dd7d82
chore: Merge branch 'vapor' into edison/feat/vaporHydration
edison1105 Jun 20, 2025
552ac6d
chore: update
edison1105 Jun 25, 2025
48a1370
fix(compiler-vapor): properly cache variable with optional chaining (…
edison1105 Jun 26, 2025
2074d66
fix(compiler-sfc): always use defineComponent in SSR mode (#13525)
edison1105 Jun 26, 2025
280829b
fix(runtime-vapor): ensure props are shallow reactive in VDOM compone…
edison1105 Jun 26, 2025
66f16ee
fix(compiler-vapor): properly handle static ref in inline mode (#13257)
edison1105 Jun 26, 2025
bb4ae25
fix(compiler-vapor): handle variable name substring edge cases (#13520)
edison1105 Jun 26, 2025
ea1c60b
wip: handle more case
edison1105 Jun 28, 2025
bac2bc2
Merge branch 'vapor' into edison/feat/vaporHydration
edison1105 Jun 28, 2025
a776fc4
chore: update
edison1105 Jun 30, 2025
bb606f3
wip: handle $root during hydration
edison1105 Jul 1, 2025
f2a5abe
chore: update
edison1105 Jul 1, 2025
0ca32f4
fix(hydration): skip dynamic children in __child
edison1105 Jul 4, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
14 changes: 13 additions & 1 deletion .github/contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -290,27 +290,39 @@ This is made possible via several configurations:

```mermaid
flowchart LR
vue["vue"]
compiler-sfc["@vue/compiler-sfc"]
compiler-dom["@vue/compiler-dom"]
compiler-vapor["@vue/compiler-vapor"]
compiler-core["@vue/compiler-core"]
vue["vue"]
runtime-dom["@vue/runtime-dom"]
runtime-vapor["@vue/runtime-vapor"]
runtime-core["@vue/runtime-core"]
reactivity["@vue/reactivity"]

subgraph "Runtime Packages"
runtime-dom --> runtime-core
runtime-vapor --> runtime-core
runtime-core --> reactivity
end

subgraph "Compiler Packages"
compiler-sfc --> compiler-core
compiler-sfc --> compiler-dom
compiler-sfc --> compiler-vapor
compiler-dom --> compiler-core
compiler-vapor --> compiler-core
end

vue --> compiler-sfc
vue ---> compiler-dom
vue --> runtime-dom
vue --> compiler-vapor
vue --> runtime-vapor

%% Highlight class
classDef highlight stroke:#35eb9a,stroke-width:3px;
class compiler-vapor,runtime-vapor highlight;
```

There are some rules to follow when importing across package boundaries:
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@ on:
branches:
- main
- minor
- vapor

jobs:
test:
if: ${{ ! startsWith(github.event.head_commit.message, 'release:') && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository) }}
uses: ./.github/workflows/test.yml

continuous-release:
if: github.repository == 'vuejs/core'
if: github.repository == 'vuejs/core' && github.ref_name != 'vapor'
runs-on: ubuntu-latest
steps:
- name: Checkout
Expand Down
26 changes: 26 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,32 @@ jobs:
- name: verify treeshaking
run: node scripts/verify-treeshaking.js

e2e-vapor:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup cache for Chromium binary
uses: actions/cache@v4
with:
path: ~/.cache/puppeteer
key: chromium-${{ hashFiles('pnpm-lock.yaml') }}

- name: Install pnpm
uses: pnpm/[email protected]

- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version-file: '.node-version'
cache: 'pnpm'

- run: pnpm install
- run: node node_modules/puppeteer/install.mjs

- name: Run e2e tests
run: pnpm run test-e2e-vapor

lint-and-test-dts:
runs-on: ubuntu-latest
env:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ TODOs.md
dts-build/packages
*.tsbuildinfo
*.tgz
packages-private/benchmark/reference
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.formatOnSave": true
"editor.formatOnSave": true,
"vitest.disableWorkspaceWarning": true
}
5 changes: 4 additions & 1 deletion eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ export default tseslint.config(

// Packages targeting DOM
{
files: ['packages/{vue,vue-compat,runtime-dom}/**'],
files: ['packages/{vue,vue-compat,runtime-dom,runtime-vapor}/**'],
rules: {
'no-restricted-globals': ['error', ...NodeGlobals],
},
Expand All @@ -126,6 +126,7 @@ export default tseslint.config(
files: [
'packages-private/template-explorer/**',
'packages-private/sfc-playground/**',
'packages-private/local-playground/**',
],
rules: {
'no-restricted-globals': ['error', ...NodeGlobals],
Expand All @@ -152,6 +153,8 @@ export default tseslint.config(
'./*.{js,ts}',
'packages/*/*.js',
'packages/vue/*/*.js',
'packages-private/benchmark/*',
'packages-private/e2e-utils/*',
],
rules: {
'no-restricted-globals': 'off',
Expand Down
29 changes: 15 additions & 14 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,18 @@
"build-dts": "tsc -p tsconfig.build.json --noCheck && rollup -c rollup.dts.config.js",
"clean": "rimraf --glob packages/*/dist temp .eslintcache",
"size": "run-s \"size-*\" && node scripts/usage-size.js",
"size-global": "node scripts/build.js vue runtime-dom -f global -p --size",
"size-global": "node scripts/build.js vue runtime-dom compiler-dom -f global -p --size",
"size-esm-runtime": "node scripts/build.js vue -f esm-bundler-runtime",
"size-esm": "node scripts/build.js runtime-dom runtime-core reactivity shared -f esm-bundler",
"size-esm": "node scripts/build.js runtime-shared runtime-dom runtime-core reactivity shared runtime-vapor -f esm-bundler",
"check": "tsc --incremental --noEmit",
"lint": "eslint --cache .",
"format": "prettier --write --cache .",
"format-check": "prettier --check --cache .",
"test": "vitest",
"test-unit": "vitest --project unit",
"test-unit": "vitest --project unit --project unit-jsdom",
"test-e2e": "node scripts/build.js vue -f global -d && vitest --project e2e",
"test-e2e-vapor": "pnpm run prepare-e2e-vapor && vitest --project e2e-vapor",
"prepare-e2e-vapor": "node scripts/build.js -f cjs+esm-bundler+esm-bundler-runtime && pnpm run -C packages-private/vapor-e2e-test build",
"test-dts": "run-s build-dts test-dts-only",
"test-dts-only": "tsc -p packages-private/dts-built-test/tsconfig.json && tsc -p ./packages-private/dts-test/tsconfig.test.json",
"test-coverage": "vitest run --project unit --coverage",
Expand All @@ -29,19 +31,17 @@
"release": "node scripts/release.js",
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
"dev-esm": "node scripts/dev.js -if esm-bundler-runtime",
"dev-compiler": "run-p \"dev template-explorer\" serve",
"dev-sfc": "run-s dev-sfc-prepare dev-sfc-run",
"dev-sfc-prepare": "node scripts/pre-dev-sfc.js || npm run build-all-cjs",
"dev-sfc-serve": "vite packages-private/sfc-playground --host",
"dev-sfc-run": "run-p \"dev compiler-sfc -f esm-browser\" \"dev vue -if esm-bundler-runtime\" \"dev vue -ipf esm-browser-runtime\" \"dev server-renderer -if esm-bundler\" dev-sfc-serve",
"dev-prepare-cjs": "node scripts/prepare-cjs.js || node scripts/build.js -f cjs",
"dev-compiler": "run-p \"dev template-explorer\" serve open",
"dev-sfc": "run-s dev-prepare-cjs dev-sfc-run",
"dev-sfc-serve": "vite packages-private/sfc-playground",
"dev-sfc-run": "run-p \"dev compiler-sfc -f esm-browser\" \"dev vue -if esm-browser-vapor\" \"dev vue -ipf esm-browser-vapor\" \"dev server-renderer -if esm-bundler\" dev-sfc-serve",
"dev-vapor": "pnpm -C packages-private/local-playground run dev",
"serve": "serve",
"open": "open http://localhost:3000/packages-private/template-explorer/local.html",
"build-sfc-playground": "run-s build-all-cjs build-runtime-esm build-browser-esm build-ssr-esm build-sfc-playground-self",
"build-all-cjs": "node scripts/build.js vue runtime compiler reactivity shared -af cjs",
"build-runtime-esm": "node scripts/build.js runtime reactivity shared -af esm-bundler && node scripts/build.js vue -f esm-bundler-runtime && node scripts/build.js vue -f esm-browser-runtime",
"build-browser-esm": "node scripts/build.js runtime reactivity shared -af esm-bundler && node scripts/build.js vue -f esm-bundler && node scripts/build.js vue -f esm-browser",
"build-ssr-esm": "node scripts/build.js compiler-sfc server-renderer -f esm-browser",
"build-sfc-playground-self": "cd packages-private/sfc-playground && npm run build",
"build-sfc-playground": "run-s build-sfc-deps build-sfc-playground-self",
"build-sfc-deps": "node scripts/build.js -f ~global+global-runtime",
"build-sfc-playground-self": "pnpm run -C packages-private/sfc-playground build",
"preinstall": "npx only-allow pnpm",
"postinstall": "simple-git-hooks"
},
Expand Down Expand Up @@ -74,6 +74,7 @@
"@types/node": "^22.14.1",
"@types/semver": "^7.7.0",
"@types/serve-handler": "^6.1.4",
"@vitest/ui": "^3.0.2",
"@vitest/coverage-v8": "^3.1.3",
"@vitest/eslint-plugin": "^1.1.44",
"@vue/consolidate": "1.0.0",
Expand Down
1 change: 1 addition & 0 deletions packages-private/benchmark/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
results/*
136 changes: 136 additions & 0 deletions packages-private/benchmark/client/App.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
<script setup>
import { shallowRef, triggerRef } from 'vue'
import { buildData } from './data'
import { defer, wrap } from './profiling'
const selected = shallowRef()
const rows = shallowRef([])
// Bench Add: https://jsbench.me/45lzxprzmu/1
const add = wrap('add', () => {
rows.value.push(...buildData(1000))
triggerRef(rows)
})
const remove = wrap('remove', id => {
rows.value.splice(
rows.value.findIndex(d => d.id === id),
1,
)
triggerRef(rows)
})
const select = wrap('select', id => {
selected.value = id
})
const run = wrap('run', () => {
rows.value = buildData()
selected.value = undefined
})
const update = wrap('update', () => {
const _rows = rows.value
for (let i = 0, len = _rows.length; i < len; i += 10) {
_rows[i].label.value += ' !!!'
}
})
const runLots = wrap('runLots', () => {
rows.value = buildData(10000)
selected.value = undefined
})
const clear = wrap('clear', () => {
rows.value = []
selected.value = undefined
})
const swapRows = wrap('swap', () => {
const _rows = rows.value
if (_rows.length > 998) {
const d1 = _rows[1]
const d998 = _rows[998]
_rows[1] = d998
_rows[998] = d1
triggerRef(rows)
}
})
async function bench() {
for (let i = 0; i < 30; i++) {
rows.value = []
await runLots()
await defer()
}
}
const globalThis = window
</script>

<template>
<h1>Vue.js (VDOM) Benchmark</h1>

<div style="display: flex; gap: 4px; margin-bottom: 4px">
<label>
<input
type="checkbox"
:value="globalThis.doProfile"
@change="globalThis.doProfile = $event.target.checked"
/>
Profiling
</label>
<label>
<input
type="checkbox"
:value="globalThis.reactivity"
@change="globalThis.reactivity = $event.target.checked"
/>
Reactivity Cost
</label>
</div>

<div
id="control"
style="display: flex; flex-direction: column; width: fit-content; gap: 6px"
>
<button @click="bench">Benchmark mounting</button>
<button id="run" @click="run">Create 1,000 rows</button>
<button id="runlots" @click="runLots">Create 10,000 rows</button>
<button id="add" @click="add">Append 1,000 rows</button>
<button id="update" @click="update">Update every 10th row</button>
<button id="clear" @click="clear">Clear</button>
<button id="swaprows" @click="swapRows">Swap Rows</button>
</div>
<div id="time"></div>
<table class="table table-hover table-striped test-data">
<tbody>
<tr
v-for="row of rows"
:key="row.id"
:class="selected === row.id ? 'danger' : ''"
>
<td class="col-md-1">{{ row.id }}</td>
<td class="col-md-4">
<a @click="select(row.id)">{{ row.label.value }}</a>
</td>
<td class="col-md-1">
<a @click="remove(row.id)">
<span class="glyphicon glyphicon-remove" aria-hidden="true">x</span>
</a>
</td>
<td class="col-md-6"></td>
</tr>
</tbody>
</table>
<span
class="preloadicon glyphicon glyphicon-remove"
aria-hidden="true"
></span>
</template>

<style>
.danger {
background-color: red;
}
</style>
Loading