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/804] 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 000000000..15f1f7e7a
--- /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 000000000..c09888880
--- /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 000000000..730cbb180
--- /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 000000000..8f656f4ae
--- /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 000000000..21ec276fc
--- /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 a6ef2541c..f048d88c0 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/804] chore: temp remove check
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 6dbd93580..8c34405c9 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/804] 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 27fbd42c9..000000000
--- 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 61490232f..000000000
--- 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 493ab2950..52a888897 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/804] 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 948861435..3e9fc887e 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 c2bed3837..9bc76aaaa 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 4d55ffb08..d2f152c3e 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 6ba159703..3da348c7f 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 c09888880..5d59186fd 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 8f656f4ae..f118df68d 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 48749f0bb..02bd6ca85 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 6582c7683..2ea228a92 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 03e85e307..7f751af9a 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 4ab6e8122..3ac9aa515 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 0012e3ff6..f3233c23e 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 000000000..15f1f7e7a
--- /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 000000000..125de1f77
--- /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 000000000..730cbb180
--- /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 000000000..be410e92b
--- /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 000000000..21ec276fc
--- /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 06d57b660..93c95be4b 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 d79e954ab..327069958 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 e44b68cc8..f39241ebc 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 8835706df..171fa667b 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 f048d88c0..6957269a0 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/804] chore: update readme
---
README.md | 28 ++--------------------------
1 file changed, 2 insertions(+), 26 deletions(-)
diff --git a/README.md b/README.md
index cbc05311a..109634c1a 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/804] 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 730cbb180..000000000
--- 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 000000000..da471b432
--- /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/804] 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 95e0ca79c..000000000
--- 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 02f99c6bf..000000000
--- 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/804] 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 | 235 +++++++++---------
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, 222 insertions(+), 177 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 4fa319bd1..020a7f31e 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('
diff --git a/playground/src/directive.vue b/playground/src/directive.vue
index 722801d59..8022b9db1 100644
--- a/playground/src/directive.vue
+++ b/playground/src/directive.vue
@@ -2,6 +2,7 @@
import { ObjectDirective, FunctionDirective, ref } from '@vue/vapor'
const text = ref('created (overwrite by v-text), ')
+const counter = ref(0)
const vDirective: ObjectDirective = {
created(node) {
if (!node.parentElement) {
@@ -17,9 +18,15 @@ const vDirective: ObjectDirective = {
mounted(node) {
if (node.parentElement) node.textContent += 'mounted, '
},
+ beforeUpdate(node, binding) {
+ console.log('beforeUpdate', binding, node)
+ },
+ updated(node, binding) {
+ console.log('updated', binding, node)
+ },
}
const vDirectiveSimple: FunctionDirective = (node, binding) => {
- console.log(node, binding)
+ console.log('v-directive-simple:', node, binding)
}
const handleClick = () => {
text.value = 'change'
@@ -33,4 +40,15 @@ const handleClick = () => {
v-directive-simple="text"
@click="handleClick"
/>
+
+
+
From 8d7d672bc551c9ff40e958600468c459992a3b9b Mon Sep 17 00:00:00 2001
From: zhiyuanzmj <32807958+zhiyuanzmj@users.noreply.github.com>
Date: Sat, 13 Jan 2024 03:26:50 +0800
Subject: [PATCH 158/804] fix(compiler-vapor): should not prefix member
expression (#92)
---
.../transforms/__snapshots__/vOn.spec.ts.snap | 12 ++++++++++++
.../compiler-vapor/__tests__/transforms/vOn.spec.ts | 11 +++++++++++
packages/compiler-vapor/src/generate.ts | 2 +-
3 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOn.spec.ts.snap b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOn.spec.ts.snap
index 7aa9e632a..a469d61bd 100644
--- a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOn.spec.ts.snap
+++ b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOn.spec.ts.snap
@@ -226,6 +226,18 @@ export function render(_ctx) {
}"
`;
+exports[`v-on > should not prefix member expression 1`] = `
+"import { template as _template, children as _children, on as _on } from 'vue/vapor';
+
+export function render(_ctx) {
+ const t0 = _template("")
+ const n0 = t0()
+ const { 0: [n1],} = _children(n0)
+ _on(n1, "click", (...args) => (_ctx.foo.bar && _ctx.foo.bar(...args)))
+ return n0
+}"
+`;
+
exports[`v-on > should not wrap keys guard if no key modifier is present 1`] = `
"import { template as _template, children as _children, on as _on, withModifiers as _withModifiers } from 'vue/vapor';
diff --git a/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts b/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts
index 0b6427069..6fae1713f 100644
--- a/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts
+++ b/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts
@@ -707,4 +707,15 @@ describe('v-on', () => {
'(_ctx.event) === "click" ? "mouseup" : (_ctx.event)',
)
})
+
+ test('should not prefix member expression', () => {
+ const { code } = compileWithVOn(``, {
+ prefixIdentifiers: true,
+ })
+
+ expect(code).matchSnapshot()
+ expect(code).contains(
+ `_on(n1, "click", (...args) => (_ctx.foo.bar && _ctx.foo.bar(...args)))`,
+ )
+ })
})
diff --git a/packages/compiler-vapor/src/generate.ts b/packages/compiler-vapor/src/generate.ts
index 262ba0898..9d916146f 100644
--- a/packages/compiler-vapor/src/generate.ts
+++ b/packages/compiler-vapor/src/generate.ts
@@ -652,7 +652,7 @@ function genExpression(
if (isLocal) return
ids.push(id)
},
- true,
+ false,
[],
knownIds,
)
From 049432379537da4f69bedb699003d8ae90f04093 Mon Sep 17 00:00:00 2001
From: zhiyuanzmj <32807958+zhiyuanzmj@users.noreply.github.com>
Date: Sat, 13 Jan 2024 18:30:03 +0800
Subject: [PATCH 159/804] feat(compiler-vapor): support `expressionPlugins` for
generate (#91)
---
.../__tests__/transforms/vOn.spec.ts | 31 +++++++++----------
packages/compiler-vapor/src/compile.ts | 7 +++--
packages/compiler-vapor/src/generate.ts | 18 ++++++-----
3 files changed, 30 insertions(+), 26 deletions(-)
diff --git a/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts b/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts
index 6fae1713f..7705e1e18 100644
--- a/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts
+++ b/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts
@@ -269,25 +269,22 @@ describe('v-on', () => {
expect(code).contains('_on(n1, "click", $event => _ctx.foo($event))')
})
- test.fails(
- 'should NOT wrap as function if expression is already function expression (with Typescript)',
- () => {
- const { ir, code } = compileWithVOn(
- `
foo(e)"/>`,
- { expressionPlugins: ['typescript'] },
- )
+ test('should NOT wrap as function if expression is already function expression (with Typescript)', () => {
+ const { ir, code } = compileWithVOn(
+ `
')
+ 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 5c270d1ca..831a94b38 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 ab2e49c3a..51be7f4ba 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 47d888fae..1dda46f21 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 000000000..155658c9a
--- /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 805fbae0e..0fc7be64a 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 bce3a2be7..22c3b7fbf 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 e5103d716..c0167cdf5 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 f75ab8699..8b505a6ec 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/804] chore: update todo
---
README.md | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/README.md b/README.md
index d58a74bb2..9a546d189 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/804] 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 88ef249e4..d78570676 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 0fc7be64a..244853c53 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 22c3b7fbf..82c8c02e7 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 c0167cdf5..d6943e4d4 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 7a5afb011..a5e8f1fd1 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/804] 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 ad6072b4f..3c796d910 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/804] 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 82c8c02e7..24051277e 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/804] 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 02b4f0208..ac1a71420 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 000000000..75bd64837
--- /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 000000000..1d9ccbd80
--- /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/804] 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 e658e4a2f..ae7ea0f2d 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/804] feat: prop and attr modifiers for v-bind (#79)
---
.../__snapshots__/compile.spec.ts.snap | 14 +-
.../__snapshots__/vBind.spec.ts.snap | 126 ++++++++++++--
.../__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, 323 insertions(+), 49 deletions(-)
diff --git a/packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap b/packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap
index ae7ea0f2d..05b85c443 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 fa70b0f37..0f5e5203c 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 > .camel modifier 1`] = `
-"import { template as _template, children as _children, renderEffect as _renderEffect, setAttr as _setAttr } from 'vue/vapor';
+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(() => {
- _setAttr(n1, "fooBar", undefined, _ctx.id)
+ _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, 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
}"
@@ -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(() => {
- _setAttr(n1, "fooBar", undefined, _ctx.fooBar)
+ _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(() => {
+ _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 4b8e89d6d..7a761ed3c 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("