From b15c87d62fd33ceca8026e43fb52847839e2a927 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?=
Date: Thu, 9 Nov 2023 17:26:31 +0800
Subject: [PATCH 001/783] feat: init vapor package
---
packages/compiler-vapor/LICENSE | 21 ++++++++++
packages/compiler-vapor/README.md | 4 ++
.../__tests__/reactivityTransform.spec.ts | 3 ++
packages/compiler-vapor/package.json | 40 +++++++++++++++++++
packages/compiler-vapor/src/index.ts | 1 +
pnpm-lock.yaml | 22 ++++++++++
6 files changed, 91 insertions(+)
create mode 100644 packages/compiler-vapor/LICENSE
create mode 100644 packages/compiler-vapor/README.md
create mode 100644 packages/compiler-vapor/__tests__/reactivityTransform.spec.ts
create mode 100644 packages/compiler-vapor/package.json
create mode 100644 packages/compiler-vapor/src/index.ts
diff --git a/packages/compiler-vapor/LICENSE b/packages/compiler-vapor/LICENSE
new file mode 100644
index 00000000000..15f1f7e7a49
--- /dev/null
+++ b/packages/compiler-vapor/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2018-present, Yuxi (Evan) You
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/packages/compiler-vapor/README.md b/packages/compiler-vapor/README.md
new file mode 100644
index 00000000000..c09888880d4
--- /dev/null
+++ b/packages/compiler-vapor/README.md
@@ -0,0 +1,4 @@
+# @vue/compiler-vapor
+
+> Note:
+> Work in progress. Do not use yet.
diff --git a/packages/compiler-vapor/__tests__/reactivityTransform.spec.ts b/packages/compiler-vapor/__tests__/reactivityTransform.spec.ts
new file mode 100644
index 00000000000..730cbb180db
--- /dev/null
+++ b/packages/compiler-vapor/__tests__/reactivityTransform.spec.ts
@@ -0,0 +1,3 @@
+test('basic', () => {
+ //
+})
diff --git a/packages/compiler-vapor/package.json b/packages/compiler-vapor/package.json
new file mode 100644
index 00000000000..8f656f4aea6
--- /dev/null
+++ b/packages/compiler-vapor/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "@vue/compiler-vapor",
+ "version": "0.0.0",
+ "description": "@vue/compiler-vapor",
+ "main": "dist/compiler-vapor.cjs.js",
+ "files": [
+ "dist"
+ ],
+ "buildOptions": {
+ "formats": [
+ "cjs"
+ ],
+ "prod": false
+ },
+ "types": "dist/compiler-vapor.d.ts",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vuejs/core.git",
+ "directory": "packages/compiler-vapor"
+ },
+ "keywords": [
+ "vue"
+ ],
+ "author": "Evan You",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/vuejs/core/issues"
+ },
+ "homepage": "https://github.com/vuejs/core/tree/dev/packages/compiler-vapor#readme",
+ "dependencies": {
+ "@babel/parser": "^7.23.0",
+ "@vue/compiler-core": "3.3.8",
+ "@vue/shared": "3.3.8",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.5"
+ },
+ "devDependencies": {
+ "@babel/types": "^7.23.0"
+ }
+}
diff --git a/packages/compiler-vapor/src/index.ts b/packages/compiler-vapor/src/index.ts
new file mode 100644
index 00000000000..21ec276fc7f
--- /dev/null
+++ b/packages/compiler-vapor/src/index.ts
@@ -0,0 +1 @@
+export const foo = 'bar'
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a6ef2541c61..f048d88c066 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -257,6 +257,28 @@ importers:
specifier: 3.3.8
version: link:../shared
+ packages/compiler-vapor:
+ dependencies:
+ '@babel/parser':
+ specifier: ^7.23.0
+ version: 7.23.0
+ '@vue/compiler-core':
+ specifier: 3.3.8
+ version: link:../compiler-core
+ '@vue/shared':
+ specifier: 3.3.8
+ version: link:../shared
+ estree-walker:
+ specifier: ^2.0.2
+ version: 2.0.2
+ magic-string:
+ specifier: ^0.30.5
+ version: 0.30.5
+ devDependencies:
+ '@babel/types':
+ specifier: ^7.23.0
+ version: 7.23.0
+
packages/dts-built-test:
dependencies:
'@vue/reactivity':
From 061d8668e8e6ba1dce54cc87e8193fb8fc493411 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?=
Date: Thu, 9 Nov 2023 17:26:59 +0800
Subject: [PATCH 002/783] chore: temp remove check
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 6dbd935809b..8c34405c926 100644
--- a/package.json
+++ b/package.json
@@ -41,7 +41,7 @@
"postinstall": "simple-git-hooks"
},
"simple-git-hooks": {
- "pre-commit": "pnpm lint-staged && pnpm check",
+ "pre-commit": "pnpm lint-staged",
"commit-msg": "node scripts/verifyCommit.js"
},
"lint-staged": {
From 269879ef965ac75f8fa465fd0812c2f02379092a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?=
Date: Thu, 9 Nov 2023 17:30:23 +0800
Subject: [PATCH 003/783] ci: temp remove some ci
---
.github/workflows/canary-minor.yml | 33 -------------------
.github/workflows/canary.yml | 31 ------------------
.github/workflows/ci.yml | 52 ------------------------------
3 files changed, 116 deletions(-)
delete mode 100644 .github/workflows/canary-minor.yml
delete mode 100644 .github/workflows/canary.yml
diff --git a/.github/workflows/canary-minor.yml b/.github/workflows/canary-minor.yml
deleted file mode 100644
index 27fbd42c90c..00000000000
--- a/.github/workflows/canary-minor.yml
+++ /dev/null
@@ -1,33 +0,0 @@
-name: canary minor release
-on:
- # Runs every Monday at 1 AM UTC (9:00 AM in Singapore)
- schedule:
- - cron: 0 1 * * MON
- workflow_dispatch:
-
-jobs:
- canary:
- # prevents this action from running on forks
- if: github.repository == 'vuejs/core'
- runs-on: ubuntu-latest
- environment: Release
- steps:
- - uses: actions/checkout@v4
- with:
- ref: minor
-
- - name: Install pnpm
- uses: pnpm/action-setup@v2
-
- - name: Set node version to 18
- uses: actions/setup-node@v4
- with:
- node-version: 18
- registry-url: 'https://registry.npmjs.org'
- cache: 'pnpm'
-
- - run: pnpm install
-
- - run: pnpm release --canary --tag minor
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml
deleted file mode 100644
index 61490232f66..00000000000
--- a/.github/workflows/canary.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-name: canary release
-on:
- # Runs every Monday at 1 AM UTC (9:00 AM in Singapore)
- schedule:
- - cron: 0 1 * * MON
- workflow_dispatch:
-
-jobs:
- canary:
- # prevents this action from running on forks
- if: github.repository == 'vuejs/core'
- runs-on: ubuntu-latest
- environment: Release
- steps:
- - uses: actions/checkout@v4
-
- - name: Install pnpm
- uses: pnpm/action-setup@v2
-
- - name: Install Node.js
- uses: actions/setup-node@v4
- with:
- node-version-file: '.node-version'
- registry-url: 'https://registry.npmjs.org'
- cache: 'pnpm'
-
- - run: pnpm install
-
- - run: pnpm release --canary
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 493ab295000..52a888897b1 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -33,58 +33,6 @@ jobs:
- name: Run unit tests
run: pnpm run test-unit
- unit-test-windows:
- runs-on: windows-latest
- if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
- env:
- PUPPETEER_SKIP_DOWNLOAD: 'true'
- steps:
- - uses: actions/checkout@v4
-
- - name: Install pnpm
- uses: pnpm/action-setup@v2
-
- - name: Install Node.js
- uses: actions/setup-node@v4
- with:
- node-version-file: '.node-version'
- cache: 'pnpm'
-
- - run: pnpm install
-
- - name: Run compiler unit tests
- run: pnpm run test-unit compiler
-
- - name: Run ssr unit tests
- run: pnpm run test-unit server-renderer
-
- e2e-test:
- runs-on: ubuntu-latest
- if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
- steps:
- - uses: actions/checkout@v4
-
- - name: Setup cache for Chromium binary
- uses: actions/cache@v3
- with:
- path: ~/.cache/puppeteer
- key: chromium-${{ hashFiles('pnpm-lock.yaml') }}
-
- - name: Install pnpm
- uses: pnpm/action-setup@v2
-
- - 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
-
lint-and-test-dts:
runs-on: ubuntu-latest
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
From 135f5eb8e70fd66476757e6751e4701970e81781 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?=
Date: Thu, 9 Nov 2023 17:35:08 +0800
Subject: [PATCH 004/783] feat: init runtime vapor
---
packages/compiler-core/package.json | 6 ++--
packages/compiler-dom/package.json | 6 ++--
packages/compiler-sfc/package.json | 6 ++--
packages/compiler-ssr/package.json | 6 ++--
packages/compiler-vapor/README.md | 2 +-
...ctivityTransform.spec.ts => basic.test.ts} | 0
packages/compiler-vapor/package.json | 6 ++--
packages/reactivity-transform/package.json | 6 ++--
packages/reactivity/package.json | 6 ++--
packages/runtime-core/package.json | 6 ++--
packages/runtime-dom/package.json | 6 ++--
packages/runtime-test/package.json | 6 ++--
packages/runtime-vapor/LICENSE | 21 ++++++++++++
packages/runtime-vapor/README.md | 4 +++
.../runtime-vapor/__tests__/basic.spec.ts | 3 ++
packages/runtime-vapor/package.json | 32 +++++++++++++++++++
packages/runtime-vapor/src/index.ts | 1 +
packages/server-renderer/package.json | 6 ++--
packages/shared/package.json | 6 ++--
packages/vue-compat/package.json | 6 ++--
packages/vue/package.json | 6 ++--
pnpm-lock.yaml | 2 ++
22 files changed, 106 insertions(+), 43 deletions(-)
rename packages/compiler-vapor/__tests__/{reactivityTransform.spec.ts => basic.test.ts} (100%)
create mode 100644 packages/runtime-vapor/LICENSE
create mode 100644 packages/runtime-vapor/README.md
create mode 100644 packages/runtime-vapor/__tests__/basic.spec.ts
create mode 100644 packages/runtime-vapor/package.json
create mode 100644 packages/runtime-vapor/src/index.ts
diff --git a/packages/compiler-core/package.json b/packages/compiler-core/package.json
index 948861435d2..3e9fc887e25 100644
--- a/packages/compiler-core/package.json
+++ b/packages/compiler-core/package.json
@@ -19,7 +19,7 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/vuejs/core.git",
+ "url": "git+https://github.com/vuejs/core-vapor.git",
"directory": "packages/compiler-core"
},
"keywords": [
@@ -28,9 +28,9 @@
"author": "Evan You",
"license": "MIT",
"bugs": {
- "url": "https://github.com/vuejs/core/issues"
+ "url": "https://github.com/vuejs/core-vapor/issues"
},
- "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-core#readme",
+ "homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/compiler-core#readme",
"dependencies": {
"@babel/parser": "^7.23.3",
"@vue/shared": "3.3.8",
diff --git a/packages/compiler-dom/package.json b/packages/compiler-dom/package.json
index c2bed3837a1..9bc76aaaa55 100644
--- a/packages/compiler-dom/package.json
+++ b/packages/compiler-dom/package.json
@@ -24,7 +24,7 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/vuejs/core.git",
+ "url": "git+https://github.com/vuejs/core-vapor.git",
"directory": "packages/compiler-dom"
},
"keywords": [
@@ -33,9 +33,9 @@
"author": "Evan You",
"license": "MIT",
"bugs": {
- "url": "https://github.com/vuejs/core/issues"
+ "url": "https://github.com/vuejs/core-vapor/issues"
},
- "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-dom#readme",
+ "homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/compiler-dom#readme",
"dependencies": {
"@vue/shared": "3.3.8",
"@vue/compiler-core": "3.3.8"
diff --git a/packages/compiler-sfc/package.json b/packages/compiler-sfc/package.json
index 4d55ffb0820..d2f152c3e0f 100644
--- a/packages/compiler-sfc/package.json
+++ b/packages/compiler-sfc/package.json
@@ -19,7 +19,7 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/vuejs/core.git",
+ "url": "git+https://github.com/vuejs/core-vapor.git",
"directory": "packages/compiler-sfc"
},
"keywords": [
@@ -28,9 +28,9 @@
"author": "Evan You",
"license": "MIT",
"bugs": {
- "url": "https://github.com/vuejs/core/issues"
+ "url": "https://github.com/vuejs/core-vapor/issues"
},
- "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-sfc#readme",
+ "homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/compiler-sfc#readme",
"dependencies": {
"@babel/parser": "^7.23.3",
"@vue/compiler-core": "3.3.8",
diff --git a/packages/compiler-ssr/package.json b/packages/compiler-ssr/package.json
index 6ba15970340..3da348c7f4e 100644
--- a/packages/compiler-ssr/package.json
+++ b/packages/compiler-ssr/package.json
@@ -15,7 +15,7 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/vuejs/core.git",
+ "url": "git+https://github.com/vuejs/core-vapor.git",
"directory": "packages/compiler-ssr"
},
"keywords": [
@@ -24,9 +24,9 @@
"author": "Evan You",
"license": "MIT",
"bugs": {
- "url": "https://github.com/vuejs/core/issues"
+ "url": "https://github.com/vuejs/core-vapor/issues"
},
- "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-ssr#readme",
+ "homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/compiler-ssr#readme",
"dependencies": {
"@vue/shared": "3.3.8",
"@vue/compiler-dom": "3.3.8"
diff --git a/packages/compiler-vapor/README.md b/packages/compiler-vapor/README.md
index c09888880d4..5d59186fd8a 100644
--- a/packages/compiler-vapor/README.md
+++ b/packages/compiler-vapor/README.md
@@ -1,4 +1,4 @@
# @vue/compiler-vapor
-> Note:
+> **Note**
> Work in progress. Do not use yet.
diff --git a/packages/compiler-vapor/__tests__/reactivityTransform.spec.ts b/packages/compiler-vapor/__tests__/basic.test.ts
similarity index 100%
rename from packages/compiler-vapor/__tests__/reactivityTransform.spec.ts
rename to packages/compiler-vapor/__tests__/basic.test.ts
diff --git a/packages/compiler-vapor/package.json b/packages/compiler-vapor/package.json
index 8f656f4aea6..f118df68de3 100644
--- a/packages/compiler-vapor/package.json
+++ b/packages/compiler-vapor/package.json
@@ -15,7 +15,7 @@
"types": "dist/compiler-vapor.d.ts",
"repository": {
"type": "git",
- "url": "git+https://github.com/vuejs/core.git",
+ "url": "git+https://github.com/vuejs/core-vapor.git",
"directory": "packages/compiler-vapor"
},
"keywords": [
@@ -24,9 +24,9 @@
"author": "Evan You",
"license": "MIT",
"bugs": {
- "url": "https://github.com/vuejs/core/issues"
+ "url": "https://github.com/vuejs/core-vapor/issues"
},
- "homepage": "https://github.com/vuejs/core/tree/dev/packages/compiler-vapor#readme",
+ "homepage": "https://github.com/vuejs/core-vapor/tree/dev/packages/compiler-vapor#readme",
"dependencies": {
"@babel/parser": "^7.23.0",
"@vue/compiler-core": "3.3.8",
diff --git a/packages/reactivity-transform/package.json b/packages/reactivity-transform/package.json
index 48749f0bb31..02bd6ca8587 100644
--- a/packages/reactivity-transform/package.json
+++ b/packages/reactivity-transform/package.json
@@ -15,7 +15,7 @@
"types": "dist/reactivity-transform.d.ts",
"repository": {
"type": "git",
- "url": "git+https://github.com/vuejs/core.git",
+ "url": "git+https://github.com/vuejs/core-vapor.git",
"directory": "packages/reactivity-transform"
},
"keywords": [
@@ -24,9 +24,9 @@
"author": "Evan You",
"license": "MIT",
"bugs": {
- "url": "https://github.com/vuejs/core/issues"
+ "url": "https://github.com/vuejs/core-vapor/issues"
},
- "homepage": "https://github.com/vuejs/core/tree/dev/packages/reactivity-transform#readme",
+ "homepage": "https://github.com/vuejs/core-vapor/tree/dev/packages/reactivity-transform#readme",
"dependencies": {
"@babel/parser": "^7.23.3",
"@vue/compiler-core": "3.3.8",
diff --git a/packages/reactivity/package.json b/packages/reactivity/package.json
index 6582c7683b7..2ea228a9222 100644
--- a/packages/reactivity/package.json
+++ b/packages/reactivity/package.json
@@ -14,7 +14,7 @@
"sideEffects": false,
"repository": {
"type": "git",
- "url": "git+https://github.com/vuejs/core.git",
+ "url": "git+https://github.com/vuejs/core-vapor.git",
"directory": "packages/reactivity"
},
"buildOptions": {
@@ -32,9 +32,9 @@
"author": "Evan You",
"license": "MIT",
"bugs": {
- "url": "https://github.com/vuejs/core/issues"
+ "url": "https://github.com/vuejs/core-vapor/issues"
},
- "homepage": "https://github.com/vuejs/core/tree/main/packages/reactivity#readme",
+ "homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/reactivity#readme",
"dependencies": {
"@vue/shared": "3.3.8"
}
diff --git a/packages/runtime-core/package.json b/packages/runtime-core/package.json
index 03e85e30746..7f751af9a00 100644
--- a/packages/runtime-core/package.json
+++ b/packages/runtime-core/package.json
@@ -19,7 +19,7 @@
"sideEffects": false,
"repository": {
"type": "git",
- "url": "git+https://github.com/vuejs/core.git",
+ "url": "git+https://github.com/vuejs/core-vapor.git",
"directory": "packages/runtime-core"
},
"keywords": [
@@ -28,9 +28,9 @@
"author": "Evan You",
"license": "MIT",
"bugs": {
- "url": "https://github.com/vuejs/core/issues"
+ "url": "https://github.com/vuejs/core-vapor/issues"
},
- "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-core#readme",
+ "homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/runtime-core#readme",
"dependencies": {
"@vue/shared": "3.3.8",
"@vue/reactivity": "3.3.8"
diff --git a/packages/runtime-dom/package.json b/packages/runtime-dom/package.json
index 4ab6e8122f6..3ac9aa515ba 100644
--- a/packages/runtime-dom/package.json
+++ b/packages/runtime-dom/package.json
@@ -22,7 +22,7 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/vuejs/core.git",
+ "url": "git+https://github.com/vuejs/core-vapor.git",
"directory": "packages/runtime-dom"
},
"keywords": [
@@ -31,9 +31,9 @@
"author": "Evan You",
"license": "MIT",
"bugs": {
- "url": "https://github.com/vuejs/core/issues"
+ "url": "https://github.com/vuejs/core-vapor/issues"
},
- "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-dom#readme",
+ "homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/runtime-dom#readme",
"dependencies": {
"@vue/shared": "3.3.8",
"@vue/runtime-core": "3.3.8",
diff --git a/packages/runtime-test/package.json b/packages/runtime-test/package.json
index 0012e3ff6a1..f3233c23ef8 100644
--- a/packages/runtime-test/package.json
+++ b/packages/runtime-test/package.json
@@ -12,7 +12,7 @@
],
"repository": {
"type": "git",
- "url": "git+https://github.com/vuejs/core.git",
+ "url": "git+https://github.com/vuejs/core-vapor.git",
"directory": "packages/runtime-test"
},
"keywords": [
@@ -21,9 +21,9 @@
"author": "Evan You",
"license": "MIT",
"bugs": {
- "url": "https://github.com/vuejs/core/issues"
+ "url": "https://github.com/vuejs/core-vapor/issues"
},
- "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-test#readme",
+ "homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/runtime-test#readme",
"dependencies": {
"@vue/shared": "3.3.8",
"@vue/runtime-core": "3.3.8"
diff --git a/packages/runtime-vapor/LICENSE b/packages/runtime-vapor/LICENSE
new file mode 100644
index 00000000000..15f1f7e7a49
--- /dev/null
+++ b/packages/runtime-vapor/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2018-present, Yuxi (Evan) You
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/packages/runtime-vapor/README.md b/packages/runtime-vapor/README.md
new file mode 100644
index 00000000000..125de1f776d
--- /dev/null
+++ b/packages/runtime-vapor/README.md
@@ -0,0 +1,4 @@
+# @vue/runtime-vapor
+
+> **Note**
+> Work in progress. Do not use yet.
diff --git a/packages/runtime-vapor/__tests__/basic.spec.ts b/packages/runtime-vapor/__tests__/basic.spec.ts
new file mode 100644
index 00000000000..730cbb180db
--- /dev/null
+++ b/packages/runtime-vapor/__tests__/basic.spec.ts
@@ -0,0 +1,3 @@
+test('basic', () => {
+ //
+})
diff --git a/packages/runtime-vapor/package.json b/packages/runtime-vapor/package.json
new file mode 100644
index 00000000000..be410e92bb8
--- /dev/null
+++ b/packages/runtime-vapor/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "@vue/runtime-vapor",
+ "version": "0.0.0",
+ "description": "@vue/runtime-vapor",
+ "main": "dist/runtime-vapor.cjs.js",
+ "files": [
+ "dist"
+ ],
+ "buildOptions": {
+ "formats": [
+ "cjs"
+ ],
+ "prod": false
+ },
+ "types": "dist/runtime-vapor.d.ts",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vuejs/core-vapor.git",
+ "directory": "packages/runtime-vapor"
+ },
+ "keywords": [
+ "vue"
+ ],
+ "author": "Evan You",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/vuejs/core-vapor/issues"
+ },
+ "homepage": "https://github.com/vuejs/core-vapor/tree/dev/packages/runtime-vapor#readme",
+ "dependencies": {},
+ "devDependencies": {}
+}
diff --git a/packages/runtime-vapor/src/index.ts b/packages/runtime-vapor/src/index.ts
new file mode 100644
index 00000000000..21ec276fc7f
--- /dev/null
+++ b/packages/runtime-vapor/src/index.ts
@@ -0,0 +1 @@
+export const foo = 'bar'
diff --git a/packages/server-renderer/package.json b/packages/server-renderer/package.json
index 06d57b66011..93c95be4bca 100644
--- a/packages/server-renderer/package.json
+++ b/packages/server-renderer/package.json
@@ -19,7 +19,7 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/vuejs/core.git",
+ "url": "git+https://github.com/vuejs/core-vapor.git",
"directory": "packages/server-renderer"
},
"keywords": [
@@ -28,9 +28,9 @@
"author": "Evan You",
"license": "MIT",
"bugs": {
- "url": "https://github.com/vuejs/core/issues"
+ "url": "https://github.com/vuejs/core-vapor/issues"
},
- "homepage": "https://github.com/vuejs/core/tree/main/packages/server-renderer#readme",
+ "homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/server-renderer#readme",
"peerDependencies": {
"vue": "3.3.8"
},
diff --git a/packages/shared/package.json b/packages/shared/package.json
index d79e954abf3..327069958e3 100644
--- a/packages/shared/package.json
+++ b/packages/shared/package.json
@@ -18,7 +18,7 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/vuejs/core.git",
+ "url": "git+https://github.com/vuejs/core-vapor.git",
"directory": "packages/shared"
},
"keywords": [
@@ -27,7 +27,7 @@
"author": "Evan You",
"license": "MIT",
"bugs": {
- "url": "https://github.com/vuejs/core/issues"
+ "url": "https://github.com/vuejs/core-vapor/issues"
},
- "homepage": "https://github.com/vuejs/core/tree/main/packages/shared#readme"
+ "homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/shared#readme"
}
diff --git a/packages/vue-compat/package.json b/packages/vue-compat/package.json
index e44b68cc8e8..f39241ebc14 100644
--- a/packages/vue-compat/package.json
+++ b/packages/vue-compat/package.json
@@ -26,7 +26,7 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/vuejs/core.git"
+ "url": "git+https://github.com/vuejs/core-vapor.git"
},
"keywords": [
"vue"
@@ -34,9 +34,9 @@
"author": "Evan You",
"license": "MIT",
"bugs": {
- "url": "https://github.com/vuejs/core/issues"
+ "url": "https://github.com/vuejs/core-vapor/issues"
},
- "homepage": "https://github.com/vuejs/core/tree/main/packages/vue-compat#readme",
+ "homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/vue-compat#readme",
"dependencies": {
"@babel/parser": "^7.23.3",
"estree-walker": "^2.0.2",
diff --git a/packages/vue/package.json b/packages/vue/package.json
index 8835706df27..171fa667b8d 100644
--- a/packages/vue/package.json
+++ b/packages/vue/package.json
@@ -84,7 +84,7 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/vuejs/core.git"
+ "url": "git+https://github.com/vuejs/core-vapor.git"
},
"keywords": [
"vue"
@@ -92,9 +92,9 @@
"author": "Evan You",
"license": "MIT",
"bugs": {
- "url": "https://github.com/vuejs/core/issues"
+ "url": "https://github.com/vuejs/core-vapor/issues"
},
- "homepage": "https://github.com/vuejs/core/tree/main/packages/vue#readme",
+ "homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/vue#readme",
"dependencies": {
"@vue/shared": "3.3.8",
"@vue/compiler-dom": "3.3.8",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f048d88c066..6957269a033 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -361,6 +361,8 @@ importers:
specifier: 3.3.8
version: link:../shared
+ packages/runtime-vapor: {}
+
packages/server-renderer:
dependencies:
'@vue/compiler-ssr':
From bf6778b5bd9554225fac2c34abe71bf624700558 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?=
Date: Thu, 9 Nov 2023 17:42:37 +0800
Subject: [PATCH 005/783] chore: update readme
---
README.md | 28 ++--------------------------
1 file changed, 2 insertions(+), 26 deletions(-)
diff --git a/README.md b/README.md
index cbc05311ae7..109634c1aa6 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,6 @@
-# vuejs/core [](https://www.npmjs.com/package/vue) [](https://github.com/vuejs/core/actions/workflows/ci.yml)
+# Vue Vapor
-## Getting Started
-
-Please follow the documentation at [vuejs.org](https://vuejs.org/)!
+This repository is a fork of [vuejs/core](https://github.com/vuejs/core) and is used for research and development of no virtual dom mode.
## Sponsors
@@ -24,28 +22,6 @@ Vue.js is an MIT-licensed open source project with its ongoing development made
-## Questions
-
-For questions and support please use [the official forum](https://forum.vuejs.org) or [community chat](https://chat.vuejs.org/). The issue list of this repo is **exclusively** for bug reports and feature requests.
-
-## Issues
-
-Please make sure to respect issue requirements and use [the new issue helper](https://new-issue.vuejs.org/) when opening an issue. Issues not conforming to the guidelines may be closed immediately.
-
-## Stay In Touch
-
-- [Twitter](https://twitter.com/vuejs)
-- [Blog](https://blog.vuejs.org/)
-- [Job Board](https://vuejobs.com/?ref=vuejs)
-
-## Contribution
-
-Please make sure to read the [Contributing Guide](https://github.com/vuejs/core/blob/main/.github/contributing.md) before making a pull request. If you have a Vue-related project/component/tool, add it with a pull request to [this curated list](https://github.com/vuejs/awesome-vue)!
-
-Thank you to all the people who already contributed to Vue!
-
-
-
## License
[MIT](https://opensource.org/licenses/MIT)
From ef9628ce7fdbf5415dbcb19fecad0b9de987afdb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?=
Date: Thu, 9 Nov 2023 17:54:31 +0800
Subject: [PATCH 006/783] feat(runtime-vapor): template
---
.../runtime-vapor/__tests__/basic.spec.ts | 3 ---
.../runtime-vapor/__tests__/template.spec.ts | 17 ++++++++++++++++
packages/runtime-vapor/src/index.ts | 2 +-
packages/runtime-vapor/src/template.ts | 20 +++++++++++++++++++
4 files changed, 38 insertions(+), 4 deletions(-)
delete mode 100644 packages/runtime-vapor/__tests__/basic.spec.ts
create mode 100644 packages/runtime-vapor/__tests__/template.spec.ts
create mode 100644 packages/runtime-vapor/src/template.ts
diff --git a/packages/runtime-vapor/__tests__/basic.spec.ts b/packages/runtime-vapor/__tests__/basic.spec.ts
deleted file mode 100644
index 730cbb180db..00000000000
--- a/packages/runtime-vapor/__tests__/basic.spec.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-test('basic', () => {
- //
-})
diff --git a/packages/runtime-vapor/__tests__/template.spec.ts b/packages/runtime-vapor/__tests__/template.spec.ts
new file mode 100644
index 00000000000..da471b43222
--- /dev/null
+++ b/packages/runtime-vapor/__tests__/template.spec.ts
@@ -0,0 +1,17 @@
+/**
+ * @vitest-environment jsdom
+ */
+
+import { template } from '../src'
+
+describe('api: template', () => {
+ test('create element', () => {
+ const t = template('
')
- const div = t()
- expect(div).toBeInstanceOf(HTMLDivElement)
+ const root = t()
+ expect(root).toBeInstanceOf(DocumentFragment)
+ expect(root.childNodes[0]).toBeInstanceOf(HTMLDivElement)
const div2 = t()
- expect(div2).toBeInstanceOf(HTMLDivElement)
- expect(div2).not.toBe(div)
+ expect(div2).toBeInstanceOf(DocumentFragment)
+ expect(div2).not.toBe(root)
+ })
+
+ test('create fragment', () => {
+ const frag = fragment()
+ const root = frag()
+ expect(root).toBeInstanceOf(DocumentFragment)
+ expect(root.childNodes.length).toBe(0)
+
+ const div2 = frag()
+ expect(div2).toBeInstanceOf(DocumentFragment)
+ expect(div2).not.toBe(root)
})
})
From a3fb85fd003576a901b0d7af58e9d16e0134d4b5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?=
Date: Mon, 27 Nov 2023 00:24:19 +0800
Subject: [PATCH 042/783] chore: remove issue template
---
.github/ISSUE_TEMPLATE/bug_report.yml | 74 ---------------------------
.github/ISSUE_TEMPLATE/config.yml | 17 ------
2 files changed, 91 deletions(-)
delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml
delete mode 100644 .github/ISSUE_TEMPLATE/config.yml
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
deleted file mode 100644
index 95e0ca79c07..00000000000
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ /dev/null
@@ -1,74 +0,0 @@
-name: "\U0001F41E Bug report"
-description: Create a report to help us improve
-body:
- - type: markdown
- attributes:
- value: |
- **Before You Start...**
-
- This form is only for submitting bug reports. If you have a usage question
- or are unsure if this is really a bug, make sure to:
-
- - Read the [docs](https://vuejs.org/)
- - Ask on [Discord Chat](https://chat.vuejs.org/)
- - Ask on [GitHub Discussions](https://github.com/vuejs/core/discussions)
- - Look for / ask questions on [Stack Overflow](https://stackoverflow.com/questions/ask?tags=vue.js)
-
- Also try to search for your issue - it may have already been answered or even fixed in the development branch.
- However, if you find that an old, closed issue still persists in the latest version,
- you should open a new issue using the form below instead of commenting on the old issue.
- - type: input
- id: version
- attributes:
- label: Vue version
- validations:
- required: true
- - type: input
- id: reproduction-link
- attributes:
- label: Link to minimal reproduction
- description: |
- The easiest way to provide a reproduction is by showing the bug in [The SFC Playground](https://play.vuejs.org/).
- If it cannot be reproduced in the playground and requires a proper build setup, try [StackBlitz](https://vite.new/vue).
- If neither of these are suitable, you can always provide a GitHub repository.
-
- The reproduction should be **minimal** - i.e. it should contain only the bare minimum amount of code needed
- to show the bug. See [Bug Reproduction Guidelines](https://github.com/vuejs/core/blob/main/.github/bug-repro-guidelines.md) for more details.
-
- Please do not just fill in a random link. The issue will be closed if no valid reproduction is provided.
- placeholder: Reproduction Link
- validations:
- required: true
- - type: textarea
- id: steps-to-reproduce
- attributes:
- label: Steps to reproduce
- description: |
- What do we need to do after opening your repro in order to make the bug happen? Clear and concise reproduction instructions are important for us to be able to triage your issue in a timely manner. Note that you can use [Markdown](https://guides.github.com/features/mastering-markdown/) to format lists and code.
- placeholder: Steps to reproduce
- validations:
- required: true
- - type: textarea
- id: expected
- attributes:
- label: What is expected?
- validations:
- required: true
- - type: textarea
- id: actually-happening
- attributes:
- label: What is actually happening?
- validations:
- required: true
- - type: textarea
- id: system-info
- attributes:
- label: System Info
- description: Output of `npx envinfo --system --npmPackages vue --binaries --browsers`
- render: shell
- placeholder: System, Binaries, Browsers
- - type: textarea
- id: additional-comments
- attributes:
- label: Any additional comments?
- description: e.g. some background/context of how you ran into this bug.
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
deleted file mode 100644
index 02f99c6bfbb..00000000000
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-blank_issues_enabled: false
-contact_links:
- - name: Feature Request
- url: https://github.com/vuejs/rfcs/discussions
- about: Suggest new features for consideration
- - name: Discord Chat
- url: https://chat.vuejs.org
- about: Ask questions and discuss with other Vue users in real time.
- - name: Questions & Discussions
- url: https://github.com/vuejs/core/discussions
- about: Use GitHub discussions for message-board style questions and discussions.
- - name: Patreon
- url: https://www.patreon.com/evanyou
- about: Love Vue.js? Please consider supporting us via Patreon.
- - name: Open Collective
- url: https://opencollective.com/vuejs/donate
- about: Love Vue.js? Please consider supporting us via Open Collective.
From 07373d41fd9d453bf669abe2be67a46ce478293b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?=
Date: Mon, 27 Nov 2023 05:16:21 +0800
Subject: [PATCH 043/783] feat: append multiple node
---
.../__snapshots__/compile.test.ts.snap | 31 ++-
.../__snapshots__/fixtures.test.ts.snap | 20 +-
packages/compiler-vapor/src/generate.ts | 80 +++---
packages/compiler-vapor/src/ir.ts | 21 +-
packages/compiler-vapor/src/transform.ts | 231 +++++++++---------
packages/runtime-vapor/src/render.ts | 8 +-
.../src/{all-dynamic.vue => dynamic-all.vue} | 0
playground/src/dynamic-mixed-mid.vue | 4 +
.../src/{dynamic.vue => dynamic-mixed.vue} | 0
9 files changed, 220 insertions(+), 175 deletions(-)
rename playground/src/{all-dynamic.vue => dynamic-all.vue} (100%)
create mode 100644 playground/src/dynamic-mixed-mid.vue
rename playground/src/{dynamic.vue => dynamic-mixed.vue} (100%)
diff --git a/packages/compiler-vapor/__tests__/__snapshots__/compile.test.ts.snap b/packages/compiler-vapor/__tests__/__snapshots__/compile.test.ts.snap
index 4fa319bd189..020a7f31e86 100644
--- a/packages/compiler-vapor/__tests__/__snapshots__/compile.test.ts.snap
+++ b/packages/compiler-vapor/__tests__/__snapshots__/compile.test.ts.snap
@@ -8,16 +8,16 @@ export function render() {
const n0 = t0();
const {
0: [
- n1,
+ n3,
{
- 1: [n3],
+ 1: [n2],
},
],
} = children(n0);
- const n2 = createTextNode(count.value);
- insert(n2, n1, n3);
+ const n1 = createTextNode(count.value);
+ insert(n1, n3, n2);
watchEffect(() => {
- setText(n2, undefined, count.value);
+ setText(n1, undefined, count.value);
});
return n0;
}
@@ -110,22 +110,22 @@ export function render() {
`;
exports[`comile > directives > v-once > basic 1`] = `
-"import { template, children, createTextNode, insert, setText, setAttr } from 'vue/vapor';
+"import { template, children, createTextNode, setText, setAttr, insert } from 'vue/vapor';
const t0 = template('
')
+ expect(spyIfFn!).toHaveBeenCalledTimes(1)
+ expect(spyElseFn!).toHaveBeenCalledTimes(2)
+ })
+})
diff --git a/packages/runtime-vapor/src/apiLifecycle.ts b/packages/runtime-vapor/src/apiLifecycle.ts
index 5c270d1ca94..831a94b3820 100644
--- a/packages/runtime-vapor/src/apiLifecycle.ts
+++ b/packages/runtime-vapor/src/apiLifecycle.ts
@@ -2,7 +2,6 @@ import {
type ComponentInternalInstance,
currentInstance,
setCurrentInstance,
- unsetCurrentInstance,
} from './component'
import { warn } from './warning'
import { pauseTracking, resetTracking } from '@vue/reactivity'
@@ -25,9 +24,9 @@ export const injectHook = (
return
}
pauseTracking()
- setCurrentInstance(target)
+ const reset = setCurrentInstance(target)
const res = callWithAsyncErrorHandling(hook, target, type, args)
- unsetCurrentInstance()
+ reset()
resetTracking()
return res
})
diff --git a/packages/runtime-vapor/src/component.ts b/packages/runtime-vapor/src/component.ts
index ab2e49c3af1..51be7f4ba1b 100644
--- a/packages/runtime-vapor/src/component.ts
+++ b/packages/runtime-vapor/src/component.ts
@@ -122,10 +122,17 @@ export const getCurrentInstance: () => ComponentInternalInstance | null = () =>
currentInstance
export const setCurrentInstance = (instance: ComponentInternalInstance) => {
+ const prev = currentInstance
currentInstance = instance
+ instance.scope.on()
+ return () => {
+ instance.scope.off()
+ currentInstance = prev
+ }
}
export const unsetCurrentInstance = () => {
+ currentInstance?.scope.off()
currentInstance = null
}
diff --git a/packages/runtime-vapor/src/dom.ts b/packages/runtime-vapor/src/dom.ts
index 47d888fae4c..1dda46f2170 100644
--- a/packages/runtime-vapor/src/dom.ts
+++ b/packages/runtime-vapor/src/dom.ts
@@ -6,11 +6,7 @@ import {
} from '@vue/shared'
import type { Block, ParentBlock } from './render'
-export function insert(
- block: Block,
- parent: ParentNode,
- anchor: Node | null = null,
-) {
+export function insert(block: Block, parent: Node, anchor: Node | null = null) {
// if (!isHydrating) {
if (block instanceof Node) {
parent.insertBefore(block, anchor)
diff --git a/packages/runtime-vapor/src/if.ts b/packages/runtime-vapor/src/if.ts
new file mode 100644
index 00000000000..155658c9aaa
--- /dev/null
+++ b/packages/runtime-vapor/src/if.ts
@@ -0,0 +1,60 @@
+import { renderWatch } from './renderWatch'
+import type { BlockFn, Fragment } from './render'
+import { effectScope, onEffectCleanup } from '@vue/reactivity'
+import { insert, remove } from './dom'
+
+export const createIf = (
+ condition: () => any,
+ b1: BlockFn,
+ b2?: BlockFn,
+ // hydrationNode?: Node,
+): Fragment => {
+ let branch: BlockFn | undefined
+ let parent: ParentNode | undefined | null
+ const anchor = __DEV__
+ ? // eslint-disable-next-line no-restricted-globals
+ document.createComment('if')
+ : // eslint-disable-next-line no-restricted-globals
+ document.createTextNode('')
+ const fragment: Fragment = { nodes: [], anchor }
+
+ // TODO: SSR
+ // if (isHydrating) {
+ // parent = hydrationNode!.parentNode
+ // setCurrentHydrationNode(hydrationNode!)
+ // }
+
+ renderWatch(
+ () => !!condition(),
+ (value) => {
+ parent ||= anchor.parentNode
+ if ((branch = value ? b1 : b2)) {
+ let scope = effectScope()
+ let block = scope.run(branch)!
+
+ if (block instanceof DocumentFragment) {
+ block = Array.from(block.childNodes)
+ }
+ fragment.nodes = block
+
+ parent && insert(block, parent, anchor)
+
+ onEffectCleanup(() => {
+ parent ||= anchor.parentNode
+ scope.stop()
+ remove(block, parent!)
+ })
+ } else {
+ fragment.nodes = []
+ }
+ },
+ { immediate: true },
+ )
+
+ // TODO: SSR
+ // if (isHydrating) {
+ // parent!.insertBefore(anchor, currentHydrationNode)
+ // }
+
+ return fragment
+}
diff --git a/packages/runtime-vapor/src/index.ts b/packages/runtime-vapor/src/index.ts
index 805fbae0eb9..0fc7be64a12 100644
--- a/packages/runtime-vapor/src/index.ts
+++ b/packages/runtime-vapor/src/index.ts
@@ -50,3 +50,4 @@ export * from './dom'
export * from './directives/vShow'
export * from './apiLifecycle'
export { getCurrentInstance, type ComponentInternalInstance } from './component'
+export * from './if'
diff --git a/packages/runtime-vapor/src/render.ts b/packages/runtime-vapor/src/render.ts
index bce3a2be75f..22c3b7fbfd5 100644
--- a/packages/runtime-vapor/src/render.ts
+++ b/packages/runtime-vapor/src/render.ts
@@ -14,7 +14,7 @@ import { insert, remove } from './dom'
export type Block = Node | Fragment | Block[]
export type ParentBlock = ParentNode | Node[]
export type Fragment = { nodes: Block; anchor: Node }
-export type BlockFn = (props: any, ctx: any) => Block
+export type BlockFn = (props?: any) => Block
let isRenderingActivity = false
export function getIsRendering() {
@@ -44,7 +44,7 @@ export function mountComponent(
) {
instance.container = container
- setCurrentInstance(instance)
+ const reset = setCurrentInstance(instance)
const block = instance.scope.run(() => {
const { component, props } = instance
const ctx = { expose: () => {} }
@@ -82,7 +82,7 @@ export function mountComponent(
// hook: mounted
invokeDirectiveHook(instance, 'mounted')
m && invokeArrayFns(m)
- unsetCurrentInstance()
+ reset()
return instance
}
diff --git a/packages/runtime-vapor/src/renderWatch.ts b/packages/runtime-vapor/src/renderWatch.ts
index e5103d716fe..c0167cdf51c 100644
--- a/packages/runtime-vapor/src/renderWatch.ts
+++ b/packages/runtime-vapor/src/renderWatch.ts
@@ -3,10 +3,13 @@ import {
type BaseWatchMiddleware,
type BaseWatchOptions,
baseWatch,
- getCurrentScope,
} from '@vue/reactivity'
-import { NOOP, invokeArrayFns, remove } from '@vue/shared'
-import { type ComponentInternalInstance, currentInstance } from './component'
+import { NOOP, extend, invokeArrayFns, remove } from '@vue/shared'
+import {
+ type ComponentInternalInstance,
+ getCurrentInstance,
+ setCurrentInstance,
+} from './component'
import {
createVaporRenderingScheduler,
queuePostRenderEffect,
@@ -15,6 +18,12 @@ import { handleError as handleErrorWithInstance } from './errorHandling'
import { warn } from './warning'
import { invokeDirectiveHook } from './directive'
+interface RenderWatchOptions {
+ immediate?: boolean
+ deep?: boolean
+ once?: boolean
+}
+
type WatchStopHandle = () => void
export function renderEffect(effect: () => void): WatchStopHandle {
@@ -24,20 +33,25 @@ export function renderEffect(effect: () => void): WatchStopHandle {
export function renderWatch(
source: any,
cb: (value: any, oldValue: any) => void,
+ options?: RenderWatchOptions,
): WatchStopHandle {
- return doWatch(source as any, cb)
+ return doWatch(source as any, cb, options)
}
-function doWatch(source: any, cb?: any): WatchStopHandle {
- const extendOptions: BaseWatchOptions = {}
+function doWatch(
+ source: any,
+ cb?: any,
+ options?: RenderWatchOptions,
+): WatchStopHandle {
+ const extendOptions: BaseWatchOptions =
+ cb && options ? extend({}, options) : {}
if (__DEV__) extendOptions.onWarn = warn
// TODO: SSR
// if (__SSR__) {}
- const instance =
- getCurrentScope() === currentInstance?.scope ? currentInstance : null
+ const instance = getCurrentInstance()
extendOptions.onError = (err: unknown, type: BaseWatchErrorCodes) =>
handleErrorWithInstance(err, instance, type)
@@ -78,8 +92,10 @@ const createMiddleware =
instance.isUpdating = true
}
+ const reset = setCurrentInstance(instance)
// run callback
value = next()
+ reset()
if (isFirstEffect) {
queuePostRenderEffect(() => {
diff --git a/packages/runtime-vapor/src/template.ts b/packages/runtime-vapor/src/template.ts
index f75ab8699a4..8b505a6ec88 100644
--- a/packages/runtime-vapor/src/template.ts
+++ b/packages/runtime-vapor/src/template.ts
@@ -10,7 +10,7 @@ export const template = (str: string): (() => DocumentFragment) => {
// first render: insert the node directly.
// this removes it from the template fragment to avoid keeping two copies
// of the inserted tree in memory, even if the template is used only once.
- return (node = t.content)
+ return (node = t.content).cloneNode(true) as DocumentFragment
} else {
// repeated renders: clone from cache. This is more performant and
// efficient when dealing with big lists where the template is repeated
From 839aa86cf89afbb949f05bd94642fbdbace8f65c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?=
Date: Fri, 19 Jan 2024 16:41:03 +0800
Subject: [PATCH 162/783] chore: update todo
---
README.md | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/README.md b/README.md
index d58a74bb2fa..9a546d189c5 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@ PR are welcome!
- [x] simple bindings
- [x] simple events
- [ ] TODO-MVC App
-- [ ] Repl
+- [x] Repl
- [x] transform
- [x] NodeTransform
- [x] DirectiveTransform
@@ -30,15 +30,14 @@ PR are welcome!
- [x] simple expression
- [x] compound expression
- [ ] modifiers
- - [ ] .camel
+ - [x] .camel
- [ ] .prop
- [ ] .attr
- - [ ] `v-on`
+ - [x] `v-on`
- [x] simple expression
- - [ ] compound expression
+ - [x] compound expression
- [x] modifiers
- - [ ] runtime directives
- - #19
+ - [x] runtime directives
- [ ] `v-memo`
- #18
- [ ] `v-model`
@@ -48,9 +47,7 @@ PR are welcome!
- #9
- [ ] `v-for`
- #21
- - [ ] `v-show`
- - #16
- - needs #19 first
+ - [x] `v-show`
- [x] Fragment
- [ ] Codegen
- [x] CodegenContext
From 5c0b8bbeb33138f8c37c1ad480701079d62abb9b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?=
Date: Fri, 19 Jan 2024 16:59:03 +0800
Subject: [PATCH 163/783] refactor: simplify code
---
packages/reactivity/src/index.ts | 1 +
packages/runtime-vapor/src/index.ts | 4 +--
packages/runtime-vapor/src/render.ts | 13 +-------
packages/runtime-vapor/src/renderWatch.ts | 13 ++++----
packages/runtime-vapor/src/scheduler.ts | 36 ++---------------------
5 files changed, 13 insertions(+), 54 deletions(-)
diff --git a/packages/reactivity/src/index.ts b/packages/reactivity/src/index.ts
index 88ef249e441..d7857067678 100644
--- a/packages/reactivity/src/index.ts
+++ b/packages/reactivity/src/index.ts
@@ -78,4 +78,5 @@ export {
type BaseWatchOptions,
type BaseWatchMiddleware,
type Scheduler,
+ type SchedulerJob,
} from './baseWatch'
diff --git a/packages/runtime-vapor/src/index.ts b/packages/runtime-vapor/src/index.ts
index 0fc7be64a12..244853c537d 100644
--- a/packages/runtime-vapor/src/index.ts
+++ b/packages/runtime-vapor/src/index.ts
@@ -39,15 +39,15 @@ export {
} from '@vue/reactivity'
export { withModifiers, withKeys } from '@vue/runtime-dom'
+export { nextTick } from './scheduler'
+export { getCurrentInstance, type ComponentInternalInstance } from './component'
export * from './on'
export * from './render'
export * from './renderWatch'
export * from './template'
-export * from './scheduler'
export * from './apiWatch'
export * from './directive'
export * from './dom'
export * from './directives/vShow'
export * from './apiLifecycle'
-export { getCurrentInstance, type ComponentInternalInstance } from './component'
export * from './if'
diff --git a/packages/runtime-vapor/src/render.ts b/packages/runtime-vapor/src/render.ts
index 22c3b7fbfd5..82c8c02e799 100644
--- a/packages/runtime-vapor/src/render.ts
+++ b/packages/runtime-vapor/src/render.ts
@@ -16,11 +16,6 @@ export type ParentBlock = ParentNode | Node[]
export type Fragment = { nodes: Block; anchor: Node }
export type BlockFn = (props?: any) => Block
-let isRenderingActivity = false
-export function getIsRendering() {
- return isRenderingActivity
-}
-
export function render(
comp: Component,
props: Data,
@@ -55,13 +50,7 @@ export function mountComponent(
let block: Block | null = null
if (state && '__isScriptSetup' in state) {
instance.setupState = proxyRefs(state)
- const currentlyRenderingActivity = isRenderingActivity
- isRenderingActivity = true
- try {
- block = component.render(instance.setupState)
- } finally {
- isRenderingActivity = currentlyRenderingActivity
- }
+ block = component.render(instance.setupState)
} else {
block = state as Block
}
diff --git a/packages/runtime-vapor/src/renderWatch.ts b/packages/runtime-vapor/src/renderWatch.ts
index c0167cdf51c..d6943e4d4a7 100644
--- a/packages/runtime-vapor/src/renderWatch.ts
+++ b/packages/runtime-vapor/src/renderWatch.ts
@@ -52,13 +52,12 @@ function doWatch(
// if (__SSR__) {}
const instance = getCurrentInstance()
-
- extendOptions.onError = (err: unknown, type: BaseWatchErrorCodes) =>
- handleErrorWithInstance(err, instance, type)
- extendOptions.scheduler = createVaporRenderingScheduler(instance)
-
- extendOptions.middleware = createMiddleware(instance)
-
+ extend(extendOptions, {
+ onError: (err: unknown, type: BaseWatchErrorCodes) =>
+ handleErrorWithInstance(err, instance, type),
+ scheduler: createVaporRenderingScheduler(instance),
+ middleware: createMiddleware(instance),
+ })
let effect = baseWatch(source, cb, extendOptions)
const unwatch = !effect
diff --git a/packages/runtime-vapor/src/scheduler.ts b/packages/runtime-vapor/src/scheduler.ts
index 7a5afb011d7..a5e8f1fd172 100644
--- a/packages/runtime-vapor/src/scheduler.ts
+++ b/packages/runtime-vapor/src/scheduler.ts
@@ -1,38 +1,8 @@
-import type { Scheduler } from '@vue/reactivity'
+import type { Scheduler, SchedulerJob } from '@vue/reactivity'
import type { ComponentInternalInstance } from './component'
import { isArray } from '@vue/shared'
-export interface SchedulerJob extends Function {
- id?: number
- pre?: boolean
- active?: boolean
- computed?: boolean
- /**
- * Indicates whether the effect is allowed to recursively trigger itself
- * when managed by the scheduler.
- *
- * By default, a job cannot trigger itself because some built-in method calls,
- * e.g. Array.prototype.push actually performs reads as well (#1740) which
- * can lead to confusing infinite loops.
- * The allowed cases are component update functions and watch callbacks.
- * Component update functions may update child component props, which in turn
- * trigger flush: "pre" watch callbacks that mutates state that the parent
- * relies on (#1801). Watch callbacks doesn't track its dependencies so if it
- * triggers itself again, it's likely intentional and it is the user's
- * responsibility to perform recursive state mutation that eventually
- * stabilizes (#1727).
- */
- allowRecurse?: boolean
- /**
- * Attached by renderer.ts when setting up a component's render effect
- * Used to obtain component information when reporting max recursive updates.
- * dev only.
- */
- ownerInstance?: ComponentInternalInstance
-}
-
export type SchedulerJobs = SchedulerJob | SchedulerJob[]
-
export type QueueEffect = (
cb: SchedulerJobs,
suspense: ComponentInternalInstance | null,
@@ -210,7 +180,7 @@ export type SchedulerFactory = (
) => Scheduler
export const createVaporSyncScheduler: SchedulerFactory =
- (instance) => (job, effect, isInit) => {
+ () => (job, effect, isInit) => {
if (isInit) {
effect.run()
} else {
@@ -241,7 +211,7 @@ export const createVaporRenderingScheduler: SchedulerFactory =
}
export const createVaporPostScheduler: SchedulerFactory =
- (instance) => (job, effect, isInit) => {
+ () => (job, effect, isInit) => {
if (isInit) {
queuePostRenderEffect(effect.run.bind(effect))
} else {
From 305a651c68d280ef63dcdcc0e2b9d611cb2ec9c2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?=
Date: Fri, 19 Jan 2024 17:09:57 +0800
Subject: [PATCH 164/783] chore: update comment
---
packages/runtime-vapor/src/directive.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/packages/runtime-vapor/src/directive.ts b/packages/runtime-vapor/src/directive.ts
index ad6072b4f56..3c796d910f6 100644
--- a/packages/runtime-vapor/src/directive.ts
+++ b/packages/runtime-vapor/src/directive.ts
@@ -99,6 +99,7 @@ export function withDirectives(
// register source
if (source) {
+ // callback will be overridden by middleware
renderWatch(source, NOOP)
}
}
From fc651f6905af71e20a92822f04b81d5080c5dedd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?=
Date: Fri, 19 Jan 2024 22:43:43 +0800
Subject: [PATCH 165/783] fix(runtime-vapor): normalize state&block
---
packages/runtime-vapor/src/render.ts | 26 ++++++++++++++++++--------
1 file changed, 18 insertions(+), 8 deletions(-)
diff --git a/packages/runtime-vapor/src/render.ts b/packages/runtime-vapor/src/render.ts
index 82c8c02e799..24051277e34 100644
--- a/packages/runtime-vapor/src/render.ts
+++ b/packages/runtime-vapor/src/render.ts
@@ -1,5 +1,5 @@
import { proxyRefs } from '@vue/reactivity'
-import { type Data, invokeArrayFns } from '@vue/shared'
+import { type Data, invokeArrayFns, isArray, isObject } from '@vue/shared'
import {
type Component,
type ComponentInternalInstance,
@@ -46,17 +46,27 @@ export function mountComponent(
const setupFn =
typeof component === 'function' ? component : component.setup
- const state = setupFn && setupFn(props, ctx)
- let block: Block | null = null
- if (state && '__isScriptSetup' in state) {
- instance.setupState = proxyRefs(state)
- block = component.render(instance.setupState)
- } else {
- block = state as Block
+ const stateOrNode = setupFn && setupFn(props, ctx)
+
+ let block: Block | undefined
+ let setupState: Data | undefined
+
+ if (stateOrNode instanceof Node) {
+ block = stateOrNode
+ } else if (isObject(stateOrNode) && !isArray(stateOrNode)) {
+ setupState = proxyRefs(stateOrNode)
+ }
+ if (!block && component.render) {
+ block = component.render(setupState)
}
+
if (block instanceof DocumentFragment) {
block = Array.from(block.childNodes)
}
+ if (!block) {
+ // TODO: warn no template
+ block = []
+ }
return (instance.block = block)
})!
const { bm, m } = instance
From 10f8cb4351002fa57c453dc7c29aa75d53318ba9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?=
Date: Fri, 19 Jan 2024 22:50:07 +0800
Subject: [PATCH 166/783] fix(compiler-vapor): don't setText for root element
---
.../src/transforms/transformInterpolation.ts | 3 ++-
playground/src/dynamic.vue | 1 +
playground/src/todo-mvc.vue | 11 +++++++++++
3 files changed, 14 insertions(+), 1 deletion(-)
create mode 100644 playground/src/dynamic.vue
create mode 100644 playground/src/todo-mvc.vue
diff --git a/packages/compiler-vapor/src/transforms/transformInterpolation.ts b/packages/compiler-vapor/src/transforms/transformInterpolation.ts
index 02b4f0208f0..ac1a7142086 100644
--- a/packages/compiler-vapor/src/transforms/transformInterpolation.ts
+++ b/packages/compiler-vapor/src/transforms/transformInterpolation.ts
@@ -9,8 +9,9 @@ export const transformInterpolation: NodeTransform = (node, ctx) => {
const parentChildren = ctx.parent ? ctx.parent.node.children : []
const isFirst = ctx.index === 0
const isLast = ctx.index === parentChildren.length - 1
+ const isRoot = ctx.parent === ctx.root
- if (isFirst && isLast) {
+ if (isFirst && isLast && !isRoot) {
const parent = ctx.parent!
const parentId = parent.reference()
ctx.registerEffect(
diff --git a/playground/src/dynamic.vue b/playground/src/dynamic.vue
new file mode 100644
index 00000000000..75bd648371e
--- /dev/null
+++ b/playground/src/dynamic.vue
@@ -0,0 +1 @@
+{{ '1' }}
diff --git a/playground/src/todo-mvc.vue b/playground/src/todo-mvc.vue
new file mode 100644
index 00000000000..1d9ccbd8065
--- /dev/null
+++ b/playground/src/todo-mvc.vue
@@ -0,0 +1,11 @@
+
+
+{{ tasks }}
From 199b19f0764f18637c447d42119ddc289678498e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?=
Date: Sat, 20 Jan 2024 13:29:55 +0800
Subject: [PATCH 167/783] test: update snapshot
---
.../__tests__/__snapshots__/compile.spec.ts.snap | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap b/packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap
index e658e4a2fb6..ae7ea0f2d1e 100644
--- a/packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap
+++ b/packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap
@@ -207,8 +207,10 @@ exports[`compile > expression parsing > interpolation 1`] = `
const t0 = _fragment()
const n0 = t0()
+ const n1 = _createTextNode(a + b.value)
+ _append(n0, n1)
_renderEffect(() => {
- _setText(n0, undefined, a + b.value)
+ _setText(n1, undefined, a + b.value)
})
return n0
})()"
From 775491e46d323dd14e64ad9c185b07d4e6868f58 Mon Sep 17 00:00:00 2001
From: ygj6 <7699524+ygj6@users.noreply.github.com>
Date: Sat, 20 Jan 2024 13:31:16 +0800
Subject: [PATCH 168/783] feat: prop and attr modifiers for v-bind (#79)
---
.../__snapshots__/compile.spec.ts.snap | 14 +-
.../__snapshots__/vBind.spec.ts.snap | 124 +++++++++++--
.../__snapshots__/vOnce.spec.ts.snap | 12 +-
.../__tests__/transforms/vBind.spec.ts | 164 ++++++++++++++++--
packages/compiler-vapor/src/generate.ts | 8 +-
packages/compiler-vapor/src/ir.ts | 1 +
.../compiler-vapor/src/transforms/vBind.ts | 17 ++
packages/runtime-vapor/src/dom.ts | 30 +++-
8 files changed, 322 insertions(+), 48 deletions(-)
diff --git a/packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap b/packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap
index ae7ea0f2d1e..05b85c443e2 100644
--- a/packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap
+++ b/packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap
@@ -121,7 +121,7 @@ export function render(_ctx) {
`;
exports[`compile > directives > v-pre > self-closing v-pre 1`] = `
-"import { template as _template, children as _children, createTextNode as _createTextNode, append as _append, renderEffect as _renderEffect, setText as _setText, setAttr as _setAttr } from 'vue/vapor';
+"import { template as _template, children as _children, createTextNode as _createTextNode, append as _append, renderEffect as _renderEffect, setText as _setText, setDynamicProp as _setDynamicProp } from 'vue/vapor';
export function render(_ctx) {
const t0 = _template("
")
@@ -133,14 +133,14 @@ export function render(_ctx) {
_setText(n1, undefined, _ctx.bar)
})
_renderEffect(() => {
- _setAttr(n2, "id", undefined, _ctx.foo)
+ _setDynamicProp(n2, "id", undefined, _ctx.foo)
})
return n0
}"
`;
exports[`compile > directives > v-pre > should not affect siblings after it 1`] = `
-"import { template as _template, children as _children, createTextNode as _createTextNode, append as _append, renderEffect as _renderEffect, setText as _setText, setAttr as _setAttr } from 'vue/vapor';
+"import { template as _template, children as _children, createTextNode as _createTextNode, append as _append, renderEffect as _renderEffect, setText as _setText, setDynamicProp as _setDynamicProp } from 'vue/vapor';
export function render(_ctx) {
const t0 = _template("
{{ bar }}
")
@@ -152,7 +152,7 @@ export function render(_ctx) {
_setText(n1, undefined, _ctx.bar)
})
_renderEffect(() => {
- _setAttr(n2, "id", undefined, _ctx.foo)
+ _setDynamicProp(n2, "id", undefined, _ctx.foo)
})
return n0
}"
@@ -179,7 +179,7 @@ export function render(_ctx) {
`;
exports[`compile > dynamic root nodes and interpolation 1`] = `
-"import { template as _template, children as _children, createTextNode as _createTextNode, prepend as _prepend, insert as _insert, append as _append, on as _on, renderEffect as _renderEffect, setText as _setText, setAttr as _setAttr } from 'vue/vapor';
+"import { template as _template, children as _children, createTextNode as _createTextNode, prepend as _prepend, insert as _insert, append as _append, on as _on, renderEffect as _renderEffect, setText as _setText, setDynamicProp as _setDynamicProp } from 'vue/vapor';
export function render(_ctx) {
const t0 = _template("")
@@ -196,7 +196,7 @@ export function render(_ctx) {
_setText(n1, undefined, _ctx.count)
_setText(n2, undefined, _ctx.count)
_setText(n3, undefined, _ctx.count)
- _setAttr(n4, "id", undefined, _ctx.count)
+ _setDynamicProp(n4, "id", undefined, _ctx.count)
})
return n0
}"
@@ -222,7 +222,7 @@ exports[`compile > expression parsing > v-bind 1`] = `
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setAttr(n1, key.value+1, undefined, _unref(foo)[key.value+1]())
+ _setDynamicProp(n1, key.value+1, undefined, _unref(foo)[key.value+1]())
})
return n0
})()"
diff --git a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vBind.spec.ts.snap b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vBind.spec.ts.snap
index fa70b0f374c..0f5e5203cd8 100644
--- a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vBind.spec.ts.snap
+++ b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vBind.spec.ts.snap
@@ -1,14 +1,42 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+exports[`compiler v-bind > .attr modifier 1`] = `
+"import { template as _template, children as _children, renderEffect as _renderEffect, setDynamicProp as _setDynamicProp } from 'vue/vapor';
+
+export function render(_ctx) {
+ const t0 = _template("")
+ const n0 = t0()
+ const { 0: [n1],} = _children(n0)
+ _renderEffect(() => {
+ _setDynamicProp(n1, "^foo-bar", undefined, _ctx.id)
+ })
+ return n0
+}"
+`;
+
+exports[`compiler v-bind > .attr modifier w/ no expression 1`] = `
+"import { template as _template, children as _children, renderEffect as _renderEffect, setDynamicProp as _setDynamicProp } from 'vue/vapor';
+
+export function render(_ctx) {
+ const t0 = _template("")
+ const n0 = t0()
+ const { 0: [n1],} = _children(n0)
+ _renderEffect(() => {
+ _setDynamicProp(n1, "^foo-bar", undefined, _ctx.fooBar)
+ })
+ return n0
+}"
+`;
+
exports[`compiler v-bind > .camel modifier 1`] = `
-"import { template as _template, children as _children, renderEffect as _renderEffect, setAttr as _setAttr } from 'vue/vapor';
+"import { template as _template, children as _children, renderEffect as _renderEffect, setDynamicProp as _setDynamicProp } from 'vue/vapor';
export function render(_ctx) {
const t0 = _template("")
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setAttr(n1, "fooBar", undefined, _ctx.id)
+ _setDynamicProp(n1, "fooBar", undefined, _ctx.id)
})
return n0
}"
@@ -22,77 +50,147 @@ export function render(_ctx) {
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setAttr(n1, _camelize(_ctx.foo), undefined, _ctx.id)
+ _setDynamicProp(n1, _camelize(_ctx.foo), undefined, _ctx.id)
})
return n0
}"
`;
exports[`compiler v-bind > .camel modifier w/ no expression 1`] = `
-"import { template as _template, children as _children, renderEffect as _renderEffect, setAttr as _setAttr } from 'vue/vapor';
+"import { template as _template, children as _children, renderEffect as _renderEffect, setDynamicProp as _setDynamicProp } from 'vue/vapor';
+
+export function render(_ctx) {
+ const t0 = _template("")
+ const n0 = t0()
+ const { 0: [n1],} = _children(n0)
+ _renderEffect(() => {
+ _setDynamicProp(n1, "fooBar", undefined, _ctx.fooBar)
+ })
+ return n0
+}"
+`;
+
+exports[`compiler v-bind > .prop modifier (shortband) w/ no expression 1`] = `
+"import { template as _template, children as _children, renderEffect as _renderEffect, setDynamicProp as _setDynamicProp } from 'vue/vapor';
+
+export function render(_ctx) {
+ const t0 = _template("")
+ const n0 = t0()
+ const { 0: [n1],} = _children(n0)
+ _renderEffect(() => {
+ _setDynamicProp(n1, ".fooBar", undefined, _ctx.fooBar)
+ })
+ return n0
+}"
+`;
+
+exports[`compiler v-bind > .prop modifier (shorthand) 1`] = `
+"import { template as _template, children as _children, renderEffect as _renderEffect, setDynamicProp as _setDynamicProp } from 'vue/vapor';
+
+export function render(_ctx) {
+ const t0 = _template("")
+ const n0 = t0()
+ const { 0: [n1],} = _children(n0)
+ _renderEffect(() => {
+ _setDynamicProp(n1, ".fooBar", undefined, _ctx.id)
+ })
+ return n0
+}"
+`;
+
+exports[`compiler v-bind > .prop modifier 1`] = `
+"import { template as _template, children as _children, renderEffect as _renderEffect, setDynamicProp as _setDynamicProp } from 'vue/vapor';
+
+export function render(_ctx) {
+ const t0 = _template("")
+ const n0 = t0()
+ const { 0: [n1],} = _children(n0)
+ _renderEffect(() => {
+ _setDynamicProp(n1, ".fooBar", undefined, _ctx.id)
+ })
+ return n0
+}"
+`;
+
+exports[`compiler v-bind > .prop modifier w/ dynamic arg 1`] = `
+"import { template as _template, children as _children, renderEffect as _renderEffect, setDynamicProp as _setDynamicProp } from 'vue/vapor';
+
+export function render(_ctx) {
+ const t0 = _template("")
+ const n0 = t0()
+ const { 0: [n1],} = _children(n0)
+ _renderEffect(() => {
+ _setDynamicProp(n1, \`.\${_ctx.fooBar}\`, undefined, _ctx.id)
+ })
+ return n0
+}"
+`;
+
+exports[`compiler v-bind > .prop modifier w/ no expression 1`] = `
+"import { template as _template, children as _children, renderEffect as _renderEffect, setDynamicProp as _setDynamicProp } from 'vue/vapor';
export function render(_ctx) {
const t0 = _template("")
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setAttr(n1, "fooBar", undefined, _ctx.fooBar)
+ _setDynamicProp(n1, ".fooBar", undefined, _ctx.fooBar)
})
return n0
}"
`;
exports[`compiler v-bind > basic 1`] = `
-"import { template as _template, children as _children, renderEffect as _renderEffect, setAttr as _setAttr } from 'vue/vapor';
+"import { template as _template, children as _children, renderEffect as _renderEffect, setDynamicProp as _setDynamicProp } from 'vue/vapor';
export function render(_ctx) {
const t0 = _template("")
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setAttr(n1, "id", undefined, _ctx.id)
+ _setDynamicProp(n1, "id", undefined, _ctx.id)
})
return n0
}"
`;
exports[`compiler v-bind > dynamic arg 1`] = `
-"import { template as _template, children as _children, renderEffect as _renderEffect, setAttr as _setAttr } from 'vue/vapor';
+"import { template as _template, children as _children, renderEffect as _renderEffect, setDynamicProp as _setDynamicProp } from 'vue/vapor';
export function render(_ctx) {
const t0 = _template("")
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setAttr(n1, _ctx.id, undefined, _ctx.id)
+ _setDynamicProp(n1, _ctx.id, undefined, _ctx.id)
})
return n0
}"
`;
exports[`compiler v-bind > no expression (shorthand) 1`] = `
-"import { template as _template, children as _children, renderEffect as _renderEffect, setAttr as _setAttr } from 'vue/vapor';
+"import { template as _template, children as _children, renderEffect as _renderEffect, setDynamicProp as _setDynamicProp } from 'vue/vapor';
export function render(_ctx) {
const t0 = _template("")
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setAttr(n1, "camel-case", undefined, _ctx.camelCase)
+ _setDynamicProp(n1, "camel-case", undefined, _ctx.camelCase)
})
return n0
}"
`;
exports[`compiler v-bind > no expression 1`] = `
-"import { template as _template, children as _children, renderEffect as _renderEffect, setAttr as _setAttr } from 'vue/vapor';
+"import { template as _template, children as _children, renderEffect as _renderEffect, setDynamicProp as _setDynamicProp } from 'vue/vapor';
export function render(_ctx) {
const t0 = _template("")
const n0 = t0()
const { 0: [n1],} = _children(n0)
_renderEffect(() => {
- _setAttr(n1, "id", undefined, _ctx.id)
+ _setDynamicProp(n1, "id", undefined, _ctx.id)
})
return n0
}"
diff --git a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOnce.spec.ts.snap b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOnce.spec.ts.snap
index 4b8e89d6d6f..7a761ed3c66 100644
--- a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOnce.spec.ts.snap
+++ b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOnce.spec.ts.snap
@@ -1,19 +1,19 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`compiler: v-once > as root node 1`] = `
-"import { template as _template, children as _children, setAttr as _setAttr } from 'vue/vapor';
+"import { template as _template, children as _children, setDynamicProp as _setDynamicProp } from 'vue/vapor';
export function render(_ctx) {
const t0 = _template("")
const n0 = t0()
const { 0: [n1],} = _children(n0)
- _setAttr(n1, "id", undefined, _ctx.foo)
+ _setDynamicProp(n1, "id", undefined, _ctx.foo)
return n0
}"
`;
exports[`compiler: v-once > basic 1`] = `
-"import { template as _template, children as _children, createTextNode as _createTextNode, setText as _setText, setAttr as _setAttr, prepend as _prepend } from 'vue/vapor';
+"import { template as _template, children as _children, createTextNode as _createTextNode, setText as _setText, setDynamicProp as _setDynamicProp, prepend as _prepend } from 'vue/vapor';
export function render(_ctx) {
const t0 = _template("
")
@@ -21,7 +21,7 @@ export function render(_ctx) {
const { 0: [n3, { 1: [n2],}],} = _children(n0)
const n1 = _createTextNode(_ctx.msg)
_setText(n1, undefined, _ctx.msg)
- _setAttr(n2, "class", undefined, _ctx.clz)
+ _setDynamicProp(n2, "class", undefined, _ctx.clz)
_prepend(n3, n1)
return n0
}"
@@ -38,13 +38,13 @@ export function render(_ctx) {
`;
exports[`compiler: v-once > on nested plain element 1`] = `
-"import { template as _template, children as _children, setAttr as _setAttr } from 'vue/vapor';
+"import { template as _template, children as _children, setDynamicProp as _setDynamicProp } from 'vue/vapor';
export function render(_ctx) {
const t0 = _template("