From 92e280ee90a2154f41747200371cf8e5fefc8b94 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Aug 2025 10:35:49 -0600 Subject: [PATCH 01/35] build(deps): bump the theoretically-non-breaking group with 10 updates (#5463) Bumps the theoretically-non-breaking group with 10 updates: | Package | From | To | | --- | --- | --- | | [@nx/js](https://github.com/nrwl/nx/tree/HEAD/packages/js) | `21.3.11` | `21.4.0` | | [@swc-node/register](https://github.com/swc-project/swc-node) | `1.10.10` | `1.11.1` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `22.17.1` | `22.17.2` | | [nx](https://github.com/nrwl/nx/tree/HEAD/packages/nx) | `21.3.11` | `21.4.0` | | [rollup](https://github.com/rollup/rollup) | `4.46.2` | `4.46.3` | | [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.39.0` | `8.39.1` | | [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) | `7.28.0` | `7.28.3` | | [@types/jasmine](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jasmine) | `5.1.8` | `5.1.9` | | [istanbul-reports](https://github.com/istanbuljs/istanbuljs/tree/HEAD/packages/istanbul-reports) | `3.1.7` | `3.2.0` | | [chai](https://github.com/chaijs/chai) | `5.2.1` | `5.3.1` | Updates `@nx/js` from 21.3.11 to 21.4.0 - [Release notes](https://github.com/nrwl/nx/releases) - [Commits](https://github.com/nrwl/nx/commits/21.4.0/packages/js) Updates `@swc-node/register` from 1.10.10 to 1.11.1 - [Release notes](https://github.com/swc-project/swc-node/releases) - [Commits](https://github.com/swc-project/swc-node/compare/@swc-node/register@1.10.10...@swc-node/register@1.11.1) Updates `@types/node` from 22.17.1 to 22.17.2 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `nx` from 21.3.11 to 21.4.0 - [Release notes](https://github.com/nrwl/nx/releases) - [Commits](https://github.com/nrwl/nx/commits/21.4.0/packages/nx) Updates `rollup` from 4.46.2 to 4.46.3 - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v4.46.2...v4.46.3) Updates `typescript-eslint` from 8.39.0 to 8.39.1 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.39.1/packages/typescript-eslint) Updates `@babel/core` from 7.28.0 to 7.28.3 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.28.3/packages/babel-core) Updates `@types/jasmine` from 5.1.8 to 5.1.9 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jasmine) Updates `istanbul-reports` from 3.1.7 to 3.2.0 - [Release notes](https://github.com/istanbuljs/istanbuljs/releases) - [Changelog](https://github.com/istanbuljs/istanbuljs/blob/main/packages/istanbul-reports/CHANGELOG.md) - [Commits](https://github.com/istanbuljs/istanbuljs/commits/istanbul-reports-v3.2.0/packages/istanbul-reports) Updates `chai` from 5.2.1 to 5.3.1 - [Release notes](https://github.com/chaijs/chai/releases) - [Changelog](https://github.com/chaijs/chai/blob/main/History.md) - [Commits](https://github.com/chaijs/chai/compare/v5.2.1...v5.3.1) --- updated-dependencies: - dependency-name: "@nx/js" dependency-version: 21.4.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: theoretically-non-breaking - dependency-name: "@swc-node/register" dependency-version: 1.11.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: theoretically-non-breaking - dependency-name: "@types/node" dependency-version: 22.17.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: nx dependency-version: 21.4.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: theoretically-non-breaking - dependency-name: rollup dependency-version: 4.46.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: typescript-eslint dependency-version: 8.39.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: "@babel/core" dependency-version: 7.28.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: "@types/jasmine" dependency-version: 5.1.9 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: istanbul-reports dependency-version: 3.2.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: theoretically-non-breaking - dependency-name: chai dependency-version: 5.3.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: theoretically-non-breaking ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 12 +- packages/@lwc/compiler/package.json | 2 +- packages/@lwc/integration-karma/package.json | 4 +- .../@lwc/integration-not-karma/package.json | 4 +- packages/@lwc/integration-types/package.json | 2 +- playground/package.json | 2 +- yarn.lock | 1460 ++++++----------- 7 files changed, 539 insertions(+), 947 deletions(-) diff --git a/package.json b/package.json index 53f2aad12e..6bdba9d46a 100644 --- a/package.json +++ b/package.json @@ -41,17 +41,17 @@ "@eslint/js": "9.33.0", "@lwc/eslint-plugin-lwc-internal": "link:./scripts/eslint-plugin", "@lwc/test-utils-lwc-internals": "link:./scripts/test-utils", - "@nx/js": "21.3.11", + "@nx/js": "21.4.0", "@rollup/plugin-commonjs": "^28.0.6", "@rollup/plugin-inject": "^5.0.5", "@rollup/plugin-node-resolve": "^16.0.1", "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-typescript": "^12.1.4", - "@swc-node/register": "~1.10.10", + "@swc-node/register": "~1.11.1", "@swc/core": "~1.13.3", "@swc/helpers": "~0.5.17", "@types/babel__core": "^7.20.5", - "@types/node": "^22.17.1", + "@types/node": "^22.17.2", "@vitest/coverage-v8": "^3.2.4", "@vitest/eslint-plugin": "^1.3.4", "@vitest/ui": "^3.2.4", @@ -68,13 +68,13 @@ "jsdom": "^26.1.0", "lint-staged": "^16.1.5", "magic-string": "^0.30.17", - "nx": "21.3.11", + "nx": "21.4.0", "prettier": "^3.6.2", - "rollup": "^4.46.2", + "rollup": "^4.46.3", "terser": "^5.43.1", "tslib": "^2.8.1", "typescript": "5.8.2", - "typescript-eslint": "8.39.0", + "typescript-eslint": "8.39.1", "vitest": "^3.2.4" }, "lint-staged": { diff --git a/packages/@lwc/compiler/package.json b/packages/@lwc/compiler/package.json index b597b6ebe1..7e62e059b3 100644 --- a/packages/@lwc/compiler/package.json +++ b/packages/@lwc/compiler/package.json @@ -46,7 +46,7 @@ } }, "dependencies": { - "@babel/core": "7.28.0", + "@babel/core": "7.28.3", "@babel/plugin-transform-async-generator-functions": "7.28.0", "@babel/plugin-transform-async-to-generator": "7.27.1", "@babel/plugin-transform-class-properties": "7.27.1", diff --git a/packages/@lwc/integration-karma/package.json b/packages/@lwc/integration-karma/package.json index 9a701197e0..1d1e70f389 100644 --- a/packages/@lwc/integration-karma/package.json +++ b/packages/@lwc/integration-karma/package.json @@ -26,11 +26,11 @@ "@lwc/engine-server": "8.21.2", "@lwc/rollup-plugin": "8.21.2", "@lwc/synthetic-shadow": "8.21.2", - "@types/jasmine": "^5.1.8", + "@types/jasmine": "^5.1.9", "chokidar": "^4.0.3", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.1.7", + "istanbul-reports": "^3.2.0", "karma": "6.4.4", "karma-chrome-launcher": "^3.2.0", "karma-coverage": "^2.2.1", diff --git a/packages/@lwc/integration-not-karma/package.json b/packages/@lwc/integration-not-karma/package.json index 3d89b08686..35e3b3973a 100644 --- a/packages/@lwc/integration-not-karma/package.json +++ b/packages/@lwc/integration-not-karma/package.json @@ -14,10 +14,10 @@ "@lwc/rollup-plugin": "8.21.2", "@lwc/synthetic-shadow": "8.21.2", "@types/chai": "^5.2.2", - "@types/jasmine": "^5.1.8", + "@types/jasmine": "^5.1.9", "@web/dev-server-rollup": "^0.6.4", "@web/test-runner": "^0.20.2", - "chai": "^5.2.1" + "chai": "^5.3.1" }, "volta": { "extends": "../../../package.json" diff --git a/packages/@lwc/integration-types/package.json b/packages/@lwc/integration-types/package.json index 989d4f8ed0..07cfb0c316 100644 --- a/packages/@lwc/integration-types/package.json +++ b/packages/@lwc/integration-types/package.json @@ -15,7 +15,7 @@ "devDependencies": { "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-typescript": "^12.1.4", - "rollup": "^4.46.2", + "rollup": "^4.46.3", "rollup-plugin-livereload": "^2.0.5", "rollup-plugin-serve": "^3.0.0" } diff --git a/playground/package.json b/playground/package.json index 437df40ec6..ec76ff701d 100644 --- a/playground/package.json +++ b/playground/package.json @@ -13,7 +13,7 @@ "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-typescript": "^12.1.4", "lwc": "8.21.2", - "rollup": "^4.46.2", + "rollup": "^4.46.3", "rollup-plugin-livereload": "^2.0.5", "rollup-plugin-serve": "^3.0.0", "tslib": "^2.8.1" diff --git a/yarn.lock b/yarn.lock index 8a89256c30..8412f3adcc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21,16 +21,7 @@ "@csstools/css-tokenizer" "^3.0.3" lru-cache "^10.4.3" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.26.2": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== - dependencies: - "@babel/helper-validator-identifier" "^7.25.9" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/code-frame@^7.12.11", "@babel/code-frame@^7.27.1": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.11", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== @@ -39,7 +30,7 @@ js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.26.0", "@babel/compat-data@^7.26.5": +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.26.0": version "7.26.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.5.tgz#df93ac37f4417854130e21d72c66ff3d4b897fc7" integrity sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg== @@ -49,21 +40,21 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.0.tgz#9fc6fd58c2a6a15243cd13983224968392070790" integrity sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw== -"@babel/core@7.28.0", "@babel/core@^7.12.3", "@babel/core@^7.23.2": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.0.tgz#55dad808d5bf3445a108eefc88ea3fdf034749a4" - integrity sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ== +"@babel/core@7.28.3", "@babel/core@^7.12.3", "@babel/core@^7.23.2": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.3.tgz#aceddde69c5d1def69b839d09efa3e3ff59c97cb" + integrity sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.0" + "@babel/generator" "^7.28.3" "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-module-transforms" "^7.27.3" - "@babel/helpers" "^7.27.6" - "@babel/parser" "^7.28.0" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helpers" "^7.28.3" + "@babel/parser" "^7.28.3" "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.0" - "@babel/types" "^7.28.0" + "@babel/traverse" "^7.28.3" + "@babel/types" "^7.28.2" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -80,24 +71,13 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/generator@^7.26.9", "@babel/generator@^7.4.4": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.9.tgz#75a9482ad3d0cc7188a537aa4910bc59db67cbca" - integrity sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg== +"@babel/generator@^7.28.3", "@babel/generator@^7.4.4": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.3.tgz#9626c1741c650cbac39121694a0f2d7451b8ef3e" + integrity sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw== dependencies: - "@babel/parser" "^7.26.9" - "@babel/types" "^7.26.9" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - -"@babel/generator@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.0.tgz#9cc2f7bd6eb054d77dc66c2664148a0c5118acd2" - integrity sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg== - dependencies: - "@babel/parser" "^7.28.0" - "@babel/types" "^7.28.0" + "@babel/parser" "^7.28.3" + "@babel/types" "^7.28.2" "@jridgewell/gen-mapping" "^0.3.12" "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" @@ -116,18 +96,7 @@ dependencies: "@babel/types" "^7.27.3" -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8" - integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA== - dependencies: - "@babel/compat-data" "^7.26.5" - "@babel/helper-validator-option" "^7.25.9" - browserslist "^4.24.0" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-compilation-targets@^7.27.2": +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9", "@babel/helper-compilation-targets@^7.27.2": version "7.27.2" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== @@ -221,23 +190,14 @@ "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" -"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" - integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/helper-module-transforms@^7.27.3": - version "7.27.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz#db0bbcfba5802f9ef7870705a7ef8788508ede02" - integrity sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg== +"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0", "@babel/helper-module-transforms@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" + integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== dependencies: "@babel/helper-module-imports" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" - "@babel/traverse" "^7.27.3" + "@babel/traverse" "^7.28.3" "@babel/helper-optimise-call-expression@^7.25.9": version "7.25.9" @@ -315,11 +275,6 @@ "@babel/traverse" "^7.27.1" "@babel/types" "^7.27.1" -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== - "@babel/helper-string-parser@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" @@ -363,27 +318,20 @@ "@babel/traverse" "^7.27.1" "@babel/types" "^7.27.1" -"@babel/helpers@^7.27.6": - version "7.27.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.6.tgz#6456fed15b2cb669d2d1fabe84b66b34991d812c" - integrity sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug== +"@babel/helpers@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.3.tgz#b83156c0a2232c133d1b535dd5d3452119c7e441" + integrity sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw== dependencies: "@babel/template" "^7.27.2" - "@babel/types" "^7.27.6" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.4", "@babel/parser@^7.26.9", "@babel/parser@^7.4.5": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.9.tgz#d9e78bee6dc80f9efd8f2349dcfbbcdace280fd5" - integrity sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A== - dependencies: - "@babel/types" "^7.26.9" + "@babel/types" "^7.28.2" -"@babel/parser@^7.27.2", "@babel/parser@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.0.tgz#979829fbab51a29e13901e5a80713dbcb840825e" - integrity sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.4", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.4.5": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.3.tgz#d2d25b814621bca5fe9d172bc93792547e7a2a71" + integrity sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA== dependencies: - "@babel/types" "^7.28.0" + "@babel/types" "^7.28.2" "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": version "7.25.9" @@ -1037,16 +985,7 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.25.9", "@babel/template@^7.26.9": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2" - integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/parser" "^7.26.9" - "@babel/types" "^7.26.9" - -"@babel/template@^7.27.1", "@babel/template@^7.27.2": +"@babel/template@^7.25.9", "@babel/template@^7.27.1", "@babel/template@^7.27.2": version "7.27.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== @@ -1055,33 +994,20 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse@^7.16.0", "@babel/traverse@^7.25.9", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.4.5": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.9.tgz#4398f2394ba66d05d988b2ad13c219a2c857461a" - integrity sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.9" - "@babel/parser" "^7.26.9" - "@babel/template" "^7.26.9" - "@babel/types" "^7.26.9" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.0.tgz#518aa113359b062042379e333db18380b537e34b" - integrity sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg== +"@babel/traverse@^7.16.0", "@babel/traverse@^7.25.9", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.4.5": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.3.tgz#6911a10795d2cce43ec6a28cffc440cca2593434" + integrity sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ== dependencies: "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.0" + "@babel/generator" "^7.28.3" "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.28.0" + "@babel/parser" "^7.28.3" "@babel/template" "^7.27.2" - "@babel/types" "^7.28.0" + "@babel/types" "^7.28.2" debug "^4.3.1" -"@babel/types@7.28.2": +"@babel/types@7.28.2", "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.25.4", "@babel/types@^7.25.9", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.4.4": version "7.28.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.2.tgz#da9db0856a9a88e0a13b019881d7513588cf712b" integrity sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ== @@ -1089,22 +1015,6 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.25.4", "@babel/types@^7.25.9", "@babel/types@^7.26.9", "@babel/types@^7.4.4": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559" - integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - -"@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.27.6", "@babel/types@^7.28.0": - version "7.28.1" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.1.tgz#2aaf3c10b31ba03a77ac84f52b3912a0edef4cf9" - integrity sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ== - dependencies: - "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - "@bazel/runfiles@^6.3.1": version "6.3.1" resolved "https://registry.yarnpkg.com/@bazel/runfiles/-/runfiles-6.3.1.tgz#3f8824b2d82853377799d42354b4df78ab0ace0b" @@ -1503,7 +1413,7 @@ buffer-crc32 "~0.2.3" fd-slicer2 "^1.2.0" -"@emnapi/core@^1.1.0", "@emnapi/core@^1.3.1": +"@emnapi/core@^1.1.0": version "1.3.1" resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.3.1.tgz#9c62d185372d1bddc94682b87f376e03dfac3f16" integrity sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog== @@ -1511,13 +1421,28 @@ "@emnapi/wasi-threads" "1.0.1" tslib "^2.4.0" -"@emnapi/runtime@^1.1.0", "@emnapi/runtime@^1.3.1": +"@emnapi/core@^1.4.5": + version "1.4.5" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.4.5.tgz#bfbb0cbbbb9f96ec4e2c4fd917b7bbe5495ceccb" + integrity sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q== + dependencies: + "@emnapi/wasi-threads" "1.0.4" + tslib "^2.4.0" + +"@emnapi/runtime@^1.1.0": version "1.3.1" resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.3.1.tgz#0fcaa575afc31f455fd33534c19381cfce6c6f60" integrity sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw== dependencies: tslib "^2.4.0" +"@emnapi/runtime@^1.4.5": + version "1.4.5" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.5.tgz#c67710d0661070f38418b6474584f159de38aba9" + integrity sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg== + dependencies: + tslib "^2.4.0" + "@emnapi/wasi-threads@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz#d7ae71fd2166b1c916c6cd2d0df2ef565a2e1a5b" @@ -1525,6 +1450,13 @@ dependencies: tslib "^2.4.0" +"@emnapi/wasi-threads@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz#703fc094d969e273b1b71c292523b2f792862bf4" + integrity sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g== + dependencies: + tslib "^2.4.0" + "@esbuild/aix-ppc64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353" @@ -2190,14 +2122,14 @@ "@emnapi/runtime" "^1.1.0" "@tybys/wasm-util" "^0.9.0" -"@napi-rs/wasm-runtime@^0.2.7": - version "0.2.7" - resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.7.tgz#288f03812a408bc53c2c3686c65f38fe90f295eb" - integrity sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw== +"@napi-rs/wasm-runtime@^1.0.1": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.3.tgz#24593dbd6fd1454b0b9c8b73bf7ac62d92a6bf63" + integrity sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q== dependencies: - "@emnapi/core" "^1.3.1" - "@emnapi/runtime" "^1.3.1" - "@tybys/wasm-util" "^0.9.0" + "@emnapi/core" "^1.4.5" + "@emnapi/runtime" "^1.4.5" + "@tybys/wasm-util" "^0.10.0" "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -2236,24 +2168,25 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@nx/devkit@21.3.11": - version "21.3.11" - resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-21.3.11.tgz#105cc3185f7d029b00f1e9d26c7168819881ffd1" - integrity sha512-JOV8TAa9K5+ZwTA/EUi0g5qcKEg5vmi0AyOUsrNUHlv3BgQnwZtPLDDTPPZ+ezq24o6YzgwueZWj3CLEdMHEDg== +"@nx/devkit@21.4.0": + version "21.4.0" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-21.4.0.tgz#f85cd8f9ad91782f0630daf6c8872b3627c76f5f" + integrity sha512-9dvUq94ypIeAQ9cE8YVMnDvysC2nN50PFxy7yQDHhCT65T5YpF2tSX6IYaWuFbtTELJOPtQwhJNd31oBQdRsQg== dependencies: ejs "^3.1.7" enquirer "~2.3.6" ignore "^5.0.4" minimatch "9.0.3" + nx "21.4.0" semver "^7.5.3" tmp "~0.2.1" tslib "^2.3.0" yargs-parser "21.1.1" -"@nx/js@21.3.11": - version "21.3.11" - resolved "https://registry.yarnpkg.com/@nx/js/-/js-21.3.11.tgz#84938bafa95e0c051060efe583e3e476c385bf40" - integrity sha512-aN8g1TP3FMN6MFLvMrZNaoqSwAkBFH1PunKQV17w4nlPkimWICaCP2DhY5W3VoOpjQBbhQoqrRt4mVfgnEpyvA== +"@nx/js@21.4.0": + version "21.4.0" + resolved "https://registry.yarnpkg.com/@nx/js/-/js-21.4.0.tgz#de2a5380f13272fbb76577f547980861a86c5ba3" + integrity sha512-+df50N+7xqoXDmJ8IQxLgZ+2ylLy/5EAhLxPjz7rnigEJmBW2UcEApsV4tOmlKiICv5NaxM9X6sHFFrcmekzpw== dependencies: "@babel/core" "^7.23.2" "@babel/plugin-proposal-decorators" "^7.22.7" @@ -2262,8 +2195,8 @@ "@babel/preset-env" "^7.23.2" "@babel/preset-typescript" "^7.22.5" "@babel/runtime" "^7.22.6" - "@nx/devkit" "21.3.11" - "@nx/workspace" "21.3.11" + "@nx/devkit" "21.4.0" + "@nx/workspace" "21.4.0" "@zkochan/js-yaml" "0.0.7" babel-plugin-const-enum "^1.0.1" babel-plugin-macros "^3.1.0" @@ -2285,66 +2218,66 @@ tinyglobby "^0.2.12" tslib "^2.3.0" -"@nx/nx-darwin-arm64@21.3.11": - version "21.3.11" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-21.3.11.tgz#3c24148af6967afb6fa4ed12f35409854b384c9b" - integrity sha512-qXZrW6kfsfGG9n4cWugR2v8ys7P1SsbQuFahlbNSTd7g+ZxozaOnc7tyxW9XuY84KQ35HwP/QSu1E13fK5CXwQ== - -"@nx/nx-darwin-x64@21.3.11": - version "21.3.11" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-21.3.11.tgz#adbc022b102e7d353866ac62b4c0bd2b96e6b5f4" - integrity sha512-6NJEIGRITpFZYptJtr/wdnVuidAS/wONMMSwX5rgAqh5A9teI0vxZVOgG6n5f6NQyqEDvZ9ytcIvLsQWA4kJFg== - -"@nx/nx-freebsd-x64@21.3.11": - version "21.3.11" - resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-21.3.11.tgz#369e3f0d8ff4f4b8303822e0d3d3ac7c5bc8e6e9" - integrity sha512-9VZOM9mutzuZCUgijHXrIl3NgKt2CWuH/awLqDS8ijhLs6WfI5TYTa+mFwx90dfZZ4y/jy6XWXa2Ee3OShf7Hg== - -"@nx/nx-linux-arm-gnueabihf@21.3.11": - version "21.3.11" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-21.3.11.tgz#dce034188c41f2a799284853a375806117aa9ac2" - integrity sha512-a05tAySKDEWt0TGoSnWp/l5+HL/CDJQkHfI9pXho85oDSkVRzhOInAn1EeZB/F+Q3PnJFsMHMhbuu2/nm3uYJA== - -"@nx/nx-linux-arm64-gnu@21.3.11": - version "21.3.11" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-21.3.11.tgz#9edbf4df73881f6f616ee1d795ec4e6bdd4822ae" - integrity sha512-MPeivf0ptNpzQYvww6zHIqVbE5dTT2isl/WqzGyy7NgSeYDpFXmouDCQaeKxo5WytMVRCvCw/NnWTQuCK6TjnA== - -"@nx/nx-linux-arm64-musl@21.3.11": - version "21.3.11" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-21.3.11.tgz#cef19062711a36d10af77f97122d513b258f2b26" - integrity sha512-/hJpc4VJsbxDEreXt5Ka9HJ3TBEHgIa9y/i+H9MmWOeapCdH1Edhx58Heuv9OaX7kK8Y8q0cSicv0dJCghiTjA== - -"@nx/nx-linux-x64-gnu@21.3.11": - version "21.3.11" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-21.3.11.tgz#9763d938ebea8ec8b11e4372aa9ec4c422daaf70" - integrity sha512-pTBHuloqTxpTHa/fdKjHkFFsfW16mEcTp37HDtoQpjPfcd9nO8CYO8OClaewr9khNqCnSbCLfSoIg/alnb7BWw== - -"@nx/nx-linux-x64-musl@21.3.11": - version "21.3.11" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-21.3.11.tgz#7996944f7c76895cda7043718791bb0d02574461" - integrity sha512-OhFjURB68rd6xld8t8fiNpopF2E7v+8/jfbpsku9c0gdV2UhzoxCeZwooe7qhQjCcjVO8JNOs4dAf7qs1VtpMw== - -"@nx/nx-win32-arm64-msvc@21.3.11": - version "21.3.11" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-21.3.11.tgz#5460efcd7890442a2a7d34754d2b9e2cd638f594" - integrity sha512-pGE2Td13oEj7aeogwCL+2fjmpabQVSduKfGOTlt4YoMlM0w0bXYSWqwiGBMKbMA50qkhnVapwwkuWF38PgCIxg== - -"@nx/nx-win32-x64-msvc@21.3.11": - version "21.3.11" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-21.3.11.tgz#84ba2b4babb251cbff36472c747a327fc1adc242" - integrity sha512-KJqLL/Zyx96hs+7pKbo/fsU7ZTFSLeZLnYQu05o6fvJJ5I1+p85t212/7vkbKKWJncyMospQdzLr3zLG3A/u8A== - -"@nx/workspace@21.3.11": - version "21.3.11" - resolved "https://registry.yarnpkg.com/@nx/workspace/-/workspace-21.3.11.tgz#1e3f1dc14c08f44303db95c6bbd877b484356f97" - integrity sha512-DD2iu9Ip/faNQ5MXZk+UbbBxGofYKjzHsXKRvMNQ/OAVzP/u9z2CPXEmRKlRAEQoy1lInmyopwfEUWwK1v4x0g== - dependencies: - "@nx/devkit" "21.3.11" +"@nx/nx-darwin-arm64@21.4.0": + version "21.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-21.4.0.tgz#11dd0dec0891d5d9972d2a02a746d44838bfa357" + integrity sha512-GDa/zycRzRA3jaaHNOBJGKoUFyylcWIv8ANf0OSdj4D92coSn8W1I2F95k9HSoACY4nLLp6hh9F9dLAaCw0GjQ== + +"@nx/nx-darwin-x64@21.4.0": + version "21.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-21.4.0.tgz#46aa779882dce374275a9d980494f33dea369861" + integrity sha512-MNE5Dr7E2eckapk9P/kMtBYZsUmPlnhAYphGTqn3cE8kbe4DdoNB+QPkXK13IgYq3isSyRu5GLyPPxgqz+E2iw== + +"@nx/nx-freebsd-x64@21.4.0": + version "21.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-21.4.0.tgz#643cb67aa4ef99d2d0bfdebb675d0f1046a75204" + integrity sha512-2cMcAEqFsBXU8PoL0X7HWSoOhYchOcQ9pQ3W+TJ/r7FV9uwavwKQxzNXfK95Bx33T6D4AY0/vCAeOpaqFFrt0A== + +"@nx/nx-linux-arm-gnueabihf@21.4.0": + version "21.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-21.4.0.tgz#c61616866da03b1308509d4f0b39cc780761e25e" + integrity sha512-zoc7hBcTS2fmBdbhWCGwlDaTZA7+w/Gb7f6GcAUl4NOx1gT99nuFrQ8XtrmTkIq/YzOhVok/4K82O3CHV7N4qw== + +"@nx/nx-linux-arm64-gnu@21.4.0": + version "21.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-21.4.0.tgz#c9db1485a2af39a8182771b93983f5f8df8b2d05" + integrity sha512-IgHuZyPoAXFYKodjpgb47Dtec6eg1FKKWyZyybn4RvPfp42DlofMASNjUZtjDOilK0vq5FWNOu0C8F3jeGSjqA== + +"@nx/nx-linux-arm64-musl@21.4.0": + version "21.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-21.4.0.tgz#014d7dc78e27ca288d63c2c5500d432c740ece99" + integrity sha512-Q4RE4rXiH0n+KO71l2V6b5U8sVX24p+81BK0Hi93HgR7WSSMtikTZ3RO8JO3zCIRSJxbjyS8xNiw7F2W3OzmPQ== + +"@nx/nx-linux-x64-gnu@21.4.0": + version "21.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-21.4.0.tgz#1d74988c7bfea13402bc7759dd60b689bebe6f0e" + integrity sha512-xdKpl0SI+ILqzwd2TAuSH6tA5WHoYRhdbBO3J8NvLga/3b8NxdEN/vLb2FzfsWMu81O0IOJ6pMxGE7N6zps9sg== + +"@nx/nx-linux-x64-musl@21.4.0": + version "21.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-21.4.0.tgz#d26ceab413a3649ece68a08bf39c217a91627379" + integrity sha512-p0Enow79yrdvF3djXohQx8fxp86f8LpQxD0ec4Y0VGT+3xQWSVsnehhiYkPQp3doEj2u/rBJjop6ITfE/Z09Sw== + +"@nx/nx-win32-arm64-msvc@21.4.0": + version "21.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-21.4.0.tgz#2b7c9f2261ac75512edd0f43d4b4da05ea02637f" + integrity sha512-nrl89vb/0k8h04hhakzU57cs/dDl9K8xncKBsKKbIDxgd8gRO/KYzEEU/H+QE/jDB/vavm3Q7uxmUpJ5ysIitw== + +"@nx/nx-win32-x64-msvc@21.4.0": + version "21.4.0" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-21.4.0.tgz#25812a35cfdad3b84cd4c63e12a0137fd7516f55" + integrity sha512-LaPLZjFy59+oIgZm0zSlhcMI8ZICAxEvm0A9VUexxeIj/Od6jmW9BV1tmIpQ0x1G8tN6sFGBt8hBxHNeLFfh1w== + +"@nx/workspace@21.4.0": + version "21.4.0" + resolved "https://registry.yarnpkg.com/@nx/workspace/-/workspace-21.4.0.tgz#56e5f8f735cb00804fdd072399cc75865fdd99b6" + integrity sha512-C39fOy9PYp7xvGdRdUvNDJQS2zN/96oS+KzOZSCp8ZyZosRSsR2qaQWLI0zds0K6T3jy21Rh5AzyztDuQrK8Jg== + dependencies: + "@nx/devkit" "21.4.0" "@zkochan/js-yaml" "0.0.7" chalk "^4.1.0" enquirer "~2.3.6" - nx "21.3.11" + nx "21.4.0" picomatch "4.0.2" tslib "^2.3.0" yargs-parser "21.1.1" @@ -2456,62 +2389,102 @@ dependencies: "@octokit/openapi-types" "^12.11.0" -"@oxc-resolver/binding-darwin-arm64@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-5.0.0.tgz#c99057f297954f197217e75d63ff92d4514e354a" - integrity sha512-zwHAf+owoxSWTDD4dFuwW+FkpaDzbaL30H5Ltocb+RmLyg4WKuteusRLKh5Y8b/cyu7UzhxM0haIqQjyqA1iuA== - -"@oxc-resolver/binding-darwin-x64@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-darwin-x64/-/binding-darwin-x64-5.0.0.tgz#530cf02f3a3833a3932fc22d732d757cdc7e3cbf" - integrity sha512-1lS3aBNVjVQKBvZdHm13+8tSjvu2Tl1Cv4FnUyMYxqx6+rsom2YaOylS5LhDUwfZu0zAgpLMwK6kGpF/UPncNg== - -"@oxc-resolver/binding-freebsd-x64@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-freebsd-x64/-/binding-freebsd-x64-5.0.0.tgz#4a10430b9375f17ea5c5f8a4439aa2901dcaa5c2" - integrity sha512-q9sRd68wC1/AJ0eu6ClhxlklVfe8gH4wrUkSyEbIYTZ8zY5yjsLY3fpqqsaCvWJUx65nW+XtnAxCGCi5AXr1Mw== - -"@oxc-resolver/binding-linux-arm-gnueabihf@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-5.0.0.tgz#f082550d0ff62e772657ebccea8d2f7751d2130b" - integrity sha512-catYavWsvqViYnCveQjhrK6yVYDEPFvIOgGLxnz5r2dcgrjpmquzREoyss0L2QG/J5HTTbwqwZ1kk+g56hE/1A== - -"@oxc-resolver/binding-linux-arm64-gnu@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-5.0.0.tgz#d016b164f46548759454e58a42289d4e45030e69" - integrity sha512-l/0pWoQM5kVmJLg4frQ1mKZOXgi0ex/hzvFt8E4WK2ifXr5JgKFUokxsb/oat7f5YzdJJh5r9p+qS/t3dA26Aw== - -"@oxc-resolver/binding-linux-arm64-musl@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-5.0.0.tgz#c9ce09343c877e1000a8e2b2b04694d94ae5a918" - integrity sha512-bx0oz/oaAW4FGYqpIIxJCnmgb906YfMhTEWCJvYkxjpEI8VKLJEL3PQevYiqDq36SA0yRLJ/sQK2fqry8AFBfA== - -"@oxc-resolver/binding-linux-x64-gnu@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-5.0.0.tgz#10476acfa3e8e46331820a629914d351df0ccf8c" - integrity sha512-4PH++qbSIhlRsFYdN1P9neDov4OGhTGo5nbQ1D7AL6gWFLo3gdZTc00FM2y8JjeTcPWEXkViZuwpuc0w5i6qHg== - -"@oxc-resolver/binding-linux-x64-musl@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-5.0.0.tgz#5b9383bc12c2c394f228b7771469c8aac3cb7bff" - integrity sha512-mLfQFpX3/5y9oWi0b+9FbWDkL2hM0Y29653beCHiHxAdGyVgb2DsJbK74WkMTwtSz9by8vyBh8jGPZcg1yLZbQ== - -"@oxc-resolver/binding-wasm32-wasi@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-5.0.0.tgz#cb7ad0e966b3d746f2c8ea98660a2558d2db9057" - integrity sha512-uEhsAZSo65qsRi6+IfBTEUUFbjg7T2yruJeLYpFfEATpm3ory5Mgo5vx3L0c2/Cz1OUZXBgp3A8x6VMUB2jT2A== - dependencies: - "@napi-rs/wasm-runtime" "^0.2.7" - -"@oxc-resolver/binding-win32-arm64-msvc@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-5.0.0.tgz#44422b316f744dbd904254ee4fbdd2cd0444f613" - integrity sha512-8DbSso9Jp1ns8AYuZFXdRfAcdJrzZwkFm/RjPuvAPTENsm685dosBF8G6gTHQlHvULnk6o3sa9ygZaTGC/UoEw== - -"@oxc-resolver/binding-win32-x64-msvc@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-5.0.0.tgz#1575b4aaf6f46faf5b95003be2a5dfd8ea1e10e0" - integrity sha512-ylppfPEg63NuRXOPNsXFlgyl37JrtRn0QMO26X3K3Ytp5HtLrMreQMGVtgr30e1l2YmAWqhvmKlCryOqzGPD/g== +"@oxc-resolver/binding-android-arm-eabi@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-android-arm-eabi/-/binding-android-arm-eabi-11.6.1.tgz#23af975fc8fdd739c6ee075318d213e9f1af67cd" + integrity sha512-Ma/kg29QJX1Jzelv0Q/j2iFuUad1WnjgPjpThvjqPjpOyLjCUaiFCCnshhmWjyS51Ki1Iol3fjf1qAzObf8GIA== + +"@oxc-resolver/binding-android-arm64@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-android-arm64/-/binding-android-arm64-11.6.1.tgz#c9973a0b3981f2afcd964e7965ae7451d62a458e" + integrity sha512-xjL/FKKc5p8JkFWiH7pJWSzsewif3fRf1rw2qiRxRvq1uIa6l7Zoa14Zq2TNWEsqDjdeOrlJtfWiPNRnevK0oQ== + +"@oxc-resolver/binding-darwin-arm64@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-11.6.1.tgz#d2efc6f71ee72f37b13b6b163d58ac7564c9246b" + integrity sha512-u0yrJ3NHE0zyCjiYpIyz4Vmov21MA0yFKbhHgixDU/G6R6nvC8ZpuSFql3+7C8ttAK9p8WpqOGweepfcilH5Bw== + +"@oxc-resolver/binding-darwin-x64@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-darwin-x64/-/binding-darwin-x64-11.6.1.tgz#b0d150b98174e56bcf6831b78c8c9b67395f0137" + integrity sha512-2lox165h1EhzxcC8edUy0znXC/hnAbUPaMpYKVlzLpB2AoYmgU4/pmofFApj+axm2FXpNamjcppld8EoHo06rw== + +"@oxc-resolver/binding-freebsd-x64@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-freebsd-x64/-/binding-freebsd-x64-11.6.1.tgz#c2672c95f702ac9cd8b316ad01b4534fb7f6bc85" + integrity sha512-F45MhEQ7QbHfsvZtVNuA/9obu3il7QhpXYmCMfxn7Zt9nfAOw4pQ8hlS5DroHVp3rW35u9F7x0sixk/QEAi3qQ== + +"@oxc-resolver/binding-linux-arm-gnueabihf@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-11.6.1.tgz#355c5db141d67fb361d8c07ff287d0d92a5a0263" + integrity sha512-r+3+MTTl0tD4NoWbfTIItAxJvuyIU7V0fwPDXrv7Uj64vZ3OYaiyV+lVaeU89Bk/FUUQxeUpWBwdKNKHjyRNQw== + +"@oxc-resolver/binding-linux-arm-musleabihf@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-11.6.1.tgz#b8c4e725230fe24f065900dd4b6a354442bf9748" + integrity sha512-TBTZ63otsWZ72Z8ZNK2JVS0HW1w9zgOixJTFDNrYPUUW1pXGa28KAjQ1yGawj242WLAdu3lwdNIWtkxeO2BLxQ== + +"@oxc-resolver/binding-linux-arm64-gnu@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-11.6.1.tgz#325f6574cd2086d50d429cdebcd9499269347f7e" + integrity sha512-SjwhNynjSG2yMdyA0f7wz7Yvo3ppejO+ET7n2oiI7ApCXrwxMzeRWjBzQt+oVWr2HzVOfaEcDS9rMtnR83ulig== + +"@oxc-resolver/binding-linux-arm64-musl@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-11.6.1.tgz#a11d4129b995a4dfa6c245e14ef1ed1cfc84731c" + integrity sha512-f4EMidK6rosInBzPMnJ0Ri4RttFCvvLNUNDFUBtELW/MFkBwPTDlvbsmW0u0Mk/ruBQ2WmRfOZ6tT62kWMcX2Q== + +"@oxc-resolver/binding-linux-ppc64-gnu@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-11.6.1.tgz#d5aadce1b786912bae67dc8d8beb6468b04a9430" + integrity sha512-1umENVKeUsrWnf5IlF/6SM7DCv8G6CoKI2LnYR6qhZuLYDPS4PBZ0Jow3UDV9Rtbv5KRPcA3/uXjI88ntWIcOQ== + +"@oxc-resolver/binding-linux-riscv64-gnu@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-11.6.1.tgz#1e61e52f1c367ff59a5f12a09f1121be9cb96f8e" + integrity sha512-Hjyp1FRdJhsEpIxsZq5VcDuFc8abC0Bgy8DWEa31trCKoTz7JqA7x3E2dkFbrAKsEFmZZ0NvuG5Ip3oIRARhow== + +"@oxc-resolver/binding-linux-riscv64-musl@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-11.6.1.tgz#1045b84efff4bd3896850517c6e6b8bcc84acd73" + integrity sha512-ODJOJng6f3QxpAXhLel3kyWs8rPsJeo9XIZHzA7p//e+5kLMDU7bTVk4eZnUHuxsqsB8MEvPCicJkKCEuur5Ag== + +"@oxc-resolver/binding-linux-s390x-gnu@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-11.6.1.tgz#7de8ba1d0692bfb1b6b74d7ae5f5ceb2f3532542" + integrity sha512-hCzRiLhqe1ZOpHTsTGKp7gnMJRORlbCthawBueer2u22RVAka74pV/+4pP1tqM07mSlQn7VATuWaDw9gCl+cVg== + +"@oxc-resolver/binding-linux-x64-gnu@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-11.6.1.tgz#4c57966a8b5504fc11605d319ae2749f8ce3f59b" + integrity sha512-JansPD8ftOzMYIC3NfXJ68tt63LEcIAx44Blx6BAd7eY880KX7A0KN3hluCrelCz5aQkPaD95g8HBiJmKaEi2w== + +"@oxc-resolver/binding-linux-x64-musl@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-11.6.1.tgz#96416d856dd2b9ffedeaa888b796da4277c63a3f" + integrity sha512-R78ES1rd4z2x5NrFPtSWb/ViR1B8wdl+QN2X8DdtoYcqZE/4tvWtn9ZTCXMEzUp23tchJ2wUB+p6hXoonkyLpA== + +"@oxc-resolver/binding-wasm32-wasi@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-11.6.1.tgz#9a5f5a3b312b1af988614aacf43324f417429c04" + integrity sha512-qAR3tYIf3afkij/XYunZtlz3OH2Y4ni10etmCFIJB5VRGsqJyI6Hl+2dXHHGJNwbwjXjSEH/KWJBpVroF3TxBw== + dependencies: + "@napi-rs/wasm-runtime" "^1.0.1" + +"@oxc-resolver/binding-win32-arm64-msvc@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-11.6.1.tgz#b124a596a857ed1d29da77edff60cb6229af30eb" + integrity sha512-QqygWygIuemGkaBA48POOTeinbVvlamqh6ucm8arGDGz/mB5O00gXWxed12/uVrYEjeqbMkla/CuL3fjL3EKvw== + +"@oxc-resolver/binding-win32-ia32-msvc@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-11.6.1.tgz#43bfe8fa601f751423b02f95c3a64c934bbe0f89" + integrity sha512-N2+kkWwt/bk0JTCxhPuK8t8JMp3nd0n2OhwOkU8KO4a7roAJEa4K1SZVjMv5CqUIr5sx2CxtXRBoFDiORX5oBg== + +"@oxc-resolver/binding-win32-x64-msvc@11.6.1": + version "11.6.1" + resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-11.6.1.tgz#97b2c0799e0bd3eba848400613a10a30b5a952dc" + integrity sha512-DfMg3cU9bJUbN62Prbp4fGCtLgexuwyEaQGtZAp8xmi1Ii26uflOGx0FJkFTF6lVMSFoIRFvIL8gsw5/ZdHrMw== "@oxlint/darwin-arm64@1.6.0": version "1.6.0" @@ -2685,405 +2658,105 @@ estree-walker "^2.0.2" picomatch "^4.0.2" -"@rollup/rollup-android-arm-eabi@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.0.tgz#d964ee8ce4d18acf9358f96adc408689b6e27fe3" - integrity sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg== - -"@rollup/rollup-android-arm-eabi@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.0.tgz#a3e4e4b2baf0bade6918cf5135c3ef7eee653196" - integrity sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA== - -"@rollup/rollup-android-arm-eabi@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz#8560592f0dcf43b8cb0949af9f1d916205148d12" - integrity sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA== - -"@rollup/rollup-android-arm-eabi@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz#292e25953d4988d3bd1af0f5ebbd5ee4d65c90b4" - integrity sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA== - -"@rollup/rollup-android-arm64@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.0.tgz#9b5e130ecc32a5fc1e96c09ff371743ee71a62d3" - integrity sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w== - -"@rollup/rollup-android-arm64@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.0.tgz#63566b0e76c62d4f96d44448f38a290562280200" - integrity sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw== - -"@rollup/rollup-android-arm64@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz#6bfb777bbce998691b6fd3e916b05cd46392d020" - integrity sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ== - -"@rollup/rollup-android-arm64@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz#053b3def3451e6fc1a9078188f22799e868d7c59" - integrity sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ== - -"@rollup/rollup-darwin-arm64@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.0.tgz#ef439182c739b20b3c4398cfc03e3c1249ac8903" - integrity sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ== - -"@rollup/rollup-darwin-arm64@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.0.tgz#60a51a61b22b1f4fdf97b4adf5f0f447f492759d" - integrity sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA== - -"@rollup/rollup-darwin-arm64@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz#7efce10220293a22e7b7b595d05d8b8400a7bcf3" - integrity sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA== - -"@rollup/rollup-darwin-arm64@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz#98d90445282dec54fd05440305a5e8df79a91ece" - integrity sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ== - -"@rollup/rollup-darwin-x64@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.0.tgz#d7380c1531ab0420ca3be16f17018ef72dd3d504" - integrity sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA== - -"@rollup/rollup-darwin-x64@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.0.tgz#bfe3059440f7032de11e749ece868cd7f232e609" - integrity sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ== - -"@rollup/rollup-darwin-x64@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz#c617a8ece21050bfbea299c126767d2e70cfa79a" - integrity sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og== - -"@rollup/rollup-darwin-x64@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz#fe05f95a736423af5f9c3a59a70f41ece52a1f20" - integrity sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA== - -"@rollup/rollup-freebsd-arm64@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.0.tgz#cbcbd7248823c6b430ce543c59906dd3c6df0936" - integrity sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg== - -"@rollup/rollup-freebsd-arm64@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.0.tgz#d5d4c6cd3b8acb7493b76227d8b2b4a2d732a37b" - integrity sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ== - -"@rollup/rollup-freebsd-arm64@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz#5a6af0a9acf82162d2910933649ae24fc0ea3ecb" - integrity sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g== - -"@rollup/rollup-freebsd-arm64@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz#41e1fbdc1f8c3dc9afb6bc1d6e3fb3104bd81eee" - integrity sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg== - -"@rollup/rollup-freebsd-x64@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.0.tgz#96bf6ff875bab5219c3472c95fa6eb992586a93b" - integrity sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw== - -"@rollup/rollup-freebsd-x64@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.0.tgz#cb4e1547b572cd0144c5fbd6c4a0edfed5fe6024" - integrity sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g== - -"@rollup/rollup-freebsd-x64@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz#ae9709463560196fc275bd0da598668a2e341023" - integrity sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A== - -"@rollup/rollup-freebsd-x64@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz#69131e69cb149d547abb65ef3b38fc746c940e24" - integrity sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw== - -"@rollup/rollup-linux-arm-gnueabihf@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.0.tgz#d80cd62ce6d40f8e611008d8dbf03b5e6bbf009c" - integrity sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA== - -"@rollup/rollup-linux-arm-gnueabihf@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.0.tgz#feb81bd086f6a469777f75bec07e1bdf93352e69" - integrity sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ== - -"@rollup/rollup-linux-arm-gnueabihf@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz#6ec52661764dbd54c19d6520a403aa385a5c0fbf" - integrity sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q== - -"@rollup/rollup-linux-arm-gnueabihf@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz#977ded91c7cf6fc0d9443bb9c0a064e45a805267" - integrity sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA== - -"@rollup/rollup-linux-arm-musleabihf@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.0.tgz#75440cfc1e8d0f87a239b4c31dfeaf4719b656b7" - integrity sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg== - -"@rollup/rollup-linux-arm-musleabihf@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.0.tgz#68bff1c6620c155c9d8f5ee6a83c46eb50486f18" - integrity sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg== - -"@rollup/rollup-linux-arm-musleabihf@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz#fd33ba4a43ef8419e96811236493d19436271923" - integrity sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q== - -"@rollup/rollup-linux-arm-musleabihf@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz#dc034fc3c0f0eb5c75b6bc3eca3b0b97fd35f49a" - integrity sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ== - -"@rollup/rollup-linux-arm64-gnu@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.0.tgz#ac527485ecbb619247fb08253ec8c551a0712e7c" - integrity sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg== - -"@rollup/rollup-linux-arm64-gnu@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.0.tgz#dbc5036a85e3ca3349887c8bdbebcfd011e460b0" - integrity sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ== - -"@rollup/rollup-linux-arm64-gnu@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz#933b3d99b73c9d7bf4506cab0d5d313c7e74fd2d" - integrity sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw== - -"@rollup/rollup-linux-arm64-gnu@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz#5e92613768d3de3ffcabc965627dd0a59b3e7dfc" - integrity sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng== - -"@rollup/rollup-linux-arm64-musl@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.0.tgz#74d2b5cb11cf714cd7d1682e7c8b39140e908552" - integrity sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ== - -"@rollup/rollup-linux-arm64-musl@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.0.tgz#72efc633aa0b93531bdfc69d70bcafa88e6152fc" - integrity sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q== - -"@rollup/rollup-linux-arm64-musl@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz#dbe9ae24ee9e97b75662fddcb69eb7f23c89280a" - integrity sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog== - -"@rollup/rollup-linux-arm64-musl@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz#2a44f88e83d28b646591df6e50aa0a5a931833d8" - integrity sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg== - -"@rollup/rollup-linux-loongarch64-gnu@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.0.tgz#a0a310e51da0b5fea0e944b0abd4be899819aef6" - integrity sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg== - -"@rollup/rollup-linux-loongarch64-gnu@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.0.tgz#9b6a49afde86c8f57ca11efdf8fd8d7c52048817" - integrity sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg== - -"@rollup/rollup-linux-loongarch64-gnu@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz#818c5a071eec744436dbcdd76fe9c3c869dc9a8d" - integrity sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg== - -"@rollup/rollup-linux-loongarch64-gnu@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz#bd5897e92db7fbf7dc456f61d90fff96c4651f2e" - integrity sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA== - -"@rollup/rollup-linux-powerpc64le-gnu@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.0.tgz#4077e2862b0ac9f61916d6b474d988171bd43b83" - integrity sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw== - -"@rollup/rollup-linux-powerpc64le-gnu@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.0.tgz#93cb96073efab0cdbf419c8dfc44b5e2bd815139" - integrity sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ== - -"@rollup/rollup-linux-powerpc64le-gnu@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz#6b8591def27d886fa147fb0340126c7d6682a7e4" - integrity sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg== - -"@rollup/rollup-linux-ppc64-gnu@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz#a7065025411c14ad9ec34cc1cd1414900ec2a303" - integrity sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw== - -"@rollup/rollup-linux-riscv64-gnu@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.0.tgz#5812a1a7a2f9581cbe12597307cc7ba3321cf2f3" - integrity sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA== - -"@rollup/rollup-linux-riscv64-gnu@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.0.tgz#028708f73c8130ae924e5c3755de50fe93687249" - integrity sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA== - -"@rollup/rollup-linux-riscv64-gnu@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz#f1861ac4ee8da64e0b0d23853ff26fe2baa876cf" - integrity sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw== - -"@rollup/rollup-linux-riscv64-gnu@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz#17f9c0c675e13ef4567cfaa3730752417257ccc3" - integrity sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ== - -"@rollup/rollup-linux-riscv64-musl@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.0.tgz#973aaaf4adef4531375c36616de4e01647f90039" - integrity sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ== - -"@rollup/rollup-linux-riscv64-musl@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.0.tgz#878bfb158b2cf6671b7611fd58e5c80d9144ac6c" - integrity sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q== - -"@rollup/rollup-linux-riscv64-musl@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz#320c961401a923b374e358664527b188e374e1ae" - integrity sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA== - -"@rollup/rollup-linux-riscv64-musl@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz#bc6ed3db2cedc1ba9c0a2183620fe2f792c3bf3f" - integrity sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw== - -"@rollup/rollup-linux-s390x-gnu@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.0.tgz#9bad59e907ba5bfcf3e9dbd0247dfe583112f70b" - integrity sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw== - -"@rollup/rollup-linux-s390x-gnu@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.0.tgz#59b4ebb2129d34b7807ed8c462ff0baaefca9ad4" - integrity sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA== - -"@rollup/rollup-linux-s390x-gnu@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz#1763eed3362b50b6164d3f0947486c03cc7e616d" - integrity sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw== - -"@rollup/rollup-linux-s390x-gnu@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz#440c4f6753274e2928e06d2a25613e5a1cf97b41" - integrity sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA== - -"@rollup/rollup-linux-x64-gnu@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.0.tgz#68b045a720bd9b4d905f462b997590c2190a6de0" - integrity sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ== - -"@rollup/rollup-linux-x64-gnu@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.0.tgz#597d40f60d4b15bedbbacf2491a69c5b67a58e93" - integrity sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw== - -"@rollup/rollup-linux-x64-gnu@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz#0d4c8d0b8f801902f0844a40a9d981a0179f4971" - integrity sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw== - -"@rollup/rollup-linux-x64-gnu@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz#1e936446f90b2574ea4a83b4842a762cc0a0aed3" - integrity sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA== - -"@rollup/rollup-linux-x64-musl@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.0.tgz#8e703e2c2ad19ba7b2cb3d8c3a4ad11d4ee3a282" - integrity sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw== - -"@rollup/rollup-linux-x64-musl@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.0.tgz#0a062d6fee35ec4fbb607b2a9d933a9372ccf63a" - integrity sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA== - -"@rollup/rollup-linux-x64-musl@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz#ec30bb48b5fe22a3aaba98072f2d5b7139e1a8eb" - integrity sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw== - -"@rollup/rollup-linux-x64-musl@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz#c6f304dfba1d5faf2be5d8b153ccbd8b5d6f1166" - integrity sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA== - -"@rollup/rollup-win32-arm64-msvc@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.0.tgz#c5bee19fa670ff5da5f066be6a58b4568e9c650b" - integrity sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ== - -"@rollup/rollup-win32-arm64-msvc@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.0.tgz#41ffab489857987c75385b0fc8cccf97f7e69d0a" - integrity sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w== - -"@rollup/rollup-win32-arm64-msvc@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz#27a6e48d1502e8e4bed96bedfb533738655874f2" - integrity sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg== - -"@rollup/rollup-win32-arm64-msvc@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz#b4ad4a79219892aac112ed1c9d1356cad0566ef5" - integrity sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g== - -"@rollup/rollup-win32-ia32-msvc@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.0.tgz#846e02c17044bd922f6f483a3b4d36aac6e2b921" - integrity sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA== - -"@rollup/rollup-win32-ia32-msvc@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.0.tgz#d9fb61d98eedfa52720b6ed9f31442b3ef4b839f" - integrity sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA== - -"@rollup/rollup-win32-ia32-msvc@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz#a2fbad3bec20ff879f3fd51720adf33692ca8f3d" - integrity sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw== - -"@rollup/rollup-win32-ia32-msvc@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz#b1b22eb2a9568048961e4a6f540438b4a762aa62" - integrity sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ== - -"@rollup/rollup-win32-x64-msvc@4.40.0": - version "4.40.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.0.tgz#fd92d31a2931483c25677b9c6698106490cbbc76" - integrity sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ== - -"@rollup/rollup-win32-x64-msvc@4.44.0": - version "4.44.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.0.tgz#a36e79b6ccece1533f777a1bca1f89c13f0c5f62" - integrity sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ== - -"@rollup/rollup-win32-x64-msvc@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz#e5085c6d13da15b4c5133cd2a6bb11f25b6bb77a" - integrity sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA== - -"@rollup/rollup-win32-x64-msvc@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz#87079f137b5fdb75da11508419aa998cc8cc3d8b" - integrity sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg== +"@rollup/rollup-android-arm-eabi@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.3.tgz#8d8afcc5a79a3f190c5f855facde6e0da6a5b7ea" + integrity sha512-UmTdvXnLlqQNOCJnyksjPs1G4GqXNGW1LrzCe8+8QoaLhhDeTXYBgJ3k6x61WIhlHX2U+VzEJ55TtIjR/HTySA== + +"@rollup/rollup-android-arm64@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.3.tgz#bed8ee4c2b31fd255fb91c2f52949dffef16ecf1" + integrity sha512-8NoxqLpXm7VyeI0ocidh335D6OKT0UJ6fHdnIxf3+6oOerZZc+O7r+UhvROji6OspyPm+rrIdb1gTXtVIqn+Sg== + +"@rollup/rollup-darwin-arm64@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.3.tgz#ee2a75deb8786b394c7f1777cc0c2ae2c3680469" + integrity sha512-csnNavqZVs1+7/hUKtgjMECsNG2cdB8F7XBHP6FfQjqhjF8rzMzb3SLyy/1BG7YSfQ+bG75Ph7DyedbUqwq1rA== + +"@rollup/rollup-darwin-x64@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.3.tgz#f5a01577c40830c423855492ecd8d3a7ae1b4836" + integrity sha512-r2MXNjbuYabSIX5yQqnT8SGSQ26XQc8fmp6UhlYJd95PZJkQD1u82fWP7HqvGUf33IsOC6qsiV+vcuD4SDP6iw== + +"@rollup/rollup-freebsd-arm64@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.3.tgz#d272eed9c14efc149bab316de364c04f236c544f" + integrity sha512-uluObTmgPJDuJh9xqxyr7MV61Imq+0IvVsAlWyvxAaBSNzCcmZlhfYcRhCdMaCsy46ccZa7vtDDripgs9Jkqsw== + +"@rollup/rollup-freebsd-x64@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.3.tgz#4c793f86e2dc64e725370daa2bec103f5869b5a6" + integrity sha512-AVJXEq9RVHQnejdbFvh1eWEoobohUYN3nqJIPI4mNTMpsyYN01VvcAClxflyk2HIxvLpRcRggpX1m9hkXkpC/A== + +"@rollup/rollup-linux-arm-gnueabihf@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.3.tgz#28da78d3709262f0b7ef0ba7e8e6f77c1b2f30a6" + integrity sha512-byyflM+huiwHlKi7VHLAYTKr67X199+V+mt1iRgJenAI594vcmGGddWlu6eHujmcdl6TqSNnvqaXJqZdnEWRGA== + +"@rollup/rollup-linux-arm-musleabihf@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.3.tgz#7e3309e6519eca1459038761aad44863e86fc497" + integrity sha512-aLm3NMIjr4Y9LklrH5cu7yybBqoVCdr4Nvnm8WB7PKCn34fMCGypVNpGK0JQWdPAzR/FnoEoFtlRqZbBBLhVoQ== + +"@rollup/rollup-linux-arm64-gnu@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.3.tgz#bc18efe81022baac97566cc0ace04b359eb7cd16" + integrity sha512-VtilE6eznJRDIoFOzaagQodUksTEfLIsvXymS+UdJiSXrPW7Ai+WG4uapAc3F7Hgs791TwdGh4xyOzbuzIZrnw== + +"@rollup/rollup-linux-arm64-musl@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.3.tgz#3ac849b6c42591014b0cb8e25c9ba1ace8fe19ec" + integrity sha512-dG3JuS6+cRAL0GQ925Vppafi0qwZnkHdPeuZIxIPXqkCLP02l7ka+OCyBoDEv8S+nKHxfjvjW4OZ7hTdHkx8/w== + +"@rollup/rollup-linux-loongarch64-gnu@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.3.tgz#10260ca0c3682c2904b04bb907163aca8bc5adef" + integrity sha512-iU8DxnxEKJptf8Vcx4XvAUdpkZfaz0KWfRrnIRrOndL0SvzEte+MTM7nDH4A2Now4FvTZ01yFAgj6TX/mZl8hQ== + +"@rollup/rollup-linux-ppc64-gnu@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.3.tgz#36b002a84c04f2e18093f563896c95a6e687f28f" + integrity sha512-VrQZp9tkk0yozJoQvQcqlWiqaPnLM6uY1qPYXvukKePb0fqaiQtOdMJSxNFUZFsGw5oA5vvVokjHrx8a9Qsz2A== + +"@rollup/rollup-linux-riscv64-gnu@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.3.tgz#ff1b3708624fc8b912e5341431751977b78be273" + integrity sha512-uf2eucWSUb+M7b0poZ/08LsbcRgaDYL8NCGjUeFMwCWFwOuFcZ8D9ayPl25P3pl+D2FH45EbHdfyUesQ2Lt9wA== + +"@rollup/rollup-linux-riscv64-musl@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.3.tgz#ab6f7ef69cdf812eccb318021a8f5c221bd0c048" + integrity sha512-7tnUcDvN8DHm/9ra+/nF7lLzYHDeODKKKrh6JmZejbh1FnCNZS8zMkZY5J4sEipy2OW1d1Ncc4gNHUd0DLqkSg== + +"@rollup/rollup-linux-s390x-gnu@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.3.tgz#60527b48dd84814fa5092a2eef1ac90e2b4bf825" + integrity sha512-MUpAOallJim8CsJK+4Lc9tQzlfPbHxWDrGXZm2z6biaadNpvh3a5ewcdat478W+tXDoUiHwErX/dOql7ETcLqg== + +"@rollup/rollup-linux-x64-gnu@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.3.tgz#c95698199820782b7420f5472e5d36b681728274" + integrity sha512-F42IgZI4JicE2vM2PWCe0N5mR5vR0gIdORPqhGQ32/u1S1v3kLtbZ0C/mi9FFk7C5T0PgdeyWEPajPjaUpyoKg== + +"@rollup/rollup-linux-x64-musl@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.3.tgz#226eb081be8d6698a580022448197b01cb4193a2" + integrity sha512-oLc+JrwwvbimJUInzx56Q3ujL3Kkhxehg7O1gWAYzm8hImCd5ld1F2Gry5YDjR21MNb5WCKhC9hXgU7rRlyegQ== + +"@rollup/rollup-win32-arm64-msvc@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.3.tgz#e900bd51cfc20af2a1c828d999bb49da1bd497eb" + integrity sha512-lOrQ+BVRstruD1fkWg9yjmumhowR0oLAAzavB7yFSaGltY8klttmZtCLvOXCmGE9mLIn8IBV/IFrQOWz5xbFPg== + +"@rollup/rollup-win32-ia32-msvc@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.3.tgz#94652ba771a90bf2558c0a6c553857148d7ff8f4" + integrity sha512-vvrVKPRS4GduGR7VMH8EylCBqsDcw6U+/0nPDuIjXQRbHJc6xOBj+frx8ksfZAh6+Fptw5wHrN7etlMmQnPQVg== + +"@rollup/rollup-win32-x64-msvc@4.46.3": + version "4.46.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.3.tgz#3d9ed4f8b9f2be7500565515d863c409eaceeb70" + integrity sha512-fi3cPxCnu3ZeM3EwKZPgXbWoGzm2XHgB/WShKI81uj8wG0+laobmqy5wbgEwzstlbLu4MyO8C19FyhhWseYKNQ== "@rtsao/scc@^1.1.0": version "1.1.0" @@ -3130,31 +2803,31 @@ resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== -"@swc-node/core@^1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc-node/core/-/core-1.13.3.tgz#0821d01263f48314392d38d80ef1a03fef5f11b3" - integrity sha512-OGsvXIid2Go21kiNqeTIn79jcaX4l0G93X2rAnas4LFoDyA9wAwVK7xZdm+QsKoMn5Mus2yFLCc4OtX2dD/PWA== +"@swc-node/core@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@swc-node/core/-/core-1.14.1.tgz#b3f85f9ac055faee1a3454a0cf71bb953c814f1a" + integrity sha512-jrt5GUaZUU6cmMS+WTJEvGvaB6j1YNKPHPzC2PUi2BjaFbtxURHj6641Az6xN7b665hNniAIdvjxWcRml5yCnw== -"@swc-node/register@~1.10.10": - version "1.10.10" - resolved "https://registry.yarnpkg.com/@swc-node/register/-/register-1.10.10.tgz#04652ced75f5f2f0ca40b8db587ffa913696fa52" - integrity sha512-jYWaI2WNEKz8KZL3sExd2KVL1JMma1/J7z+9iTpv0+fRN7LGMF8VTGGuHI2bug/ztpdZU1G44FG/Kk6ElXL9CQ== +"@swc-node/register@~1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@swc-node/register/-/register-1.11.1.tgz#bc353f9df7d9c6f0e7f067fe2b3a7552fd667698" + integrity sha512-VQ0hJ5jX31TVv/fhZx4xJRzd8pwn6VvzYd2tGOHHr2TfXGCBixZoqdPDXTiEoJLCTS2MmvBf6zyQZZ0M8aGQCQ== dependencies: - "@swc-node/core" "^1.13.3" - "@swc-node/sourcemap-support" "^0.5.1" + "@swc-node/core" "^1.14.1" + "@swc-node/sourcemap-support" "^0.6.1" colorette "^2.0.20" - debug "^4.3.5" - oxc-resolver "^5.0.0" - pirates "^4.0.6" - tslib "^2.6.3" + debug "^4.4.1" + oxc-resolver "^11.6.1" + pirates "^4.0.7" + tslib "^2.8.1" -"@swc-node/sourcemap-support@^0.5.1": - version "0.5.1" - resolved "https://registry.yarnpkg.com/@swc-node/sourcemap-support/-/sourcemap-support-0.5.1.tgz#0355540d62874891770ce1ba06838de186f098ff" - integrity sha512-JxIvIo/Hrpv0JCHSyRpetAdQ6lB27oFYhv0PKCNf1g2gUXOjpeR1exrXccRxLMuAV5WAmGFBwRnNOJqN38+qtg== +"@swc-node/sourcemap-support@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@swc-node/sourcemap-support/-/sourcemap-support-0.6.1.tgz#579bd0cfebc9cea51dd0de7c59c47ecd07b9e505" + integrity sha512-ovltDVH5QpdHXZkW138vG4+dgcNsxfwxHVoV6BtmTbz2KKl1A8ZSlbdtxzzfNjCjbpayda8Us9eMtcHobm38dA== dependencies: source-map-support "^0.5.21" - tslib "^2.6.3" + tslib "^2.8.1" "@swc/core-darwin-arm64@1.13.3": version "1.13.3" @@ -3268,6 +2941,13 @@ resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== +"@tybys/wasm-util@^0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.0.tgz#2fd3cd754b94b378734ce17058d0507c45c88369" + integrity sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ== + dependencies: + tslib "^2.4.0" + "@tybys/wasm-util@^0.9.0": version "0.9.0" resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" @@ -3434,7 +3114,7 @@ dependencies: "@types/estree" "*" -"@types/estree@*", "@types/estree@1.0.7", "@types/estree@1.0.8", "@types/estree@>=1.0.7", "@types/estree@^1.0.0", "@types/estree@^1.0.6", "@types/estree@^1.0.8": +"@types/estree@*", "@types/estree@1.0.8", "@types/estree@>=1.0.7", "@types/estree@^1.0.0", "@types/estree@^1.0.6", "@types/estree@^1.0.8": version "1.0.8" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== @@ -3504,10 +3184,10 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jasmine@^5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.8.tgz#b20f78ca416d7a2a8e726f8321e0b2827a78ceaa" - integrity sha512-u7/CnvRdh6AaaIzYjCgUuVbREFgulhX05Qtf6ZtW+aOcjCKKVvKgpkPYJBFTZSHtFBYimzU4zP0V2vrEsq9Wcg== +"@types/jasmine@^5.1.9": + version "5.1.9" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.9.tgz#9f00abff2a17687e675ce6669e7b53c9e7d145f0" + integrity sha512-8t4HtkW4wxiPVedMpeZ63n3vlWxEIquo/zc1Tm8ElU+SqVV7+D3Na2PWaJUp179AzTragMWVwkMv7mvty0NfyQ== "@types/json-schema@^7.0.15": version "7.0.15" @@ -3567,10 +3247,10 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.10.tgz#91f62905e8d23cbd66225312f239454a23bebfa0" integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q== -"@types/node@*", "@types/node@>= 8", "@types/node@>=10.0.0", "@types/node@^22.17.1": - version "22.17.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.17.1.tgz#484a755050497ebc3b37ff5adb7470f2e3ea5f5b" - integrity sha512-y3tBaz+rjspDTylNjAX37jEC3TETEFGNJL6uQDxwF9/8GLLIjW1rvVHlynyuUKMnMr1Roq8jOv3vkopBjC4/VA== +"@types/node@*", "@types/node@>= 8", "@types/node@>=10.0.0", "@types/node@^22.17.2": + version "22.17.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.17.2.tgz#47a93d6f4b79327da63af727e7c54e8cab8c4d33" + integrity sha512-gL6z5N9Jm9mhY+U2KXZpteb+09zyffliRkZyZOHODGATyC5B1Jt/7TzuuiLkFsSUMLbS1OLmlj/E+/3KF4Q/4w== dependencies: undici-types "~6.21.0" @@ -3713,79 +3393,79 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.0.tgz#c9afec1866ee1a6ea3d768b5f8e92201efbbba06" - integrity sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw== +"@typescript-eslint/eslint-plugin@8.39.1": + version "8.39.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.1.tgz#28dffcb5272d20afe250bfeec3173263db5528a0" + integrity sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.39.0" - "@typescript-eslint/type-utils" "8.39.0" - "@typescript-eslint/utils" "8.39.0" - "@typescript-eslint/visitor-keys" "8.39.0" + "@typescript-eslint/scope-manager" "8.39.1" + "@typescript-eslint/type-utils" "8.39.1" + "@typescript-eslint/utils" "8.39.1" + "@typescript-eslint/visitor-keys" "8.39.1" graphemer "^1.4.0" ignore "^7.0.0" natural-compare "^1.4.0" ts-api-utils "^2.1.0" -"@typescript-eslint/parser@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.39.0.tgz#c4b895d7a47f4cd5ee6ee77ea30e61d58b802008" - integrity sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg== +"@typescript-eslint/parser@8.39.1": + version "8.39.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.39.1.tgz#7f8f9ecfc7e172d67e42c366fa198e42324e5d50" + integrity sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg== dependencies: - "@typescript-eslint/scope-manager" "8.39.0" - "@typescript-eslint/types" "8.39.0" - "@typescript-eslint/typescript-estree" "8.39.0" - "@typescript-eslint/visitor-keys" "8.39.0" + "@typescript-eslint/scope-manager" "8.39.1" + "@typescript-eslint/types" "8.39.1" + "@typescript-eslint/typescript-estree" "8.39.1" + "@typescript-eslint/visitor-keys" "8.39.1" debug "^4.3.4" -"@typescript-eslint/project-service@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.39.0.tgz#71cb29c3f8139f99a905b8705127bffc2ae84759" - integrity sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew== +"@typescript-eslint/project-service@8.39.1": + version "8.39.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.39.1.tgz#63525878d488ebf27c485f295e83434a1398f52d" + integrity sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.39.0" - "@typescript-eslint/types" "^8.39.0" + "@typescript-eslint/tsconfig-utils" "^8.39.1" + "@typescript-eslint/types" "^8.39.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.39.0.tgz#ba4bf6d8257bbc172c298febf16bc22df4856570" - integrity sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A== +"@typescript-eslint/scope-manager@8.39.1": + version "8.39.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.39.1.tgz#1253fe3e1f2f33f08a3e438a05b5dd7faf9fbca6" + integrity sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw== dependencies: - "@typescript-eslint/types" "8.39.0" - "@typescript-eslint/visitor-keys" "8.39.0" + "@typescript-eslint/types" "8.39.1" + "@typescript-eslint/visitor-keys" "8.39.1" -"@typescript-eslint/tsconfig-utils@8.39.0", "@typescript-eslint/tsconfig-utils@^8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.0.tgz#b2e87fef41a3067c570533b722f6af47be213f13" - integrity sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ== +"@typescript-eslint/tsconfig-utils@8.39.1", "@typescript-eslint/tsconfig-utils@^8.39.1": + version "8.39.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.1.tgz#17f13b4ad481e7bec7c249ee1854078645b34b12" + integrity sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA== -"@typescript-eslint/type-utils@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.39.0.tgz#310ec781ae5e7bb0f5940bfd652573587f22786b" - integrity sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q== +"@typescript-eslint/type-utils@8.39.1": + version "8.39.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.39.1.tgz#642f9fb96173649e2928fea0375b1d74d31906c2" + integrity sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA== dependencies: - "@typescript-eslint/types" "8.39.0" - "@typescript-eslint/typescript-estree" "8.39.0" - "@typescript-eslint/utils" "8.39.0" + "@typescript-eslint/types" "8.39.1" + "@typescript-eslint/typescript-estree" "8.39.1" + "@typescript-eslint/utils" "8.39.1" debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@8.39.0", "@typescript-eslint/types@^8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.39.0.tgz#80f010b7169d434a91cd0529d70a528dbc9c99c6" - integrity sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg== +"@typescript-eslint/types@8.39.1", "@typescript-eslint/types@^8.39.1": + version "8.39.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.39.1.tgz#f0ab996c8ab2c3b046bbf86bb1990b03529869a1" + integrity sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw== -"@typescript-eslint/typescript-estree@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.0.tgz#b9477a5c47a0feceffe91adf553ad9a3cd4cb3d6" - integrity sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw== +"@typescript-eslint/typescript-estree@8.39.1": + version "8.39.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.1.tgz#8825d3ea7ea2144c577859ae489eec24ef7318a5" + integrity sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw== dependencies: - "@typescript-eslint/project-service" "8.39.0" - "@typescript-eslint/tsconfig-utils" "8.39.0" - "@typescript-eslint/types" "8.39.0" - "@typescript-eslint/visitor-keys" "8.39.0" + "@typescript-eslint/project-service" "8.39.1" + "@typescript-eslint/tsconfig-utils" "8.39.1" + "@typescript-eslint/types" "8.39.1" + "@typescript-eslint/visitor-keys" "8.39.1" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" @@ -3793,22 +3473,22 @@ semver "^7.6.0" ts-api-utils "^2.1.0" -"@typescript-eslint/utils@8.39.0", "@typescript-eslint/utils@^8.24.1": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.39.0.tgz#dfea42f3c7ec85f9f3e994ff0bba8f3b2f09e220" - integrity sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ== +"@typescript-eslint/utils@8.39.1", "@typescript-eslint/utils@^8.24.1": + version "8.39.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.39.1.tgz#58a834f89f93b786ada2cd14d77fa63c3c8f408b" + integrity sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg== dependencies: "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.39.0" - "@typescript-eslint/types" "8.39.0" - "@typescript-eslint/typescript-estree" "8.39.0" + "@typescript-eslint/scope-manager" "8.39.1" + "@typescript-eslint/types" "8.39.1" + "@typescript-eslint/typescript-estree" "8.39.1" -"@typescript-eslint/visitor-keys@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.0.tgz#5d619a6e810cdd3fd1913632719cbccab08bf875" - integrity sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA== +"@typescript-eslint/visitor-keys@8.39.1": + version "8.39.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.1.tgz#a467742a98f2fa3c03d7bed4979dc0db3850a77a" + integrity sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A== dependencies: - "@typescript-eslint/types" "8.39.0" + "@typescript-eslint/types" "8.39.1" eslint-visitor-keys "^4.2.1" "@vitest/coverage-v8@^3.2.4": @@ -5373,21 +5053,10 @@ caw@^2.0.1: tunnel-agent "^0.6.0" url-to-options "^1.0.1" -chai@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/chai/-/chai-5.2.0.tgz#1358ee106763624114addf84ab02697e411c9c05" - integrity sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw== - dependencies: - assertion-error "^2.0.1" - check-error "^2.1.1" - deep-eql "^5.0.1" - loupe "^3.1.0" - pathval "^2.0.0" - -chai@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/chai/-/chai-5.2.1.tgz#a9502462bdc79cf90b4a0953537a9908aa638b47" - integrity sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A== +chai@^5.2.0, chai@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-5.3.1.tgz#f9e9a7e03f93d69e24b78d30db253780e26deb44" + integrity sha512-48af6xm9gQK8rhIcOxWwdGzIervm8BVTin+yRp9HEvU20BtVZ2lBywlIJBzwaDtvo0FvjeL7QdCADoUoqIbV3A== dependencies: assertion-error "^2.0.1" check-error "^2.1.1" @@ -9261,10 +8930,10 @@ istanbul-lib-source-maps@^5.0.6: debug "^4.1.1" istanbul-lib-coverage "^3.0.0" -istanbul-reports@^3.0.2, istanbul-reports@^3.0.5, istanbul-reports@^3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== +istanbul-reports@^3.0.2, istanbul-reports@^3.0.5, istanbul-reports@^3.1.7, istanbul-reports@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93" + integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -10144,12 +9813,7 @@ loglevel@^1.6.0: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.2.tgz#c2e028d6c757720107df4e64508530db6621ba08" integrity sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg== -loupe@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.2.tgz#c86e0696804a02218f2206124c45d8b15291a240" - integrity sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg== - -loupe@^3.1.4: +loupe@^3.1.0, loupe@^3.1.4: version "3.1.4" resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.4.tgz#784a0060545cb38778ffb19ccde44d7870d5fdd9" integrity sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg== @@ -10662,6 +10326,11 @@ napi-build-utils@^1.0.1: resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== +napi-postinstall@^0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.3.3.tgz#93d045c6b576803ead126711d3093995198c6eb9" + integrity sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -10882,10 +10551,10 @@ nwsapi@^2.2.16: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.16.tgz#177760bba02c351df1d2644e220c31dfec8cdb43" integrity sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ== -nx@21.3.11: - version "21.3.11" - resolved "https://registry.yarnpkg.com/nx/-/nx-21.3.11.tgz#84abf2c24eb7a134d8c6c2d83e3ba1ff367de04d" - integrity sha512-nj2snZ3mHZnbHcoB3NUdxbch9L1sQKV1XccLs1B79fmI/N5oOgWgctm/bWoZH2UH5b4A8ZLAMTsC6YnSJGbcaw== +nx@21.4.0: + version "21.4.0" + resolved "https://registry.yarnpkg.com/nx/-/nx-21.4.0.tgz#6c2c3d27f4feafbd71e8406b21116ec98824df0a" + integrity sha512-BRymw8B8qs24RvqfroUVIRcxvMf1euONpi5+OMqvjZOSy5LTFTggrLwEg6GYIb1lj5kO53TTnZ/Wxj0m8tPKxQ== dependencies: "@napi-rs/wasm-runtime" "0.2.4" "@yarnpkg/lockfile" "^1.1.0" @@ -10923,16 +10592,16 @@ nx@21.3.11: yargs "^17.6.2" yargs-parser "21.1.1" optionalDependencies: - "@nx/nx-darwin-arm64" "21.3.11" - "@nx/nx-darwin-x64" "21.3.11" - "@nx/nx-freebsd-x64" "21.3.11" - "@nx/nx-linux-arm-gnueabihf" "21.3.11" - "@nx/nx-linux-arm64-gnu" "21.3.11" - "@nx/nx-linux-arm64-musl" "21.3.11" - "@nx/nx-linux-x64-gnu" "21.3.11" - "@nx/nx-linux-x64-musl" "21.3.11" - "@nx/nx-win32-arm64-msvc" "21.3.11" - "@nx/nx-win32-x64-msvc" "21.3.11" + "@nx/nx-darwin-arm64" "21.4.0" + "@nx/nx-darwin-x64" "21.4.0" + "@nx/nx-freebsd-x64" "21.4.0" + "@nx/nx-linux-arm-gnueabihf" "21.4.0" + "@nx/nx-linux-arm64-gnu" "21.4.0" + "@nx/nx-linux-arm64-musl" "21.4.0" + "@nx/nx-linux-x64-gnu" "21.4.0" + "@nx/nx-linux-x64-musl" "21.4.0" + "@nx/nx-win32-arm64-msvc" "21.4.0" + "@nx/nx-win32-x64-msvc" "21.4.0" object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" @@ -11131,22 +10800,32 @@ own-keys@^1.0.1: object-keys "^1.1.1" safe-push-apply "^1.0.0" -oxc-resolver@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/oxc-resolver/-/oxc-resolver-5.0.0.tgz#8aac10775e45f8656393bf9b90dda0f1b2f507cd" - integrity sha512-66fopyAqCN8Mx4tzNiBXWbk8asCSuxUWN62gwTc3yfRs7JfWhX/eVJCf+fUrfbNOdQVOWn+o8pAKllp76ysMXA== +oxc-resolver@^11.6.1: + version "11.6.1" + resolved "https://registry.yarnpkg.com/oxc-resolver/-/oxc-resolver-11.6.1.tgz#cc65b402ecca2870d0b35b5b241952c345694d28" + integrity sha512-WQgmxevT4cM5MZ9ioQnEwJiHpPzbvntV5nInGAKo9NQZzegcOonHvcVcnkYqld7bTG35UFHEKeF7VwwsmA3cZg== + dependencies: + napi-postinstall "^0.3.0" optionalDependencies: - "@oxc-resolver/binding-darwin-arm64" "5.0.0" - "@oxc-resolver/binding-darwin-x64" "5.0.0" - "@oxc-resolver/binding-freebsd-x64" "5.0.0" - "@oxc-resolver/binding-linux-arm-gnueabihf" "5.0.0" - "@oxc-resolver/binding-linux-arm64-gnu" "5.0.0" - "@oxc-resolver/binding-linux-arm64-musl" "5.0.0" - "@oxc-resolver/binding-linux-x64-gnu" "5.0.0" - "@oxc-resolver/binding-linux-x64-musl" "5.0.0" - "@oxc-resolver/binding-wasm32-wasi" "5.0.0" - "@oxc-resolver/binding-win32-arm64-msvc" "5.0.0" - "@oxc-resolver/binding-win32-x64-msvc" "5.0.0" + "@oxc-resolver/binding-android-arm-eabi" "11.6.1" + "@oxc-resolver/binding-android-arm64" "11.6.1" + "@oxc-resolver/binding-darwin-arm64" "11.6.1" + "@oxc-resolver/binding-darwin-x64" "11.6.1" + "@oxc-resolver/binding-freebsd-x64" "11.6.1" + "@oxc-resolver/binding-linux-arm-gnueabihf" "11.6.1" + "@oxc-resolver/binding-linux-arm-musleabihf" "11.6.1" + "@oxc-resolver/binding-linux-arm64-gnu" "11.6.1" + "@oxc-resolver/binding-linux-arm64-musl" "11.6.1" + "@oxc-resolver/binding-linux-ppc64-gnu" "11.6.1" + "@oxc-resolver/binding-linux-riscv64-gnu" "11.6.1" + "@oxc-resolver/binding-linux-riscv64-musl" "11.6.1" + "@oxc-resolver/binding-linux-s390x-gnu" "11.6.1" + "@oxc-resolver/binding-linux-x64-gnu" "11.6.1" + "@oxc-resolver/binding-linux-x64-musl" "11.6.1" + "@oxc-resolver/binding-wasm32-wasi" "11.6.1" + "@oxc-resolver/binding-win32-arm64-msvc" "11.6.1" + "@oxc-resolver/binding-win32-ia32-msvc" "11.6.1" + "@oxc-resolver/binding-win32-x64-msvc" "11.6.1" oxlint@^1.2.0: version "1.6.0" @@ -11559,7 +11238,7 @@ pgpass@1.x: dependencies: split2 "^4.1.0" -picocolors@^1.0.0, picocolors@^1.1.0, picocolors@^1.1.1: +picocolors@^1.1.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -11606,10 +11285,10 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== -pirates@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== +pirates@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== pkg-dir@4.2.0: version "4.2.0" @@ -12338,120 +12017,33 @@ rollup-plugin-serve@^3.0.0: mime "^4" opener "1" -rollup@^4.28.0: - version "4.40.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.40.0.tgz#13742a615f423ccba457554f006873d5a4de1920" - integrity sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w== - dependencies: - "@types/estree" "1.0.7" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.40.0" - "@rollup/rollup-android-arm64" "4.40.0" - "@rollup/rollup-darwin-arm64" "4.40.0" - "@rollup/rollup-darwin-x64" "4.40.0" - "@rollup/rollup-freebsd-arm64" "4.40.0" - "@rollup/rollup-freebsd-x64" "4.40.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.40.0" - "@rollup/rollup-linux-arm-musleabihf" "4.40.0" - "@rollup/rollup-linux-arm64-gnu" "4.40.0" - "@rollup/rollup-linux-arm64-musl" "4.40.0" - "@rollup/rollup-linux-loongarch64-gnu" "4.40.0" - "@rollup/rollup-linux-powerpc64le-gnu" "4.40.0" - "@rollup/rollup-linux-riscv64-gnu" "4.40.0" - "@rollup/rollup-linux-riscv64-musl" "4.40.0" - "@rollup/rollup-linux-s390x-gnu" "4.40.0" - "@rollup/rollup-linux-x64-gnu" "4.40.0" - "@rollup/rollup-linux-x64-musl" "4.40.0" - "@rollup/rollup-win32-arm64-msvc" "4.40.0" - "@rollup/rollup-win32-ia32-msvc" "4.40.0" - "@rollup/rollup-win32-x64-msvc" "4.40.0" - fsevents "~2.3.2" - -rollup@^4.4.0: - version "4.44.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.44.0.tgz#0e10b98339b306edad1e612f1e5590a79aef521c" - integrity sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA== - dependencies: - "@types/estree" "1.0.8" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.44.0" - "@rollup/rollup-android-arm64" "4.44.0" - "@rollup/rollup-darwin-arm64" "4.44.0" - "@rollup/rollup-darwin-x64" "4.44.0" - "@rollup/rollup-freebsd-arm64" "4.44.0" - "@rollup/rollup-freebsd-x64" "4.44.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.44.0" - "@rollup/rollup-linux-arm-musleabihf" "4.44.0" - "@rollup/rollup-linux-arm64-gnu" "4.44.0" - "@rollup/rollup-linux-arm64-musl" "4.44.0" - "@rollup/rollup-linux-loongarch64-gnu" "4.44.0" - "@rollup/rollup-linux-powerpc64le-gnu" "4.44.0" - "@rollup/rollup-linux-riscv64-gnu" "4.44.0" - "@rollup/rollup-linux-riscv64-musl" "4.44.0" - "@rollup/rollup-linux-s390x-gnu" "4.44.0" - "@rollup/rollup-linux-x64-gnu" "4.44.0" - "@rollup/rollup-linux-x64-musl" "4.44.0" - "@rollup/rollup-win32-arm64-msvc" "4.44.0" - "@rollup/rollup-win32-ia32-msvc" "4.44.0" - "@rollup/rollup-win32-x64-msvc" "4.44.0" - fsevents "~2.3.2" - -rollup@^4.40.0: - version "4.45.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.45.1.tgz#d0ef72a8d0a9210d832f9c3c5f3b6a2aa4b0ba64" - integrity sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw== - dependencies: - "@types/estree" "1.0.8" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.45.1" - "@rollup/rollup-android-arm64" "4.45.1" - "@rollup/rollup-darwin-arm64" "4.45.1" - "@rollup/rollup-darwin-x64" "4.45.1" - "@rollup/rollup-freebsd-arm64" "4.45.1" - "@rollup/rollup-freebsd-x64" "4.45.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.45.1" - "@rollup/rollup-linux-arm-musleabihf" "4.45.1" - "@rollup/rollup-linux-arm64-gnu" "4.45.1" - "@rollup/rollup-linux-arm64-musl" "4.45.1" - "@rollup/rollup-linux-loongarch64-gnu" "4.45.1" - "@rollup/rollup-linux-powerpc64le-gnu" "4.45.1" - "@rollup/rollup-linux-riscv64-gnu" "4.45.1" - "@rollup/rollup-linux-riscv64-musl" "4.45.1" - "@rollup/rollup-linux-s390x-gnu" "4.45.1" - "@rollup/rollup-linux-x64-gnu" "4.45.1" - "@rollup/rollup-linux-x64-musl" "4.45.1" - "@rollup/rollup-win32-arm64-msvc" "4.45.1" - "@rollup/rollup-win32-ia32-msvc" "4.45.1" - "@rollup/rollup-win32-x64-msvc" "4.45.1" - fsevents "~2.3.2" - -rollup@^4.46.2: - version "4.46.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.46.2.tgz#09b1a45d811e26d09bed63dc3ecfb6831c16ce32" - integrity sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg== +rollup@^4.28.0, rollup@^4.4.0, rollup@^4.40.0, rollup@^4.46.3: + version "4.46.3" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.46.3.tgz#ce207dcc18f18c1027c700d705f746df504436cb" + integrity sha512-RZn2XTjXb8t5g13f5YclGoilU/kwT696DIkY3sywjdZidNSi3+vseaQov7D7BZXVJCPv3pDWUN69C78GGbXsKw== dependencies: "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.46.2" - "@rollup/rollup-android-arm64" "4.46.2" - "@rollup/rollup-darwin-arm64" "4.46.2" - "@rollup/rollup-darwin-x64" "4.46.2" - "@rollup/rollup-freebsd-arm64" "4.46.2" - "@rollup/rollup-freebsd-x64" "4.46.2" - "@rollup/rollup-linux-arm-gnueabihf" "4.46.2" - "@rollup/rollup-linux-arm-musleabihf" "4.46.2" - "@rollup/rollup-linux-arm64-gnu" "4.46.2" - "@rollup/rollup-linux-arm64-musl" "4.46.2" - "@rollup/rollup-linux-loongarch64-gnu" "4.46.2" - "@rollup/rollup-linux-ppc64-gnu" "4.46.2" - "@rollup/rollup-linux-riscv64-gnu" "4.46.2" - "@rollup/rollup-linux-riscv64-musl" "4.46.2" - "@rollup/rollup-linux-s390x-gnu" "4.46.2" - "@rollup/rollup-linux-x64-gnu" "4.46.2" - "@rollup/rollup-linux-x64-musl" "4.46.2" - "@rollup/rollup-win32-arm64-msvc" "4.46.2" - "@rollup/rollup-win32-ia32-msvc" "4.46.2" - "@rollup/rollup-win32-x64-msvc" "4.46.2" + "@rollup/rollup-android-arm-eabi" "4.46.3" + "@rollup/rollup-android-arm64" "4.46.3" + "@rollup/rollup-darwin-arm64" "4.46.3" + "@rollup/rollup-darwin-x64" "4.46.3" + "@rollup/rollup-freebsd-arm64" "4.46.3" + "@rollup/rollup-freebsd-x64" "4.46.3" + "@rollup/rollup-linux-arm-gnueabihf" "4.46.3" + "@rollup/rollup-linux-arm-musleabihf" "4.46.3" + "@rollup/rollup-linux-arm64-gnu" "4.46.3" + "@rollup/rollup-linux-arm64-musl" "4.46.3" + "@rollup/rollup-linux-loongarch64-gnu" "4.46.3" + "@rollup/rollup-linux-ppc64-gnu" "4.46.3" + "@rollup/rollup-linux-riscv64-gnu" "4.46.3" + "@rollup/rollup-linux-riscv64-musl" "4.46.3" + "@rollup/rollup-linux-s390x-gnu" "4.46.3" + "@rollup/rollup-linux-x64-gnu" "4.46.3" + "@rollup/rollup-linux-x64-musl" "4.46.3" + "@rollup/rollup-win32-arm64-msvc" "4.46.3" + "@rollup/rollup-win32-ia32-msvc" "4.46.3" + "@rollup/rollup-win32-x64-msvc" "4.46.3" fsevents "~2.3.2" router@^2.2.0: @@ -13801,7 +13393,7 @@ tsconfig-paths@^4.1.2: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.3, tslib@^2.8.0, tslib@^2.8.1: +tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.8.0, tslib@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -13947,15 +13539,15 @@ typed-query-selector@^2.12.0: resolved "https://registry.yarnpkg.com/typed-query-selector/-/typed-query-selector-2.12.0.tgz#92b65dbc0a42655fccf4aeb1a08b1dddce8af5f2" integrity sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg== -typescript-eslint@8.39.0: - version "8.39.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.39.0.tgz#b19c1a925cf8566831ae3875d2881ee2349808a5" - integrity sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q== +typescript-eslint@8.39.1: + version "8.39.1" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.39.1.tgz#13075a676522041cbe421d98fb504ef535a6e4b3" + integrity sha512-GDUv6/NDYngUlNvwaHM1RamYftxf782IyEDbdj3SeaIHHv8fNQVRC++fITT7kUJV/5rIA/tkoRSSskt6osEfqg== dependencies: - "@typescript-eslint/eslint-plugin" "8.39.0" - "@typescript-eslint/parser" "8.39.0" - "@typescript-eslint/typescript-estree" "8.39.0" - "@typescript-eslint/utils" "8.39.0" + "@typescript-eslint/eslint-plugin" "8.39.1" + "@typescript-eslint/parser" "8.39.1" + "@typescript-eslint/typescript-estree" "8.39.1" + "@typescript-eslint/utils" "8.39.1" typescript@5.8.2: version "5.8.2" From 95047c158ef86b175a2caff4679f7e6c8e334606 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Aug 2025 16:31:36 +0000 Subject: [PATCH 02/35] build(deps-dev): bump chai from 5.3.1 to 6.0.1 (#5466) Bumps [chai](https://github.com/chaijs/chai) from 5.3.1 to 6.0.1. - [Release notes](https://github.com/chaijs/chai/releases) - [Changelog](https://github.com/chaijs/chai/blob/main/History.md) - [Commits](https://github.com/chaijs/chai/compare/v5.3.1...v6.0.1) --- updated-dependencies: - dependency-name: chai dependency-version: 6.0.1 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/@lwc/integration-not-karma/package.json | 2 +- yarn.lock | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/@lwc/integration-not-karma/package.json b/packages/@lwc/integration-not-karma/package.json index 35e3b3973a..697c97cbf4 100644 --- a/packages/@lwc/integration-not-karma/package.json +++ b/packages/@lwc/integration-not-karma/package.json @@ -17,7 +17,7 @@ "@types/jasmine": "^5.1.9", "@web/dev-server-rollup": "^0.6.4", "@web/test-runner": "^0.20.2", - "chai": "^5.3.1" + "chai": "^6.0.1" }, "volta": { "extends": "../../../package.json" diff --git a/yarn.lock b/yarn.lock index 8412f3adcc..a81afde3c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5053,7 +5053,7 @@ caw@^2.0.1: tunnel-agent "^0.6.0" url-to-options "^1.0.1" -chai@^5.2.0, chai@^5.3.1: +chai@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/chai/-/chai-5.3.1.tgz#f9e9a7e03f93d69e24b78d30db253780e26deb44" integrity sha512-48af6xm9gQK8rhIcOxWwdGzIervm8BVTin+yRp9HEvU20BtVZ2lBywlIJBzwaDtvo0FvjeL7QdCADoUoqIbV3A== @@ -5064,6 +5064,11 @@ chai@^5.2.0, chai@^5.3.1: loupe "^3.1.0" pathval "^2.0.0" +chai@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-6.0.1.tgz#88c2b4682fb56050647e222d2cf9d6772f2607b3" + integrity sha512-/JOoU2//6p5vCXh00FpNgtlw0LjvhGttaWc+y7wpW9yjBm3ys0dI8tSKZxIOgNruz5J0RleccatSIC3uxEZP0g== + chalk-template@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/chalk-template/-/chalk-template-0.4.0.tgz#692c034d0ed62436b9062c1707fadcd0f753204b" From ef9827a6f700cbd20d254ecb993281c2bc835cff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Aug 2025 16:46:39 +0000 Subject: [PATCH 03/35] build(deps-dev): bump the theoretically-non-breaking group with 9 updates (#5465) Bumps the theoretically-non-breaking group with 9 updates: | Package | From | To | | --- | --- | --- | | [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) | `9.33.0` | `9.34.0` | | [@nx/js](https://github.com/nrwl/nx/tree/HEAD/packages/js) | `21.4.0` | `21.4.1` | | [@swc/core](https://github.com/swc-project/swc) | `1.13.3` | `1.13.5` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `22.17.2` | `22.18.0` | | [eslint](https://github.com/eslint/eslint) | `9.33.0` | `9.34.0` | | [magic-string](https://github.com/rich-harris/magic-string) | `0.30.17` | `0.30.18` | | [nx](https://github.com/nrwl/nx/tree/HEAD/packages/nx) | `21.4.0` | `21.4.1` | | [rollup](https://github.com/rollup/rollup) | `4.46.3` | `4.48.1` | | [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.39.1` | `8.40.0` | Updates `@eslint/js` from 9.33.0 to 9.34.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/commits/v9.34.0/packages/js) Updates `@nx/js` from 21.4.0 to 21.4.1 - [Release notes](https://github.com/nrwl/nx/releases) - [Commits](https://github.com/nrwl/nx/commits/21.4.1/packages/js) Updates `@swc/core` from 1.13.3 to 1.13.5 - [Release notes](https://github.com/swc-project/swc/releases) - [Changelog](https://github.com/swc-project/swc/blob/main/CHANGELOG.md) - [Commits](https://github.com/swc-project/swc/compare/v1.13.3...v1.13.5) Updates `@types/node` from 22.17.2 to 22.18.0 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `eslint` from 9.33.0 to 9.34.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v9.33.0...v9.34.0) Updates `magic-string` from 0.30.17 to 0.30.18 - [Changelog](https://github.com/Rich-Harris/magic-string/blob/master/CHANGELOG.md) - [Commits](https://github.com/rich-harris/magic-string/compare/v0.30.17...v0.30.18) Updates `nx` from 21.4.0 to 21.4.1 - [Release notes](https://github.com/nrwl/nx/releases) - [Commits](https://github.com/nrwl/nx/commits/21.4.1/packages/nx) Updates `rollup` from 4.46.3 to 4.48.1 - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v4.46.3...v4.48.1) Updates `typescript-eslint` from 8.39.1 to 8.40.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.40.0/packages/typescript-eslint) --- updated-dependencies: - dependency-name: "@eslint/js" dependency-version: 9.34.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: theoretically-non-breaking - dependency-name: "@nx/js" dependency-version: 21.4.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: "@swc/core" dependency-version: 1.13.5 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: "@types/node" dependency-version: 22.18.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: theoretically-non-breaking - dependency-name: eslint dependency-version: 9.34.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: theoretically-non-breaking - dependency-name: magic-string dependency-version: 0.30.18 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: nx dependency-version: 21.4.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: rollup dependency-version: 4.48.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: theoretically-non-breaking - dependency-name: typescript-eslint dependency-version: 8.40.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: theoretically-non-breaking ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Will Harney <62956339+wjhsf@users.noreply.github.com> --- package.json | 18 +- packages/@lwc/integration-types/package.json | 2 +- playground/package.json | 2 +- yarn.lock | 735 ++++++++++--------- 4 files changed, 379 insertions(+), 378 deletions(-) diff --git a/package.json b/package.json index 6bdba9d46a..a75b7550e1 100644 --- a/package.json +++ b/package.json @@ -38,26 +38,26 @@ }, "devDependencies": { "@commitlint/cli": "^19.8.1", - "@eslint/js": "9.33.0", + "@eslint/js": "9.34.0", "@lwc/eslint-plugin-lwc-internal": "link:./scripts/eslint-plugin", "@lwc/test-utils-lwc-internals": "link:./scripts/test-utils", - "@nx/js": "21.4.0", + "@nx/js": "21.4.1", "@rollup/plugin-commonjs": "^28.0.6", "@rollup/plugin-inject": "^5.0.5", "@rollup/plugin-node-resolve": "^16.0.1", "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-typescript": "^12.1.4", "@swc-node/register": "~1.11.1", - "@swc/core": "~1.13.3", + "@swc/core": "~1.13.5", "@swc/helpers": "~0.5.17", "@types/babel__core": "^7.20.5", - "@types/node": "^22.17.2", + "@types/node": "^22.18.0", "@vitest/coverage-v8": "^3.2.4", "@vitest/eslint-plugin": "^1.3.4", "@vitest/ui": "^3.2.4", "bytes": "^3.1.2", "es-module-lexer": "^1.7.0", - "eslint": "9.33.0", + "eslint": "9.34.0", "eslint-config-flat-gitignore": "^2.1.0", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.32.0", @@ -67,14 +67,14 @@ "isbinaryfile": "^5.0.4", "jsdom": "^26.1.0", "lint-staged": "^16.1.5", - "magic-string": "^0.30.17", - "nx": "21.4.0", + "magic-string": "^0.30.18", + "nx": "21.4.1", "prettier": "^3.6.2", - "rollup": "^4.46.3", + "rollup": "^4.48.1", "terser": "^5.43.1", "tslib": "^2.8.1", "typescript": "5.8.2", - "typescript-eslint": "8.39.1", + "typescript-eslint": "8.40.0", "vitest": "^3.2.4" }, "lint-staged": { diff --git a/packages/@lwc/integration-types/package.json b/packages/@lwc/integration-types/package.json index 07cfb0c316..8488d0f46c 100644 --- a/packages/@lwc/integration-types/package.json +++ b/packages/@lwc/integration-types/package.json @@ -15,7 +15,7 @@ "devDependencies": { "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-typescript": "^12.1.4", - "rollup": "^4.46.3", + "rollup": "^4.48.1", "rollup-plugin-livereload": "^2.0.5", "rollup-plugin-serve": "^3.0.0" } diff --git a/playground/package.json b/playground/package.json index ec76ff701d..bca7c39af6 100644 --- a/playground/package.json +++ b/playground/package.json @@ -13,7 +13,7 @@ "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-typescript": "^12.1.4", "lwc": "8.21.2", - "rollup": "^4.46.3", + "rollup": "^4.48.1", "rollup-plugin-livereload": "^2.0.5", "rollup-plugin-serve": "^3.0.0", "tslib": "^2.8.1" diff --git a/yarn.lock b/yarn.lock index a81afde3c0..61a2db0cfe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1755,10 +1755,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.33.0": - version "9.33.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.33.0.tgz#475c92fdddab59b8b8cab960e3de2564a44bf368" - integrity sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A== +"@eslint/js@9.34.0": + version "9.34.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.34.0.tgz#fc423168b9d10e08dea9088d083788ec6442996b" + integrity sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw== "@eslint/object-schema@^2.1.6": version "2.1.6" @@ -2066,10 +2066,10 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" @@ -2168,25 +2168,25 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@nx/devkit@21.4.0": - version "21.4.0" - resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-21.4.0.tgz#f85cd8f9ad91782f0630daf6c8872b3627c76f5f" - integrity sha512-9dvUq94ypIeAQ9cE8YVMnDvysC2nN50PFxy7yQDHhCT65T5YpF2tSX6IYaWuFbtTELJOPtQwhJNd31oBQdRsQg== +"@nx/devkit@21.4.1": + version "21.4.1" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-21.4.1.tgz#d648fed0d3c5991bc2bada58e0675318d2d653b3" + integrity sha512-rWgMNG2e0tSG5L3vffuMH/aRkn+i9vYHelWkgVAslGBOaqriEg1dCSL/W9I3Fd5lnucHy3DrG1f19uDjv7Dm0A== dependencies: ejs "^3.1.7" enquirer "~2.3.6" ignore "^5.0.4" minimatch "9.0.3" - nx "21.4.0" + nx "21.4.1" semver "^7.5.3" tmp "~0.2.1" tslib "^2.3.0" yargs-parser "21.1.1" -"@nx/js@21.4.0": - version "21.4.0" - resolved "https://registry.yarnpkg.com/@nx/js/-/js-21.4.0.tgz#de2a5380f13272fbb76577f547980861a86c5ba3" - integrity sha512-+df50N+7xqoXDmJ8IQxLgZ+2ylLy/5EAhLxPjz7rnigEJmBW2UcEApsV4tOmlKiICv5NaxM9X6sHFFrcmekzpw== +"@nx/js@21.4.1": + version "21.4.1" + resolved "https://registry.yarnpkg.com/@nx/js/-/js-21.4.1.tgz#4d3707b3a849329b28df368753ddc2462f434fce" + integrity sha512-VK3rK5122iNIirLlOyKL7bIG+ziPM9VjXFbIw9mUAcKwvgf8mLOnR42NbFFlR2BsgwQ3in9TQRTNVSNdvg9utQ== dependencies: "@babel/core" "^7.23.2" "@babel/plugin-proposal-decorators" "^7.22.7" @@ -2195,8 +2195,8 @@ "@babel/preset-env" "^7.23.2" "@babel/preset-typescript" "^7.22.5" "@babel/runtime" "^7.22.6" - "@nx/devkit" "21.4.0" - "@nx/workspace" "21.4.0" + "@nx/devkit" "21.4.1" + "@nx/workspace" "21.4.1" "@zkochan/js-yaml" "0.0.7" babel-plugin-const-enum "^1.0.1" babel-plugin-macros "^3.1.0" @@ -2218,67 +2218,68 @@ tinyglobby "^0.2.12" tslib "^2.3.0" -"@nx/nx-darwin-arm64@21.4.0": - version "21.4.0" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-21.4.0.tgz#11dd0dec0891d5d9972d2a02a746d44838bfa357" - integrity sha512-GDa/zycRzRA3jaaHNOBJGKoUFyylcWIv8ANf0OSdj4D92coSn8W1I2F95k9HSoACY4nLLp6hh9F9dLAaCw0GjQ== - -"@nx/nx-darwin-x64@21.4.0": - version "21.4.0" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-21.4.0.tgz#46aa779882dce374275a9d980494f33dea369861" - integrity sha512-MNE5Dr7E2eckapk9P/kMtBYZsUmPlnhAYphGTqn3cE8kbe4DdoNB+QPkXK13IgYq3isSyRu5GLyPPxgqz+E2iw== - -"@nx/nx-freebsd-x64@21.4.0": - version "21.4.0" - resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-21.4.0.tgz#643cb67aa4ef99d2d0bfdebb675d0f1046a75204" - integrity sha512-2cMcAEqFsBXU8PoL0X7HWSoOhYchOcQ9pQ3W+TJ/r7FV9uwavwKQxzNXfK95Bx33T6D4AY0/vCAeOpaqFFrt0A== - -"@nx/nx-linux-arm-gnueabihf@21.4.0": - version "21.4.0" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-21.4.0.tgz#c61616866da03b1308509d4f0b39cc780761e25e" - integrity sha512-zoc7hBcTS2fmBdbhWCGwlDaTZA7+w/Gb7f6GcAUl4NOx1gT99nuFrQ8XtrmTkIq/YzOhVok/4K82O3CHV7N4qw== - -"@nx/nx-linux-arm64-gnu@21.4.0": - version "21.4.0" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-21.4.0.tgz#c9db1485a2af39a8182771b93983f5f8df8b2d05" - integrity sha512-IgHuZyPoAXFYKodjpgb47Dtec6eg1FKKWyZyybn4RvPfp42DlofMASNjUZtjDOilK0vq5FWNOu0C8F3jeGSjqA== - -"@nx/nx-linux-arm64-musl@21.4.0": - version "21.4.0" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-21.4.0.tgz#014d7dc78e27ca288d63c2c5500d432c740ece99" - integrity sha512-Q4RE4rXiH0n+KO71l2V6b5U8sVX24p+81BK0Hi93HgR7WSSMtikTZ3RO8JO3zCIRSJxbjyS8xNiw7F2W3OzmPQ== - -"@nx/nx-linux-x64-gnu@21.4.0": - version "21.4.0" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-21.4.0.tgz#1d74988c7bfea13402bc7759dd60b689bebe6f0e" - integrity sha512-xdKpl0SI+ILqzwd2TAuSH6tA5WHoYRhdbBO3J8NvLga/3b8NxdEN/vLb2FzfsWMu81O0IOJ6pMxGE7N6zps9sg== - -"@nx/nx-linux-x64-musl@21.4.0": - version "21.4.0" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-21.4.0.tgz#d26ceab413a3649ece68a08bf39c217a91627379" - integrity sha512-p0Enow79yrdvF3djXohQx8fxp86f8LpQxD0ec4Y0VGT+3xQWSVsnehhiYkPQp3doEj2u/rBJjop6ITfE/Z09Sw== - -"@nx/nx-win32-arm64-msvc@21.4.0": - version "21.4.0" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-21.4.0.tgz#2b7c9f2261ac75512edd0f43d4b4da05ea02637f" - integrity sha512-nrl89vb/0k8h04hhakzU57cs/dDl9K8xncKBsKKbIDxgd8gRO/KYzEEU/H+QE/jDB/vavm3Q7uxmUpJ5ysIitw== - -"@nx/nx-win32-x64-msvc@21.4.0": - version "21.4.0" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-21.4.0.tgz#25812a35cfdad3b84cd4c63e12a0137fd7516f55" - integrity sha512-LaPLZjFy59+oIgZm0zSlhcMI8ZICAxEvm0A9VUexxeIj/Od6jmW9BV1tmIpQ0x1G8tN6sFGBt8hBxHNeLFfh1w== - -"@nx/workspace@21.4.0": - version "21.4.0" - resolved "https://registry.yarnpkg.com/@nx/workspace/-/workspace-21.4.0.tgz#56e5f8f735cb00804fdd072399cc75865fdd99b6" - integrity sha512-C39fOy9PYp7xvGdRdUvNDJQS2zN/96oS+KzOZSCp8ZyZosRSsR2qaQWLI0zds0K6T3jy21Rh5AzyztDuQrK8Jg== - dependencies: - "@nx/devkit" "21.4.0" +"@nx/nx-darwin-arm64@21.4.1": + version "21.4.1" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-21.4.1.tgz#9070a5de05175ba9bc762d20f400b6252be47f08" + integrity sha512-9BbkQnxGEDNX2ESbW4Zdrq1i09y6HOOgTuGbMJuy4e8F8rU/motMUqOpwmFgLHkLgPNZiOC2VXht3or/kQcpOg== + +"@nx/nx-darwin-x64@21.4.1": + version "21.4.1" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-21.4.1.tgz#2cc67323af411f7318f3435d13a67787610ebca2" + integrity sha512-dnkmap1kc6aLV8CW1ihjsieZyaDDjlIB5QA2reTCLNSdTV446K6Fh0naLdaoG4ZkF27zJA/qBOuAaLzRHFJp3g== + +"@nx/nx-freebsd-x64@21.4.1": + version "21.4.1" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-21.4.1.tgz#44e9aa3388cb9bde6130412bf0e36535ef73f7d5" + integrity sha512-RpxDBGOPeDqJjpbV7F3lO/w1aIKfLyG/BM0OpJfTgFVpUIl50kMj5M1m4W9A8kvYkfOD9pDbUaWszom7d57yjg== + +"@nx/nx-linux-arm-gnueabihf@21.4.1": + version "21.4.1" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-21.4.1.tgz#0ca33f1152825021ee5d5f88ab16a23a43df682a" + integrity sha512-2OyBoag2738XWmWK3ZLBuhaYb7XmzT3f8HzomggLDJoDhwDekjgRoNbTxogAAj6dlXSeuPjO81BSlIfXQcth3w== + +"@nx/nx-linux-arm64-gnu@21.4.1": + version "21.4.1" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-21.4.1.tgz#e84afd45f4b75a8ff9dcf7aed76cff85f6f1831a" + integrity sha512-2pg7/zjBDioUWJ3OY8Ixqy64eokKT5sh4iq1bk22bxOCf676aGrAu6khIxy4LBnPIdO0ZOK7KCJ7xOFP4phZqA== + +"@nx/nx-linux-arm64-musl@21.4.1": + version "21.4.1" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-21.4.1.tgz#948694bad52dc700271a960553802fd04ba5f9f9" + integrity sha512-whNxh12au/inQtkZju1ZfXSqDS0hCh/anzVCXfLYWFstdwv61XiRmFCSHeN0gRDthlncXFdgKoT1bGG5aMYLtA== + +"@nx/nx-linux-x64-gnu@21.4.1": + version "21.4.1" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-21.4.1.tgz#60662eb69b398caee84c9c7622a0fa76ef03d0a1" + integrity sha512-UHw57rzLio0AUDXV3l+xcxT3LjuXil7SHj+H8aYmXTpXktctQU2eYGOs5ATqJ1avVQRSejJugHF0i8oLErC28A== + +"@nx/nx-linux-x64-musl@21.4.1": + version "21.4.1" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-21.4.1.tgz#53ca32a09bbf28b1b86a2e894c68266e0c94f3c3" + integrity sha512-qqE2Gy/DwOLIyePjM7GLHp/nDLZJnxHmqTeCiTQCp/BdbmqjRkSUz5oL+Uua0SNXaTu5hjAfvjXAhSTgBwVO6g== + +"@nx/nx-win32-arm64-msvc@21.4.1": + version "21.4.1" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-21.4.1.tgz#9c76824098783fc4382726d2698711c8bbd16912" + integrity sha512-NtEzMiRrSm2DdL4ntoDdjeze8DBrfZvLtx3Dq6+XmOhwnigR6umfWfZ6jbluZpuSQcxzQNVifqirdaQKYaYwDQ== + +"@nx/nx-win32-x64-msvc@21.4.1": + version "21.4.1" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-21.4.1.tgz#9c2f21f8ee4d56f2b44337f88ba60916c080d961" + integrity sha512-gpG+Y4G/mxGrfkUls6IZEuuBxRaKLMSEoVFLMb9JyyaLEDusn+HJ1m90XsOedjNLBHGMFigsd/KCCsXfFn4njg== + +"@nx/workspace@21.4.1": + version "21.4.1" + resolved "https://registry.yarnpkg.com/@nx/workspace/-/workspace-21.4.1.tgz#da1d98def2ba2fff53ede4ef70503cb8cdcf9da3" + integrity sha512-3e33eTb1hRx6/i416Wc0mk/TPANxjx2Kz8ecnyqFFII5CM9tX7CPCwDF4O75N9mysI6PCKJ+Hc/1q76HZR4UgA== + dependencies: + "@nx/devkit" "21.4.1" "@zkochan/js-yaml" "0.0.7" chalk "^4.1.0" enquirer "~2.3.6" - nx "21.4.0" + nx "21.4.1" picomatch "4.0.2" + semver "^7.6.3" tslib "^2.3.0" yargs-parser "21.1.1" @@ -2658,105 +2659,105 @@ estree-walker "^2.0.2" picomatch "^4.0.2" -"@rollup/rollup-android-arm-eabi@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.3.tgz#8d8afcc5a79a3f190c5f855facde6e0da6a5b7ea" - integrity sha512-UmTdvXnLlqQNOCJnyksjPs1G4GqXNGW1LrzCe8+8QoaLhhDeTXYBgJ3k6x61WIhlHX2U+VzEJ55TtIjR/HTySA== - -"@rollup/rollup-android-arm64@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.3.tgz#bed8ee4c2b31fd255fb91c2f52949dffef16ecf1" - integrity sha512-8NoxqLpXm7VyeI0ocidh335D6OKT0UJ6fHdnIxf3+6oOerZZc+O7r+UhvROji6OspyPm+rrIdb1gTXtVIqn+Sg== - -"@rollup/rollup-darwin-arm64@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.3.tgz#ee2a75deb8786b394c7f1777cc0c2ae2c3680469" - integrity sha512-csnNavqZVs1+7/hUKtgjMECsNG2cdB8F7XBHP6FfQjqhjF8rzMzb3SLyy/1BG7YSfQ+bG75Ph7DyedbUqwq1rA== - -"@rollup/rollup-darwin-x64@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.3.tgz#f5a01577c40830c423855492ecd8d3a7ae1b4836" - integrity sha512-r2MXNjbuYabSIX5yQqnT8SGSQ26XQc8fmp6UhlYJd95PZJkQD1u82fWP7HqvGUf33IsOC6qsiV+vcuD4SDP6iw== - -"@rollup/rollup-freebsd-arm64@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.3.tgz#d272eed9c14efc149bab316de364c04f236c544f" - integrity sha512-uluObTmgPJDuJh9xqxyr7MV61Imq+0IvVsAlWyvxAaBSNzCcmZlhfYcRhCdMaCsy46ccZa7vtDDripgs9Jkqsw== - -"@rollup/rollup-freebsd-x64@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.3.tgz#4c793f86e2dc64e725370daa2bec103f5869b5a6" - integrity sha512-AVJXEq9RVHQnejdbFvh1eWEoobohUYN3nqJIPI4mNTMpsyYN01VvcAClxflyk2HIxvLpRcRggpX1m9hkXkpC/A== - -"@rollup/rollup-linux-arm-gnueabihf@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.3.tgz#28da78d3709262f0b7ef0ba7e8e6f77c1b2f30a6" - integrity sha512-byyflM+huiwHlKi7VHLAYTKr67X199+V+mt1iRgJenAI594vcmGGddWlu6eHujmcdl6TqSNnvqaXJqZdnEWRGA== - -"@rollup/rollup-linux-arm-musleabihf@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.3.tgz#7e3309e6519eca1459038761aad44863e86fc497" - integrity sha512-aLm3NMIjr4Y9LklrH5cu7yybBqoVCdr4Nvnm8WB7PKCn34fMCGypVNpGK0JQWdPAzR/FnoEoFtlRqZbBBLhVoQ== - -"@rollup/rollup-linux-arm64-gnu@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.3.tgz#bc18efe81022baac97566cc0ace04b359eb7cd16" - integrity sha512-VtilE6eznJRDIoFOzaagQodUksTEfLIsvXymS+UdJiSXrPW7Ai+WG4uapAc3F7Hgs791TwdGh4xyOzbuzIZrnw== - -"@rollup/rollup-linux-arm64-musl@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.3.tgz#3ac849b6c42591014b0cb8e25c9ba1ace8fe19ec" - integrity sha512-dG3JuS6+cRAL0GQ925Vppafi0qwZnkHdPeuZIxIPXqkCLP02l7ka+OCyBoDEv8S+nKHxfjvjW4OZ7hTdHkx8/w== - -"@rollup/rollup-linux-loongarch64-gnu@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.3.tgz#10260ca0c3682c2904b04bb907163aca8bc5adef" - integrity sha512-iU8DxnxEKJptf8Vcx4XvAUdpkZfaz0KWfRrnIRrOndL0SvzEte+MTM7nDH4A2Now4FvTZ01yFAgj6TX/mZl8hQ== - -"@rollup/rollup-linux-ppc64-gnu@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.3.tgz#36b002a84c04f2e18093f563896c95a6e687f28f" - integrity sha512-VrQZp9tkk0yozJoQvQcqlWiqaPnLM6uY1qPYXvukKePb0fqaiQtOdMJSxNFUZFsGw5oA5vvVokjHrx8a9Qsz2A== - -"@rollup/rollup-linux-riscv64-gnu@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.3.tgz#ff1b3708624fc8b912e5341431751977b78be273" - integrity sha512-uf2eucWSUb+M7b0poZ/08LsbcRgaDYL8NCGjUeFMwCWFwOuFcZ8D9ayPl25P3pl+D2FH45EbHdfyUesQ2Lt9wA== - -"@rollup/rollup-linux-riscv64-musl@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.3.tgz#ab6f7ef69cdf812eccb318021a8f5c221bd0c048" - integrity sha512-7tnUcDvN8DHm/9ra+/nF7lLzYHDeODKKKrh6JmZejbh1FnCNZS8zMkZY5J4sEipy2OW1d1Ncc4gNHUd0DLqkSg== - -"@rollup/rollup-linux-s390x-gnu@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.3.tgz#60527b48dd84814fa5092a2eef1ac90e2b4bf825" - integrity sha512-MUpAOallJim8CsJK+4Lc9tQzlfPbHxWDrGXZm2z6biaadNpvh3a5ewcdat478W+tXDoUiHwErX/dOql7ETcLqg== - -"@rollup/rollup-linux-x64-gnu@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.3.tgz#c95698199820782b7420f5472e5d36b681728274" - integrity sha512-F42IgZI4JicE2vM2PWCe0N5mR5vR0gIdORPqhGQ32/u1S1v3kLtbZ0C/mi9FFk7C5T0PgdeyWEPajPjaUpyoKg== - -"@rollup/rollup-linux-x64-musl@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.3.tgz#226eb081be8d6698a580022448197b01cb4193a2" - integrity sha512-oLc+JrwwvbimJUInzx56Q3ujL3Kkhxehg7O1gWAYzm8hImCd5ld1F2Gry5YDjR21MNb5WCKhC9hXgU7rRlyegQ== - -"@rollup/rollup-win32-arm64-msvc@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.3.tgz#e900bd51cfc20af2a1c828d999bb49da1bd497eb" - integrity sha512-lOrQ+BVRstruD1fkWg9yjmumhowR0oLAAzavB7yFSaGltY8klttmZtCLvOXCmGE9mLIn8IBV/IFrQOWz5xbFPg== - -"@rollup/rollup-win32-ia32-msvc@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.3.tgz#94652ba771a90bf2558c0a6c553857148d7ff8f4" - integrity sha512-vvrVKPRS4GduGR7VMH8EylCBqsDcw6U+/0nPDuIjXQRbHJc6xOBj+frx8ksfZAh6+Fptw5wHrN7etlMmQnPQVg== - -"@rollup/rollup-win32-x64-msvc@4.46.3": - version "4.46.3" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.3.tgz#3d9ed4f8b9f2be7500565515d863c409eaceeb70" - integrity sha512-fi3cPxCnu3ZeM3EwKZPgXbWoGzm2XHgB/WShKI81uj8wG0+laobmqy5wbgEwzstlbLu4MyO8C19FyhhWseYKNQ== +"@rollup/rollup-android-arm-eabi@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.48.1.tgz#13cccb90969f7ca3d1354129c859a3b05e90beed" + integrity sha512-rGmb8qoG/zdmKoYELCBwu7vt+9HxZ7Koos3pD0+sH5fR3u3Wb/jGcpnqxcnWsPEKDUyzeLSqksN8LJtgXjqBYw== + +"@rollup/rollup-android-arm64@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.48.1.tgz#0d01925255bb27b56edd095ba1764c3f91f28048" + integrity sha512-4e9WtTxrk3gu1DFE+imNJr4WsL13nWbD/Y6wQcyku5qadlKHY3OQ3LJ/INrrjngv2BJIHnIzbqMk1GTAC2P8yQ== + +"@rollup/rollup-darwin-arm64@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.48.1.tgz#5b11bca1da78d68f26aa98754cecd1887b683689" + integrity sha512-+XjmyChHfc4TSs6WUQGmVf7Hkg8ferMAE2aNYYWjiLzAS/T62uOsdfnqv+GHRjq7rKRnYh4mwWb4Hz7h/alp8A== + +"@rollup/rollup-darwin-x64@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.48.1.tgz#00039989c4cd27ead349c313dc5562c3897c0524" + integrity sha512-upGEY7Ftw8M6BAJyGwnwMw91rSqXTcOKZnnveKrVWsMTF8/k5mleKSuh7D4v4IV1pLxKAk3Tbs0Lo9qYmii5mQ== + +"@rollup/rollup-freebsd-arm64@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.48.1.tgz#1e5aca23d8171313f408759c71342bbee7889f22" + integrity sha512-P9ViWakdoynYFUOZhqq97vBrhuvRLAbN/p2tAVJvhLb8SvN7rbBnJQcBu8e/rQts42pXGLVhfsAP0k9KXWa3nQ== + +"@rollup/rollup-freebsd-x64@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.48.1.tgz#04af010d99ccba84db10d4498cadaac8529ee738" + integrity sha512-VLKIwIpnBya5/saccM8JshpbxfyJt0Dsli0PjXozHwbSVaHTvWXJH1bbCwPXxnMzU4zVEfgD1HpW3VQHomi2AQ== + +"@rollup/rollup-linux-arm-gnueabihf@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.48.1.tgz#67747af83a2dd092144d643caf20b0d1eb817681" + integrity sha512-3zEuZsXfKaw8n/yF7t8N6NNdhyFw3s8xJTqjbTDXlipwrEHo4GtIKcMJr5Ed29leLpB9AugtAQpAHW0jvtKKaQ== + +"@rollup/rollup-linux-arm-musleabihf@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.48.1.tgz#b4bed820cfc5efec00a13190e3d53c0b5240f3b1" + integrity sha512-leo9tOIlKrcBmmEypzunV/2w946JeLbTdDlwEZ7OnnsUyelZ72NMnT4B2vsikSgwQifjnJUbdXzuW4ToN1wV+Q== + +"@rollup/rollup-linux-arm64-gnu@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.48.1.tgz#6b4a7af7e53e7d95c8c1975945d8f8dc8f6d74a9" + integrity sha512-Vy/WS4z4jEyvnJm+CnPfExIv5sSKqZrUr98h03hpAMbE2aI0aD2wvK6GiSe8Gx2wGp3eD81cYDpLLBqNb2ydwQ== + +"@rollup/rollup-linux-arm64-musl@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.48.1.tgz#dd08c8174cfb95d4fa90663dd6be8db27039ad51" + integrity sha512-x5Kzn7XTwIssU9UYqWDB9VpLpfHYuXw5c6bJr4Mzv9kIv242vmJHbI5PJJEnmBYitUIfoMCODDhR7KoZLot2VQ== + +"@rollup/rollup-linux-loongarch64-gnu@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.48.1.tgz#997248c983d2272d1b810e5817cc3c885ebde5ff" + integrity sha512-yzCaBbwkkWt/EcgJOKDUdUpMHjhiZT/eDktOPWvSRpqrVE04p0Nd6EGV4/g7MARXXeOqstflqsKuXVM3H9wOIQ== + +"@rollup/rollup-linux-ppc64-gnu@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.48.1.tgz#57d020583a314741d17b653419d1dbc3fe99bc52" + integrity sha512-UK0WzWUjMAJccHIeOpPhPcKBqax7QFg47hwZTp6kiMhQHeOYJeaMwzeRZe1q5IiTKsaLnHu9s6toSYVUlZ2QtQ== + +"@rollup/rollup-linux-riscv64-gnu@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.48.1.tgz#bbd381e5f99658de9baa0193b89e286767c6e029" + integrity sha512-3NADEIlt+aCdCbWVZ7D3tBjBX1lHpXxcvrLt/kdXTiBrOds8APTdtk2yRL2GgmnSVeX4YS1JIf0imFujg78vpw== + +"@rollup/rollup-linux-riscv64-musl@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.48.1.tgz#2866abbea1e702246900414f878203fea350ccee" + integrity sha512-euuwm/QTXAMOcyiFCcrx0/S2jGvFlKJ2Iro8rsmYL53dlblp3LkUQVFzEidHhvIPPvcIsxDhl2wkBE+I6YVGzA== + +"@rollup/rollup-linux-s390x-gnu@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.48.1.tgz#02f6a1b0f207bf9b6c8f76fca3bd394ad1a5e800" + integrity sha512-w8mULUjmPdWLJgmTYJx/W6Qhln1a+yqvgwmGXcQl2vFBkWsKGUBRbtLRuKJUln8Uaimf07zgJNxOhHOvjSQmBQ== + +"@rollup/rollup-linux-x64-gnu@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.48.1.tgz#867a70767a3e45c1a49b26310548e7861f980016" + integrity sha512-90taWXCWxTbClWuMZD0DKYohY1EovA+W5iytpE89oUPmT5O1HFdf8cuuVIylE6vCbrGdIGv85lVRzTcpTRZ+kA== + +"@rollup/rollup-linux-x64-musl@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.48.1.tgz#4b676c79d85c3ae58e706d44d4be3bc4eb6315cd" + integrity sha512-2Gu29SkFh1FfTRuN1GR1afMuND2GKzlORQUP3mNMJbqdndOg7gNsa81JnORctazHRokiDzQ5+MLE5XYmZW5VWg== + +"@rollup/rollup-win32-arm64-msvc@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.48.1.tgz#0106a573d0c7b82e95c6f57894b65f11bc0c7873" + integrity sha512-6kQFR1WuAO50bxkIlAVeIYsz3RUx+xymwhTo9j94dJ+kmHe9ly7muH23sdfWduD0BA8pD9/yhonUvAjxGh34jQ== + +"@rollup/rollup-win32-ia32-msvc@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.48.1.tgz#351eee360c21415c1efb01d402f53c2a1f5f1a53" + integrity sha512-RUyZZ/mga88lMI3RlXFs4WQ7n3VyU07sPXmMG7/C1NOi8qisUg57Y7LRarqoGoAiopmGmChUhSwfpvQ3H5iGSQ== + +"@rollup/rollup-win32-x64-msvc@4.48.1": + version "4.48.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.48.1.tgz#6821b48385af21ba55c7a5f9f64d19f38ea26014" + integrity sha512-8a/caCUN4vkTChxkaIJcMtwIVcBhi4X2PQRoT+yCK3qRYaZ7cURrmJFL5Ux9H9RaMIXj9RuihckdmkBX3zZsgg== "@rtsao/scc@^1.1.0": version "1.1.0" @@ -2829,74 +2830,74 @@ source-map-support "^0.5.21" tslib "^2.8.1" -"@swc/core-darwin-arm64@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.3.tgz#aaab6af81f255bdc9d3bf1d8d38457236cab1a02" - integrity sha512-ux0Ws4pSpBTqbDS9GlVP354MekB1DwYlbxXU3VhnDr4GBcCOimpocx62x7cFJkSpEBF8bmX8+/TTCGKh4PbyXw== - -"@swc/core-darwin-x64@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.13.3.tgz#2f65063a9ffb169eec810d2d063d93d21b8ec593" - integrity sha512-p0X6yhxmNUOMZrbeZ3ZNsPige8lSlSe1llllXvpCLkKKxN/k5vZt1sULoq6Nj4eQ7KeHQVm81/+AwKZyf/e0TA== - -"@swc/core-linux-arm-gnueabihf@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.3.tgz#1e4823f031f8ed8d77b0ea8ed70130cda2da6f1e" - integrity sha512-OmDoiexL2fVWvQTCtoh0xHMyEkZweQAlh4dRyvl8ugqIPEVARSYtaj55TBMUJIP44mSUOJ5tytjzhn2KFxFcBA== - -"@swc/core-linux-arm64-gnu@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.3.tgz#1a82f884e9a73c5fb80a94ec67ee98e255f93cdd" - integrity sha512-STfKku3QfnuUj6k3g9ld4vwhtgCGYIFQmsGPPgT9MK/dI3Lwnpe5Gs5t1inoUIoGNP8sIOLlBB4HV4MmBjQuhw== - -"@swc/core-linux-arm64-musl@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.3.tgz#f556489bec2451b8a3f28239e115a9480421c008" - integrity sha512-bc+CXYlFc1t8pv9yZJGus372ldzOVscBl7encUBlU1m/Sig0+NDJLz6cXXRcFyl6ABNOApWeR4Yl7iUWx6C8og== - -"@swc/core-linux-x64-gnu@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.3.tgz#29e78da291a6ac800e807771a40f6a41d18f0ead" - integrity sha512-dFXoa0TEhohrKcxn/54YKs1iwNeW6tUkHJgXW33H381SvjKFUV53WR231jh1sWVJETjA3vsAwxKwR23s7UCmUA== - -"@swc/core-linux-x64-musl@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.3.tgz#5f2b0639f54f89468ad2e464ba6b45ce19adeca2" - integrity sha512-ieyjisLB+ldexiE/yD8uomaZuZIbTc8tjquYln9Quh5ykOBY7LpJJYBWvWtm1g3pHv6AXlBI8Jay7Fffb6aLfA== - -"@swc/core-win32-arm64-msvc@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.3.tgz#911185c11158b29a8884aea7036115a814a3725a" - integrity sha512-elTQpnaX5vESSbhCEgcwXjpMsnUbqqHfEpB7ewpkAsLzKEXZaK67ihSRYAuAx6ewRQTo7DS5iTT6X5aQD3MzMw== - -"@swc/core-win32-ia32-msvc@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.3.tgz#279044bfdba0853f1afd138f582952461544e8e8" - integrity sha512-nvehQVEOdI1BleJpuUgPLrclJ0TzbEMc+MarXDmmiRFwEUGqj+pnfkTSb7RZyS1puU74IXdK/YhTirHurtbI9w== - -"@swc/core-win32-x64-msvc@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.3.tgz#6069e132be45ac34ecb4d72730db53c60d6a5475" - integrity sha512-A+JSKGkRbPLVV2Kwx8TaDAV0yXIXm/gc8m98hSkVDGlPBBmydgzNdWy3X7HTUBM7IDk7YlWE7w2+RUGjdgpTmg== - -"@swc/core@~1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.13.3.tgz#7a8668d96a28b3431acc3b9652f2d3ff2b6e5531" - integrity sha512-ZaDETVWnm6FE0fc+c2UE8MHYVS3Fe91o5vkmGfgwGXFbxYvAjKSqxM/j4cRc9T7VZNSJjriXq58XkfCp3Y6f+w== +"@swc/core-darwin-arm64@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.5.tgz#7638c073946f9297753ed9a2eb198d07b2336a24" + integrity sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ== + +"@swc/core-darwin-x64@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.13.5.tgz#18061167378f0fb285e17818494bc6c89dd07551" + integrity sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng== + +"@swc/core-linux-arm-gnueabihf@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.5.tgz#4c8062bd598049b5b9b0beb762e075e76b4c23c3" + integrity sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ== + +"@swc/core-linux-arm64-gnu@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.5.tgz#7222d321197ea9304e387933e87d775849fc1ae6" + integrity sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw== + +"@swc/core-linux-arm64-musl@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.5.tgz#51e7958deaf37edc212bd9dc0ea1476f151d2bea" + integrity sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ== + +"@swc/core-linux-x64-gnu@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.5.tgz#3476beab93ab03e92844d955ca9d9289aa4a5993" + integrity sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA== + +"@swc/core-linux-x64-musl@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.5.tgz#f4934b1e77e2a297909bb3ab977836205c36e5e0" + integrity sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q== + +"@swc/core-win32-arm64-msvc@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.5.tgz#5084c107435cfc82d4d901bfb388dc319d38a236" + integrity sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw== + +"@swc/core-win32-ia32-msvc@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.5.tgz#f8b2e28bc51b30467e316ed736a130c1324b9880" + integrity sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw== + +"@swc/core-win32-x64-msvc@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.5.tgz#13883cf3c63bf11b787e28dcdf75ca0cc49efa83" + integrity sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q== + +"@swc/core@~1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.13.5.tgz#93874b831d3bd121560e6fcd688972b7fc7baa26" + integrity sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ== dependencies: "@swc/counter" "^0.1.3" - "@swc/types" "^0.1.23" + "@swc/types" "^0.1.24" optionalDependencies: - "@swc/core-darwin-arm64" "1.13.3" - "@swc/core-darwin-x64" "1.13.3" - "@swc/core-linux-arm-gnueabihf" "1.13.3" - "@swc/core-linux-arm64-gnu" "1.13.3" - "@swc/core-linux-arm64-musl" "1.13.3" - "@swc/core-linux-x64-gnu" "1.13.3" - "@swc/core-linux-x64-musl" "1.13.3" - "@swc/core-win32-arm64-msvc" "1.13.3" - "@swc/core-win32-ia32-msvc" "1.13.3" - "@swc/core-win32-x64-msvc" "1.13.3" + "@swc/core-darwin-arm64" "1.13.5" + "@swc/core-darwin-x64" "1.13.5" + "@swc/core-linux-arm-gnueabihf" "1.13.5" + "@swc/core-linux-arm64-gnu" "1.13.5" + "@swc/core-linux-arm64-musl" "1.13.5" + "@swc/core-linux-x64-gnu" "1.13.5" + "@swc/core-linux-x64-musl" "1.13.5" + "@swc/core-win32-arm64-msvc" "1.13.5" + "@swc/core-win32-ia32-msvc" "1.13.5" + "@swc/core-win32-x64-msvc" "1.13.5" "@swc/counter@^0.1.3": version "0.1.3" @@ -2910,10 +2911,10 @@ dependencies: tslib "^2.8.0" -"@swc/types@^0.1.23": - version "0.1.23" - resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.23.tgz#7eabf88b9cfd929253859c562ae95982ee04b4e8" - integrity sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw== +"@swc/types@^0.1.24": + version "0.1.24" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.24.tgz#00f4343e2c966eac178cde89e8d821a784f7586d" + integrity sha512-tjTMh3V4vAORHtdTprLlfoMptu1WfTZG9Rsca6yOKyNYsRr+MUXutKmliB17orgSZk5DpnDxs8GUdd/qwYxOng== dependencies: "@swc/counter" "^0.1.3" @@ -3247,10 +3248,10 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.10.tgz#91f62905e8d23cbd66225312f239454a23bebfa0" integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q== -"@types/node@*", "@types/node@>= 8", "@types/node@>=10.0.0", "@types/node@^22.17.2": - version "22.17.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.17.2.tgz#47a93d6f4b79327da63af727e7c54e8cab8c4d33" - integrity sha512-gL6z5N9Jm9mhY+U2KXZpteb+09zyffliRkZyZOHODGATyC5B1Jt/7TzuuiLkFsSUMLbS1OLmlj/E+/3KF4Q/4w== +"@types/node@*", "@types/node@>= 8", "@types/node@>=10.0.0", "@types/node@^22.18.0": + version "22.18.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.0.tgz#9e4709be4f104e3568f7dd1c71e2949bf147a47b" + integrity sha512-m5ObIqwsUp6BZzyiy4RdZpzWGub9bqLJMvZDD0QMXhxjqMHMENlj+SqF5QxoUwaQNFe+8kz8XM8ZQhqkQPTgMQ== dependencies: undici-types "~6.21.0" @@ -3393,79 +3394,79 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.1.tgz#28dffcb5272d20afe250bfeec3173263db5528a0" - integrity sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g== +"@typescript-eslint/eslint-plugin@8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.40.0.tgz#19f959f273b32f5082c891903645e6a85328db4e" + integrity sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.39.1" - "@typescript-eslint/type-utils" "8.39.1" - "@typescript-eslint/utils" "8.39.1" - "@typescript-eslint/visitor-keys" "8.39.1" + "@typescript-eslint/scope-manager" "8.40.0" + "@typescript-eslint/type-utils" "8.40.0" + "@typescript-eslint/utils" "8.40.0" + "@typescript-eslint/visitor-keys" "8.40.0" graphemer "^1.4.0" ignore "^7.0.0" natural-compare "^1.4.0" ts-api-utils "^2.1.0" -"@typescript-eslint/parser@8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.39.1.tgz#7f8f9ecfc7e172d67e42c366fa198e42324e5d50" - integrity sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg== +"@typescript-eslint/parser@8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.40.0.tgz#1bc9f3701ced29540eb76ff2d95ce0d52ddc7e69" + integrity sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw== dependencies: - "@typescript-eslint/scope-manager" "8.39.1" - "@typescript-eslint/types" "8.39.1" - "@typescript-eslint/typescript-estree" "8.39.1" - "@typescript-eslint/visitor-keys" "8.39.1" + "@typescript-eslint/scope-manager" "8.40.0" + "@typescript-eslint/types" "8.40.0" + "@typescript-eslint/typescript-estree" "8.40.0" + "@typescript-eslint/visitor-keys" "8.40.0" debug "^4.3.4" -"@typescript-eslint/project-service@8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.39.1.tgz#63525878d488ebf27c485f295e83434a1398f52d" - integrity sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw== +"@typescript-eslint/project-service@8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.40.0.tgz#1b7ba6079ff580c3215882fe75a43e5d3ed166b9" + integrity sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.39.1" - "@typescript-eslint/types" "^8.39.1" + "@typescript-eslint/tsconfig-utils" "^8.40.0" + "@typescript-eslint/types" "^8.40.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.39.1.tgz#1253fe3e1f2f33f08a3e438a05b5dd7faf9fbca6" - integrity sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw== +"@typescript-eslint/scope-manager@8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.40.0.tgz#2fbfcc8643340d8cd692267e61548b946190be8a" + integrity sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w== dependencies: - "@typescript-eslint/types" "8.39.1" - "@typescript-eslint/visitor-keys" "8.39.1" + "@typescript-eslint/types" "8.40.0" + "@typescript-eslint/visitor-keys" "8.40.0" -"@typescript-eslint/tsconfig-utils@8.39.1", "@typescript-eslint/tsconfig-utils@^8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.1.tgz#17f13b4ad481e7bec7c249ee1854078645b34b12" - integrity sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA== +"@typescript-eslint/tsconfig-utils@8.40.0", "@typescript-eslint/tsconfig-utils@^8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.40.0.tgz#8e8fdb9b988854aedd04abdde3239c4bdd2d26e4" + integrity sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw== -"@typescript-eslint/type-utils@8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.39.1.tgz#642f9fb96173649e2928fea0375b1d74d31906c2" - integrity sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA== +"@typescript-eslint/type-utils@8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.40.0.tgz#a7e4a1f0815dd0ba3e4eef945cc87193ca32c422" + integrity sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow== dependencies: - "@typescript-eslint/types" "8.39.1" - "@typescript-eslint/typescript-estree" "8.39.1" - "@typescript-eslint/utils" "8.39.1" + "@typescript-eslint/types" "8.40.0" + "@typescript-eslint/typescript-estree" "8.40.0" + "@typescript-eslint/utils" "8.40.0" debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@8.39.1", "@typescript-eslint/types@^8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.39.1.tgz#f0ab996c8ab2c3b046bbf86bb1990b03529869a1" - integrity sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw== +"@typescript-eslint/types@8.40.0", "@typescript-eslint/types@^8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.40.0.tgz#0b580fdf643737aa5c01285314b5c6e9543846a9" + integrity sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg== -"@typescript-eslint/typescript-estree@8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.1.tgz#8825d3ea7ea2144c577859ae489eec24ef7318a5" - integrity sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw== +"@typescript-eslint/typescript-estree@8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.40.0.tgz#295149440ce7da81c790a4e14e327599a3a1e5c9" + integrity sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ== dependencies: - "@typescript-eslint/project-service" "8.39.1" - "@typescript-eslint/tsconfig-utils" "8.39.1" - "@typescript-eslint/types" "8.39.1" - "@typescript-eslint/visitor-keys" "8.39.1" + "@typescript-eslint/project-service" "8.40.0" + "@typescript-eslint/tsconfig-utils" "8.40.0" + "@typescript-eslint/types" "8.40.0" + "@typescript-eslint/visitor-keys" "8.40.0" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" @@ -3473,22 +3474,22 @@ semver "^7.6.0" ts-api-utils "^2.1.0" -"@typescript-eslint/utils@8.39.1", "@typescript-eslint/utils@^8.24.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.39.1.tgz#58a834f89f93b786ada2cd14d77fa63c3c8f408b" - integrity sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg== +"@typescript-eslint/utils@8.40.0", "@typescript-eslint/utils@^8.24.1": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.40.0.tgz#8d0c6430ed2f5dc350784bb0d8be514da1e54054" + integrity sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg== dependencies: "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.39.1" - "@typescript-eslint/types" "8.39.1" - "@typescript-eslint/typescript-estree" "8.39.1" + "@typescript-eslint/scope-manager" "8.40.0" + "@typescript-eslint/types" "8.40.0" + "@typescript-eslint/typescript-estree" "8.40.0" -"@typescript-eslint/visitor-keys@8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.1.tgz#a467742a98f2fa3c03d7bed4979dc0db3850a77a" - integrity sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A== +"@typescript-eslint/visitor-keys@8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.40.0.tgz#c1b45196981311fed7256863be4bfb2d3eda332a" + integrity sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA== dependencies: - "@typescript-eslint/types" "8.39.1" + "@typescript-eslint/types" "8.40.0" eslint-visitor-keys "^4.2.1" "@vitest/coverage-v8@^3.2.4": @@ -6854,10 +6855,10 @@ eslint-visitor-keys@^4.2.1: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== -eslint@9.33.0: - version "9.33.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.33.0.tgz#cc186b3d9eb0e914539953d6a178a5b413997b73" - integrity sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA== +eslint@9.34.0: + version "9.34.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.34.0.tgz#0ea1f2c1b5d1671db8f01aa6b8ce722302016f7b" + integrity sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.12.1" @@ -6865,7 +6866,7 @@ eslint@9.33.0: "@eslint/config-helpers" "^0.3.1" "@eslint/core" "^0.15.2" "@eslint/eslintrc" "^3.3.1" - "@eslint/js" "9.33.0" + "@eslint/js" "9.34.0" "@eslint/plugin-kit" "^0.3.5" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" @@ -9897,12 +9898,12 @@ macos-release@^2.2.0: resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.5.1.tgz#bccac4a8f7b93163a8d163b8ebf385b3c5f55bf9" integrity sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A== -magic-string@^0.30.12, magic-string@^0.30.17, magic-string@^0.30.3: - version "0.30.17" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" - integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== +magic-string@^0.30.12, magic-string@^0.30.17, magic-string@^0.30.18, magic-string@^0.30.3: + version "0.30.18" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.18.tgz#905bfbbc6aa5692703a93db26a9edcaa0007d2bb" + integrity sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ== dependencies: - "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/sourcemap-codec" "^1.5.5" magicast@^0.3.5: version "0.3.5" @@ -10556,10 +10557,10 @@ nwsapi@^2.2.16: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.16.tgz#177760bba02c351df1d2644e220c31dfec8cdb43" integrity sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ== -nx@21.4.0: - version "21.4.0" - resolved "https://registry.yarnpkg.com/nx/-/nx-21.4.0.tgz#6c2c3d27f4feafbd71e8406b21116ec98824df0a" - integrity sha512-BRymw8B8qs24RvqfroUVIRcxvMf1euONpi5+OMqvjZOSy5LTFTggrLwEg6GYIb1lj5kO53TTnZ/Wxj0m8tPKxQ== +nx@21.4.1: + version "21.4.1" + resolved "https://registry.yarnpkg.com/nx/-/nx-21.4.1.tgz#4649405ac2a3c69a22352c0423521051e0af5422" + integrity sha512-nD8NjJGYk5wcqiATzlsLauvyrSHV2S2YmM2HBIKqTTwVP2sey07MF3wDB9U2BwxIjboahiITQ6pfqFgB79TF2A== dependencies: "@napi-rs/wasm-runtime" "0.2.4" "@yarnpkg/lockfile" "^1.1.0" @@ -10597,16 +10598,16 @@ nx@21.4.0: yargs "^17.6.2" yargs-parser "21.1.1" optionalDependencies: - "@nx/nx-darwin-arm64" "21.4.0" - "@nx/nx-darwin-x64" "21.4.0" - "@nx/nx-freebsd-x64" "21.4.0" - "@nx/nx-linux-arm-gnueabihf" "21.4.0" - "@nx/nx-linux-arm64-gnu" "21.4.0" - "@nx/nx-linux-arm64-musl" "21.4.0" - "@nx/nx-linux-x64-gnu" "21.4.0" - "@nx/nx-linux-x64-musl" "21.4.0" - "@nx/nx-win32-arm64-msvc" "21.4.0" - "@nx/nx-win32-x64-msvc" "21.4.0" + "@nx/nx-darwin-arm64" "21.4.1" + "@nx/nx-darwin-x64" "21.4.1" + "@nx/nx-freebsd-x64" "21.4.1" + "@nx/nx-linux-arm-gnueabihf" "21.4.1" + "@nx/nx-linux-arm64-gnu" "21.4.1" + "@nx/nx-linux-arm64-musl" "21.4.1" + "@nx/nx-linux-x64-gnu" "21.4.1" + "@nx/nx-linux-x64-musl" "21.4.1" + "@nx/nx-win32-arm64-msvc" "21.4.1" + "@nx/nx-win32-x64-msvc" "21.4.1" object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" @@ -12022,33 +12023,33 @@ rollup-plugin-serve@^3.0.0: mime "^4" opener "1" -rollup@^4.28.0, rollup@^4.4.0, rollup@^4.40.0, rollup@^4.46.3: - version "4.46.3" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.46.3.tgz#ce207dcc18f18c1027c700d705f746df504436cb" - integrity sha512-RZn2XTjXb8t5g13f5YclGoilU/kwT696DIkY3sywjdZidNSi3+vseaQov7D7BZXVJCPv3pDWUN69C78GGbXsKw== +rollup@^4.28.0, rollup@^4.4.0, rollup@^4.40.0, rollup@^4.48.1: + version "4.48.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.48.1.tgz#acd64b7e3f8734728c5daedd5db42f4a8ea57858" + integrity sha512-jVG20NvbhTYDkGAty2/Yh7HK6/q3DGSRH4o8ALKGArmMuaauM9kLfoMZ+WliPwA5+JHr2lTn3g557FxBV87ifg== dependencies: "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.46.3" - "@rollup/rollup-android-arm64" "4.46.3" - "@rollup/rollup-darwin-arm64" "4.46.3" - "@rollup/rollup-darwin-x64" "4.46.3" - "@rollup/rollup-freebsd-arm64" "4.46.3" - "@rollup/rollup-freebsd-x64" "4.46.3" - "@rollup/rollup-linux-arm-gnueabihf" "4.46.3" - "@rollup/rollup-linux-arm-musleabihf" "4.46.3" - "@rollup/rollup-linux-arm64-gnu" "4.46.3" - "@rollup/rollup-linux-arm64-musl" "4.46.3" - "@rollup/rollup-linux-loongarch64-gnu" "4.46.3" - "@rollup/rollup-linux-ppc64-gnu" "4.46.3" - "@rollup/rollup-linux-riscv64-gnu" "4.46.3" - "@rollup/rollup-linux-riscv64-musl" "4.46.3" - "@rollup/rollup-linux-s390x-gnu" "4.46.3" - "@rollup/rollup-linux-x64-gnu" "4.46.3" - "@rollup/rollup-linux-x64-musl" "4.46.3" - "@rollup/rollup-win32-arm64-msvc" "4.46.3" - "@rollup/rollup-win32-ia32-msvc" "4.46.3" - "@rollup/rollup-win32-x64-msvc" "4.46.3" + "@rollup/rollup-android-arm-eabi" "4.48.1" + "@rollup/rollup-android-arm64" "4.48.1" + "@rollup/rollup-darwin-arm64" "4.48.1" + "@rollup/rollup-darwin-x64" "4.48.1" + "@rollup/rollup-freebsd-arm64" "4.48.1" + "@rollup/rollup-freebsd-x64" "4.48.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.48.1" + "@rollup/rollup-linux-arm-musleabihf" "4.48.1" + "@rollup/rollup-linux-arm64-gnu" "4.48.1" + "@rollup/rollup-linux-arm64-musl" "4.48.1" + "@rollup/rollup-linux-loongarch64-gnu" "4.48.1" + "@rollup/rollup-linux-ppc64-gnu" "4.48.1" + "@rollup/rollup-linux-riscv64-gnu" "4.48.1" + "@rollup/rollup-linux-riscv64-musl" "4.48.1" + "@rollup/rollup-linux-s390x-gnu" "4.48.1" + "@rollup/rollup-linux-x64-gnu" "4.48.1" + "@rollup/rollup-linux-x64-musl" "4.48.1" + "@rollup/rollup-win32-arm64-msvc" "4.48.1" + "@rollup/rollup-win32-ia32-msvc" "4.48.1" + "@rollup/rollup-win32-x64-msvc" "4.48.1" fsevents "~2.3.2" router@^2.2.0: @@ -13544,15 +13545,15 @@ typed-query-selector@^2.12.0: resolved "https://registry.yarnpkg.com/typed-query-selector/-/typed-query-selector-2.12.0.tgz#92b65dbc0a42655fccf4aeb1a08b1dddce8af5f2" integrity sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg== -typescript-eslint@8.39.1: - version "8.39.1" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.39.1.tgz#13075a676522041cbe421d98fb504ef535a6e4b3" - integrity sha512-GDUv6/NDYngUlNvwaHM1RamYftxf782IyEDbdj3SeaIHHv8fNQVRC++fITT7kUJV/5rIA/tkoRSSskt6osEfqg== +typescript-eslint@8.40.0: + version "8.40.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.40.0.tgz#27541748f3ca889c9698327bdacf815f7dc61804" + integrity sha512-Xvd2l+ZmFDPEt4oj1QEXzA4A2uUK6opvKu3eGN9aGjB8au02lIVcLyi375w94hHyejTOmzIU77L8ol2sRg9n7Q== dependencies: - "@typescript-eslint/eslint-plugin" "8.39.1" - "@typescript-eslint/parser" "8.39.1" - "@typescript-eslint/typescript-estree" "8.39.1" - "@typescript-eslint/utils" "8.39.1" + "@typescript-eslint/eslint-plugin" "8.40.0" + "@typescript-eslint/parser" "8.40.0" + "@typescript-eslint/typescript-estree" "8.40.0" + "@typescript-eslint/utils" "8.40.0" typescript@5.8.2: version "5.8.2" From 846dd06baef70fc72c5ce564f07d5f2bbe4a94bc Mon Sep 17 00:00:00 2001 From: Will Harney <62956339+wjhsf@users.noreply.github.com> Date: Wed, 27 Aug 2025 12:18:49 +0000 Subject: [PATCH 04/35] chore(deps): unpin semver (#5469) * chore(deps): unpin semver all deps have upgraded to address the vulnerability https://security.snyk.io/vuln/SNYK-JS-SEMVER-3247795 * chore(deps): bump http-cache-semantics --- package.json | 4 +--- yarn.lock | 27 ++++++++++++++++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index a75b7550e1..8d040902d4 100644 --- a/package.json +++ b/package.json @@ -98,14 +98,12 @@ "resolutions": { "//": { "http-cache-semantics": "Pinned to address security vulnerability", - "semver": "Pinned to address security vulnerability", "@types/estree": [ "Used by us and our dependencies. Because it's a type definition package,", "we need everyone to use the same types (mixing versions breaks stuff)." ] }, - "http-cache-semantics": "4.1.1", - "semver": "7.6.0", + "http-cache-semantics": "4.2.0", "@types/estree": "^1.0.8" }, "dependencies": {} diff --git a/yarn.lock b/yarn.lock index 61a2db0cfe..9f55926323 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2109,9 +2109,11 @@ "@lwc/eslint-plugin-lwc-internal@link:./scripts/eslint-plugin": version "0.0.0" + uid "" "@lwc/test-utils-lwc-internals@link:./scripts/test-utils": version "0.0.0" + uid "" "@napi-rs/wasm-runtime@0.2.4": version "0.2.4" @@ -8212,10 +8214,10 @@ http-assert@^1.3.0: deep-equal "~1.0.1" http-errors "~1.8.0" -http-cache-semantics@3.8.1, http-cache-semantics@4.1.1, http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== +http-cache-semantics@3.8.1, http-cache-semantics@4.2.0, http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" + integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== http-errors@2.0.0, http-errors@^2.0.0: version "2.0.0" @@ -12225,13 +12227,28 @@ semver-truncate@^1.1.2: dependencies: semver "^5.3.0" -semver@7.6.0, semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^6.3.0, semver@^6.3.1, semver@^7.1.1, semver@^7.3.2, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3, semver@^7.7.2: +semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.1.1, semver@^7.3.2, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: version "7.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" +semver@^7.6.3, semver@^7.7.2: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + send@0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" From d383e58d3412e13009b55dfc702f33d682899e2e Mon Sep 17 00:00:00 2001 From: Will Harney <62956339+wjhsf@users.noreply.github.com> Date: Wed, 27 Aug 2025 19:41:07 +0000 Subject: [PATCH 05/35] chore(release): validate new version is greater than current version (#5470) --- scripts/release/version.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/release/version.js b/scripts/release/version.js index cb4a7b95f9..6e9711684d 100755 --- a/scripts/release/version.js +++ b/scripts/release/version.js @@ -37,12 +37,16 @@ async function getVersion() { async function parseVersion(rawVersion) { try { + const current = rootPackageJson.version; const exact = semver.valid(rawVersion); if (exact) { // answer is a semver version - return exact; + if (semver.gt(exact, current)) { + return exact; + } + throw new Error(`Release version ${rawVersion} is not greater than ${current}.`); } - const incremented = semver.inc(rootPackageJson.version, rawVersion); + const incremented = semver.inc(current, rawVersion); if (incremented) { // answer is a semver release type (major/minor/etc.) return incremented; From 6ea26d2f463f7919fcd82c828ef646b435953623 Mon Sep 17 00:00:00 2001 From: rax-it Date: Thu, 28 Aug 2025 13:51:23 -0700 Subject: [PATCH 06/35] feat(release): move npm publish to github actions (#5464) * chore: test * chore: update to workflow dispatch * chore: only dry run * chore: adds org read token * chore: comment user validation * chore: test validation * chore: setup environment * chore: ready for review * chore: address feedback * Update .github/workflows/release.yml Co-authored-by: Will Harney <62956339+wjhsf@users.noreply.github.com> --------- Co-authored-by: Will Harney <62956339+wjhsf@users.noreply.github.com> --- .github/workflows/release.yml | 84 +++++++++++++++++++++++++++++++++++ .nucleus.yaml | 77 -------------------------------- 2 files changed, 84 insertions(+), 77 deletions(-) create mode 100644 .github/workflows/release.yml delete mode 100644 .nucleus.yaml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..4638fca6df --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,84 @@ +name: Manual Release + +on: + workflow_dispatch: + inputs: + bump: + description: 'Version bump type (used if release_version is empty)' + type: choice + options: + - major + - minor + - patch + - prerelease + required: false + release_version: + description: 'Semver version to release (must be > current root version)' + required: false + +permissions: + contents: write + pull-requests: write + id-token: write + packages: write + +jobs: + release: + # Allow only on master, spring*, summer*, winter*; + if: ${{ github.repository_owner == 'salesforce' && (github.ref_name == 'master' || startsWith(github.ref_name, 'spring') || startsWith(github.ref_name, 'summer') || startsWith(github.ref_name, 'winter')) }} + environment: release + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: '20' + registry-url: 'https://registry.npmjs.org' + cache: 'yarn' + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Resolve version input + id: resolve_version + run: | + RELEASE_VERSION='${{ inputs.release_version }}' + if [ -z "$RELEASE_VERSION" ]; then + RELEASE_VERSION='${{ inputs.bump }}' + fi + echo "resolved=$RELEASE_VERSION" >> "$GITHUB_OUTPUT" + + - name: Bump versions and commit + env: + INPUT_VERSION: ${{ steps.resolve_version.outputs.resolved }} + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + node ./scripts/release/version.js "$INPUT_VERSION" + RESOLVED_VERSION=$(jq -r .version package.json) + git commit -am "chore: release v$RESOLVED_VERSION" + git push origin HEAD + + - name: Build + run: yarn build + + - name: Tag and create GitHub release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + VERSION=$(jq -r .version package.json) + git tag -a "v$VERSION" -m "Release v$VERSION" + git push origin tag "v$VERSION" + gh release create "v$VERSION" --title "v$VERSION" --generate-notes + + - name: Publish to npm + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + run: | + TAG=$([ "$GITHUB_REF_NAME" = "master" ] && echo latest || echo "$GITHUB_REF_NAME") + yarn nx release publish --yes --registry https://registry.npmjs.org --tag "$TAG" diff --git a/.nucleus.yaml b/.nucleus.yaml deleted file mode 100644 index 4912d2a25c..0000000000 --- a/.nucleus.yaml +++ /dev/null @@ -1,77 +0,0 @@ -core-deploy: - enabled: true - project-modules: - lwc: lwc.version -branches: - ~DEFAULT~: - pull-request: &branch-definition - auto-start: true - auto-start-from-forks: false - merge-method: disabled # do not auto-merge; we'll do it ourselves - required-downstream-deps: - - BuilderFramework/builder-framework-salesforce - - MobilePlatform/lsdk-modules - - MobilePlatform/lwr-lightning-platform - - MobilePlatform/ui-fsm-components - - automation-platform/ui-externalservices-builder-components - - communities/microsite-template-marketing - - communities/shared-experience-components - - communities/ui-commerce-components - - communities/webruntime - - lds/lds-plugins - - salesforce-experience-platform-emu/komaci - - salesforce-experience-platform-emu/locker-pentest-app - - salesforce-experience-platform-emu/lwr - - salesforce-experience-platform-emu/lwr-everywhere - - salesforce-experience-platform-emu/lwr-recipes - - salesforce/lwc-test - # Using old major versions; tests in PRs will always fail - # - salesforce/o11y-sample-app - # - Skilling-and-Enablement/ui-external-enablement - release: - pull-request: - <<: *branch-definition - merge-method: force-push # release branch should always be in sync with master branch (linear history) - # Only active branches need to be included in this config - winter26: - pull-request: - <<: *branch-definition - spring25: - pull-request: - <<: *branch-definition - summer25: - pull-request: - <<: *branch-definition -jobs: - build-and-test: - memory-limit: 16 - create-canary-release: - memory-limit: 16 - build-dependency: - memory-limit: 16 - release: - memory-limit: 16 -steps: - node-conformance: - run: - command: yarn run lint - after: node-build - node-unit-tests: - run: - command: yarn test - # this project runs yarn build after yarn install so skip explicit build step - node-build: &node-build - skip: true - node-pre-release-tests: - params: - command: yarn test - npm-configure: - params: - registry-url: https://registry.yarnpkg.com - npm-configure-for-publish: - params: - registry-url: https://registry.npmjs.org - npm-publish-release: - params: - access: public - tag: latest # note: this should be summer22, winter23, etc. if this .nucleus.yaml file is in a non-master branch From 47645d8a97c363b899a6862525b7e59a0e520a38 Mon Sep 17 00:00:00 2001 From: Will Harney <62956339+wjhsf@users.noreply.github.com> Date: Thu, 28 Aug 2025 21:43:40 +0000 Subject: [PATCH 07/35] test(wtr): clean global state and mock LWC (#5467) * test(wtr): clear and clear global stylesheets when needed * test(wtr): mock LWC to validate sanitizeAttribute We can't mock individual methods of ESM modules in the browser, so we use WTR's import map plugin to redirect all "lwc" imports to a mock file. The mock file is mostly a re-export. * chore(deps): bump @types/jasmine --- .../test/api/sanitizeAttribute/index.spec.js | 15 +++++-------- .../synthetic-behavior/index.spec.js | 4 ++++ .../style-specificity-important/index.spec.js | 4 ++++ .../test/shadow-dom/stylesheet/index.spec.js | 4 ++++ .../dom-manual-sharing-nodes/index.spec.js | 4 ++++ .../directive-lwc-dom-manual/index.spec.js | 4 ++++ .../directive-lwc-inner-html/index.spec.js | 14 ++++++------ .../integration-not-karma/configs/base.mjs | 2 ++ .../configs/integration.mjs | 9 -------- .../integration-not-karma/helpers/setup.mjs | 1 + .../@lwc/integration-not-karma/mocks/lwc.mjs | 6 +++++ .../@lwc/integration-not-karma/package.json | 1 + yarn.lock | 22 +++++++++++++++++++ 13 files changed, 64 insertions(+), 26 deletions(-) create mode 100644 packages/@lwc/integration-not-karma/mocks/lwc.mjs diff --git a/packages/@lwc/integration-karma/test/api/sanitizeAttribute/index.spec.js b/packages/@lwc/integration-karma/test/api/sanitizeAttribute/index.spec.js index 239ad4cae9..6d1d43f76a 100644 --- a/packages/@lwc/integration-karma/test/api/sanitizeAttribute/index.spec.js +++ b/packages/@lwc/integration-karma/test/api/sanitizeAttribute/index.spec.js @@ -36,11 +36,10 @@ const scenarios = [ scenarios.forEach(({ type, attrName, tagName, Ctor }) => { describe(`${type} ${attrName}`, () => { - const originalSanitizeAttribute = LWC.sanitizeAttribute; - + // Spy is created in a mock file and injected with the import map plugin + const sanitizeAttributeSpy = LWC.sanitizeAttribute; afterEach(() => { - // Reset original sanitizer after each test. - LWC.sanitizeAttribute = originalSanitizeAttribute; + sanitizeAttributeSpy.mockReset(); }); it('uses the original passthrough sanitizer when not overridden', () => { @@ -52,8 +51,6 @@ scenarios.forEach(({ type, attrName, tagName, Ctor }) => { }); it('receives the right parameters', () => { - spyOn(LWC, 'sanitizeAttribute'); - const elm = createElement(tagName, { is: Ctor }); document.body.appendChild(elm); @@ -66,7 +63,7 @@ scenarios.forEach(({ type, attrName, tagName, Ctor }) => { }); it('replace the original attribute value with a string', () => { - spyOn(LWC, 'sanitizeAttribute').and.returnValue('/bar'); + sanitizeAttributeSpy.mockReturnValue('/bar'); const elm = createElement(tagName, { is: Ctor }); document.body.appendChild(elm); @@ -76,7 +73,7 @@ scenarios.forEach(({ type, attrName, tagName, Ctor }) => { }); it('replace the original attribute value with undefined', () => { - spyOn(LWC, 'sanitizeAttribute').and.returnValue(undefined); + sanitizeAttributeSpy.mockReturnValue(undefined); const elm = createElement(tagName, { is: Ctor }); document.body.appendChild(elm); @@ -105,8 +102,6 @@ booleanTrueScenarios.forEach(({ attrName, tagName, Ctor }) => { describe(attrName, () => { // For boolean literals (e.g. ``), there is no reason to sanitize since it's empty it('does not sanitize when used as a boolean-true attribute', () => { - spyOn(LWC, 'sanitizeAttribute'); - const elm = createElement(tagName, { is: Ctor }); document.body.appendChild(elm); diff --git a/packages/@lwc/integration-karma/test/mixed-shadow-mode/synthetic-behavior/index.spec.js b/packages/@lwc/integration-karma/test/mixed-shadow-mode/synthetic-behavior/index.spec.js index cd1a0b7c3e..2a57066843 100644 --- a/packages/@lwc/integration-karma/test/mixed-shadow-mode/synthetic-behavior/index.spec.js +++ b/packages/@lwc/integration-karma/test/mixed-shadow-mode/synthetic-behavior/index.spec.js @@ -15,6 +15,10 @@ import GrandparentResetParentAnyChildReset from 'x/grandparentResetParentAnyChil import GrandparentResetParentResetChildAny from 'x/grandparentResetParentResetChildAny'; import GrandparentResetParentResetChildReset from 'x/grandparentResetParentResetChildReset'; +afterEach(() => { + window.__lwcResetGlobalStylesheets(); +}); + describe.skipIf(process.env.NATIVE_SHADOW)('synthetic behavior', () => { const scenarios = [ { diff --git a/packages/@lwc/integration-karma/test/rendering/style-specificity-important/index.spec.js b/packages/@lwc/integration-karma/test/rendering/style-specificity-important/index.spec.js index f7ebaaba16..e5f0d40d7f 100644 --- a/packages/@lwc/integration-karma/test/rendering/style-specificity-important/index.spec.js +++ b/packages/@lwc/integration-karma/test/rendering/style-specificity-important/index.spec.js @@ -1,6 +1,10 @@ import { createElement } from 'lwc'; import Component from 'x/component'; +afterEach(() => { + window.__lwcResetGlobalStylesheets(); +}); + describe('important styling and style override', () => { it('should render !important styles correctly', async () => { const elm = createElement('x-component', { is: Component }); diff --git a/packages/@lwc/integration-karma/test/shadow-dom/stylesheet/index.spec.js b/packages/@lwc/integration-karma/test/shadow-dom/stylesheet/index.spec.js index 2945904bef..ec6ee2909d 100644 --- a/packages/@lwc/integration-karma/test/shadow-dom/stylesheet/index.spec.js +++ b/packages/@lwc/integration-karma/test/shadow-dom/stylesheet/index.spec.js @@ -4,6 +4,10 @@ import Parent from 'x/parent'; import Host from 'x/host'; import MultiTemplates from 'x/multiTemplates'; +afterEach(() => { + window.__lwcResetGlobalStylesheets(); +}); + describe('shadow encapsulation', () => { it('should not style children elements', () => { const elm = createElement('x-parent', { is: Parent }); diff --git a/packages/@lwc/integration-karma/test/synthetic-shadow/dom-manual-sharing-nodes/index.spec.js b/packages/@lwc/integration-karma/test/synthetic-shadow/dom-manual-sharing-nodes/index.spec.js index bff0ab7318..a683920571 100644 --- a/packages/@lwc/integration-karma/test/synthetic-shadow/dom-manual-sharing-nodes/index.spec.js +++ b/packages/@lwc/integration-karma/test/synthetic-shadow/dom-manual-sharing-nodes/index.spec.js @@ -3,6 +3,10 @@ import { createElement } from 'lwc'; import Unstyled from 'x/unstyled'; import Styled from 'x/styled'; +afterEach(() => { + window.__lwcResetGlobalStylesheets(); +}); + describe('dom manual sharing nodes', () => { it('has correct styles when sharing nodes from styled to unstyled component', () => { const unstyled = createElement('x-unstyled', { is: Unstyled }); diff --git a/packages/@lwc/integration-karma/test/template/directive-lwc-dom-manual/index.spec.js b/packages/@lwc/integration-karma/test/template/directive-lwc-dom-manual/index.spec.js index 5f12e9b3cd..d2ee0da2ba 100644 --- a/packages/@lwc/integration-karma/test/template/directive-lwc-dom-manual/index.spec.js +++ b/packages/@lwc/integration-karma/test/template/directive-lwc-dom-manual/index.spec.js @@ -8,6 +8,10 @@ function waitForStyleToBeApplied() { return Promise.resolve(); } +afterEach(() => { + window.__lwcResetGlobalStylesheets(); +}); + describe('dom mutation without the lwc:dom="manual" directive', () => { function testErrorOnDomMutation(method, fn) { it(`should log a warning when calling ${method} on an element without the lwc:dom="manual" directive only in synthetic mode`, () => { diff --git a/packages/@lwc/integration-karma/test/template/directive-lwc-inner-html/index.spec.js b/packages/@lwc/integration-karma/test/template/directive-lwc-inner-html/index.spec.js index 5778caa3e9..5b3f8976b1 100644 --- a/packages/@lwc/integration-karma/test/template/directive-lwc-inner-html/index.spec.js +++ b/packages/@lwc/integration-karma/test/template/directive-lwc-inner-html/index.spec.js @@ -7,18 +7,18 @@ let originalSanitizeHtmlContent; beforeAll(() => { originalSanitizeHtmlContent = getHooks().sanitizeHtmlContent; - setHooks({ - sanitizeHtmlContent: (content) => content, - }); + setHooks({ sanitizeHtmlContent: (content) => content }); }); afterAll(() => { - setHooks({ - sanitizeHtmlContent: originalSanitizeHtmlContent, - }); + setHooks({ sanitizeHtmlContent: originalSanitizeHtmlContent }); +}); + +afterEach(() => { + window.__lwcResetGlobalStylesheets(); }); -it('renders the content as HTML', () => { +it('renders the content as HTML', async () => { const elm = createElement('x-inner-html', { is: XInnerHtml }); elm.content = 'Hello World'; document.body.appendChild(elm); diff --git a/packages/@lwc/integration-not-karma/configs/base.mjs b/packages/@lwc/integration-not-karma/configs/base.mjs index 6e67acbd4a..1cca526416 100644 --- a/packages/@lwc/integration-not-karma/configs/base.mjs +++ b/packages/@lwc/integration-not-karma/configs/base.mjs @@ -1,5 +1,6 @@ import { join } from 'node:path'; import { LWC_VERSION } from '@lwc/shared'; +import { importMapsPlugin } from '@web/dev-server-import-maps'; import * as options from '../helpers/options.mjs'; const pluck = (obj, keys) => Object.fromEntries(keys.map((k) => [k, obj[k]])); @@ -31,6 +32,7 @@ export default { nodeResolve: true, rootDir: join(import.meta.dirname, '..'), plugins: [ + importMapsPlugin({ inject: { importMap: { imports: { lwc: './mocks/lwc.mjs' } } } }), { resolveImport({ source }) { if (source === 'test-utils') { diff --git a/packages/@lwc/integration-not-karma/configs/integration.mjs b/packages/@lwc/integration-not-karma/configs/integration.mjs index f277677f86..3479e788d4 100644 --- a/packages/@lwc/integration-not-karma/configs/integration.mjs +++ b/packages/@lwc/integration-not-karma/configs/integration.mjs @@ -8,21 +8,12 @@ export default { // FIXME: These tests are just symlinks to integration-karma for now so the git diff smaller 'test/**/*.spec.js', - // Cannot reassign properties of module - '!test/api/sanitizeAttribute/index.spec.js', - // Hacky nonsense highly tailored to Karma '!test/custom-elements-registry/index.spec.js', // Logging mismatches '!test/component/LightningElement.addEventListener/index.spec.js', - // Needs clean - '!test/light-dom/multiple-templates/index.spec.js', - '!test/light-dom/style-global/index.spec.js', - '!test/misc/clean-dom/index.spec.js', - '!test/swapping/styles/index.spec.js', - // Implement objectContaining / arrayWithExactContents '!test/profiler/mutation-logging/index.spec.js', ], diff --git a/packages/@lwc/integration-not-karma/helpers/setup.mjs b/packages/@lwc/integration-not-karma/helpers/setup.mjs index 5098985cd3..418e166ebc 100644 --- a/packages/@lwc/integration-not-karma/helpers/setup.mjs +++ b/packages/@lwc/integration-not-karma/helpers/setup.mjs @@ -106,6 +106,7 @@ hijackGlobal('afterEach', (afterEach) => { // FIXME: Boost test speed by moving this to only files that need it // Ensure the DOM is in a clean state document.body.replaceChildren(); + document.head.replaceChildren(); }); }); diff --git a/packages/@lwc/integration-not-karma/mocks/lwc.mjs b/packages/@lwc/integration-not-karma/mocks/lwc.mjs new file mode 100644 index 0000000000..023844a214 --- /dev/null +++ b/packages/@lwc/integration-not-karma/mocks/lwc.mjs @@ -0,0 +1,6 @@ +// IMPORTANT: we must use @lwc/engine-dom instead of lwc in order to avoid circular imports +import { sanitizeAttribute as _sanitizeAttribute } from '@lwc/engine-dom'; +import { fn } from '@vitest/spy'; + +export * from '@lwc/engine-dom'; +export const sanitizeAttribute = fn(_sanitizeAttribute); diff --git a/packages/@lwc/integration-not-karma/package.json b/packages/@lwc/integration-not-karma/package.json index 697c97cbf4..d6f2e6656f 100644 --- a/packages/@lwc/integration-not-karma/package.json +++ b/packages/@lwc/integration-not-karma/package.json @@ -15,6 +15,7 @@ "@lwc/synthetic-shadow": "8.21.2", "@types/chai": "^5.2.2", "@types/jasmine": "^5.1.9", + "@web/dev-server-import-maps": "^0.2.1", "@web/dev-server-rollup": "^0.6.4", "@web/test-runner": "^0.20.2", "chai": "^6.0.1" diff --git a/yarn.lock b/yarn.lock index 9f55926323..39f9561cf9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1811,6 +1811,11 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.2.tgz#1860473de7dfa1546767448f333db80cb0ff2161" integrity sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ== +"@import-maps/resolve@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@import-maps/resolve/-/resolve-1.0.1.tgz#1e9fcadcf23aa0822256a329aabca241879d37c9" + integrity sha512-tWZNBIS1CoekcwlMuyG2mr0a1Wo5lb5lEHwwWvZo+5GLgr3e9LLDTtmgtCWEwBpXMkxn9D+2W9j2FY6eZQq0tA== + "@inquirer/checkbox@^4.1.9": version "4.1.9" resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.1.9.tgz#431c65a3a1fd289be8102034ece15c91dda1ceec" @@ -3192,6 +3197,11 @@ resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.9.tgz#9f00abff2a17687e675ce6669e7b53c9e7d145f0" integrity sha512-8t4HtkW4wxiPVedMpeZ63n3vlWxEIquo/zc1Tm8ElU+SqVV7+D3Na2PWaJUp179AzTragMWVwkMv7mvty0NfyQ== +"@types/jasmine@^5.1.9": + version "5.1.9" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.9.tgz#9f00abff2a17687e675ce6669e7b53c9e7d145f0" + integrity sha512-8t4HtkW4wxiPVedMpeZ63n3vlWxEIquo/zc1Tm8ElU+SqVV7+D3Na2PWaJUp179AzTragMWVwkMv7mvty0NfyQ== + "@types/json-schema@^7.0.15": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" @@ -3943,6 +3953,18 @@ picomatch "^2.2.2" ws "^7.5.10" +"@web/dev-server-import-maps@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@web/dev-server-import-maps/-/dev-server-import-maps-0.2.1.tgz#4b3ab65bb256b7852a1abfe9cdf1b7b129d3d0fa" + integrity sha512-iGM7s4qenmTDUWC2iV0HoQ1NR5lAyRxVHOpWzTsFH/TnUZzP+YuL6QIFtB2v2v7URfhGL2l2WPIibmliToITcg== + dependencies: + "@import-maps/resolve" "^1.0.1" + "@types/parse5" "^6.0.1" + "@web/dev-server-core" "^0.7.2" + "@web/parse5-utils" "^2.1.0" + parse5 "^6.0.1" + picomatch "^2.2.2" + "@web/dev-server-rollup@^0.6.1", "@web/dev-server-rollup@^0.6.4": version "0.6.4" resolved "https://registry.yarnpkg.com/@web/dev-server-rollup/-/dev-server-rollup-0.6.4.tgz#d0a4f69e4a659d2b79f172e86236cea6c872e81c" From 101a8fa90648f50ebc0a854916877a6c905d1d02 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 28 Aug 2025 21:46:02 +0000 Subject: [PATCH 08/35] chore: release v8.21.3 --- package.json | 2 +- packages/@lwc/aria-reflection/package.json | 2 +- .../@lwc/babel-plugin-component/package.json | 6 +-- packages/@lwc/compiler/package.json | 14 +++---- packages/@lwc/engine-core/package.json | 8 ++-- packages/@lwc/engine-dom/package.json | 10 ++--- packages/@lwc/engine-server/package.json | 12 +++--- packages/@lwc/errors/package.json | 2 +- packages/@lwc/features/package.json | 4 +- packages/@lwc/integration-karma/package.json | 12 +++--- .../@lwc/integration-not-karma/package.json | 12 +++--- packages/@lwc/integration-tests/package.json | 6 +-- packages/@lwc/integration-types/package.json | 6 +-- packages/@lwc/module-resolver/package.json | 2 +- .../perf-benchmarks-components/package.json | 4 +- packages/@lwc/perf-benchmarks/package.json | 12 +++--- packages/@lwc/rollup-plugin/package.json | 10 ++--- packages/@lwc/shared/package.json | 2 +- packages/@lwc/signals/package.json | 4 +- packages/@lwc/ssr-client-utils/package.json | 2 +- packages/@lwc/ssr-compiler/package.json | 10 ++--- packages/@lwc/ssr-runtime/package.json | 10 ++--- packages/@lwc/style-compiler/package.json | 4 +- packages/@lwc/synthetic-shadow/package.json | 6 +-- packages/@lwc/template-compiler/package.json | 6 +-- packages/@lwc/types/package.json | 4 +- packages/@lwc/wire-service/package.json | 6 +-- packages/lwc/package.json | 38 +++++++++---------- playground/package.json | 6 +-- 29 files changed, 111 insertions(+), 111 deletions(-) diff --git a/package.json b/package.json index 8d040902d4..f021204a89 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lwc-monorepo", - "version": "8.21.2", + "version": "8.21.3", "private": true, "description": "Lightning Web Components", "repository": { diff --git a/packages/@lwc/aria-reflection/package.json b/packages/@lwc/aria-reflection/package.json index 07a146a46e..e459169b02 100644 --- a/packages/@lwc/aria-reflection/package.json +++ b/packages/@lwc/aria-reflection/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/aria-reflection", - "version": "8.21.2", + "version": "8.21.3", "description": "ARIA element reflection polyfill for strings", "keywords": [ "aom", diff --git a/packages/@lwc/babel-plugin-component/package.json b/packages/@lwc/babel-plugin-component/package.json index 5cb1599edd..959d96b354 100644 --- a/packages/@lwc/babel-plugin-component/package.json +++ b/packages/@lwc/babel-plugin-component/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/babel-plugin-component", - "version": "8.21.2", + "version": "8.21.3", "description": "Babel plugin to transform a LWC module", "keywords": [ "lwc" @@ -47,8 +47,8 @@ }, "dependencies": { "@babel/helper-module-imports": "7.27.1", - "@lwc/errors": "8.21.2", - "@lwc/shared": "8.21.2", + "@lwc/errors": "8.21.3", + "@lwc/shared": "8.21.3", "line-column": "~1.0.2" }, "devDependencies": { diff --git a/packages/@lwc/compiler/package.json b/packages/@lwc/compiler/package.json index 7e62e059b3..ab5785ad22 100644 --- a/packages/@lwc/compiler/package.json +++ b/packages/@lwc/compiler/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/compiler", - "version": "8.21.2", + "version": "8.21.3", "description": "LWC compiler", "keywords": [ "lwc" @@ -52,11 +52,11 @@ "@babel/plugin-transform-class-properties": "7.27.1", "@babel/plugin-transform-object-rest-spread": "7.28.0", "@locker/babel-plugin-transform-unforgeables": "0.22.0", - "@lwc/babel-plugin-component": "8.21.2", - "@lwc/errors": "8.21.2", - "@lwc/shared": "8.21.2", - "@lwc/ssr-compiler": "8.21.2", - "@lwc/style-compiler": "8.21.2", - "@lwc/template-compiler": "8.21.2" + "@lwc/babel-plugin-component": "8.21.3", + "@lwc/errors": "8.21.3", + "@lwc/shared": "8.21.3", + "@lwc/ssr-compiler": "8.21.3", + "@lwc/style-compiler": "8.21.3", + "@lwc/template-compiler": "8.21.3" } } diff --git a/packages/@lwc/engine-core/package.json b/packages/@lwc/engine-core/package.json index f22221c6db..4f9f2ade4a 100644 --- a/packages/@lwc/engine-core/package.json +++ b/packages/@lwc/engine-core/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/engine-core", - "version": "8.21.2", + "version": "8.21.3", "description": "Core LWC engine APIs.", "keywords": [ "lwc" @@ -46,9 +46,9 @@ } }, "dependencies": { - "@lwc/features": "8.21.2", - "@lwc/shared": "8.21.2", - "@lwc/signals": "8.21.2" + "@lwc/features": "8.21.3", + "@lwc/shared": "8.21.3", + "@lwc/signals": "8.21.3" }, "devDependencies": { "observable-membrane": "2.0.0" diff --git a/packages/@lwc/engine-dom/package.json b/packages/@lwc/engine-dom/package.json index 719716f417..a6632a370d 100644 --- a/packages/@lwc/engine-dom/package.json +++ b/packages/@lwc/engine-dom/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/engine-dom", - "version": "8.21.2", + "version": "8.21.3", "description": "Renders LWC components in a DOM environment.", "keywords": [ "lwc" @@ -46,10 +46,10 @@ } }, "devDependencies": { - "@lwc/engine-core": "8.21.2", - "@lwc/shared": "8.21.2", - "@lwc/features": "8.21.2", - "@lwc/signals": "8.21.2" + "@lwc/engine-core": "8.21.3", + "@lwc/shared": "8.21.3", + "@lwc/features": "8.21.3", + "@lwc/signals": "8.21.3" }, "lwc": { "modules": [ diff --git a/packages/@lwc/engine-server/package.json b/packages/@lwc/engine-server/package.json index 06a1d0585d..d6884bfe80 100644 --- a/packages/@lwc/engine-server/package.json +++ b/packages/@lwc/engine-server/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/engine-server", - "version": "8.21.2", + "version": "8.21.3", "description": "Renders LWC components in a server environment.", "keywords": [ "lwc" @@ -46,11 +46,11 @@ } }, "devDependencies": { - "@lwc/engine-core": "8.21.2", - "@lwc/rollup-plugin": "8.21.2", - "@lwc/shared": "8.21.2", - "@lwc/features": "8.21.2", - "@lwc/signals": "8.21.2", + "@lwc/engine-core": "8.21.3", + "@lwc/rollup-plugin": "8.21.3", + "@lwc/shared": "8.21.3", + "@lwc/features": "8.21.3", + "@lwc/signals": "8.21.3", "@rollup/plugin-virtual": "^3.0.2", "parse5": "^8.0.0" } diff --git a/packages/@lwc/errors/package.json b/packages/@lwc/errors/package.json index 76f4d4622d..fa8f7d3191 100644 --- a/packages/@lwc/errors/package.json +++ b/packages/@lwc/errors/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/errors", - "version": "8.21.2", + "version": "8.21.3", "description": "LWC Error Utilities", "keywords": [ "lwc" diff --git a/packages/@lwc/features/package.json b/packages/@lwc/features/package.json index e34fc76531..30952af76f 100644 --- a/packages/@lwc/features/package.json +++ b/packages/@lwc/features/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/features", - "version": "8.21.2", + "version": "8.21.3", "description": "LWC Features Flags", "keywords": [ "lwc" @@ -46,6 +46,6 @@ } }, "dependencies": { - "@lwc/shared": "8.21.2" + "@lwc/shared": "8.21.3" } } diff --git a/packages/@lwc/integration-karma/package.json b/packages/@lwc/integration-karma/package.json index 1d1e70f389..93b858fea2 100644 --- a/packages/@lwc/integration-karma/package.json +++ b/packages/@lwc/integration-karma/package.json @@ -1,7 +1,7 @@ { "name": "@lwc/integration-karma", "private": true, - "version": "8.21.2", + "version": "8.21.3", "scripts": { "start": "KARMA_MODE=watch karma start ./scripts/karma-configs/test/local.js", "test": "karma start ./scripts/karma-configs/test/local.js --single-run", @@ -21,11 +21,11 @@ "karma-sauce-launcher-fix-firefox": "using a fork to work around https://github.com/karma-runner/karma-sauce-launcher/issues/275" }, "devDependencies": { - "@lwc/compiler": "8.21.2", - "@lwc/engine-dom": "8.21.2", - "@lwc/engine-server": "8.21.2", - "@lwc/rollup-plugin": "8.21.2", - "@lwc/synthetic-shadow": "8.21.2", + "@lwc/compiler": "8.21.3", + "@lwc/engine-dom": "8.21.3", + "@lwc/engine-server": "8.21.3", + "@lwc/rollup-plugin": "8.21.3", + "@lwc/synthetic-shadow": "8.21.3", "@types/jasmine": "^5.1.9", "chokidar": "^4.0.3", "istanbul-lib-coverage": "^3.2.2", diff --git a/packages/@lwc/integration-not-karma/package.json b/packages/@lwc/integration-not-karma/package.json index d6f2e6656f..1e2c5f1986 100644 --- a/packages/@lwc/integration-not-karma/package.json +++ b/packages/@lwc/integration-not-karma/package.json @@ -1,18 +1,18 @@ { "name": "@lwc/integration-not-karma", "private": true, - "version": "8.21.2", + "version": "8.21.3", "scripts": { "start": "web-test-runner --manual", "test": "web-test-runner --config configs/integration.mjs", "test:hydration": "web-test-runner --config configs/hydration.mjs" }, "devDependencies": { - "@lwc/compiler": "8.21.2", - "@lwc/engine-dom": "8.21.2", - "@lwc/engine-server": "8.21.2", - "@lwc/rollup-plugin": "8.21.2", - "@lwc/synthetic-shadow": "8.21.2", + "@lwc/compiler": "8.21.3", + "@lwc/engine-dom": "8.21.3", + "@lwc/engine-server": "8.21.3", + "@lwc/rollup-plugin": "8.21.3", + "@lwc/synthetic-shadow": "8.21.3", "@types/chai": "^5.2.2", "@types/jasmine": "^5.1.9", "@web/dev-server-import-maps": "^0.2.1", diff --git a/packages/@lwc/integration-tests/package.json b/packages/@lwc/integration-tests/package.json index 68482f4b96..90a350da52 100644 --- a/packages/@lwc/integration-tests/package.json +++ b/packages/@lwc/integration-tests/package.json @@ -1,7 +1,7 @@ { "name": "@lwc/integration-tests", "private": true, - "version": "8.21.2", + "version": "8.21.3", "scripts": { "build": "node scripts/build.js", "build:dev": "MODE=dev yarn build", @@ -18,7 +18,7 @@ "sauce:prod:ci": "MODE=prod yarn build:prod && MODE=prod ../../../scripts/ci/retry.sh wdio ./scripts/wdio.sauce.conf.js" }, "devDependencies": { - "@lwc/rollup-plugin": "8.21.2", + "@lwc/rollup-plugin": "8.21.3", "@wdio/cli": "^9.17.1", "@wdio/local-runner": "^9.17.0", "@wdio/mocha-framework": "^9.17.0", @@ -27,7 +27,7 @@ "@wdio/static-server-service": "^9.16.2", "deepmerge": "^4.3.1", "dotenv": "^17.2.1", - "lwc": "8.21.2", + "lwc": "8.21.3", "minimist": "^1.2.8", "webdriverio": "^9.0.7" }, diff --git a/packages/@lwc/integration-types/package.json b/packages/@lwc/integration-types/package.json index 8488d0f46c..9891df3f96 100644 --- a/packages/@lwc/integration-types/package.json +++ b/packages/@lwc/integration-types/package.json @@ -1,7 +1,7 @@ { "name": "@lwc/integration-types", "private": true, - "version": "8.21.2", + "version": "8.21.3", "description": "Type validation for LWC packages", "type": "module", "scripts": { @@ -9,8 +9,8 @@ "playground": "rollup -c src/playground/rollup.config.js --watch" }, "dependencies": { - "@lwc/rollup-plugin": "8.21.2", - "lwc": "8.21.2" + "@lwc/rollup-plugin": "8.21.3", + "lwc": "8.21.3" }, "devDependencies": { "@rollup/plugin-replace": "^6.0.2", diff --git a/packages/@lwc/module-resolver/package.json b/packages/@lwc/module-resolver/package.json index 111702c058..dcdf2a08fd 100644 --- a/packages/@lwc/module-resolver/package.json +++ b/packages/@lwc/module-resolver/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/module-resolver", - "version": "8.21.2", + "version": "8.21.3", "description": "Resolves paths for LWC components", "keywords": [ "lwc" diff --git a/packages/@lwc/perf-benchmarks-components/package.json b/packages/@lwc/perf-benchmarks-components/package.json index 2320692535..56775711a9 100644 --- a/packages/@lwc/perf-benchmarks-components/package.json +++ b/packages/@lwc/perf-benchmarks-components/package.json @@ -1,12 +1,12 @@ { "name": "@lwc/perf-benchmarks-components", - "version": "8.21.2", + "version": "8.21.3", "private": true, "scripts": { "build": "rm -fr dist && rollup -c ./rollup.config.mjs" }, "devDependencies": { - "@lwc/rollup-plugin": "8.21.2" + "@lwc/rollup-plugin": "8.21.3" }, "nx": { "targets": { diff --git a/packages/@lwc/perf-benchmarks/package.json b/packages/@lwc/perf-benchmarks/package.json index 48c97d4721..ee7f90e975 100644 --- a/packages/@lwc/perf-benchmarks/package.json +++ b/packages/@lwc/perf-benchmarks/package.json @@ -1,6 +1,6 @@ { "name": "@lwc/perf-benchmarks", - "version": "8.21.2", + "version": "8.21.3", "private": true, "scripts": { "build": "rm -fr dist && rollup -c ./rollup.config.mjs && node scripts/build.js && ./scripts/fix-deps.sh", @@ -15,11 +15,11 @@ "Don't forget to add these to fix-deps.sh as well." ], "dependencies": { - "@lwc/engine-dom": "8.21.2", - "@lwc/engine-server": "8.21.2", - "@lwc/perf-benchmarks-components": "8.21.2", - "@lwc/ssr-runtime": "8.21.2", - "@lwc/synthetic-shadow": "8.21.2" + "@lwc/engine-dom": "8.21.3", + "@lwc/engine-server": "8.21.3", + "@lwc/perf-benchmarks-components": "8.21.3", + "@lwc/ssr-runtime": "8.21.3", + "@lwc/synthetic-shadow": "8.21.3" }, "devDependencies": { "@best/cli": "^15.0.0", diff --git a/packages/@lwc/rollup-plugin/package.json b/packages/@lwc/rollup-plugin/package.json index fb55bdd757..203917f6aa 100644 --- a/packages/@lwc/rollup-plugin/package.json +++ b/packages/@lwc/rollup-plugin/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/rollup-plugin", - "version": "8.21.2", + "version": "8.21.3", "description": "Rollup plugin to compile LWC", "keywords": [ "lwc" @@ -46,13 +46,13 @@ } }, "dependencies": { - "@lwc/compiler": "8.21.2", - "@lwc/module-resolver": "8.21.2", - "@lwc/shared": "8.21.2", + "@lwc/compiler": "8.21.3", + "@lwc/module-resolver": "8.21.3", + "@lwc/shared": "8.21.3", "@rollup/pluginutils": "~5.2.0" }, "devDependencies": { - "@lwc/errors": "8.21.2" + "@lwc/errors": "8.21.3" }, "peerDependencies": { "rollup": "^1.2.0||^2.0.0||^3.0.0||^4.0.0" diff --git a/packages/@lwc/shared/package.json b/packages/@lwc/shared/package.json index 49e11f61f9..582ff0236a 100644 --- a/packages/@lwc/shared/package.json +++ b/packages/@lwc/shared/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/shared", - "version": "8.21.2", + "version": "8.21.3", "description": "Utilities and methods that are shared across packages", "keywords": [ "lwc" diff --git a/packages/@lwc/signals/package.json b/packages/@lwc/signals/package.json index 7ae9177af0..cfa87db975 100644 --- a/packages/@lwc/signals/package.json +++ b/packages/@lwc/signals/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/signals", - "version": "8.21.2", + "version": "8.21.3", "description": "Provides the interface to interact with reactivity from outside the framework", "keywords": [ "lwc" @@ -46,6 +46,6 @@ } }, "devDependencies": { - "@lwc/shared": "8.21.2" + "@lwc/shared": "8.21.3" } } diff --git a/packages/@lwc/ssr-client-utils/package.json b/packages/@lwc/ssr-client-utils/package.json index 22ced986b2..79d59bf656 100644 --- a/packages/@lwc/ssr-client-utils/package.json +++ b/packages/@lwc/ssr-client-utils/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/ssr-client-utils", - "version": "8.21.2", + "version": "8.21.3", "description": "Client-side complement to @lwc/ssr-compiler", "keywords": [ "lwc", diff --git a/packages/@lwc/ssr-compiler/package.json b/packages/@lwc/ssr-compiler/package.json index 5f9ef28f11..8632e9deab 100644 --- a/packages/@lwc/ssr-compiler/package.json +++ b/packages/@lwc/ssr-compiler/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/ssr-compiler", - "version": "8.21.2", + "version": "8.21.3", "description": "Compile component for use during server-side rendering", "keywords": [ "compiler", @@ -49,9 +49,9 @@ }, "dependencies": { "@babel/types": "7.28.2", - "@lwc/errors": "8.21.2", - "@lwc/shared": "8.21.2", - "@lwc/template-compiler": "8.21.2", + "@lwc/errors": "8.21.3", + "@lwc/shared": "8.21.3", + "@lwc/template-compiler": "8.21.3", "acorn": "8.15.0", "astring": "^1.9.0", "estree-toolkit": "^1.7.13", @@ -59,7 +59,7 @@ "meriyah": "^5.0.0" }, "devDependencies": { - "@lwc/babel-plugin-component": "8.21.2", + "@lwc/babel-plugin-component": "8.21.3", "@types/estree": "^1.0.8" } } diff --git a/packages/@lwc/ssr-runtime/package.json b/packages/@lwc/ssr-runtime/package.json index 59f9bfe542..3e5b7660ac 100644 --- a/packages/@lwc/ssr-runtime/package.json +++ b/packages/@lwc/ssr-runtime/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/ssr-runtime", - "version": "8.21.2", + "version": "8.21.3", "description": "Runtime complement to @lwc/ssr-compiler", "keywords": [ "lwc", @@ -48,10 +48,10 @@ } }, "devDependencies": { - "@lwc/shared": "8.21.2", - "@lwc/engine-core": "8.21.2", - "@lwc/features": "8.21.2", - "@lwc/signals": "8.21.2", + "@lwc/shared": "8.21.3", + "@lwc/engine-core": "8.21.3", + "@lwc/features": "8.21.3", + "@lwc/signals": "8.21.3", "observable-membrane": "2.0.0" } } diff --git a/packages/@lwc/style-compiler/package.json b/packages/@lwc/style-compiler/package.json index 566727566c..6ce842341f 100644 --- a/packages/@lwc/style-compiler/package.json +++ b/packages/@lwc/style-compiler/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/style-compiler", - "version": "8.21.2", + "version": "8.21.3", "description": "Transform style sheet to be consumed by the LWC engine", "keywords": [ "lwc" @@ -46,7 +46,7 @@ } }, "dependencies": { - "@lwc/shared": "8.21.2", + "@lwc/shared": "8.21.3", "postcss": "~8.5.6", "postcss-selector-parser": "~7.1.0", "postcss-value-parser": "~4.2.0" diff --git a/packages/@lwc/synthetic-shadow/package.json b/packages/@lwc/synthetic-shadow/package.json index 41efdb240f..edb61e8806 100644 --- a/packages/@lwc/synthetic-shadow/package.json +++ b/packages/@lwc/synthetic-shadow/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/synthetic-shadow", - "version": "8.21.2", + "version": "8.21.3", "description": "Synthetic Shadow Root for LWC", "keywords": [ "lwc" @@ -46,8 +46,8 @@ } }, "devDependencies": { - "@lwc/features": "8.21.2", - "@lwc/shared": "8.21.2" + "@lwc/features": "8.21.3", + "@lwc/shared": "8.21.3" }, "lwc": { "modules": [ diff --git a/packages/@lwc/template-compiler/package.json b/packages/@lwc/template-compiler/package.json index ab160a0a6e..19cc1289ff 100644 --- a/packages/@lwc/template-compiler/package.json +++ b/packages/@lwc/template-compiler/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/template-compiler", - "version": "8.21.2", + "version": "8.21.3", "description": "Template compiler package", "keywords": [ "lwc" @@ -46,8 +46,8 @@ } }, "dependencies": { - "@lwc/errors": "8.21.2", - "@lwc/shared": "8.21.2", + "@lwc/errors": "8.21.3", + "@lwc/shared": "8.21.3", "acorn": "~8.15.0", "astring": "~1.9.0", "he": "~1.2.0" diff --git a/packages/@lwc/types/package.json b/packages/@lwc/types/package.json index 6ce0c104e5..9fb23747c4 100644 --- a/packages/@lwc/types/package.json +++ b/packages/@lwc/types/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/types", - "version": "8.21.2", + "version": "8.21.3", "keywords": [ "lwc", "types", @@ -32,6 +32,6 @@ "*.d.ts" ], "dependencies": { - "@lwc/engine-core": "8.21.2" + "@lwc/engine-core": "8.21.3" } } diff --git a/packages/@lwc/wire-service/package.json b/packages/@lwc/wire-service/package.json index 168344b0f1..0062162603 100644 --- a/packages/@lwc/wire-service/package.json +++ b/packages/@lwc/wire-service/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/wire-service", - "version": "8.21.2", + "version": "8.21.3", "description": "@wire service", "keywords": [ "lwc" @@ -46,8 +46,8 @@ } }, "devDependencies": { - "@lwc/engine-core": "8.21.2", - "@lwc/shared": "8.21.2" + "@lwc/engine-core": "8.21.3", + "@lwc/shared": "8.21.3" }, "lwc": { "modules": [ diff --git a/packages/lwc/package.json b/packages/lwc/package.json index 6ff12311ae..3fa172ee45 100644 --- a/packages/lwc/package.json +++ b/packages/lwc/package.json @@ -1,6 +1,6 @@ { "name": "lwc", - "version": "8.21.2", + "version": "8.21.3", "description": "Lightning Web Components (LWC)", "homepage": "https://lwc.dev/", "repository": { @@ -21,24 +21,24 @@ "!vitest.config.*" ], "dependencies": { - "@lwc/aria-reflection": "8.21.2", - "@lwc/babel-plugin-component": "8.21.2", - "@lwc/compiler": "8.21.2", - "@lwc/engine-core": "8.21.2", - "@lwc/engine-dom": "8.21.2", - "@lwc/engine-server": "8.21.2", - "@lwc/errors": "8.21.2", - "@lwc/features": "8.21.2", - "@lwc/module-resolver": "8.21.2", - "@lwc/rollup-plugin": "8.21.2", - "@lwc/shared": "8.21.2", - "@lwc/ssr-compiler": "8.21.2", - "@lwc/ssr-runtime": "8.21.2", - "@lwc/style-compiler": "8.21.2", - "@lwc/synthetic-shadow": "8.21.2", - "@lwc/template-compiler": "8.21.2", - "@lwc/types": "8.21.2", - "@lwc/wire-service": "8.21.2" + "@lwc/aria-reflection": "8.21.3", + "@lwc/babel-plugin-component": "8.21.3", + "@lwc/compiler": "8.21.3", + "@lwc/engine-core": "8.21.3", + "@lwc/engine-dom": "8.21.3", + "@lwc/engine-server": "8.21.3", + "@lwc/errors": "8.21.3", + "@lwc/features": "8.21.3", + "@lwc/module-resolver": "8.21.3", + "@lwc/rollup-plugin": "8.21.3", + "@lwc/shared": "8.21.3", + "@lwc/ssr-compiler": "8.21.3", + "@lwc/ssr-runtime": "8.21.3", + "@lwc/style-compiler": "8.21.3", + "@lwc/synthetic-shadow": "8.21.3", + "@lwc/template-compiler": "8.21.3", + "@lwc/types": "8.21.3", + "@lwc/wire-service": "8.21.3" }, "lwc": { "modules": [ diff --git a/playground/package.json b/playground/package.json index bca7c39af6..0eac58ff2c 100644 --- a/playground/package.json +++ b/playground/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@lwc/playground", - "version": "8.21.2", + "version": "8.21.3", "type": "module", "description": "Playground project to experiment with LWC.", "scripts": { @@ -9,10 +9,10 @@ "build": "NODE_ENV=production rollup -c" }, "devDependencies": { - "@lwc/rollup-plugin": "8.21.2", + "@lwc/rollup-plugin": "8.21.3", "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-typescript": "^12.1.4", - "lwc": "8.21.2", + "lwc": "8.21.3", "rollup": "^4.48.1", "rollup-plugin-livereload": "^2.0.5", "rollup-plugin-serve": "^3.0.0", From 1f9363b97ba9d6774e8f3ca502816c2ff59c6304 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 28 Aug 2025 21:53:38 +0000 Subject: [PATCH 09/35] chore: release v8.21.4 --- package.json | 2 +- packages/@lwc/aria-reflection/package.json | 2 +- .../@lwc/babel-plugin-component/package.json | 6 +-- packages/@lwc/compiler/package.json | 14 +++---- packages/@lwc/engine-core/package.json | 8 ++-- packages/@lwc/engine-dom/package.json | 10 ++--- packages/@lwc/engine-server/package.json | 12 +++--- packages/@lwc/errors/package.json | 2 +- packages/@lwc/features/package.json | 4 +- packages/@lwc/integration-karma/package.json | 12 +++--- .../@lwc/integration-not-karma/package.json | 12 +++--- packages/@lwc/integration-tests/package.json | 6 +-- packages/@lwc/integration-types/package.json | 6 +-- packages/@lwc/module-resolver/package.json | 2 +- .../perf-benchmarks-components/package.json | 4 +- packages/@lwc/perf-benchmarks/package.json | 12 +++--- packages/@lwc/rollup-plugin/package.json | 10 ++--- packages/@lwc/shared/package.json | 2 +- packages/@lwc/signals/package.json | 4 +- packages/@lwc/ssr-client-utils/package.json | 2 +- packages/@lwc/ssr-compiler/package.json | 10 ++--- packages/@lwc/ssr-runtime/package.json | 10 ++--- packages/@lwc/style-compiler/package.json | 4 +- packages/@lwc/synthetic-shadow/package.json | 6 +-- packages/@lwc/template-compiler/package.json | 6 +-- packages/@lwc/types/package.json | 4 +- packages/@lwc/wire-service/package.json | 6 +-- packages/lwc/package.json | 38 +++++++++---------- playground/package.json | 6 +-- 29 files changed, 111 insertions(+), 111 deletions(-) diff --git a/package.json b/package.json index f021204a89..25e48179a5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lwc-monorepo", - "version": "8.21.3", + "version": "8.21.4", "private": true, "description": "Lightning Web Components", "repository": { diff --git a/packages/@lwc/aria-reflection/package.json b/packages/@lwc/aria-reflection/package.json index e459169b02..44a4d6f863 100644 --- a/packages/@lwc/aria-reflection/package.json +++ b/packages/@lwc/aria-reflection/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/aria-reflection", - "version": "8.21.3", + "version": "8.21.4", "description": "ARIA element reflection polyfill for strings", "keywords": [ "aom", diff --git a/packages/@lwc/babel-plugin-component/package.json b/packages/@lwc/babel-plugin-component/package.json index 959d96b354..bddb33096e 100644 --- a/packages/@lwc/babel-plugin-component/package.json +++ b/packages/@lwc/babel-plugin-component/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/babel-plugin-component", - "version": "8.21.3", + "version": "8.21.4", "description": "Babel plugin to transform a LWC module", "keywords": [ "lwc" @@ -47,8 +47,8 @@ }, "dependencies": { "@babel/helper-module-imports": "7.27.1", - "@lwc/errors": "8.21.3", - "@lwc/shared": "8.21.3", + "@lwc/errors": "8.21.4", + "@lwc/shared": "8.21.4", "line-column": "~1.0.2" }, "devDependencies": { diff --git a/packages/@lwc/compiler/package.json b/packages/@lwc/compiler/package.json index ab5785ad22..968ee19700 100644 --- a/packages/@lwc/compiler/package.json +++ b/packages/@lwc/compiler/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/compiler", - "version": "8.21.3", + "version": "8.21.4", "description": "LWC compiler", "keywords": [ "lwc" @@ -52,11 +52,11 @@ "@babel/plugin-transform-class-properties": "7.27.1", "@babel/plugin-transform-object-rest-spread": "7.28.0", "@locker/babel-plugin-transform-unforgeables": "0.22.0", - "@lwc/babel-plugin-component": "8.21.3", - "@lwc/errors": "8.21.3", - "@lwc/shared": "8.21.3", - "@lwc/ssr-compiler": "8.21.3", - "@lwc/style-compiler": "8.21.3", - "@lwc/template-compiler": "8.21.3" + "@lwc/babel-plugin-component": "8.21.4", + "@lwc/errors": "8.21.4", + "@lwc/shared": "8.21.4", + "@lwc/ssr-compiler": "8.21.4", + "@lwc/style-compiler": "8.21.4", + "@lwc/template-compiler": "8.21.4" } } diff --git a/packages/@lwc/engine-core/package.json b/packages/@lwc/engine-core/package.json index 4f9f2ade4a..8ac24b691e 100644 --- a/packages/@lwc/engine-core/package.json +++ b/packages/@lwc/engine-core/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/engine-core", - "version": "8.21.3", + "version": "8.21.4", "description": "Core LWC engine APIs.", "keywords": [ "lwc" @@ -46,9 +46,9 @@ } }, "dependencies": { - "@lwc/features": "8.21.3", - "@lwc/shared": "8.21.3", - "@lwc/signals": "8.21.3" + "@lwc/features": "8.21.4", + "@lwc/shared": "8.21.4", + "@lwc/signals": "8.21.4" }, "devDependencies": { "observable-membrane": "2.0.0" diff --git a/packages/@lwc/engine-dom/package.json b/packages/@lwc/engine-dom/package.json index a6632a370d..f104d01163 100644 --- a/packages/@lwc/engine-dom/package.json +++ b/packages/@lwc/engine-dom/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/engine-dom", - "version": "8.21.3", + "version": "8.21.4", "description": "Renders LWC components in a DOM environment.", "keywords": [ "lwc" @@ -46,10 +46,10 @@ } }, "devDependencies": { - "@lwc/engine-core": "8.21.3", - "@lwc/shared": "8.21.3", - "@lwc/features": "8.21.3", - "@lwc/signals": "8.21.3" + "@lwc/engine-core": "8.21.4", + "@lwc/shared": "8.21.4", + "@lwc/features": "8.21.4", + "@lwc/signals": "8.21.4" }, "lwc": { "modules": [ diff --git a/packages/@lwc/engine-server/package.json b/packages/@lwc/engine-server/package.json index d6884bfe80..abb14a6314 100644 --- a/packages/@lwc/engine-server/package.json +++ b/packages/@lwc/engine-server/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/engine-server", - "version": "8.21.3", + "version": "8.21.4", "description": "Renders LWC components in a server environment.", "keywords": [ "lwc" @@ -46,11 +46,11 @@ } }, "devDependencies": { - "@lwc/engine-core": "8.21.3", - "@lwc/rollup-plugin": "8.21.3", - "@lwc/shared": "8.21.3", - "@lwc/features": "8.21.3", - "@lwc/signals": "8.21.3", + "@lwc/engine-core": "8.21.4", + "@lwc/rollup-plugin": "8.21.4", + "@lwc/shared": "8.21.4", + "@lwc/features": "8.21.4", + "@lwc/signals": "8.21.4", "@rollup/plugin-virtual": "^3.0.2", "parse5": "^8.0.0" } diff --git a/packages/@lwc/errors/package.json b/packages/@lwc/errors/package.json index fa8f7d3191..d39e15af1e 100644 --- a/packages/@lwc/errors/package.json +++ b/packages/@lwc/errors/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/errors", - "version": "8.21.3", + "version": "8.21.4", "description": "LWC Error Utilities", "keywords": [ "lwc" diff --git a/packages/@lwc/features/package.json b/packages/@lwc/features/package.json index 30952af76f..b3e7d62b74 100644 --- a/packages/@lwc/features/package.json +++ b/packages/@lwc/features/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/features", - "version": "8.21.3", + "version": "8.21.4", "description": "LWC Features Flags", "keywords": [ "lwc" @@ -46,6 +46,6 @@ } }, "dependencies": { - "@lwc/shared": "8.21.3" + "@lwc/shared": "8.21.4" } } diff --git a/packages/@lwc/integration-karma/package.json b/packages/@lwc/integration-karma/package.json index 93b858fea2..625f6e3149 100644 --- a/packages/@lwc/integration-karma/package.json +++ b/packages/@lwc/integration-karma/package.json @@ -1,7 +1,7 @@ { "name": "@lwc/integration-karma", "private": true, - "version": "8.21.3", + "version": "8.21.4", "scripts": { "start": "KARMA_MODE=watch karma start ./scripts/karma-configs/test/local.js", "test": "karma start ./scripts/karma-configs/test/local.js --single-run", @@ -21,11 +21,11 @@ "karma-sauce-launcher-fix-firefox": "using a fork to work around https://github.com/karma-runner/karma-sauce-launcher/issues/275" }, "devDependencies": { - "@lwc/compiler": "8.21.3", - "@lwc/engine-dom": "8.21.3", - "@lwc/engine-server": "8.21.3", - "@lwc/rollup-plugin": "8.21.3", - "@lwc/synthetic-shadow": "8.21.3", + "@lwc/compiler": "8.21.4", + "@lwc/engine-dom": "8.21.4", + "@lwc/engine-server": "8.21.4", + "@lwc/rollup-plugin": "8.21.4", + "@lwc/synthetic-shadow": "8.21.4", "@types/jasmine": "^5.1.9", "chokidar": "^4.0.3", "istanbul-lib-coverage": "^3.2.2", diff --git a/packages/@lwc/integration-not-karma/package.json b/packages/@lwc/integration-not-karma/package.json index 1e2c5f1986..f886ef740c 100644 --- a/packages/@lwc/integration-not-karma/package.json +++ b/packages/@lwc/integration-not-karma/package.json @@ -1,18 +1,18 @@ { "name": "@lwc/integration-not-karma", "private": true, - "version": "8.21.3", + "version": "8.21.4", "scripts": { "start": "web-test-runner --manual", "test": "web-test-runner --config configs/integration.mjs", "test:hydration": "web-test-runner --config configs/hydration.mjs" }, "devDependencies": { - "@lwc/compiler": "8.21.3", - "@lwc/engine-dom": "8.21.3", - "@lwc/engine-server": "8.21.3", - "@lwc/rollup-plugin": "8.21.3", - "@lwc/synthetic-shadow": "8.21.3", + "@lwc/compiler": "8.21.4", + "@lwc/engine-dom": "8.21.4", + "@lwc/engine-server": "8.21.4", + "@lwc/rollup-plugin": "8.21.4", + "@lwc/synthetic-shadow": "8.21.4", "@types/chai": "^5.2.2", "@types/jasmine": "^5.1.9", "@web/dev-server-import-maps": "^0.2.1", diff --git a/packages/@lwc/integration-tests/package.json b/packages/@lwc/integration-tests/package.json index 90a350da52..0b609f3775 100644 --- a/packages/@lwc/integration-tests/package.json +++ b/packages/@lwc/integration-tests/package.json @@ -1,7 +1,7 @@ { "name": "@lwc/integration-tests", "private": true, - "version": "8.21.3", + "version": "8.21.4", "scripts": { "build": "node scripts/build.js", "build:dev": "MODE=dev yarn build", @@ -18,7 +18,7 @@ "sauce:prod:ci": "MODE=prod yarn build:prod && MODE=prod ../../../scripts/ci/retry.sh wdio ./scripts/wdio.sauce.conf.js" }, "devDependencies": { - "@lwc/rollup-plugin": "8.21.3", + "@lwc/rollup-plugin": "8.21.4", "@wdio/cli": "^9.17.1", "@wdio/local-runner": "^9.17.0", "@wdio/mocha-framework": "^9.17.0", @@ -27,7 +27,7 @@ "@wdio/static-server-service": "^9.16.2", "deepmerge": "^4.3.1", "dotenv": "^17.2.1", - "lwc": "8.21.3", + "lwc": "8.21.4", "minimist": "^1.2.8", "webdriverio": "^9.0.7" }, diff --git a/packages/@lwc/integration-types/package.json b/packages/@lwc/integration-types/package.json index 9891df3f96..5132a42790 100644 --- a/packages/@lwc/integration-types/package.json +++ b/packages/@lwc/integration-types/package.json @@ -1,7 +1,7 @@ { "name": "@lwc/integration-types", "private": true, - "version": "8.21.3", + "version": "8.21.4", "description": "Type validation for LWC packages", "type": "module", "scripts": { @@ -9,8 +9,8 @@ "playground": "rollup -c src/playground/rollup.config.js --watch" }, "dependencies": { - "@lwc/rollup-plugin": "8.21.3", - "lwc": "8.21.3" + "@lwc/rollup-plugin": "8.21.4", + "lwc": "8.21.4" }, "devDependencies": { "@rollup/plugin-replace": "^6.0.2", diff --git a/packages/@lwc/module-resolver/package.json b/packages/@lwc/module-resolver/package.json index dcdf2a08fd..f1c7ac0867 100644 --- a/packages/@lwc/module-resolver/package.json +++ b/packages/@lwc/module-resolver/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/module-resolver", - "version": "8.21.3", + "version": "8.21.4", "description": "Resolves paths for LWC components", "keywords": [ "lwc" diff --git a/packages/@lwc/perf-benchmarks-components/package.json b/packages/@lwc/perf-benchmarks-components/package.json index 56775711a9..e87ced0abf 100644 --- a/packages/@lwc/perf-benchmarks-components/package.json +++ b/packages/@lwc/perf-benchmarks-components/package.json @@ -1,12 +1,12 @@ { "name": "@lwc/perf-benchmarks-components", - "version": "8.21.3", + "version": "8.21.4", "private": true, "scripts": { "build": "rm -fr dist && rollup -c ./rollup.config.mjs" }, "devDependencies": { - "@lwc/rollup-plugin": "8.21.3" + "@lwc/rollup-plugin": "8.21.4" }, "nx": { "targets": { diff --git a/packages/@lwc/perf-benchmarks/package.json b/packages/@lwc/perf-benchmarks/package.json index ee7f90e975..616f59f5a4 100644 --- a/packages/@lwc/perf-benchmarks/package.json +++ b/packages/@lwc/perf-benchmarks/package.json @@ -1,6 +1,6 @@ { "name": "@lwc/perf-benchmarks", - "version": "8.21.3", + "version": "8.21.4", "private": true, "scripts": { "build": "rm -fr dist && rollup -c ./rollup.config.mjs && node scripts/build.js && ./scripts/fix-deps.sh", @@ -15,11 +15,11 @@ "Don't forget to add these to fix-deps.sh as well." ], "dependencies": { - "@lwc/engine-dom": "8.21.3", - "@lwc/engine-server": "8.21.3", - "@lwc/perf-benchmarks-components": "8.21.3", - "@lwc/ssr-runtime": "8.21.3", - "@lwc/synthetic-shadow": "8.21.3" + "@lwc/engine-dom": "8.21.4", + "@lwc/engine-server": "8.21.4", + "@lwc/perf-benchmarks-components": "8.21.4", + "@lwc/ssr-runtime": "8.21.4", + "@lwc/synthetic-shadow": "8.21.4" }, "devDependencies": { "@best/cli": "^15.0.0", diff --git a/packages/@lwc/rollup-plugin/package.json b/packages/@lwc/rollup-plugin/package.json index 203917f6aa..dbb588125c 100644 --- a/packages/@lwc/rollup-plugin/package.json +++ b/packages/@lwc/rollup-plugin/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/rollup-plugin", - "version": "8.21.3", + "version": "8.21.4", "description": "Rollup plugin to compile LWC", "keywords": [ "lwc" @@ -46,13 +46,13 @@ } }, "dependencies": { - "@lwc/compiler": "8.21.3", - "@lwc/module-resolver": "8.21.3", - "@lwc/shared": "8.21.3", + "@lwc/compiler": "8.21.4", + "@lwc/module-resolver": "8.21.4", + "@lwc/shared": "8.21.4", "@rollup/pluginutils": "~5.2.0" }, "devDependencies": { - "@lwc/errors": "8.21.3" + "@lwc/errors": "8.21.4" }, "peerDependencies": { "rollup": "^1.2.0||^2.0.0||^3.0.0||^4.0.0" diff --git a/packages/@lwc/shared/package.json b/packages/@lwc/shared/package.json index 582ff0236a..9f18ab2176 100644 --- a/packages/@lwc/shared/package.json +++ b/packages/@lwc/shared/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/shared", - "version": "8.21.3", + "version": "8.21.4", "description": "Utilities and methods that are shared across packages", "keywords": [ "lwc" diff --git a/packages/@lwc/signals/package.json b/packages/@lwc/signals/package.json index cfa87db975..dab9a47b70 100644 --- a/packages/@lwc/signals/package.json +++ b/packages/@lwc/signals/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/signals", - "version": "8.21.3", + "version": "8.21.4", "description": "Provides the interface to interact with reactivity from outside the framework", "keywords": [ "lwc" @@ -46,6 +46,6 @@ } }, "devDependencies": { - "@lwc/shared": "8.21.3" + "@lwc/shared": "8.21.4" } } diff --git a/packages/@lwc/ssr-client-utils/package.json b/packages/@lwc/ssr-client-utils/package.json index 79d59bf656..be551da125 100644 --- a/packages/@lwc/ssr-client-utils/package.json +++ b/packages/@lwc/ssr-client-utils/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/ssr-client-utils", - "version": "8.21.3", + "version": "8.21.4", "description": "Client-side complement to @lwc/ssr-compiler", "keywords": [ "lwc", diff --git a/packages/@lwc/ssr-compiler/package.json b/packages/@lwc/ssr-compiler/package.json index 8632e9deab..b8e213525c 100644 --- a/packages/@lwc/ssr-compiler/package.json +++ b/packages/@lwc/ssr-compiler/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/ssr-compiler", - "version": "8.21.3", + "version": "8.21.4", "description": "Compile component for use during server-side rendering", "keywords": [ "compiler", @@ -49,9 +49,9 @@ }, "dependencies": { "@babel/types": "7.28.2", - "@lwc/errors": "8.21.3", - "@lwc/shared": "8.21.3", - "@lwc/template-compiler": "8.21.3", + "@lwc/errors": "8.21.4", + "@lwc/shared": "8.21.4", + "@lwc/template-compiler": "8.21.4", "acorn": "8.15.0", "astring": "^1.9.0", "estree-toolkit": "^1.7.13", @@ -59,7 +59,7 @@ "meriyah": "^5.0.0" }, "devDependencies": { - "@lwc/babel-plugin-component": "8.21.3", + "@lwc/babel-plugin-component": "8.21.4", "@types/estree": "^1.0.8" } } diff --git a/packages/@lwc/ssr-runtime/package.json b/packages/@lwc/ssr-runtime/package.json index 3e5b7660ac..9be0d9bec6 100644 --- a/packages/@lwc/ssr-runtime/package.json +++ b/packages/@lwc/ssr-runtime/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/ssr-runtime", - "version": "8.21.3", + "version": "8.21.4", "description": "Runtime complement to @lwc/ssr-compiler", "keywords": [ "lwc", @@ -48,10 +48,10 @@ } }, "devDependencies": { - "@lwc/shared": "8.21.3", - "@lwc/engine-core": "8.21.3", - "@lwc/features": "8.21.3", - "@lwc/signals": "8.21.3", + "@lwc/shared": "8.21.4", + "@lwc/engine-core": "8.21.4", + "@lwc/features": "8.21.4", + "@lwc/signals": "8.21.4", "observable-membrane": "2.0.0" } } diff --git a/packages/@lwc/style-compiler/package.json b/packages/@lwc/style-compiler/package.json index 6ce842341f..f9683770d9 100644 --- a/packages/@lwc/style-compiler/package.json +++ b/packages/@lwc/style-compiler/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/style-compiler", - "version": "8.21.3", + "version": "8.21.4", "description": "Transform style sheet to be consumed by the LWC engine", "keywords": [ "lwc" @@ -46,7 +46,7 @@ } }, "dependencies": { - "@lwc/shared": "8.21.3", + "@lwc/shared": "8.21.4", "postcss": "~8.5.6", "postcss-selector-parser": "~7.1.0", "postcss-value-parser": "~4.2.0" diff --git a/packages/@lwc/synthetic-shadow/package.json b/packages/@lwc/synthetic-shadow/package.json index edb61e8806..9cebbd87d1 100644 --- a/packages/@lwc/synthetic-shadow/package.json +++ b/packages/@lwc/synthetic-shadow/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/synthetic-shadow", - "version": "8.21.3", + "version": "8.21.4", "description": "Synthetic Shadow Root for LWC", "keywords": [ "lwc" @@ -46,8 +46,8 @@ } }, "devDependencies": { - "@lwc/features": "8.21.3", - "@lwc/shared": "8.21.3" + "@lwc/features": "8.21.4", + "@lwc/shared": "8.21.4" }, "lwc": { "modules": [ diff --git a/packages/@lwc/template-compiler/package.json b/packages/@lwc/template-compiler/package.json index 19cc1289ff..9cea28ad5c 100644 --- a/packages/@lwc/template-compiler/package.json +++ b/packages/@lwc/template-compiler/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/template-compiler", - "version": "8.21.3", + "version": "8.21.4", "description": "Template compiler package", "keywords": [ "lwc" @@ -46,8 +46,8 @@ } }, "dependencies": { - "@lwc/errors": "8.21.3", - "@lwc/shared": "8.21.3", + "@lwc/errors": "8.21.4", + "@lwc/shared": "8.21.4", "acorn": "~8.15.0", "astring": "~1.9.0", "he": "~1.2.0" diff --git a/packages/@lwc/types/package.json b/packages/@lwc/types/package.json index 9fb23747c4..ec12f08124 100644 --- a/packages/@lwc/types/package.json +++ b/packages/@lwc/types/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/types", - "version": "8.21.3", + "version": "8.21.4", "keywords": [ "lwc", "types", @@ -32,6 +32,6 @@ "*.d.ts" ], "dependencies": { - "@lwc/engine-core": "8.21.3" + "@lwc/engine-core": "8.21.4" } } diff --git a/packages/@lwc/wire-service/package.json b/packages/@lwc/wire-service/package.json index 0062162603..401061bb4f 100644 --- a/packages/@lwc/wire-service/package.json +++ b/packages/@lwc/wire-service/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/wire-service", - "version": "8.21.3", + "version": "8.21.4", "description": "@wire service", "keywords": [ "lwc" @@ -46,8 +46,8 @@ } }, "devDependencies": { - "@lwc/engine-core": "8.21.3", - "@lwc/shared": "8.21.3" + "@lwc/engine-core": "8.21.4", + "@lwc/shared": "8.21.4" }, "lwc": { "modules": [ diff --git a/packages/lwc/package.json b/packages/lwc/package.json index 3fa172ee45..16c5cfb7b3 100644 --- a/packages/lwc/package.json +++ b/packages/lwc/package.json @@ -1,6 +1,6 @@ { "name": "lwc", - "version": "8.21.3", + "version": "8.21.4", "description": "Lightning Web Components (LWC)", "homepage": "https://lwc.dev/", "repository": { @@ -21,24 +21,24 @@ "!vitest.config.*" ], "dependencies": { - "@lwc/aria-reflection": "8.21.3", - "@lwc/babel-plugin-component": "8.21.3", - "@lwc/compiler": "8.21.3", - "@lwc/engine-core": "8.21.3", - "@lwc/engine-dom": "8.21.3", - "@lwc/engine-server": "8.21.3", - "@lwc/errors": "8.21.3", - "@lwc/features": "8.21.3", - "@lwc/module-resolver": "8.21.3", - "@lwc/rollup-plugin": "8.21.3", - "@lwc/shared": "8.21.3", - "@lwc/ssr-compiler": "8.21.3", - "@lwc/ssr-runtime": "8.21.3", - "@lwc/style-compiler": "8.21.3", - "@lwc/synthetic-shadow": "8.21.3", - "@lwc/template-compiler": "8.21.3", - "@lwc/types": "8.21.3", - "@lwc/wire-service": "8.21.3" + "@lwc/aria-reflection": "8.21.4", + "@lwc/babel-plugin-component": "8.21.4", + "@lwc/compiler": "8.21.4", + "@lwc/engine-core": "8.21.4", + "@lwc/engine-dom": "8.21.4", + "@lwc/engine-server": "8.21.4", + "@lwc/errors": "8.21.4", + "@lwc/features": "8.21.4", + "@lwc/module-resolver": "8.21.4", + "@lwc/rollup-plugin": "8.21.4", + "@lwc/shared": "8.21.4", + "@lwc/ssr-compiler": "8.21.4", + "@lwc/ssr-runtime": "8.21.4", + "@lwc/style-compiler": "8.21.4", + "@lwc/synthetic-shadow": "8.21.4", + "@lwc/template-compiler": "8.21.4", + "@lwc/types": "8.21.4", + "@lwc/wire-service": "8.21.4" }, "lwc": { "modules": [ diff --git a/playground/package.json b/playground/package.json index 0eac58ff2c..85765a69fc 100644 --- a/playground/package.json +++ b/playground/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@lwc/playground", - "version": "8.21.3", + "version": "8.21.4", "type": "module", "description": "Playground project to experiment with LWC.", "scripts": { @@ -9,10 +9,10 @@ "build": "NODE_ENV=production rollup -c" }, "devDependencies": { - "@lwc/rollup-plugin": "8.21.3", + "@lwc/rollup-plugin": "8.21.4", "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-typescript": "^12.1.4", - "lwc": "8.21.3", + "lwc": "8.21.4", "rollup": "^4.48.1", "rollup-plugin-livereload": "^2.0.5", "rollup-plugin-serve": "^3.0.0", From 8cd44350b04c761cd7670d758b887d0ff8936100 Mon Sep 17 00:00:00 2001 From: rax-it Date: Thu, 28 Aug 2025 15:06:42 -0700 Subject: [PATCH 10/35] chore: gh action to force using npm registry (#5471) --- .github/workflows/release.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4638fca6df..ddf8f533bb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -79,6 +79,11 @@ jobs: - name: Publish to npm env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_CONFIG_REGISTRY: https://registry.npmjs.org + NPM_CONFIG_ALWAYS_AUTH: 'true' run: | + # Force registry + token for both npm and yarn + printf "registry=https://registry.npmjs.org\n//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}\nalways-auth=true\n" > ~/.npmrc + TAG=$([ "$GITHUB_REF_NAME" = "master" ] && echo latest || echo "$GITHUB_REF_NAME") - yarn nx release publish --yes --registry https://registry.npmjs.org --tag "$TAG" + yarn nx release publish --yes --tag "$TAG" From bd62e67e7a38eb04266e7d418f1101ca861b6a10 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 28 Aug 2025 22:08:51 +0000 Subject: [PATCH 11/35] chore: release v8.21.5 --- package.json | 2 +- packages/@lwc/aria-reflection/package.json | 2 +- .../@lwc/babel-plugin-component/package.json | 6 +-- packages/@lwc/compiler/package.json | 14 +++---- packages/@lwc/engine-core/package.json | 8 ++-- packages/@lwc/engine-dom/package.json | 10 ++--- packages/@lwc/engine-server/package.json | 12 +++--- packages/@lwc/errors/package.json | 2 +- packages/@lwc/features/package.json | 4 +- packages/@lwc/integration-karma/package.json | 12 +++--- .../@lwc/integration-not-karma/package.json | 12 +++--- packages/@lwc/integration-tests/package.json | 6 +-- packages/@lwc/integration-types/package.json | 6 +-- packages/@lwc/module-resolver/package.json | 2 +- .../perf-benchmarks-components/package.json | 4 +- packages/@lwc/perf-benchmarks/package.json | 12 +++--- packages/@lwc/rollup-plugin/package.json | 10 ++--- packages/@lwc/shared/package.json | 2 +- packages/@lwc/signals/package.json | 4 +- packages/@lwc/ssr-client-utils/package.json | 2 +- packages/@lwc/ssr-compiler/package.json | 10 ++--- packages/@lwc/ssr-runtime/package.json | 10 ++--- packages/@lwc/style-compiler/package.json | 4 +- packages/@lwc/synthetic-shadow/package.json | 6 +-- packages/@lwc/template-compiler/package.json | 6 +-- packages/@lwc/types/package.json | 4 +- packages/@lwc/wire-service/package.json | 6 +-- packages/lwc/package.json | 38 +++++++++---------- playground/package.json | 6 +-- 29 files changed, 111 insertions(+), 111 deletions(-) diff --git a/package.json b/package.json index 25e48179a5..0bfaf1a0fb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lwc-monorepo", - "version": "8.21.4", + "version": "8.21.5", "private": true, "description": "Lightning Web Components", "repository": { diff --git a/packages/@lwc/aria-reflection/package.json b/packages/@lwc/aria-reflection/package.json index 44a4d6f863..b9ba3f3d09 100644 --- a/packages/@lwc/aria-reflection/package.json +++ b/packages/@lwc/aria-reflection/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/aria-reflection", - "version": "8.21.4", + "version": "8.21.5", "description": "ARIA element reflection polyfill for strings", "keywords": [ "aom", diff --git a/packages/@lwc/babel-plugin-component/package.json b/packages/@lwc/babel-plugin-component/package.json index bddb33096e..a0284dca94 100644 --- a/packages/@lwc/babel-plugin-component/package.json +++ b/packages/@lwc/babel-plugin-component/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/babel-plugin-component", - "version": "8.21.4", + "version": "8.21.5", "description": "Babel plugin to transform a LWC module", "keywords": [ "lwc" @@ -47,8 +47,8 @@ }, "dependencies": { "@babel/helper-module-imports": "7.27.1", - "@lwc/errors": "8.21.4", - "@lwc/shared": "8.21.4", + "@lwc/errors": "8.21.5", + "@lwc/shared": "8.21.5", "line-column": "~1.0.2" }, "devDependencies": { diff --git a/packages/@lwc/compiler/package.json b/packages/@lwc/compiler/package.json index 968ee19700..2175a31a0b 100644 --- a/packages/@lwc/compiler/package.json +++ b/packages/@lwc/compiler/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/compiler", - "version": "8.21.4", + "version": "8.21.5", "description": "LWC compiler", "keywords": [ "lwc" @@ -52,11 +52,11 @@ "@babel/plugin-transform-class-properties": "7.27.1", "@babel/plugin-transform-object-rest-spread": "7.28.0", "@locker/babel-plugin-transform-unforgeables": "0.22.0", - "@lwc/babel-plugin-component": "8.21.4", - "@lwc/errors": "8.21.4", - "@lwc/shared": "8.21.4", - "@lwc/ssr-compiler": "8.21.4", - "@lwc/style-compiler": "8.21.4", - "@lwc/template-compiler": "8.21.4" + "@lwc/babel-plugin-component": "8.21.5", + "@lwc/errors": "8.21.5", + "@lwc/shared": "8.21.5", + "@lwc/ssr-compiler": "8.21.5", + "@lwc/style-compiler": "8.21.5", + "@lwc/template-compiler": "8.21.5" } } diff --git a/packages/@lwc/engine-core/package.json b/packages/@lwc/engine-core/package.json index 8ac24b691e..45fbbe311d 100644 --- a/packages/@lwc/engine-core/package.json +++ b/packages/@lwc/engine-core/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/engine-core", - "version": "8.21.4", + "version": "8.21.5", "description": "Core LWC engine APIs.", "keywords": [ "lwc" @@ -46,9 +46,9 @@ } }, "dependencies": { - "@lwc/features": "8.21.4", - "@lwc/shared": "8.21.4", - "@lwc/signals": "8.21.4" + "@lwc/features": "8.21.5", + "@lwc/shared": "8.21.5", + "@lwc/signals": "8.21.5" }, "devDependencies": { "observable-membrane": "2.0.0" diff --git a/packages/@lwc/engine-dom/package.json b/packages/@lwc/engine-dom/package.json index f104d01163..17c87dfd5f 100644 --- a/packages/@lwc/engine-dom/package.json +++ b/packages/@lwc/engine-dom/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/engine-dom", - "version": "8.21.4", + "version": "8.21.5", "description": "Renders LWC components in a DOM environment.", "keywords": [ "lwc" @@ -46,10 +46,10 @@ } }, "devDependencies": { - "@lwc/engine-core": "8.21.4", - "@lwc/shared": "8.21.4", - "@lwc/features": "8.21.4", - "@lwc/signals": "8.21.4" + "@lwc/engine-core": "8.21.5", + "@lwc/shared": "8.21.5", + "@lwc/features": "8.21.5", + "@lwc/signals": "8.21.5" }, "lwc": { "modules": [ diff --git a/packages/@lwc/engine-server/package.json b/packages/@lwc/engine-server/package.json index abb14a6314..0a8160f72d 100644 --- a/packages/@lwc/engine-server/package.json +++ b/packages/@lwc/engine-server/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/engine-server", - "version": "8.21.4", + "version": "8.21.5", "description": "Renders LWC components in a server environment.", "keywords": [ "lwc" @@ -46,11 +46,11 @@ } }, "devDependencies": { - "@lwc/engine-core": "8.21.4", - "@lwc/rollup-plugin": "8.21.4", - "@lwc/shared": "8.21.4", - "@lwc/features": "8.21.4", - "@lwc/signals": "8.21.4", + "@lwc/engine-core": "8.21.5", + "@lwc/rollup-plugin": "8.21.5", + "@lwc/shared": "8.21.5", + "@lwc/features": "8.21.5", + "@lwc/signals": "8.21.5", "@rollup/plugin-virtual": "^3.0.2", "parse5": "^8.0.0" } diff --git a/packages/@lwc/errors/package.json b/packages/@lwc/errors/package.json index d39e15af1e..7a4af7131f 100644 --- a/packages/@lwc/errors/package.json +++ b/packages/@lwc/errors/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/errors", - "version": "8.21.4", + "version": "8.21.5", "description": "LWC Error Utilities", "keywords": [ "lwc" diff --git a/packages/@lwc/features/package.json b/packages/@lwc/features/package.json index b3e7d62b74..b5ee054fa8 100644 --- a/packages/@lwc/features/package.json +++ b/packages/@lwc/features/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/features", - "version": "8.21.4", + "version": "8.21.5", "description": "LWC Features Flags", "keywords": [ "lwc" @@ -46,6 +46,6 @@ } }, "dependencies": { - "@lwc/shared": "8.21.4" + "@lwc/shared": "8.21.5" } } diff --git a/packages/@lwc/integration-karma/package.json b/packages/@lwc/integration-karma/package.json index 625f6e3149..424b1c25c2 100644 --- a/packages/@lwc/integration-karma/package.json +++ b/packages/@lwc/integration-karma/package.json @@ -1,7 +1,7 @@ { "name": "@lwc/integration-karma", "private": true, - "version": "8.21.4", + "version": "8.21.5", "scripts": { "start": "KARMA_MODE=watch karma start ./scripts/karma-configs/test/local.js", "test": "karma start ./scripts/karma-configs/test/local.js --single-run", @@ -21,11 +21,11 @@ "karma-sauce-launcher-fix-firefox": "using a fork to work around https://github.com/karma-runner/karma-sauce-launcher/issues/275" }, "devDependencies": { - "@lwc/compiler": "8.21.4", - "@lwc/engine-dom": "8.21.4", - "@lwc/engine-server": "8.21.4", - "@lwc/rollup-plugin": "8.21.4", - "@lwc/synthetic-shadow": "8.21.4", + "@lwc/compiler": "8.21.5", + "@lwc/engine-dom": "8.21.5", + "@lwc/engine-server": "8.21.5", + "@lwc/rollup-plugin": "8.21.5", + "@lwc/synthetic-shadow": "8.21.5", "@types/jasmine": "^5.1.9", "chokidar": "^4.0.3", "istanbul-lib-coverage": "^3.2.2", diff --git a/packages/@lwc/integration-not-karma/package.json b/packages/@lwc/integration-not-karma/package.json index f886ef740c..e566a2bb71 100644 --- a/packages/@lwc/integration-not-karma/package.json +++ b/packages/@lwc/integration-not-karma/package.json @@ -1,18 +1,18 @@ { "name": "@lwc/integration-not-karma", "private": true, - "version": "8.21.4", + "version": "8.21.5", "scripts": { "start": "web-test-runner --manual", "test": "web-test-runner --config configs/integration.mjs", "test:hydration": "web-test-runner --config configs/hydration.mjs" }, "devDependencies": { - "@lwc/compiler": "8.21.4", - "@lwc/engine-dom": "8.21.4", - "@lwc/engine-server": "8.21.4", - "@lwc/rollup-plugin": "8.21.4", - "@lwc/synthetic-shadow": "8.21.4", + "@lwc/compiler": "8.21.5", + "@lwc/engine-dom": "8.21.5", + "@lwc/engine-server": "8.21.5", + "@lwc/rollup-plugin": "8.21.5", + "@lwc/synthetic-shadow": "8.21.5", "@types/chai": "^5.2.2", "@types/jasmine": "^5.1.9", "@web/dev-server-import-maps": "^0.2.1", diff --git a/packages/@lwc/integration-tests/package.json b/packages/@lwc/integration-tests/package.json index 0b609f3775..caedb34244 100644 --- a/packages/@lwc/integration-tests/package.json +++ b/packages/@lwc/integration-tests/package.json @@ -1,7 +1,7 @@ { "name": "@lwc/integration-tests", "private": true, - "version": "8.21.4", + "version": "8.21.5", "scripts": { "build": "node scripts/build.js", "build:dev": "MODE=dev yarn build", @@ -18,7 +18,7 @@ "sauce:prod:ci": "MODE=prod yarn build:prod && MODE=prod ../../../scripts/ci/retry.sh wdio ./scripts/wdio.sauce.conf.js" }, "devDependencies": { - "@lwc/rollup-plugin": "8.21.4", + "@lwc/rollup-plugin": "8.21.5", "@wdio/cli": "^9.17.1", "@wdio/local-runner": "^9.17.0", "@wdio/mocha-framework": "^9.17.0", @@ -27,7 +27,7 @@ "@wdio/static-server-service": "^9.16.2", "deepmerge": "^4.3.1", "dotenv": "^17.2.1", - "lwc": "8.21.4", + "lwc": "8.21.5", "minimist": "^1.2.8", "webdriverio": "^9.0.7" }, diff --git a/packages/@lwc/integration-types/package.json b/packages/@lwc/integration-types/package.json index 5132a42790..018dbadba7 100644 --- a/packages/@lwc/integration-types/package.json +++ b/packages/@lwc/integration-types/package.json @@ -1,7 +1,7 @@ { "name": "@lwc/integration-types", "private": true, - "version": "8.21.4", + "version": "8.21.5", "description": "Type validation for LWC packages", "type": "module", "scripts": { @@ -9,8 +9,8 @@ "playground": "rollup -c src/playground/rollup.config.js --watch" }, "dependencies": { - "@lwc/rollup-plugin": "8.21.4", - "lwc": "8.21.4" + "@lwc/rollup-plugin": "8.21.5", + "lwc": "8.21.5" }, "devDependencies": { "@rollup/plugin-replace": "^6.0.2", diff --git a/packages/@lwc/module-resolver/package.json b/packages/@lwc/module-resolver/package.json index f1c7ac0867..16c5758c2c 100644 --- a/packages/@lwc/module-resolver/package.json +++ b/packages/@lwc/module-resolver/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/module-resolver", - "version": "8.21.4", + "version": "8.21.5", "description": "Resolves paths for LWC components", "keywords": [ "lwc" diff --git a/packages/@lwc/perf-benchmarks-components/package.json b/packages/@lwc/perf-benchmarks-components/package.json index e87ced0abf..b4d3b82c97 100644 --- a/packages/@lwc/perf-benchmarks-components/package.json +++ b/packages/@lwc/perf-benchmarks-components/package.json @@ -1,12 +1,12 @@ { "name": "@lwc/perf-benchmarks-components", - "version": "8.21.4", + "version": "8.21.5", "private": true, "scripts": { "build": "rm -fr dist && rollup -c ./rollup.config.mjs" }, "devDependencies": { - "@lwc/rollup-plugin": "8.21.4" + "@lwc/rollup-plugin": "8.21.5" }, "nx": { "targets": { diff --git a/packages/@lwc/perf-benchmarks/package.json b/packages/@lwc/perf-benchmarks/package.json index 616f59f5a4..f1920e1ce7 100644 --- a/packages/@lwc/perf-benchmarks/package.json +++ b/packages/@lwc/perf-benchmarks/package.json @@ -1,6 +1,6 @@ { "name": "@lwc/perf-benchmarks", - "version": "8.21.4", + "version": "8.21.5", "private": true, "scripts": { "build": "rm -fr dist && rollup -c ./rollup.config.mjs && node scripts/build.js && ./scripts/fix-deps.sh", @@ -15,11 +15,11 @@ "Don't forget to add these to fix-deps.sh as well." ], "dependencies": { - "@lwc/engine-dom": "8.21.4", - "@lwc/engine-server": "8.21.4", - "@lwc/perf-benchmarks-components": "8.21.4", - "@lwc/ssr-runtime": "8.21.4", - "@lwc/synthetic-shadow": "8.21.4" + "@lwc/engine-dom": "8.21.5", + "@lwc/engine-server": "8.21.5", + "@lwc/perf-benchmarks-components": "8.21.5", + "@lwc/ssr-runtime": "8.21.5", + "@lwc/synthetic-shadow": "8.21.5" }, "devDependencies": { "@best/cli": "^15.0.0", diff --git a/packages/@lwc/rollup-plugin/package.json b/packages/@lwc/rollup-plugin/package.json index dbb588125c..253b5c55ec 100644 --- a/packages/@lwc/rollup-plugin/package.json +++ b/packages/@lwc/rollup-plugin/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/rollup-plugin", - "version": "8.21.4", + "version": "8.21.5", "description": "Rollup plugin to compile LWC", "keywords": [ "lwc" @@ -46,13 +46,13 @@ } }, "dependencies": { - "@lwc/compiler": "8.21.4", - "@lwc/module-resolver": "8.21.4", - "@lwc/shared": "8.21.4", + "@lwc/compiler": "8.21.5", + "@lwc/module-resolver": "8.21.5", + "@lwc/shared": "8.21.5", "@rollup/pluginutils": "~5.2.0" }, "devDependencies": { - "@lwc/errors": "8.21.4" + "@lwc/errors": "8.21.5" }, "peerDependencies": { "rollup": "^1.2.0||^2.0.0||^3.0.0||^4.0.0" diff --git a/packages/@lwc/shared/package.json b/packages/@lwc/shared/package.json index 9f18ab2176..3f31314a55 100644 --- a/packages/@lwc/shared/package.json +++ b/packages/@lwc/shared/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/shared", - "version": "8.21.4", + "version": "8.21.5", "description": "Utilities and methods that are shared across packages", "keywords": [ "lwc" diff --git a/packages/@lwc/signals/package.json b/packages/@lwc/signals/package.json index dab9a47b70..9d7c4f1666 100644 --- a/packages/@lwc/signals/package.json +++ b/packages/@lwc/signals/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/signals", - "version": "8.21.4", + "version": "8.21.5", "description": "Provides the interface to interact with reactivity from outside the framework", "keywords": [ "lwc" @@ -46,6 +46,6 @@ } }, "devDependencies": { - "@lwc/shared": "8.21.4" + "@lwc/shared": "8.21.5" } } diff --git a/packages/@lwc/ssr-client-utils/package.json b/packages/@lwc/ssr-client-utils/package.json index be551da125..e5ae98a6c7 100644 --- a/packages/@lwc/ssr-client-utils/package.json +++ b/packages/@lwc/ssr-client-utils/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/ssr-client-utils", - "version": "8.21.4", + "version": "8.21.5", "description": "Client-side complement to @lwc/ssr-compiler", "keywords": [ "lwc", diff --git a/packages/@lwc/ssr-compiler/package.json b/packages/@lwc/ssr-compiler/package.json index b8e213525c..021449e192 100644 --- a/packages/@lwc/ssr-compiler/package.json +++ b/packages/@lwc/ssr-compiler/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/ssr-compiler", - "version": "8.21.4", + "version": "8.21.5", "description": "Compile component for use during server-side rendering", "keywords": [ "compiler", @@ -49,9 +49,9 @@ }, "dependencies": { "@babel/types": "7.28.2", - "@lwc/errors": "8.21.4", - "@lwc/shared": "8.21.4", - "@lwc/template-compiler": "8.21.4", + "@lwc/errors": "8.21.5", + "@lwc/shared": "8.21.5", + "@lwc/template-compiler": "8.21.5", "acorn": "8.15.0", "astring": "^1.9.0", "estree-toolkit": "^1.7.13", @@ -59,7 +59,7 @@ "meriyah": "^5.0.0" }, "devDependencies": { - "@lwc/babel-plugin-component": "8.21.4", + "@lwc/babel-plugin-component": "8.21.5", "@types/estree": "^1.0.8" } } diff --git a/packages/@lwc/ssr-runtime/package.json b/packages/@lwc/ssr-runtime/package.json index 9be0d9bec6..b1c48446ba 100644 --- a/packages/@lwc/ssr-runtime/package.json +++ b/packages/@lwc/ssr-runtime/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/ssr-runtime", - "version": "8.21.4", + "version": "8.21.5", "description": "Runtime complement to @lwc/ssr-compiler", "keywords": [ "lwc", @@ -48,10 +48,10 @@ } }, "devDependencies": { - "@lwc/shared": "8.21.4", - "@lwc/engine-core": "8.21.4", - "@lwc/features": "8.21.4", - "@lwc/signals": "8.21.4", + "@lwc/shared": "8.21.5", + "@lwc/engine-core": "8.21.5", + "@lwc/features": "8.21.5", + "@lwc/signals": "8.21.5", "observable-membrane": "2.0.0" } } diff --git a/packages/@lwc/style-compiler/package.json b/packages/@lwc/style-compiler/package.json index f9683770d9..ae9cf2e06e 100644 --- a/packages/@lwc/style-compiler/package.json +++ b/packages/@lwc/style-compiler/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/style-compiler", - "version": "8.21.4", + "version": "8.21.5", "description": "Transform style sheet to be consumed by the LWC engine", "keywords": [ "lwc" @@ -46,7 +46,7 @@ } }, "dependencies": { - "@lwc/shared": "8.21.4", + "@lwc/shared": "8.21.5", "postcss": "~8.5.6", "postcss-selector-parser": "~7.1.0", "postcss-value-parser": "~4.2.0" diff --git a/packages/@lwc/synthetic-shadow/package.json b/packages/@lwc/synthetic-shadow/package.json index 9cebbd87d1..60719d7ae2 100644 --- a/packages/@lwc/synthetic-shadow/package.json +++ b/packages/@lwc/synthetic-shadow/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/synthetic-shadow", - "version": "8.21.4", + "version": "8.21.5", "description": "Synthetic Shadow Root for LWC", "keywords": [ "lwc" @@ -46,8 +46,8 @@ } }, "devDependencies": { - "@lwc/features": "8.21.4", - "@lwc/shared": "8.21.4" + "@lwc/features": "8.21.5", + "@lwc/shared": "8.21.5" }, "lwc": { "modules": [ diff --git a/packages/@lwc/template-compiler/package.json b/packages/@lwc/template-compiler/package.json index 9cea28ad5c..4635de4568 100644 --- a/packages/@lwc/template-compiler/package.json +++ b/packages/@lwc/template-compiler/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/template-compiler", - "version": "8.21.4", + "version": "8.21.5", "description": "Template compiler package", "keywords": [ "lwc" @@ -46,8 +46,8 @@ } }, "dependencies": { - "@lwc/errors": "8.21.4", - "@lwc/shared": "8.21.4", + "@lwc/errors": "8.21.5", + "@lwc/shared": "8.21.5", "acorn": "~8.15.0", "astring": "~1.9.0", "he": "~1.2.0" diff --git a/packages/@lwc/types/package.json b/packages/@lwc/types/package.json index ec12f08124..c1157be157 100644 --- a/packages/@lwc/types/package.json +++ b/packages/@lwc/types/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/types", - "version": "8.21.4", + "version": "8.21.5", "keywords": [ "lwc", "types", @@ -32,6 +32,6 @@ "*.d.ts" ], "dependencies": { - "@lwc/engine-core": "8.21.4" + "@lwc/engine-core": "8.21.5" } } diff --git a/packages/@lwc/wire-service/package.json b/packages/@lwc/wire-service/package.json index 401061bb4f..b26f37e374 100644 --- a/packages/@lwc/wire-service/package.json +++ b/packages/@lwc/wire-service/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/wire-service", - "version": "8.21.4", + "version": "8.21.5", "description": "@wire service", "keywords": [ "lwc" @@ -46,8 +46,8 @@ } }, "devDependencies": { - "@lwc/engine-core": "8.21.4", - "@lwc/shared": "8.21.4" + "@lwc/engine-core": "8.21.5", + "@lwc/shared": "8.21.5" }, "lwc": { "modules": [ diff --git a/packages/lwc/package.json b/packages/lwc/package.json index 16c5cfb7b3..655694c260 100644 --- a/packages/lwc/package.json +++ b/packages/lwc/package.json @@ -1,6 +1,6 @@ { "name": "lwc", - "version": "8.21.4", + "version": "8.21.5", "description": "Lightning Web Components (LWC)", "homepage": "https://lwc.dev/", "repository": { @@ -21,24 +21,24 @@ "!vitest.config.*" ], "dependencies": { - "@lwc/aria-reflection": "8.21.4", - "@lwc/babel-plugin-component": "8.21.4", - "@lwc/compiler": "8.21.4", - "@lwc/engine-core": "8.21.4", - "@lwc/engine-dom": "8.21.4", - "@lwc/engine-server": "8.21.4", - "@lwc/errors": "8.21.4", - "@lwc/features": "8.21.4", - "@lwc/module-resolver": "8.21.4", - "@lwc/rollup-plugin": "8.21.4", - "@lwc/shared": "8.21.4", - "@lwc/ssr-compiler": "8.21.4", - "@lwc/ssr-runtime": "8.21.4", - "@lwc/style-compiler": "8.21.4", - "@lwc/synthetic-shadow": "8.21.4", - "@lwc/template-compiler": "8.21.4", - "@lwc/types": "8.21.4", - "@lwc/wire-service": "8.21.4" + "@lwc/aria-reflection": "8.21.5", + "@lwc/babel-plugin-component": "8.21.5", + "@lwc/compiler": "8.21.5", + "@lwc/engine-core": "8.21.5", + "@lwc/engine-dom": "8.21.5", + "@lwc/engine-server": "8.21.5", + "@lwc/errors": "8.21.5", + "@lwc/features": "8.21.5", + "@lwc/module-resolver": "8.21.5", + "@lwc/rollup-plugin": "8.21.5", + "@lwc/shared": "8.21.5", + "@lwc/ssr-compiler": "8.21.5", + "@lwc/ssr-runtime": "8.21.5", + "@lwc/style-compiler": "8.21.5", + "@lwc/synthetic-shadow": "8.21.5", + "@lwc/template-compiler": "8.21.5", + "@lwc/types": "8.21.5", + "@lwc/wire-service": "8.21.5" }, "lwc": { "modules": [ diff --git a/playground/package.json b/playground/package.json index 85765a69fc..bfd0ea4fe4 100644 --- a/playground/package.json +++ b/playground/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@lwc/playground", - "version": "8.21.4", + "version": "8.21.5", "type": "module", "description": "Playground project to experiment with LWC.", "scripts": { @@ -9,10 +9,10 @@ "build": "NODE_ENV=production rollup -c" }, "devDependencies": { - "@lwc/rollup-plugin": "8.21.4", + "@lwc/rollup-plugin": "8.21.5", "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-typescript": "^12.1.4", - "lwc": "8.21.4", + "lwc": "8.21.5", "rollup": "^4.48.1", "rollup-plugin-livereload": "^2.0.5", "rollup-plugin-serve": "^3.0.0", From 6f848450d283b3ec46038786a2e89bed1c5197e9 Mon Sep 17 00:00:00 2001 From: rax-it Date: Thu, 28 Aug 2025 15:16:31 -0700 Subject: [PATCH 12/35] chore: release force registry (#5472) * chore: gh action to force using npm registry * chore: force registry --- .github/workflows/release.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ddf8f533bb..8594369fae 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -79,11 +79,16 @@ jobs: - name: Publish to npm env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_CONFIG_REGISTRY: https://registry.npmjs.org NPM_CONFIG_ALWAYS_AUTH: 'true' run: | - # Force registry + token for both npm and yarn - printf "registry=https://registry.npmjs.org\n//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}\nalways-auth=true\n" > ~/.npmrc + # Force both npm and yarn to use npmjs and pick up the token + yarn config set registry https://registry.npmjs.org + npm config set registry https://registry.npmjs.org + printf "//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}\nalways-auth=true\n" > ~/.npmrc + + # Sanity checks + echo "yarn registry: $(yarn config get registry)" + echo "npm registry: $(npm config get registry)" TAG=$([ "$GITHUB_REF_NAME" = "master" ] && echo latest || echo "$GITHUB_REF_NAME") yarn nx release publish --yes --tag "$TAG" From 8e66b81790c0ce9f742be639aabd3cea845257c7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 28 Aug 2025 22:18:29 +0000 Subject: [PATCH 13/35] chore: release v8.21.6 --- package.json | 2 +- packages/@lwc/aria-reflection/package.json | 2 +- .../@lwc/babel-plugin-component/package.json | 6 +-- packages/@lwc/compiler/package.json | 14 +++---- packages/@lwc/engine-core/package.json | 8 ++-- packages/@lwc/engine-dom/package.json | 10 ++--- packages/@lwc/engine-server/package.json | 12 +++--- packages/@lwc/errors/package.json | 2 +- packages/@lwc/features/package.json | 4 +- packages/@lwc/integration-karma/package.json | 12 +++--- .../@lwc/integration-not-karma/package.json | 12 +++--- packages/@lwc/integration-tests/package.json | 6 +-- packages/@lwc/integration-types/package.json | 6 +-- packages/@lwc/module-resolver/package.json | 2 +- .../perf-benchmarks-components/package.json | 4 +- packages/@lwc/perf-benchmarks/package.json | 12 +++--- packages/@lwc/rollup-plugin/package.json | 10 ++--- packages/@lwc/shared/package.json | 2 +- packages/@lwc/signals/package.json | 4 +- packages/@lwc/ssr-client-utils/package.json | 2 +- packages/@lwc/ssr-compiler/package.json | 10 ++--- packages/@lwc/ssr-runtime/package.json | 10 ++--- packages/@lwc/style-compiler/package.json | 4 +- packages/@lwc/synthetic-shadow/package.json | 6 +-- packages/@lwc/template-compiler/package.json | 6 +-- packages/@lwc/types/package.json | 4 +- packages/@lwc/wire-service/package.json | 6 +-- packages/lwc/package.json | 38 +++++++++---------- playground/package.json | 6 +-- 29 files changed, 111 insertions(+), 111 deletions(-) diff --git a/package.json b/package.json index 0bfaf1a0fb..9fde264fe5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lwc-monorepo", - "version": "8.21.5", + "version": "8.21.6", "private": true, "description": "Lightning Web Components", "repository": { diff --git a/packages/@lwc/aria-reflection/package.json b/packages/@lwc/aria-reflection/package.json index b9ba3f3d09..959fa8cdc0 100644 --- a/packages/@lwc/aria-reflection/package.json +++ b/packages/@lwc/aria-reflection/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/aria-reflection", - "version": "8.21.5", + "version": "8.21.6", "description": "ARIA element reflection polyfill for strings", "keywords": [ "aom", diff --git a/packages/@lwc/babel-plugin-component/package.json b/packages/@lwc/babel-plugin-component/package.json index a0284dca94..83e76d278b 100644 --- a/packages/@lwc/babel-plugin-component/package.json +++ b/packages/@lwc/babel-plugin-component/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/babel-plugin-component", - "version": "8.21.5", + "version": "8.21.6", "description": "Babel plugin to transform a LWC module", "keywords": [ "lwc" @@ -47,8 +47,8 @@ }, "dependencies": { "@babel/helper-module-imports": "7.27.1", - "@lwc/errors": "8.21.5", - "@lwc/shared": "8.21.5", + "@lwc/errors": "8.21.6", + "@lwc/shared": "8.21.6", "line-column": "~1.0.2" }, "devDependencies": { diff --git a/packages/@lwc/compiler/package.json b/packages/@lwc/compiler/package.json index 2175a31a0b..f5af5138a5 100644 --- a/packages/@lwc/compiler/package.json +++ b/packages/@lwc/compiler/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/compiler", - "version": "8.21.5", + "version": "8.21.6", "description": "LWC compiler", "keywords": [ "lwc" @@ -52,11 +52,11 @@ "@babel/plugin-transform-class-properties": "7.27.1", "@babel/plugin-transform-object-rest-spread": "7.28.0", "@locker/babel-plugin-transform-unforgeables": "0.22.0", - "@lwc/babel-plugin-component": "8.21.5", - "@lwc/errors": "8.21.5", - "@lwc/shared": "8.21.5", - "@lwc/ssr-compiler": "8.21.5", - "@lwc/style-compiler": "8.21.5", - "@lwc/template-compiler": "8.21.5" + "@lwc/babel-plugin-component": "8.21.6", + "@lwc/errors": "8.21.6", + "@lwc/shared": "8.21.6", + "@lwc/ssr-compiler": "8.21.6", + "@lwc/style-compiler": "8.21.6", + "@lwc/template-compiler": "8.21.6" } } diff --git a/packages/@lwc/engine-core/package.json b/packages/@lwc/engine-core/package.json index 45fbbe311d..84a9223680 100644 --- a/packages/@lwc/engine-core/package.json +++ b/packages/@lwc/engine-core/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/engine-core", - "version": "8.21.5", + "version": "8.21.6", "description": "Core LWC engine APIs.", "keywords": [ "lwc" @@ -46,9 +46,9 @@ } }, "dependencies": { - "@lwc/features": "8.21.5", - "@lwc/shared": "8.21.5", - "@lwc/signals": "8.21.5" + "@lwc/features": "8.21.6", + "@lwc/shared": "8.21.6", + "@lwc/signals": "8.21.6" }, "devDependencies": { "observable-membrane": "2.0.0" diff --git a/packages/@lwc/engine-dom/package.json b/packages/@lwc/engine-dom/package.json index 17c87dfd5f..b81f2dc070 100644 --- a/packages/@lwc/engine-dom/package.json +++ b/packages/@lwc/engine-dom/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/engine-dom", - "version": "8.21.5", + "version": "8.21.6", "description": "Renders LWC components in a DOM environment.", "keywords": [ "lwc" @@ -46,10 +46,10 @@ } }, "devDependencies": { - "@lwc/engine-core": "8.21.5", - "@lwc/shared": "8.21.5", - "@lwc/features": "8.21.5", - "@lwc/signals": "8.21.5" + "@lwc/engine-core": "8.21.6", + "@lwc/shared": "8.21.6", + "@lwc/features": "8.21.6", + "@lwc/signals": "8.21.6" }, "lwc": { "modules": [ diff --git a/packages/@lwc/engine-server/package.json b/packages/@lwc/engine-server/package.json index 0a8160f72d..ed4856cc57 100644 --- a/packages/@lwc/engine-server/package.json +++ b/packages/@lwc/engine-server/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/engine-server", - "version": "8.21.5", + "version": "8.21.6", "description": "Renders LWC components in a server environment.", "keywords": [ "lwc" @@ -46,11 +46,11 @@ } }, "devDependencies": { - "@lwc/engine-core": "8.21.5", - "@lwc/rollup-plugin": "8.21.5", - "@lwc/shared": "8.21.5", - "@lwc/features": "8.21.5", - "@lwc/signals": "8.21.5", + "@lwc/engine-core": "8.21.6", + "@lwc/rollup-plugin": "8.21.6", + "@lwc/shared": "8.21.6", + "@lwc/features": "8.21.6", + "@lwc/signals": "8.21.6", "@rollup/plugin-virtual": "^3.0.2", "parse5": "^8.0.0" } diff --git a/packages/@lwc/errors/package.json b/packages/@lwc/errors/package.json index 7a4af7131f..08037759f1 100644 --- a/packages/@lwc/errors/package.json +++ b/packages/@lwc/errors/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/errors", - "version": "8.21.5", + "version": "8.21.6", "description": "LWC Error Utilities", "keywords": [ "lwc" diff --git a/packages/@lwc/features/package.json b/packages/@lwc/features/package.json index b5ee054fa8..b32be66168 100644 --- a/packages/@lwc/features/package.json +++ b/packages/@lwc/features/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/features", - "version": "8.21.5", + "version": "8.21.6", "description": "LWC Features Flags", "keywords": [ "lwc" @@ -46,6 +46,6 @@ } }, "dependencies": { - "@lwc/shared": "8.21.5" + "@lwc/shared": "8.21.6" } } diff --git a/packages/@lwc/integration-karma/package.json b/packages/@lwc/integration-karma/package.json index 424b1c25c2..cbd5ab94a8 100644 --- a/packages/@lwc/integration-karma/package.json +++ b/packages/@lwc/integration-karma/package.json @@ -1,7 +1,7 @@ { "name": "@lwc/integration-karma", "private": true, - "version": "8.21.5", + "version": "8.21.6", "scripts": { "start": "KARMA_MODE=watch karma start ./scripts/karma-configs/test/local.js", "test": "karma start ./scripts/karma-configs/test/local.js --single-run", @@ -21,11 +21,11 @@ "karma-sauce-launcher-fix-firefox": "using a fork to work around https://github.com/karma-runner/karma-sauce-launcher/issues/275" }, "devDependencies": { - "@lwc/compiler": "8.21.5", - "@lwc/engine-dom": "8.21.5", - "@lwc/engine-server": "8.21.5", - "@lwc/rollup-plugin": "8.21.5", - "@lwc/synthetic-shadow": "8.21.5", + "@lwc/compiler": "8.21.6", + "@lwc/engine-dom": "8.21.6", + "@lwc/engine-server": "8.21.6", + "@lwc/rollup-plugin": "8.21.6", + "@lwc/synthetic-shadow": "8.21.6", "@types/jasmine": "^5.1.9", "chokidar": "^4.0.3", "istanbul-lib-coverage": "^3.2.2", diff --git a/packages/@lwc/integration-not-karma/package.json b/packages/@lwc/integration-not-karma/package.json index e566a2bb71..d05352ae3f 100644 --- a/packages/@lwc/integration-not-karma/package.json +++ b/packages/@lwc/integration-not-karma/package.json @@ -1,18 +1,18 @@ { "name": "@lwc/integration-not-karma", "private": true, - "version": "8.21.5", + "version": "8.21.6", "scripts": { "start": "web-test-runner --manual", "test": "web-test-runner --config configs/integration.mjs", "test:hydration": "web-test-runner --config configs/hydration.mjs" }, "devDependencies": { - "@lwc/compiler": "8.21.5", - "@lwc/engine-dom": "8.21.5", - "@lwc/engine-server": "8.21.5", - "@lwc/rollup-plugin": "8.21.5", - "@lwc/synthetic-shadow": "8.21.5", + "@lwc/compiler": "8.21.6", + "@lwc/engine-dom": "8.21.6", + "@lwc/engine-server": "8.21.6", + "@lwc/rollup-plugin": "8.21.6", + "@lwc/synthetic-shadow": "8.21.6", "@types/chai": "^5.2.2", "@types/jasmine": "^5.1.9", "@web/dev-server-import-maps": "^0.2.1", diff --git a/packages/@lwc/integration-tests/package.json b/packages/@lwc/integration-tests/package.json index caedb34244..68578fdb10 100644 --- a/packages/@lwc/integration-tests/package.json +++ b/packages/@lwc/integration-tests/package.json @@ -1,7 +1,7 @@ { "name": "@lwc/integration-tests", "private": true, - "version": "8.21.5", + "version": "8.21.6", "scripts": { "build": "node scripts/build.js", "build:dev": "MODE=dev yarn build", @@ -18,7 +18,7 @@ "sauce:prod:ci": "MODE=prod yarn build:prod && MODE=prod ../../../scripts/ci/retry.sh wdio ./scripts/wdio.sauce.conf.js" }, "devDependencies": { - "@lwc/rollup-plugin": "8.21.5", + "@lwc/rollup-plugin": "8.21.6", "@wdio/cli": "^9.17.1", "@wdio/local-runner": "^9.17.0", "@wdio/mocha-framework": "^9.17.0", @@ -27,7 +27,7 @@ "@wdio/static-server-service": "^9.16.2", "deepmerge": "^4.3.1", "dotenv": "^17.2.1", - "lwc": "8.21.5", + "lwc": "8.21.6", "minimist": "^1.2.8", "webdriverio": "^9.0.7" }, diff --git a/packages/@lwc/integration-types/package.json b/packages/@lwc/integration-types/package.json index 018dbadba7..35c58b08c3 100644 --- a/packages/@lwc/integration-types/package.json +++ b/packages/@lwc/integration-types/package.json @@ -1,7 +1,7 @@ { "name": "@lwc/integration-types", "private": true, - "version": "8.21.5", + "version": "8.21.6", "description": "Type validation for LWC packages", "type": "module", "scripts": { @@ -9,8 +9,8 @@ "playground": "rollup -c src/playground/rollup.config.js --watch" }, "dependencies": { - "@lwc/rollup-plugin": "8.21.5", - "lwc": "8.21.5" + "@lwc/rollup-plugin": "8.21.6", + "lwc": "8.21.6" }, "devDependencies": { "@rollup/plugin-replace": "^6.0.2", diff --git a/packages/@lwc/module-resolver/package.json b/packages/@lwc/module-resolver/package.json index 16c5758c2c..994e42020b 100644 --- a/packages/@lwc/module-resolver/package.json +++ b/packages/@lwc/module-resolver/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/module-resolver", - "version": "8.21.5", + "version": "8.21.6", "description": "Resolves paths for LWC components", "keywords": [ "lwc" diff --git a/packages/@lwc/perf-benchmarks-components/package.json b/packages/@lwc/perf-benchmarks-components/package.json index b4d3b82c97..9138b71cc1 100644 --- a/packages/@lwc/perf-benchmarks-components/package.json +++ b/packages/@lwc/perf-benchmarks-components/package.json @@ -1,12 +1,12 @@ { "name": "@lwc/perf-benchmarks-components", - "version": "8.21.5", + "version": "8.21.6", "private": true, "scripts": { "build": "rm -fr dist && rollup -c ./rollup.config.mjs" }, "devDependencies": { - "@lwc/rollup-plugin": "8.21.5" + "@lwc/rollup-plugin": "8.21.6" }, "nx": { "targets": { diff --git a/packages/@lwc/perf-benchmarks/package.json b/packages/@lwc/perf-benchmarks/package.json index f1920e1ce7..150431f76d 100644 --- a/packages/@lwc/perf-benchmarks/package.json +++ b/packages/@lwc/perf-benchmarks/package.json @@ -1,6 +1,6 @@ { "name": "@lwc/perf-benchmarks", - "version": "8.21.5", + "version": "8.21.6", "private": true, "scripts": { "build": "rm -fr dist && rollup -c ./rollup.config.mjs && node scripts/build.js && ./scripts/fix-deps.sh", @@ -15,11 +15,11 @@ "Don't forget to add these to fix-deps.sh as well." ], "dependencies": { - "@lwc/engine-dom": "8.21.5", - "@lwc/engine-server": "8.21.5", - "@lwc/perf-benchmarks-components": "8.21.5", - "@lwc/ssr-runtime": "8.21.5", - "@lwc/synthetic-shadow": "8.21.5" + "@lwc/engine-dom": "8.21.6", + "@lwc/engine-server": "8.21.6", + "@lwc/perf-benchmarks-components": "8.21.6", + "@lwc/ssr-runtime": "8.21.6", + "@lwc/synthetic-shadow": "8.21.6" }, "devDependencies": { "@best/cli": "^15.0.0", diff --git a/packages/@lwc/rollup-plugin/package.json b/packages/@lwc/rollup-plugin/package.json index 253b5c55ec..a9f80762ae 100644 --- a/packages/@lwc/rollup-plugin/package.json +++ b/packages/@lwc/rollup-plugin/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/rollup-plugin", - "version": "8.21.5", + "version": "8.21.6", "description": "Rollup plugin to compile LWC", "keywords": [ "lwc" @@ -46,13 +46,13 @@ } }, "dependencies": { - "@lwc/compiler": "8.21.5", - "@lwc/module-resolver": "8.21.5", - "@lwc/shared": "8.21.5", + "@lwc/compiler": "8.21.6", + "@lwc/module-resolver": "8.21.6", + "@lwc/shared": "8.21.6", "@rollup/pluginutils": "~5.2.0" }, "devDependencies": { - "@lwc/errors": "8.21.5" + "@lwc/errors": "8.21.6" }, "peerDependencies": { "rollup": "^1.2.0||^2.0.0||^3.0.0||^4.0.0" diff --git a/packages/@lwc/shared/package.json b/packages/@lwc/shared/package.json index 3f31314a55..1dd9765882 100644 --- a/packages/@lwc/shared/package.json +++ b/packages/@lwc/shared/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/shared", - "version": "8.21.5", + "version": "8.21.6", "description": "Utilities and methods that are shared across packages", "keywords": [ "lwc" diff --git a/packages/@lwc/signals/package.json b/packages/@lwc/signals/package.json index 9d7c4f1666..f5533da233 100644 --- a/packages/@lwc/signals/package.json +++ b/packages/@lwc/signals/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/signals", - "version": "8.21.5", + "version": "8.21.6", "description": "Provides the interface to interact with reactivity from outside the framework", "keywords": [ "lwc" @@ -46,6 +46,6 @@ } }, "devDependencies": { - "@lwc/shared": "8.21.5" + "@lwc/shared": "8.21.6" } } diff --git a/packages/@lwc/ssr-client-utils/package.json b/packages/@lwc/ssr-client-utils/package.json index e5ae98a6c7..d3ddc8a223 100644 --- a/packages/@lwc/ssr-client-utils/package.json +++ b/packages/@lwc/ssr-client-utils/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/ssr-client-utils", - "version": "8.21.5", + "version": "8.21.6", "description": "Client-side complement to @lwc/ssr-compiler", "keywords": [ "lwc", diff --git a/packages/@lwc/ssr-compiler/package.json b/packages/@lwc/ssr-compiler/package.json index 021449e192..ed425826c3 100644 --- a/packages/@lwc/ssr-compiler/package.json +++ b/packages/@lwc/ssr-compiler/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/ssr-compiler", - "version": "8.21.5", + "version": "8.21.6", "description": "Compile component for use during server-side rendering", "keywords": [ "compiler", @@ -49,9 +49,9 @@ }, "dependencies": { "@babel/types": "7.28.2", - "@lwc/errors": "8.21.5", - "@lwc/shared": "8.21.5", - "@lwc/template-compiler": "8.21.5", + "@lwc/errors": "8.21.6", + "@lwc/shared": "8.21.6", + "@lwc/template-compiler": "8.21.6", "acorn": "8.15.0", "astring": "^1.9.0", "estree-toolkit": "^1.7.13", @@ -59,7 +59,7 @@ "meriyah": "^5.0.0" }, "devDependencies": { - "@lwc/babel-plugin-component": "8.21.5", + "@lwc/babel-plugin-component": "8.21.6", "@types/estree": "^1.0.8" } } diff --git a/packages/@lwc/ssr-runtime/package.json b/packages/@lwc/ssr-runtime/package.json index b1c48446ba..190db59715 100644 --- a/packages/@lwc/ssr-runtime/package.json +++ b/packages/@lwc/ssr-runtime/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/ssr-runtime", - "version": "8.21.5", + "version": "8.21.6", "description": "Runtime complement to @lwc/ssr-compiler", "keywords": [ "lwc", @@ -48,10 +48,10 @@ } }, "devDependencies": { - "@lwc/shared": "8.21.5", - "@lwc/engine-core": "8.21.5", - "@lwc/features": "8.21.5", - "@lwc/signals": "8.21.5", + "@lwc/shared": "8.21.6", + "@lwc/engine-core": "8.21.6", + "@lwc/features": "8.21.6", + "@lwc/signals": "8.21.6", "observable-membrane": "2.0.0" } } diff --git a/packages/@lwc/style-compiler/package.json b/packages/@lwc/style-compiler/package.json index ae9cf2e06e..069c31181c 100644 --- a/packages/@lwc/style-compiler/package.json +++ b/packages/@lwc/style-compiler/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/style-compiler", - "version": "8.21.5", + "version": "8.21.6", "description": "Transform style sheet to be consumed by the LWC engine", "keywords": [ "lwc" @@ -46,7 +46,7 @@ } }, "dependencies": { - "@lwc/shared": "8.21.5", + "@lwc/shared": "8.21.6", "postcss": "~8.5.6", "postcss-selector-parser": "~7.1.0", "postcss-value-parser": "~4.2.0" diff --git a/packages/@lwc/synthetic-shadow/package.json b/packages/@lwc/synthetic-shadow/package.json index 60719d7ae2..77f44bf72b 100644 --- a/packages/@lwc/synthetic-shadow/package.json +++ b/packages/@lwc/synthetic-shadow/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/synthetic-shadow", - "version": "8.21.5", + "version": "8.21.6", "description": "Synthetic Shadow Root for LWC", "keywords": [ "lwc" @@ -46,8 +46,8 @@ } }, "devDependencies": { - "@lwc/features": "8.21.5", - "@lwc/shared": "8.21.5" + "@lwc/features": "8.21.6", + "@lwc/shared": "8.21.6" }, "lwc": { "modules": [ diff --git a/packages/@lwc/template-compiler/package.json b/packages/@lwc/template-compiler/package.json index 4635de4568..0b42209478 100644 --- a/packages/@lwc/template-compiler/package.json +++ b/packages/@lwc/template-compiler/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/template-compiler", - "version": "8.21.5", + "version": "8.21.6", "description": "Template compiler package", "keywords": [ "lwc" @@ -46,8 +46,8 @@ } }, "dependencies": { - "@lwc/errors": "8.21.5", - "@lwc/shared": "8.21.5", + "@lwc/errors": "8.21.6", + "@lwc/shared": "8.21.6", "acorn": "~8.15.0", "astring": "~1.9.0", "he": "~1.2.0" diff --git a/packages/@lwc/types/package.json b/packages/@lwc/types/package.json index c1157be157..84afe2aaea 100644 --- a/packages/@lwc/types/package.json +++ b/packages/@lwc/types/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/types", - "version": "8.21.5", + "version": "8.21.6", "keywords": [ "lwc", "types", @@ -32,6 +32,6 @@ "*.d.ts" ], "dependencies": { - "@lwc/engine-core": "8.21.5" + "@lwc/engine-core": "8.21.6" } } diff --git a/packages/@lwc/wire-service/package.json b/packages/@lwc/wire-service/package.json index b26f37e374..ed6beb82ab 100644 --- a/packages/@lwc/wire-service/package.json +++ b/packages/@lwc/wire-service/package.json @@ -4,7 +4,7 @@ "You can safely modify dependencies, devDependencies, keywords, etc., but other props will be overwritten." ], "name": "@lwc/wire-service", - "version": "8.21.5", + "version": "8.21.6", "description": "@wire service", "keywords": [ "lwc" @@ -46,8 +46,8 @@ } }, "devDependencies": { - "@lwc/engine-core": "8.21.5", - "@lwc/shared": "8.21.5" + "@lwc/engine-core": "8.21.6", + "@lwc/shared": "8.21.6" }, "lwc": { "modules": [ diff --git a/packages/lwc/package.json b/packages/lwc/package.json index 655694c260..15c09c2557 100644 --- a/packages/lwc/package.json +++ b/packages/lwc/package.json @@ -1,6 +1,6 @@ { "name": "lwc", - "version": "8.21.5", + "version": "8.21.6", "description": "Lightning Web Components (LWC)", "homepage": "https://lwc.dev/", "repository": { @@ -21,24 +21,24 @@ "!vitest.config.*" ], "dependencies": { - "@lwc/aria-reflection": "8.21.5", - "@lwc/babel-plugin-component": "8.21.5", - "@lwc/compiler": "8.21.5", - "@lwc/engine-core": "8.21.5", - "@lwc/engine-dom": "8.21.5", - "@lwc/engine-server": "8.21.5", - "@lwc/errors": "8.21.5", - "@lwc/features": "8.21.5", - "@lwc/module-resolver": "8.21.5", - "@lwc/rollup-plugin": "8.21.5", - "@lwc/shared": "8.21.5", - "@lwc/ssr-compiler": "8.21.5", - "@lwc/ssr-runtime": "8.21.5", - "@lwc/style-compiler": "8.21.5", - "@lwc/synthetic-shadow": "8.21.5", - "@lwc/template-compiler": "8.21.5", - "@lwc/types": "8.21.5", - "@lwc/wire-service": "8.21.5" + "@lwc/aria-reflection": "8.21.6", + "@lwc/babel-plugin-component": "8.21.6", + "@lwc/compiler": "8.21.6", + "@lwc/engine-core": "8.21.6", + "@lwc/engine-dom": "8.21.6", + "@lwc/engine-server": "8.21.6", + "@lwc/errors": "8.21.6", + "@lwc/features": "8.21.6", + "@lwc/module-resolver": "8.21.6", + "@lwc/rollup-plugin": "8.21.6", + "@lwc/shared": "8.21.6", + "@lwc/ssr-compiler": "8.21.6", + "@lwc/ssr-runtime": "8.21.6", + "@lwc/style-compiler": "8.21.6", + "@lwc/synthetic-shadow": "8.21.6", + "@lwc/template-compiler": "8.21.6", + "@lwc/types": "8.21.6", + "@lwc/wire-service": "8.21.6" }, "lwc": { "modules": [ diff --git a/playground/package.json b/playground/package.json index bfd0ea4fe4..20b012f036 100644 --- a/playground/package.json +++ b/playground/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@lwc/playground", - "version": "8.21.5", + "version": "8.21.6", "type": "module", "description": "Playground project to experiment with LWC.", "scripts": { @@ -9,10 +9,10 @@ "build": "NODE_ENV=production rollup -c" }, "devDependencies": { - "@lwc/rollup-plugin": "8.21.5", + "@lwc/rollup-plugin": "8.21.6", "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-typescript": "^12.1.4", - "lwc": "8.21.5", + "lwc": "8.21.6", "rollup": "^4.48.1", "rollup-plugin-livereload": "^2.0.5", "rollup-plugin-serve": "^3.0.0", From a30a647a073e71618f8c42b1d1a8c48c357c8a33 Mon Sep 17 00:00:00 2001 From: rax-it Date: Fri, 29 Aug 2025 15:55:43 -0700 Subject: [PATCH 14/35] feat(release): add PAT support (#5473) * chore: add PAT support * chore: set identity earlier --- .github/workflows/release.yml | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8594369fae..4c71f4a244 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -33,6 +33,8 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 + token: ${{ secrets.WORKFLOW_PAT }} + persist-credentials: false - name: Setup Node uses: actions/setup-node@v4 @@ -53,16 +55,25 @@ jobs: fi echo "resolved=$RELEASE_VERSION" >> "$GITHUB_OUTPUT" - - name: Bump versions and commit + - name: Resolve version env: INPUT_VERSION: ${{ steps.resolve_version.outputs.resolved }} run: | - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" node ./scripts/release/version.js "$INPUT_VERSION" RESOLVED_VERSION=$(jq -r .version package.json) - git commit -am "chore: release v$RESOLVED_VERSION" - git push origin HEAD + echo "RESOLVED_VERSION=$RESOLVED_VERSION" >> "$GITHUB_ENV" + + - name: Set git identity (Actions bot) + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + + - name: Commit & push + uses: actions-js/push@v1.4 + with: + github_token: ${{ secrets.WORKFLOW_PAT }} + branch: ${{ github.ref_name }} + message: 'chore: release v${{ env.RESOLVED_VERSION }}' - name: Build run: yarn build @@ -70,6 +81,7 @@ jobs: - name: Tag and create GitHub release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | VERSION=$(jq -r .version package.json) git tag -a "v$VERSION" -m "Release v$VERSION" From 98a949c9d94f5eaf5515caddfc20b010ac71d0c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 16:02:47 +0000 Subject: [PATCH 15/35] build(deps-dev): bump the theoretically-non-breaking group with 4 updates (#5475) Bumps the theoretically-non-breaking group with 4 updates: [isbinaryfile](https://github.com/gjtorikian/isBinaryFile), [lint-staged](https://github.com/lint-staged/lint-staged), [rollup](https://github.com/rollup/rollup) and [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint). Updates `isbinaryfile` from 5.0.4 to 5.0.6 - [Release notes](https://github.com/gjtorikian/isBinaryFile/releases) - [Commits](https://github.com/gjtorikian/isBinaryFile/compare/5.0.4...5.0.6) Updates `lint-staged` from 16.1.5 to 16.1.6 - [Release notes](https://github.com/lint-staged/lint-staged/releases) - [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md) - [Commits](https://github.com/lint-staged/lint-staged/compare/v16.1.5...v16.1.6) Updates `rollup` from 4.48.1 to 4.50.0 - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v4.48.1...v4.50.0) Updates `typescript-eslint` from 8.40.0 to 8.41.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.41.0/packages/typescript-eslint) --- updated-dependencies: - dependency-name: isbinaryfile dependency-version: 5.0.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: lint-staged dependency-version: 16.1.6 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: rollup dependency-version: 4.50.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: theoretically-non-breaking - dependency-name: typescript-eslint dependency-version: 8.41.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: theoretically-non-breaking ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 8 +- packages/@lwc/integration-types/package.json | 2 +- playground/package.json | 2 +- yarn.lock | 437 +++++++++---------- 4 files changed, 224 insertions(+), 225 deletions(-) diff --git a/package.json b/package.json index 9fde264fe5..3def58408a 100644 --- a/package.json +++ b/package.json @@ -64,17 +64,17 @@ "glob": "^11.0.3", "globals": "^16.3.0", "husky": "^9.1.7", - "isbinaryfile": "^5.0.4", + "isbinaryfile": "^5.0.6", "jsdom": "^26.1.0", - "lint-staged": "^16.1.5", + "lint-staged": "^16.1.6", "magic-string": "^0.30.18", "nx": "21.4.1", "prettier": "^3.6.2", - "rollup": "^4.48.1", + "rollup": "^4.50.0", "terser": "^5.43.1", "tslib": "^2.8.1", "typescript": "5.8.2", - "typescript-eslint": "8.40.0", + "typescript-eslint": "8.41.0", "vitest": "^3.2.4" }, "lint-staged": { diff --git a/packages/@lwc/integration-types/package.json b/packages/@lwc/integration-types/package.json index 35c58b08c3..1d0920681e 100644 --- a/packages/@lwc/integration-types/package.json +++ b/packages/@lwc/integration-types/package.json @@ -15,7 +15,7 @@ "devDependencies": { "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-typescript": "^12.1.4", - "rollup": "^4.48.1", + "rollup": "^4.50.0", "rollup-plugin-livereload": "^2.0.5", "rollup-plugin-serve": "^3.0.0" } diff --git a/playground/package.json b/playground/package.json index 20b012f036..af2a5aa32f 100644 --- a/playground/package.json +++ b/playground/package.json @@ -13,7 +13,7 @@ "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-typescript": "^12.1.4", "lwc": "8.21.6", - "rollup": "^4.48.1", + "rollup": "^4.50.0", "rollup-plugin-livereload": "^2.0.5", "rollup-plugin-serve": "^3.0.0", "tslib": "^2.8.1" diff --git a/yarn.lock b/yarn.lock index 39f9561cf9..df7f547aa6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2114,11 +2114,9 @@ "@lwc/eslint-plugin-lwc-internal@link:./scripts/eslint-plugin": version "0.0.0" - uid "" "@lwc/test-utils-lwc-internals@link:./scripts/test-utils": version "0.0.0" - uid "" "@napi-rs/wasm-runtime@0.2.4": version "0.2.4" @@ -2666,105 +2664,110 @@ estree-walker "^2.0.2" picomatch "^4.0.2" -"@rollup/rollup-android-arm-eabi@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.48.1.tgz#13cccb90969f7ca3d1354129c859a3b05e90beed" - integrity sha512-rGmb8qoG/zdmKoYELCBwu7vt+9HxZ7Koos3pD0+sH5fR3u3Wb/jGcpnqxcnWsPEKDUyzeLSqksN8LJtgXjqBYw== - -"@rollup/rollup-android-arm64@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.48.1.tgz#0d01925255bb27b56edd095ba1764c3f91f28048" - integrity sha512-4e9WtTxrk3gu1DFE+imNJr4WsL13nWbD/Y6wQcyku5qadlKHY3OQ3LJ/INrrjngv2BJIHnIzbqMk1GTAC2P8yQ== - -"@rollup/rollup-darwin-arm64@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.48.1.tgz#5b11bca1da78d68f26aa98754cecd1887b683689" - integrity sha512-+XjmyChHfc4TSs6WUQGmVf7Hkg8ferMAE2aNYYWjiLzAS/T62uOsdfnqv+GHRjq7rKRnYh4mwWb4Hz7h/alp8A== - -"@rollup/rollup-darwin-x64@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.48.1.tgz#00039989c4cd27ead349c313dc5562c3897c0524" - integrity sha512-upGEY7Ftw8M6BAJyGwnwMw91rSqXTcOKZnnveKrVWsMTF8/k5mleKSuh7D4v4IV1pLxKAk3Tbs0Lo9qYmii5mQ== - -"@rollup/rollup-freebsd-arm64@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.48.1.tgz#1e5aca23d8171313f408759c71342bbee7889f22" - integrity sha512-P9ViWakdoynYFUOZhqq97vBrhuvRLAbN/p2tAVJvhLb8SvN7rbBnJQcBu8e/rQts42pXGLVhfsAP0k9KXWa3nQ== - -"@rollup/rollup-freebsd-x64@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.48.1.tgz#04af010d99ccba84db10d4498cadaac8529ee738" - integrity sha512-VLKIwIpnBya5/saccM8JshpbxfyJt0Dsli0PjXozHwbSVaHTvWXJH1bbCwPXxnMzU4zVEfgD1HpW3VQHomi2AQ== - -"@rollup/rollup-linux-arm-gnueabihf@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.48.1.tgz#67747af83a2dd092144d643caf20b0d1eb817681" - integrity sha512-3zEuZsXfKaw8n/yF7t8N6NNdhyFw3s8xJTqjbTDXlipwrEHo4GtIKcMJr5Ed29leLpB9AugtAQpAHW0jvtKKaQ== - -"@rollup/rollup-linux-arm-musleabihf@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.48.1.tgz#b4bed820cfc5efec00a13190e3d53c0b5240f3b1" - integrity sha512-leo9tOIlKrcBmmEypzunV/2w946JeLbTdDlwEZ7OnnsUyelZ72NMnT4B2vsikSgwQifjnJUbdXzuW4ToN1wV+Q== - -"@rollup/rollup-linux-arm64-gnu@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.48.1.tgz#6b4a7af7e53e7d95c8c1975945d8f8dc8f6d74a9" - integrity sha512-Vy/WS4z4jEyvnJm+CnPfExIv5sSKqZrUr98h03hpAMbE2aI0aD2wvK6GiSe8Gx2wGp3eD81cYDpLLBqNb2ydwQ== - -"@rollup/rollup-linux-arm64-musl@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.48.1.tgz#dd08c8174cfb95d4fa90663dd6be8db27039ad51" - integrity sha512-x5Kzn7XTwIssU9UYqWDB9VpLpfHYuXw5c6bJr4Mzv9kIv242vmJHbI5PJJEnmBYitUIfoMCODDhR7KoZLot2VQ== - -"@rollup/rollup-linux-loongarch64-gnu@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.48.1.tgz#997248c983d2272d1b810e5817cc3c885ebde5ff" - integrity sha512-yzCaBbwkkWt/EcgJOKDUdUpMHjhiZT/eDktOPWvSRpqrVE04p0Nd6EGV4/g7MARXXeOqstflqsKuXVM3H9wOIQ== - -"@rollup/rollup-linux-ppc64-gnu@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.48.1.tgz#57d020583a314741d17b653419d1dbc3fe99bc52" - integrity sha512-UK0WzWUjMAJccHIeOpPhPcKBqax7QFg47hwZTp6kiMhQHeOYJeaMwzeRZe1q5IiTKsaLnHu9s6toSYVUlZ2QtQ== - -"@rollup/rollup-linux-riscv64-gnu@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.48.1.tgz#bbd381e5f99658de9baa0193b89e286767c6e029" - integrity sha512-3NADEIlt+aCdCbWVZ7D3tBjBX1lHpXxcvrLt/kdXTiBrOds8APTdtk2yRL2GgmnSVeX4YS1JIf0imFujg78vpw== - -"@rollup/rollup-linux-riscv64-musl@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.48.1.tgz#2866abbea1e702246900414f878203fea350ccee" - integrity sha512-euuwm/QTXAMOcyiFCcrx0/S2jGvFlKJ2Iro8rsmYL53dlblp3LkUQVFzEidHhvIPPvcIsxDhl2wkBE+I6YVGzA== - -"@rollup/rollup-linux-s390x-gnu@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.48.1.tgz#02f6a1b0f207bf9b6c8f76fca3bd394ad1a5e800" - integrity sha512-w8mULUjmPdWLJgmTYJx/W6Qhln1a+yqvgwmGXcQl2vFBkWsKGUBRbtLRuKJUln8Uaimf07zgJNxOhHOvjSQmBQ== - -"@rollup/rollup-linux-x64-gnu@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.48.1.tgz#867a70767a3e45c1a49b26310548e7861f980016" - integrity sha512-90taWXCWxTbClWuMZD0DKYohY1EovA+W5iytpE89oUPmT5O1HFdf8cuuVIylE6vCbrGdIGv85lVRzTcpTRZ+kA== - -"@rollup/rollup-linux-x64-musl@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.48.1.tgz#4b676c79d85c3ae58e706d44d4be3bc4eb6315cd" - integrity sha512-2Gu29SkFh1FfTRuN1GR1afMuND2GKzlORQUP3mNMJbqdndOg7gNsa81JnORctazHRokiDzQ5+MLE5XYmZW5VWg== - -"@rollup/rollup-win32-arm64-msvc@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.48.1.tgz#0106a573d0c7b82e95c6f57894b65f11bc0c7873" - integrity sha512-6kQFR1WuAO50bxkIlAVeIYsz3RUx+xymwhTo9j94dJ+kmHe9ly7muH23sdfWduD0BA8pD9/yhonUvAjxGh34jQ== - -"@rollup/rollup-win32-ia32-msvc@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.48.1.tgz#351eee360c21415c1efb01d402f53c2a1f5f1a53" - integrity sha512-RUyZZ/mga88lMI3RlXFs4WQ7n3VyU07sPXmMG7/C1NOi8qisUg57Y7LRarqoGoAiopmGmChUhSwfpvQ3H5iGSQ== - -"@rollup/rollup-win32-x64-msvc@4.48.1": - version "4.48.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.48.1.tgz#6821b48385af21ba55c7a5f9f64d19f38ea26014" - integrity sha512-8a/caCUN4vkTChxkaIJcMtwIVcBhi4X2PQRoT+yCK3qRYaZ7cURrmJFL5Ux9H9RaMIXj9RuihckdmkBX3zZsgg== +"@rollup/rollup-android-arm-eabi@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.0.tgz#939c1be9625d428d8513e4ab60d406fe8db23718" + integrity sha512-lVgpeQyy4fWN5QYebtW4buT/4kn4p4IJ+kDNB4uYNT5b8c8DLJDg6titg20NIg7E8RWwdWZORW6vUFfrLyG3KQ== + +"@rollup/rollup-android-arm64@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.0.tgz#b74005775903f7a8f4e363d2840c1dcef3776ff3" + integrity sha512-2O73dR4Dc9bp+wSYhviP6sDziurB5/HCym7xILKifWdE9UsOe2FtNcM+I4xZjKrfLJnq5UR8k9riB87gauiQtw== + +"@rollup/rollup-darwin-arm64@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.0.tgz#8c04603cdcf1ec0cd6b27152b3827e49295f2962" + integrity sha512-vwSXQN8T4sKf1RHr1F0s98Pf8UPz7pS6P3LG9NSmuw0TVh7EmaE+5Ny7hJOZ0M2yuTctEsHHRTMi2wuHkdS6Hg== + +"@rollup/rollup-darwin-x64@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.0.tgz#19ec976f1cc663def2692cd7ffb32981f2b0b733" + integrity sha512-cQp/WG8HE7BCGyFVuzUg0FNmupxC+EPZEwWu2FCGGw5WDT1o2/YlENbm5e9SMvfDFR6FRhVCBePLqj0o8MN7Vw== + +"@rollup/rollup-freebsd-arm64@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.0.tgz#a96b4ad8346229f6fcbd9d57f1c53040b037c2da" + integrity sha512-UR1uTJFU/p801DvvBbtDD7z9mQL8J80xB0bR7DqW7UGQHRm/OaKzp4is7sQSdbt2pjjSS72eAtRh43hNduTnnQ== + +"@rollup/rollup-freebsd-x64@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.0.tgz#fa565a282bc57967ee6668607b181678bdd74e4a" + integrity sha512-G/DKyS6PK0dD0+VEzH/6n/hWDNPDZSMBmqsElWnCRGrYOb2jC0VSupp7UAHHQ4+QILwkxSMaYIbQ72dktp8pKA== + +"@rollup/rollup-linux-arm-gnueabihf@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.0.tgz#dfc88f7295e1f98d77f25296be787e8a5d6ced75" + integrity sha512-u72Mzc6jyJwKjJbZZcIYmd9bumJu7KNmHYdue43vT1rXPm2rITwmPWF0mmPzLm9/vJWxIRbao/jrQmxTO0Sm9w== + +"@rollup/rollup-linux-arm-musleabihf@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.0.tgz#32cd70c87455ca031f0361090cf17da5a2ef66d5" + integrity sha512-S4UefYdV0tnynDJV1mdkNawp0E5Qm2MtSs330IyHgaccOFrwqsvgigUD29uT+B/70PDY1eQ3t40+xf6wIvXJyg== + +"@rollup/rollup-linux-arm64-gnu@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.0.tgz#0e7e1fe7241e3384f6c6b4ccdbcfa8ad8c78b869" + integrity sha512-1EhkSvUQXJsIhk4msxP5nNAUWoB4MFDHhtc4gAYvnqoHlaL9V3F37pNHabndawsfy/Tp7BPiy/aSa6XBYbaD1g== + +"@rollup/rollup-linux-arm64-musl@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.0.tgz#5d421f2f3e4a84786c4dfd9ce97e595c9b59e7f4" + integrity sha512-EtBDIZuDtVg75xIPIK1l5vCXNNCIRM0OBPUG+tbApDuJAy9mKago6QxX+tfMzbCI6tXEhMuZuN1+CU8iDW+0UQ== + +"@rollup/rollup-linux-loongarch64-gnu@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.0.tgz#a0fb5c7d0e88319e18acfd9436f19ee39354b027" + integrity sha512-BGYSwJdMP0hT5CCmljuSNx7+k+0upweM2M4YGfFBjnFSZMHOLYR0gEEj/dxyYJ6Zc6AiSeaBY8dWOa11GF/ppQ== + +"@rollup/rollup-linux-ppc64-gnu@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.0.tgz#a65b598af12f25210c3295da551a6e3616ea488d" + integrity sha512-I1gSMzkVe1KzAxKAroCJL30hA4DqSi+wGc5gviD0y3IL/VkvcnAqwBf4RHXHyvH66YVHxpKO8ojrgc4SrWAnLg== + +"@rollup/rollup-linux-riscv64-gnu@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.0.tgz#10ba776214ae2857c5bf4389690dabb2fbaf7d98" + integrity sha512-bSbWlY3jZo7molh4tc5dKfeSxkqnf48UsLqYbUhnkdnfgZjgufLS/NTA8PcP/dnvct5CCdNkABJ56CbclMRYCA== + +"@rollup/rollup-linux-riscv64-musl@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.0.tgz#c2a46cbaa329d5f21e5808f5a66bb9c78cf68aac" + integrity sha512-LSXSGumSURzEQLT2e4sFqFOv3LWZsEF8FK7AAv9zHZNDdMnUPYH3t8ZlaeYYZyTXnsob3htwTKeWtBIkPV27iQ== + +"@rollup/rollup-linux-s390x-gnu@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.0.tgz#a07447be069d64462e30c66611be20c4513963ed" + integrity sha512-CxRKyakfDrsLXiCyucVfVWVoaPA4oFSpPpDwlMcDFQvrv3XY6KEzMtMZrA+e/goC8xxp2WSOxHQubP8fPmmjOQ== + +"@rollup/rollup-linux-x64-gnu@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.0.tgz#8887c58bd51242754ae9c56947d6e883332dcc74" + integrity sha512-8PrJJA7/VU8ToHVEPu14FzuSAqVKyo5gg/J8xUerMbyNkWkO9j2ExBho/68RnJsMGNJq4zH114iAttgm7BZVkA== + +"@rollup/rollup-linux-x64-musl@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.0.tgz#6403fda72a2b3b9fbbeeff93d14f1c45ef9775f3" + integrity sha512-SkE6YQp+CzpyOrbw7Oc4MgXFvTw2UIBElvAvLCo230pyxOLmYwRPwZ/L5lBe/VW/qT1ZgND9wJfOsdy0XptRvw== + +"@rollup/rollup-openharmony-arm64@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.0.tgz#52809afccaff47e731b965a0c16e5686be819d5f" + integrity sha512-PZkNLPfvXeIOgJWA804zjSFH7fARBBCpCXxgkGDRjjAhRLOR8o0IGS01ykh5GYfod4c2yiiREuDM8iZ+pVsT+Q== + +"@rollup/rollup-win32-arm64-msvc@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.0.tgz#23fe00ddbb40b27a3889bc1e99e6310d97353ad5" + integrity sha512-q7cIIdFvWQoaCbLDUyUc8YfR3Jh2xx3unO8Dn6/TTogKjfwrax9SyfmGGK6cQhKtjePI7jRfd7iRYcxYs93esg== + +"@rollup/rollup-win32-ia32-msvc@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.0.tgz#520b588076b593413d919912d69dfd5728a1f305" + integrity sha512-XzNOVg/YnDOmFdDKcxxK410PrcbcqZkBmz+0FicpW5jtjKQxcW1BZJEQOF0NJa6JO7CZhett8GEtRN/wYLYJuw== + +"@rollup/rollup-win32-x64-msvc@4.50.0": + version "4.50.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.0.tgz#d81efe6a12060c7feddf9805e2a94c3ab0679f48" + integrity sha512-xMmiWRR8sp72Zqwjgtf3QbZfF1wdh8X2ABu3EaozvZcyHJeU0r+XAnXdKgs4cCAp6ORoYoCygipYP1mjmbjrsg== "@rtsao/scc@^1.1.0": version "1.1.0" @@ -3197,11 +3200,6 @@ resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.9.tgz#9f00abff2a17687e675ce6669e7b53c9e7d145f0" integrity sha512-8t4HtkW4wxiPVedMpeZ63n3vlWxEIquo/zc1Tm8ElU+SqVV7+D3Na2PWaJUp179AzTragMWVwkMv7mvty0NfyQ== -"@types/jasmine@^5.1.9": - version "5.1.9" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.9.tgz#9f00abff2a17687e675ce6669e7b53c9e7d145f0" - integrity sha512-8t4HtkW4wxiPVedMpeZ63n3vlWxEIquo/zc1Tm8ElU+SqVV7+D3Na2PWaJUp179AzTragMWVwkMv7mvty0NfyQ== - "@types/json-schema@^7.0.15": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" @@ -3406,79 +3404,79 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@8.40.0": - version "8.40.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.40.0.tgz#19f959f273b32f5082c891903645e6a85328db4e" - integrity sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw== +"@typescript-eslint/eslint-plugin@8.41.0": + version "8.41.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.41.0.tgz#42209e2ce3e2274de0f5f9b75c777deedacaa558" + integrity sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.40.0" - "@typescript-eslint/type-utils" "8.40.0" - "@typescript-eslint/utils" "8.40.0" - "@typescript-eslint/visitor-keys" "8.40.0" + "@typescript-eslint/scope-manager" "8.41.0" + "@typescript-eslint/type-utils" "8.41.0" + "@typescript-eslint/utils" "8.41.0" + "@typescript-eslint/visitor-keys" "8.41.0" graphemer "^1.4.0" ignore "^7.0.0" natural-compare "^1.4.0" ts-api-utils "^2.1.0" -"@typescript-eslint/parser@8.40.0": - version "8.40.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.40.0.tgz#1bc9f3701ced29540eb76ff2d95ce0d52ddc7e69" - integrity sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw== +"@typescript-eslint/parser@8.41.0": + version "8.41.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.41.0.tgz#677f5b2b3fa947ee1eac4129220c051b1990d898" + integrity sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg== dependencies: - "@typescript-eslint/scope-manager" "8.40.0" - "@typescript-eslint/types" "8.40.0" - "@typescript-eslint/typescript-estree" "8.40.0" - "@typescript-eslint/visitor-keys" "8.40.0" + "@typescript-eslint/scope-manager" "8.41.0" + "@typescript-eslint/types" "8.41.0" + "@typescript-eslint/typescript-estree" "8.41.0" + "@typescript-eslint/visitor-keys" "8.41.0" debug "^4.3.4" -"@typescript-eslint/project-service@8.40.0": - version "8.40.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.40.0.tgz#1b7ba6079ff580c3215882fe75a43e5d3ed166b9" - integrity sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw== +"@typescript-eslint/project-service@8.41.0": + version "8.41.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.41.0.tgz#08ebf882d413a038926e73fda36e00c3dba84882" + integrity sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.40.0" - "@typescript-eslint/types" "^8.40.0" + "@typescript-eslint/tsconfig-utils" "^8.41.0" + "@typescript-eslint/types" "^8.41.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.40.0": - version "8.40.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.40.0.tgz#2fbfcc8643340d8cd692267e61548b946190be8a" - integrity sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w== +"@typescript-eslint/scope-manager@8.41.0": + version "8.41.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.41.0.tgz#c8aba12129cb9cead1f1727f58e6a0fcebeecdb5" + integrity sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ== dependencies: - "@typescript-eslint/types" "8.40.0" - "@typescript-eslint/visitor-keys" "8.40.0" + "@typescript-eslint/types" "8.41.0" + "@typescript-eslint/visitor-keys" "8.41.0" -"@typescript-eslint/tsconfig-utils@8.40.0", "@typescript-eslint/tsconfig-utils@^8.40.0": - version "8.40.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.40.0.tgz#8e8fdb9b988854aedd04abdde3239c4bdd2d26e4" - integrity sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw== +"@typescript-eslint/tsconfig-utils@8.41.0", "@typescript-eslint/tsconfig-utils@^8.41.0": + version "8.41.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.41.0.tgz#134dee36eb16cdd78095a20bca0516d10b5dda75" + integrity sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw== -"@typescript-eslint/type-utils@8.40.0": - version "8.40.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.40.0.tgz#a7e4a1f0815dd0ba3e4eef945cc87193ca32c422" - integrity sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow== +"@typescript-eslint/type-utils@8.41.0": + version "8.41.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.41.0.tgz#68d401e38fccf239925447e97bdbd048a9891ae5" + integrity sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ== dependencies: - "@typescript-eslint/types" "8.40.0" - "@typescript-eslint/typescript-estree" "8.40.0" - "@typescript-eslint/utils" "8.40.0" + "@typescript-eslint/types" "8.41.0" + "@typescript-eslint/typescript-estree" "8.41.0" + "@typescript-eslint/utils" "8.41.0" debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@8.40.0", "@typescript-eslint/types@^8.40.0": - version "8.40.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.40.0.tgz#0b580fdf643737aa5c01285314b5c6e9543846a9" - integrity sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg== +"@typescript-eslint/types@8.41.0", "@typescript-eslint/types@^8.41.0": + version "8.41.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.41.0.tgz#9935afeaae65e535abcbcee95383fa649c64d16d" + integrity sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag== -"@typescript-eslint/typescript-estree@8.40.0": - version "8.40.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.40.0.tgz#295149440ce7da81c790a4e14e327599a3a1e5c9" - integrity sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ== +"@typescript-eslint/typescript-estree@8.41.0": + version "8.41.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.41.0.tgz#7c9cff8b4334ce96f14e9689692e8cf426ce4d59" + integrity sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ== dependencies: - "@typescript-eslint/project-service" "8.40.0" - "@typescript-eslint/tsconfig-utils" "8.40.0" - "@typescript-eslint/types" "8.40.0" - "@typescript-eslint/visitor-keys" "8.40.0" + "@typescript-eslint/project-service" "8.41.0" + "@typescript-eslint/tsconfig-utils" "8.41.0" + "@typescript-eslint/types" "8.41.0" + "@typescript-eslint/visitor-keys" "8.41.0" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" @@ -3486,22 +3484,22 @@ semver "^7.6.0" ts-api-utils "^2.1.0" -"@typescript-eslint/utils@8.40.0", "@typescript-eslint/utils@^8.24.1": - version "8.40.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.40.0.tgz#8d0c6430ed2f5dc350784bb0d8be514da1e54054" - integrity sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg== +"@typescript-eslint/utils@8.41.0", "@typescript-eslint/utils@^8.24.1": + version "8.41.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.41.0.tgz#17cb3b766c1626311004ea41ffd8c27eb226b953" + integrity sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A== dependencies: "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.40.0" - "@typescript-eslint/types" "8.40.0" - "@typescript-eslint/typescript-estree" "8.40.0" + "@typescript-eslint/scope-manager" "8.41.0" + "@typescript-eslint/types" "8.41.0" + "@typescript-eslint/typescript-estree" "8.41.0" -"@typescript-eslint/visitor-keys@8.40.0": - version "8.40.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.40.0.tgz#c1b45196981311fed7256863be4bfb2d3eda332a" - integrity sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA== +"@typescript-eslint/visitor-keys@8.41.0": + version "8.41.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.41.0.tgz#16eb99b55d207f6688002a2cf425e039579aa9a9" + integrity sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg== dependencies: - "@typescript-eslint/types" "8.40.0" + "@typescript-eslint/types" "8.41.0" eslint-visitor-keys "^4.2.1" "@vitest/coverage-v8@^3.2.4": @@ -5118,10 +5116,10 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.0.1, chalk@^5.1.2, chalk@^5.3.0, chalk@^5.4.1, chalk@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.5.0.tgz#67ada1df5ca809dc84c9b819d76418ddcf128428" - integrity sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg== +chalk@^5.0.1, chalk@^5.1.2, chalk@^5.3.0, chalk@^5.4.1, chalk@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.0.tgz#a1a8d294ea3526dbb77660f12649a08490e33ab8" + integrity sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ== change-case@^4.1.2: version "4.1.2" @@ -8895,10 +8893,10 @@ isbinaryfile@^4.0.8: resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== -isbinaryfile@^5.0.0, isbinaryfile@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.4.tgz#2a2edefa76cafa66613fe4c1ea52f7f031017bdf" - integrity sha512-YKBKVkKhty7s8rxddb40oOkuP0NbaeXrQvLin6QMHL7Ypiy2RW9LwOVrVgZRyOrhQlayMd9t+D8yDy8MKFTSDQ== +isbinaryfile@^5.0.0, isbinaryfile@^5.0.6: + version "5.0.6" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.6.tgz#01eac28867aeffaebaee7eaf21d1dd3a67d7c0c7" + integrity sha512-I+NmIfBHUl+r2wcDd6JwE9yWje/PIVY/R5/CmV8dXLZd5K+L9X2klAOwfAHNnondLXkbHyTAleQAWonpTJBTtw== isexe@^2.0.0: version "2.0.0" @@ -9558,26 +9556,26 @@ lines-and-columns@^2.0.3: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== -lint-staged@^16.1.5: - version "16.1.5" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-16.1.5.tgz#e102066b2c98157bad03afffb491d2329553e86b" - integrity sha512-uAeQQwByI6dfV7wpt/gVqg+jAPaSp8WwOA8kKC/dv1qw14oGpnpAisY65ibGHUGDUv0rYaZ8CAJZ/1U8hUvC2A== +lint-staged@^16.1.6: + version "16.1.6" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-16.1.6.tgz#b0830df339a71f4207979a47c7be8ab0f38543ad" + integrity sha512-U4kuulU3CKIytlkLlaHcGgKscNfJPNTiDF2avIUGFCv7K95/DCYQ7Ra62ydeRWmgQGg9zJYw2dzdbztwJlqrow== dependencies: - chalk "^5.5.0" + chalk "^5.6.0" commander "^14.0.0" debug "^4.4.1" lilconfig "^3.1.3" - listr2 "^9.0.1" + listr2 "^9.0.3" micromatch "^4.0.8" nano-spawn "^1.0.2" pidtree "^0.6.0" string-argv "^0.3.2" yaml "^2.8.1" -listr2@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-9.0.1.tgz#3cad12d81d998f8024621d9b35c969dba5da4103" - integrity sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g== +listr2@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-9.0.3.tgz#5181284019e1d577dc2d705ca6d3a148cf15adf3" + integrity sha512-0aeh5HHHgmq1KRdMMDHfhMWQmIT/m7nRDTlxlFqni2Sp0had9baqsjJRvDGdlvgd6NmPE0nPloOipiQJGFtTHQ== dependencies: cli-truncate "^4.0.0" colorette "^2.0.20" @@ -12047,33 +12045,34 @@ rollup-plugin-serve@^3.0.0: mime "^4" opener "1" -rollup@^4.28.0, rollup@^4.4.0, rollup@^4.40.0, rollup@^4.48.1: - version "4.48.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.48.1.tgz#acd64b7e3f8734728c5daedd5db42f4a8ea57858" - integrity sha512-jVG20NvbhTYDkGAty2/Yh7HK6/q3DGSRH4o8ALKGArmMuaauM9kLfoMZ+WliPwA5+JHr2lTn3g557FxBV87ifg== +rollup@^4.28.0, rollup@^4.4.0, rollup@^4.40.0, rollup@^4.50.0: + version "4.50.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.50.0.tgz#6f237f598b7163ede33ce827af8534c929aaa186" + integrity sha512-/Zl4D8zPifNmyGzJS+3kVoyXeDeT/GrsJM94sACNg9RtUE0hrHa1bNPtRSrfHTMH5HjRzce6K7rlTh3Khiw+pw== dependencies: "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.48.1" - "@rollup/rollup-android-arm64" "4.48.1" - "@rollup/rollup-darwin-arm64" "4.48.1" - "@rollup/rollup-darwin-x64" "4.48.1" - "@rollup/rollup-freebsd-arm64" "4.48.1" - "@rollup/rollup-freebsd-x64" "4.48.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.48.1" - "@rollup/rollup-linux-arm-musleabihf" "4.48.1" - "@rollup/rollup-linux-arm64-gnu" "4.48.1" - "@rollup/rollup-linux-arm64-musl" "4.48.1" - "@rollup/rollup-linux-loongarch64-gnu" "4.48.1" - "@rollup/rollup-linux-ppc64-gnu" "4.48.1" - "@rollup/rollup-linux-riscv64-gnu" "4.48.1" - "@rollup/rollup-linux-riscv64-musl" "4.48.1" - "@rollup/rollup-linux-s390x-gnu" "4.48.1" - "@rollup/rollup-linux-x64-gnu" "4.48.1" - "@rollup/rollup-linux-x64-musl" "4.48.1" - "@rollup/rollup-win32-arm64-msvc" "4.48.1" - "@rollup/rollup-win32-ia32-msvc" "4.48.1" - "@rollup/rollup-win32-x64-msvc" "4.48.1" + "@rollup/rollup-android-arm-eabi" "4.50.0" + "@rollup/rollup-android-arm64" "4.50.0" + "@rollup/rollup-darwin-arm64" "4.50.0" + "@rollup/rollup-darwin-x64" "4.50.0" + "@rollup/rollup-freebsd-arm64" "4.50.0" + "@rollup/rollup-freebsd-x64" "4.50.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.50.0" + "@rollup/rollup-linux-arm-musleabihf" "4.50.0" + "@rollup/rollup-linux-arm64-gnu" "4.50.0" + "@rollup/rollup-linux-arm64-musl" "4.50.0" + "@rollup/rollup-linux-loongarch64-gnu" "4.50.0" + "@rollup/rollup-linux-ppc64-gnu" "4.50.0" + "@rollup/rollup-linux-riscv64-gnu" "4.50.0" + "@rollup/rollup-linux-riscv64-musl" "4.50.0" + "@rollup/rollup-linux-s390x-gnu" "4.50.0" + "@rollup/rollup-linux-x64-gnu" "4.50.0" + "@rollup/rollup-linux-x64-musl" "4.50.0" + "@rollup/rollup-openharmony-arm64" "4.50.0" + "@rollup/rollup-win32-arm64-msvc" "4.50.0" + "@rollup/rollup-win32-ia32-msvc" "4.50.0" + "@rollup/rollup-win32-x64-msvc" "4.50.0" fsevents "~2.3.2" router@^2.2.0: @@ -13584,15 +13583,15 @@ typed-query-selector@^2.12.0: resolved "https://registry.yarnpkg.com/typed-query-selector/-/typed-query-selector-2.12.0.tgz#92b65dbc0a42655fccf4aeb1a08b1dddce8af5f2" integrity sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg== -typescript-eslint@8.40.0: - version "8.40.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.40.0.tgz#27541748f3ca889c9698327bdacf815f7dc61804" - integrity sha512-Xvd2l+ZmFDPEt4oj1QEXzA4A2uUK6opvKu3eGN9aGjB8au02lIVcLyi375w94hHyejTOmzIU77L8ol2sRg9n7Q== +typescript-eslint@8.41.0: + version "8.41.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.41.0.tgz#a13879a5998717140fefb0d808c8c2fbde1cb769" + integrity sha512-n66rzs5OBXW3SFSnZHr2T685q1i4ODm2nulFJhMZBotaTavsS8TrI3d7bDlRSs9yWo7HmyWrN9qDu14Qv7Y0Dw== dependencies: - "@typescript-eslint/eslint-plugin" "8.40.0" - "@typescript-eslint/parser" "8.40.0" - "@typescript-eslint/typescript-estree" "8.40.0" - "@typescript-eslint/utils" "8.40.0" + "@typescript-eslint/eslint-plugin" "8.41.0" + "@typescript-eslint/parser" "8.41.0" + "@typescript-eslint/typescript-estree" "8.41.0" + "@typescript-eslint/utils" "8.41.0" typescript@5.8.2: version "5.8.2" From 15966637ad1968fe7782dba919431a058cfe4dd7 Mon Sep 17 00:00:00 2001 From: Will Harney <62956339+wjhsf@users.noreply.github.com> Date: Tue, 2 Sep 2025 19:13:44 +0000 Subject: [PATCH 16/35] chore(wtr): update files @W-19097558 (#5468) * test(wtr): clear and clear global stylesheets when needed * test(wtr): mock LWC to validate sanitizeAttribute We can't mock individual methods of ESM modules in the browser, so we use WTR's import map plugin to redirect all "lwc" imports to a mock file. The mock file is mostly a re-export. * chore(deps): bump @types/jasmine * chore(wtr): convert package to module * chore(wtr): copy files instead of using symlinks --- .../configs/{base.mjs => base.js} | 9 +- .../configs/{hydration.mjs => hydration.js} | 4 +- .../{integration.mjs => integration.js} | 4 +- ...serve-hydration.mjs => serve-hydration.js} | 2 +- ...e-integration.mjs => serve-integration.js} | 2 +- .../helpers/{aria.mjs => aria.js} | 0 .../helpers/{console.mjs => console.js} | 0 .../helpers/{constants.mjs => constants.js} | 2 +- .../helpers/{hooks.mjs => hooks.js} | 0 .../matchers/{console.mjs => console.js} | 0 .../matchers/{errors.mjs => errors.js} | 0 .../helpers/matchers/{index.mjs => index.js} | 6 +- .../matchers/{jasmine.mjs => jasmine.js} | 0 .../helpers/{options.mjs => options.js} | 0 .../helpers/{setup.mjs => setup.js} | 4 +- .../helpers/{signals.mjs => signals.js} | 0 .../helpers/{utils.mjs => utils.js} | 10 +- .../@lwc/integration-not-karma/mocks/lwc.js | 6 + .../@lwc/integration-not-karma/package.json | 5 +- packages/@lwc/integration-not-karma/test | 1 - .../@lwc/integration-not-karma/test-hydration | 1 - .../index.spec.js | 16 + .../x/main/main.html | 3 + .../x/main/main.js | 6 + .../adjacent-text-nodes/index.spec.js | 34 + .../adjacent-text-nodes/x/main/main.html | 4 + .../adjacent-text-nodes/x/main/main.js | 5 + .../attributes/class/index.spec.js | 14 + .../attributes/class/x/main/main.html | 3 + .../attributes/class/x/main/main.js | 5 + .../attributes/expression/index.spec.js | 17 + .../attributes/expression/x/main/main.html | 3 + .../attributes/expression/x/main/main.js | 5 + .../attributes/falsy-mismatch/index.spec.js | 40 + .../falsy-mismatch/x/main/main.html | 9 + .../attributes/falsy-mismatch/x/main/main.js | 11 + .../attributes/falsy/index.spec.js | 16 + .../attributes/falsy/x/main/main.html | 9 + .../attributes/falsy/x/main/main.js | 11 + .../global-parent-overrides/index.spec.js | 36 + .../x/child/child.html | 7 + .../global-parent-overrides/x/child/child.js | 10 + .../global-parent-overrides/x/main/main.html | 16 + .../global-parent-overrides/x/main/main.js | 11 + .../attributes/non-reflective/index.spec.js | 19 + .../non-reflective/x/child/child.html | 3 + .../non-reflective/x/child/child.js | 3 + .../non-reflective/x/main/main.html | 28 + .../attributes/non-reflective/x/main/main.js | 7 + .../attributes/reflective/index.spec.js | 19 + .../attributes/reflective/x/child/child.html | 13 + .../attributes/reflective/x/child/child.js | 3 + .../attributes/reflective/x/main/main.html | 28 + .../attributes/reflective/x/main/main.js | 17 + .../connected-callback/index.spec.js | 15 + .../connected-callback/x/main/main.html | 3 + .../connected-callback/x/main/main.js | 8 + .../disconnected-callback/index.spec.js | 28 + .../disconnected-callback/x/foo/foo.html | 3 + .../disconnected-callback/x/foo/foo.js | 9 + .../disconnected-callback/x/main/main.html | 6 + .../disconnected-callback/x/main/main.js | 10 + .../render-method/index.spec.js | 24 + .../render-method/x/main/a.html | 3 + .../render-method/x/main/b.html | 3 + .../render-method/x/main/main.js | 11 + .../rendered-callback/index.spec.js | 19 + .../rendered-callback/x/main/main.html | 3 + .../rendered-callback/x/main/main.js | 8 + .../test-hydration/context/index.spec.js | 101 ++ .../test-hydration/context/x/base/base.js | 11 + .../test-hydration/context/x/child/child.html | 3 + .../test-hydration/context/x/child/child.js | 9 + .../x/contextManager/contextManager.js | 57 ++ .../context/x/grandparent/grandparent.html | 5 + .../context/x/grandparent/grandparent.js | 8 + .../grandparentContext/grandparentContext.js | 4 + .../test-hydration/context/x/main/main.html | 5 + .../test-hydration/context/x/main/main.js | 11 + .../context/x/parent/parent.html | 4 + .../test-hydration/context/x/parent/parent.js | 8 + .../context/x/parentContext/parentContext.js | 5 + .../x/tooMuchContext/tooMuchContext.html | 3 + .../x/tooMuchContext/tooMuchContext.js | 11 + .../directives/comments/index.spec.js | 26 + .../directives/comments/x/main/main.html | 7 + .../directives/comments/x/main/main.js | 5 + .../directives/dom-manual/index.spec.js | 13 + .../directives/dom-manual/x/main/main.html | 3 + .../directives/dom-manual/x/main/main.js | 7 + .../directives/for-each/index.spec.js | 31 + .../directives/for-each/x/main/main.html | 7 + .../directives/for-each/x/main/main.js | 5 + .../directives/if-false/index.spec.js | 19 + .../directives/if-false/x/main/main.html | 5 + .../directives/if-false/x/main/main.js | 5 + .../directives/if-true/index.spec.js | 19 + .../directives/if-true/x/main/main.html | 5 + .../directives/if-true/x/main/main.js | 5 + .../directives/iterator/index.spec.js | 31 + .../directives/iterator/x/main/main.html | 7 + .../directives/iterator/x/main/main.js | 5 + .../directives/lwc-dynamic/index.spec.js | 22 + .../directives/lwc-dynamic/x/child/child.html | 3 + .../directives/lwc-dynamic/x/child/child.js | 5 + .../directives/lwc-dynamic/x/main/main.html | 3 + .../directives/lwc-dynamic/x/main/main.js | 7 + .../directives/lwc-inner-html/index.spec.js | 22 + .../lwc-inner-html/x/main/main.html | 3 + .../directives/lwc-inner-html/x/main/main.js | 5 + .../directives/lwc-is/index.spec.js | 22 + .../directives/lwc-is/x/child/child.html | 3 + .../directives/lwc-is/x/child/child.js | 5 + .../directives/lwc-is/x/main/main.html | 3 + .../directives/lwc-is/x/main/main.js | 7 + .../directives/lwc-on/index.spec.js | 20 + .../directives/lwc-on/x/main/main.html | 3 + .../directives/lwc-on/x/main/main.js | 25 + .../errors/already-hydrated/index.spec.js | 13 + .../errors/already-hydrated/x/main/main.html | 3 + .../errors/already-hydrated/x/main/main.js | 3 + .../events/dynamic/index.spec.js | 18 + .../events/dynamic/x/main/main.html | 5 + .../events/dynamic/x/main/main.js | 15 + .../events/static/index.spec.js | 18 + .../events/static/x/main/main.html | 5 + .../events/static/x/main/main.js | 14 + .../inner-outer-html/index.spec.js | 16 + .../x/component/component.html | 3 + .../inner-outer-html/x/component/component.js | 3 + .../inner-outer-html/x/main/main.html | 20 + .../inner-outer-html/x/main/main.js | 6 + .../input/dynamic/index.spec.js | 334 +++++++ .../input/dynamic/x/main/main.html | 40 + .../input/dynamic/x/main/main.js | 16 + .../test-hydration/input/static/index.spec.js | 209 +++++ .../input/static/x/main/main.html | 24 + .../input/static/x/main/main.js | 3 + .../connected-callback/index.spec.js | 15 + .../connected-callback/x/main/main.html | 3 + .../connected-callback/x/main/main.js | 10 + .../disconnected-callback/index.spec.js | 28 + .../disconnected-callback/x/foo/foo.html | 3 + .../disconnected-callback/x/foo/foo.js | 11 + .../disconnected-callback/x/main/main.html | 6 + .../disconnected-callback/x/main/main.js | 12 + .../render-method/index.spec.js | 24 + .../render-method/x/main/a.html | 3 + .../render-method/x/main/b.html | 3 + .../render-method/x/main/main.js | 13 + .../rendered-callback/index.spec.js | 19 + .../rendered-callback/x/main/main.html | 3 + .../rendered-callback/x/main/main.js | 10 + .../directives/comments/index.spec.js | 26 + .../directives/comments/x/main/main.html | 7 + .../directives/comments/x/main/main.js | 7 + .../directives/for-each/index.spec.js | 31 + .../directives/for-each/x/main/main.html | 7 + .../directives/for-each/x/main/main.js | 7 + .../directives/if-false/index.spec.js | 19 + .../directives/if-false/x/main/main.html | 5 + .../directives/if-false/x/main/main.js | 7 + .../directives/if-true/index.spec.js | 19 + .../directives/if-true/x/main/main.html | 5 + .../directives/if-true/x/main/main.js | 7 + .../directives/iterator/index.spec.js | 31 + .../directives/iterator/x/main/main.html | 7 + .../directives/iterator/x/main/main.js | 7 + .../directives/lwc-dynamic/index.spec.js | 22 + .../directives/lwc-dynamic/x/child/child.html | 3 + .../directives/lwc-dynamic/x/child/child.js | 7 + .../directives/lwc-dynamic/x/main/main.html | 3 + .../directives/lwc-dynamic/x/main/main.js | 9 + .../directives/lwc-inner-html/index.spec.js | 25 + .../lwc-inner-html/x/main/main.html | 3 + .../directives/lwc-inner-html/x/main/main.js | 7 + .../light-dom/directives/lwc-is/index.spec.js | 22 + .../directives/lwc-is/x/child/child.html | 3 + .../directives/lwc-is/x/child/child.js | 7 + .../directives/lwc-is/x/main/main.html | 3 + .../directives/lwc-is/x/main/main.js | 9 + .../light-parent-shadow-child/index.spec.js | 23 + .../x/main/main.html | 4 + .../light-parent-shadow-child/x/main/main.js | 5 + .../x/shadowChild/shadowChild.html | 3 + .../x/shadowChild/shadowChild.js | 3 + .../can-scope-shadow-dom-styles/index.spec.js | 14 + .../x/lightChild/lightChild.html | 3 + .../x/lightChild/lightChild.js | 5 + .../x/main/main.html | 4 + .../x/main/main.js | 3 + .../x/main/main.scoped.css | 7 + .../index.spec.js | 24 + .../x/basic/basic.css | 3 + .../x/basic/basic.html | 3 + .../x/basic/basic.js | 5 + .../x/basic/basic.scoped.css | 7 + .../x/main/main.html | 4 + .../x/main/main.js | 3 + .../x/other/other.css | 3 + .../x/other/other.html | 3 + .../x/other/other.js | 5 + .../deduped-scoped-styles/index.spec.js | 9 + .../deduped-scoped-styles/x/child/child.html | 3 + .../deduped-scoped-styles/x/child/child.js | 5 + .../x/child/child.scoped.css | 3 + .../deduped-scoped-styles/x/main/main.css | 3 + .../deduped-scoped-styles/x/main/main.html | 4 + .../deduped-scoped-styles/x/main/main.js | 5 + .../child-scoped-styles/index.spec.js | 18 + .../child-scoped-styles/x/child/child.html | 3 + .../child-scoped-styles/x/child/child.js | 5 + .../x/child/child.scoped.css | 3 + .../child-scoped-styles/x/main/main.css | 3 + .../child-scoped-styles/x/main/main.html | 3 + .../child-scoped-styles/x/main/main.js | 5 + .../parent-scoped-styles/index.spec.js | 18 + .../parent-scoped-styles/x/child/child.css | 3 + .../parent-scoped-styles/x/child/child.html | 3 + .../parent-scoped-styles/x/child/child.js | 5 + .../parent-scoped-styles/x/main/main.html | 3 + .../parent-scoped-styles/x/main/main.js | 5 + .../x/main/main.scoped.css | 3 + .../without-scoped-styles/index.spec.js | 18 + .../without-scoped-styles/x/child/child.css | 3 + .../without-scoped-styles/x/child/child.html | 3 + .../without-scoped-styles/x/child/child.js | 5 + .../without-scoped-styles/x/main/main.css | 3 + .../without-scoped-styles/x/main/main.html | 3 + .../without-scoped-styles/x/main/main.js | 5 + .../index.spec.js | 31 + .../x/main/a.html | 3 + .../x/main/b.html | 3 + .../x/main/b.scoped.css | 7 + .../x/main/c.html | 3 + .../x/main/d.html | 3 + .../x/main/d.scoped.css | 7 + .../x/main/main.js | 21 + .../dynamic-class/index.spec.js | 8 + .../dynamic-class/x/child/child.html | 3 + .../dynamic-class/x/child/child.js | 5 + .../dynamic-class/x/child/child.scoped.css | 3 + .../dynamic-class/x/main/main.html | 3 + .../dynamic-class/x/main/main.js | 6 + .../dynamic-class/x/main/main.scoped.css | 7 + .../static-class/index.spec.js | 8 + .../static-class/x/child/child.html | 3 + .../static-class/x/child/child.js | 5 + .../static-class/x/child/child.scoped.css | 3 + .../static-class/x/main/main.html | 3 + .../static-class/x/main/main.js | 5 + .../static-class/x/main/main.scoped.css | 7 + .../without-class/index.spec.js | 8 + .../without-class/x/child/child.html | 3 + .../without-class/x/child/child.js | 5 + .../without-class/x/child/child.scoped.css | 3 + .../without-class/x/main/main.html | 3 + .../without-class/x/main/main.js | 5 + .../without-class/x/main/main.scoped.css | 3 + .../shadow-parent-light-child/index.spec.js | 23 + .../x/lightChild/lightChild.html | 3 + .../x/lightChild/lightChild.js | 5 + .../x/main/main.html | 4 + .../shadow-parent-light-child/x/main/main.js | 3 + .../light-dom/slots/default/index.spec.js | 46 + .../light-dom/slots/default/x/main/main.html | 8 + .../light-dom/slots/default/x/main/main.js | 17 + .../slots/default/x/withSlots/withSlots.html | 5 + .../slots/default/x/withSlots/withSlots.js | 15 + .../light-dom/slots/named/index.spec.js | 46 + .../light-dom/slots/named/x/main/main.html | 10 + .../light-dom/slots/named/x/main/main.js | 17 + .../slots/named/x/withSlots/withSlots.html | 5 + .../slots/named/x/withSlots/withSlots.js | 15 + .../slots/nested-and-scoped/index.spec.js | 41 + .../nested-and-scoped/x/child/child.html | 3 + .../slots/nested-and-scoped/x/child/child.js | 5 + .../slots/nested-and-scoped/x/main/main.html | 14 + .../slots/nested-and-scoped/x/main/main.js | 5 + .../nested-and-scoped/x/scoped/scoped.html | 5 + .../nested-and-scoped/x/scoped/scoped.js | 12 + .../light-dom/slots/nested/index.spec.js | 54 ++ .../light-dom/slots/nested/x/child/child.html | 5 + .../light-dom/slots/nested/x/child/child.js | 15 + .../light-dom/slots/nested/x/main/main.html | 10 + .../light-dom/slots/nested/x/main/main.js | 17 + .../slots/nested/x/withSlots/withSlots.html | 5 + .../slots/nested/x/withSlots/withSlots.js | 15 + .../light-dom/slots/no-content/index.spec.js | 31 + .../slots/no-content/x/main/main.html | 3 + .../light-dom/slots/no-content/x/main/main.js | 17 + .../no-content/x/withSlots/withSlots.html | 5 + .../slots/no-content/x/withSlots/withSlots.js | 15 + .../attrs-compatibility/index.spec.js | 30 + .../attrs-compatibility/x/main/main.html | 18 + .../attrs-compatibility/x/main/main.js | 5 + .../mismatches/attrs-expression/index.spec.js | 28 + .../attrs-expression/x/main/main.html | 3 + .../attrs-expression/x/main/main.js | 5 + .../dynamic-different/index.spec.js | 29 + .../dynamic-different/x/main/main.html | 3 + .../dynamic-different/x/main/main.js | 5 + .../index.spec.js | 32 + .../x/main/main.html | 3 + .../x/main/main.js | 5 + .../index.spec.js | 32 + .../x/main/main.html | 3 + .../x/main/main.js | 5 + .../index.spec.js | 26 + .../x/main/main.html | 3 + .../x/main/main.js | 5 + .../class-attr/dynamic-same/index.spec.js | 18 + .../class-attr/dynamic-same/x/main/main.html | 3 + .../class-attr/dynamic-same/x/main/main.js | 5 + .../index.spec.js | 28 + .../x/main/main.html | 3 + .../x/main/main.js | 4 + .../index.spec.js | 28 + .../x/main/main.html | 3 + .../x/main/main.js | 4 + .../class-attr/empty-string/index.spec.js | 22 + .../class-attr/empty-string/x/main/main.html | 3 + .../class-attr/empty-string/x/main/main.js | 4 + .../extra-class-from-client/index.spec.js | 30 + .../extra-class-from-client/x/main/main.html | 8 + .../extra-class-from-client/x/main/main.js | 5 + .../extra-class-from-server/index.spec.js | 30 + .../extra-class-from-server/x/main/main.html | 8 + .../extra-class-from-server/x/main/main.js | 5 + .../only-present-in-ssr/index.spec.js | 22 + .../only-present-in-ssr/x/child/child.html | 3 + .../only-present-in-ssr/x/child/child.js | 3 + .../only-present-in-ssr/x/main/main.html | 4 + .../only-present-in-ssr/x/main/main.js | 3 + .../same-different-order/index.spec.js | 37 + .../same-different-order/x/main/main.html | 8 + .../same-different-order/x/main/main.js | 5 + .../same-with-static-parts/index.spec.js | 20 + .../same-with-static-parts/x/main/main.html | 4 + .../same-with-static-parts/x/main/main.js | 5 + .../mismatches/class-attr/same/index.spec.js | 15 + .../class-attr/same/x/main/main.html | 3 + .../mismatches/class-attr/same/x/main/main.js | 3 + .../index.spec.js | 22 + .../x/main/main.html | 4 + .../x/main/main.js | 5 + .../x/main/main.scoped.css | 3 + .../comment-instead-of-text/index.spec.js | 28 + .../comment-instead-of-text/x/main/main.html | 4 + .../comment-instead-of-text/x/main/main.js | 5 + .../different-lwc-inner-html/index.spec.js | 37 + .../different-lwc-inner-html/x/main/main.html | 3 + .../different-lwc-inner-html/x/main/main.js | 5 + .../index.spec.js | 36 + .../x/main/main.html | 3 + .../x/main/main.js | 7 + .../dynamic-component/index.spec.js | 28 + .../dynamic-component/x/client/client.html | 3 + .../dynamic-component/x/client/client.js | 3 + .../dynamic-component/x/main/main.html | 3 + .../dynamic-component/x/main/main.js | 21 + .../dynamic-component/x/server/server.html | 3 + .../dynamic-component/x/server/server.js | 3 + .../element-instead-of-textNode/index.spec.js | 30 + .../x/main/main.html | 4 + .../x/main/main.js | 5 + .../mismatches/empty-nodes/index.spec.js | 18 + .../mismatches/empty-nodes/x/main/main.html | 3 + .../mismatches/empty-nodes/x/main/main.js | 7 + .../favors-client-side-comment/index.spec.js | 28 + .../x/main/main.html | 4 + .../favors-client-side-comment/x/main/main.js | 5 + .../favors-client-side-text/index.spec.js | 36 + .../favors-client-side-text/x/main/main.html | 3 + .../favors-client-side-text/x/main/main.js | 5 + .../attr-mutated-class-mismatch/index.spec.js | 35 + .../x/child/child.html | 3 + .../x/child/child.js | 9 + .../x/main/main.html | 3 + .../x/main/main.js | 9 + .../attr/index.spec.js | 22 + .../attr/x/child/child.html | 3 + .../attr/x/child/child.js | 9 + .../attr/x/main/main.html | 3 + .../attr/x/main/main.js | 3 + .../class-mutated-attr-mismatch/index.spec.js | 34 + .../x/child/child.html | 3 + .../x/child/child.js | 11 + .../x/main/main.html | 3 + .../x/main/main.js | 9 + .../class/index.spec.js | 22 + .../class/x/child/child.html | 3 + .../class/x/child/child.js | 11 + .../class/x/main/main.html | 3 + .../class/x/main/main.js | 3 + .../style/index.spec.js | 20 + .../style/x/child/child.html | 3 + .../style/x/child/child.js | 9 + .../style/x/main/main.html | 3 + .../style/x/main/main.js | 3 + .../foreach/index.spec.js | 26 + .../foreach/x/main/main.html | 7 + .../foreach/x/main/main.js | 5 + .../if-true/index.spec.js | 37 + .../if-true/x/main/main.html | 7 + .../if-true/x/main/main.js | 5 + .../preserve-ssr-attr/index.spec.js | 22 + .../preserve-ssr-attr/x/main/main.html | 15 + .../preserve-ssr-attr/x/main/main.js | 5 + .../mismatches/sibling-issue/index.spec.js | 27 + .../mismatches/sibling-issue/x/main/main.html | 3 + .../mismatches/sibling-issue/x/main/main.js | 14 + .../computed/different-priority/index.spec.js | 32 + .../different-priority/x/main/main.html | 3 + .../different-priority/x/main/main.js | 5 + .../computed/extra-from-client/index.spec.js | 32 + .../extra-from-client/x/main/main.html | 3 + .../computed/extra-from-client/x/main/main.js | 5 + .../computed/extra-from-server/index.spec.js | 30 + .../extra-from-server/x/main/main.html | 3 + .../computed/extra-from-server/x/main/main.js | 5 + .../same-different-order/index.spec.js | 31 + .../same-different-order/x/main/main.html | 3 + .../same-different-order/x/main/main.js | 5 + .../computed/same-priority/index.spec.js | 15 + .../computed/same-priority/x/main/main.html | 3 + .../computed/same-priority/x/main/main.js | 6 + .../style-attr/computed/same/index.spec.js | 17 + .../style-attr/computed/same/x/main/main.html | 3 + .../style-attr/computed/same/x/main/main.js | 5 + .../index.spec.js | 28 + .../x/main/main.html | 3 + .../x/main/main.js | 4 + .../index.spec.js | 28 + .../x/main/main.html | 3 + .../x/main/main.js | 4 + .../static/different-priority/index.spec.js | 32 + .../different-priority/x/main/main.html | 8 + .../static/different-priority/x/main/main.js | 5 + .../static/extra-from-client/index.spec.js | 32 + .../static/extra-from-client/x/main/main.html | 8 + .../static/extra-from-client/x/main/main.js | 5 + .../static/extra-from-server/index.spec.js | 30 + .../static/extra-from-server/x/main/main.html | 8 + .../static/extra-from-server/x/main/main.js | 5 + .../static/same-different-order/index.spec.js | 39 + .../same-different-order/x/main/main.html | 8 + .../same-different-order/x/main/main.js | 5 + .../static/same-priority/index.spec.js | 15 + .../static/same-priority/x/main/main.html | 4 + .../static/same-priority/x/main/main.js | 3 + .../same-with-static-parts/index.spec.js | 20 + .../same-with-static-parts/x/main/main.html | 4 + .../same-with-static-parts/x/main/main.js | 5 + .../style-attr/static/same/index.spec.js | 17 + .../style-attr/static/same/x/main/main.html | 3 + .../style-attr/static/same/x/main/main.js | 3 + .../style-attr/with-newlines/index.spec.js | 17 + .../style-attr/with-newlines/x/main/main.html | 3 + .../style-attr/with-newlines/x/main/main.js | 10 + .../text-instead-of-comment/index.spec.js | 28 + .../text-instead-of-comment/x/main/main.html | 4 + .../text-instead-of-comment/x/main/main.js | 5 + .../textNode-instead-of-element/index.spec.js | 30 + .../x/main/main.html | 4 + .../x/main/main.js | 5 + .../type-coercion-to-string/index.spec.js | 20 + .../type-coercion-to-string/x/main/main.html | 4 + .../type-coercion-to-string/x/main/main.js | 5 + .../attr-mismatch/index.spec.js | 13 + .../attr-mismatch/x/child/child.html | 3 + .../attr-mismatch/x/child/child.js | 10 + .../attr-mismatch/x/main/main.html | 5 + .../attr-mismatch/x/main/main.js | 3 + .../class-mismatch-no-opt-out/index.spec.js | 6 + .../x/child/child.html | 3 + .../x/child/child.js | 9 + .../x/main/main.html | 5 + .../class-mismatch-no-opt-out/x/main/main.js | 3 + .../class-mismatch-only/index.spec.js | 13 + .../class-mismatch-only/x/child/child.html | 3 + .../class-mismatch-only/x/child/child.js | 9 + .../class-mismatch-only/x/main/main.html | 5 + .../class-mismatch-only/x/main/main.js | 3 + .../class-mismatch/index.spec.js | 13 + .../class-mismatch/x/child/child.html | 3 + .../class-mismatch/x/child/child.js | 9 + .../class-mismatch/x/main/main.html | 5 + .../class-mismatch/x/main/main.js | 3 + .../no-opt-out/index.spec.js | 19 + .../no-opt-out/x/child/child.js | 13 + .../no-opt-out/x/child/template.html | 2 + .../no-opt-out/x/main/main.html | 3 + .../no-opt-out/x/main/main.js | 3 + .../opt-out-array/index.spec.js | 13 + .../opt-out-array/x/child/child.js | 15 + .../opt-out-array/x/child/template.html | 2 + .../opt-out-array/x/main/main.html | 3 + .../opt-out-array/x/main/main.js | 3 + .../opt-out-true/index.spec.js | 13 + .../opt-out-true/x/child/child.js | 15 + .../opt-out-true/x/child/template.html | 2 + .../opt-out-true/x/main/main.html | 3 + .../opt-out-true/x/main/main.js | 3 + .../opt-out-wrong-array/index.spec.js | 19 + .../opt-out-wrong-array/x/child/child.js | 15 + .../opt-out-wrong-array/x/child/template.html | 2 + .../opt-out-wrong-array/x/main/main.html | 3 + .../opt-out-wrong-array/x/main/main.js | 3 + .../no-mutation/index.spec.js | 13 + .../no-mutation/x/child/child.html | 3 + .../no-mutation/x/child/child.js | 5 + .../no-mutation/x/main/main.html | 5 + .../no-mutation/x/main/main.js | 3 + .../number-of-child-els/index.spec.js | 25 + .../number-of-child-els/x/child/child.html | 5 + .../number-of-child-els/x/child/child.js | 9 + .../number-of-child-els/x/main/main.html | 5 + .../number-of-child-els/x/main/main.js | 5 + .../index.spec.js | 18 + .../x/child/child.html | 2 + .../x/child/child.js | 5 + .../x/main/main.html | 3 + .../x/main/main.js | 3 + .../warnings/opt-out-false/index.spec.js | 18 + .../warnings/opt-out-false/x/child/child.html | 2 + .../warnings/opt-out-false/x/child/child.js | 5 + .../warnings/opt-out-false/x/main/main.html | 3 + .../warnings/opt-out-false/x/main/main.js | 3 + .../warnings/opt-out-non-array/index.spec.js | 18 + .../opt-out-non-array/x/child/child.html | 2 + .../opt-out-non-array/x/child/child.js | 5 + .../opt-out-non-array/x/main/main.html | 3 + .../warnings/opt-out-non-array/x/main/main.js | 3 + .../warnings/opt-out-null/index.spec.js | 18 + .../warnings/opt-out-null/x/child/child.html | 2 + .../warnings/opt-out-null/x/child/child.js | 5 + .../warnings/opt-out-null/x/main/main.html | 3 + .../warnings/opt-out-null/x/main/main.js | 3 + .../refs/component/index.spec.js | 11 + .../refs/component/x/child/child.js | 3 + .../refs/component/x/main/main.html | 3 + .../refs/component/x/main/main.js | 7 + .../test-hydration/refs/element/index.spec.js | 11 + .../refs/element/x/main/main.html | 3 + .../refs/element/x/main/main.js | 7 + .../test-hydration/simple/index.spec.js | 26 + .../test-hydration/simple/x/child/child.html | 3 + .../test-hydration/simple/x/child/child.js | 3 + .../test-hydration/simple/x/main/main.html | 4 + .../test-hydration/simple/x/main/main.js | 5 + .../slots/default/index.spec.js | 46 + .../slots/default/x/main/main.html | 8 + .../slots/default/x/main/main.js | 15 + .../slots/default/x/withSlots/withSlots.html | 5 + .../slots/default/x/withSlots/withSlots.js | 13 + .../test-hydration/slots/named/index.spec.js | 46 + .../slots/named/x/main/main.html | 10 + .../test-hydration/slots/named/x/main/main.js | 15 + .../slots/named/x/withSlots/withSlots.html | 5 + .../slots/named/x/withSlots/withSlots.js | 13 + .../test-hydration/slots/nested/index.spec.js | 54 ++ .../slots/nested/x/child/child.html | 5 + .../slots/nested/x/child/child.js | 13 + .../slots/nested/x/main/main.html | 10 + .../slots/nested/x/main/main.js | 15 + .../slots/nested/x/withSlots/withSlots.html | 5 + .../slots/nested/x/withSlots/withSlots.js | 13 + .../slots/no-content/index.spec.js | 31 + .../slots/no-content/x/main/main.html | 3 + .../slots/no-content/x/main/main.js | 15 + .../no-content/x/withSlots/withSlots.html | 5 + .../slots/no-content/x/withSlots/withSlots.js | 13 + .../apply-style-to-host/index.spec.js | 10 + .../apply-style-to-host/x/main/main.css | 8 + .../apply-style-to-host/x/main/main.html | 3 + .../apply-style-to-host/x/main/main.js | 3 + .../stylesheet/escaping/index.spec.js | 18 + .../stylesheet/escaping/x/main/main.css | 24 + .../stylesheet/escaping/x/main/main.html | 6 + .../stylesheet/escaping/x/main/main.js | 3 + .../host-scope-token/basic/index.spec.js | 21 + .../host-scope-token/basic/x/child/child.html | 3 + .../host-scope-token/basic/x/child/child.js | 5 + .../basic/x/child/child.scoped.css | 3 + .../host-scope-token/basic/x/main/main.html | 3 + .../host-scope-token/basic/x/main/main.js | 5 + .../extra-class-in-client/index.spec.js | 29 + .../extra-class-in-client/x/child/child.js | 8 + .../extra-class-in-client/x/child/tmpl.html | 3 + .../x/child/tmpl.scoped.css | 3 + .../extra-class-in-client/x/main/main.html | 3 + .../extra-class-in-client/x/main/main.js | 5 + .../extra-class-in-server/index.spec.js | 29 + .../extra-class-in-server/x/child/child.js | 8 + .../extra-class-in-server/x/child/tmpl.html | 3 + .../x/child/tmpl.scoped.css | 3 + .../extra-class-in-server/x/main/main.html | 3 + .../extra-class-in-server/x/main/main.js | 5 + .../wrong-scoped-template/index.spec.js | 37 + .../wrong-scoped-template/x/child/a.html | 3 + .../x/child/a.scoped.css | 3 + .../wrong-scoped-template/x/child/b.html | 3 + .../x/child/b.scoped.css | 3 + .../wrong-scoped-template/x/child/child.js | 10 + .../wrong-scoped-template/x/main/main.html | 3 + .../wrong-scoped-template/x/main/main.js | 5 + .../wrong-single-class/index.spec.js | 29 + .../wrong-single-class/x/child/child.js | 8 + .../wrong-single-class/x/child/tmpl.html | 3 + .../x/child/tmpl.scoped.css | 3 + .../wrong-single-class/x/main/main.html | 3 + .../wrong-single-class/x/main/main.js | 5 + .../no-mismatches/basic/index.spec.js | 21 + .../no-mismatches/basic/x/child/child.js | 12 + .../basic/x/child/styles.scoped.css | 3 + .../no-mismatches/basic/x/child/template.html | 3 + .../no-mismatches/basic/x/main/main.html | 3 + .../no-mismatches/basic/x/main/main.js | 5 + .../index.spec.js | 21 + .../x/child/a.html | 3 + .../x/child/a.scoped.css | 3 + .../x/child/b.html | 3 + .../x/child/b.scoped.css | 3 + .../x/child/child.js | 10 + .../x/main/main.html | 3 + .../x/main/main.js | 5 + .../scoped-vs-unscoped/index.spec.js | 21 + .../scoped-vs-unscoped/x/child/child.js | 10 + .../scoped-vs-unscoped/x/child/plain.html | 3 + .../scoped-vs-unscoped/x/child/stylish.html | 3 + .../x/child/stylish.scoped.css | 3 + .../scoped-vs-unscoped/x/main/main.html | 3 + .../scoped-vs-unscoped/x/main/main.js | 5 + .../not-style-children-elements/index.spec.js | 8 + .../x/child/child.html | 3 + .../x/child/child.js | 3 + .../x/main/main.css | 3 + .../x/main/main.html | 5 + .../x/main/main.js | 3 + .../index.spec.js | 6 + .../x/main/main.html | 6 + .../x/main/main.js | 5 + .../x/main/main.scoped.css | 3 + .../index.spec.js | 6 + .../x/main/main.html | 4 + .../x/main/main.js | 5 + .../x/main/main.scoped.css | 3 + .../index.spec.js | 14 + .../x/main/a.css | 4 + .../x/main/a.html | 3 + .../x/main/b.css | 4 + .../x/main/b.html | 3 + .../x/main/main.js | 17 + .../test-hydration/svg/basic/index.spec.js | 7 + .../test-hydration/svg/basic/x/main/main.html | 5 + .../test-hydration/svg/basic/x/main/main.js | 3 + .../svg/with-class/index.spec.js | 7 + .../svg/with-class/x/main/main.html | 5 + .../svg/with-class/x/main/main.js | 3 + .../svg/with-empty-class/index.spec.js | 7 + .../svg/with-empty-class/x/main/main.html | 5 + .../svg/with-empty-class/x/main/main.js | 3 + .../synthetic-shadow/index.spec.js | 34 + .../synthetic-shadow/x/child/child.html | 3 + .../synthetic-shadow/x/child/child.js | 3 + .../synthetic-shadow/x/main/main.html | 4 + .../synthetic-shadow/x/main/main.js | 3 + .../LightningElement.focus/index.spec.js | 124 +++ .../x/container/container.html | 4 + .../x/container/container.js | 3 + .../delegatesFocusFalse.html | 4 + .../delegatesFocusFalse.js | 5 + .../delegatesFocusTrue.html | 4 + .../delegatesFocusTrue/delegatesFocusTrue.js | 5 + .../non-standard-aria-props/index.spec.js | 126 +++ .../x/light/light.html | 3 + .../non-standard-aria-props/x/light/light.js | 25 + .../x/shadow/shadow.html | 3 + .../x/shadow/shadow.js | 23 + .../synthetic-cross-root-aria/index.spec.js | 278 ++++++ .../x/ariaContainer/ariaContainer.html | 5 + .../x/ariaContainer/ariaContainer.js | 55 ++ .../x/ariaSource/ariaSource.html | 3 + .../x/ariaSource/ariaSource.js | 23 + .../x/ariaTarget/ariaTarget.html | 3 + .../x/ariaTarget/ariaTarget.js | 23 + .../x/ariaTarget2/ariaTarget2.html | 4 + .../x/ariaTarget2/ariaTarget2.js | 23 + .../x/valid/valid.html | 4 + .../x/valid/valid.js | 25 + .../test/act/act-components/README.md | 10 + .../test/act/act-components/test-attrs.js | 35 + .../test/act/act-components/test-body-slot.js | 48 + .../act/act-components/test-class-attr.js | 32 + .../test-conditional-false-attribute.js | 33 + .../test-conditional-true-attribute.js | 33 + .../test-empty-slot-element-creation.js | 57 ++ .../act/act-components/test-empty-slot.js | 31 + .../test/act/act-components/test-html-tags.js | 71 ++ .../test-multiple-children-in-slot.js | 59 ++ .../act/act-components/test-multiple-slots.js | 62 ++ .../act-components/test-nested-html-tags.js | 66 ++ .../act-components/test-property-reference.js | 42 + .../test/act/act-components/test-props.js | 35 + .../test-slot-adjacent-to-named-slot.js | 79 ++ ...ment-creation-with-duplicate-slot-names.js | 79 ++ .../act-components/test-slot-in-grandchild.js | 63 ++ .../act/act-components/test-style-attr.js | 32 + .../test/act/force/foo/foo.html | 7 + .../test/act/force/foo/foo.js | 5 + .../test/act/html/tags/tags.html | 3 + .../test/act/html/tags/tags.js | 3 + .../test/act/index.spec.js | 414 +++++++++ .../test/act/nested/htmlTags/htmlTags.html | 3 + .../test/act/nested/htmlTags/htmlTags.js | 3 + .../test/act/ui/another/another.html | 3 + .../test/act/ui/another/another.js | 5 + .../test/act/ui/boolean/boolean.html | 3 + .../test/act/ui/boolean/boolean.js | 5 + .../act/ui/outputpercent/outputpercent.html | 6 + .../act/ui/outputpercent/outputpercent.js | 17 + .../test/act/ui/something/something.html | 9 + .../test/act/ui/something/something.js | 10 + .../act/ui/somethingElse/somethingElse.html | 2 + .../act/ui/somethingElse/somethingElse.js | 3 + .../index.spec.js | 346 +++++++ .../x/attrChanged/attrChanged.js | 24 + .../x/definedComponent/definedComponent.js | 2 + .../x/lifecycleChild/lifecycleChild.html | 3 + .../x/lifecycleChild/lifecycleChild.js | 22 + .../x/lifecycleParent/lifecycleParent.html | 4 + .../x/lifecycleParent/lifecycleParent.js | 22 + .../x/reflect/reflect.js | 17 + .../x/reflectCamel/reflectCamel.js | 5 + .../undefinedComponent/undefinedComponent.js | 2 + .../x/withChildElms/withChildElms.html | 1 + .../x/withChildElms/withChildElms.js | 3 + .../withChildElmsHasSlot.html | 3 + .../withChildElmsHasSlot.js | 3 + .../withChildElmsHasSlotLight.html | 3 + .../withChildElmsHasSlotLight.js | 5 + .../test/api/createElement/index.spec.js | 120 +++ .../x/shadowRootGetter/shadowRootGetter.js | 8 + .../test/api/createElement/x/test/test.js | 7 + .../test/api/decorators/facade.js | 1 + .../test/api/decorators/index.spec.js | 48 + .../test/api/freezeTemplate/index.spec.js | 278 ++++++ .../api/getComponentConstructor/index.spec.js | 20 + .../test/api/getComponentDef/index.spec.js | 287 ++++++ .../x/htmlElementProps/htmlElementProps.js | 11 + .../x/privateAccessors/privateAccessors.js | 27 + .../x/publicAccessors/publicAccessors.js | 14 + .../x/publicMethods/publicMethods.js | 6 + .../x/publicMethodsInheritance/base.js | 6 + .../publicMethodsInheritance.js | 7 + .../x/publicProperties/publicProperties.js | 6 + .../x/publicPropertiesInheritance/base.js | 10 + .../publicPropertiesInheritance.js | 7 + .../api/isComponentConstructor/index.spec.js | 37 + .../test/api/isNodeFromTemplate/index.spec.js | 79 ++ .../api/isNodeFromTemplate/x/test/test.html | 4 + .../api/isNodeFromTemplate/x/test/test.js | 3 + .../test/api/readonly/index.spec.js | 28 + .../test/api/registerTemplate/index.spec.js | 48 + .../test/api/sanitizeAttribute/index.spec.js | 114 +++ .../x/hrefBooleanTrue/hrefBooleanTrue.html | 5 + .../x/hrefBooleanTrue/hrefBooleanTrue.js | 3 + .../x/hrefDynamic/hrefDynamic.html | 5 + .../x/hrefDynamic/hrefDynamic.js | 5 + .../x/hrefStatic/hrefStatic.html | 5 + .../x/hrefStatic/hrefStatic.js | 3 + .../x/xlinkBooleanTrue/xlinkBooleanTrue.html | 5 + .../x/xlinkBooleanTrue/xlinkBooleanTrue.js | 3 + .../x/xlinkDynamic/xlinkDynamic.html | 5 + .../x/xlinkDynamic/xlinkDynamic.js | 5 + .../x/xlinkStatic/xlinkStatic.html | 5 + .../x/xlinkStatic/xlinkStatic.js | 3 + .../api/sanitizeHtmlContent/index.spec.js | 71 ++ .../x/innerHtml/innerHtml.html | 4 + .../x/innerHtml/innerHtml.js | 6 + .../test/api/unwrap/index.spec.js | 51 ++ .../test/api/unwrap/x/wrap/wrap.html | 1 + .../test/api/unwrap/x/wrap/wrap.js | 18 + .../test/bundle/css_only/index.spec.js | 37 + .../css_only/x/cssContainer/cssContainer.css | 6 + .../css_only/x/cssContainer/cssContainer.html | 3 + .../css_only/x/cssContainer/cssContainer.js | 7 + .../bundle/css_only/x/cssContainer/local.css | 3 + .../cssContainerComposition.css | 5 + .../cssContainerComposition.html | 5 + .../cssContainerComposition.js | 3 + .../bundle/css_only/x/onlyCss/onlyCss.css | 3 + .../onlyCssComposition/onlyCssComposition.css | 5 + .../index.spec.js | 79 ++ .../additionWhileDispatch.js | 24 + .../x/eventHandler/eventHandler.js | 9 + .../eventHandlerOptions.js | 9 + .../api/ai/basic/basic.html | 1 + .../api/ai/basic/basic.js | 3 + .../api/ai/lightDom/lightDom.html | 3 + .../api/ai/lightDom/lightDom.js | 21 + .../api/ai/shadowDom/shadowDom.html | 1 + .../api/ai/shadowDom/shadowDom.js | 19 + .../api/index.spec.js | 125 +++ .../formAssociated/index.spec.js | 108 +++ .../x/formAssociated/formAssociated.js | 13 + .../formAssociatedFalse.js | 13 + .../formAssociatedFalseNoAttachInternals.js | 12 + .../formAssociatedNoAttachInternals.js | 12 + .../x/notFormAssociated/notFormAssociated.js | 11 + .../notFormAssociatedNoAttachInternals.js | 10 + .../sanity/ei/component/component.html | 1 + .../sanity/ei/component/component.js | 22 + .../elementInternals/sanity/index.spec.js | 52 ++ .../LightningElement.classList/index.spec.js | 53 ++ .../accessDuringConstruction.html | 1 + .../accessDuringConstruction.js | 10 + .../x/test/test.html | 1 + .../LightningElement.classList/x/test/test.js | 7 + .../index.spec.js | 65 ++ .../x/child/child.html | 6 + .../x/child/child.js | 9 + .../connectedCallbackThrow.js | 7 + .../x/slottedParent/slottedParent.html | 7 + .../x/slottedParent/slottedParent.js | 10 + .../x/test/test.js | 9 + .../index.spec.js | 183 ++++ .../issue-1506.spec.js | 15 + .../x/acceptingSlots/acceptingSlots.html | 5 + .../x/acceptingSlots/acceptingSlots.js | 9 + .../disconnectedCallbackSetsTrackedValue.html | 3 + .../disconnectedCallbackSetsTrackedValue.js | 10 + .../disconnectedCallbackThrow.js | 7 + .../x/dualTemplate/dualTemplate.js | 20 + .../x/dualTemplate/templateA.html | 4 + .../x/dualTemplate/templateB.html | 3 + .../x/dualTemplate1506/dualTemplate1506.js | 16 + .../x/dualTemplate1506/simpleTemplate.html | 3 + .../x/dualTemplate1506/templateWithChild.html | 3 + .../x/explicitRender/explicitRender.html | 3 + .../x/explicitRender/explicitRender.js | 8 + .../x/ignoringSlots/ignoringSlots.html | 3 + .../x/ignoringSlots/ignoringSlots.js | 9 + .../x/slotted/slotted.html | 16 + .../x/slotted/slotted.js | 11 + .../x/test/test.html | 2 + .../x/test/test.js | 11 + .../index.spec.js | 44 + .../x/test/test.js | 7 + .../index.spec.js | 369 ++++++++ .../afterThrowingChild.html | 3 + .../afterThrowingChild/afterThrowingChild.js | 3 + .../altChildBoundaryViewThrow.html | 8 + .../altChildBoundaryViewThrow.js | 9 + .../boundaryAlternativeViewThrow.html | 3 + .../boundaryAlternativeViewThrow.js | 3 + .../boundaryChildConnectedThrow.html | 8 + .../boundaryChildConnectedThrow.js | 9 + .../boundaryChildConstructorThrow.html | 8 + .../boundaryChildConstructorThrow.js | 9 + .../boundaryChildRenderThrow.html | 8 + .../boundaryChildRenderThrow.js | 8 + .../boundaryChildRenderedThrow.html | 8 + .../boundaryChildRenderedThrow.js | 9 + .../boundaryChildRenderedThrowFrozen.html | 3 + .../boundaryChildRenderedThrowFrozen.js | 22 + .../boundaryChildSelfRehydrateThrow.html | 12 + .../boundaryChildSelfRehydrateThrow.js | 9 + .../boundaryChildSlotThrow.html | 10 + .../boundaryChildSlotThrow.js | 9 + .../childConnectedThrow.html | 1 + .../childConnectedThrow.js | 7 + .../childConnectedThrowDuringInit.html | 3 + .../childConnectedThrowDuringInit.js | 11 + .../childConstructorThrow.html | 1 + .../childConstructorThrow.js | 8 + .../childConstructorThrowDuringInit.html | 3 + .../childConstructorThrowDuringInit.js | 11 + .../childConstructorWrapper.html | 4 + .../childConstructorWrapper.js | 3 + .../x/childRenderThrow/childRenderThrow.html | 1 + .../x/childRenderThrow/childRenderThrow.js | 10 + .../childRenderThrowDuringInit.html | 3 + .../childRenderThrowDuringInit.js | 11 + .../childRenderedThrow.html | 1 + .../childRenderedThrow/childRenderedThrow.js | 7 + .../childRenderedThrowDuringInit.html | 3 + .../childRenderedThrowDuringInit.js | 11 + .../childRenderedThrowFrozen.html | 1 + .../childRenderedThrowFrozen.js | 10 + .../childSelfRehydrateThrow.html | 3 + .../childSelfRehydrateThrow.js | 17 + .../x/childSlotHost/childSlotHost.html | 3 + .../x/childSlotHost/childSlotHost.js | 3 + .../x/childSlotThrow/childSlotThrow.html | 1 + .../x/childSlotThrow/childSlotThrow.js | 7 + ...grandparentThrowsChildConnectedThrows.html | 3 + .../grandparentThrowsChildConnectedThrows.js | 6 + ...andparentThrowsChildConstructorThrows.html | 3 + ...grandparentThrowsChildConstructorThrows.js | 6 + .../grandparentThrowsChildRenderThrows.html | 3 + .../grandparentThrowsChildRenderThrows.js | 6 + .../grandparentThrowsChildRenderedThrows.html | 3 + .../grandparentThrowsChildRenderedThrows.js | 6 + .../nestedBoundaryChildThrow.html | 9 + .../nestedBoundaryChildThrow.js | 9 + .../x/nestedChildThrow/nestedChildThrow.html | 3 + .../x/nestedChildThrow/nestedChildThrow.js | 3 + .../nestedGrandChildThrow.html | 3 + .../nestedGrandChildThrow.js | 3 + .../x/noThrowOnMutate/noThrowOnMutate.html | 8 + .../x/noThrowOnMutate/noThrowOnMutate.js | 5 + .../parentThrowsChildConnectedThrows.html | 3 + .../parentThrowsChildConnectedThrows.js | 7 + .../parentThrowsChildConstructorThrows.html | 3 + .../parentThrowsChildConstructorThrows.js | 7 + .../parentThrowsChildRenderThrows.html | 3 + .../parentThrowsChildRenderThrows.js | 7 + .../parentThrowsChildRenderedThrows.html | 3 + .../parentThrowsChildRenderedThrows.js | 7 + ...entThrowsOnMutateChildConnectedThrows.html | 6 + ...arentThrowsOnMutateChildConnectedThrows.js | 11 + ...tThrowsOnMutateChildConstructorThrows.html | 6 + ...entThrowsOnMutateChildConstructorThrows.js | 11 + ...parentThrowsOnMutateChildRenderThrows.html | 6 + .../parentThrowsOnMutateChildRenderThrows.js | 11 + ...rentThrowsOnMutateChildRenderedThrows.html | 6 + ...parentThrowsOnMutateChildRenderedThrows.js | 11 + .../postErrorChildView.html | 3 + .../postErrorChildView/postErrorChildView.js | 7 + .../preErrorChildView/preErrorChildView.html | 1 + .../x/preErrorChildView/preErrorChildView.js | 7 + .../index.spec.js | 29 + .../x/test/test.js | 8 + .../index.spec.js | 12 + .../x/test/test.js | 8 + .../index.spec.js | 24 + .../constructorInvocation.js | 8 + .../x/test/test.html | 3 + .../x/test/test.js | 8 + .../index.spec.js | 29 + .../x/test/test.js | 8 + .../index.spec.js | 12 + .../x/test/test.js | 8 + .../index.spec.js | 64 ++ .../x/light/light.html | 1 + .../x/light/light.js | 10 + .../x/shadow/shadow.js | 8 + .../x/wrapper/wrapper.html | 6 + .../x/wrapper/wrapper.js | 18 + .../index.spec.js | 104 +++ .../index.spec.js | 31 + .../x/test/test.js | 8 + .../index.spec.js | 25 + .../x/test/test.js | 8 + .../index.spec.js | 47 + .../x/lifecycleHooks/lifecycleHooks.js | 24 + .../removalWhileDispatch.js | 25 + .../x/test/test.js | 14 + .../LightningElement.render/index.spec.js | 92 ++ .../x/dynamicTemplate/dynamicTemplate.js | 12 + .../x/dynamicTemplate/template-1.html | 3 + .../x/dynamicTemplate/template-2.html | 3 + .../x/renderInvalid/renderInvalid.js | 7 + .../x/renderThrow/renderThrow.js | 7 + .../index.spec.js | 36 + .../constructorInvocation.js | 8 + .../x/test/test.js | 8 + .../index.spec.js | 38 + .../constructorInvocation.js | 8 + .../x/test/test.js | 8 + .../LightningElement.shadowRoot/index.spec.js | 25 + .../x/basic/basic.js | 7 + .../x/correct/correct.html | 3 + .../x/correct/correct.js | 9 + .../LightningElement.style/index.spec.js | 50 + .../LightningElement.style/x/test/test.js | 8 + .../LightningElement.tagName/index.spec.js | 14 + .../x/override/override.js | 8 + .../LightningElement.tagName/x/test/test.js | 13 + .../LightningElement.toString/index.spec.js | 14 + .../x/anonymous/anonymous.js | 8 + .../x/named/named.js | 8 + .../component/LightningElement/index.spec.js | 117 +++ .../childThrowingBeforeSuper.js | 10 + .../x/definedComponent/definedComponent.js | 2 + .../x/notInvokingSuper/notInvokingSuper.js | 6 + .../x/notReturningThis/notReturningThis.js | 8 + .../parentThrowingBeforeSuper.html | 3 + .../parentThrowingBeforeSuper.js | 3 + .../x/returningBad/returningBad.js | 12 + .../undefinedComponent/undefinedComponent.js | 2 + .../test/component/aom-setter/index.spec.js | 39 + .../component/aom-setter/x/child/child.html | 3 + .../component/aom-setter/x/child/child.js | 14 + .../component/aom-setter/x/parent/parent.html | 4 + .../component/aom-setter/x/parent/parent.js | 7 + .../aom-setter/x/roleTester/roleTester.html | 1 + .../aom-setter/x/roleTester/roleTester.js | 12 + .../api-with-superclasses/index.spec.js | 98 ++ .../x/subClass/subClass.js | 49 + .../x/superClass/superClass.js | 49 + .../x/superSuperClass/superSuperClass.js | 49 + .../component/aria-reflection/index.spec.js | 183 ++++ .../x/apiPropDeclared/apiPropDeclared.js | 57 ++ .../apiPropDeclaredNoSuper.js | 87 ++ .../x/noPropDeclared/noPropDeclared.js | 3 + .../noPropDeclaredNoSuper.js | 32 + .../x/propDeclared/propDeclared.js | 56 ++ .../propDeclaredNoSuper.js | 87 ++ .../aria-reflection/x/shared/base.js | 30 + .../aria-reflection/x/shared/template.html | 54 ++ .../x/trackPropDeclared/trackPropDeclared.js | 57 ++ .../trackPropDeclaredNoSuper.js | 87 ++ .../component/decorators/api/index.spec.js | 426 +++++++++ .../constructorGetterAccess.js | 17 + .../duplicatePropertyTemplate.html | 3 + .../duplicatePropertyTemplate.js | 1 + .../api/x/extendsMixin/extendsMixin.js | 17 + .../api/x/getterSetter/getterSetter.js | 13 + .../getterSetterAndProp.js | 29 + .../api/x/inheritance/inheritance.js | 17 + .../api/x/inheritanceBase/inheritanceBase.js | 16 + .../decorators/api/x/methods/methods.js | 15 + .../component/decorators/api/x/mixin/mixin.js | 20 + .../decorators/api/x/mutate/mutate.js | 10 + .../decorators/api/x/noSetter/noSetter.js | 10 + .../x/nullInitialValue/nullInitialValue.html | 1 + .../x/nullInitialValue/nullInitialValue.js | 5 + .../decorators/api/x/properties/properties.js | 6 + .../api/x/reactivity/reactivity.html | 3 + .../decorators/api/x/reactivity/reactivity.js | 17 + .../api/x/staticProperty/staticProperty.js | 6 + .../component/decorators/track/index.spec.js | 220 +++++ .../duplicatePropertyTemplate.html | 3 + .../duplicatePropertyTemplate.js | 1 + .../track/x/nonObservable/nonObservable.html | 1 + .../track/x/nonObservable/nonObservable.js | 14 + .../track/x/properties/properties.html | 10 + .../track/x/properties/properties.js | 24 + .../setTrackedValueToNull.html | 1 + .../setTrackedValueToNull.js | 12 + .../track/x/sideEffect/sideEffect.html | 1 + .../track/x/sideEffect/sideEffect.js | 11 + .../track/x/staticProperty/staticProperty.js | 8 + .../component/decorators/wire/index.spec.js | 48 + .../decorators/wire/x/adapter/adapter.js | 5 + .../duplicatePropertyTemplate.html | 3 + .../duplicatePropertyTemplate.js | 1 + .../component/default-export/index.spec.js | 52 ++ .../default-export/x/component/component.html | 6 + .../default-export/x/component/component.js | 15 + .../default-export/x/component/nil.js | 1 + .../default-export/x/component/string.js | 1 + .../default-export/x/component/undef.js | 1 + .../default-export/x/component/zero.js | 1 + .../x/exportAsDefault/exportAsDefault.html | 3 + .../x/exportAsDefault/exportAsDefault.js | 5 + .../exportAsDefaultWithOtherExports.html | 3 + .../exportAsDefaultWithOtherExports.js | 7 + .../exportDefaultClassWithOtherExports.html | 3 + .../exportDefaultClassWithOtherExports.js | 7 + .../LightningElement.childNodes.spec.js | 39 + .../LightningElement.children.spec.js | 27 + .../LightningElement.firstChild.spec.js | 38 + ...LightningElement.firstElementChild.spec.js | 26 + ...ningElement.getElementsByClassName.spec.js | 15 + ...htningElement.getElementsByTagName.spec.js | 15 + .../LightningElement.lastChild.spec.js | 38 + .../LightningElement.lastElementChild.spec.js | 26 + .../LightningElement.querySelector.spec.js | 26 + .../LightningElement.querySelectorAll.spec.js | 29 + ...ngElement.querySelectorAllLightDom.spec.js | 15 + .../component/dom-query/x/child/child.html | 8 + .../test/component/dom-query/x/child/child.js | 53 ++ .../constructorChildNodes.js | 8 + .../constructorChildren.js | 8 + .../constructorFirstChild.js | 8 + .../constructorFirstElementChild.js | 8 + .../constructorGetElementsByClassName.js | 8 + .../constructorGetElementsByTagName.js | 8 + .../constructorLastChild.js | 8 + .../constructorLastElementChild.js | 8 + .../constructorQuerySelector.js | 8 + .../constructorQuerySelectorAll.js | 8 + .../component/dom-query/x/parent/parent.html | 8 + .../component/dom-query/x/parent/parent.js | 53 ++ .../x/parentLightDom/parentLightDom.html | 8 + .../x/parentLightDom/parentLightDom.js | 55 ++ .../parentWithTextNode.html | 7 + .../parentWithTextNode/parentWithTextNode.js | 3 + .../component/dynamic-component/index.spec.js | 262 ++++++ .../x/attributes/attributes.html | 4 + .../x/attributes/attributes.js | 28 + .../dynamic-component/x/bar/bar.html | 3 + .../component/dynamic-component/x/bar/bar.js | 3 + .../dynamic-component/x/basic/basic.html | 3 + .../dynamic-component/x/basic/basic.js | 22 + .../dynamic-component/x/baz/baz.html | 3 + .../component/dynamic-component/x/baz/baz.js | 3 + .../x/conditional/conditional.html | 11 + .../x/conditional/conditional.js | 31 + .../dynamic-component/x/foo/foo.html | 3 + .../component/dynamic-component/x/foo/foo.js | 3 + .../forwardedScopedSlotChild.html | 5 + .../forwardedScopedSlotChild.js | 16 + .../forwardedScopedSlotParent.html | 7 + .../forwardedScopedSlotParent.js | 3 + .../dynamic-component/x/fred/fred.html | 3 + .../dynamic-component/x/fred/fred.js | 3 + .../dynamic-component/x/list/list.html | 5 + .../dynamic-component/x/list/list.js | 29 + .../dynamic-component/x/nested/nested.html | 5 + .../dynamic-component/x/nested/nested.js | 18 + .../x/scopedSlotChild/scopedSlotChild.html | 3 + .../x/scopedSlotChild/scopedSlotChild.js | 17 + .../x/scopedSlotParent/scopedSlotParent.html | 9 + .../x/scopedSlotParent/scopedSlotParent.js | 3 + .../x/slottable/slottable.html | 6 + .../x/slottable/slottable.js | 3 + .../dynamic-component/x/slotter/slotter.html | 6 + .../dynamic-component/x/slotter/slotter.js | 10 + .../component/dynamic-imports/index.spec.js | 282 ++++++ .../dynamic-imports/x/alter/alter.html | 3 + .../dynamic-imports/x/alter/alter.js | 2 + .../x/containerBar/containerBar.html | 4 + .../x/containerBar/containerBar.js | 3 + .../x/containerFoo/containerFoo.html | 4 + .../x/containerFoo/containerFoo.js | 3 + .../dynamic-imports/x/ctor/ctor.html | 3 + .../component/dynamic-imports/x/ctor/ctor.js | 2 + .../dynamic-imports/x/dynamic/dynamic.html | 3 + .../dynamic-imports/x/dynamic/dynamic.js | 28 + .../x/dynamicSlotted/dynamicSlotted.html | 7 + .../x/dynamicSlotted/dynamicSlotted.js | 5 + .../x/lwcDynamic/lwcDynamic.html | 3 + .../x/lwcDynamic/lwcDynamic.js | 27 + .../lwcDynamicSlotted/lwcDynamicSlotted.html | 7 + .../x/lwcDynamicSlotted/lwcDynamicSlotted.js | 5 + .../component/face-callbacks/index.spec.js | 223 +++++ .../face-callbacks/x/container/container.html | 3 + .../face-callbacks/x/container/container.js | 3 + .../x/formAssociated/formAssociated.html | 1 + .../x/formAssociated/formAssociated.js | 46 + .../lightDomFormAssociated.html | 1 + .../lightDomFormAssociated.js | 47 + .../lightDomNotFormAssociated.html | 1 + .../lightDomNotFormAssociated.js | 25 + .../notFormAssociated/notFormAssociated.html | 1 + .../x/notFormAssociated/notFormAssociated.js | 24 + .../component/html-properties/index.spec.js | 202 ++++ .../x/component/component.html | 1 + .../html-properties/x/component/component.js | 13 + .../lifecycle-callbacks/index.spec.js | 438 +++++++++ .../invocationorder/container/container.html | 9 + .../invocationorder/container/container.js | 3 + .../invocationorder/foo/foo.html | 5 + .../invocationorder/foo/foo.js | 23 + .../fooInternal/fooInternal.html | 3 + .../fooInternal/fooInternal.js | 18 + .../lightContainer/lightContainer.html | 9 + .../lightContainer/lightContainer.js | 5 + .../invocationorder/lightFoo/lightFoo.html | 5 + .../invocationorder/lightFoo/lightFoo.js | 24 + .../lightFooInternal/lightFooInternal.html | 3 + .../lightFooInternal/lightFooInternal.js | 19 + .../reordering/item/item.html | 3 + .../reordering/item/item.js | 18 + .../reordering/itemLight/itemLight.html | 3 + .../reordering/itemLight/itemLight.js | 19 + .../reordering/itemWrapper/itemWrapper.html | 3 + .../reordering/itemWrapper/itemWrapper.js | 18 + .../itemWrapperLight/itemWrapperLight.html | 3 + .../itemWrapperLight/itemWrapperLight.js | 19 + .../reordering/list/list.html | 5 + .../reordering/list/list.js | 5 + .../reordering/listLight/listLight.html | 5 + .../reordering/listLight/listLight.js | 6 + .../timing/child/child.html | 3 + .../lifecycle-callbacks/timing/child/child.js | 22 + .../timing/childLight/childLight.html | 3 + .../timing/childLight/childLight.js | 23 + .../timing/parent/parent.html | 3 + .../timing/parent/parent.js | 22 + .../timing/parentLight/parentLight.html | 3 + .../timing/parentLight/parentLight.js | 23 + .../lifecycle-callbacks/x/child/child.html | 3 + .../lifecycle-callbacks/x/child/child.js | 24 + .../x/details/details.html | 10 + .../lifecycle-callbacks/x/details/details.js | 5 + .../x/dispatchEvents/dispatchEvents.js | 21 + .../lifecycle-callbacks/x/parent/parent.html | 4 + .../lifecycle-callbacks/x/parent/parent.js | 22 + .../x/parentIf/parentIf.html | 5 + .../x/parentIf/parentIf.js | 19 + .../x/parentProp/parentProp.html | 3 + .../x/parentProp/parentProp.js | 19 + .../lifecycle-callbacks/x/single/single.js | 24 + .../locker-live-property/index.spec.js | 11 + .../x/component/component.html | 3 + .../x/component/component.js | 8 + .../index.spec.js | 111 +++ .../x/child/child.js | 3 + .../x/component/component.js | 3 + .../x/logsWhenConnected/logsWhenConnected.js | 7 + .../x/parent/parent.html | 3 + .../x/parent/parent.js | 3 + .../observed-attributes/index.spec.js | 33 + .../x/observes/observes.js | 11 + .../component/observed-fields/index.spec.js | 191 ++++ .../duplicatePropertyTemplate.html | 3 + .../duplicatePropertyTemplate.js | 1 + .../x/fieldForCache/fieldForCache.html | 4 + .../x/fieldForCache/fieldForCache.js | 14 + .../fieldWithSideEffect.html | 5 + .../fieldWithSideEffect.js | 23 + .../observed-fields/x/simple/simple.html | 7 + .../observed-fields/x/simple/simple.js | 33 + .../component/owner-document/index.spec.js | 11 + .../x/shadow-dom/shadow-dom.html | 1 + .../owner-document/x/shadow-dom/shadow-dom.js | 8 + .../test/component/properties/index.spec.js | 98 ++ .../properties/x/component/component.js | 31 + .../test/component/refs/index.spec.js | 435 +++++++++ .../accessDuringRender.html | 4 + .../accessDuringRender/accessDuringRender.js | 14 + .../test/component/refs/x/basic/basic.html | 10 + .../test/component/refs/x/basic/basic.js | 11 + .../refs/x/basicDynamic/basicDynamic.html | 11 + .../refs/x/basicDynamic/basicDynamic.js | 11 + .../test/component/refs/x/child/child.html | 3 + .../test/component/refs/x/child/child.js | 3 + .../refs/x/conditional/conditional.html | 10 + .../refs/x/conditional/conditional.js | 17 + .../component/refs/x/conflict/conflict.html | 21 + .../component/refs/x/conflict/conflict.js | 7 + .../x/conflictDynamic/conflictDynamic.html | 22 + .../refs/x/conflictDynamic/conflictDynamic.js | 9 + .../conflictFullyStatic.html | 24 + .../conflictFullyStatic.js | 7 + .../component/refs/x/connect/connect.html | 3 + .../test/component/refs/x/connect/connect.js | 9 + .../component/refs/x/construct/construct.html | 3 + .../component/refs/x/construct/construct.js | 10 + .../refs/x/disconnect/disconnect.html | 3 + .../component/refs/x/disconnect/disconnect.js | 9 + .../component/refs/x/dynamic/dynamic.html | 3 + .../test/component/refs/x/dynamic/dynamic.js | 16 + .../component/refs/x/expando/expando.html | 1 + .../test/component/refs/x/expando/expando.js | 16 + .../refs/x/expandoCheck/expandoCheck.html | 1 + .../refs/x/expandoCheck/expandoCheck.js | 15 + .../test/component/refs/x/light/light.html | 3 + .../test/component/refs/x/light/light.js | 9 + .../refs/x/lwcDynamic/lwcDynamic.html | 3 + .../component/refs/x/lwcDynamic/lwcDynamic.js | 16 + .../test/component/refs/x/multi/a.html | 7 + .../test/component/refs/x/multi/b.html | 7 + .../test/component/refs/x/multi/multi.js | 21 + .../refs/x/multiChild/multiChild.html | 3 + .../component/refs/x/multiChild/multiChild.js | 7 + .../component/refs/x/multiNoRefsInOne/a.html | 3 + .../component/refs/x/multiNoRefsInOne/b.html | 3 + .../x/multiNoRefsInOne/multiNoRefsInOne.js | 21 + .../refs/x/multiParent/multiParent.html | 5 + .../refs/x/multiParent/multiParent.js | 8 + .../test/component/refs/x/none/none.html | 3 + .../test/component/refs/x/none/none.js | 8 + .../refs/x/noneActive/noneActive.html | 5 + .../component/refs/x/noneActive/noneActive.js | 10 + .../component/refs/x/overwrite/overwrite.html | 3 + .../component/refs/x/overwrite/overwrite.js | 10 + .../test/component/refs/x/parent/parent.html | 3 + .../test/component/refs/x/parent/parent.js | 8 + .../test/component/refs/x/render/a.html | 3 + .../test/component/refs/x/render/b.html | 2 + .../test/component/refs/x/render/render.js | 20 + .../component/refs/x/rendered/rendered.html | 3 + .../component/refs/x/rendered/rendered.js | 9 + .../rerenderComponent/rerenderComponent.html | 3 + .../x/rerenderComponent/rerenderComponent.js | 11 + .../x/rerenderElement/rerenderElement.html | 3 + .../refs/x/rerenderElement/rerenderElement.js | 11 + .../rerenderElementStaticRef.html | 4 + .../rerenderElementStaticRef.js | 11 + .../component/refs/x/slottable/slottable.html | 5 + .../component/refs/x/slottable/slottable.js | 7 + .../component/refs/x/slotter/slotter.html | 7 + .../test/component/refs/x/slotter/slotter.js | 7 + .../spellcheck-attribute/index.spec.js | 116 +++ .../x/container/container.html | 19 + .../x/container/container.js | 3 + .../x/dynamic/dynamic.html | 3 + .../spellcheck-attribute/x/dynamic/dynamic.js | 5 + .../spellcheck-attribute/x/simple/simple.html | 1 + .../spellcheck-attribute/x/simple/simple.js | 3 + .../unknown-properties/index.spec.js | 15 + .../unknown-properties/x/child/child.html | 1 + .../unknown-properties/x/child/child.js | 3 + .../x/component/component.html | 3 + .../x/component/component.js | 5 + .../test/context/advanced-context.spec.js | 34 + .../test/context/simple-context.spec.js | 86 ++ .../x/advancedConsumer/advancedConsumer.html | 3 + .../x/advancedConsumer/advancedConsumer.js | 10 + .../x/advancedProvider/advancedProvider.js | 91 ++ .../x/simpleConsumer/simpleConsumer.html | 3 + .../x/simpleConsumer/simpleConsumer.js | 6 + .../x/simpleProvider/simpleProvider.js | 111 +++ .../custom-elements-registry/index.spec.js | 298 ++++++ .../test/custom-elements/index.spec.js | 460 ++++++++++ .../custom-elements/x/component/component.js | 3 + .../test/custom-elements/x/nonce1/nonce1.js | 7 + .../test/custom-elements/x/nonce10/nonce10.js | 7 + .../test/custom-elements/x/nonce11/nonce11.js | 7 + .../test/custom-elements/x/nonce12/nonce12.js | 7 + .../test/custom-elements/x/nonce13/nonce13.js | 7 + .../test/custom-elements/x/nonce14/nonce14.js | 7 + .../test/custom-elements/x/nonce15/nonce15.js | 7 + .../test/custom-elements/x/nonce16/nonce16.js | 7 + .../test/custom-elements/x/nonce19/nonce19.js | 7 + .../test/custom-elements/x/nonce4/nonce4.js | 7 + .../test/custom-elements/x/nonce5/nonce5.js | 7 + .../test/custom-elements/x/nonce6/nonce6.js | 8 + .../test/custom-elements/x/nonce7/nonce7.js | 7 + .../test/custom-elements/x/nonce8/nonce8.js | 7 + .../test/custom-elements/x/nonce9/nonce9.js | 7 + .../moving-node-to-document/index.spec.js | 80 ++ .../x/container/container.html | 3 + .../x/container/container.js | 3 + .../events/focus-event-composed/index.spec.js | 12 + .../focus-event-related-target/index.spec.js | 21 + .../x/container/container.html | 6 + .../x/container/container.js | 22 + .../x/input/input.html | 3 + .../x/input/input.js | 8 + .../test/events/memoization/index.spec.js | 74 ++ .../test/events/memoization/x/deep/deep.html | 3 + .../test/events/memoization/x/deep/deep.js | 9 + .../test/events/memoization/x/list/list.html | 5 + .../test/events/memoization/x/list/list.js | 5 + .../events/memoization/x/mixed/mixed.html | 10 + .../test/events/memoization/x/mixed/mixed.js | 7 + .../test/host-element/index.spec.js | 13 + .../test/host-element/x/shadow/shadow.html | 1 + .../test/host-element/x/shadow/shadow.js | 7 + .../test/hydration/index.spec.js | 27 + .../test/hydration/x/simple/simple.html | 3 + .../test/hydration/x/simple/simple.js | 3 + .../test/integrations/aura/index.spec.js | 23 + .../childMarkedAsCircular.html | 3 + .../childMarkedAsCircular.js | 15 + .../childModuleMarkedAsCircular.html | 3 + .../childModuleMarkedAsCircular.js | 11 + .../integrations/aura/x/parent/parent.html | 7 + .../test/integrations/aura/x/parent/parent.js | 5 + .../test/integrations/locker/index.spec.js | 132 +++ .../integrations/locker/x/child/child.html | 3 + .../test/integrations/locker/x/child/child.js | 28 + .../locker/x/lockerHooks/lockerHooks.html | 3 + .../locker/x/lockerHooks/lockerHooks.js | 42 + .../lockerIntegration/lockerIntegration.html | 4 + .../x/lockerIntegration/lockerIntegration.js | 15 + .../lockerLiveComponent.js | 9 + .../test/light-dom/basic/index.spec.js | 43 + .../invalidRenderMode/invalidRenderMode.html | 3 + .../x/invalidRenderMode/invalidRenderMode.js | 5 + .../test/light-dom/basic/x/test/test.html | 3 + .../test/light-dom/basic/x/test/test.js | 5 + .../test/light-dom/events/index.spec.js | 202 ++++ .../events/x/lightChild/lightChild.html | 3 + .../events/x/lightChild/lightChild.js | 5 + .../x/lightContainer/lightContainer.html | 4 + .../events/x/lightContainer/lightContainer.js | 5 + .../events/x/shadowChild/shadowChild.html | 3 + .../events/x/shadowChild/shadowChild.js | 3 + .../x/shadowContainer/shadowContainer.html | 4 + .../x/shadowContainer/shadowContainer.js | 3 + .../test/light-dom/host-pseudo/index.spec.js | 28 + .../host-pseudo/x/component/component.html | 5 + .../host-pseudo/x/component/component.js | 4 + .../x/component/component.scoped.css | 10 + .../test/light-dom/ids/index.spec.js | 53 ++ .../test/light-dom/ids/x/one/one.html | 7 + .../test/light-dom/ids/x/one/one.js | 5 + .../test/light-dom/ids/x/shadow/shadow.html | 7 + .../test/light-dom/ids/x/shadow/shadow.js | 3 + .../test/light-dom/ids/x/two/two.html | 7 + .../test/light-dom/ids/x/two/two.js | 5 + .../test/light-dom/inheritance/index.spec.js | 27 + .../inheritance/x/baseLight/baseLight.html | 1 + .../inheritance/x/baseLight/baseLight.js | 5 + .../inheritance/x/baseShadow/baseShadow.html | 1 + .../inheritance/x/baseShadow/baseShadow.js | 3 + .../defaultExtendsLight.html | 1 + .../defaultExtendsLight.js | 3 + .../defaultExtendsShadow.html | 1 + .../defaultExtendsShadow.js | 3 + .../lightExtendsShadow.html | 3 + .../lightExtendsShadow/lightExtendsShadow.js | 5 + .../shadowExtendsLight.html | 3 + .../shadowExtendsLight/shadowExtendsLight.js | 5 + .../test/light-dom/lifecycle/index.spec.js | 254 +++++ .../test/light-dom/lifecycle/util.js | 4 + .../x/basicContainer/basicContainer.html | 5 + .../x/basicContainer/basicContainer.js | 7 + .../basicNamedSlottable.html | 3 + .../basicNamedSlottable.js | 5 + .../dynamicForwardedSlottable.html | 7 + .../dynamicForwardedSlottable.js | 8 + .../dynamicSlotForwarding.html | 16 + .../dynamicSlotForwarding.js | 11 + .../forwardedSlottable.html | 7 + .../forwardedSlottable/forwardedSlottable.js | 8 + .../x/slotForwarding/slotForwarding.html | 16 + .../x/slotForwarding/slotForwarding.js | 7 + .../light-dom/lifecycle/x/slotee/slotee.html | 3 + .../light-dom/lifecycle/x/slotee/slotee.js | 18 + .../lifecycle/x/slottable/slottable.html | 5 + .../lifecycle/x/slottable/slottable.js | 5 + .../x/standardSlotting/standardSlotting.html | 9 + .../x/standardSlotting/standardSlotting.js | 7 + .../light-parent-shadow-child/index.spec.js | 26 + .../x/lightParent/lightParent.html | 4 + .../x/lightParent/lightParent.js | 5 + .../x/shadowChild/shadowChild.html | 3 + .../x/shadowChild/shadowChild.js | 3 + .../multiple-templates/index.spec.js | 60 ++ .../multiple-templates/x/multi/a.css | 3 + .../multiple-templates/x/multi/a.html | 3 + .../multiple-templates/x/multi/b.css | 3 + .../multiple-templates/x/multi/b.html | 3 + .../multiple-templates/x/multi/multi.js | 17 + .../x/multiNoStyleInFirst/a.html | 3 + .../x/multiNoStyleInFirst/b.html | 3 + .../x/multiNoStyleInFirst/b.scoped.css | 7 + .../multiNoStyleInFirst.js | 17 + .../test/light-dom/restriction/index.spec.js | 24 + .../restriction/x/component/component.html | 3 + .../restriction/x/component/component.js | 4 + .../test/light-dom/root/index.spec.js | 84 ++ .../test/light-dom/root/x/light/light.html | 5 + .../test/light-dom/root/x/light/light.js | 5 + .../test/light-dom/root/x/list/list.html | 3 + .../test/light-dom/root/x/list/list.js | 3 + .../scoped-slot/if-block/index.spec.js | 57 ++ .../x/mixedSlotChild/mixedSlotChild.html | 10 + .../x/mixedSlotChild/mixedSlotChild.js | 17 + .../x/mixedSlotParent/mixedSlotParent.html | 12 + .../x/mixedSlotParent/mixedSlotParent.js | 9 + .../test/light-dom/scoped-slot/index.spec.js | 81 ++ .../scoped-slot/reactivity/index.spec.js | 243 +++++ .../childForConditionalSlotContent.html | 6 + .../childForConditionalSlotContent.js | 8 + .../childSlotTagWithKey.html | 7 + .../childSlotTagWithKey.js | 10 + .../x/listChildApiData/listChildApiData.html | 9 + .../x/listChildApiData/listChildApiData.js | 10 + .../listChildTrackedData.html | 9 + .../listChildTrackedData.js | 24 + .../listParentApiData/listParentApiData.html | 18 + .../x/listParentApiData/listParentApiData.js | 34 + .../listParentTrackedData.html | 7 + .../listParentTrackedData.js | 7 + .../parentBindingsOutsideSlotContent.html | 9 + .../parentBindingsOutsideSlotContent.js | 16 + .../parentWithConditionalSlotContent.html | 10 + .../parentWithConditionalSlotContent.js | 17 + .../slottedWithCallbacks.html | 3 + .../slottedWithCallbacks.js | 25 + .../withParentBindings.html | 8 + .../withParentBindings/withParentBindings.js | 16 + .../index.spec.js | 190 ++++ .../x/child/child.html | 9 + .../x/child/child.js | 16 + .../x/parent/parent.html | 12 + .../x/parent/parent.js | 19 + .../x/slotted/slotted.html | 3 + .../x/slotted/slotted.js | 9 + .../scoped-slot/runtime-checks/index.spec.js | 44 + .../childWithScopedSlots.html | 3 + .../childWithScopedSlots.js | 6 + .../childWithStandardSlots.html | 3 + .../childWithStandardSlots.js | 5 + .../parentWithScopedSlotContent.html | 16 + .../parentWithScopedSlotContent.js | 6 + .../parentWithStandardSlotContent.html | 5 + .../parentWithStandardSlotContent.js | 3 + .../x/shadowDomChild/shadowDomChild.html | 3 + .../x/shadowDomChild/shadowDomChild.js | 3 + .../scoped-slot/x/basicChild/basicChild.html | 3 + .../scoped-slot/x/basicChild/basicChild.js | 6 + .../x/basicParent/basicParent.html | 7 + .../scoped-slot/x/basicParent/basicParent.js | 3 + .../childWDefaultContent.html | 5 + .../childWDefaultContent.js | 6 + .../x/childWithForEach/childWithForEach.html | 9 + .../x/childWithForEach/childWithForEach.js | 9 + .../childWithNamedSlots.html | 14 + .../childWithNamedSlots.js | 8 + .../x/nestedSlots/nestedSlots.html | 13 + .../scoped-slot/x/nestedSlots/nestedSlots.js | 24 + .../parentOfChildWithForEach.css | 3 + .../parentOfChildWithForEach.html | 7 + .../parentOfChildWithForEach.js | 3 + .../parentOfChildWithNamedSlots.html | 17 + .../parentOfChildWithNamedSlots.js | 3 + .../parentWNoSlotContent.html | 3 + .../parentWNoSlotContent.js | 3 + .../test/light-dom/scoped-slot/x/row/row.html | 9 + .../test/light-dom/scoped-slot/x/row/row.js | 7 + .../light-dom/scoped-slot/x/table/table.html | 7 + .../light-dom/scoped-slot/x/table/table.js | 7 + .../light-dom/scoped-styles/index.spec.js | 88 ++ .../light-dom/scoped-styles/x/basic/basic.css | 3 + .../scoped-styles/x/basic/basic.html | 3 + .../light-dom/scoped-styles/x/basic/basic.js | 5 + .../scoped-styles/x/basic/basic.scoped.css | 7 + .../x/lightChild/lightChild.html | 3 + .../scoped-styles/x/lightChild/lightChild.js | 5 + .../light-dom/scoped-styles/x/other/other.css | 3 + .../scoped-styles/x/other/other.html | 3 + .../light-dom/scoped-styles/x/other/other.js | 5 + .../x/pseudoChild/pseudoChild.html | 3 + .../x/pseudoChild/pseudoChild.js | 5 + .../x/pseudoParent/pseudoParent.html | 4 + .../x/pseudoParent/pseudoParent.js | 5 + .../x/pseudoParent/pseudoParent.scoped.css | 4 + .../x/shadowWithScoped/shadowWithScoped.html | 4 + .../x/shadowWithScoped/shadowWithScoped.js | 3 + .../shadowWithScoped.scoped.css | 7 + .../scoped-styles/x/switchable/a.html | 3 + .../scoped-styles/x/switchable/b.html | 3 + .../scoped-styles/x/switchable/b.scoped.css | 7 + .../scoped-styles/x/switchable/c.html | 3 + .../scoped-styles/x/switchable/d.html | 3 + .../scoped-styles/x/switchable/d.scoped.css | 7 + .../scoped-styles/x/switchable/switchable.js | 21 + .../scoped-styles/x/unscoped/unscoped.html | 3 + .../scoped-styles/x/unscoped/unscoped.js | 5 + .../light-dom/shadow-getter/index.spec.js | 27 + .../light-dom/shadow-getter/x/test/test.html | 3 + .../light-dom/shadow-getter/x/test/test.js | 7 + .../shadow-parent-light-child/index.spec.js | 25 + .../x/container/container.html | 4 + .../x/container/container.js | 3 + .../x/test/test.html | 3 + .../shadow-parent-light-child/x/test/test.js | 5 + .../slot-fowarding/scoped-slots/index.spec.js | 31 + .../scoped-slots/x/leaf/leaf.html | 4 + .../scoped-slots/x/leaf/leaf.js | 3 + .../x/lightContainer/lightContainer.html | 3 + .../x/lightContainer/lightContainer.js | 5 + .../x/scopedSlotChild/scopedSlotChild.html | 6 + .../x/scopedSlotChild/scopedSlotChild.js | 7 + .../x/scopedSlotParent/scopedSlotParent.html | 7 + .../x/scopedSlotParent/scopedSlotParent.js | 5 + .../slots/duplicates/index.spec.js | 95 ++ .../duplicates/light/container/container.html | 7 + .../duplicates/light/container/container.js | 5 + .../slots/duplicates/light/header/header.html | 8 + .../slots/duplicates/light/header/header.js | 7 + .../slots/duplicates/light/menu/menu.html | 3 + .../slots/duplicates/light/menu/menu.js | 5 + .../shadow/container/container.html | 7 + .../duplicates/shadow/container/container.js | 5 + .../duplicates/shadow/header/header.html | 8 + .../slots/duplicates/shadow/header/header.js | 7 + .../slots/duplicates/shadow/menu/menu.html | 3 + .../slots/duplicates/shadow/menu/menu.js | 5 + .../slots/forwarding/index.spec.js | 275 ++++++ .../x/lightContainer/lightContainer.html | 41 + .../x/lightContainer/lightContainer.js | 5 + .../x/lightDomElement/lightDomElement.html | 3 + .../x/lightDomElement/lightDomElement.js | 5 + .../forwarding/x/lightLeaf/lightLeaf.html | 6 + .../slots/forwarding/x/lightLeaf/lightLeaf.js | 5 + .../x/lightLightSlot/lightLightSlot.html | 10 + .../x/lightLightSlot/lightLightSlot.js | 5 + .../x/lightShadowSlot/lightShadowSlot.html | 9 + .../x/lightShadowSlot/lightShadowSlot.js | 5 + .../x/shadowDomElement/shadowDomElement.html | 3 + .../x/shadowDomElement/shadowDomElement.js | 3 + .../forwarding/x/shadowLeaf/shadowLeaf.html | 6 + .../forwarding/x/shadowLeaf/shadowLeaf.js | 3 + .../x/shadowLightSlot/shadowLightSlot.html | 9 + .../x/shadowLightSlot/shadowLightSlot.js | 3 + .../x/shadowShadowSlot/shadowShadowSlot.html | 10 + .../x/shadowShadowSlot/shadowShadowSlot.js | 3 + .../slots/reactivity/index.spec.js | 267 ++++++ .../x/lightContainer/lightContainer.html | 25 + .../x/lightContainer/lightContainer.js | 24 + .../reactivity/x/lightLeaf/lightLeaf.html | 5 + .../slots/reactivity/x/lightLeaf/lightLeaf.js | 14 + .../x/lightLightSlot/lightLightSlot.html | 7 + .../x/lightLightSlot/lightLightSlot.js | 19 + .../x/lightShadowSlot/lightShadowSlot.html | 7 + .../x/lightShadowSlot/lightShadowSlot.js | 19 + .../reactivity/x/shadowLeaf/shadowLeaf.html | 5 + .../reactivity/x/shadowLeaf/shadowLeaf.js | 12 + .../x/shadowLightSlot/shadowLightSlot.html | 7 + .../x/shadowLightSlot/shadowLightSlot.js | 17 + .../test/light-dom/slotting/index.spec.js | 144 +++ .../slotting/x/basicSlot/basicSlot.html | 7 + .../slotting/x/basicSlot/basicSlot.js | 5 + .../x/conditionalSlot/conditionalSlot.html | 6 + .../x/conditionalSlot/conditionalSlot.js | 10 + .../conditionalSlotted.html | 5 + .../conditionalSlotted/conditionalSlotted.js | 5 + .../x/dynamicChildren/dynamicChildren.html | 8 + .../x/dynamicChildren/dynamicChildren.js | 10 + .../x/forwardedSlot/forwardedSlot.html | 7 + .../slotting/x/forwardedSlot/forwardedSlot.js | 5 + .../forwardedSlotConsumer.html | 9 + .../forwardedSlotConsumer.js | 11 + .../x/lightConsumer/lightConsumer.html | 5 + .../slotting/x/lightConsumer/lightConsumer.js | 5 + .../x/lightContainer/lightContainer.html | 5 + .../x/lightContainer/lightContainer.js | 5 + .../x/shadowConsumer/shadowConsumer.html | 5 + .../x/shadowConsumer/shadowConsumer.js | 3 + .../x/shadowContainer/shadowContainer.html | 3 + .../x/shadowContainer/shadowContainer.js | 3 + .../test/light-dom/style-global/index.spec.js | 59 ++ .../style-global/x/container/container.html | 5 + .../style-global/x/container/container.js | 5 + .../test/light-dom/style-global/x/one/one.css | 3 + .../light-dom/style-global/x/one/one.html | 3 + .../test/light-dom/style-global/x/one/one.js | 5 + .../style-global/x/shadow/shadow.html | 3 + .../light-dom/style-global/x/shadow/shadow.js | 3 + .../light-dom/style-global/x/two/two.html | 3 + .../test/light-dom/style-global/x/two/two.js | 5 + .../light-dom/style-multiple/index.spec.js | 28 + .../style-multiple/x/container/container.html | 4 + .../style-multiple/x/container/container.js | 3 + .../light-dom/style-multiple/x/one/one.css | 4 + .../light-dom/style-multiple/x/one/one.html | 3 + .../light-dom/style-multiple/x/one/one.js | 5 + .../light-dom/style-multiple/x/two/two.css | 4 + .../light-dom/style-multiple/x/two/two.html | 3 + .../light-dom/style-multiple/x/two/two.js | 5 + .../light-dom/style-with-host/index.spec.js | 14 + .../x/container/container.html | 5 + .../style-with-host/x/container/container.js | 3 + .../light-dom/style-with-host/x/one/one.css | 3 + .../light-dom/style-with-host/x/one/one.html | 3 + .../light-dom/style-with-host/x/one/one.js | 5 + .../style-with-host/x/shadow/shadow.html | 3 + .../style-with-host/x/shadow/shadow.js | 3 + .../light-dom/style-with-host/x/two/two.html | 3 + .../light-dom/style-with-host/x/two/two.js | 5 + .../test/light-dom/style/index.spec.js | 48 + .../style/x/container/container.html | 5 + .../light-dom/style/x/container/container.js | 3 + .../test/light-dom/style/x/one/one.css | 3 + .../test/light-dom/style/x/one/one.html | 3 + .../test/light-dom/style/x/one/one.js | 5 + .../test/light-dom/style/x/shadow/shadow.html | 3 + .../test/light-dom/style/x/shadow/shadow.js | 3 + .../test/light-dom/style/x/two/two.html | 3 + .../test/light-dom/style/x/two/two.js | 5 + .../synthetic-shadow-styles/index.spec.js | 36 + .../x/container/container.css | 3 + .../x/container/container.html | 4 + .../x/container/container.js | 3 + .../x/grandchild/grandchild.css | 3 + .../x/grandchild/grandchild.html | 3 + .../x/grandchild/grandchild.js | 3 + .../synthetic-shadow-styles/x/light/light.css | 3 + .../x/light/light.html | 4 + .../synthetic-shadow-styles/x/light/light.js | 5 + .../light-dom/synthetic-shadow/index.spec.js | 157 ++++ .../synthetic-shadow/x/consumer/consumer.html | 4 + .../synthetic-shadow/x/consumer/consumer.js | 3 + .../x/lightContainer/lightContainer.html | 6 + .../x/lightContainer/lightContainer.js | 5 + .../x/shadowContainer/shadowContainer.html | 3 + .../x/shadowContainer/shadowContainer.js | 3 + .../test/lwc-on/index.spec.js | 462 ++++++++++ .../test/lwc-on/x/basic/basic.html | 3 + .../test/lwc-on/x/basic/basic.js | 21 + .../lwc-on/x/caseVariants/caseVariants.html | 3 + .../lwc-on/x/caseVariants/caseVariants.js | 70 ++ .../lwc-on/x/computedKey/computedKey.html | 3 + .../test/lwc-on/x/computedKey/computedKey.js | 20 + .../x/executionContext/executionContext.html | 3 + .../x/executionContext/executionContext.js | 21 + .../test/lwc-on/x/ignored/ignored.html | 3 + .../test/lwc-on/x/ignored/ignored.js | 50 + .../test/lwc-on/x/lifecycle/lifecycle.html | 3 + .../test/lwc-on/x/lifecycle/lifecycle.js | 19 + .../x/lifecycleChild/lifecycleChild.html | 3 + .../lwc-on/x/lifecycleChild/lifecycleChild.js | 7 + .../test/lwc-on/x/publicProp/publicProp.html | 3 + .../test/lwc-on/x/publicProp/publicProp.js | 5 + .../test/lwc-on/x/rerender/rerender.html | 4 + .../test/lwc-on/x/rerender/rerender.js | 78 ++ .../lwc-on/x/rerenderLoop/rerenderLoop.html | 6 + .../lwc-on/x/rerenderLoop/rerenderLoop.js | 89 ++ .../test/lwc-on/x/spread/spread.html | 3 + .../test/lwc-on/x/spread/spread.js | 25 + .../valueEvaluationThrows.html | 3 + .../valueEvaluationThrows.js | 20 + .../x/valueNotFunction/valueNotFunction.html | 3 + .../x/valueNotFunction/valueNotFunction.js | 35 + .../test/misc/clean-dom/index.spec.js | 36 + .../misc/cross-domain-iframe/index.spec.js | 64 ++ .../misc/cross-domain-iframe/x/test/test.html | 4 + .../misc/cross-domain-iframe/x/test/test.js | 3 + .../lifecycle-remove-disconnected.spec.js | 35 + .../x/child/child.html | 2 + .../x/child/child.js | 2 + .../x/parent/parent.html | 3 + .../x/parent/parent.js | 4 + .../misc/object-rest-spread/index.spec.js | 23 + .../misc/performance-timing/index.spec.js | 326 +++++++ .../performance-timing/user-timing-utils.js | 72 ++ .../performance-timing/x/child/child.html | 3 + .../misc/performance-timing/x/child/child.js | 5 + .../x/lifecycle/lifecycle.html | 3 + .../x/lifecycle/lifecycle.js | 11 + .../performance-timing/x/nested/nested.html | 2 + .../performance-timing/x/nested/nested.js | 10 + .../performance-timing/x/parent/parent.html | 4 + .../performance-timing/x/parent/parent.js | 5 + .../test/mixed-api-version/index.spec.js | 36 + .../x/container/container.html | 4 + .../x/container/container.js | 5 + .../x/useApiVersion60/useApiVersion60.html | 3 + .../x/useApiVersion60/useApiVersion60.js | 4 + .../index.spec.js | 52 ++ .../x/any/any.js | 5 + .../x/any2/any2.js | 5 + .../x/invalid/invalid.js | 5 + .../x/native/native.js | 5 + .../x/valid/valid.js | 5 + .../composed-path/index.spec.js | 44 + .../composed-path/x/test/component.js | 18 + .../composed-path/x/test/test.html | 3 + .../composed-path/x/test/test.js | 30 + .../mixed-shadow-mode/reporting/index.spec.js | 89 ++ .../reporting/x/component/component.html | 3 + .../reporting/x/component/component.js | 3 + .../reporting/x/light/light.html | 3 + .../reporting/x/light/light.js | 5 + .../reporting/x/native/native.html | 3 + .../reporting/x/native/native.js | 5 + .../reporting/x/parent/parent.html | 4 + .../reporting/x/parent/parent.js | 3 + .../restrictions/index.spec.js | 102 +++ .../restrictions/x/component/component.html | 3 + .../restrictions/x/component/component.js | 33 + .../retargeting/index.spec.js | 31 + .../x/nativeChild/nativeChild.html | 4 + .../retargeting/x/nativeChild/nativeChild.js | 9 + .../x/syntheticChild/syntheticChild.html | 4 + .../x/syntheticChild/syntheticChild.js | 7 + .../x/syntheticParent/syntheticParent.html | 13 + .../x/syntheticParent/syntheticParent.js | 19 + .../scoped-ids/scoped-ids.spec.js | 32 + .../scoped-ids/x/test/test.html | 6 + .../scoped-ids/x/test/test.js | 13 + .../shadowSupportModeReporting/index.spec.js | 59 ++ .../shadowSupportModeReporting/x/any/any.js | 5 + .../x/native/native.js | 5 + .../shadowSupportModeReporting/x/none/none.js | 3 + .../x/reset/reset.js | 5 + .../mixed-shadow-mode/slotting/index.spec.js | 13 + .../slotting/x/child/child.html | 3 + .../slotting/x/child/child.js | 5 + .../slotting/x/parent/parent.html | 7 + .../slotting/x/parent/parent.js | 3 + .../synthetic-behavior/index.spec.js | 131 +++ .../grandparentAnyParentAnyChildAny.html | 3 + .../grandparentAnyParentAnyChildAny.js | 5 + .../grandparentAnyParentAnyChildReset.html | 3 + .../grandparentAnyParentAnyChildReset.js | 5 + .../grandparentAnyParentResetChildAny.html | 3 + .../grandparentAnyParentResetChildAny.js | 5 + .../grandparentAnyParentResetChildReset.html | 3 + .../grandparentAnyParentResetChildReset.js | 5 + .../grandparentResetParentAnyChildAny.html | 3 + .../grandparentResetParentAnyChildAny.js | 3 + .../grandparentResetParentAnyChildReset.html | 3 + .../grandparentResetParentAnyChildReset.js | 3 + .../grandparentResetParentResetChildAny.html | 3 + .../grandparentResetParentResetChildAny.js | 3 + ...grandparentResetParentResetChildReset.html | 3 + .../grandparentResetParentResetChildReset.js | 3 + .../synthetic-behavior/x/leafAny/leafAny.css | 3 + .../synthetic-behavior/x/leafAny/leafAny.html | 5 + .../synthetic-behavior/x/leafAny/leafAny.js | 5 + .../x/leafReset/leafReset.css | 3 + .../x/leafReset/leafReset.html | 5 + .../x/leafReset/leafReset.js | 3 + .../parentAnyChildAny/parentAnyChildAny.html | 3 + .../x/parentAnyChildAny/parentAnyChildAny.js | 5 + .../parentAnyChildReset.html | 3 + .../parentAnyChildReset.js | 5 + .../parentLightChildAny.html | 3 + .../parentLightChildAny.js | 5 + .../parentLightChildReset.html | 3 + .../parentLightChildReset.js | 5 + .../parentResetChildAny.html | 3 + .../parentResetChildAny.js | 3 + .../parentResetChildReset.html | 3 + .../parentResetChildReset.js | 3 + .../transitivity/index.spec.js | 93 ++ .../x/lightContainer/lightContainer.html | 12 + .../x/lightContainer/lightContainer.js | 5 + .../transitivity/x/native/native.html | 3 + .../transitivity/x/native/native.js | 5 + .../x/nativeContainer/nativeContainer.html | 5 + .../x/nativeContainer/nativeContainer.js | 5 + .../x/resetExtendsAny/resetExtendsAny.js | 5 + .../transitivity/x/synthetic/synthetic.js | 3 + .../x/syntheticReset/syntheticReset.js | 5 + .../Event-methods/Event.composedPath.spec.js | 210 +++++ .../Event-methods/x/synthetic/synthetic.js | 3 + .../Event-properties/Event.target.spec.js | 279 ++++++ .../x/NativeChild/NativeChild.js | 8 + .../x/NativeParent/NativeParent.js | 10 + .../x/lwcParent/lwcParent.html | 3 + .../Event-properties/x/lwcParent/lwcParent.js | 3 + .../HTMLSlotElement.assignedElements.spec.js | 49 + .../HTMLSlotElement.assignedNodes.spec.js | 49 + .../x/NativeBasic/NativeBasic.js | 8 + .../x/lwcParent/lwcParent.html | 3 + .../x/lwcParent/lwcParent.js | 3 + .../test/native-shadow/children/index.spec.js | 33 + .../children/x/slottable/slottable.html | 3 + .../children/x/slottable/slottable.js | 3 + .../force-shadow-migrate-mode/index.spec.js | 148 +++ .../x/native/native.html | 3 + .../x/native/native.js | 5 + .../x/styledLight/styledLight.css | 3 + .../x/styledLight/styledLight.html | 3 + .../x/styledLight/styledLight.js | 5 + .../x/synthetic/synthetic.css | 3 + .../x/synthetic/synthetic.html | 3 + .../x/synthetic/synthetic.js | 3 + .../test/native-shadow/style/style.spec.js | 26 + .../style/x/firstShadow/firstShadow.css | 3 + .../style/x/firstShadow/firstShadow.html | 3 + .../style/x/firstShadow/firstShadow.js | 3 + .../style/x/secondShadow/secondShadow.css | 3 + .../style/x/secondShadow/secondShadow.html | 3 + .../style/x/secondShadow/secondShadow.js | 3 + .../natives/array/array-splice-slice.spec.js | 13 + .../test/natives/array/plain.array.spec.js | 12 + .../natives/array/push-concat-unshift.spec.js | 25 + .../function/function.arguments.spec.js | 21 + .../test/natives/json/json.stringify.spec.js | 54 ++ .../misc/enumerable-properties.spec.js | 22 + .../test/natives/object/object.assign.spec.js | 7 + .../natives/object/object.entries.spec.js | 138 +++ .../test/natives/object/object.keys.spec.js | 9 + .../object/object.setPrototypeOf.spec.js | 44 + .../test/natives/object/object.values.spec.js | 104 +++ .../test/natives/weak-set/index.spec.js | 9 + .../polyfills/aria-properties/index.spec.js | 255 ++++++ .../x/component/component.html | 1 + .../aria-properties/x/component/component.js | 8 + .../click-event-composed/index.spec.js | 34 + .../click-event-composed/x/test/test.html | 3 + .../click-event-composed/x/test/test.js | 3 + .../custom-event-composed/index.spec.js | 12 + .../document-body-properties/index.spec.js | 66 ++ .../document-body-properties/x/test/test.html | 5 + .../document-body-properties/x/test/test.js | 3 + .../x/uniqueTagName/uniqueTagName.html | 1 + .../x/uniqueTagName/uniqueTagName.js | 3 + .../document-properties/index.spec.js | 114 +++ .../document-properties/x/test/test.html | 5 + .../document-properties/x/test/test.js | 3 + .../x/uniqueTagName/uniqueTagName.html | 1 + .../x/uniqueTagName/uniqueTagName.js | 3 + .../x/withLwcDomManual/withLwcDomManual.html | 3 + .../x/withLwcDomManual/withLwcDomManual.js | 3 + .../polyfills/event-composed/index.spec.js | 26 + .../polyfills/html-collection/index.spec.js | 108 +++ .../html-collection/x/test/test.html | 7 + .../polyfills/html-collection/x/test/test.js | 3 + .../test/polyfills/node-list/index.spec.js | 52 ++ .../test/polyfills/node-list/x/test/test.html | 7 + .../test/polyfills/node-list/x/test/test.js | 3 + .../test/polyfills/proxy-concat/index.spec.js | 80 ++ .../test/polyfills/shadow-root/index.spec.js | 33 + .../polyfills/shadow-root/x/test/test.html | 3 + .../test/polyfills/shadow-root/x/test/test.js | 3 + .../test/polyfills/text-content/index.spec.js | 49 + .../polyfills/text-content/x/test/test.html | 4 + .../polyfills/text-content/x/test/test.js | 3 + .../profiler/mutation-logging/index.spec.js | 302 ++++++ .../mutation-logging/x/child/child.html | 19 + .../mutation-logging/x/child/child.js | 93 ++ .../x/getterThrows/getterThrows.html | 3 + .../x/getterThrows/getterThrows.js | 26 + .../mutation-logging/x/parent/parent.html | 5 + .../mutation-logging/x/parent/parent.js | 6 + .../test/profiler/sanity/profiler.spec.js | 259 ++++++ .../sanity/x/container/container.html | 19 + .../profiler/sanity/x/container/container.js | 21 + .../sanity/x/errorChild/errorChild.html | 4 + .../sanity/x/errorChild/errorChild.js | 7 + .../test/profiler/sanity/x/item/item.html | 3 + .../test/profiler/sanity/x/item/item.js | 5 + .../test/profiler/sanity/x/light/light.html | 1 + .../test/profiler/sanity/x/light/light.js | 5 + .../test/profiler/sanity/x/simple/simple.html | 3 + .../test/profiler/sanity/x/simple/simple.js | 3 + .../test/reactivity/render/index.spec.js | 46 + .../test/reactivity/render/x/test/test.html | 10 + .../test/reactivity/render/x/test/test.js | 16 + .../test/regression/invalid-key/index.spec.js | 29 + .../x/conditionalList/conditionalList.html | 10 + .../x/conditionalList/conditionalList.js | 6 + .../regression/style-newline/index.spec.js | 16 + .../style-newline/x/component/component.html | 9 + .../style-newline/x/component/component.js | 3 + .../adjacent-text-and-comments/index.spec.js | 41 + .../x/ignore/ignore.html | 3 + .../x/ignore/ignore.js | 6 + .../x/preserve/preserve.html | 3 + .../x/preserve/preserve.js | 6 + .../callback-invocation-order/index.spec.js | 425 +++++++++ .../callback-invocation-order/x/leaf/leaf.js | 13 + .../x/lightContainer/lightContainer.html | 5 + .../x/lightContainer/lightContainer.js | 13 + .../lightContainerMultipleConditionals.html | 7 + .../lightContainerMultipleConditionals.js | 26 + .../x/lightLeaf/lightLeaf.js | 15 + .../x/lightParent/lightParent.html | 8 + .../x/lightParent/lightParent.js | 13 + .../lightShadowParent/lightShadowParent.html | 5 + .../x/lightShadowParent/lightShadowParent.js | 13 + .../lightSlotMultipleConditionals.html | 11 + .../lightSlotMultipleConditionals.js | 19 + .../multiTemplateConditionals.js | 25 + .../x/multiTemplateConditionals/template.html | 14 + .../multiTemplateConditionals/template2.html | 14 + .../x/parent/parent.html | 3 + .../x/parent/parent.js | 13 + .../x/shadowContainer/shadowContainer.html | 5 + .../x/shadowContainer/shadowContainer.js | 11 + .../shadowContainerMultipleConditionals.html | 7 + .../shadowContainerMultipleConditionals.js | 24 + .../shadowLightParent/shadowLightParent.html | 5 + .../x/shadowLightParent/shadowLightParent.js | 11 + .../x/shadowParent/shadowParent.html | 8 + .../x/shadowParent/shadowParent.js | 11 + .../shadowSlotConditionals.html | 11 + .../shadowSlotConditionals.js | 17 + .../x/toggleContainer/toggleContainer.html | 8 + .../x/toggleContainer/toggleContainer.js | 5 + .../x/toggleParent/toggleParent.html | 5 + .../x/toggleParent/toggleParent.js | 11 + .../disconnecting-root-vm/index.spec.js | 19 + .../disconnecting-root-vm/x/child/child.html | 3 + .../disconnecting-root-vm/x/child/child.js | 5 + .../x/parent/parent.html | 5 + .../disconnecting-root-vm/x/parent/parent.js | 14 + .../duplicate-text-rendering/index.spec.js | 22 + .../x/container/container.html | 15 + .../x/container/container.js | 28 + .../dynamic-childrens-inside-if/index.spec.js | 73 ++ .../x/dynamic/dynamic.html | 10 + .../x/dynamic/dynamic.js | 9 + .../x/forEachCmp/forEachCmp.html | 11 + .../x/forEachCmp/forEachCmp.js | 13 + .../x/lwcDynamic/lwcDynamic.html | 10 + .../x/lwcDynamic/lwcDynamic.js | 9 + .../rendering/dynamic-slots/index.spec.js | 95 ++ .../dynamic-slots/x/bigint/bigint.html | 5 + .../dynamic-slots/x/bigint/bigint.js | 5 + .../x/bigintchild/bigintchild.html | 3 + .../x/bigintchild/bigintchild.js | 3 + .../dynamic-slots/x/child/child.html | 13 + .../rendering/dynamic-slots/x/child/child.js | 3 + .../x/emptyobject/emptyobject.html | 5 + .../x/emptyobject/emptyobject.js | 5 + .../x/lightChild/lightChild.html | 5 + .../dynamic-slots/x/lightChild/lightChild.js | 5 + .../x/lightParent/lightParent.html | 13 + .../x/lightParent/lightParent.js | 19 + .../dynamic-slots/x/parent/parent.html | 15 + .../dynamic-slots/x/parent/parent.js | 43 + .../dynamic-slots/x/symbol/symbol.html | 5 + .../dynamic-slots/x/symbol/symbol.js | 5 + .../rendering/element-orders/index.spec.js | 59 ++ .../x/slotFallback/slotFallback.html | 9 + .../x/slotFallback/slotFallback.js | 11 + .../x/withDynamic/withDynamic.html | 9 + .../x/withDynamic/withDynamic.js | 11 + .../element-orders/x/withEach/withEach.html | 5 + .../element-orders/x/withEach/withEach.js | 36 + .../x/withLwcDynamic/withLwcDynamic.html | 9 + .../x/withLwcDynamic/withLwcDynamic.js | 11 + .../elements-are-not-recycled/index.spec.js | 118 +++ .../x/child/child.html | 5 + .../x/child/child.js | 5 + .../x/container/container.html | 17 + .../x/container/container.js | 11 + .../x/simple/simple.css | 3 + .../x/simple/simple.html | 3 + .../x/simple/simple.js | 3 + .../test/rendering/form-tag/index.spec.js | 16 + .../form-tag/x/container/container.html | 5 + .../form-tag/x/container/container.js | 3 + .../rendering/fragment-cache/index.spec.js | 80 ++ .../nativeScopedStyles/nativeScopedStyles.js | 12 + .../x/nativeStyles/nativeStyles.js | 12 + .../fragment-cache/x/noStyles/noStyles.js | 8 + .../x/scopedStyles/scopedStyles.js | 11 + .../fragment-cache/x/styles/styles.js | 11 + .../x/stylesheets/scopedStyles.scoped.css | 3 + .../fragment-cache/x/stylesheets/styles.css | 3 + .../fragment-cache/x/template/template.html | 3 + .../if-inside-custom-render/index.spec.js | 14 + .../x/customRender/customRender.js | 23 + .../x/customRender/template.html | 11 + .../x/customRender/template2.html | 11 + .../test/rendering/iframe/index.spec.js | 17 + .../iframe/x/component/component.html | 3 + .../rendering/iframe/x/component/component.js | 3 + .../test/rendering/inheritance/index.spec.js | 20 + .../test/rendering/inheritance/x/bar/bar.js | 6 + .../rendering/inheritance/x/base/base.html | 3 + .../test/rendering/inheritance/x/base/base.js | 3 + .../test/rendering/inheritance/x/foo/foo.html | 3 + .../test/rendering/inheritance/x/foo/foo.js | 6 + .../rendering/inner-outer-html/index.spec.js | 48 + .../x/component/component.html | 3 + .../inner-outer-html/x/component/component.js | 3 + .../inner-outer-html/x/inner/inner.html | 13 + .../inner-outer-html/x/inner/inner.js | 6 + .../inner-outer-html/x/outer/outer.html | 13 + .../inner-outer-html/x/outer/outer.js | 6 + .../test/rendering/input/index.spec.js | 726 +++++++++++++++ .../rendering/input/x/dynamic/dynamic.html | 53 ++ .../test/rendering/input/x/dynamic/dynamic.js | 16 + .../test/rendering/input/x/static/static.html | 31 + .../test/rendering/input/x/static/static.js | 3 + .../input/x/updatable/updatable.html | 6 + .../rendering/input/x/updatable/updatable.js | 7 + .../test/rendering/issue-3377/index.spec.js | 18 + .../rendering/issue-3377/x/test/test.html | 8 + .../test/rendering/issue-3377/x/test/test.js | 13 + .../test/rendering/issue-3396/index.spec.js | 17 + .../rendering/issue-3396/x/test/test.html | 5 + .../test/rendering/issue-3396/x/test/test.js | 5 + .../test/rendering/issue-4889/index.spec.js | 34 + .../test/rendering/issue-4889/x/data/data.js | 159 ++++ .../test/rendering/issue-4889/x/row/row.html | 2 + .../test/rendering/issue-4889/x/row/row.js | 5 + .../rendering/issue-4889/x/table/table.html | 8 + .../rendering/issue-4889/x/table/table.js | 5 + .../test/rendering/iteration/index.spec.js | 72 ++ .../iteration/x/forEach/forEach.html | 5 + .../rendering/iteration/x/forEach/forEach.js | 5 + .../x/inlineForEach/inlineForEach.html | 3 + .../x/inlineForEach/inlineForEach.js | 5 + .../x/inlineIterator/inlineIterator.html | 3 + .../x/inlineIterator/inlineIterator.js | 5 + .../test/rendering/iteration/x/item/item.html | 6 + .../test/rendering/iteration/x/item/item.js | 8 + .../iteration/x/iterator/iterator.html | 5 + .../iteration/x/iterator/iterator.js | 5 + .../key-outside-iteration/index.spec.js | 107 +++ .../key-outside-iteration/x/child/child.html | 3 + .../key-outside-iteration/x/child/child.js | 5 + .../x/parent/parent.html | 3 + .../key-outside-iteration/x/parent/parent.js | 5 + .../x/parentWithIf/parentWithIf.html | 4 + .../x/parentWithIf/parentWithIf.js | 7 + .../parentWithIfInverted.html | 4 + .../parentWithIfInverted.js | 7 + .../parentWithIfPreceded.html | 4 + .../parentWithIfPreceded.js | 7 + .../parentWithIfPrecededInverted.html | 4 + .../parentWithIfPrecededInverted.js | 7 + .../legacy-scope-tokens/index.spec.js | 155 ++++ .../legacy-scope-tokens/x/light/light.css | 7 + .../legacy-scope-tokens/x/light/light.html | 6 + .../legacy-scope-tokens/x/light/light.js | 11 + .../x/light/light.scoped.css | 7 + .../legacy-scope-tokens/x/shadow/shadow.css | 7 + .../legacy-scope-tokens/x/shadow/shadow.html | 7 + .../legacy-scope-tokens/x/shadow/shadow.js | 13 + .../x/shadow/shadow.scoped.css | 7 + .../legacy-stylesheet-api/index.spec.js | 67 ++ .../inspectStylesheets/inspectStylesheets.js | 13 + .../x/inspectStylesheets/withStylesheet.css | 3 + .../x/inspectStylesheets/withStylesheet.html | 3 + .../inspectStylesheets/withoutStylesheet.html | 3 + .../x/patchesStylesheet/patchesStylesheet.js | 12 + .../x/patchesStylesheet/withStylesheet.css | 3 + .../x/patchesStylesheet/withStylesheet.html | 3 + .../patchesStylesheet/withoutStylesheet.html | 3 + .../x/patchesStylesheetOnStylesheet/a.css | 3 + .../x/patchesStylesheetOnStylesheet/a.html | 3 + .../x/patchesStylesheetOnStylesheet/b.css | 3 + .../x/patchesStylesheetOnStylesheet/b.html | 3 + .../patchesStylesheetOnStylesheet.js | 12 + .../rendering/native-only-css/index.spec.js | 69 ++ .../x/light/chic.native-only.css | 3 + .../native-only-css/x/light/glamorous.css | 3 + .../native-only-css/x/light/hip.scoped.css | 3 + .../native-only-css/x/light/light.css | 5 + .../native-only-css/x/light/light.html | 3 + .../native-only-css/x/light/light.js | 10 + .../native-only-css/x/light/light.scoped.css | 3 + .../x/light/snazzy.native-only.scoped.css | 3 + .../x/shadow/chic.native-only.css | 3 + .../native-only-css/x/shadow/glamorous.css | 3 + .../native-only-css/x/shadow/hip.scoped.css | 3 + .../native-only-css/x/shadow/shadow.css | 5 + .../native-only-css/x/shadow/shadow.html | 3 + .../native-only-css/x/shadow/shadow.js | 9 + .../x/shadow/shadow.scoped.css | 3 + .../x/shadow/snazzy.native-only.scoped.css | 3 + .../native-only-css/x/styleLibrary/bar.css | 3 + .../x/styleLibrary/foo.native-only.css | 3 + .../x/styleLibrary/styleLibrary.css | 6 + .../test/rendering/nested-state/index.spec.js | 16 + .../nested-state/x/container/container.html | 3 + .../nested-state/x/container/container.js | 42 + .../test/rendering/noframes/index.spec.js | 30 + .../noframes/x/component/component.html | 7 + .../noframes/x/component/component.js | 3 + .../test/rendering/null-logging/index.spec.js | 20 + .../null-logging/x/container/container.html | 4 + .../null-logging/x/container/container.js | 15 + .../programmatic-stylesheets/index.spec.js | 245 +++++ .../x/basic/basic.html | 3 + .../programmatic-stylesheets/x/basic/basic.js | 6 + .../x/basic/stylesheet.css | 3 + .../x/direct/direct.html | 3 + .../x/direct/direct.js | 6 + .../x/direct/stylesheet.css | 3 + .../x/implicit/implicit.css | 3 + .../x/implicit/implicit.html | 3 + .../x/implicit/implicit.js | 6 + .../x/implicit/stylesheet.css | 3 + .../x/inherit/inherit.html | 3 + .../x/inherit/inherit.js | 6 + .../x/inherit/stylesheet.css | 3 + .../inheritFromLightningElement.html | 3 + .../inheritFromLightningElement.js | 6 + .../stylesheet.css | 3 + .../x/invalid/invalid.html | 3 + .../x/invalid/invalid.js | 5 + .../x/invalid2/invalid2.html | 3 + .../x/invalid2/invalid2.js | 5 + .../x/invalid3/invalid3.html | 3 + .../x/invalid3/invalid3.js | 9 + .../x/mixedScopedAndUnscoped/a.scoped.css | 3 + .../x/mixedScopedAndUnscoped/b.css | 5 + .../x/mixedScopedAndUnscoped/c.css | 3 + .../mixedScopedAndUnscoped.html | 3 + .../mixedScopedAndUnscoped.js | 8 + .../programmatic-stylesheets/x/multi/a.css | 4 + .../programmatic-stylesheets/x/multi/a.html | 3 + .../programmatic-stylesheets/x/multi/b.css | 4 + .../programmatic-stylesheets/x/multi/b.html | 3 + .../programmatic-stylesheets/x/multi/multi.js | 19 + .../x/multi/stylesheet.css | 3 + .../x/multiScoped/a.html | 3 + .../x/multiScoped/a.scoped.css | 4 + .../x/multiScoped/b.html | 3 + .../x/multiScoped/b.scoped.css | 4 + .../x/multiScoped/multiScoped.js | 19 + .../x/multiScoped/stylesheet.scoped.css | 3 + .../x/multiStyles/a.css | 4 + .../x/multiStyles/b.css | 6 + .../x/multiStyles/c.css | 3 + .../x/multiStyles/multiStyles.html | 3 + .../x/multiStyles/multiStyles.js | 7 + .../x/scoped/scoped.html | 3 + .../x/scoped/scoped.js | 7 + .../x/scoped/stylesheet.scoped.css | 3 + .../x/stylesheetsMutation/stylesheet.css | 3 + .../stylesheetsMutation.html | 3 + .../stylesheetsMutation.js | 10 + .../x/super/stylesheet.css | 4 + .../x/super/super.html | 3 + .../programmatic-stylesheets/x/super/super.js | 6 + .../sanitize-stylesheet-token/index.spec.js | 104 +++ .../x/component/component.css | 3 + .../x/component/component.html | 3 + .../x/component/component.js | 46 + .../x/scoping/scoping.html | 3 + .../x/scoping/scoping.js | 38 + .../x/scoping/scoping.scoped.css | 3 + .../index.spec.js | 37 + .../x/component/component.html | 4 + .../x/component/component.js | 5 + .../x/component/component.scoped.css | 3 + .../sequential-reordering/index.spec.js | 53 ++ .../sequential-reordering/x/test/test.html | 18 + .../sequential-reordering/x/test/test.js | 9 + .../test/rendering/side-effects/index.spec.js | 99 ++ .../childWithApiGetterSetter.html | 1 + .../childWithApiGetterSetter.js | 11 + .../sideEffectDuringRender.html | 1 + .../sideEffectDuringRender.js | 13 + .../sideEffectDuringRenderExternal.html | 3 + .../sideEffectDuringRenderExternal.js | 17 + .../sideEffectDuringTemplate.html | 3 + .../sideEffectDuringTemplate.js | 18 + .../sideEffectDuringTemplateExternal.html | 4 + .../sideEffectDuringTemplateExternal.js | 22 + .../element/light/index.spec.js | 26 + .../element/light/x/inner/inner.html | 7 + .../element/light/x/inner/inner.js | 5 + .../element/light/x/outer/outer.html | 10 + .../element/light/x/outer/outer.js | 5 + .../element/shadow/index.spec.js | 21 + .../element/shadow/x/inner/inner.html | 7 + .../element/shadow/x/inner/inner.js | 3 + .../element/shadow/x/outer/outer.html | 10 + .../element/shadow/x/outer/outer.js | 3 + .../external/light/index.spec.js | 30 + .../external/light/x/inner/inner.html | 7 + .../external/light/x/inner/inner.js | 5 + .../external/light/x/outer/outer.html | 10 + .../external/light/x/outer/outer.js | 5 + .../external/shadow/index.spec.js | 27 + .../external/shadow/x/inner/inner.html | 7 + .../external/shadow/x/inner/inner.js | 3 + .../external/shadow/x/outer/outer.html | 10 + .../external/shadow/x/outer/outer.js | 3 + .../ifTrue/light/index.spec.js | 28 + .../ifTrue/light/x/inner/inner.html | 7 + .../ifTrue/light/x/inner/inner.js | 5 + .../ifTrue/light/x/outer/outer.html | 10 + .../ifTrue/light/x/outer/outer.js | 6 + .../ifTrue/shadow/index.spec.js | 23 + .../ifTrue/shadow/x/inner/inner.html | 7 + .../ifTrue/shadow/x/inner/inner.js | 3 + .../ifTrue/shadow/x/outer/outer.html | 10 + .../ifTrue/shadow/x/outer/outer.js | 5 + .../lwcIf/light/index.spec.js | 28 + .../lwcIf/light/x/inner/inner.html | 7 + .../lwcIf/light/x/inner/inner.js | 5 + .../lwcIf/light/x/outer/outer.html | 10 + .../lwcIf/light/x/outer/outer.js | 6 + .../lwcIf/shadow/index.spec.js | 23 + .../lwcIf/shadow/x/inner/inner.html | 7 + .../lwcIf/shadow/x/inner/inner.js | 3 + .../lwcIf/shadow/x/outer/outer.html | 10 + .../lwcIf/shadow/x/outer/outer.js | 5 + .../slotted-text-diffing/index.spec.js | 24 + .../slotted-text-diffing/x/child/child.html | 3 + .../slotted-text-diffing/x/child/child.js | 3 + .../x/container/container.html | 11 + .../x/container/container.js | 9 + .../test/rendering/slotting/index.spec.js | 119 +++ .../fallbackContentReuseChild.html | 8 + .../fallbackContentReuseChild.js | 15 + .../fallbackContentReuseDynamicKeyChild.html | 8 + .../fallbackContentReuseDynamicKeyChild.js | 20 + .../fallbackContentReuseDynamicKeyParent.html | 10 + .../fallbackContentReuseDynamicKeyParent.js | 5 + .../fallbackContentReuseParent.html | 10 + .../fallbackContentReuseParent.js | 5 + .../regressionContainer.html | 17 + .../regressionContainer.js | 11 + .../x/regressionSlot/regressionSlot.html | 4 + .../x/regressionSlot/regressionSlot.js | 13 + .../x/renderCountChild/renderCountChild.html | 3 + .../x/renderCountChild/renderCountChild.js | 13 + .../renderCountParent/renderCountParent.html | 5 + .../x/renderCountParent/renderCountParent.js | 15 + .../x/unknownSlotLight/unknownSlotLight.html | 5 + .../x/unknownSlotLight/unknownSlotLight.js | 5 + .../unknownSlotLightChild.html | 3 + .../unknownSlotLightChild.js | 5 + .../unknownSlotShadow/unknownSlotShadow.html | 5 + .../x/unknownSlotShadow/unknownSlotShadow.js | 3 + .../unknownSlotShadowChild.html | 3 + .../unknownSlotShadowChild.js | 3 + .../static-props-attrs/index.spec.js | 75 ++ .../x/component/component.html | 10 + .../x/component/component.js | 5 + .../static-props-attrs/x/other/other.html | 2 + .../static-props-attrs/x/other/other.js | 5 + .../style-class-whitespace/index.spec.js | 54 ++ .../x/component/component.html | 29 + .../x/component/component.js | 3 + .../style-specificity-important/index.spec.js | 46 + .../x/component/component.css | 3 + .../x/component/component.html | 30 + .../x/component/component.js | 3 + .../stylesheet-caching/index.spec.js | 19 + .../stylesheet-caching/x/light/light.css | 3 + .../stylesheet-caching/x/light/light.html | 3 + .../stylesheet-caching/x/light/light.js | 5 + .../stylesheet-caching/x/shadow/shadow.css | 3 + .../stylesheet-caching/x/shadow/shadow.html | 3 + .../stylesheet-caching/x/shadow/shadow.js | 3 + .../test/rendering/stylesheets/index.spec.js | 50 + .../stylesheets/x/component/component.css | 3 + .../stylesheets/x/component/component.html | 3 + .../stylesheets/x/component/component.js | 3 + .../identicalComponent/identicalComponent.css | 3 + .../identicalComponent.html | 3 + .../identicalComponent/identicalComponent.js | 3 + .../test/rendering/stylesheets/x/shared.css | 3 + .../stylesheets/x/sharing1/sharing1.css | 5 + .../stylesheets/x/sharing1/sharing1.html | 3 + .../stylesheets/x/sharing1/sharing1.js | 3 + .../stylesheets/x/sharing2/sharing2.css | 5 + .../stylesheets/x/sharing2/sharing2.html | 3 + .../stylesheets/x/sharing2/sharing2.js | 3 + .../rendering/table-diffing/index.spec.js | 112 +++ .../rendering/table-diffing/x/row/row.html | 3 + .../test/rendering/table-diffing/x/row/row.js | 5 + .../table-diffing/x/table/table.html | 9 + .../rendering/table-diffing/x/table/table.js | 5 + .../rendering/version-mismatch/index.spec.js | 176 ++++ .../version-mismatch/x/component/component.js | 3 + .../x/componentWithProp/componentWithProp.js | 5 + .../componentWithTemplateAndStylesheet.css | 3 + .../componentWithTemplateAndStylesheet.html | 3 + .../componentWithTemplateAndStylesheet.js | 10 + .../Document-properties/leak-tests.spec.js | 61 ++ .../Document-properties/x/leak/leak.html | 4 + .../Document-properties/x/leak/leak.js | 3 + .../DocumentFragment.querySelector.spec.js | 21 + .../DocumentFragment.querySelectorAll.spec.js | 22 + .../x/child/child.html | 3 + .../x/child/child.js | 3 + .../x/slotted/slotted.html | 5 + .../x/slotted/slotted.js | 3 + .../x/test/test.html | 3 + .../x/test/test.js | 3 + ...DocumentOrShadowRoot.activeElement.spec.js | 108 +++ .../x/container/container.html | 3 + .../x/container/container.js | 3 + .../x/slottedInput/slottedInput.html | 5 + .../x/slottedInput/slottedInput.js | 3 + .../x/withInput/withInput.html | 3 + .../x/withInput/withInput.js | 3 + .../x/withInputDeep/withInputDeep.html | 3 + .../x/withInputDeep/withInputDeep.js | 3 + .../x/withLwcDomManual/withLwcDomManual.html | 3 + .../x/withLwcDomManual/withLwcDomManual.js | 3 + .../Element.assignedSlot.spec.js | 79 ++ .../Element-properties/Element.id.spec.js | 52 ++ .../Element.innerHTML.spec.js | 58 ++ .../Element.outerHTML.spec.js | 50 + .../Element.setAttribute.spec.js | 11 + .../Element-properties/index.spec.js | 210 +++++ .../Element-properties/x/child/child.html | 2 + .../Element-properties/x/child/child.js | 3 + .../x/container/container.html | 7 + .../x/container/container.js | 3 + .../customElementAsDefaultSlot.html | 5 + .../customElementAsDefaultSlot.js | 3 + .../customElementIdValueEmpty.html | 3 + .../customElementIdValueEmpty.js | 7 + .../customElementIdValueUndefined.html | 3 + .../customElementIdValueUndefined.js | 7 + .../x/idValueEmpty/idValueEmpty.html | 3 + .../x/idValueEmpty/idValueEmpty.js | 7 + .../x/idValueUndefined/idValueUndefined.html | 3 + .../x/idValueUndefined/idValueUndefined.js | 7 + .../x/namedSlot/namedSlot.html | 3 + .../x/namedSlot/namedSlot.js | 3 + .../Element-properties/x/nested/nested.html | 7 + .../Element-properties/x/nested/nested.js | 3 + .../x/nestedFallback/nestedFallback.html | 7 + .../x/nestedFallback/nestedFallback.js | 3 + .../Element-properties/x/noSlot/noSlot.html | 1 + .../Element-properties/x/noSlot/noSlot.js | 3 + .../x/simpleParent/simpleParent.html | 4 + .../x/simpleParent/simpleParent.js | 3 + .../Element-properties/x/slot/slot.html | 7 + .../Element-properties/x/slot/slot.js | 3 + .../x/slotsInSlots/slotsInSlots.html | 5 + .../x/slotsInSlots/slotsInSlots.js | 3 + .../Element-properties/x/slotted/slotted.html | 9 + .../Element-properties/x/slotted/slotted.js | 3 + .../slottedCustomElement.html | 8 + .../slottedCustomElement.js | 3 + .../Element-properties/x/test/test.html | 8 + .../Element-properties/x/test/test.js | 3 + .../x/testWithDiv/testWithDiv.html | 3 + .../x/testWithDiv/testWithDiv.js | 3 + .../x/textSlotted/textSlotted.html | 5 + .../x/textSlotted/textSlotted.js | 3 + .../shadow-dom/Event-methods/index.spec.js | 173 ++++ .../Event-methods/x/child/child.html | 3 + .../shadow-dom/Event-methods/x/child/child.js | 3 + .../Event-methods/x/container/container.html | 5 + .../Event-methods/x/container/container.js | 3 + .../Event.currentTarget.spec.js | 57 ++ .../Event.defaultPrevented.spec.js | 79 ++ .../Event-properties/Event.target.spec.js | 129 +++ .../Event-properties/x/child/child.html | 5 + .../Event-properties/x/child/child.js | 10 + .../x/container/container.html | 5 + .../Event-properties/x/container/container.js | 3 + .../EventTarget.addEventListener.spec.js | 323 +++++++ .../EventTarget.dispatchEvent.spec.js | 44 + .../EventTarget.removeEventListener.spec.js | 88 ++ .../x/container/container.html | 5 + .../x/container/container.js | 3 + .../CustomInstanceSetter.spec.js | 16 + .../GlobalHTML.properties.spec.js | 256 ++++++ .../accessAttributeInConstructor.html | 1 + .../accessAttributeInConstructor.js | 8 + .../attributeIsReactive.html | 8 + .../attributeIsReactive.js | 11 + .../attributeMutations.html | 8 + .../attributeMutations/attributeMutations.js | 73 ++ .../attributeSetInConstructor.html | 1 + .../attributeSetInConstructor.js | 15 + .../customInstanceSetter.html | 1 + .../customInstanceSetter.js | 35 + .../nonReflectedTabIndex.html | 1 + .../nonReflectedTabIndex.js | 9 + .../x/parent/parent.html | 3 + .../HTMLElement-properties/x/parent/parent.js | 3 + .../reflectedTabIndex/reflectedTabIndex.html | 1 + .../x/reflectedTabIndex/reflectedTabIndex.js | 11 + .../x/setAttribute/setAttribute.html | 1 + .../x/setAttribute/setAttribute.js | 10 + .../tabIndexSetInConnectedCallback.html | 2 + .../tabIndexSetInConnectedCallback.js | 23 + .../tabIndexSetInConstructor.html | 2 + .../tabIndexSetInConstructor.js | 8 + .../tabIndexSetInRender.html | 2 + .../tabIndexSetInRender.js | 9 + .../x/tabIndexTester/tabIndexTester.html | 2 + .../x/tabIndexTester/tabIndexTester.js | 15 + .../HTMLElement-properties/x/test/test.html | 2 + .../HTMLElement-properties/x/test/test.js | 15 + .../HTMLSlotElement.slotchange.spec.js | 78 ++ .../HTMLSlotElement-events/x/child/child.html | 5 + .../HTMLSlotElement-events/x/child/child.js | 25 + .../x/parent/parent.html | 7 + .../HTMLSlotElement-events/x/parent/parent.js | 39 + .../HTMLSlotElement-assigned.spec.js | 157 ++++ .../HTMLSlotElement.name.spec.js | 21 + .../x/basic/basic.html | 8 + .../x/basic/basic.js | 3 + .../x/complex/complex.html | 5 + .../x/complex/complex.js | 3 + .../x/complexBottom/complexBottom.html | 8 + .../x/complexBottom/complexBottom.js | 3 + .../x/complexTop/complexTop.html | 10 + .../x/complexTop/complexTop.js | 3 + .../x/noDirectChild/noDirectChild.html | 9 + .../x/noDirectChild/noDirectChild.js | 3 + .../x/slotsInSlots/slotsInSlots.html | 7 + .../x/slotsInSlots/slotsInSlots.js | 3 + .../MutationObserver/MutationObserver.spec.js | 480 ++++++++++ .../MutationObserver/x/child/child.html | 4 + .../MutationObserver/x/child/child.js | 3 + .../x/nestedSlot/nestedSlot.html | 6 + .../x/nestedSlot/nestedSlot.js | 3 + .../nestedSlotContainer.html | 5 + .../nestedSlotContainer.js | 3 + .../MutationObserver/x/parent/parent.html | 4 + .../MutationObserver/x/parent/parent.js | 3 + .../x/slottedChild/slottedChild.html | 5 + .../x/slottedChild/slottedChild.js | 3 + .../templateMutations/templateMutations.html | 8 + .../x/templateMutations/templateMutations.js | 6 + .../Node-properties/Node.childNodes.spec.js | 137 +++ .../Node-properties/Node.cloneNode.spec.js | 139 +++ .../Node.compareDocumentPosition.spec.js | 118 +++ .../Node-properties/Node.contains.spec.js | 124 +++ .../Node-properties/Node.firstChild.spec.js | 27 + .../Node-properties/Node.getRootNode.spec.js | 360 ++++++++ .../Node.hasChildNodes.spec.js | 32 + .../Node-properties/Node.isConnected.spec.js | 37 + .../Node-properties/Node.lastChild.spec.js | 27 + .../Node.parentElement.spec.js | 47 + .../Node-properties/Node.parentNode.spec.js | 47 + .../Node-properties/Node.textContent.spec.js | 57 ++ .../x/complexCloneNode/complexCloneNode.html | 15 + .../x/complexCloneNode/complexCloneNode.js | 3 + .../x/complexSlotted/complexSlotted.html | 9 + .../x/complexSlotted/complexSlotted.js | 3 + .../x/container/container.html | 11 + .../Node-properties/x/container/container.js | 3 + .../x/dynamicText/dynamicText.html | 3 + .../x/dynamicText/dynamicText.js | 7 + .../Node-properties/x/empty/empty.html | 1 + .../Node-properties/x/empty/empty.js | 3 + .../x/hasNoSlot/hasNoSlot.html | 5 + .../Node-properties/x/hasNoSlot/hasNoSlot.js | 3 + .../Node-properties/x/hasSlot/hasSlot.html | 5 + .../Node-properties/x/hasSlot/hasSlot.js | 3 + .../x/manualNodes/manualNodes.html | 4 + .../x/manualNodes/manualNodes.js | 3 + .../Node-properties/x/parent/parent.html | 11 + .../Node-properties/x/parent/parent.js | 3 + .../x/simpleParent/simpleParent.html | 4 + .../x/simpleParent/simpleParent.js | 3 + .../Node-properties/x/slotted/slotted.html | 7 + .../Node-properties/x/slotted/slotted.js | 3 + .../x/slottedParent/slottedParent.html | 8 + .../x/slottedParent/slottedParent.js | 3 + .../Node-properties/x/test/test.html | 6 + .../shadow-dom/Node-properties/x/test/test.js | 3 + .../Node-properties/x/text/text.html | 3 + .../shadow-dom/Node-properties/x/text/text.js | 3 + .../textSlottedParent/textSlottedParent.html | 7 + .../x/textSlottedParent/textSlottedParent.js | 3 + .../x/unslottedParent/unslottedParent.html | 5 + .../x/unslottedParent/unslottedParent.js | 3 + .../x/withLwcDomManual/withLwcDomManual.css | 3 + .../x/withLwcDomManual/withLwcDomManual.html | 3 + .../x/withLwcDomManual/withLwcDomManual.js | 3 + .../withLwcDomManualNested.html | 3 + .../withLwcDomManualNested.js | 3 + .../withoutLwcDomManual.html | 5 + .../withoutLwcDomManual.js | 3 + .../ParentNode.childElementCount.spec.js | 30 + .../ParentNode.children.spec.js | 36 + .../ParentNode.firstElementChild.spec.js | 30 + .../ParentNode.lastElementChild.spec.js | 30 + .../x/container/container.html | 5 + .../x/container/container.js | 3 + .../ParentNode-properties/x/empty/empty.html | 1 + .../ParentNode-properties/x/empty/empty.js | 3 + .../x/slotted/slotted.html | 7 + .../x/slotted/slotted.js | 3 + .../ParentNode-properties/x/test/test.html | 6 + .../ParentNode-properties/x/test/test.js | 3 + .../ParentNode-properties/x/text/text.html | 3 + .../ParentNode-properties/x/text/text.js | 3 + .../ShadowRoot.delegatesFocus.spec.js | 24 + .../ShadowRoot.host.spec.js | 12 + .../ShadowRoot.innerHTML.spec.js | 24 + .../ShadowRoot.mode.spec.js | 25 + .../ShadowRoot-properties/ShadowRoot.spec.js | 93 ++ .../x/container/container.html | 7 + .../x/container/container.js | 3 + .../ShadowRoot-properties/x/test/test.html | 7 + .../ShadowRoot-properties/x/test/test.js | 3 + .../ShadowRoot.dispatchEvent/index.spec.js | 38 + .../x/container/container.html | 3 + .../x/container/container.js | 30 + .../ShadowRoot.dispatchEvent/x/test/test.html | 1 + .../ShadowRoot.dispatchEvent/x/test/test.js | 29 + .../index.spec.js | 179 ++++ .../x/child/child.css | 6 + .../x/child/child.html | 3 + .../x/child/child.js | 3 + .../x/container/container.css | 32 + .../x/container/container.html | 10 + .../x/container/container.js | 3 + .../x/grandparent/grandparent.css | 6 + .../x/grandparent/grandparent.html | 5 + .../x/grandparent/grandparent.js | 3 + .../x/parent/parent.css | 6 + .../x/parent/parent.html | 5 + .../x/parent/parent.js | 3 + .../x/slottable/slottable.css | 23 + .../x/slottable/slottable.html | 8 + .../x/slottable/slottable.js | 3 + .../x/slotted/slotted.css | 7 + .../x/slotted/slotted.html | 3 + .../x/slotted/slotted.js | 3 + .../shadow-dom/dir-pseudoclass/index.spec.js | 109 +++ .../dir-pseudoclass/x/component/component.css | 39 + .../x/component/component.html | 9 + .../dir-pseudoclass/x/component/component.js | 3 + .../dir-pseudoclass/x/light/light.css | 7 + .../dir-pseudoclass/x/light/light.html | 3 + .../dir-pseudoclass/x/light/light.js | 5 + .../x/shadowContainer/shadowContainer.html | 3 + .../x/shadowContainer/shadowContainer.js | 3 + .../event-post-dispatch.spec.js | 88 ++ .../event-in-shadow-tree/propagation.spec.js | 630 +++++++++++++ .../event-in-shadow-tree/x/button/button.html | 5 + .../event-in-shadow-tree/x/button/button.js | 3 + .../x/buttonGroup/buttonGroup.html | 7 + .../x/buttonGroup/buttonGroup.js | 3 + .../buttonGroupInternal.html | 3 + .../buttonGroupInternal.js | 3 + .../x/container/container.html | 8 + .../x/container/container.js | 24 + .../ignoring-slotted/issue-1090.spec.js | 13 + .../ignoring-slotted/x/child/child.html | 3 + .../ignoring-slotted/x/child/child.js | 3 + .../ignoring-slotted/x/parent/parent.html | 5 + .../ignoring-slotted/x/parent/parent.js | 3 + .../ignoring-slotted/x/slotted/slotted.html | 3 + .../ignoring-slotted/x/slotted/slotted.js | 3 + .../@x/component/component.css | 3 + .../@x/component/component.html | 3 + .../@x/component/component.js | 3 + .../invalid-char-in-namespace/index.spec.js | 31 + .../x#y/component/component.css | 3 + .../x#y/component/component.html | 3 + .../x#y/component/component.js | 3 + .../multiple-templates/index.spec.js | 105 +++ .../multiple-templates/x/multi/a.css | 3 + .../multiple-templates/x/multi/a.html | 3 + .../multiple-templates/x/multi/b.css | 3 + .../multiple-templates/x/multi/b.html | 3 + .../multiple-templates/x/multi/multi.js | 16 + .../x/multiNoStyleInFirst/a.html | 4 + .../x/multiNoStyleInFirst/b.css | 11 + .../x/multiNoStyleInFirst/b.html | 4 + .../multiNoStyleInFirst.js | 20 + .../part-and-exportparts/index.spec.js | 18 + .../x/anotherChild/anotherChild.html | 2 + .../x/anotherChild/anotherChild.js | 3 + .../part-and-exportparts/x/child/child.html | 3 + .../part-and-exportparts/x/child/child.js | 3 + .../x/grandparent/grandparent.css | 11 + .../x/grandparent/grandparent.html | 3 + .../x/grandparent/grandparent.js | 3 + .../part-and-exportparts/x/parent/parent.html | 5 + .../part-and-exportparts/x/parent/parent.js | 3 + .../test/shadow-dom/stylesheet/index.spec.js | 54 ++ .../shadow-dom/stylesheet/x/child/child.html | 3 + .../shadow-dom/stylesheet/x/child/child.js | 3 + .../shadow-dom/stylesheet/x/host/host.css | 8 + .../shadow-dom/stylesheet/x/host/host.html | 3 + .../test/shadow-dom/stylesheet/x/host/host.js | 3 + .../stylesheet/x/multiTemplates/a.css | 4 + .../stylesheet/x/multiTemplates/a.html | 3 + .../stylesheet/x/multiTemplates/b.css | 4 + .../stylesheet/x/multiTemplates/b.html | 3 + .../x/multiTemplates/multiTemplates.js | 17 + .../shadow-dom/stylesheet/x/parent/parent.css | 3 + .../stylesheet/x/parent/parent.html | 5 + .../shadow-dom/stylesheet/x/parent/parent.js | 3 + .../test/signal/protocol/index.spec.js | 248 +++++ .../test/signal/protocol/x/child/child.html | 3 + .../test/signal/protocol/x/child/child.js | 10 + .../protocol/x/container/container.html | 3 + .../signal/protocol/x/container/container.js | 9 + .../duplicateSignalOnTemplate.html | 5 + .../duplicateSignalOnTemplate.js | 26 + .../test/signal/protocol/x/list/list.html | 5 + .../test/signal/protocol/x/list/list.js | 6 + .../protocol/x/nonReactive/nonReactive.html | 7 + .../protocol/x/nonReactive/nonReactive.js | 22 + .../test/signal/protocol/x/parent/parent.html | 3 + .../test/signal/protocol/x/parent/parent.js | 28 + .../signal/protocol/x/reactive/reactive.html | 8 + .../signal/protocol/x/reactive/reactive.js | 32 + .../test/signal/protocol/x/signal/signal.js | 45 + .../test/signal/protocol/x/throws/throws.html | 3 + .../test/signal/protocol/x/throws/throws.js | 23 + .../test/signal/reactivity/index.spec.js | 105 +++ .../explicitSubscribe/explicitSubscribe.html | 3 + .../x/explicitSubscribe/explicitSubscribe.js | 21 + .../test/signal/reactivity/x/list/list.html | 5 + .../test/signal/reactivity/x/list/list.js | 5 + .../reactivity/x/nonReactive/nonReactive.html | 3 + .../reactivity/x/nonReactive/nonReactive.js | 15 + .../reactivity/x/reactive/reactive.html | 3 + .../signal/reactivity/x/reactive/reactive.js | 6 + .../reactiveSubscriber.html | 4 + .../reactiveSubscriber/reactiveSubscriber.js | 6 + .../test/signal/reactivity/x/signal/signal.js | 39 + .../test/spread/index.spec.js | 117 +++ .../test/spread/x/child/child.html | 3 + .../test/spread/x/child/child.js | 5 + .../test/spread/x/test/test.html | 9 + .../test/spread/x/test/test.js | 27 + .../test/static-content/index.spec.js | 865 ++++++++++++++++++ .../static-content/x/attribute/attribute.html | 31 + .../static-content/x/attribute/attribute.js | 16 + .../static-content/x/comments/comments.html | 8 + .../static-content/x/comments/comments.js | 22 + .../static-content/x/component/component.css | 3 + .../static-content/x/component/component.html | 3 + .../static-content/x/component/component.js | 3 + .../static-content/x/container/container.html | 22 + .../static-content/x/container/container.js | 5 + .../x/deepAttribute/deepAttribute.html | 49 + .../x/deepAttribute/deepAttribute.js | 8 + .../x/deepListener/deepListener.html | 29 + .../x/deepListener/deepListener.js | 33 + .../test/static-content/x/escape/escape.html | 13 + .../test/static-content/x/escape/escape.js | 3 + .../x/iframeOnload/iframeOnload.html | 4 + .../x/iframeOnload/iframeOnload.js | 9 + .../listenerStaticWithUpdates.html | 4 + .../listenerStaticWithUpdates.js | 18 + .../static-content/x/multipleStyles/a.css | 3 + .../static-content/x/multipleStyles/a.html | 3 + .../static-content/x/multipleStyles/b.html | 3 + .../x/multipleStyles/b.scoped.css | 3 + .../x/multipleStyles/multipleStyles.js | 27 + .../test/static-content/x/native/native.html | 3 + .../test/static-content/x/native/native.js | 5 + .../onlyEventListener/onlyEventListener.html | 7 + .../x/onlyEventListener/onlyEventListener.js | 14 + .../onlyEventListenerChild.html | 9 + .../onlyEventListenerChild.js | 14 + .../onlyEventListenerGrandchild.html | 11 + .../onlyEventListenerGrandchild.js | 14 + .../x/preserveComments/preserveComments.html | 8 + .../x/preserveComments/preserveComments.js | 22 + .../staticUnsafeTopLevel.html | 30 + .../staticUnsafeTopLevel.js | 5 + .../test/static-content/x/svgNs/svgNs.html | 15 + .../test/static-content/x/svgNs/svgNs.js | 3 + .../static-content/x/svgPath/svgPath.html | 6 + .../test/static-content/x/svgPath/svgPath.js | 3 + .../x/svgPathInDiv/svgPathInDiv.html | 8 + .../x/svgPathInDiv/svgPathInDiv.js | 3 + .../x/svgPathInG/svgPathInG.html | 8 + .../static-content/x/svgPathInG/svgPathInG.js | 3 + .../test/static-content/x/table/table.html | 11 + .../test/static-content/x/table/table.js | 13 + .../tableWithExpressions.html | 11 + .../tableWithExpressions.js | 24 + .../test/static-content/x/text/text.html | 9 + .../test/static-content/x/text/text.js | 7 + .../textWithPreserveComments.html | 19 + .../textWithPreserveComments.js | 6 + .../textWithoutPreserveComments.html | 19 + .../textWithoutPreserveComments.js | 6 + .../static-content/x/withKey/withKey.html | 11 + .../test/static-content/x/withKey/withKey.js | 5 + .../test/swapping/components/base/a/a.html | 3 + .../test/swapping/components/base/a/a.js | 3 + .../test/swapping/components/base/b/b.html | 3 + .../test/swapping/components/base/b/b.js | 3 + .../test/swapping/components/base/c/c.html | 3 + .../test/swapping/components/base/c/c.js | 3 + .../components/base/container/container.html | 3 + .../components/base/container/container.js | 10 + .../test/swapping/components/base/d/d.html | 3 + .../test/swapping/components/base/d/d.js | 3 + .../test/swapping/components/base/e/e.html | 3 + .../test/swapping/components/base/e/e.js | 3 + .../components/base/libraryx/libraryx.js | 5 + .../components/base/libraryz/libraryz.js | 5 + .../test/swapping/components/index.spec.js | 62 ++ .../test/swapping/styles/index.spec.js | 321 +++++++ .../styles/light-global/simple/inline.css | 3 + .../styles/light-global/simple/none.css | 3 + .../styles/light-global/simple/simple.css | 3 + .../styles/light-global/simple/simple.html | 3 + .../styles/light-global/simple/simple.js | 11 + .../light-global/staleProp/staleProp.css | 3 + .../light-global/staleProp/staleProp.html | 3 + .../light-global/staleProp/staleProp.js | 11 + .../light-global/staleProp/stylesV2.css | 3 + .../light-global/staleProp/stylesV3.css | 3 + .../usesStaticStylesheets/asStatic.css | 3 + .../usesStaticStylesheets/asStaticV2.css | 3 + .../usesStaticStylesheets.css | 3 + .../usesStaticStylesheets.html | 3 + .../usesStaticStylesheets.js | 11 + .../styles/light/simple/inline.scoped.css | 3 + .../styles/light/simple/none.scoped.css | 3 + .../swapping/styles/light/simple/simple.html | 3 + .../swapping/styles/light/simple/simple.js | 11 + .../styles/light/simple/simple.scoped.css | 3 + .../styles/light/staleProp/staleProp.html | 3 + .../styles/light/staleProp/staleProp.js | 11 + .../light/staleProp/staleProp.scoped.css | 3 + .../light/staleProp/stylesV2.scoped.css | 3 + .../light/staleProp/stylesV3.scoped.css | 3 + .../usesStaticStylesheets/asStatic.scoped.css | 3 + .../asStaticV2.scoped.css | 3 + .../usesStaticStylesheets.html | 3 + .../usesStaticStylesheets.js | 11 + .../usesStaticStylesheets.scoped.css | 3 + .../identicalStylesheets.css | 3 + .../identicalStylesheets.html | 3 + .../identicalStylesheets.js | 14 + .../shadow/identicalStylesheets/newStyle.css | 3 + .../identicalStylesheets/newTemplate.html | 3 + .../shadow/identicalStylesheets/style.css | 3 + .../identicalStylesheetsContainer.html | 3 + .../identicalStylesheetsContainer.js | 3 + .../swapping/styles/shadow/simple/inline.css | 3 + .../swapping/styles/shadow/simple/none.css | 3 + .../swapping/styles/shadow/simple/simple.css | 3 + .../swapping/styles/shadow/simple/simple.html | 3 + .../swapping/styles/shadow/simple/simple.js | 10 + .../styles/shadow/staleProp/staleProp.css | 3 + .../styles/shadow/staleProp/staleProp.html | 3 + .../styles/shadow/staleProp/staleProp.js | 10 + .../styles/shadow/staleProp/stylesV2.css | 3 + .../styles/shadow/staleProp/stylesV3.css | 3 + .../shadow/usesStaticStylesheets/asStatic.css | 3 + .../usesStaticStylesheets/asStaticV2.css | 3 + .../usesStaticStylesheets.css | 3 + .../usesStaticStylesheets.html | 3 + .../usesStaticStylesheets.js | 10 + .../swapping/styles/x/library/library.css | 3 + .../styles/x/libraryUserA/libraryUserA.css | 5 + .../styles/x/libraryUserA/libraryUserA.html | 3 + .../styles/x/libraryUserA/libraryUserA.js | 8 + .../styles/x/libraryUserA/styleV2.css | 5 + .../styles/x/libraryUserB/libraryUserB.css | 5 + .../styles/x/libraryUserB/libraryUserB.html | 3 + .../styles/x/libraryUserB/libraryUserB.js | 8 + .../styles/x/libraryUserB/styleV2.css | 5 + .../swapping/styles/x/libraryV2/libraryV2.css | 3 + .../templates/base/advanced/advanced.html | 3 + .../templates/base/advanced/advanced.js | 9 + .../templates/base/simple/simple.html | 3 + .../swapping/templates/base/simple/simple.js | 6 + .../swapping/templates/base/views/first.html | 3 + .../swapping/templates/base/views/second.html | 3 + .../swapping/templates/base/views/views.js | 4 + .../test/swapping/templates/index.spec.js | 48 + .../active-element/index.spec.js | 32 + .../active-element/x/source/source.html | 3 + .../active-element/x/source/source.js | 3 + .../active-element/x/target/target.html | 2 + .../active-element/x/target/target.js | 3 + .../add-event-listener/index.spec.js | 202 ++++ .../add-event-listener/x/test/test.html | 1 + .../add-event-listener/x/test/test.js | 3 + .../disable-synthetic-shadow/index.spec.js | 32 + .../x/component/component.js | 3 + .../dom-manual-sharing-nodes/index.spec.js | 60 ++ .../x/styled/styled.css | 3 + .../x/styled/styled.html | 3 + .../x/styled/styled.js | 19 + .../x/unstyled/unstyled.html | 3 + .../x/unstyled/unstyled.js | 19 + .../element-api/element-api.spec.js | 416 +++++++++ .../element-api/x/container/container.html | 7 + .../element-api/x/container/container.js | 16 + .../parentSpecialized/parentSpecialized.html | 3 + .../x/parentSpecialized/parentSpecialized.js | 10 + .../x/slotContainer/slotContainer.html | 6 + .../x/slotContainer/slotContainer.js | 3 + .../element-api/x/withSlot/withSlot.html | 4 + .../element-api/x/withSlot/withSlot.js | 3 + .../global-styles/index.spec.js | 17 + .../global-styles/x/component/component.css | 4 + .../global-styles/x/component/component.html | 3 + .../global-styles/x/component/component.js | 3 + .../host-pseudo/index.spec.js | 37 + .../host-pseudo/x/invalid/invalid.css | 4 + .../host-pseudo/x/invalid/invalid.html | 5 + .../host-pseudo/x/invalid/invalid.js | 2 + .../host-pseudo/x/invalid/invalid.scoped.css | 4 + .../host-pseudo/x/valid/valid.css | 4 + .../host-pseudo/x/valid/valid.html | 5 + .../host-pseudo/x/valid/valid.js | 2 + .../host-pseudo/x/valid/valid.scoped.css | 4 + .../inner-outer-text/inner-outer-text.spec.js | 174 ++++ .../x/container/container.css | 37 + .../x/container/container.html | 128 +++ .../inner-outer-text/x/container/container.js | 3 + .../x/grandChild/grandChild.html | 3 + .../x/grandChild/grandChild.js | 3 + .../inner-outer-text/x/slotable/slotable.html | 5 + .../inner-outer-text/x/slotable/slotable.js | 3 + .../keyframes-vendor-prefix/index.spec.js | 14 + .../keyframes-vendor-prefix/x/a/a.css | 14 + .../keyframes-vendor-prefix/x/a/a.html | 3 + .../keyframes-vendor-prefix/x/a/a.js | 3 + .../synthetic-shadow/keyframes/index.spec.js | 24 + .../test/synthetic-shadow/keyframes/x/a/a.css | 12 + .../synthetic-shadow/keyframes/x/a/a.html | 3 + .../test/synthetic-shadow/keyframes/x/a/a.js | 3 + .../test/synthetic-shadow/keyframes/x/b/b.css | 3 + .../synthetic-shadow/keyframes/x/b/b.html | 3 + .../test/synthetic-shadow/keyframes/x/b/b.js | 3 + .../synthetic-shadow/scoped-id/aria.spec.js | 59 ++ .../synthetic-shadow/scoped-id/href.spec.js | 128 +++ .../scoped-id/multiple-idrefs.spec.js | 43 + .../synthetic-shadow/scoped-id/svg.spec.js | 23 + .../x/ariaBooleanTrue/ariaBooleanTrue.html | 55 ++ .../x/ariaBooleanTrue/ariaBooleanTrue.js | 3 + .../scoped-id/x/ariaDynamic/ariaDynamic.html | 55 ++ .../scoped-id/x/ariaDynamic/ariaDynamic.js | 7 + .../x/ariaEmptyString/ariaEmptyString.html | 55 ++ .../x/ariaEmptyString/ariaEmptyString.js | 3 + .../scoped-id/x/ariaStatic/ariaStatic.html | 55 ++ .../scoped-id/x/ariaStatic/ariaStatic.js | 3 + .../scoped-id/x/child/child.html | 3 + .../scoped-id/x/child/child.js | 3 + .../x/hrefBooleanTrue/hrefBooleanTrue.html | 11 + .../x/hrefBooleanTrue/hrefBooleanTrue.js | 3 + .../hrefBooleanTrueNoId.html | 13 + .../hrefBooleanTrueNoId.js | 3 + .../x/hrefDangling/hrefDangling.html | 7 + .../scoped-id/x/hrefDangling/hrefDangling.js | 3 + .../scoped-id/x/hrefDynamic/hrefDynamic.html | 17 + .../scoped-id/x/hrefDynamic/hrefDynamic.js | 16 + .../hrefDynamicEmptyString.html | 13 + .../hrefDynamicEmptyString.js | 7 + .../x/hrefDynamicNull/hrefDynamicNull.html | 13 + .../x/hrefDynamicNull/hrefDynamicNull.js | 7 + .../hrefDynamicUndefined.html | 13 + .../hrefDynamicUndefined.js | 7 + .../scoped-id/x/hrefStatic/hrefStatic.html | 17 + .../scoped-id/x/hrefStatic/hrefStatic.js | 3 + .../x/multipleIdrefs/multipleIdrefs.html | 7 + .../x/multipleIdrefs/multipleIdrefs.js | 7 + .../scoped-id/x/parent/parent.html | 5 + .../scoped-id/x/parent/parent.js | 9 + .../synthetic-shadow/scoped-id/x/svg/svg.html | 10 + .../synthetic-shadow/scoped-id/x/svg/svg.js | 3 + .../shadow-root-instanceof/index.spec.js | 25 + .../x/component/component.js | 3 + .../shadow-token/index.spec.js | 85 ++ .../synthetic-shadow/style-svg/index.spec.js | 55 ++ .../style-svg/x/staticSvg/staticSvg.css | 7 + .../style-svg/x/staticSvg/staticSvg.html | 8 + .../style-svg/x/staticSvg/staticSvg.js | 3 + .../x/staticSvgInDiv/staticSvgInDiv.css | 7 + .../x/staticSvgInDiv/staticSvgInDiv.html | 10 + .../x/staticSvgInDiv/staticSvgInDiv.js | 3 + .../staticSvgInDivScoped.html | 10 + .../staticSvgInDivScoped.js | 3 + .../staticSvgInDivScoped.scoped.css | 7 + .../x/staticSvgScoped/staticSvgScoped.html | 8 + .../x/staticSvgScoped/staticSvgScoped.js | 3 + .../staticSvgScoped.scoped.css | 7 + .../style-svg/x/staticText/staticText.css | 7 + .../style-svg/x/staticText/staticText.html | 8 + .../style-svg/x/staticText/staticText.js | 5 + .../x/staticTextScoped/staticTextScoped.html | 8 + .../x/staticTextScoped/staticTextScoped.js | 5 + .../staticTextScoped.scoped.css | 7 + .../template-expressions/errors/index.spec.js | 16 + .../throwDuringCallChild.html | 3 + .../throwDuringCallChild.js | 7 + .../throwDuringCallParent.html | 3 + .../throwDuringCallParent.js | 8 + .../undefinedMemberExpressionObjChild.html | 3 + .../undefinedMemberExpressionObjChild.js | 3 + .../undefinedMemberExpressionObjParent.html | 3 + .../undefinedMemberExpressionObjParent.js | 8 + .../smoke-test/index.spec.js | 10 + .../smoke-test/x/test/test.html | 3 + .../smoke-test/x/test/test.js | 7 + .../template/attribute-aria/index.spec.js | 83 ++ .../attribute-aria/x/child/child.html | 1 + .../template/attribute-aria/x/child/child.js | 30 + .../attribute-aria/x/parent/parent.html | 112 +++ .../attribute-aria/x/parent/parent.js | 3 + .../attribute-boolean-global/index.spec.js | 53 ++ .../x/child/child.html | 3 + .../attribute-boolean-global/x/child/child.js | 3 + .../x/computed/computed.html | 3 + .../x/computed/computed.js | 10 + .../attribute-boolean-global/x/test/test.html | 19 + .../attribute-boolean-global/x/test/test.js | 6 + .../index.spec.js | 12 + .../x/child/child.html | 3 + .../x/child/child.js | 5 + .../x/test/test.html | 3 + .../x/test/test.js | 3 + .../attribute-class/object-values.spec.js | 157 ++++ .../attribute-class/string-values.spec.js | 120 +++ .../attribute-class/x/dynamic/dynamic.html | 3 + .../attribute-class/x/dynamic/dynamic.js | 5 + .../attribute-class/x/reactive/reactive.html | 3 + .../attribute-class/x/reactive/reactive.js | 10 + .../attribute-class/x/static/static.html | 3 + .../attribute-class/x/static/static.js | 3 + .../attribute-namespace/index.spec.js | 17 + .../x/component/component.html | 6 + .../x/component/component.js | 6 + .../attribute-style-important/index.spec.js | 16 + .../x/component/component.css | 4 + .../x/component/component.html | 3 + .../x/component/component.js | 3 + .../attribute-style/invalid/index.spec.js | 29 + .../invalid/x/dynamic/dynamic.html | 5 + .../invalid/x/dynamic/dynamic.js | 11 + .../staticallyOptimized.html | 11 + .../staticallyOptimized.js | 11 + .../attribute-style/valid/index.spec.js | 68 ++ .../valid/x/dynamic/dynamic.html | 3 + .../valid/x/dynamic/dynamic.js | 5 + .../valid/x/static/static.html | 3 + .../attribute-style/valid/x/static/static.js | 3 + .../attribute-tab-index/index.spec.js | 33 + .../attribute-tab-index/x/test/test.html | 3 + .../attribute-tab-index/x/test/test.js | 5 + .../test/template/attributes/index.spec.js | 46 + .../test/template/attributes/x/test/test.html | 3 + .../test/template/attributes/x/test/test.js | 5 + .../ce-with-camel-case-property.js | 6 + .../custom-elements/ce-with-children.js | 14 + .../custom-elements/ce-with-event.js | 12 + .../custom-elements/ce-with-property.js | 25 + .../custom-elements/ce-without-children.js | 6 + .../template/directive-external/index.spec.js | 231 +++++ .../withCamelCaseProperty.html | 17 + .../withCamelCaseProperty.js | 5 + .../x/withChildren/withChildren.html | 7 + .../x/withChildren/withChildren.js | 3 + .../withDeclarativeEvent.html | 4 + .../withDeclarativeEvent.js | 9 + .../withDelayedUpgrade.html | 3 + .../withDelayedUpgrade/withDelayedUpgrade.js | 26 + .../withDifferentViews.html | 5 + .../withDifferentViews/withDifferentViews.js | 6 + .../withImperativeEvent.html | 4 + .../withImperativeEvent.js | 15 + .../x/withProperty/withProperty.html | 3 + .../x/withProperty/withProperty.js | 11 + .../withUnregisteredWC.html | 5 + .../withUnregisteredWC/withUnregisteredWC.js | 5 + .../x/withoutChildren/withoutChildren.html | 5 + .../x/withoutChildren/withoutChildren.js | 3 + .../directive-for-each/arrayMutation.spec.js | 53 ++ .../template/directive-for-each/index.spec.js | 158 ++++ .../x/arrayMutation/arrayMutation.html | 5 + .../x/arrayMutation/arrayMutation.js | 32 + .../arrayNullPrototype.html | 5 + .../arrayNullPrototype/arrayNullPrototype.js | 10 + .../directive-for-each/x/custom/custom.js | 3 + .../directive-for-each/x/test/test.html | 10 + .../directive-for-each/x/test/test.js | 5 + .../testCustomElement/testCustomElement.html | 7 + .../x/testCustomElement/testCustomElement.js | 5 + .../x/testStatic/testStatic.html | 7 + .../x/testStatic/testStatic.js | 5 + .../directive-if-elseif-else/index.spec.js | 365 ++++++++ .../childWithNamedSlot.html | 4 + .../childWithNamedSlot/childWithNamedSlot.js | 3 + .../x/childWithSlot/childWithSlot.html | 3 + .../x/childWithSlot/childWithSlot.js | 3 + .../x/forEach/forEach.html | 11 + .../x/forEach/forEach.js | 34 + .../x/nested/nested.html | 12 + .../x/nested/nested.js | 6 + .../parentWithNamedSlot.html | 16 + .../parentWithNamedSlot.js | 7 + .../x/parentWithSlot/parentWithSlot.html | 8 + .../x/parentWithSlot/parentWithSlot.js | 5 + .../x/slottedForEach/slottedForEach.html | 15 + .../x/slottedForEach/slottedForEach.js | 35 + .../directive-if-elseif-else/x/test/test.html | 11 + .../directive-if-elseif-else/x/test/test.js | 6 + .../test/template/directive-if/index.spec.js | 219 +++++ .../template/directive-if/x/child/child.html | 7 + .../template/directive-if/x/child/child.js | 6 + .../x/multipleSlot/multipleSlot.html | 9 + .../x/multipleSlot/multipleSlot.js | 7 + .../multipleSlotLevel1.html | 7 + .../multipleSlotLevel1/multipleSlotLevel1.js | 10 + .../multipleSlotLevel2.html | 3 + .../multipleSlotLevel2/multipleSlotLevel2.js | 3 + .../nestedRenderConditional.html | 7 + .../nestedRenderConditional.js | 11 + .../directive-if/x/slotted/slotted.html | 5 + .../directive-if/x/slotted/slotted.js | 3 + .../template/directive-if/x/test/test.html | 8 + .../test/template/directive-if/x/test/test.js | 5 + .../directive-lwc-dom-manual/index.spec.js | 161 ++++ .../svgWithLwcDomManual.css | 3 + .../svgWithLwcDomManual.html | 3 + .../svgWithLwcDomManual.js | 3 + .../x/withLwcDomManual/withLwcDomManual.css | 3 + .../x/withLwcDomManual/withLwcDomManual.html | 3 + .../x/withLwcDomManual/withLwcDomManual.js | 3 + .../withoutLwcDomManual.html | 5 + .../withoutLwcDomManual.js | 3 + .../directive-lwc-inner-html/index.spec.js | 83 ++ .../x/innerHtml/innerHtml.css | 3 + .../x/innerHtml/innerHtml.html | 3 + .../x/innerHtml/innerHtml.js | 5 + .../directive-lwc-render-mode/index.spec.js | 54 ++ .../x/light/light.html | 3 + .../x/light/light.js | 5 + .../x/shadow/shadow.html | 3 + .../x/shadow/shadow.js | 3 + .../test/template/directive-on/index.spec.js | 32 + .../template/directive-on/x/click/click.html | 3 + .../template/directive-on/x/click/click.js | 9 + .../template/directive-on/x/test/test.html | 3 + .../test/template/directive-on/x/test/test.js | 9 + .../template/escape-attr-name/index.spec.js | 66 ++ .../x/booleanValue/booleanValue.html | 3 + .../x/booleanValue/booleanValue.js | 3 + .../x/stringValue/stringValue.html | 3 + .../x/stringValue/stringValue.js | 3 + .../template/escape-tag-name/index.spec.js | 47 + .../x/component/component.html | 3 + .../escape-tag-name/x/component/component.js | 3 + .../test/template/html-comments/index.spec.js | 81 ++ .../template/html-comments/x/child/child.html | 3 + .../template/html-comments/x/child/child.js | 3 + .../x/confusedWithText/confusedWithText.html | 8 + .../x/confusedWithText/confusedWithText.js | 5 + .../template/html-comments/x/test/test.html | 19 + .../template/html-comments/x/test/test.js | 19 + .../specialCharacter/specialCharacter.html | 3 + .../specialCharacter/specialCharacter.js | 5 + .../underscoreChild/underscoreChild.html | 3 + .../attrs/underscoreChild/underscoreChild.js | 5 + .../attrs/uppercaseChild/uppercaseChild.html | 3 + .../attrs/uppercaseChild/uppercaseChild.js | 5 + .../uppercaseParent/uppercaseParent.html | 3 + .../attrs/uppercaseParent/uppercaseParent.js | 3 + .../test/template/properties/index.spec.js | 96 ++ .../live/inputChecked/inputChecked.html | 3 + .../live/inputChecked/inputChecked.js | 5 + .../live/inputValue/inputValue.html | 3 + .../properties/live/inputValue/inputValue.js | 5 + .../misc/radioButton/radioButton.html | 4 + .../misc/radioButton/radioButton.js | 3 + .../test/upgradable-element/index.spec.js | 55 ++ .../upgradable-element/x/child/child.html | 3 + .../test/upgradable-element/x/child/child.js | 5 + .../x/dupChild/dupChild.html | 3 + .../upgradable-element/x/dupChild/dupChild.js | 5 + .../upgradable-element/x/interop/interop.html | 3 + .../upgradable-element/x/interop/interop.js | 3 + .../x/interopParent/interopParent.html | 3 + .../x/interopParent/interopParent.js | 3 + .../test/wire/legacy-adapters/index.spec.js | 187 ++++ .../dynamicWiredProps/dynamicWiredProps.html | 1 + .../x/dynamicWiredProps/dynamicWiredProps.js | 43 + .../x/echoWireAdapter/echoWireAdapter.js | 9 + .../x/sameAdapterDifferentConfig/constants.js | 2 + .../sameAdapterDifferentConfig.html | 1 + .../sameAdapterDifferentConfig.js | 23 + .../x/sameConfigCase/sameConfigCase.html | 1 + .../x/sameConfigCase/sameConfigCase.js | 25 + .../x/staticWiredProps/staticWiredProps.html | 1 + .../x/staticWiredProps/staticWiredProps.js | 45 + .../test/wire/property-trap/index.spec.js | 174 ++++ .../x/echoAdapter/echoAdapter.js | 29 + .../echoAdapterConsumer.html | 3 + .../echoAdapterConsumer.js | 48 + .../test/wire/reactive-params.spec.js | 19 + .../wirecontextevent-legacy/index.spec.js | 18 + .../wireContextAdapter/wireContextAdapter.js | 20 + .../wireContextConsumer.html | 3 + .../wireContextConsumer.js | 6 + .../wireContextProvider.html | 5 + .../wireContextProvider.js | 9 + .../test/wire/wiring/index.spec.js | 392 ++++++++ .../x/adapterConsumer/adapterConsumer.html | 5 + .../x/adapterConsumer/adapterConsumer.js | 31 + .../test/wire/wiring/x/base/base.js | 0 .../x/broadcastAdapter/broadcastAdapter.js | 26 + .../broadcastConsumer/broadcastConsumer.html | 3 + .../x/broadcastConsumer/broadcastConsumer.js | 62 ++ .../contextAwareAdapter.js | 35 + .../contextAwareConsumer.html | 1 + .../contextAwareConsumer.js | 11 + .../wire/wiring/x/echoAdapter/echoAdapter.js | 34 + .../x/inheritedMethods/inheritedMethods.html | 2 + .../x/inheritedMethods/inheritedMethods.js | 12 + .../cascadeWiredProps/cascadeWiredProps.html | 1 + .../x/cascadeWiredProps/cascadeWiredProps.js | 22 + .../wire/x/echoWireAdapter/echoWireAdapter.js | 9 + yarn.lock | 7 + 3162 files changed, 57305 insertions(+), 25 deletions(-) rename packages/@lwc/integration-not-karma/configs/{base.mjs => base.js} (92%) rename packages/@lwc/integration-not-karma/configs/{hydration.mjs => hydration.js} (88%) rename packages/@lwc/integration-not-karma/configs/{integration.mjs => integration.js} (86%) rename packages/@lwc/integration-not-karma/configs/plugins/{serve-hydration.mjs => serve-hydration.js} (99%) rename packages/@lwc/integration-not-karma/configs/plugins/{serve-integration.mjs => serve-integration.js} (99%) rename packages/@lwc/integration-not-karma/helpers/{aria.mjs => aria.js} (100%) rename packages/@lwc/integration-not-karma/helpers/{console.mjs => console.js} (100%) rename packages/@lwc/integration-not-karma/helpers/{constants.mjs => constants.js} (93%) rename packages/@lwc/integration-not-karma/helpers/{hooks.mjs => hooks.js} (100%) rename packages/@lwc/integration-not-karma/helpers/matchers/{console.mjs => console.js} (100%) rename packages/@lwc/integration-not-karma/helpers/matchers/{errors.mjs => errors.js} (100%) rename packages/@lwc/integration-not-karma/helpers/matchers/{index.mjs => index.js} (52%) rename packages/@lwc/integration-not-karma/helpers/matchers/{jasmine.mjs => jasmine.js} (100%) rename packages/@lwc/integration-not-karma/helpers/{options.mjs => options.js} (100%) rename packages/@lwc/integration-not-karma/helpers/{setup.mjs => setup.js} (97%) rename packages/@lwc/integration-not-karma/helpers/{signals.mjs => signals.js} (100%) rename packages/@lwc/integration-not-karma/helpers/{utils.mjs => utils.js} (98%) create mode 100644 packages/@lwc/integration-not-karma/mocks/lwc.js delete mode 120000 packages/@lwc/integration-not-karma/test delete mode 120000 packages/@lwc/integration-not-karma/test-hydration create mode 100644 packages/@lwc/integration-not-karma/test-hydration/adjacent-text-and-comment-nodes/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/adjacent-text-and-comment-nodes/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/adjacent-text-and-comment-nodes/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/adjacent-text-nodes/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/adjacent-text-nodes/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/adjacent-text-nodes/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/class/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/class/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/class/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/expression/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/expression/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/expression/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/falsy-mismatch/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/falsy-mismatch/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/falsy-mismatch/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/falsy/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/falsy/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/falsy/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/connected-callback/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/connected-callback/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/connected-callback/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/x/foo/foo.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/x/foo/foo.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/render-method/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/render-method/x/main/a.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/render-method/x/main/b.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/render-method/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/rendered-callback/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/rendered-callback/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/rendered-callback/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/context/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/context/x/base/base.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/context/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/context/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/context/x/contextManager/contextManager.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/context/x/grandparent/grandparent.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/context/x/grandparent/grandparent.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/context/x/grandparentContext/grandparentContext.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/context/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/context/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/context/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/context/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/context/x/parentContext/parentContext.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/context/x/tooMuchContext/tooMuchContext.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/context/x/tooMuchContext/tooMuchContext.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/comments/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/comments/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/comments/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/dom-manual/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/dom-manual/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/dom-manual/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/for-each/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/for-each/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/for-each/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/if-false/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/if-false/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/if-false/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/if-true/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/if-true/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/if-true/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/iterator/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/iterator/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/iterator/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/lwc-inner-html/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/lwc-inner-html/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/lwc-inner-html/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/lwc-on/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/lwc-on/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/directives/lwc-on/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/errors/already-hydrated/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/errors/already-hydrated/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/errors/already-hydrated/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/events/dynamic/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/events/dynamic/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/events/dynamic/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/events/static/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/events/static/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/events/static/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/input/dynamic/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/input/dynamic/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/input/dynamic/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/input/static/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/input/static/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/input/static/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/connected-callback/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/connected-callback/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/connected-callback/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/x/foo/foo.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/x/foo/foo.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/render-method/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/render-method/x/main/a.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/render-method/x/main/b.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/render-method/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/rendered-callback/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/rendered-callback/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/rendered-callback/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/comments/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/comments/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/comments/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/for-each/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/for-each/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/for-each/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-false/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-false/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-false/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-true/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-true/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-true/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/iterator/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/iterator/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/iterator/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-inner-html/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-inner-html/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-inner-html/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/x/shadowChild/shadowChild.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/x/shadowChild/shadowChild.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/lightChild/lightChild.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/lightChild/lightChild.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/main/main.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/basic/basic.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/basic/basic.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/basic/basic.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/basic/basic.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/other/other.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/other/other.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/other/other.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/child/child.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/main/main.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/child/child.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/main/main.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/child/child.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/main/main.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/child/child.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/main/main.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/a.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/b.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/b.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/c.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/d.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/d.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/child/child.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/main/main.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/child/child.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/main/main.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/child/child.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/main/main.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/x/lightChild/lightChild.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/x/lightChild/lightChild.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/x/withSlots/withSlots.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/x/withSlots/withSlots.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/x/withSlots/withSlots.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/x/withSlots/withSlots.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/scoped/scoped.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/scoped/scoped.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/withSlots/withSlots.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/withSlots/withSlots.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/x/withSlots/withSlots.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/x/withSlots/withSlots.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-compatibility/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-compatibility/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-compatibility/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-expression/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-expression/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-expression/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-different/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-different/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-different/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-empty-in-ssr-null-string-in-client/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-empty-in-ssr-null-string-in-client/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-empty-in-ssr-null-string-in-client/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-null-string-in-ssr-empty-in-client/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-null-string-in-ssr-empty-in-client/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-null-string-in-ssr-empty-in-client/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same-different-order-does-not-throw/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same-different-order-does-not-throw/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same-different-order-does-not-throw/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-client-nonempty-on-server/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-client-nonempty-on-server/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-client-nonempty-on-server/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-server-nonempty-on-client/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-server-nonempty-on-client/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-server-nonempty-on-client/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-client/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-client/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-client/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-server/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-server/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-server/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-different-order/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-different-order/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-different-order/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-with-static-parts/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-with-static-parts/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-with-static-parts/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/scoped-styles-with-existing-class/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/scoped-styles-with-existing-class/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/scoped-styles-with-existing-class/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/scoped-styles-with-existing-class/x/main/main.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/comment-instead-of-text/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/comment-instead-of-text/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/comment-instead-of-text/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/different-lwc-inner-html/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/different-lwc-inner-html/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/different-lwc-inner-html/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/display-errors-attrs-class-style/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/display-errors-attrs-class-style/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/display-errors-attrs-class-style/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/client/client.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/client/client.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/server/server.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/server/server.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/element-instead-of-textNode/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/element-instead-of-textNode/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/element-instead-of-textNode/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/empty-nodes/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/empty-nodes/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/empty-nodes/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-comment/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-comment/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-comment/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-text/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-text/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-text/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/foreach/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/foreach/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/foreach/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/if-true/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/if-true/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/if-true/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/preserve-ssr-attr/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/preserve-ssr-attr/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/preserve-ssr-attr/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/sibling-issue/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/sibling-issue/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/sibling-issue/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/different-priority/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/different-priority/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/different-priority/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-client/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-client/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-client/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-server/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-server/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-server/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-different-order/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-different-order/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-different-order/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-priority/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-priority/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-priority/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-client-nonempty-on-server/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-client-nonempty-on-server/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-client-nonempty-on-server/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-server-nonempty-on-client/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-server-nonempty-on-client/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-server-nonempty-on-client/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/different-priority/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/different-priority/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/different-priority/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-client/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-client/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-client/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-server/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-server/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-server/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-different-order/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-different-order/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-different-order/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-priority/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-priority/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-priority/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-with-static-parts/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-with-static-parts/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-with-static-parts/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/with-newlines/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/with-newlines/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/with-newlines/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/text-instead-of-comment/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/text-instead-of-comment/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/text-instead-of-comment/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/textNode-instead-of-element/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/textNode-instead-of-element/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/textNode-instead-of-element/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/type-coercion-to-string/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/type-coercion-to-string/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/type-coercion-to-string/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/x/child/template.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/x/child/template.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/x/child/template.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/x/child/template.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/refs/component/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/refs/component/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/refs/component/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/refs/component/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/refs/element/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/refs/element/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/refs/element/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/simple/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/simple/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/simple/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/simple/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/simple/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/default/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/default/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/default/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/default/x/withSlots/withSlots.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/default/x/withSlots/withSlots.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/named/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/named/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/named/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/named/x/withSlots/withSlots.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/named/x/withSlots/withSlots.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/nested/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/withSlots/withSlots.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/withSlots/withSlots.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/no-content/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/no-content/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/no-content/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/no-content/x/withSlots/withSlots.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/slots/no-content/x/withSlots/withSlots.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/apply-style-to-host/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/apply-style-to-host/x/main/main.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/apply-style-to-host/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/apply-style-to-host/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/escaping/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/escaping/x/main/main.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/escaping/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/escaping/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/child/child.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/child/tmpl.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/child/tmpl.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/child/tmpl.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/child/tmpl.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-scoped-template/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-scoped-template/x/child/a.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-scoped-template/x/child/a.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-scoped-template/x/child/b.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-scoped-template/x/child/b.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-scoped-template/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-scoped-template/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-scoped-template/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-single-class/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-single-class/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-single-class/x/child/tmpl.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-single-class/x/child/tmpl.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-single-class/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-single-class/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/basic/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/basic/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/basic/x/child/styles.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/basic/x/child/template.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/basic/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/basic/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/scoped-vs-scoped-different-templates/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/scoped-vs-scoped-different-templates/x/child/a.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/scoped-vs-scoped-different-templates/x/child/a.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/scoped-vs-scoped-different-templates/x/child/b.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/scoped-vs-scoped-different-templates/x/child/b.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/scoped-vs-scoped-different-templates/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/scoped-vs-scoped-different-templates/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/scoped-vs-scoped-different-templates/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/scoped-vs-unscoped/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/scoped-vs-unscoped/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/scoped-vs-unscoped/x/child/plain.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/scoped-vs-unscoped/x/child/stylish.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/scoped-vs-unscoped/x/child/stylish.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/scoped-vs-unscoped/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/no-mismatches/scoped-vs-unscoped/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/not-style-children-elements/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/not-style-children-elements/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/not-style-children-elements/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/not-style-children-elements/x/main/main.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/not-style-children-elements/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/not-style-children-elements/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/scoped-styles-with-dynamic-class-children/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/scoped-styles-with-dynamic-class-children/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/scoped-styles-with-dynamic-class-children/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/scoped-styles-with-dynamic-class-children/x/main/main.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/scoped-styles-with-dynamic-class/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/scoped-styles-with-dynamic-class/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/scoped-styles-with-dynamic-class/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/scoped-styles-with-dynamic-class/x/main/main.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/works-with-multiple-templates/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/works-with-multiple-templates/x/main/a.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/works-with-multiple-templates/x/main/a.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/works-with-multiple-templates/x/main/b.css create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/works-with-multiple-templates/x/main/b.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/stylesheet/works-with-multiple-templates/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/svg/basic/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/svg/basic/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/svg/basic/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/svg/with-class/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/svg/with-class/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/svg/with-class/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/svg/with-empty-class/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/svg/with-empty-class/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/svg/with-empty-class/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/synthetic-shadow/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/synthetic-shadow/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/synthetic-shadow/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test-hydration/synthetic-shadow/x/main/main.html create mode 100644 packages/@lwc/integration-not-karma/test-hydration/synthetic-shadow/x/main/main.js create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/LightningElement.focus/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/LightningElement.focus/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/LightningElement.focus/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/LightningElement.focus/x/delegatesFocusFalse/delegatesFocusFalse.html create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/LightningElement.focus/x/delegatesFocusFalse/delegatesFocusFalse.js create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/LightningElement.focus/x/delegatesFocusTrue/delegatesFocusTrue.html create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/LightningElement.focus/x/delegatesFocusTrue/delegatesFocusTrue.js create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/non-standard-aria-props/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/non-standard-aria-props/x/light/light.html create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/non-standard-aria-props/x/light/light.js create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/non-standard-aria-props/x/shadow/shadow.html create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/non-standard-aria-props/x/shadow/shadow.js create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/synthetic-cross-root-aria/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/synthetic-cross-root-aria/x/ariaContainer/ariaContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/synthetic-cross-root-aria/x/ariaContainer/ariaContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/synthetic-cross-root-aria/x/ariaSource/ariaSource.html create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/synthetic-cross-root-aria/x/ariaSource/ariaSource.js create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/synthetic-cross-root-aria/x/ariaTarget/ariaTarget.html create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/synthetic-cross-root-aria/x/ariaTarget/ariaTarget.js create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/synthetic-cross-root-aria/x/ariaTarget2/ariaTarget2.html create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/synthetic-cross-root-aria/x/ariaTarget2/ariaTarget2.js create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/synthetic-cross-root-aria/x/valid/valid.html create mode 100644 packages/@lwc/integration-not-karma/test/accessibility/synthetic-cross-root-aria/x/valid/valid.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/README.md create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-attrs.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-body-slot.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-class-attr.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-conditional-false-attribute.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-conditional-true-attribute.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-empty-slot-element-creation.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-empty-slot.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-html-tags.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-multiple-children-in-slot.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-multiple-slots.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-nested-html-tags.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-property-reference.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-props.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-slot-adjacent-to-named-slot.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-slot-element-creation-with-duplicate-slot-names.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-slot-in-grandchild.js create mode 100644 packages/@lwc/integration-not-karma/test/act/act-components/test-style-attr.js create mode 100644 packages/@lwc/integration-not-karma/test/act/force/foo/foo.html create mode 100644 packages/@lwc/integration-not-karma/test/act/force/foo/foo.js create mode 100644 packages/@lwc/integration-not-karma/test/act/html/tags/tags.html create mode 100644 packages/@lwc/integration-not-karma/test/act/html/tags/tags.js create mode 100644 packages/@lwc/integration-not-karma/test/act/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/act/nested/htmlTags/htmlTags.html create mode 100644 packages/@lwc/integration-not-karma/test/act/nested/htmlTags/htmlTags.js create mode 100644 packages/@lwc/integration-not-karma/test/act/ui/another/another.html create mode 100644 packages/@lwc/integration-not-karma/test/act/ui/another/another.js create mode 100644 packages/@lwc/integration-not-karma/test/act/ui/boolean/boolean.html create mode 100644 packages/@lwc/integration-not-karma/test/act/ui/boolean/boolean.js create mode 100644 packages/@lwc/integration-not-karma/test/act/ui/outputpercent/outputpercent.html create mode 100644 packages/@lwc/integration-not-karma/test/act/ui/outputpercent/outputpercent.js create mode 100644 packages/@lwc/integration-not-karma/test/act/ui/something/something.html create mode 100644 packages/@lwc/integration-not-karma/test/act/ui/something/something.js create mode 100644 packages/@lwc/integration-not-karma/test/act/ui/somethingElse/somethingElse.html create mode 100644 packages/@lwc/integration-not-karma/test/act/ui/somethingElse/somethingElse.js create mode 100644 packages/@lwc/integration-not-karma/test/api/CustomElementConstructor-getter/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/api/CustomElementConstructor-getter/x/attrChanged/attrChanged.js create mode 100644 packages/@lwc/integration-not-karma/test/api/CustomElementConstructor-getter/x/definedComponent/definedComponent.js create mode 100644 packages/@lwc/integration-not-karma/test/api/CustomElementConstructor-getter/x/lifecycleChild/lifecycleChild.html create mode 100644 packages/@lwc/integration-not-karma/test/api/CustomElementConstructor-getter/x/lifecycleChild/lifecycleChild.js create mode 100644 packages/@lwc/integration-not-karma/test/api/CustomElementConstructor-getter/x/lifecycleParent/lifecycleParent.html create mode 100644 packages/@lwc/integration-not-karma/test/api/CustomElementConstructor-getter/x/lifecycleParent/lifecycleParent.js create mode 100644 packages/@lwc/integration-not-karma/test/api/CustomElementConstructor-getter/x/reflect/reflect.js create mode 100644 packages/@lwc/integration-not-karma/test/api/CustomElementConstructor-getter/x/reflectCamel/reflectCamel.js create mode 100644 packages/@lwc/integration-not-karma/test/api/CustomElementConstructor-getter/x/undefinedComponent/undefinedComponent.js create mode 100644 packages/@lwc/integration-not-karma/test/api/CustomElementConstructor-getter/x/withChildElms/withChildElms.html create mode 100644 packages/@lwc/integration-not-karma/test/api/CustomElementConstructor-getter/x/withChildElms/withChildElms.js create mode 100644 packages/@lwc/integration-not-karma/test/api/CustomElementConstructor-getter/x/withChildElmsHasSlot/withChildElmsHasSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/api/CustomElementConstructor-getter/x/withChildElmsHasSlot/withChildElmsHasSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/api/CustomElementConstructor-getter/x/withChildElmsHasSlotLight/withChildElmsHasSlotLight.html create mode 100644 packages/@lwc/integration-not-karma/test/api/CustomElementConstructor-getter/x/withChildElmsHasSlotLight/withChildElmsHasSlotLight.js create mode 100644 packages/@lwc/integration-not-karma/test/api/createElement/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/api/createElement/x/shadowRootGetter/shadowRootGetter.js create mode 100644 packages/@lwc/integration-not-karma/test/api/createElement/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/api/decorators/facade.js create mode 100644 packages/@lwc/integration-not-karma/test/api/decorators/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/api/freezeTemplate/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/api/getComponentConstructor/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/api/getComponentDef/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/api/getComponentDef/x/htmlElementProps/htmlElementProps.js create mode 100644 packages/@lwc/integration-not-karma/test/api/getComponentDef/x/privateAccessors/privateAccessors.js create mode 100644 packages/@lwc/integration-not-karma/test/api/getComponentDef/x/publicAccessors/publicAccessors.js create mode 100644 packages/@lwc/integration-not-karma/test/api/getComponentDef/x/publicMethods/publicMethods.js create mode 100644 packages/@lwc/integration-not-karma/test/api/getComponentDef/x/publicMethodsInheritance/base.js create mode 100644 packages/@lwc/integration-not-karma/test/api/getComponentDef/x/publicMethodsInheritance/publicMethodsInheritance.js create mode 100644 packages/@lwc/integration-not-karma/test/api/getComponentDef/x/publicProperties/publicProperties.js create mode 100644 packages/@lwc/integration-not-karma/test/api/getComponentDef/x/publicPropertiesInheritance/base.js create mode 100644 packages/@lwc/integration-not-karma/test/api/getComponentDef/x/publicPropertiesInheritance/publicPropertiesInheritance.js create mode 100644 packages/@lwc/integration-not-karma/test/api/isComponentConstructor/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/api/isNodeFromTemplate/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/api/isNodeFromTemplate/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/api/isNodeFromTemplate/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/api/readonly/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/api/registerTemplate/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/api/sanitizeAttribute/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/api/sanitizeAttribute/x/hrefBooleanTrue/hrefBooleanTrue.html create mode 100644 packages/@lwc/integration-not-karma/test/api/sanitizeAttribute/x/hrefBooleanTrue/hrefBooleanTrue.js create mode 100644 packages/@lwc/integration-not-karma/test/api/sanitizeAttribute/x/hrefDynamic/hrefDynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/api/sanitizeAttribute/x/hrefDynamic/hrefDynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/api/sanitizeAttribute/x/hrefStatic/hrefStatic.html create mode 100644 packages/@lwc/integration-not-karma/test/api/sanitizeAttribute/x/hrefStatic/hrefStatic.js create mode 100644 packages/@lwc/integration-not-karma/test/api/sanitizeAttribute/x/xlinkBooleanTrue/xlinkBooleanTrue.html create mode 100644 packages/@lwc/integration-not-karma/test/api/sanitizeAttribute/x/xlinkBooleanTrue/xlinkBooleanTrue.js create mode 100644 packages/@lwc/integration-not-karma/test/api/sanitizeAttribute/x/xlinkDynamic/xlinkDynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/api/sanitizeAttribute/x/xlinkDynamic/xlinkDynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/api/sanitizeAttribute/x/xlinkStatic/xlinkStatic.html create mode 100644 packages/@lwc/integration-not-karma/test/api/sanitizeAttribute/x/xlinkStatic/xlinkStatic.js create mode 100644 packages/@lwc/integration-not-karma/test/api/sanitizeHtmlContent/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/api/sanitizeHtmlContent/x/innerHtml/innerHtml.html create mode 100644 packages/@lwc/integration-not-karma/test/api/sanitizeHtmlContent/x/innerHtml/innerHtml.js create mode 100644 packages/@lwc/integration-not-karma/test/api/unwrap/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/api/unwrap/x/wrap/wrap.html create mode 100644 packages/@lwc/integration-not-karma/test/api/unwrap/x/wrap/wrap.js create mode 100644 packages/@lwc/integration-not-karma/test/bundle/css_only/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/bundle/css_only/x/cssContainer/cssContainer.css create mode 100644 packages/@lwc/integration-not-karma/test/bundle/css_only/x/cssContainer/cssContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/bundle/css_only/x/cssContainer/cssContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/bundle/css_only/x/cssContainer/local.css create mode 100644 packages/@lwc/integration-not-karma/test/bundle/css_only/x/cssContainerComposition/cssContainerComposition.css create mode 100644 packages/@lwc/integration-not-karma/test/bundle/css_only/x/cssContainerComposition/cssContainerComposition.html create mode 100644 packages/@lwc/integration-not-karma/test/bundle/css_only/x/cssContainerComposition/cssContainerComposition.js create mode 100644 packages/@lwc/integration-not-karma/test/bundle/css_only/x/onlyCss/onlyCss.css create mode 100644 packages/@lwc/integration-not-karma/test/bundle/css_only/x/onlyCssComposition/onlyCssComposition.css create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.addEventListener/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.addEventListener/x/additionWhileDispatch/additionWhileDispatch.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.addEventListener/x/eventHandler/eventHandler.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.addEventListener/x/eventHandlerOptions/eventHandlerOptions.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/api/ai/basic/basic.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/api/ai/basic/basic.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/api/ai/lightDom/lightDom.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/api/ai/lightDom/lightDom.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/api/ai/shadowDom/shadowDom.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/api/ai/shadowDom/shadowDom.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/api/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/elementInternals/formAssociated/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/elementInternals/formAssociated/x/formAssociated/formAssociated.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/elementInternals/formAssociated/x/formAssociatedFalse/formAssociatedFalse.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/elementInternals/formAssociated/x/formAssociatedFalseNoAttachInternals/formAssociatedFalseNoAttachInternals.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/elementInternals/formAssociated/x/formAssociatedNoAttachInternals/formAssociatedNoAttachInternals.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/elementInternals/formAssociated/x/notFormAssociated/notFormAssociated.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/elementInternals/formAssociated/x/notFormAssociatedNoAttachInternals/notFormAssociatedNoAttachInternals.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/elementInternals/sanity/ei/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/elementInternals/sanity/ei/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.attachInternals/elementInternals/sanity/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.classList/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.classList/x/accessDuringConstruction/accessDuringConstruction.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.classList/x/accessDuringConstruction/accessDuringConstruction.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.classList/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.classList/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.connectedCallback/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.connectedCallback/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.connectedCallback/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.connectedCallback/x/connectedCallbackThrow/connectedCallbackThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.connectedCallback/x/slottedParent/slottedParent.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.connectedCallback/x/slottedParent/slottedParent.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.connectedCallback/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/issue-1506.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/acceptingSlots/acceptingSlots.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/acceptingSlots/acceptingSlots.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/disconnectedCallbackSetsTrackedValue/disconnectedCallbackSetsTrackedValue.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/disconnectedCallbackSetsTrackedValue/disconnectedCallbackSetsTrackedValue.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/disconnectedCallbackThrow/disconnectedCallbackThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/dualTemplate/dualTemplate.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/dualTemplate/templateA.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/dualTemplate/templateB.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/dualTemplate1506/dualTemplate1506.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/dualTemplate1506/simpleTemplate.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/dualTemplate1506/templateWithChild.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/explicitRender/explicitRender.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/explicitRender/explicitRender.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/ignoringSlots/ignoringSlots.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/ignoringSlots/ignoringSlots.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/slotted/slotted.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/slotted/slotted.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.disconnectedCallback/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.dispatchEvent/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.dispatchEvent/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/afterThrowingChild/afterThrowingChild.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/afterThrowingChild/afterThrowingChild.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/altChildBoundaryViewThrow/altChildBoundaryViewThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/altChildBoundaryViewThrow/altChildBoundaryViewThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/boundaryAlternativeViewThrow/boundaryAlternativeViewThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/boundaryAlternativeViewThrow/boundaryAlternativeViewThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/boundaryChildConnectedThrow/boundaryChildConnectedThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/boundaryChildConnectedThrow/boundaryChildConnectedThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/boundaryChildConstructorThrow/boundaryChildConstructorThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/boundaryChildConstructorThrow/boundaryChildConstructorThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/boundaryChildRenderThrow/boundaryChildRenderThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/boundaryChildRenderThrow/boundaryChildRenderThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/boundaryChildRenderedThrow/boundaryChildRenderedThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/boundaryChildRenderedThrow/boundaryChildRenderedThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/boundaryChildRenderedThrowFrozen/boundaryChildRenderedThrowFrozen.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/boundaryChildRenderedThrowFrozen/boundaryChildRenderedThrowFrozen.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/boundaryChildSelfRehydrateThrow/boundaryChildSelfRehydrateThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/boundaryChildSelfRehydrateThrow/boundaryChildSelfRehydrateThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/boundaryChildSlotThrow/boundaryChildSlotThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/boundaryChildSlotThrow/boundaryChildSlotThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childConnectedThrow/childConnectedThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childConnectedThrow/childConnectedThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childConnectedThrowDuringInit/childConnectedThrowDuringInit.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childConnectedThrowDuringInit/childConnectedThrowDuringInit.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childConstructorThrow/childConstructorThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childConstructorThrow/childConstructorThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childConstructorThrowDuringInit/childConstructorThrowDuringInit.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childConstructorThrowDuringInit/childConstructorThrowDuringInit.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childConstructorWrapper/childConstructorWrapper.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childConstructorWrapper/childConstructorWrapper.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childRenderThrow/childRenderThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childRenderThrow/childRenderThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childRenderThrowDuringInit/childRenderThrowDuringInit.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childRenderThrowDuringInit/childRenderThrowDuringInit.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childRenderedThrow/childRenderedThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childRenderedThrow/childRenderedThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childRenderedThrowDuringInit/childRenderedThrowDuringInit.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childRenderedThrowDuringInit/childRenderedThrowDuringInit.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childRenderedThrowFrozen/childRenderedThrowFrozen.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childRenderedThrowFrozen/childRenderedThrowFrozen.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childSelfRehydrateThrow/childSelfRehydrateThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childSelfRehydrateThrow/childSelfRehydrateThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childSlotHost/childSlotHost.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childSlotHost/childSlotHost.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childSlotThrow/childSlotThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/childSlotThrow/childSlotThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/grandparentThrowsChildConnectedThrows/grandparentThrowsChildConnectedThrows.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/grandparentThrowsChildConnectedThrows/grandparentThrowsChildConnectedThrows.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/grandparentThrowsChildConstructorThrows/grandparentThrowsChildConstructorThrows.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/grandparentThrowsChildConstructorThrows/grandparentThrowsChildConstructorThrows.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/grandparentThrowsChildRenderThrows/grandparentThrowsChildRenderThrows.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/grandparentThrowsChildRenderThrows/grandparentThrowsChildRenderThrows.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/grandparentThrowsChildRenderedThrows/grandparentThrowsChildRenderedThrows.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/grandparentThrowsChildRenderedThrows/grandparentThrowsChildRenderedThrows.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/nestedBoundaryChildThrow/nestedBoundaryChildThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/nestedBoundaryChildThrow/nestedBoundaryChildThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/nestedChildThrow/nestedChildThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/nestedChildThrow/nestedChildThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/nestedGrandChildThrow/nestedGrandChildThrow.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/nestedGrandChildThrow/nestedGrandChildThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/noThrowOnMutate/noThrowOnMutate.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/noThrowOnMutate/noThrowOnMutate.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/parentThrowsChildConnectedThrows/parentThrowsChildConnectedThrows.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/parentThrowsChildConnectedThrows/parentThrowsChildConnectedThrows.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/parentThrowsChildConstructorThrows/parentThrowsChildConstructorThrows.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/parentThrowsChildConstructorThrows/parentThrowsChildConstructorThrows.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/parentThrowsChildRenderThrows/parentThrowsChildRenderThrows.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/parentThrowsChildRenderThrows/parentThrowsChildRenderThrows.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/parentThrowsChildRenderedThrows/parentThrowsChildRenderedThrows.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/parentThrowsChildRenderedThrows/parentThrowsChildRenderedThrows.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/parentThrowsOnMutateChildConnectedThrows/parentThrowsOnMutateChildConnectedThrows.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/parentThrowsOnMutateChildConnectedThrows/parentThrowsOnMutateChildConnectedThrows.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/parentThrowsOnMutateChildConstructorThrows/parentThrowsOnMutateChildConstructorThrows.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/parentThrowsOnMutateChildConstructorThrows/parentThrowsOnMutateChildConstructorThrows.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/parentThrowsOnMutateChildRenderThrows/parentThrowsOnMutateChildRenderThrows.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/parentThrowsOnMutateChildRenderThrows/parentThrowsOnMutateChildRenderThrows.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/parentThrowsOnMutateChildRenderedThrows/parentThrowsOnMutateChildRenderedThrows.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/parentThrowsOnMutateChildRenderedThrows/parentThrowsOnMutateChildRenderedThrows.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/postErrorChildView/postErrorChildView.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/postErrorChildView/postErrorChildView.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/preErrorChildView/preErrorChildView.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.errorCallback/x/preErrorChildView/preErrorChildView.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.getAttribute/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.getAttribute/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.getAttributeNS/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.getAttributeNS/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.getBoundingClientRect/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.getBoundingClientRect/x/constructorInvocation/constructorInvocation.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.getBoundingClientRect/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.getBoundingClientRect/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.hasAttribute/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.hasAttribute/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.hasAttributeNS/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.hasAttributeNS/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.hostElement/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.hostElement/x/light/light.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.hostElement/x/light/light.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.hostElement/x/shadow/shadow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.hostElement/x/wrapper/wrapper.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.hostElement/x/wrapper/wrapper.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.isConnected/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.removeAttribute/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.removeAttribute/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.removeAttributeNS/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.removeAttributeNS/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.removeEventListener/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.removeEventListener/x/lifecycleHooks/lifecycleHooks.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.removeEventListener/x/removalWhileDispatch/removalWhileDispatch.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.removeEventListener/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.render/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.render/x/dynamicTemplate/dynamicTemplate.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.render/x/dynamicTemplate/template-1.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.render/x/dynamicTemplate/template-2.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.render/x/renderInvalid/renderInvalid.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.render/x/renderThrow/renderThrow.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.setAttribute/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.setAttribute/x/constructorInvocation/constructorInvocation.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.setAttribute/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.setAttributeNS/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.setAttributeNS/x/constructorInvocation/constructorInvocation.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.setAttributeNS/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.shadowRoot/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.shadowRoot/x/basic/basic.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.shadowRoot/x/correct/correct.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.shadowRoot/x/correct/correct.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.style/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.style/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.tagName/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.tagName/x/override/override.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.tagName/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.toString/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.toString/x/anonymous/anonymous.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement.toString/x/named/named.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement/x/childThrowingBeforeSuper/childThrowingBeforeSuper.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement/x/definedComponent/definedComponent.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement/x/notInvokingSuper/notInvokingSuper.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement/x/notReturningThis/notReturningThis.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement/x/parentThrowingBeforeSuper/parentThrowingBeforeSuper.html create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement/x/parentThrowingBeforeSuper/parentThrowingBeforeSuper.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement/x/returningBad/returningBad.js create mode 100644 packages/@lwc/integration-not-karma/test/component/LightningElement/x/undefinedComponent/undefinedComponent.js create mode 100644 packages/@lwc/integration-not-karma/test/component/aom-setter/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/aom-setter/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/component/aom-setter/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/component/aom-setter/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/component/aom-setter/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/component/aom-setter/x/roleTester/roleTester.html create mode 100644 packages/@lwc/integration-not-karma/test/component/aom-setter/x/roleTester/roleTester.js create mode 100644 packages/@lwc/integration-not-karma/test/component/api-with-superclasses/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/api-with-superclasses/x/subClass/subClass.js create mode 100644 packages/@lwc/integration-not-karma/test/component/api-with-superclasses/x/superClass/superClass.js create mode 100644 packages/@lwc/integration-not-karma/test/component/api-with-superclasses/x/superSuperClass/superSuperClass.js create mode 100644 packages/@lwc/integration-not-karma/test/component/aria-reflection/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/aria-reflection/x/apiPropDeclared/apiPropDeclared.js create mode 100644 packages/@lwc/integration-not-karma/test/component/aria-reflection/x/apiPropDeclaredNoSuper/apiPropDeclaredNoSuper.js create mode 100644 packages/@lwc/integration-not-karma/test/component/aria-reflection/x/noPropDeclared/noPropDeclared.js create mode 100644 packages/@lwc/integration-not-karma/test/component/aria-reflection/x/noPropDeclaredNoSuper/noPropDeclaredNoSuper.js create mode 100644 packages/@lwc/integration-not-karma/test/component/aria-reflection/x/propDeclared/propDeclared.js create mode 100644 packages/@lwc/integration-not-karma/test/component/aria-reflection/x/propDeclaredNoSuper/propDeclaredNoSuper.js create mode 100644 packages/@lwc/integration-not-karma/test/component/aria-reflection/x/shared/base.js create mode 100644 packages/@lwc/integration-not-karma/test/component/aria-reflection/x/shared/template.html create mode 100644 packages/@lwc/integration-not-karma/test/component/aria-reflection/x/trackPropDeclared/trackPropDeclared.js create mode 100644 packages/@lwc/integration-not-karma/test/component/aria-reflection/x/trackPropDeclaredNoSuper/trackPropDeclaredNoSuper.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/constructorGetterAccess/constructorGetterAccess.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/duplicatePropertyTemplate/duplicatePropertyTemplate.html create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/duplicatePropertyTemplate/duplicatePropertyTemplate.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/extendsMixin/extendsMixin.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/getterSetter/getterSetter.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/getterSetterAndProp/getterSetterAndProp.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/inheritance/inheritance.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/inheritanceBase/inheritanceBase.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/methods/methods.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/mixin/mixin.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/mutate/mutate.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/noSetter/noSetter.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/nullInitialValue/nullInitialValue.html create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/nullInitialValue/nullInitialValue.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/properties/properties.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/reactivity/reactivity.html create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/reactivity/reactivity.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/api/x/staticProperty/staticProperty.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/track/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/track/x/duplicatePropertyTemplate/duplicatePropertyTemplate.html create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/track/x/duplicatePropertyTemplate/duplicatePropertyTemplate.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/track/x/nonObservable/nonObservable.html create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/track/x/nonObservable/nonObservable.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/track/x/properties/properties.html create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/track/x/properties/properties.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/track/x/setTrackedValueToNull/setTrackedValueToNull.html create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/track/x/setTrackedValueToNull/setTrackedValueToNull.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/track/x/sideEffect/sideEffect.html create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/track/x/sideEffect/sideEffect.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/track/x/staticProperty/staticProperty.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/wire/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/wire/x/adapter/adapter.js create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/wire/x/duplicatePropertyTemplate/duplicatePropertyTemplate.html create mode 100644 packages/@lwc/integration-not-karma/test/component/decorators/wire/x/duplicatePropertyTemplate/duplicatePropertyTemplate.js create mode 100644 packages/@lwc/integration-not-karma/test/component/default-export/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/default-export/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/component/default-export/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/component/default-export/x/component/nil.js create mode 100644 packages/@lwc/integration-not-karma/test/component/default-export/x/component/string.js create mode 100644 packages/@lwc/integration-not-karma/test/component/default-export/x/component/undef.js create mode 100644 packages/@lwc/integration-not-karma/test/component/default-export/x/component/zero.js create mode 100644 packages/@lwc/integration-not-karma/test/component/default-export/x/exportAsDefault/exportAsDefault.html create mode 100644 packages/@lwc/integration-not-karma/test/component/default-export/x/exportAsDefault/exportAsDefault.js create mode 100644 packages/@lwc/integration-not-karma/test/component/default-export/x/exportAsDefaultWithOtherExports/exportAsDefaultWithOtherExports.html create mode 100644 packages/@lwc/integration-not-karma/test/component/default-export/x/exportAsDefaultWithOtherExports/exportAsDefaultWithOtherExports.js create mode 100644 packages/@lwc/integration-not-karma/test/component/default-export/x/exportDefaultClassWithOtherExports/exportDefaultClassWithOtherExports.html create mode 100644 packages/@lwc/integration-not-karma/test/component/default-export/x/exportDefaultClassWithOtherExports/exportDefaultClassWithOtherExports.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/LightningElement.childNodes.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/LightningElement.children.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/LightningElement.firstChild.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/LightningElement.firstElementChild.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/LightningElement.getElementsByClassName.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/LightningElement.getElementsByTagName.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/LightningElement.lastChild.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/LightningElement.lastElementChild.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/LightningElement.querySelector.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/LightningElement.querySelectorAll.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/LightningElement.querySelectorAllLightDom.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/constructorChildNodes/constructorChildNodes.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/constructorChildren/constructorChildren.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/constructorFirstChild/constructorFirstChild.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/constructorFirstElementChild/constructorFirstElementChild.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/constructorGetElementsByClassName/constructorGetElementsByClassName.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/constructorGetElementsByTagName/constructorGetElementsByTagName.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/constructorLastChild/constructorLastChild.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/constructorLastElementChild/constructorLastElementChild.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/constructorQuerySelector/constructorQuerySelector.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/constructorQuerySelectorAll/constructorQuerySelectorAll.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/parentLightDom/parentLightDom.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/parentLightDom/parentLightDom.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/parentWithTextNode/parentWithTextNode.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dom-query/x/parentWithTextNode/parentWithTextNode.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/attributes/attributes.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/attributes/attributes.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/bar/bar.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/bar/bar.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/basic/basic.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/basic/basic.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/baz/baz.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/baz/baz.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/conditional/conditional.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/conditional/conditional.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/foo/foo.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/foo/foo.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/forwardedScopedSlotChild/forwardedScopedSlotChild.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/forwardedScopedSlotChild/forwardedScopedSlotChild.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/forwardedScopedSlotParent/forwardedScopedSlotParent.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/forwardedScopedSlotParent/forwardedScopedSlotParent.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/fred/fred.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/fred/fred.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/list/list.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/list/list.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/nested/nested.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/nested/nested.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/scopedSlotChild/scopedSlotChild.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/scopedSlotChild/scopedSlotChild.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/scopedSlotParent/scopedSlotParent.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/scopedSlotParent/scopedSlotParent.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/slottable/slottable.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/slottable/slottable.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/slotter/slotter.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-component/x/slotter/slotter.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/x/alter/alter.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/x/alter/alter.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/x/containerBar/containerBar.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/x/containerBar/containerBar.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/x/containerFoo/containerFoo.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/x/containerFoo/containerFoo.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/x/ctor/ctor.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/x/ctor/ctor.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/x/dynamic/dynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/x/dynamic/dynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/x/dynamicSlotted/dynamicSlotted.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/x/dynamicSlotted/dynamicSlotted.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/x/lwcDynamic/lwcDynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/x/lwcDynamic/lwcDynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/x/lwcDynamicSlotted/lwcDynamicSlotted.html create mode 100644 packages/@lwc/integration-not-karma/test/component/dynamic-imports/x/lwcDynamicSlotted/lwcDynamicSlotted.js create mode 100644 packages/@lwc/integration-not-karma/test/component/face-callbacks/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/face-callbacks/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/component/face-callbacks/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/component/face-callbacks/x/formAssociated/formAssociated.html create mode 100644 packages/@lwc/integration-not-karma/test/component/face-callbacks/x/formAssociated/formAssociated.js create mode 100644 packages/@lwc/integration-not-karma/test/component/face-callbacks/x/lightDomFormAssociated/lightDomFormAssociated.html create mode 100644 packages/@lwc/integration-not-karma/test/component/face-callbacks/x/lightDomFormAssociated/lightDomFormAssociated.js create mode 100644 packages/@lwc/integration-not-karma/test/component/face-callbacks/x/lightDomNotFormAssociated/lightDomNotFormAssociated.html create mode 100644 packages/@lwc/integration-not-karma/test/component/face-callbacks/x/lightDomNotFormAssociated/lightDomNotFormAssociated.js create mode 100644 packages/@lwc/integration-not-karma/test/component/face-callbacks/x/notFormAssociated/notFormAssociated.html create mode 100644 packages/@lwc/integration-not-karma/test/component/face-callbacks/x/notFormAssociated/notFormAssociated.js create mode 100644 packages/@lwc/integration-not-karma/test/component/html-properties/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/html-properties/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/component/html-properties/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/invocationorder/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/invocationorder/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/invocationorder/foo/foo.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/invocationorder/foo/foo.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/invocationorder/fooInternal/fooInternal.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/invocationorder/fooInternal/fooInternal.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/invocationorder/lightContainer/lightContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/invocationorder/lightContainer/lightContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/invocationorder/lightFoo/lightFoo.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/invocationorder/lightFoo/lightFoo.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/invocationorder/lightFooInternal/lightFooInternal.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/invocationorder/lightFooInternal/lightFooInternal.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/reordering/item/item.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/reordering/item/item.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/reordering/itemLight/itemLight.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/reordering/itemLight/itemLight.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/reordering/itemWrapper/itemWrapper.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/reordering/itemWrapper/itemWrapper.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/reordering/itemWrapperLight/itemWrapperLight.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/reordering/itemWrapperLight/itemWrapperLight.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/reordering/list/list.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/reordering/list/list.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/reordering/listLight/listLight.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/reordering/listLight/listLight.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/timing/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/timing/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/timing/childLight/childLight.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/timing/childLight/childLight.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/timing/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/timing/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/timing/parentLight/parentLight.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/timing/parentLight/parentLight.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/x/details/details.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/x/details/details.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/x/dispatchEvents/dispatchEvents.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/x/parentIf/parentIf.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/x/parentIf/parentIf.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/x/parentProp/parentProp.html create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/x/parentProp/parentProp.js create mode 100644 packages/@lwc/integration-not-karma/test/component/lifecycle-callbacks/x/single/single.js create mode 100644 packages/@lwc/integration-not-karma/test/component/locker-live-property/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/locker-live-property/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/component/locker-live-property/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/component/native-vs-synthetic-lifecycle/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/native-vs-synthetic-lifecycle/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/component/native-vs-synthetic-lifecycle/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/component/native-vs-synthetic-lifecycle/x/logsWhenConnected/logsWhenConnected.js create mode 100644 packages/@lwc/integration-not-karma/test/component/native-vs-synthetic-lifecycle/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/component/native-vs-synthetic-lifecycle/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/component/observed-attributes/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/observed-attributes/x/observes/observes.js create mode 100644 packages/@lwc/integration-not-karma/test/component/observed-fields/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/observed-fields/x/duplicatePropertyTemplate/duplicatePropertyTemplate.html create mode 100644 packages/@lwc/integration-not-karma/test/component/observed-fields/x/duplicatePropertyTemplate/duplicatePropertyTemplate.js create mode 100644 packages/@lwc/integration-not-karma/test/component/observed-fields/x/fieldForCache/fieldForCache.html create mode 100644 packages/@lwc/integration-not-karma/test/component/observed-fields/x/fieldForCache/fieldForCache.js create mode 100644 packages/@lwc/integration-not-karma/test/component/observed-fields/x/fieldWithSideEffect/fieldWithSideEffect.html create mode 100644 packages/@lwc/integration-not-karma/test/component/observed-fields/x/fieldWithSideEffect/fieldWithSideEffect.js create mode 100644 packages/@lwc/integration-not-karma/test/component/observed-fields/x/simple/simple.html create mode 100644 packages/@lwc/integration-not-karma/test/component/observed-fields/x/simple/simple.js create mode 100644 packages/@lwc/integration-not-karma/test/component/owner-document/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/owner-document/x/shadow-dom/shadow-dom.html create mode 100644 packages/@lwc/integration-not-karma/test/component/owner-document/x/shadow-dom/shadow-dom.js create mode 100644 packages/@lwc/integration-not-karma/test/component/properties/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/properties/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/accessDuringRender/accessDuringRender.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/accessDuringRender/accessDuringRender.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/basic/basic.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/basic/basic.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/basicDynamic/basicDynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/basicDynamic/basicDynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/conditional/conditional.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/conditional/conditional.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/conflict/conflict.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/conflict/conflict.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/conflictDynamic/conflictDynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/conflictDynamic/conflictDynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/conflictFullyStatic/conflictFullyStatic.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/conflictFullyStatic/conflictFullyStatic.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/connect/connect.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/connect/connect.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/construct/construct.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/construct/construct.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/disconnect/disconnect.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/disconnect/disconnect.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/dynamic/dynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/dynamic/dynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/expando/expando.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/expando/expando.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/expandoCheck/expandoCheck.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/expandoCheck/expandoCheck.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/light/light.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/light/light.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/lwcDynamic/lwcDynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/lwcDynamic/lwcDynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/multi/a.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/multi/b.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/multi/multi.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/multiChild/multiChild.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/multiChild/multiChild.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/multiNoRefsInOne/a.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/multiNoRefsInOne/b.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/multiNoRefsInOne/multiNoRefsInOne.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/multiParent/multiParent.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/multiParent/multiParent.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/none/none.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/none/none.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/noneActive/noneActive.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/noneActive/noneActive.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/overwrite/overwrite.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/overwrite/overwrite.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/render/a.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/render/b.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/render/render.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/rendered/rendered.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/rendered/rendered.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/rerenderComponent/rerenderComponent.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/rerenderComponent/rerenderComponent.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/rerenderElement/rerenderElement.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/rerenderElement/rerenderElement.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/rerenderElementStaticRef/rerenderElementStaticRef.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/rerenderElementStaticRef/rerenderElementStaticRef.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/slottable/slottable.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/slottable/slottable.js create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/slotter/slotter.html create mode 100644 packages/@lwc/integration-not-karma/test/component/refs/x/slotter/slotter.js create mode 100644 packages/@lwc/integration-not-karma/test/component/spellcheck-attribute/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/spellcheck-attribute/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/component/spellcheck-attribute/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/component/spellcheck-attribute/x/dynamic/dynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/component/spellcheck-attribute/x/dynamic/dynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/component/spellcheck-attribute/x/simple/simple.html create mode 100644 packages/@lwc/integration-not-karma/test/component/spellcheck-attribute/x/simple/simple.js create mode 100644 packages/@lwc/integration-not-karma/test/component/unknown-properties/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/component/unknown-properties/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/component/unknown-properties/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/component/unknown-properties/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/component/unknown-properties/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/context/advanced-context.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/context/simple-context.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/context/x/advancedConsumer/advancedConsumer.html create mode 100644 packages/@lwc/integration-not-karma/test/context/x/advancedConsumer/advancedConsumer.js create mode 100644 packages/@lwc/integration-not-karma/test/context/x/advancedProvider/advancedProvider.js create mode 100644 packages/@lwc/integration-not-karma/test/context/x/simpleConsumer/simpleConsumer.html create mode 100644 packages/@lwc/integration-not-karma/test/context/x/simpleConsumer/simpleConsumer.js create mode 100644 packages/@lwc/integration-not-karma/test/context/x/simpleProvider/simpleProvider.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements-registry/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/x/nonce1/nonce1.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/x/nonce10/nonce10.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/x/nonce11/nonce11.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/x/nonce12/nonce12.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/x/nonce13/nonce13.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/x/nonce14/nonce14.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/x/nonce15/nonce15.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/x/nonce16/nonce16.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/x/nonce19/nonce19.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/x/nonce4/nonce4.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/x/nonce5/nonce5.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/x/nonce6/nonce6.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/x/nonce7/nonce7.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/x/nonce8/nonce8.js create mode 100644 packages/@lwc/integration-not-karma/test/custom-elements/x/nonce9/nonce9.js create mode 100644 packages/@lwc/integration-not-karma/test/dom-manual/moving-node-to-document/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/dom-manual/moving-node-to-document/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/dom-manual/moving-node-to-document/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/events/focus-event-composed/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/events/focus-event-related-target/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/events/focus-event-related-target/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/events/focus-event-related-target/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/events/focus-event-related-target/x/input/input.html create mode 100644 packages/@lwc/integration-not-karma/test/events/focus-event-related-target/x/input/input.js create mode 100644 packages/@lwc/integration-not-karma/test/events/memoization/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/events/memoization/x/deep/deep.html create mode 100644 packages/@lwc/integration-not-karma/test/events/memoization/x/deep/deep.js create mode 100644 packages/@lwc/integration-not-karma/test/events/memoization/x/list/list.html create mode 100644 packages/@lwc/integration-not-karma/test/events/memoization/x/list/list.js create mode 100644 packages/@lwc/integration-not-karma/test/events/memoization/x/mixed/mixed.html create mode 100644 packages/@lwc/integration-not-karma/test/events/memoization/x/mixed/mixed.js create mode 100644 packages/@lwc/integration-not-karma/test/host-element/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/host-element/x/shadow/shadow.html create mode 100644 packages/@lwc/integration-not-karma/test/host-element/x/shadow/shadow.js create mode 100644 packages/@lwc/integration-not-karma/test/hydration/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/hydration/x/simple/simple.html create mode 100644 packages/@lwc/integration-not-karma/test/hydration/x/simple/simple.js create mode 100644 packages/@lwc/integration-not-karma/test/integrations/aura/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/integrations/aura/x/childMarkedAsCircular/childMarkedAsCircular.html create mode 100644 packages/@lwc/integration-not-karma/test/integrations/aura/x/childMarkedAsCircular/childMarkedAsCircular.js create mode 100644 packages/@lwc/integration-not-karma/test/integrations/aura/x/childModuleMarkedAsCircular/childModuleMarkedAsCircular.html create mode 100644 packages/@lwc/integration-not-karma/test/integrations/aura/x/childModuleMarkedAsCircular/childModuleMarkedAsCircular.js create mode 100644 packages/@lwc/integration-not-karma/test/integrations/aura/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/integrations/aura/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/integrations/locker/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/integrations/locker/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/integrations/locker/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/integrations/locker/x/lockerHooks/lockerHooks.html create mode 100644 packages/@lwc/integration-not-karma/test/integrations/locker/x/lockerHooks/lockerHooks.js create mode 100644 packages/@lwc/integration-not-karma/test/integrations/locker/x/lockerIntegration/lockerIntegration.html create mode 100644 packages/@lwc/integration-not-karma/test/integrations/locker/x/lockerIntegration/lockerIntegration.js create mode 100644 packages/@lwc/integration-not-karma/test/integrations/locker/x/lockerLiveComponent/lockerLiveComponent.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/basic/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/basic/x/invalidRenderMode/invalidRenderMode.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/basic/x/invalidRenderMode/invalidRenderMode.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/basic/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/basic/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/events/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/events/x/lightChild/lightChild.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/events/x/lightChild/lightChild.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/events/x/lightContainer/lightContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/events/x/lightContainer/lightContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/events/x/shadowChild/shadowChild.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/events/x/shadowChild/shadowChild.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/events/x/shadowContainer/shadowContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/events/x/shadowContainer/shadowContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/host-pseudo/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/host-pseudo/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/host-pseudo/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/host-pseudo/x/component/component.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/ids/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/ids/x/one/one.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/ids/x/one/one.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/ids/x/shadow/shadow.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/ids/x/shadow/shadow.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/ids/x/two/two.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/ids/x/two/two.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/inheritance/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/inheritance/x/baseLight/baseLight.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/inheritance/x/baseLight/baseLight.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/inheritance/x/baseShadow/baseShadow.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/inheritance/x/baseShadow/baseShadow.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/inheritance/x/defaultExtendsLight/defaultExtendsLight.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/inheritance/x/defaultExtendsLight/defaultExtendsLight.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/inheritance/x/defaultExtendsShadow/defaultExtendsShadow.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/inheritance/x/defaultExtendsShadow/defaultExtendsShadow.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/inheritance/x/lightExtendsShadow/lightExtendsShadow.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/inheritance/x/lightExtendsShadow/lightExtendsShadow.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/inheritance/x/shadowExtendsLight/shadowExtendsLight.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/inheritance/x/shadowExtendsLight/shadowExtendsLight.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/util.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/basicContainer/basicContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/basicContainer/basicContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/basicNamedSlottable/basicNamedSlottable.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/basicNamedSlottable/basicNamedSlottable.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/dynamicForwardedSlottable/dynamicForwardedSlottable.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/dynamicForwardedSlottable/dynamicForwardedSlottable.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/dynamicSlotForwarding/dynamicSlotForwarding.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/dynamicSlotForwarding/dynamicSlotForwarding.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/forwardedSlottable/forwardedSlottable.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/forwardedSlottable/forwardedSlottable.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/slotForwarding/slotForwarding.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/slotForwarding/slotForwarding.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/slotee/slotee.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/slotee/slotee.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/slottable/slottable.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/slottable/slottable.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/standardSlotting/standardSlotting.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/lifecycle/x/standardSlotting/standardSlotting.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/light-parent-shadow-child/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/light-parent-shadow-child/x/lightParent/lightParent.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/light-parent-shadow-child/x/lightParent/lightParent.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/light-parent-shadow-child/x/shadowChild/shadowChild.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/light-parent-shadow-child/x/shadowChild/shadowChild.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/multiple-templates/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/multiple-templates/x/multi/a.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/multiple-templates/x/multi/a.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/multiple-templates/x/multi/b.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/multiple-templates/x/multi/b.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/multiple-templates/x/multi/multi.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/multiple-templates/x/multiNoStyleInFirst/a.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/multiple-templates/x/multiNoStyleInFirst/b.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/multiple-templates/x/multiNoStyleInFirst/b.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/multiple-templates/x/multiNoStyleInFirst/multiNoStyleInFirst.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/restriction/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/restriction/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/restriction/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/root/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/root/x/light/light.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/root/x/light/light.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/root/x/list/list.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/root/x/list/list.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/if-block/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/if-block/x/mixedSlotChild/mixedSlotChild.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/if-block/x/mixedSlotChild/mixedSlotChild.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/if-block/x/mixedSlotParent/mixedSlotParent.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/if-block/x/mixedSlotParent/mixedSlotParent.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/childForConditionalSlotContent/childForConditionalSlotContent.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/childForConditionalSlotContent/childForConditionalSlotContent.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/childSlotTagWithKey/childSlotTagWithKey.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/childSlotTagWithKey/childSlotTagWithKey.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/listChildApiData/listChildApiData.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/listChildApiData/listChildApiData.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/listChildTrackedData/listChildTrackedData.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/listChildTrackedData/listChildTrackedData.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/listParentApiData/listParentApiData.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/listParentApiData/listParentApiData.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/listParentTrackedData/listParentTrackedData.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/listParentTrackedData/listParentTrackedData.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/parentBindingsOutsideSlotContent/parentBindingsOutsideSlotContent.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/parentBindingsOutsideSlotContent/parentBindingsOutsideSlotContent.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/parentWithConditionalSlotContent/parentWithConditionalSlotContent.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/parentWithConditionalSlotContent/parentWithConditionalSlotContent.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/slottedWithCallbacks/slottedWithCallbacks.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/slottedWithCallbacks/slottedWithCallbacks.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/withParentBindings/withParentBindings.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/reactivity/x/withParentBindings/withParentBindings.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/rehydration-issue-w-12965122/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/rehydration-issue-w-12965122/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/rehydration-issue-w-12965122/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/rehydration-issue-w-12965122/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/rehydration-issue-w-12965122/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/rehydration-issue-w-12965122/x/slotted/slotted.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/rehydration-issue-w-12965122/x/slotted/slotted.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/runtime-checks/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/runtime-checks/x/childWithScopedSlots/childWithScopedSlots.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/runtime-checks/x/childWithScopedSlots/childWithScopedSlots.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/runtime-checks/x/childWithStandardSlots/childWithStandardSlots.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/runtime-checks/x/childWithStandardSlots/childWithStandardSlots.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/runtime-checks/x/parentWithScopedSlotContent/parentWithScopedSlotContent.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/runtime-checks/x/parentWithScopedSlotContent/parentWithScopedSlotContent.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/runtime-checks/x/parentWithStandardSlotContent/parentWithStandardSlotContent.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/runtime-checks/x/parentWithStandardSlotContent/parentWithStandardSlotContent.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/runtime-checks/x/shadowDomChild/shadowDomChild.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/runtime-checks/x/shadowDomChild/shadowDomChild.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/basicChild/basicChild.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/basicChild/basicChild.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/basicParent/basicParent.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/basicParent/basicParent.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/childWDefaultContent/childWDefaultContent.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/childWDefaultContent/childWDefaultContent.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/childWithForEach/childWithForEach.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/childWithForEach/childWithForEach.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/childWithNamedSlots/childWithNamedSlots.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/childWithNamedSlots/childWithNamedSlots.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/nestedSlots/nestedSlots.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/nestedSlots/nestedSlots.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/parentOfChildWithForEach/parentOfChildWithForEach.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/parentOfChildWithForEach/parentOfChildWithForEach.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/parentOfChildWithForEach/parentOfChildWithForEach.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/parentOfChildWithNamedSlots/parentOfChildWithNamedSlots.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/parentOfChildWithNamedSlots/parentOfChildWithNamedSlots.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/parentWNoSlotContent/parentWNoSlotContent.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/parentWNoSlotContent/parentWNoSlotContent.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/row/row.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/row/row.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/table/table.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-slot/x/table/table.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/basic/basic.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/basic/basic.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/basic/basic.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/basic/basic.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/lightChild/lightChild.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/lightChild/lightChild.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/other/other.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/other/other.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/other/other.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/pseudoChild/pseudoChild.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/pseudoChild/pseudoChild.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/pseudoParent/pseudoParent.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/pseudoParent/pseudoParent.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/pseudoParent/pseudoParent.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/shadowWithScoped/shadowWithScoped.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/shadowWithScoped/shadowWithScoped.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/shadowWithScoped/shadowWithScoped.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/switchable/a.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/switchable/b.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/switchable/b.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/switchable/c.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/switchable/d.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/switchable/d.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/switchable/switchable.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/unscoped/unscoped.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/scoped-styles/x/unscoped/unscoped.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/shadow-getter/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/shadow-getter/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/shadow-getter/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/shadow-parent-light-child/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/shadow-parent-light-child/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/shadow-parent-light-child/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/shadow-parent-light-child/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/shadow-parent-light-child/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/scoped-slots/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/scoped-slots/x/leaf/leaf.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/scoped-slots/x/leaf/leaf.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/scoped-slots/x/lightContainer/lightContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/scoped-slots/x/lightContainer/lightContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/scoped-slots/x/scopedSlotChild/scopedSlotChild.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/scoped-slots/x/scopedSlotChild/scopedSlotChild.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/scoped-slots/x/scopedSlotParent/scopedSlotParent.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/scoped-slots/x/scopedSlotParent/scopedSlotParent.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/duplicates/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/duplicates/light/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/duplicates/light/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/duplicates/light/header/header.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/duplicates/light/header/header.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/duplicates/light/menu/menu.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/duplicates/light/menu/menu.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/duplicates/shadow/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/duplicates/shadow/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/duplicates/shadow/header/header.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/duplicates/shadow/header/header.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/duplicates/shadow/menu/menu.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/duplicates/shadow/menu/menu.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/lightContainer/lightContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/lightContainer/lightContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/lightDomElement/lightDomElement.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/lightDomElement/lightDomElement.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/lightLeaf/lightLeaf.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/lightLeaf/lightLeaf.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/lightLightSlot/lightLightSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/lightLightSlot/lightLightSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/lightShadowSlot/lightShadowSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/lightShadowSlot/lightShadowSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/shadowDomElement/shadowDomElement.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/shadowDomElement/shadowDomElement.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/shadowLeaf/shadowLeaf.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/shadowLeaf/shadowLeaf.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/shadowLightSlot/shadowLightSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/shadowLightSlot/shadowLightSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/shadowShadowSlot/shadowShadowSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/forwarding/x/shadowShadowSlot/shadowShadowSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/reactivity/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/reactivity/x/lightContainer/lightContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/reactivity/x/lightContainer/lightContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/reactivity/x/lightLeaf/lightLeaf.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/reactivity/x/lightLeaf/lightLeaf.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/reactivity/x/lightLightSlot/lightLightSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/reactivity/x/lightLightSlot/lightLightSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/reactivity/x/lightShadowSlot/lightShadowSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/reactivity/x/lightShadowSlot/lightShadowSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/reactivity/x/shadowLeaf/shadowLeaf.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/reactivity/x/shadowLeaf/shadowLeaf.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/reactivity/x/shadowLightSlot/shadowLightSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slot-fowarding/slots/reactivity/x/shadowLightSlot/shadowLightSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/basicSlot/basicSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/basicSlot/basicSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/conditionalSlot/conditionalSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/conditionalSlot/conditionalSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/conditionalSlotted/conditionalSlotted.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/conditionalSlotted/conditionalSlotted.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/dynamicChildren/dynamicChildren.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/dynamicChildren/dynamicChildren.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/forwardedSlot/forwardedSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/forwardedSlot/forwardedSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/forwardedSlotConsumer/forwardedSlotConsumer.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/forwardedSlotConsumer/forwardedSlotConsumer.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/lightConsumer/lightConsumer.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/lightConsumer/lightConsumer.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/lightContainer/lightContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/lightContainer/lightContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/shadowConsumer/shadowConsumer.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/shadowConsumer/shadowConsumer.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/shadowContainer/shadowContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/slotting/x/shadowContainer/shadowContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-global/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-global/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-global/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-global/x/one/one.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-global/x/one/one.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-global/x/one/one.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-global/x/shadow/shadow.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-global/x/shadow/shadow.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-global/x/two/two.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-global/x/two/two.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-multiple/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-multiple/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-multiple/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-multiple/x/one/one.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-multiple/x/one/one.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-multiple/x/one/one.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-multiple/x/two/two.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-multiple/x/two/two.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-multiple/x/two/two.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-with-host/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-with-host/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-with-host/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-with-host/x/one/one.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-with-host/x/one/one.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-with-host/x/one/one.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-with-host/x/shadow/shadow.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-with-host/x/shadow/shadow.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-with-host/x/two/two.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style-with-host/x/two/two.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style/x/one/one.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style/x/one/one.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style/x/one/one.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style/x/shadow/shadow.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style/x/shadow/shadow.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style/x/two/two.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/style/x/two/two.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow-styles/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow-styles/x/container/container.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow-styles/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow-styles/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow-styles/x/grandchild/grandchild.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow-styles/x/grandchild/grandchild.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow-styles/x/grandchild/grandchild.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow-styles/x/light/light.css create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow-styles/x/light/light.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow-styles/x/light/light.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow/x/consumer/consumer.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow/x/consumer/consumer.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow/x/lightContainer/lightContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow/x/lightContainer/lightContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow/x/shadowContainer/shadowContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/light-dom/synthetic-shadow/x/shadowContainer/shadowContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/basic/basic.html create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/basic/basic.js create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/caseVariants/caseVariants.html create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/caseVariants/caseVariants.js create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/computedKey/computedKey.html create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/computedKey/computedKey.js create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/executionContext/executionContext.html create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/executionContext/executionContext.js create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/ignored/ignored.html create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/ignored/ignored.js create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/lifecycle/lifecycle.html create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/lifecycle/lifecycle.js create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/lifecycleChild/lifecycleChild.html create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/lifecycleChild/lifecycleChild.js create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/publicProp/publicProp.html create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/publicProp/publicProp.js create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/rerender/rerender.html create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/rerender/rerender.js create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/rerenderLoop/rerenderLoop.html create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/rerenderLoop/rerenderLoop.js create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/spread/spread.html create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/spread/spread.js create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/valueEvaluationThrows/valueEvaluationThrows.html create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/valueEvaluationThrows/valueEvaluationThrows.js create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/valueNotFunction/valueNotFunction.html create mode 100644 packages/@lwc/integration-not-karma/test/lwc-on/x/valueNotFunction/valueNotFunction.js create mode 100644 packages/@lwc/integration-not-karma/test/misc/clean-dom/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/misc/cross-domain-iframe/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/misc/cross-domain-iframe/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/misc/cross-domain-iframe/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/misc/lifecycle-remove-disconnected/lifecycle-remove-disconnected.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/misc/lifecycle-remove-disconnected/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/misc/lifecycle-remove-disconnected/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/misc/lifecycle-remove-disconnected/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/misc/lifecycle-remove-disconnected/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/misc/object-rest-spread/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/misc/performance-timing/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/misc/performance-timing/user-timing-utils.js create mode 100644 packages/@lwc/integration-not-karma/test/misc/performance-timing/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/misc/performance-timing/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/misc/performance-timing/x/lifecycle/lifecycle.html create mode 100644 packages/@lwc/integration-not-karma/test/misc/performance-timing/x/lifecycle/lifecycle.js create mode 100644 packages/@lwc/integration-not-karma/test/misc/performance-timing/x/nested/nested.html create mode 100644 packages/@lwc/integration-not-karma/test/misc/performance-timing/x/nested/nested.js create mode 100644 packages/@lwc/integration-not-karma/test/misc/performance-timing/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/misc/performance-timing/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-api-version/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-api-version/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-api-version/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-api-version/x/useApiVersion60/useApiVersion60.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-api-version/x/useApiVersion60/useApiVersion60.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/LightningElement.shadowSupportMode/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/LightningElement.shadowSupportMode/x/any/any.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/LightningElement.shadowSupportMode/x/any2/any2.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/LightningElement.shadowSupportMode/x/invalid/invalid.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/LightningElement.shadowSupportMode/x/native/native.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/LightningElement.shadowSupportMode/x/valid/valid.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/composed-path/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/composed-path/x/test/component.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/composed-path/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/composed-path/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/reporting/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/reporting/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/reporting/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/reporting/x/light/light.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/reporting/x/light/light.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/reporting/x/native/native.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/reporting/x/native/native.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/reporting/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/reporting/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/restrictions/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/restrictions/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/restrictions/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/retargeting/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/retargeting/x/nativeChild/nativeChild.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/retargeting/x/nativeChild/nativeChild.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/retargeting/x/syntheticChild/syntheticChild.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/retargeting/x/syntheticChild/syntheticChild.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/retargeting/x/syntheticParent/syntheticParent.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/retargeting/x/syntheticParent/syntheticParent.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/scoped-ids/scoped-ids.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/scoped-ids/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/scoped-ids/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/shadowSupportModeReporting/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/shadowSupportModeReporting/x/any/any.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/shadowSupportModeReporting/x/native/native.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/shadowSupportModeReporting/x/none/none.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/shadowSupportModeReporting/x/reset/reset.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/slotting/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/slotting/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/slotting/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/slotting/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/slotting/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/grandparentAnyParentAnyChildAny/grandparentAnyParentAnyChildAny.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/grandparentAnyParentAnyChildAny/grandparentAnyParentAnyChildAny.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/grandparentAnyParentAnyChildReset/grandparentAnyParentAnyChildReset.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/grandparentAnyParentAnyChildReset/grandparentAnyParentAnyChildReset.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/grandparentAnyParentResetChildAny/grandparentAnyParentResetChildAny.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/grandparentAnyParentResetChildAny/grandparentAnyParentResetChildAny.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/grandparentAnyParentResetChildReset/grandparentAnyParentResetChildReset.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/grandparentAnyParentResetChildReset/grandparentAnyParentResetChildReset.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/grandparentResetParentAnyChildAny/grandparentResetParentAnyChildAny.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/grandparentResetParentAnyChildAny/grandparentResetParentAnyChildAny.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/grandparentResetParentAnyChildReset/grandparentResetParentAnyChildReset.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/grandparentResetParentAnyChildReset/grandparentResetParentAnyChildReset.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/grandparentResetParentResetChildAny/grandparentResetParentResetChildAny.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/grandparentResetParentResetChildAny/grandparentResetParentResetChildAny.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/grandparentResetParentResetChildReset/grandparentResetParentResetChildReset.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/grandparentResetParentResetChildReset/grandparentResetParentResetChildReset.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/leafAny/leafAny.css create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/leafAny/leafAny.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/leafAny/leafAny.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/leafReset/leafReset.css create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/leafReset/leafReset.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/leafReset/leafReset.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/parentAnyChildAny/parentAnyChildAny.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/parentAnyChildAny/parentAnyChildAny.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/parentAnyChildReset/parentAnyChildReset.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/parentAnyChildReset/parentAnyChildReset.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/parentLightChildAny/parentLightChildAny.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/parentLightChildAny/parentLightChildAny.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/parentLightChildReset/parentLightChildReset.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/parentLightChildReset/parentLightChildReset.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/parentResetChildAny/parentResetChildAny.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/parentResetChildAny/parentResetChildAny.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/parentResetChildReset/parentResetChildReset.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/x/parentResetChildReset/parentResetChildReset.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/transitivity/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/transitivity/x/lightContainer/lightContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/transitivity/x/lightContainer/lightContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/transitivity/x/native/native.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/transitivity/x/native/native.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/transitivity/x/nativeContainer/nativeContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/transitivity/x/nativeContainer/nativeContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/transitivity/x/resetExtendsAny/resetExtendsAny.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/transitivity/x/synthetic/synthetic.js create mode 100644 packages/@lwc/integration-not-karma/test/mixed-shadow-mode/transitivity/x/syntheticReset/syntheticReset.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/Event-methods/Event.composedPath.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/Event-methods/x/synthetic/synthetic.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/Event-properties/Event.target.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/Event-properties/x/NativeChild/NativeChild.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/Event-properties/x/NativeParent/NativeParent.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/Event-properties/x/lwcParent/lwcParent.html create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/Event-properties/x/lwcParent/lwcParent.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/HTMLSlotElement-properties/HTMLSlotElement.assignedElements.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/HTMLSlotElement-properties/HTMLSlotElement.assignedNodes.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/HTMLSlotElement-properties/x/NativeBasic/NativeBasic.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/HTMLSlotElement-properties/x/lwcParent/lwcParent.html create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/HTMLSlotElement-properties/x/lwcParent/lwcParent.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/children/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/children/x/slottable/slottable.html create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/children/x/slottable/slottable.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/force-shadow-migrate-mode/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/force-shadow-migrate-mode/x/native/native.html create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/force-shadow-migrate-mode/x/native/native.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/force-shadow-migrate-mode/x/styledLight/styledLight.css create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/force-shadow-migrate-mode/x/styledLight/styledLight.html create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/force-shadow-migrate-mode/x/styledLight/styledLight.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/force-shadow-migrate-mode/x/synthetic/synthetic.css create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/force-shadow-migrate-mode/x/synthetic/synthetic.html create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/force-shadow-migrate-mode/x/synthetic/synthetic.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/style/style.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/style/x/firstShadow/firstShadow.css create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/style/x/firstShadow/firstShadow.html create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/style/x/firstShadow/firstShadow.js create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/style/x/secondShadow/secondShadow.css create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/style/x/secondShadow/secondShadow.html create mode 100644 packages/@lwc/integration-not-karma/test/native-shadow/style/x/secondShadow/secondShadow.js create mode 100644 packages/@lwc/integration-not-karma/test/natives/array/array-splice-slice.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/natives/array/plain.array.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/natives/array/push-concat-unshift.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/natives/function/function.arguments.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/natives/json/json.stringify.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/natives/misc/enumerable-properties.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/natives/object/object.assign.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/natives/object/object.entries.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/natives/object/object.keys.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/natives/object/object.setPrototypeOf.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/natives/object/object.values.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/natives/weak-set/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/aria-properties/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/aria-properties/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/aria-properties/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/click-event-composed/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/click-event-composed/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/click-event-composed/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/custom-event-composed/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/document-body-properties/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/document-body-properties/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/document-body-properties/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/document-body-properties/x/uniqueTagName/uniqueTagName.html create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/document-body-properties/x/uniqueTagName/uniqueTagName.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/document-properties/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/document-properties/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/document-properties/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/document-properties/x/uniqueTagName/uniqueTagName.html create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/document-properties/x/uniqueTagName/uniqueTagName.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/document-properties/x/withLwcDomManual/withLwcDomManual.html create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/document-properties/x/withLwcDomManual/withLwcDomManual.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/event-composed/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/html-collection/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/html-collection/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/html-collection/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/node-list/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/node-list/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/node-list/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/proxy-concat/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/shadow-root/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/shadow-root/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/shadow-root/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/text-content/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/text-content/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/polyfills/text-content/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/profiler/mutation-logging/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/profiler/mutation-logging/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/profiler/mutation-logging/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/profiler/mutation-logging/x/getterThrows/getterThrows.html create mode 100644 packages/@lwc/integration-not-karma/test/profiler/mutation-logging/x/getterThrows/getterThrows.js create mode 100644 packages/@lwc/integration-not-karma/test/profiler/mutation-logging/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/profiler/mutation-logging/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/profiler/sanity/profiler.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/profiler/sanity/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/profiler/sanity/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/profiler/sanity/x/errorChild/errorChild.html create mode 100644 packages/@lwc/integration-not-karma/test/profiler/sanity/x/errorChild/errorChild.js create mode 100644 packages/@lwc/integration-not-karma/test/profiler/sanity/x/item/item.html create mode 100644 packages/@lwc/integration-not-karma/test/profiler/sanity/x/item/item.js create mode 100644 packages/@lwc/integration-not-karma/test/profiler/sanity/x/light/light.html create mode 100644 packages/@lwc/integration-not-karma/test/profiler/sanity/x/light/light.js create mode 100644 packages/@lwc/integration-not-karma/test/profiler/sanity/x/simple/simple.html create mode 100644 packages/@lwc/integration-not-karma/test/profiler/sanity/x/simple/simple.js create mode 100644 packages/@lwc/integration-not-karma/test/reactivity/render/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/reactivity/render/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/reactivity/render/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/regression/invalid-key/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/regression/invalid-key/x/conditionalList/conditionalList.html create mode 100644 packages/@lwc/integration-not-karma/test/regression/invalid-key/x/conditionalList/conditionalList.js create mode 100644 packages/@lwc/integration-not-karma/test/regression/style-newline/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/regression/style-newline/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/regression/style-newline/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/adjacent-text-and-comments/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/adjacent-text-and-comments/x/ignore/ignore.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/adjacent-text-and-comments/x/ignore/ignore.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/adjacent-text-and-comments/x/preserve/preserve.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/adjacent-text-and-comments/x/preserve/preserve.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/leaf/leaf.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/lightContainer/lightContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/lightContainer/lightContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/lightContainerMultipleConditionals/lightContainerMultipleConditionals.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/lightContainerMultipleConditionals/lightContainerMultipleConditionals.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/lightLeaf/lightLeaf.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/lightParent/lightParent.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/lightParent/lightParent.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/lightShadowParent/lightShadowParent.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/lightShadowParent/lightShadowParent.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/lightSlotMultipleConditionals/lightSlotMultipleConditionals.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/lightSlotMultipleConditionals/lightSlotMultipleConditionals.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/multiTemplateConditionals/multiTemplateConditionals.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/multiTemplateConditionals/template.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/multiTemplateConditionals/template2.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/shadowContainer/shadowContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/shadowContainer/shadowContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/shadowContainerMultipleConditionals/shadowContainerMultipleConditionals.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/shadowContainerMultipleConditionals/shadowContainerMultipleConditionals.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/shadowLightParent/shadowLightParent.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/shadowLightParent/shadowLightParent.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/shadowParent/shadowParent.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/shadowParent/shadowParent.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/shadowSlotConditionals/shadowSlotConditionals.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/shadowSlotConditionals/shadowSlotConditionals.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/toggleContainer/toggleContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/toggleContainer/toggleContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/toggleParent/toggleParent.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/x/toggleParent/toggleParent.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/disconnecting-root-vm/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/disconnecting-root-vm/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/disconnecting-root-vm/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/disconnecting-root-vm/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/disconnecting-root-vm/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/duplicate-text-rendering/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/duplicate-text-rendering/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/duplicate-text-rendering/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-childrens-inside-if/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-childrens-inside-if/x/dynamic/dynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-childrens-inside-if/x/dynamic/dynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-childrens-inside-if/x/forEachCmp/forEachCmp.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-childrens-inside-if/x/forEachCmp/forEachCmp.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-childrens-inside-if/x/lwcDynamic/lwcDynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-childrens-inside-if/x/lwcDynamic/lwcDynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/x/bigint/bigint.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/x/bigint/bigint.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/x/bigintchild/bigintchild.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/x/bigintchild/bigintchild.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/x/emptyobject/emptyobject.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/x/emptyobject/emptyobject.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/x/lightChild/lightChild.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/x/lightChild/lightChild.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/x/lightParent/lightParent.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/x/lightParent/lightParent.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/x/symbol/symbol.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/dynamic-slots/x/symbol/symbol.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/element-orders/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/element-orders/x/slotFallback/slotFallback.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/element-orders/x/slotFallback/slotFallback.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/element-orders/x/withDynamic/withDynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/element-orders/x/withDynamic/withDynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/element-orders/x/withEach/withEach.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/element-orders/x/withEach/withEach.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/element-orders/x/withLwcDynamic/withLwcDynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/element-orders/x/withLwcDynamic/withLwcDynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/elements-are-not-recycled/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/elements-are-not-recycled/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/elements-are-not-recycled/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/elements-are-not-recycled/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/elements-are-not-recycled/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/elements-are-not-recycled/x/simple/simple.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/elements-are-not-recycled/x/simple/simple.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/elements-are-not-recycled/x/simple/simple.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/form-tag/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/form-tag/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/form-tag/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/fragment-cache/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/fragment-cache/x/nativeScopedStyles/nativeScopedStyles.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/fragment-cache/x/nativeStyles/nativeStyles.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/fragment-cache/x/noStyles/noStyles.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/fragment-cache/x/scopedStyles/scopedStyles.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/fragment-cache/x/styles/styles.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/fragment-cache/x/stylesheets/scopedStyles.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/fragment-cache/x/stylesheets/styles.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/fragment-cache/x/template/template.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/if-inside-custom-render/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/if-inside-custom-render/x/customRender/customRender.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/if-inside-custom-render/x/customRender/template.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/if-inside-custom-render/x/customRender/template2.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/iframe/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/iframe/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/iframe/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/inheritance/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/inheritance/x/bar/bar.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/inheritance/x/base/base.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/inheritance/x/base/base.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/inheritance/x/foo/foo.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/inheritance/x/foo/foo.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/inner-outer-html/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/inner-outer-html/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/inner-outer-html/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/inner-outer-html/x/inner/inner.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/inner-outer-html/x/inner/inner.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/inner-outer-html/x/outer/outer.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/inner-outer-html/x/outer/outer.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/input/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/input/x/dynamic/dynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/input/x/dynamic/dynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/input/x/static/static.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/input/x/static/static.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/input/x/updatable/updatable.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/input/x/updatable/updatable.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/issue-3377/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/issue-3377/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/issue-3377/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/issue-3396/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/issue-3396/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/issue-3396/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/issue-4889/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/issue-4889/x/data/data.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/issue-4889/x/row/row.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/issue-4889/x/row/row.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/issue-4889/x/table/table.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/issue-4889/x/table/table.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/iteration/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/iteration/x/forEach/forEach.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/iteration/x/forEach/forEach.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/iteration/x/inlineForEach/inlineForEach.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/iteration/x/inlineForEach/inlineForEach.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/iteration/x/inlineIterator/inlineIterator.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/iteration/x/inlineIterator/inlineIterator.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/iteration/x/item/item.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/iteration/x/item/item.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/iteration/x/iterator/iterator.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/iteration/x/iterator/iterator.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/key-outside-iteration/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/key-outside-iteration/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/key-outside-iteration/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/key-outside-iteration/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/key-outside-iteration/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/key-outside-iteration/x/parentWithIf/parentWithIf.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/key-outside-iteration/x/parentWithIf/parentWithIf.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/key-outside-iteration/x/parentWithIfInverted/parentWithIfInverted.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/key-outside-iteration/x/parentWithIfInverted/parentWithIfInverted.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/key-outside-iteration/x/parentWithIfPreceded/parentWithIfPreceded.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/key-outside-iteration/x/parentWithIfPreceded/parentWithIfPreceded.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/key-outside-iteration/x/parentWithIfPrecededInverted/parentWithIfPrecededInverted.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/key-outside-iteration/x/parentWithIfPrecededInverted/parentWithIfPrecededInverted.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-scope-tokens/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-scope-tokens/x/light/light.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-scope-tokens/x/light/light.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-scope-tokens/x/light/light.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-scope-tokens/x/light/light.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-scope-tokens/x/shadow/shadow.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-scope-tokens/x/shadow/shadow.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-scope-tokens/x/shadow/shadow.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-scope-tokens/x/shadow/shadow.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-stylesheet-api/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-stylesheet-api/x/inspectStylesheets/inspectStylesheets.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-stylesheet-api/x/inspectStylesheets/withStylesheet.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-stylesheet-api/x/inspectStylesheets/withStylesheet.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-stylesheet-api/x/inspectStylesheets/withoutStylesheet.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-stylesheet-api/x/patchesStylesheet/patchesStylesheet.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-stylesheet-api/x/patchesStylesheet/withStylesheet.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-stylesheet-api/x/patchesStylesheet/withStylesheet.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-stylesheet-api/x/patchesStylesheet/withoutStylesheet.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-stylesheet-api/x/patchesStylesheetOnStylesheet/a.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-stylesheet-api/x/patchesStylesheetOnStylesheet/a.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-stylesheet-api/x/patchesStylesheetOnStylesheet/b.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-stylesheet-api/x/patchesStylesheetOnStylesheet/b.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/legacy-stylesheet-api/x/patchesStylesheetOnStylesheet/patchesStylesheetOnStylesheet.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/light/chic.native-only.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/light/glamorous.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/light/hip.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/light/light.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/light/light.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/light/light.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/light/light.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/light/snazzy.native-only.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/shadow/chic.native-only.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/shadow/glamorous.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/shadow/hip.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/shadow/shadow.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/shadow/shadow.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/shadow/shadow.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/shadow/shadow.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/shadow/snazzy.native-only.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/styleLibrary/bar.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/styleLibrary/foo.native-only.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/native-only-css/x/styleLibrary/styleLibrary.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/nested-state/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/nested-state/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/nested-state/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/noframes/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/noframes/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/noframes/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/null-logging/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/null-logging/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/null-logging/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/basic/basic.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/basic/basic.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/basic/stylesheet.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/direct/direct.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/direct/direct.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/direct/stylesheet.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/implicit/implicit.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/implicit/implicit.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/implicit/implicit.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/implicit/stylesheet.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/inherit/inherit.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/inherit/inherit.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/inherit/stylesheet.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/inheritFromLightningElement/inheritFromLightningElement.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/inheritFromLightningElement/inheritFromLightningElement.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/inheritFromLightningElement/stylesheet.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/invalid/invalid.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/invalid/invalid.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/invalid2/invalid2.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/invalid2/invalid2.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/invalid3/invalid3.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/invalid3/invalid3.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/mixedScopedAndUnscoped/a.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/mixedScopedAndUnscoped/b.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/mixedScopedAndUnscoped/c.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/mixedScopedAndUnscoped/mixedScopedAndUnscoped.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/mixedScopedAndUnscoped/mixedScopedAndUnscoped.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multi/a.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multi/a.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multi/b.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multi/b.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multi/multi.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multi/stylesheet.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multiScoped/a.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multiScoped/a.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multiScoped/b.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multiScoped/b.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multiScoped/multiScoped.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multiScoped/stylesheet.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multiStyles/a.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multiStyles/b.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multiStyles/c.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multiStyles/multiStyles.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/multiStyles/multiStyles.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/scoped/scoped.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/scoped/scoped.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/scoped/stylesheet.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/stylesheetsMutation/stylesheet.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/stylesheetsMutation/stylesheetsMutation.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/stylesheetsMutation/stylesheetsMutation.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/super/stylesheet.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/super/super.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/programmatic-stylesheets/x/super/super.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/sanitize-stylesheet-token/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/sanitize-stylesheet-token/x/component/component.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/sanitize-stylesheet-token/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/sanitize-stylesheet-token/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/sanitize-stylesheet-token/x/scoping/scoping.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/sanitize-stylesheet-token/x/scoping/scoping.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/sanitize-stylesheet-token/x/scoping/scoping.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/scoped-styles-with-existing-class/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/scoped-styles-with-existing-class/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/scoped-styles-with-existing-class/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/scoped-styles-with-existing-class/x/component/component.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/sequential-reordering/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/sequential-reordering/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/sequential-reordering/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/side-effects/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/side-effects/x/childWithApiGetterSetter/childWithApiGetterSetter.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/side-effects/x/childWithApiGetterSetter/childWithApiGetterSetter.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/side-effects/x/sideEffectDuringRender/sideEffectDuringRender.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/side-effects/x/sideEffectDuringRender/sideEffectDuringRender.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/side-effects/x/sideEffectDuringRenderExternal/sideEffectDuringRenderExternal.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/side-effects/x/sideEffectDuringRenderExternal/sideEffectDuringRenderExternal.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/side-effects/x/sideEffectDuringTemplate/sideEffectDuringTemplate.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/side-effects/x/sideEffectDuringTemplate/sideEffectDuringTemplate.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/side-effects/x/sideEffectDuringTemplateExternal/sideEffectDuringTemplateExternal.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/side-effects/x/sideEffectDuringTemplateExternal/sideEffectDuringTemplateExternal.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/light/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/light/x/inner/inner.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/light/x/inner/inner.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/light/x/outer/outer.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/light/x/outer/outer.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/shadow/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/shadow/x/inner/inner.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/shadow/x/inner/inner.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/shadow/x/outer/outer.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/shadow/x/outer/outer.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/light/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/light/x/inner/inner.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/light/x/inner/inner.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/light/x/outer/outer.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/light/x/outer/outer.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/shadow/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/shadow/x/inner/inner.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/shadow/x/inner/inner.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/shadow/x/outer/outer.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/shadow/x/outer/outer.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/light/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/light/x/inner/inner.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/light/x/inner/inner.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/light/x/outer/outer.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/light/x/outer/outer.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/shadow/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/shadow/x/inner/inner.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/shadow/x/inner/inner.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/shadow/x/outer/outer.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/shadow/x/outer/outer.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/light/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/light/x/inner/inner.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/light/x/inner/inner.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/light/x/outer/outer.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/light/x/outer/outer.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/shadow/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/shadow/x/inner/inner.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/shadow/x/inner/inner.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/shadow/x/outer/outer.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/shadow/x/outer/outer.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotted-text-diffing/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotted-text-diffing/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotted-text-diffing/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotted-text-diffing/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotted-text-diffing/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/fallbackContentReuseChild/fallbackContentReuseChild.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/fallbackContentReuseChild/fallbackContentReuseChild.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/fallbackContentReuseDynamicKeyChild/fallbackContentReuseDynamicKeyChild.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/fallbackContentReuseDynamicKeyChild/fallbackContentReuseDynamicKeyChild.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/fallbackContentReuseDynamicKeyParent/fallbackContentReuseDynamicKeyParent.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/fallbackContentReuseDynamicKeyParent/fallbackContentReuseDynamicKeyParent.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/fallbackContentReuseParent/fallbackContentReuseParent.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/fallbackContentReuseParent/fallbackContentReuseParent.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/regressionContainer/regressionContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/regressionContainer/regressionContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/regressionSlot/regressionSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/regressionSlot/regressionSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/renderCountChild/renderCountChild.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/renderCountChild/renderCountChild.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/renderCountParent/renderCountParent.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/renderCountParent/renderCountParent.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/unknownSlotLight/unknownSlotLight.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/unknownSlotLight/unknownSlotLight.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/unknownSlotLightChild/unknownSlotLightChild.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/unknownSlotLightChild/unknownSlotLightChild.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/unknownSlotShadow/unknownSlotShadow.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/unknownSlotShadow/unknownSlotShadow.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/unknownSlotShadowChild/unknownSlotShadowChild.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/slotting/x/unknownSlotShadowChild/unknownSlotShadowChild.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/static-props-attrs/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/static-props-attrs/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/static-props-attrs/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/static-props-attrs/x/other/other.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/static-props-attrs/x/other/other.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/style-class-whitespace/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/style-class-whitespace/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/style-class-whitespace/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/style-specificity-important/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/style-specificity-important/x/component/component.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/style-specificity-important/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/style-specificity-important/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheet-caching/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheet-caching/x/light/light.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheet-caching/x/light/light.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheet-caching/x/light/light.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheet-caching/x/shadow/shadow.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheet-caching/x/shadow/shadow.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheet-caching/x/shadow/shadow.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheets/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheets/x/component/component.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheets/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheets/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheets/x/identicalComponent/identicalComponent.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheets/x/identicalComponent/identicalComponent.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheets/x/identicalComponent/identicalComponent.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheets/x/shared.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheets/x/sharing1/sharing1.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheets/x/sharing1/sharing1.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheets/x/sharing1/sharing1.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheets/x/sharing2/sharing2.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheets/x/sharing2/sharing2.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/stylesheets/x/sharing2/sharing2.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/table-diffing/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/table-diffing/x/row/row.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/table-diffing/x/row/row.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/table-diffing/x/table/table.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/table-diffing/x/table/table.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/version-mismatch/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/version-mismatch/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/version-mismatch/x/componentWithProp/componentWithProp.js create mode 100644 packages/@lwc/integration-not-karma/test/rendering/version-mismatch/x/componentWithTemplateAndStylesheet/componentWithTemplateAndStylesheet.css create mode 100644 packages/@lwc/integration-not-karma/test/rendering/version-mismatch/x/componentWithTemplateAndStylesheet/componentWithTemplateAndStylesheet.html create mode 100644 packages/@lwc/integration-not-karma/test/rendering/version-mismatch/x/componentWithTemplateAndStylesheet/componentWithTemplateAndStylesheet.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Document-properties/leak-tests.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Document-properties/x/leak/leak.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Document-properties/x/leak/leak.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentFragment-properties/DocumentFragment.querySelector.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentFragment-properties/DocumentFragment.querySelectorAll.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentFragment-properties/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentFragment-properties/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentFragment-properties/x/slotted/slotted.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentFragment-properties/x/slotted/slotted.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentFragment-properties/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentFragment-properties/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentOrShadowRoot-properties/DocumentOrShadowRoot.activeElement.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentOrShadowRoot-properties/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentOrShadowRoot-properties/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentOrShadowRoot-properties/x/slottedInput/slottedInput.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentOrShadowRoot-properties/x/slottedInput/slottedInput.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentOrShadowRoot-properties/x/withInput/withInput.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentOrShadowRoot-properties/x/withInput/withInput.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentOrShadowRoot-properties/x/withInputDeep/withInputDeep.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentOrShadowRoot-properties/x/withInputDeep/withInputDeep.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentOrShadowRoot-properties/x/withLwcDomManual/withLwcDomManual.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/DocumentOrShadowRoot-properties/x/withLwcDomManual/withLwcDomManual.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/Element.assignedSlot.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/Element.id.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/Element.innerHTML.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/Element.outerHTML.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/Element.setAttribute.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/customElementAsDefaultSlot/customElementAsDefaultSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/customElementAsDefaultSlot/customElementAsDefaultSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/customElementIdValueEmpty/customElementIdValueEmpty.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/customElementIdValueEmpty/customElementIdValueEmpty.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/customElementIdValueUndefined/customElementIdValueUndefined.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/customElementIdValueUndefined/customElementIdValueUndefined.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/idValueEmpty/idValueEmpty.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/idValueEmpty/idValueEmpty.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/idValueUndefined/idValueUndefined.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/idValueUndefined/idValueUndefined.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/namedSlot/namedSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/namedSlot/namedSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/nested/nested.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/nested/nested.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/nestedFallback/nestedFallback.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/nestedFallback/nestedFallback.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/noSlot/noSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/noSlot/noSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/simpleParent/simpleParent.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/simpleParent/simpleParent.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/slot/slot.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/slot/slot.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/slotsInSlots/slotsInSlots.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/slotsInSlots/slotsInSlots.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/slotted/slotted.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/slotted/slotted.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/slottedCustomElement/slottedCustomElement.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/slottedCustomElement/slottedCustomElement.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/testWithDiv/testWithDiv.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/testWithDiv/testWithDiv.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/textSlotted/textSlotted.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/x/textSlotted/textSlotted.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Event-methods/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Event-methods/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Event-methods/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Event-methods/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Event-methods/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Event-properties/Event.currentTarget.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Event-properties/Event.defaultPrevented.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Event-properties/Event.target.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Event-properties/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Event-properties/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Event-properties/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Event-properties/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/EventTarget-methods/EventTarget.addEventListener.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/EventTarget-methods/EventTarget.dispatchEvent.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/EventTarget-methods/EventTarget.removeEventListener.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/EventTarget-methods/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/EventTarget-methods/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/CustomInstanceSetter.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/GlobalHTML.properties.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/accessAttributeInConstructor/accessAttributeInConstructor.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/accessAttributeInConstructor/accessAttributeInConstructor.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/attributeIsReactive/attributeIsReactive.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/attributeIsReactive/attributeIsReactive.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/attributeMutations/attributeMutations.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/attributeMutations/attributeMutations.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/attributeSetInConstructor/attributeSetInConstructor.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/attributeSetInConstructor/attributeSetInConstructor.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/customInstanceSetter/customInstanceSetter.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/customInstanceSetter/customInstanceSetter.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/nonReflectedTabIndex/nonReflectedTabIndex.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/nonReflectedTabIndex/nonReflectedTabIndex.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/reflectedTabIndex/reflectedTabIndex.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/reflectedTabIndex/reflectedTabIndex.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/setAttribute/setAttribute.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/setAttribute/setAttribute.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/tabIndexSetInConnectedCallback/tabIndexSetInConnectedCallback.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/tabIndexSetInConnectedCallback/tabIndexSetInConnectedCallback.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/tabIndexSetInConstructor/tabIndexSetInConstructor.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/tabIndexSetInConstructor/tabIndexSetInConstructor.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/tabIndexSetInRender/tabIndexSetInRender.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/tabIndexSetInRender/tabIndexSetInRender.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/tabIndexTester/tabIndexTester.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/tabIndexTester/tabIndexTester.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLElement-properties/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-events/HTMLSlotElement.slotchange.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-events/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-events/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-events/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-events/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/HTMLSlotElement-assigned.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/HTMLSlotElement.name.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/x/basic/basic.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/x/basic/basic.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/x/complex/complex.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/x/complex/complex.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/x/complexBottom/complexBottom.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/x/complexBottom/complexBottom.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/x/complexTop/complexTop.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/x/complexTop/complexTop.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/x/noDirectChild/noDirectChild.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/x/noDirectChild/noDirectChild.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/x/slotsInSlots/slotsInSlots.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/x/slotsInSlots/slotsInSlots.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/MutationObserver/MutationObserver.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/MutationObserver/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/MutationObserver/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/MutationObserver/x/nestedSlot/nestedSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/MutationObserver/x/nestedSlot/nestedSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/MutationObserver/x/nestedSlotContainer/nestedSlotContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/MutationObserver/x/nestedSlotContainer/nestedSlotContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/MutationObserver/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/MutationObserver/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/MutationObserver/x/slottedChild/slottedChild.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/MutationObserver/x/slottedChild/slottedChild.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/MutationObserver/x/templateMutations/templateMutations.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/MutationObserver/x/templateMutations/templateMutations.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/Node.childNodes.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/Node.cloneNode.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/Node.compareDocumentPosition.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/Node.contains.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/Node.firstChild.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/Node.getRootNode.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/Node.hasChildNodes.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/Node.isConnected.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/Node.lastChild.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/Node.parentElement.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/Node.parentNode.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/Node.textContent.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/complexCloneNode/complexCloneNode.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/complexCloneNode/complexCloneNode.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/complexSlotted/complexSlotted.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/complexSlotted/complexSlotted.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/dynamicText/dynamicText.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/dynamicText/dynamicText.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/empty/empty.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/empty/empty.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/hasNoSlot/hasNoSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/hasNoSlot/hasNoSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/hasSlot/hasSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/hasSlot/hasSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/manualNodes/manualNodes.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/manualNodes/manualNodes.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/simpleParent/simpleParent.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/simpleParent/simpleParent.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/slotted/slotted.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/slotted/slotted.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/slottedParent/slottedParent.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/slottedParent/slottedParent.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/text/text.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/text/text.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/textSlottedParent/textSlottedParent.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/textSlottedParent/textSlottedParent.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/unslottedParent/unslottedParent.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/unslottedParent/unslottedParent.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/withLwcDomManual/withLwcDomManual.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/withLwcDomManual/withLwcDomManual.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/withLwcDomManual/withLwcDomManual.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/withLwcDomManualNested/withLwcDomManualNested.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/withLwcDomManualNested/withLwcDomManualNested.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/withoutLwcDomManual/withoutLwcDomManual.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/x/withoutLwcDomManual/withoutLwcDomManual.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ParentNode-properties/ParentNode.childElementCount.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ParentNode-properties/ParentNode.children.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ParentNode-properties/ParentNode.firstElementChild.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ParentNode-properties/ParentNode.lastElementChild.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ParentNode-properties/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ParentNode-properties/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ParentNode-properties/x/empty/empty.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ParentNode-properties/x/empty/empty.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ParentNode-properties/x/slotted/slotted.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ParentNode-properties/x/slotted/slotted.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ParentNode-properties/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ParentNode-properties/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ParentNode-properties/x/text/text.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ParentNode-properties/x/text/text.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot-properties/ShadowRoot.delegatesFocus.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot-properties/ShadowRoot.host.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot-properties/ShadowRoot.innerHTML.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot-properties/ShadowRoot.mode.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot-properties/ShadowRoot.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot-properties/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot-properties/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot-properties/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot-properties/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.dispatchEvent/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.dispatchEvent/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.dispatchEvent/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.dispatchEvent/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.dispatchEvent/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/child/child.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/container/container.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/grandparent/grandparent.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/grandparent/grandparent.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/grandparent/grandparent.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/parent/parent.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/slottable/slottable.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/slottable/slottable.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/slottable/slottable.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/slotted/slotted.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/slotted/slotted.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/x/slotted/slotted.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/component/component.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/light/light.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/light/light.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/light/light.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/shadowContainer/shadowContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/shadowContainer/shadowContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/event-post-dispatch.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/propagation.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/button/button.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/button/button.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/buttonGroup/buttonGroup.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/buttonGroup/buttonGroup.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/buttonGroupInternal/buttonGroupInternal.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/buttonGroupInternal/buttonGroupInternal.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/issue-1090.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/slotted/slotted.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/slotted/slotted.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/@x/component/component.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/@x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/@x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/x#y/component/component.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/x#y/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/x#y/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/a.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/a.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/b.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/b.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/multi.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multiNoStyleInFirst/a.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multiNoStyleInFirst/b.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multiNoStyleInFirst/b.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multiNoStyleInFirst/multiNoStyleInFirst.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/anotherChild/anotherChild.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/anotherChild/anotherChild.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/grandparent/grandparent.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/grandparent/grandparent.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/grandparent/grandparent.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/host/host.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/host/host.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/host/host.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/a.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/a.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/b.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/b.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/multiTemplates.js create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/parent/parent.css create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/duplicateSignalOnTemplate/duplicateSignalOnTemplate.html create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/duplicateSignalOnTemplate/duplicateSignalOnTemplate.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/list/list.html create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/list/list.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/nonReactive/nonReactive.html create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/nonReactive/nonReactive.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/reactive/reactive.html create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/reactive/reactive.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/signal/signal.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/throws/throws.html create mode 100644 packages/@lwc/integration-not-karma/test/signal/protocol/x/throws/throws.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/reactivity/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/reactivity/x/explicitSubscribe/explicitSubscribe.html create mode 100644 packages/@lwc/integration-not-karma/test/signal/reactivity/x/explicitSubscribe/explicitSubscribe.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/reactivity/x/list/list.html create mode 100644 packages/@lwc/integration-not-karma/test/signal/reactivity/x/list/list.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/reactivity/x/nonReactive/nonReactive.html create mode 100644 packages/@lwc/integration-not-karma/test/signal/reactivity/x/nonReactive/nonReactive.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/reactivity/x/reactive/reactive.html create mode 100644 packages/@lwc/integration-not-karma/test/signal/reactivity/x/reactive/reactive.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/reactivity/x/reactiveSubscriber/reactiveSubscriber.html create mode 100644 packages/@lwc/integration-not-karma/test/signal/reactivity/x/reactiveSubscriber/reactiveSubscriber.js create mode 100644 packages/@lwc/integration-not-karma/test/signal/reactivity/x/signal/signal.js create mode 100644 packages/@lwc/integration-not-karma/test/spread/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/spread/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/spread/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/spread/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/spread/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/attribute/attribute.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/attribute/attribute.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/comments/comments.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/comments/comments.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/component/component.css create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/deepAttribute/deepAttribute.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/deepAttribute/deepAttribute.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/deepListener/deepListener.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/deepListener/deepListener.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/escape/escape.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/escape/escape.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/iframeOnload/iframeOnload.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/iframeOnload/iframeOnload.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/listenerStaticWithUpdates/listenerStaticWithUpdates.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/listenerStaticWithUpdates/listenerStaticWithUpdates.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/a.css create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/a.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/b.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/b.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/multipleStyles.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/native/native.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/native/native.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListener/onlyEventListener.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListener/onlyEventListener.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListenerChild/onlyEventListenerChild.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListenerChild/onlyEventListenerChild.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListenerGrandchild/onlyEventListenerGrandchild.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListenerGrandchild/onlyEventListenerGrandchild.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/preserveComments/preserveComments.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/preserveComments/preserveComments.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/staticUnsafeTopLevel/staticUnsafeTopLevel.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/staticUnsafeTopLevel/staticUnsafeTopLevel.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/svgNs/svgNs.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/svgNs/svgNs.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/svgPath/svgPath.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/svgPath/svgPath.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/svgPathInDiv/svgPathInDiv.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/svgPathInDiv/svgPathInDiv.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/svgPathInG/svgPathInG.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/svgPathInG/svgPathInG.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/table/table.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/table/table.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/tableWithExpressions/tableWithExpressions.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/tableWithExpressions/tableWithExpressions.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/text/text.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/text/text.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/textWithPreserveComments/textWithPreserveComments.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/textWithPreserveComments/textWithPreserveComments.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/textWithoutPreserveComments/textWithoutPreserveComments.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/textWithoutPreserveComments/textWithoutPreserveComments.js create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/withKey/withKey.html create mode 100644 packages/@lwc/integration-not-karma/test/static-content/x/withKey/withKey.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/components/base/a/a.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/components/base/a/a.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/components/base/b/b.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/components/base/b/b.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/components/base/c/c.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/components/base/c/c.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/components/base/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/components/base/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/components/base/d/d.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/components/base/d/d.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/components/base/e/e.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/components/base/e/e.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/components/base/libraryx/libraryx.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/components/base/libraryz/libraryz.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/components/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/inline.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/none.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/simple.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/simple.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/simple.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/staleProp.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/staleProp.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/staleProp.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/stylesV2.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/stylesV3.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/asStatic.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/asStaticV2.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/usesStaticStylesheets.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/usesStaticStylesheets.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/usesStaticStylesheets.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/inline.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/none.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/simple.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/simple.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/simple.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/staleProp.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/staleProp.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/staleProp.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/stylesV2.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/stylesV3.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/asStatic.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/asStaticV2.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/usesStaticStylesheets.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/usesStaticStylesheets.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/usesStaticStylesheets.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/identicalStylesheets.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/identicalStylesheets.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/identicalStylesheets.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/newStyle.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/newTemplate.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/style.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheetsContainer/identicalStylesheetsContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheetsContainer/identicalStylesheetsContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/inline.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/none.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/simple.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/simple.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/simple.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/staleProp.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/staleProp.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/staleProp.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/stylesV2.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/stylesV3.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/asStatic.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/asStaticV2.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/usesStaticStylesheets.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/usesStaticStylesheets.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/usesStaticStylesheets.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/x/library/library.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserA/libraryUserA.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserA/libraryUserA.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserA/libraryUserA.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserA/styleV2.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserB/libraryUserB.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserB/libraryUserB.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserB/libraryUserB.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserB/styleV2.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryV2/libraryV2.css create mode 100644 packages/@lwc/integration-not-karma/test/swapping/templates/base/advanced/advanced.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/templates/base/advanced/advanced.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/templates/base/simple/simple.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/templates/base/simple/simple.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/templates/base/views/first.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/templates/base/views/second.html create mode 100644 packages/@lwc/integration-not-karma/test/swapping/templates/base/views/views.js create mode 100644 packages/@lwc/integration-not-karma/test/swapping/templates/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/x/source/source.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/x/source/source.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/x/target/target.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/x/target/target.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/add-event-listener/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/add-event-listener/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/add-event-listener/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/disable-synthetic-shadow/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/disable-synthetic-shadow/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/styled/styled.css create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/styled/styled.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/styled/styled.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/unstyled/unstyled.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/unstyled/unstyled.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/element-api.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/parentSpecialized/parentSpecialized.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/parentSpecialized/parentSpecialized.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/slotContainer/slotContainer.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/slotContainer/slotContainer.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/withSlot/withSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/withSlot/withSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/global-styles/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/global-styles/x/component/component.css create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/global-styles/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/global-styles/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/invalid/invalid.css create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/invalid/invalid.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/invalid/invalid.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/invalid/invalid.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/valid/valid.css create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/valid/valid.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/valid/valid.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/valid/valid.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/inner-outer-text/inner-outer-text.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/inner-outer-text/x/container/container.css create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/inner-outer-text/x/container/container.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/inner-outer-text/x/container/container.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/inner-outer-text/x/grandChild/grandChild.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/inner-outer-text/x/grandChild/grandChild.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/inner-outer-text/x/slotable/slotable.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/inner-outer-text/x/slotable/slotable.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/keyframes-vendor-prefix/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/keyframes-vendor-prefix/x/a/a.css create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/keyframes-vendor-prefix/x/a/a.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/keyframes-vendor-prefix/x/a/a.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/keyframes/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/keyframes/x/a/a.css create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/keyframes/x/a/a.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/keyframes/x/a/a.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/keyframes/x/b/b.css create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/keyframes/x/b/b.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/keyframes/x/b/b.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/aria.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/href.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/multiple-idrefs.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/svg.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/ariaBooleanTrue/ariaBooleanTrue.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/ariaBooleanTrue/ariaBooleanTrue.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/ariaDynamic/ariaDynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/ariaDynamic/ariaDynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/ariaEmptyString/ariaEmptyString.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/ariaEmptyString/ariaEmptyString.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/ariaStatic/ariaStatic.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/ariaStatic/ariaStatic.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/hrefBooleanTrue/hrefBooleanTrue.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/hrefBooleanTrue/hrefBooleanTrue.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/hrefBooleanTrueNoId/hrefBooleanTrueNoId.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/hrefBooleanTrueNoId/hrefBooleanTrueNoId.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/hrefDangling/hrefDangling.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/hrefDangling/hrefDangling.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/hrefDynamic/hrefDynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/hrefDynamic/hrefDynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/hrefDynamicEmptyString/hrefDynamicEmptyString.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/hrefDynamicEmptyString/hrefDynamicEmptyString.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/hrefDynamicNull/hrefDynamicNull.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/hrefDynamicNull/hrefDynamicNull.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/hrefDynamicUndefined/hrefDynamicUndefined.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/hrefDynamicUndefined/hrefDynamicUndefined.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/hrefStatic/hrefStatic.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/hrefStatic/hrefStatic.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/multipleIdrefs/multipleIdrefs.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/multipleIdrefs/multipleIdrefs.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/svg/svg.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/scoped-id/x/svg/svg.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/shadow-root-instanceof/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/shadow-root-instanceof/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/shadow-token/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticSvg/staticSvg.css create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticSvg/staticSvg.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticSvg/staticSvg.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticSvgInDiv/staticSvgInDiv.css create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticSvgInDiv/staticSvgInDiv.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticSvgInDiv/staticSvgInDiv.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticSvgInDivScoped/staticSvgInDivScoped.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticSvgInDivScoped/staticSvgInDivScoped.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticSvgInDivScoped/staticSvgInDivScoped.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticSvgScoped/staticSvgScoped.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticSvgScoped/staticSvgScoped.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticSvgScoped/staticSvgScoped.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticText/staticText.css create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticText/staticText.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticText/staticText.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticTextScoped/staticTextScoped.html create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticTextScoped/staticTextScoped.js create mode 100644 packages/@lwc/integration-not-karma/test/synthetic-shadow/style-svg/x/staticTextScoped/staticTextScoped.scoped.css create mode 100644 packages/@lwc/integration-not-karma/test/template-expressions/errors/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template-expressions/errors/x/throwDuringCallChild/throwDuringCallChild.html create mode 100644 packages/@lwc/integration-not-karma/test/template-expressions/errors/x/throwDuringCallChild/throwDuringCallChild.js create mode 100644 packages/@lwc/integration-not-karma/test/template-expressions/errors/x/throwDuringCallParent/throwDuringCallParent.html create mode 100644 packages/@lwc/integration-not-karma/test/template-expressions/errors/x/throwDuringCallParent/throwDuringCallParent.js create mode 100644 packages/@lwc/integration-not-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjChild/undefinedMemberExpressionObjChild.html create mode 100644 packages/@lwc/integration-not-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjChild/undefinedMemberExpressionObjChild.js create mode 100644 packages/@lwc/integration-not-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjParent/undefinedMemberExpressionObjParent.html create mode 100644 packages/@lwc/integration-not-karma/test/template-expressions/errors/x/undefinedMemberExpressionObjParent/undefinedMemberExpressionObjParent.js create mode 100644 packages/@lwc/integration-not-karma/test/template-expressions/smoke-test/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template-expressions/smoke-test/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/template-expressions/smoke-test/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-aria/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-aria/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-aria/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-aria/x/parent/parent.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-aria/x/parent/parent.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-boolean-global/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-boolean-global/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-boolean-global/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-boolean-global/x/computed/computed.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-boolean-global/x/computed/computed.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-boolean-global/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-boolean-global/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-boolean-non-global-custom-element/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-boolean-non-global-custom-element/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-boolean-non-global-custom-element/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-boolean-non-global-custom-element/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-boolean-non-global-custom-element/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-class/object-values.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-class/string-values.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-class/x/dynamic/dynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-class/x/dynamic/dynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-class/x/reactive/reactive.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-class/x/reactive/reactive.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-class/x/static/static.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-class/x/static/static.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-namespace/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-namespace/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-namespace/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-style-important/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-style-important/x/component/component.css create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-style-important/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-style-important/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-style/invalid/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-style/invalid/x/dynamic/dynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-style/invalid/x/dynamic/dynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-style/invalid/x/staticallyOptimized/staticallyOptimized.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-style/invalid/x/staticallyOptimized/staticallyOptimized.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-style/valid/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-style/valid/x/dynamic/dynamic.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-style/valid/x/dynamic/dynamic.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-style/valid/x/static/static.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-style/valid/x/static/static.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-tab-index/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-tab-index/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attribute-tab-index/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attributes/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/attributes/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/template/attributes/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/custom-elements/ce-with-camel-case-property.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/custom-elements/ce-with-children.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/custom-elements/ce-with-event.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/custom-elements/ce-with-property.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/custom-elements/ce-without-children.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withCamelCaseProperty/withCamelCaseProperty.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withCamelCaseProperty/withCamelCaseProperty.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withChildren/withChildren.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withChildren/withChildren.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withDeclarativeEvent/withDeclarativeEvent.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withDeclarativeEvent/withDeclarativeEvent.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withDelayedUpgrade/withDelayedUpgrade.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withDelayedUpgrade/withDelayedUpgrade.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withDifferentViews/withDifferentViews.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withDifferentViews/withDifferentViews.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withImperativeEvent/withImperativeEvent.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withImperativeEvent/withImperativeEvent.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withProperty/withProperty.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withProperty/withProperty.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withUnregisteredWC/withUnregisteredWC.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withUnregisteredWC/withUnregisteredWC.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withoutChildren/withoutChildren.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-external/x/withoutChildren/withoutChildren.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-for-each/arrayMutation.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-for-each/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-for-each/x/arrayMutation/arrayMutation.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-for-each/x/arrayMutation/arrayMutation.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-for-each/x/arrayNullPrototype/arrayNullPrototype.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-for-each/x/arrayNullPrototype/arrayNullPrototype.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-for-each/x/custom/custom.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-for-each/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-for-each/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-for-each/x/testCustomElement/testCustomElement.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-for-each/x/testCustomElement/testCustomElement.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-for-each/x/testStatic/testStatic.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-for-each/x/testStatic/testStatic.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/x/childWithNamedSlot/childWithNamedSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/x/childWithNamedSlot/childWithNamedSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/x/childWithSlot/childWithSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/x/childWithSlot/childWithSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/x/forEach/forEach.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/x/forEach/forEach.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/x/nested/nested.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/x/nested/nested.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/x/parentWithNamedSlot/parentWithNamedSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/x/parentWithNamedSlot/parentWithNamedSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/x/parentWithSlot/parentWithSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/x/parentWithSlot/parentWithSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/x/slottedForEach/slottedForEach.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/x/slottedForEach/slottedForEach.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if-elseif-else/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if/x/multipleSlot/multipleSlot.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if/x/multipleSlot/multipleSlot.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if/x/multipleSlotLevel1/multipleSlotLevel1.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if/x/multipleSlotLevel1/multipleSlotLevel1.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if/x/multipleSlotLevel2/multipleSlotLevel2.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if/x/multipleSlotLevel2/multipleSlotLevel2.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if/x/nestedRenderConditional/nestedRenderConditional.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if/x/nestedRenderConditional/nestedRenderConditional.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if/x/slotted/slotted.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if/x/slotted/slotted.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-if/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-dom-manual/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-dom-manual/x/svgWithLwcDomManual/svgWithLwcDomManual.css create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-dom-manual/x/svgWithLwcDomManual/svgWithLwcDomManual.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-dom-manual/x/svgWithLwcDomManual/svgWithLwcDomManual.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-dom-manual/x/withLwcDomManual/withLwcDomManual.css create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-dom-manual/x/withLwcDomManual/withLwcDomManual.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-dom-manual/x/withLwcDomManual/withLwcDomManual.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-dom-manual/x/withoutLwcDomManual/withoutLwcDomManual.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-dom-manual/x/withoutLwcDomManual/withoutLwcDomManual.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-inner-html/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-inner-html/x/innerHtml/innerHtml.css create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-inner-html/x/innerHtml/innerHtml.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-inner-html/x/innerHtml/innerHtml.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-render-mode/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-render-mode/x/light/light.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-render-mode/x/light/light.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-render-mode/x/shadow/shadow.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-lwc-render-mode/x/shadow/shadow.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-on/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-on/x/click/click.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-on/x/click/click.js create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-on/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/template/directive-on/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/template/escape-attr-name/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/escape-attr-name/x/booleanValue/booleanValue.html create mode 100644 packages/@lwc/integration-not-karma/test/template/escape-attr-name/x/booleanValue/booleanValue.js create mode 100644 packages/@lwc/integration-not-karma/test/template/escape-attr-name/x/stringValue/stringValue.html create mode 100644 packages/@lwc/integration-not-karma/test/template/escape-attr-name/x/stringValue/stringValue.js create mode 100644 packages/@lwc/integration-not-karma/test/template/escape-tag-name/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/escape-tag-name/x/component/component.html create mode 100644 packages/@lwc/integration-not-karma/test/template/escape-tag-name/x/component/component.js create mode 100644 packages/@lwc/integration-not-karma/test/template/html-comments/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/html-comments/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/template/html-comments/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/template/html-comments/x/confusedWithText/confusedWithText.html create mode 100644 packages/@lwc/integration-not-karma/test/template/html-comments/x/confusedWithText/confusedWithText.js create mode 100644 packages/@lwc/integration-not-karma/test/template/html-comments/x/test/test.html create mode 100644 packages/@lwc/integration-not-karma/test/template/html-comments/x/test/test.js create mode 100644 packages/@lwc/integration-not-karma/test/template/properties/attrs/specialCharacter/specialCharacter.html create mode 100644 packages/@lwc/integration-not-karma/test/template/properties/attrs/specialCharacter/specialCharacter.js create mode 100644 packages/@lwc/integration-not-karma/test/template/properties/attrs/underscoreChild/underscoreChild.html create mode 100644 packages/@lwc/integration-not-karma/test/template/properties/attrs/underscoreChild/underscoreChild.js create mode 100644 packages/@lwc/integration-not-karma/test/template/properties/attrs/uppercaseChild/uppercaseChild.html create mode 100644 packages/@lwc/integration-not-karma/test/template/properties/attrs/uppercaseChild/uppercaseChild.js create mode 100644 packages/@lwc/integration-not-karma/test/template/properties/attrs/uppercaseParent/uppercaseParent.html create mode 100644 packages/@lwc/integration-not-karma/test/template/properties/attrs/uppercaseParent/uppercaseParent.js create mode 100644 packages/@lwc/integration-not-karma/test/template/properties/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/template/properties/live/inputChecked/inputChecked.html create mode 100644 packages/@lwc/integration-not-karma/test/template/properties/live/inputChecked/inputChecked.js create mode 100644 packages/@lwc/integration-not-karma/test/template/properties/live/inputValue/inputValue.html create mode 100644 packages/@lwc/integration-not-karma/test/template/properties/live/inputValue/inputValue.js create mode 100644 packages/@lwc/integration-not-karma/test/template/properties/misc/radioButton/radioButton.html create mode 100644 packages/@lwc/integration-not-karma/test/template/properties/misc/radioButton/radioButton.js create mode 100644 packages/@lwc/integration-not-karma/test/upgradable-element/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/upgradable-element/x/child/child.html create mode 100644 packages/@lwc/integration-not-karma/test/upgradable-element/x/child/child.js create mode 100644 packages/@lwc/integration-not-karma/test/upgradable-element/x/dupChild/dupChild.html create mode 100644 packages/@lwc/integration-not-karma/test/upgradable-element/x/dupChild/dupChild.js create mode 100644 packages/@lwc/integration-not-karma/test/upgradable-element/x/interop/interop.html create mode 100644 packages/@lwc/integration-not-karma/test/upgradable-element/x/interop/interop.js create mode 100644 packages/@lwc/integration-not-karma/test/upgradable-element/x/interopParent/interopParent.html create mode 100644 packages/@lwc/integration-not-karma/test/upgradable-element/x/interopParent/interopParent.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/legacy-adapters/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/legacy-adapters/x/dynamicWiredProps/dynamicWiredProps.html create mode 100644 packages/@lwc/integration-not-karma/test/wire/legacy-adapters/x/dynamicWiredProps/dynamicWiredProps.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/legacy-adapters/x/echoWireAdapter/echoWireAdapter.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/legacy-adapters/x/sameAdapterDifferentConfig/constants.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/legacy-adapters/x/sameAdapterDifferentConfig/sameAdapterDifferentConfig.html create mode 100644 packages/@lwc/integration-not-karma/test/wire/legacy-adapters/x/sameAdapterDifferentConfig/sameAdapterDifferentConfig.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/legacy-adapters/x/sameConfigCase/sameConfigCase.html create mode 100644 packages/@lwc/integration-not-karma/test/wire/legacy-adapters/x/sameConfigCase/sameConfigCase.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/legacy-adapters/x/staticWiredProps/staticWiredProps.html create mode 100644 packages/@lwc/integration-not-karma/test/wire/legacy-adapters/x/staticWiredProps/staticWiredProps.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/property-trap/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/property-trap/x/echoAdapter/echoAdapter.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/property-trap/x/echoAdapterConsumer/echoAdapterConsumer.html create mode 100644 packages/@lwc/integration-not-karma/test/wire/property-trap/x/echoAdapterConsumer/echoAdapterConsumer.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/reactive-params.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/wirecontextevent-legacy/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/wirecontextevent-legacy/x/wireContextAdapter/wireContextAdapter.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/wirecontextevent-legacy/x/wireContextConsumer/wireContextConsumer.html create mode 100644 packages/@lwc/integration-not-karma/test/wire/wirecontextevent-legacy/x/wireContextConsumer/wireContextConsumer.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/wirecontextevent-legacy/x/wireContextProvider/wireContextProvider.html create mode 100644 packages/@lwc/integration-not-karma/test/wire/wirecontextevent-legacy/x/wireContextProvider/wireContextProvider.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/wiring/index.spec.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/wiring/x/adapterConsumer/adapterConsumer.html create mode 100644 packages/@lwc/integration-not-karma/test/wire/wiring/x/adapterConsumer/adapterConsumer.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/wiring/x/base/base.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/wiring/x/broadcastAdapter/broadcastAdapter.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/wiring/x/broadcastConsumer/broadcastConsumer.html create mode 100644 packages/@lwc/integration-not-karma/test/wire/wiring/x/broadcastConsumer/broadcastConsumer.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/wiring/x/contextAwareAdapter/contextAwareAdapter.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/wiring/x/contextAwareConsumer/contextAwareConsumer.html create mode 100644 packages/@lwc/integration-not-karma/test/wire/wiring/x/contextAwareConsumer/contextAwareConsumer.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/wiring/x/echoAdapter/echoAdapter.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/wiring/x/inheritedMethods/inheritedMethods.html create mode 100644 packages/@lwc/integration-not-karma/test/wire/wiring/x/inheritedMethods/inheritedMethods.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/x/cascadeWiredProps/cascadeWiredProps.html create mode 100644 packages/@lwc/integration-not-karma/test/wire/x/cascadeWiredProps/cascadeWiredProps.js create mode 100644 packages/@lwc/integration-not-karma/test/wire/x/echoWireAdapter/echoWireAdapter.js diff --git a/packages/@lwc/integration-not-karma/configs/base.mjs b/packages/@lwc/integration-not-karma/configs/base.js similarity index 92% rename from packages/@lwc/integration-not-karma/configs/base.mjs rename to packages/@lwc/integration-not-karma/configs/base.js index 1cca526416..4b08ac144f 100644 --- a/packages/@lwc/integration-not-karma/configs/base.mjs +++ b/packages/@lwc/integration-not-karma/configs/base.js @@ -1,7 +1,7 @@ import { join } from 'node:path'; import { LWC_VERSION } from '@lwc/shared'; import { importMapsPlugin } from '@web/dev-server-import-maps'; -import * as options from '../helpers/options.mjs'; +import * as options from '../helpers/options.js'; const pluck = (obj, keys) => Object.fromEntries(keys.map((k) => [k, obj[k]])); const maybeImport = (file, condition) => (condition ? `await import('${file}');` : ''); @@ -29,14 +29,15 @@ export default { // time out before they receive focus. But it also makes the full suite take 3x longer to run... // Potential workaround: https://github.com/modernweb-dev/web/issues/2588 concurrency: 1, + filterBrowserLogs: () => false, nodeResolve: true, rootDir: join(import.meta.dirname, '..'), plugins: [ - importMapsPlugin({ inject: { importMap: { imports: { lwc: './mocks/lwc.mjs' } } } }), + importMapsPlugin({ inject: { importMap: { imports: { lwc: './mocks/lwc.js' } } } }), { resolveImport({ source }) { if (source === 'test-utils') { - return '/helpers/utils.mjs'; + return '/helpers/utils.js'; } else if (source === 'wire-service') { // To serve files outside the web root (e.g. node_modules in the monorepo root), // @web/dev-server provides this "magic" path. It's hacky of us to use it directly. @@ -66,7 +67,7 @@ export default { ${maybeImport('@lwc/synthetic-shadow', !options.DISABLE_SYNTHETIC)} ${maybeImport('@lwc/aria-reflection', options.ENABLE_ARIA_REFLECTION_GLOBAL_POLYFILL)} - + `, diff --git a/packages/@lwc/integration-not-karma/configs/hydration.mjs b/packages/@lwc/integration-not-karma/configs/hydration.js similarity index 88% rename from packages/@lwc/integration-not-karma/configs/hydration.mjs rename to packages/@lwc/integration-not-karma/configs/hydration.js index eb81e7701a..547844d317 100644 --- a/packages/@lwc/integration-not-karma/configs/hydration.mjs +++ b/packages/@lwc/integration-not-karma/configs/hydration.js @@ -1,7 +1,7 @@ // Use native shadow by default in hydration tests; MUST be set before imports process.env.DISABLE_SYNTHETIC ??= 'true'; -import baseConfig from './base.mjs'; -import hydrationTestPlugin from './plugins/serve-hydration.mjs'; +import baseConfig from './base.js'; +import hydrationTestPlugin from './plugins/serve-hydration.js'; /** @type {import("@web/test-runner").TestRunnerConfig} */ export default { diff --git a/packages/@lwc/integration-not-karma/configs/integration.mjs b/packages/@lwc/integration-not-karma/configs/integration.js similarity index 86% rename from packages/@lwc/integration-not-karma/configs/integration.mjs rename to packages/@lwc/integration-not-karma/configs/integration.js index 3479e788d4..fe76eab25a 100644 --- a/packages/@lwc/integration-not-karma/configs/integration.mjs +++ b/packages/@lwc/integration-not-karma/configs/integration.js @@ -1,5 +1,5 @@ -import baseConfig from './base.mjs'; -import testPlugin from './plugins/serve-integration.mjs'; +import baseConfig from './base.js'; +import testPlugin from './plugins/serve-integration.js'; /** @type {import("@web/test-runner").TestRunnerConfig} */ export default { diff --git a/packages/@lwc/integration-not-karma/configs/plugins/serve-hydration.mjs b/packages/@lwc/integration-not-karma/configs/plugins/serve-hydration.js similarity index 99% rename from packages/@lwc/integration-not-karma/configs/plugins/serve-hydration.mjs rename to packages/@lwc/integration-not-karma/configs/plugins/serve-hydration.js index e89b764b68..ebb724d9a2 100644 --- a/packages/@lwc/integration-not-karma/configs/plugins/serve-hydration.mjs +++ b/packages/@lwc/integration-not-karma/configs/plugins/serve-hydration.js @@ -3,7 +3,7 @@ import vm from 'node:vm'; import fs from 'node:fs/promises'; import { rollup } from 'rollup'; import lwcRollupPlugin from '@lwc/rollup-plugin'; -import { DISABLE_STATIC_CONTENT_OPTIMIZATION, ENGINE_SERVER } from '../../helpers/options.mjs'; +import { DISABLE_STATIC_CONTENT_OPTIMIZATION, ENGINE_SERVER } from '../../helpers/options.js'; const lwcSsr = await (ENGINE_SERVER ? import('@lwc/engine-server') : import('@lwc/ssr-runtime')); const ROOT_DIR = path.join(import.meta.dirname, '../..'); diff --git a/packages/@lwc/integration-not-karma/configs/plugins/serve-integration.mjs b/packages/@lwc/integration-not-karma/configs/plugins/serve-integration.js similarity index 99% rename from packages/@lwc/integration-not-karma/configs/plugins/serve-integration.mjs rename to packages/@lwc/integration-not-karma/configs/plugins/serve-integration.js index c59a990436..6604e74d08 100644 --- a/packages/@lwc/integration-not-karma/configs/plugins/serve-integration.mjs +++ b/packages/@lwc/integration-not-karma/configs/plugins/serve-integration.js @@ -7,7 +7,7 @@ import { COVERAGE, DISABLE_STATIC_CONTENT_OPTIMIZATION, DISABLE_SYNTHETIC_SHADOW_SUPPORT_IN_COMPILER, -} from '../../helpers/options.mjs'; +} from '../../helpers/options.js'; /** Cache reused between each compilation to speed up the compilation time. */ let cache; diff --git a/packages/@lwc/integration-not-karma/helpers/aria.mjs b/packages/@lwc/integration-not-karma/helpers/aria.js similarity index 100% rename from packages/@lwc/integration-not-karma/helpers/aria.mjs rename to packages/@lwc/integration-not-karma/helpers/aria.js diff --git a/packages/@lwc/integration-not-karma/helpers/console.mjs b/packages/@lwc/integration-not-karma/helpers/console.js similarity index 100% rename from packages/@lwc/integration-not-karma/helpers/console.mjs rename to packages/@lwc/integration-not-karma/helpers/console.js diff --git a/packages/@lwc/integration-not-karma/helpers/constants.mjs b/packages/@lwc/integration-not-karma/helpers/constants.js similarity index 93% rename from packages/@lwc/integration-not-karma/helpers/constants.mjs rename to packages/@lwc/integration-not-karma/helpers/constants.js index 0dac9715b3..25c89c3116 100644 --- a/packages/@lwc/integration-not-karma/helpers/constants.mjs +++ b/packages/@lwc/integration-not-karma/helpers/constants.js @@ -1,4 +1,4 @@ -import { API_VERSION } from './options.mjs'; +import { API_VERSION } from './options.js'; // These values are based on the API versions in @lwc/shared/api-version export const LOWERCASE_SCOPE_TOKENS = API_VERSION >= 59, diff --git a/packages/@lwc/integration-not-karma/helpers/hooks.mjs b/packages/@lwc/integration-not-karma/helpers/hooks.js similarity index 100% rename from packages/@lwc/integration-not-karma/helpers/hooks.mjs rename to packages/@lwc/integration-not-karma/helpers/hooks.js diff --git a/packages/@lwc/integration-not-karma/helpers/matchers/console.mjs b/packages/@lwc/integration-not-karma/helpers/matchers/console.js similarity index 100% rename from packages/@lwc/integration-not-karma/helpers/matchers/console.mjs rename to packages/@lwc/integration-not-karma/helpers/matchers/console.js diff --git a/packages/@lwc/integration-not-karma/helpers/matchers/errors.mjs b/packages/@lwc/integration-not-karma/helpers/matchers/errors.js similarity index 100% rename from packages/@lwc/integration-not-karma/helpers/matchers/errors.mjs rename to packages/@lwc/integration-not-karma/helpers/matchers/errors.js diff --git a/packages/@lwc/integration-not-karma/helpers/matchers/index.mjs b/packages/@lwc/integration-not-karma/helpers/matchers/index.js similarity index 52% rename from packages/@lwc/integration-not-karma/helpers/matchers/index.mjs rename to packages/@lwc/integration-not-karma/helpers/matchers/index.js index 95397e4e1d..a917e54668 100644 --- a/packages/@lwc/integration-not-karma/helpers/matchers/index.mjs +++ b/packages/@lwc/integration-not-karma/helpers/matchers/index.js @@ -1,6 +1,6 @@ -import { registerConsoleMatchers } from './console.mjs'; -import { registerErrorMatchers } from './errors.mjs'; -import { registerJasmineMatchers } from './jasmine.mjs'; +import { registerConsoleMatchers } from './console.js'; +import { registerErrorMatchers } from './errors.js'; +import { registerJasmineMatchers } from './jasmine.js'; export const registerCustomMatchers = (chai, utils) => { registerConsoleMatchers(chai, utils); diff --git a/packages/@lwc/integration-not-karma/helpers/matchers/jasmine.mjs b/packages/@lwc/integration-not-karma/helpers/matchers/jasmine.js similarity index 100% rename from packages/@lwc/integration-not-karma/helpers/matchers/jasmine.mjs rename to packages/@lwc/integration-not-karma/helpers/matchers/jasmine.js diff --git a/packages/@lwc/integration-not-karma/helpers/options.mjs b/packages/@lwc/integration-not-karma/helpers/options.js similarity index 100% rename from packages/@lwc/integration-not-karma/helpers/options.mjs rename to packages/@lwc/integration-not-karma/helpers/options.js diff --git a/packages/@lwc/integration-not-karma/helpers/setup.mjs b/packages/@lwc/integration-not-karma/helpers/setup.js similarity index 97% rename from packages/@lwc/integration-not-karma/helpers/setup.mjs rename to packages/@lwc/integration-not-karma/helpers/setup.js index 418e166ebc..7a64aff7cb 100644 --- a/packages/@lwc/integration-not-karma/helpers/setup.mjs +++ b/packages/@lwc/integration-not-karma/helpers/setup.js @@ -3,8 +3,8 @@ import { JestAsymmetricMatchers, JestChaiExpect, JestExtend } from '@vitest/expe import * as chai from 'chai'; import * as LWC from 'lwc'; import { spyOn, fn } from '@vitest/spy'; -import { registerCustomMatchers } from './matchers/index.mjs'; -import * as TestUtils from './utils.mjs'; +import { registerCustomMatchers } from './matchers/index.js'; +import * as TestUtils from './utils.js'; // FIXME: As a relic of the Karma tests, some test files rely on the global object, // rather than importing from `test-utils`. diff --git a/packages/@lwc/integration-not-karma/helpers/signals.mjs b/packages/@lwc/integration-not-karma/helpers/signals.js similarity index 100% rename from packages/@lwc/integration-not-karma/helpers/signals.mjs rename to packages/@lwc/integration-not-karma/helpers/signals.js diff --git a/packages/@lwc/integration-not-karma/helpers/utils.mjs b/packages/@lwc/integration-not-karma/helpers/utils.js similarity index 98% rename from packages/@lwc/integration-not-karma/helpers/utils.mjs rename to packages/@lwc/integration-not-karma/helpers/utils.js index 5ebdd95dde..3c31c07047 100644 --- a/packages/@lwc/integration-not-karma/helpers/utils.mjs +++ b/packages/@lwc/integration-not-karma/helpers/utils.js @@ -8,9 +8,9 @@ import { ariaPropertiesMapping, nonPolyfilledAriaProperties, nonStandardAriaProperties, -} from './aria.mjs'; -import { setHooks, getHooks } from './hooks.mjs'; -import { spyConsole } from './console.mjs'; +} from './aria.js'; +import { setHooks, getHooks } from './hooks.js'; +import { spyConsole } from './console.js'; import { DISABLE_OBJECT_REST_SPREAD_TRANSFORMATION, ENABLE_ELEMENT_INTERNALS_AND_FACE, @@ -22,8 +22,8 @@ import { USE_COMMENTS_FOR_FRAGMENT_BOOKENDS, USE_FRAGMENTS_FOR_LIGHT_DOM_SLOTS, USE_LIGHT_DOM_SLOT_FORWARDING, -} from './constants.mjs'; -import { addTrustedSignal } from './signals.mjs'; +} from './constants.js'; +import { addTrustedSignal } from './signals.js'; // Listen for errors thrown directly by the callback function directErrorListener(callback) { diff --git a/packages/@lwc/integration-not-karma/mocks/lwc.js b/packages/@lwc/integration-not-karma/mocks/lwc.js new file mode 100644 index 0000000000..023844a214 --- /dev/null +++ b/packages/@lwc/integration-not-karma/mocks/lwc.js @@ -0,0 +1,6 @@ +// IMPORTANT: we must use @lwc/engine-dom instead of lwc in order to avoid circular imports +import { sanitizeAttribute as _sanitizeAttribute } from '@lwc/engine-dom'; +import { fn } from '@vitest/spy'; + +export * from '@lwc/engine-dom'; +export const sanitizeAttribute = fn(_sanitizeAttribute); diff --git a/packages/@lwc/integration-not-karma/package.json b/packages/@lwc/integration-not-karma/package.json index d05352ae3f..7858140d83 100644 --- a/packages/@lwc/integration-not-karma/package.json +++ b/packages/@lwc/integration-not-karma/package.json @@ -2,10 +2,11 @@ "name": "@lwc/integration-not-karma", "private": true, "version": "8.21.6", + "type": "module", "scripts": { "start": "web-test-runner --manual", - "test": "web-test-runner --config configs/integration.mjs", - "test:hydration": "web-test-runner --config configs/hydration.mjs" + "test": "web-test-runner --config configs/integration.js", + "test:hydration": "web-test-runner --config configs/hydration.js" }, "devDependencies": { "@lwc/compiler": "8.21.6", diff --git a/packages/@lwc/integration-not-karma/test b/packages/@lwc/integration-not-karma/test deleted file mode 120000 index ecd98dd932..0000000000 --- a/packages/@lwc/integration-not-karma/test +++ /dev/null @@ -1 +0,0 @@ -../integration-karma/test \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test-hydration b/packages/@lwc/integration-not-karma/test-hydration deleted file mode 120000 index afa14987d3..0000000000 --- a/packages/@lwc/integration-not-karma/test-hydration +++ /dev/null @@ -1 +0,0 @@ -../integration-karma/test-hydration \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-and-comment-nodes/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-and-comment-nodes/index.spec.js new file mode 100644 index 0000000000..d8fda70ab3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-and-comment-nodes/index.spec.js @@ -0,0 +1,16 @@ +export default { + snapshot(target) { + const span = target.shadowRoot.querySelector('span'); + + return { + span, + }; + }, + test(elm, snapshot, consoleCalls) { + const span = elm.shadowRoot.querySelector('span'); + expect(span).toBe(snapshot.span); + + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-and-comment-nodes/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-and-comment-nodes/x/main/main.html new file mode 100644 index 0000000000..2f36aeb6a2 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-and-comment-nodes/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-and-comment-nodes/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-and-comment-nodes/x/main/main.js new file mode 100644 index 0000000000..f4cfc750df --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-and-comment-nodes/x/main/main.js @@ -0,0 +1,6 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + foo = ''; + bar = ''; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-nodes/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-nodes/index.spec.js new file mode 100644 index 0000000000..caa8b5e53f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-nodes/index.spec.js @@ -0,0 +1,34 @@ +export default { + props: {}, + snapshot(target) { + const first = target.shadowRoot.querySelector('.first'); + const second = target.shadowRoot.querySelector('.second'); + + return { + first, + second, + }; + }, + advancedTest(target, { Component, hydrateComponent, consoleSpy, container, selector }) { + const snapshotBeforeHydration = this.snapshot(target); + hydrateComponent(target, Component, this.props); + const hydratedTarget = container.querySelector(selector); + const snapshotAfterHydration = this.snapshot(hydratedTarget); + + for (const snapshotKey of Object.keys(snapshotBeforeHydration)) { + expect(snapshotBeforeHydration[snapshotKey]) + .withContext( + `${snapshotKey} should be the same DOM element both before and after hydration` + ) + .toBe(snapshotAfterHydration[snapshotKey]); + expect(snapshotBeforeHydration[snapshotKey].childNodes) + .withContext( + `${snapshotKey} should have the same number of child nodes before & after hydration` + ) + .toHaveSize(snapshotAfterHydration[snapshotKey].childNodes.length); + } + + expect(consoleSpy.calls.warn).toHaveSize(0); + expect(consoleSpy.calls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-nodes/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-nodes/x/main/main.html new file mode 100644 index 0000000000..da544e5d42 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-nodes/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-nodes/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-nodes/x/main/main.js new file mode 100644 index 0000000000..290f646ebd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/adjacent-text-nodes/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement { + zeroLengthText = ''; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/class/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/class/index.spec.js new file mode 100644 index 0000000000..54eeb5738f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/class/index.spec.js @@ -0,0 +1,14 @@ +export default { + snapshot(target) { + const div = target.shadowRoot.querySelector('div'); + return { + div, + class: div.getAttribute('class'), + }; + }, + test(target, snapshots) { + const div = target.shadowRoot.querySelector('div'); + expect(div).toBe(snapshots.div); + expect(div.getAttribute('class')).toBe(snapshots.class); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/class/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/attributes/class/x/main/main.html new file mode 100644 index 0000000000..eb0c5a0bff --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/class/x/main/main.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/class/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/class/x/main/main.js new file mode 100644 index 0000000000..ebaaa40b3a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/class/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + className = 'default_class'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/expression/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/expression/index.spec.js new file mode 100644 index 0000000000..5eab1e2f9d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/expression/index.spec.js @@ -0,0 +1,17 @@ +export default { + clientProps: { + foo: 'foo', + }, + snapshot(target) { + const div = target.shadowRoot.querySelector('div'); + return { + div, + foo: div.getAttribute('data-foo'), + }; + }, + test(target, snapshots) { + const div = target.shadowRoot.querySelector('div'); + expect(div).toBe(snapshots.div); + expect(div.getAttribute('data-foo')).toBe(snapshots.foo); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/expression/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/attributes/expression/x/main/main.html new file mode 100644 index 0000000000..3d8e7daedc --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/expression/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/expression/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/expression/x/main/main.js new file mode 100644 index 0000000000..3d2456f1a4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/expression/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + foo = 'foo'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy-mismatch/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy-mismatch/index.spec.js new file mode 100644 index 0000000000..fc730181aa --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy-mismatch/index.spec.js @@ -0,0 +1,40 @@ +export default { + props: { + isFalse: false, + isUndefined: undefined, + isNull: null, + isTrue: true, + isEmptyString: '', + isZero: 0, + isNaN: NaN, + }, + clientProps: { + isFalse: 'false', + isUndefined: 'undefined', // mismatch. should be literally `null`, not the string `"undefined"` + isNull: 'null', // mismatch. should be literally `null`, not the string `"null"` + isTrue: 'true', + isEmptyString: '', + isZero: '0', + isNaN: 'NaN', + }, + test(target, snapshots, consoleCalls) { + const divs = target.shadowRoot.querySelectorAll('div'); + + const expectedAttrValues = ['false', 'undefined', 'null', 'true', '', '0', 'NaN']; + + expect(divs).toHaveSize(expectedAttrValues.length); + + for (let i = 0; i < expectedAttrValues.length; i++) { + expect(divs[i].getAttribute('data-foo')).toEqual(expectedAttrValues[i]); + } + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:
- rendered on server: data-foo=null - expected on client: data-foo="undefined"', + 'Hydration attribute mismatch on:
- rendered on server: data-foo=null - expected on client: data-foo="null"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy-mismatch/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy-mismatch/x/main/main.html new file mode 100644 index 0000000000..bedcc80b4c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy-mismatch/x/main/main.html @@ -0,0 +1,9 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy-mismatch/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy-mismatch/x/main/main.js new file mode 100644 index 0000000000..081d21ef51 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy-mismatch/x/main/main.js @@ -0,0 +1,11 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api isFalse; + @api isUndefined; + @api isNull; + @api isTrue; + @api isEmptyString; + @api isZero; + @api isNaN; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy/index.spec.js new file mode 100644 index 0000000000..020ab12b29 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy/index.spec.js @@ -0,0 +1,16 @@ +export default { + test(target, snapshots, consoleCalls) { + const divs = target.shadowRoot.querySelectorAll('div'); + + const expectedAttrValues = ['false', null, null, 'true', '', '0', 'NaN']; + + expect(divs).toHaveSize(expectedAttrValues.length); + + for (let i = 0; i < expectedAttrValues.length; i++) { + expect(divs[i].getAttribute('data-foo')).toEqual(expectedAttrValues[i]); + } + + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy/x/main/main.html new file mode 100644 index 0000000000..bedcc80b4c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy/x/main/main.html @@ -0,0 +1,9 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy/x/main/main.js new file mode 100644 index 0000000000..e5674e3a6a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/falsy/x/main/main.js @@ -0,0 +1,11 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement { + isFalse = false; + isUndefined = undefined; + isNull = null; + isTrue = true; + isEmptyString = ''; + isZero = 0; + isNaN = NaN; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/index.spec.js new file mode 100644 index 0000000000..0269a7bc78 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/index.spec.js @@ -0,0 +1,36 @@ +function getAllDivs(target) { + const childs = [...target.shadowRoot.querySelectorAll('x-child')]; + return childs.flatMap((child) => [...child.shadowRoot.querySelectorAll('div')]); +} +export default { + snapshot(target) { + const divs = getAllDivs(target); + return { divs }; + }, + test(target, snapshots, consoleCalls) { + const divs = getAllDivs(target); + expect(divs.length).toBe(snapshots.divs.length); + // dynamic + expect(divs[0].textContent).toBe('id: parentProvided'); + expect(divs[1].textContent).toBe('draggable: true'); + expect(divs[2].textContent).toBe('hidden: true'); + expect(divs[3].textContent).toBe('spellcheck: true'); + expect(divs[4].textContent).toBe('tabindex: -1'); + // static + expect(divs[5].textContent).toBe('id: parentProvided'); + expect(divs[6].textContent).toBe('draggable: true'); + expect(divs[7].textContent).toBe('hidden: true'); + expect(divs[8].textContent).toBe('spellcheck: true'); + expect(divs[9].textContent).toBe('tabindex: -1'); + + /** + * Required because SSR V1 is wrong (parent does not override child) and this results in hydration errors + */ + if (process.env.ENGINE_SERVER && process.env.NODE_ENV !== 'production') { + expect(consoleCalls.warn.toString()).toContain('Hydration text content mismatch'); + } else { + expect(consoleCalls.warn).toHaveSize(0); + } + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/x/child/child.html new file mode 100644 index 0000000000..2b60d98ba1 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/x/child/child.html @@ -0,0 +1,7 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/x/child/child.js new file mode 100644 index 0000000000..ec210cc80c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/x/child/child.js @@ -0,0 +1,10 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + // None of these values should be set (parent takes precedence) + id = 'childValue'; + draggable = false; + hidden = false; + spellcheck = false; + tabindex = -1; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/x/main/main.html new file mode 100644 index 0000000000..9a76d73a6c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/x/main/main.html @@ -0,0 +1,16 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/x/main/main.js new file mode 100644 index 0000000000..5ca43c9ea7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/global-parent-overrides/x/main/main.js @@ -0,0 +1,11 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + value = { + id: 'parentProvided', + draggable: true, + spellcheck: true, + tabindex: 0, + hidden: true, + }; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/index.spec.js new file mode 100644 index 0000000000..60f88e709d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/index.spec.js @@ -0,0 +1,19 @@ +function getAllDivs(target) { + const childs = [...target.shadowRoot.querySelectorAll('x-child')]; + return childs.flatMap((child) => [...child.shadowRoot.querySelectorAll('div')]); +} +export default { + snapshot(target) { + const divs = getAllDivs(target); + return { divs }; + }, + test(target, snapshots, consoleCalls) { + const divs = getAllDivs(target); + expect(divs.length).toBe(snapshots.divs.length); + for (let i = 0; i < divs.length; i += 1) { + expect(divs[i]).toBe(snapshots.divs[i]); + } + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/x/child/child.html new file mode 100644 index 0000000000..32e1b71283 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/x/child/child.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/x/child/child.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/x/main/main.html new file mode 100644 index 0000000000..ae86b5ad0a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/x/main/main.html @@ -0,0 +1,28 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/x/main/main.js new file mode 100644 index 0000000000..7746c95e2c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/non-reflective/x/main/main.js @@ -0,0 +1,7 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + value = { + contenteditable: 'true', + }; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/index.spec.js new file mode 100644 index 0000000000..60f88e709d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/index.spec.js @@ -0,0 +1,19 @@ +function getAllDivs(target) { + const childs = [...target.shadowRoot.querySelectorAll('x-child')]; + return childs.flatMap((child) => [...child.shadowRoot.querySelectorAll('div')]); +} +export default { + snapshot(target) { + const divs = getAllDivs(target); + return { divs }; + }, + test(target, snapshots, consoleCalls) { + const divs = getAllDivs(target); + expect(divs.length).toBe(snapshots.divs.length); + for (let i = 0; i < divs.length; i += 1) { + expect(divs[i]).toBe(snapshots.divs[i]); + } + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/x/child/child.html new file mode 100644 index 0000000000..faffc84109 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/x/child/child.html @@ -0,0 +1,13 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/x/child/child.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/x/child/child.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/x/main/main.html new file mode 100644 index 0000000000..ae86b5ad0a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/x/main/main.html @@ -0,0 +1,28 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/x/main/main.js new file mode 100644 index 0000000000..99110bdf9f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/attributes/reflective/x/main/main.js @@ -0,0 +1,17 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + value = { + accesskey: 'tata', + arialabel: 'titi', + dir: 'auto', + draggable: false, + hidden: false, + id: 'tutu', + lang: 'jp', + role: 'scrollbar', + spellcheck: false, + tabindex: '0', + title: 'tete', + }; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/connected-callback/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/connected-callback/index.spec.js new file mode 100644 index 0000000000..d144f03346 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/connected-callback/index.spec.js @@ -0,0 +1,15 @@ +export default { + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + text: p.firstChild, + }; + }, + test(target, snapshots) { + const p = target.shadowRoot.querySelector('p'); + expect(p).toBe(snapshots.p); + expect(p.firstChild).toBe(snapshots.text); + expect(p.textContent).toBe('connectedCallback:true'); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/connected-callback/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/connected-callback/x/main/main.html new file mode 100644 index 0000000000..d958c7031d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/connected-callback/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/connected-callback/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/connected-callback/x/main/main.js new file mode 100644 index 0000000000..536029b45c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/connected-callback/x/main/main.js @@ -0,0 +1,8 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement { + called = false; + connectedCallback() { + this.called = true; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/index.spec.js new file mode 100644 index 0000000000..49a9044c3f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/index.spec.js @@ -0,0 +1,28 @@ +let disconnectedCalled = false; + +// NOTE: Disconnected callback is not triggered by Node.remove, see: https://github.com/salesforce/lwc/issues/1102 +// That's why we trick it by removing a component via the diffing algo. +export default { + props: { + showFoo: true, + disconnectedCb: () => { + disconnectedCalled = true; + }, + }, + snapshot(target) { + return { + xFoo: target.shadowRoot.querySelector('x-foo'), + }; + }, + test(target, snapshots) { + const xFoo = target.shadowRoot.querySelector('x-foo'); + expect(xFoo).not.toBe(null); + expect(xFoo).toBe(snapshots.xFoo); + + target.showFoo = false; + + return Promise.resolve().then(() => { + expect(disconnectedCalled).toBe(true); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/x/foo/foo.html b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/x/foo/foo.html new file mode 100644 index 0000000000..3323d4e315 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/x/foo/foo.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/x/foo/foo.js b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/x/foo/foo.js new file mode 100644 index 0000000000..5dda3d0d96 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/x/foo/foo.js @@ -0,0 +1,9 @@ +import { LightningElement, api } from 'lwc'; + +export default class Foo extends LightningElement { + @api disconnectedCb; + + disconnectedCallback() { + this.disconnectedCb.call(null); + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/x/main/main.html new file mode 100644 index 0000000000..4f110f35a5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/x/main/main.html @@ -0,0 +1,6 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/x/main/main.js new file mode 100644 index 0000000000..c539fe590a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/disconnected-callback/x/main/main.js @@ -0,0 +1,10 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api disconnectedCb; + @api showFoo; + + disconnectedCallback() { + this.disconnectedCb.call(null); + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/render-method/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/render-method/index.spec.js new file mode 100644 index 0000000000..feae6ccffb --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/render-method/index.spec.js @@ -0,0 +1,24 @@ +export default { + props: { + useTplA: true, + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + text: p.firstChild, + }; + }, + test(target, snapshots) { + const p = target.shadowRoot.querySelector('p'); + expect(p).toBe(snapshots.p); + expect(p.firstChild).toBe(snapshots.text); + expect(p.textContent).toBe('template A'); + + target.useTplA = false; + + return Promise.resolve().then(() => { + expect(target.shadowRoot.querySelector('p').textContent).toBe('template B'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/render-method/x/main/a.html b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/render-method/x/main/a.html new file mode 100644 index 0000000000..1aa0588b62 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/render-method/x/main/a.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/render-method/x/main/b.html b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/render-method/x/main/b.html new file mode 100644 index 0000000000..012c7a045a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/render-method/x/main/b.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/render-method/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/render-method/x/main/main.js new file mode 100644 index 0000000000..357356aab6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/render-method/x/main/main.js @@ -0,0 +1,11 @@ +import { LightningElement, api } from 'lwc'; +import tplA from './a.html'; +import tplB from './b.html'; + +export default class Main extends LightningElement { + @api useTplA; + + render() { + return this.useTplA ? tplA : tplB; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/rendered-callback/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/rendered-callback/index.spec.js new file mode 100644 index 0000000000..4754206100 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/rendered-callback/index.spec.js @@ -0,0 +1,19 @@ +export default { + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + text: p.firstChild, + }; + }, + test(target, snapshots) { + const p = target.shadowRoot.querySelector('p'); + expect(p).toBe(snapshots.p); + expect(p.firstChild).toBe(snapshots.text); + expect(p.textContent).toBe('renderedCallback:false'); + + return Promise.resolve().then(() => { + expect(p.textContent).toBe('renderedCallback:true'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/rendered-callback/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/rendered-callback/x/main/main.html new file mode 100644 index 0000000000..caeecb703f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/rendered-callback/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/rendered-callback/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/rendered-callback/x/main/main.js new file mode 100644 index 0000000000..cd483b8092 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/component-lifecycle/rendered-callback/x/main/main.js @@ -0,0 +1,8 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement { + called = false; + renderedCallback() { + this.called = true; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/context/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/context/index.spec.js new file mode 100644 index 0000000000..ed71537fac --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/context/index.spec.js @@ -0,0 +1,101 @@ +export default { + // server is expected to generate the same console error as the client + expectedSSRConsoleCalls: { + error: [], + warn: [ + 'Attempted to connect to trusted context but received the following error', + 'Multiple contexts of the same variety were provided. Only the first context will be used.', + ], + }, + requiredFeatureFlags: ['ENABLE_EXPERIMENTAL_SIGNALS'], + snapshot(target) { + const grandparent = target.shadowRoot.querySelector('x-grandparent'); + const detachedChild = target.shadowRoot.querySelector('x-child'); + const firstParent = grandparent.shadowRoot.querySelectorAll('x-parent')[0]; + const secondParent = grandparent.shadowRoot.querySelectorAll('x-parent')[1]; + const childOfFirstParent = firstParent.shadowRoot.querySelector('x-child'); + const childOfSecondParent = secondParent.shadowRoot.querySelector('x-child'); + + return { + components: { + grandparent, + firstParent, + secondParent, + childOfFirstParent, + childOfSecondParent, + }, + detachedChild, + }; + }, + test(target, snapshot, consoleCalls) { + // Assert context is provided by the grandparent and consumed correctly by all children + assertCorrectContext(snapshot); + + // Assert context is shadowed when consumed in a chain + assertContextShadowed(snapshot); + + // Assert context is disconnected when components are removed + assertContextDisconnected(target, snapshot); + + // Expect an error as one context was generated twice. + // Expect an error as one context was malformed (did not define connectContext or disconnectContext methods). + // Expect server/client context output parity (no hydration warnings) + TestUtils.expectConsoleCalls(consoleCalls, { + error: [], + warn: [ + 'Attempted to connect to trusted context but received the following error', + 'Multiple contexts of the same variety were provided. Only the first context will be used.', + ], + }); + }, +}; + +function assertCorrectContext(snapshot) { + Object.values(snapshot.components).forEach((component) => { + expect(component.shadowRoot.querySelector('div').textContent) + .withContext(`${component.tagName} should have the correct context`) + .toBe('grandparent provided value, another grandparent provided value'); + + expect(component.context.connectProvidedComponent?.hostElement) + .withContext( + `The context of ${component.tagName} should have been connected with the correct component` + ) + .toBe(component); + }); + expect(snapshot.detachedChild.shadowRoot.querySelector('div').textContent).toBe(', '); +} + +function assertContextShadowed(snapshot) { + const grandparentContext = snapshot.components.grandparent.context; + const firstParentContext = snapshot.components.firstParent.context; + const childOfFirstParentContext = snapshot.components.childOfFirstParent.context; + + expect(childOfFirstParentContext.providedContextSignal) + .withContext( + `Child should have been provided with the parent context and not that of the grandparent (grandparent context was shadowed)` + ) + .toBe(firstParentContext); + + expect(firstParentContext.providedContextSignal) + .withContext(`Parent should have been provided with grandparent context`) + .toBe(grandparentContext); + + // For good measure + expect(grandparentContext) + .withContext(`Grandparent context should not be the same as the parent context`) + .not.toBe(firstParentContext); +} + +function assertContextDisconnected(target, snapshot) { + Object.values(snapshot.components).forEach( + (component) => + (component.disconnect = () => { + expect(component.context.disconnectProvidedComponent?.hostElement) + .withContext( + `The context of ${component.tagName} should have been disconnected with the correct component` + ) + .toBe(component); + }) + ); + target.showTree = false; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/context/x/base/base.js b/packages/@lwc/integration-not-karma/test-hydration/context/x/base/base.js new file mode 100644 index 0000000000..6c2ca30bc5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/context/x/base/base.js @@ -0,0 +1,11 @@ +import { LightningElement, api } from 'lwc'; + +export default class Base extends LightningElement { + @api disconnect; + + disconnectedCallback() { + if (this.disconnect) { + this.disconnect(); + } + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/context/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/context/x/child/child.html new file mode 100644 index 0000000000..6db837b7e4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/context/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/context/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/context/x/child/child.js new file mode 100644 index 0000000000..7763fa7fdb --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/context/x/child/child.js @@ -0,0 +1,9 @@ +import { api } from 'lwc'; +import Base from 'x/base'; +import { defineContext } from 'x/contextManager'; +import { parentContextFactory, anotherParentContextFactory } from 'x/parentContext'; + +export default class Child extends Base { + @api context = defineContext(parentContextFactory)(); + @api anotherContext = defineContext(anotherParentContextFactory)(); +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/context/x/contextManager/contextManager.js b/packages/@lwc/integration-not-karma/test-hydration/context/x/contextManager/contextManager.js new file mode 100644 index 0000000000..d66e89e809 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/context/x/contextManager/contextManager.js @@ -0,0 +1,57 @@ +import { + setContextKeys, + setTrustedContextSet, + __dangerous_do_not_use_addTrustedContext, +} from 'lwc'; + +const connectContext = Symbol('connectContext'); +const disconnectContext = Symbol('disconnectContext'); +const trustedContext = new WeakSet(); + +setTrustedContextSet(trustedContext); +setContextKeys({ connectContext, disconnectContext }); + +class MockContextSignal { + connectProvidedComponent; + disconnectProvidedComponent; + providedContextSignal; + + constructor(initialValue, contextDefinition, fromContext) { + this.value = initialValue; + this.contextDefinition = contextDefinition; + this.fromContext = fromContext; + __dangerous_do_not_use_addTrustedContext(this); + } + [connectContext](runtimeAdapter) { + this.connectProvidedComponent = runtimeAdapter.component; + + runtimeAdapter.provideContext(this.contextDefinition, this); + + if (this.fromContext) { + runtimeAdapter.consumeContext(this.fromContext, (providedContextSignal) => { + this.providedContextSignal = providedContextSignal; + this.value = providedContextSignal.value; + }); + } + } + [disconnectContext](component) { + this.disconnectProvidedComponent = component; + } +} + +// This is a malformed context signal that does not implement the connectContext or disconnectContext methods +class MockMalformedContextSignal { + constructor() { + trustedContext.add(this); + } +} + +export const defineContext = (fromContext) => { + const contextDefinition = (initialValue) => + new MockContextSignal(initialValue, contextDefinition, fromContext); + return contextDefinition; +}; + +export const defineMalformedContext = () => { + return () => new MockMalformedContextSignal(); +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/context/x/grandparent/grandparent.html b/packages/@lwc/integration-not-karma/test-hydration/context/x/grandparent/grandparent.html new file mode 100644 index 0000000000..2c178bf46a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/context/x/grandparent/grandparent.html @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test-hydration/context/x/grandparent/grandparent.js b/packages/@lwc/integration-not-karma/test-hydration/context/x/grandparent/grandparent.js new file mode 100644 index 0000000000..8bb4b172a5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/context/x/grandparent/grandparent.js @@ -0,0 +1,8 @@ +import { api } from 'lwc'; +import Base from 'x/base'; +import { grandparentContextFactory, anotherGrandparentContextFactory } from 'x/grandparentContext'; + +export default class Grandparent extends Base { + @api context = grandparentContextFactory('grandparent provided value'); + @api anotherContext = anotherGrandparentContextFactory('another grandparent provided value'); +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/context/x/grandparentContext/grandparentContext.js b/packages/@lwc/integration-not-karma/test-hydration/context/x/grandparentContext/grandparentContext.js new file mode 100644 index 0000000000..807ac8874a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/context/x/grandparentContext/grandparentContext.js @@ -0,0 +1,4 @@ +import { defineContext } from 'x/contextManager'; + +export const grandparentContextFactory = defineContext(); +export const anotherGrandparentContextFactory = defineContext(); diff --git a/packages/@lwc/integration-not-karma/test-hydration/context/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/context/x/main/main.html new file mode 100644 index 0000000000..2241f1adbf --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/context/x/main/main.html @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test-hydration/context/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/context/x/main/main.js new file mode 100644 index 0000000000..0c63cfb133 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/context/x/main/main.js @@ -0,0 +1,11 @@ +import { LightningElement, api } from 'lwc'; +import { defineMalformedContext } from 'x/contextManager'; +export default class Root extends LightningElement { + @api showTree = false; + // Only test in CSR right now as SSR throws which prevents content from being rendered. There is additional fixtures ssr coverage for this case. + malformedContext = typeof window !== 'undefined' ? defineMalformedContext()() : undefined; + + connectedCallback() { + this.showTree = true; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/context/x/parent/parent.html b/packages/@lwc/integration-not-karma/test-hydration/context/x/parent/parent.html new file mode 100644 index 0000000000..a8e86f7a9b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/context/x/parent/parent.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/context/x/parent/parent.js b/packages/@lwc/integration-not-karma/test-hydration/context/x/parent/parent.js new file mode 100644 index 0000000000..3e2b8689cf --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/context/x/parent/parent.js @@ -0,0 +1,8 @@ +import { api } from 'lwc'; +import { parentContextFactory, anotherParentContextFactory } from 'x/parentContext'; +import Base from 'x/base'; + +export default class Parent extends Base { + @api context = parentContextFactory(); + @api anotherContext = anotherParentContextFactory(); +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/context/x/parentContext/parentContext.js b/packages/@lwc/integration-not-karma/test-hydration/context/x/parentContext/parentContext.js new file mode 100644 index 0000000000..03a078239f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/context/x/parentContext/parentContext.js @@ -0,0 +1,5 @@ +import { defineContext } from 'x/contextManager'; +import { grandparentContextFactory, anotherGrandparentContextFactory } from 'x/grandparentContext'; + +export const parentContextFactory = defineContext(grandparentContextFactory); +export const anotherParentContextFactory = defineContext(anotherGrandparentContextFactory); diff --git a/packages/@lwc/integration-not-karma/test-hydration/context/x/tooMuchContext/tooMuchContext.html b/packages/@lwc/integration-not-karma/test-hydration/context/x/tooMuchContext/tooMuchContext.html new file mode 100644 index 0000000000..cb3b7ad81c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/context/x/tooMuchContext/tooMuchContext.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test-hydration/context/x/tooMuchContext/tooMuchContext.js b/packages/@lwc/integration-not-karma/test-hydration/context/x/tooMuchContext/tooMuchContext.js new file mode 100644 index 0000000000..513c0fb64a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/context/x/tooMuchContext/tooMuchContext.js @@ -0,0 +1,11 @@ +import { grandparentContextFactory } from 'x/grandparentContext'; +import { LightningElement } from 'lwc'; + +export default class TooMuchContext extends LightningElement { + context = grandparentContextFactory('grandparent provided value'); + // Only test in CSR right now as it throws in SSR. There is additional fixtures ssr coverage for this case. + tooMuch = + typeof window !== 'undefined' + ? grandparentContextFactory('this world is not big enough for me') + : undefined; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/comments/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/directives/comments/index.spec.js new file mode 100644 index 0000000000..9feeac3475 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/comments/index.spec.js @@ -0,0 +1,26 @@ +export default { + props: { + control: true, + }, + snapshot(target) { + const [firstComment, p] = target.shadowRoot.childNodes; + const [secondComment, text] = p.childNodes; + return { + firstComment, + p, + secondComment, + text, + }; + }, + test(target, snapshots) { + const [firstComment, p] = target.shadowRoot.childNodes; + const [secondComment, text] = p.childNodes; + + expect(firstComment).toBe(snapshots.firstComment); + expect(firstComment.nodeValue).toBe('first comment'); + expect(p).toBe(snapshots.p); + expect(secondComment).toBe(snapshots.secondComment); + expect(secondComment.nodeValue).toBe('comment inside element'); + expect(text).toBe(snapshots.text); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/comments/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/directives/comments/x/main/main.html new file mode 100644 index 0000000000..aca22f191d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/comments/x/main/main.html @@ -0,0 +1,7 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/comments/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/directives/comments/x/main/main.js new file mode 100644 index 0000000000..0eaadfe543 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/comments/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api control; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/dom-manual/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/directives/dom-manual/index.spec.js new file mode 100644 index 0000000000..41ceea382e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/dom-manual/index.spec.js @@ -0,0 +1,13 @@ +export default { + snapshot(target) { + return { + div: target.shadowRoot.querySelector('div'), + }; + }, + test(target, snapshots) { + const div = target.shadowRoot.querySelector('div'); + + expect(div).toBe(snapshots.div); + expect(div.innerHTML).toBe('

test

'); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/dom-manual/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/directives/dom-manual/x/main/main.html new file mode 100644 index 0000000000..afd9355489 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/dom-manual/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/dom-manual/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/directives/dom-manual/x/main/main.js new file mode 100644 index 0000000000..ec1b237c50 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/dom-manual/x/main/main.js @@ -0,0 +1,7 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement { + renderedCallback() { + this.template.querySelector('div').innerHTML = '

test

'; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/for-each/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/directives/for-each/index.spec.js new file mode 100644 index 0000000000..6bac7c837f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/for-each/index.spec.js @@ -0,0 +1,31 @@ +export default { + props: { + colors: ['red', 'yellow', 'blue'], + }, + snapshot(target) { + return { + ul: target.shadowRoot.querySelector('ul'), + colors: target.shadowRoot.querySelectorAll('li'), + }; + }, + test(target, snapshots) { + const ul = target.shadowRoot.querySelector('ul'); + let colors = ul.querySelectorAll('li'); + expect(ul).toBe(snapshots.ul); + expect(colors[0]).toBe(snapshots.colors[0]); + expect(colors[0].textContent).toBe('red'); + expect(colors[1]).toBe(snapshots.colors[1]); + expect(colors[1].textContent).toBe('yellow'); + expect(colors[2]).toBe(snapshots.colors[2]); + expect(colors[2].textContent).toBe('blue'); + + target.colors = ['orange', 'green', 'violet']; + + return Promise.resolve().then(() => { + colors = ul.querySelectorAll('li'); + expect(colors[0].textContent).toBe('orange'); + expect(colors[1].textContent).toBe('green'); + expect(colors[2].textContent).toBe('violet'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/for-each/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/directives/for-each/x/main/main.html new file mode 100644 index 0000000000..f478978aa9 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/for-each/x/main/main.html @@ -0,0 +1,7 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/for-each/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/directives/for-each/x/main/main.js new file mode 100644 index 0000000000..88c9d7ed9d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/for-each/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api colors; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/if-false/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/directives/if-false/index.spec.js new file mode 100644 index 0000000000..0a7930b796 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/if-false/index.spec.js @@ -0,0 +1,19 @@ +export default { + props: { + control: false, + }, + snapshot(target) { + return { + p: target.shadowRoot.querySelector('p'), + }; + }, + test(target, snapshots) { + expect(target.shadowRoot.querySelector('p')).toBe(snapshots.p); + + target.control = true; + + return Promise.resolve().then(() => { + expect(target.shadowRoot.querySelector('p')).toBeNull(); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/if-false/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/directives/if-false/x/main/main.html new file mode 100644 index 0000000000..6cdc0f58a6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/if-false/x/main/main.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/if-false/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/directives/if-false/x/main/main.js new file mode 100644 index 0000000000..0eaadfe543 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/if-false/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api control; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/if-true/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/directives/if-true/index.spec.js new file mode 100644 index 0000000000..196e52d647 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/if-true/index.spec.js @@ -0,0 +1,19 @@ +export default { + props: { + control: true, + }, + snapshot(target) { + return { + p: target.shadowRoot.querySelector('p'), + }; + }, + test(target, snapshots) { + expect(target.shadowRoot.querySelector('p')).toBe(snapshots.p); + + target.control = false; + + return Promise.resolve().then(() => { + expect(target.shadowRoot.querySelector('p')).toBeNull(); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/if-true/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/directives/if-true/x/main/main.html new file mode 100644 index 0000000000..c5d80d15d4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/if-true/x/main/main.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/if-true/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/directives/if-true/x/main/main.js new file mode 100644 index 0000000000..0eaadfe543 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/if-true/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api control; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/iterator/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/directives/iterator/index.spec.js new file mode 100644 index 0000000000..6bac7c837f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/iterator/index.spec.js @@ -0,0 +1,31 @@ +export default { + props: { + colors: ['red', 'yellow', 'blue'], + }, + snapshot(target) { + return { + ul: target.shadowRoot.querySelector('ul'), + colors: target.shadowRoot.querySelectorAll('li'), + }; + }, + test(target, snapshots) { + const ul = target.shadowRoot.querySelector('ul'); + let colors = ul.querySelectorAll('li'); + expect(ul).toBe(snapshots.ul); + expect(colors[0]).toBe(snapshots.colors[0]); + expect(colors[0].textContent).toBe('red'); + expect(colors[1]).toBe(snapshots.colors[1]); + expect(colors[1].textContent).toBe('yellow'); + expect(colors[2]).toBe(snapshots.colors[2]); + expect(colors[2].textContent).toBe('blue'); + + target.colors = ['orange', 'green', 'violet']; + + return Promise.resolve().then(() => { + colors = ul.querySelectorAll('li'); + expect(colors[0].textContent).toBe('orange'); + expect(colors[1].textContent).toBe('green'); + expect(colors[2].textContent).toBe('violet'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/iterator/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/directives/iterator/x/main/main.html new file mode 100644 index 0000000000..8e5140f566 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/iterator/x/main/main.html @@ -0,0 +1,7 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/iterator/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/directives/iterator/x/main/main.js new file mode 100644 index 0000000000..88c9d7ed9d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/iterator/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api colors; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/index.spec.js new file mode 100644 index 0000000000..b6a49ef4ed --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/index.spec.js @@ -0,0 +1,22 @@ +export default { + props: { + label: 'dynamic', + }, + snapshot(target) { + const cmp = target.shadowRoot.querySelector('x-child'); + const p = cmp.shadowRoot.querySelector('p'); + + return { + cmp, + p, + }; + }, + test(target, snapshots) { + const cmp = target.shadowRoot.querySelector('x-child'); + const p = cmp.shadowRoot.querySelector('p'); + + expect(cmp).toBe(snapshots.cmp); + expect(p).toBe(snapshots.p); + expect(p.textContent).toBe('dynamic'); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/x/child/child.html new file mode 100644 index 0000000000..260d58602d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/x/child/child.js new file mode 100644 index 0000000000..e250b53c38 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Child extends LightningElement { + @api label; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/x/main/main.html new file mode 100644 index 0000000000..575bfc8555 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/x/main/main.js new file mode 100644 index 0000000000..d64d3311e8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-dynamic/x/main/main.js @@ -0,0 +1,7 @@ +import { LightningElement, api } from 'lwc'; +import Child from 'x/child'; + +export default class Main extends LightningElement { + @api label; + Ctor = Child; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-inner-html/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-inner-html/index.spec.js new file mode 100644 index 0000000000..3727317561 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-inner-html/index.spec.js @@ -0,0 +1,22 @@ +export default { + props: { + content: '

test-content

', + }, + snapshot(target) { + const div = target.shadowRoot.querySelector('div'); + const p = div.querySelector('p'); + return { + div, + p, + text: p.textContent, + }; + }, + test(target, snapshot) { + const div = target.shadowRoot.querySelector('div'); + const p = div.querySelector('p'); + + expect(div).toBe(snapshot.div); + expect(p).toBe(snapshot.p); + expect(p.textContent).toBe(snapshot.text); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-inner-html/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-inner-html/x/main/main.html new file mode 100644 index 0000000000..66a8e2c720 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-inner-html/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-inner-html/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-inner-html/x/main/main.js new file mode 100644 index 0000000000..8066dd4ab7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-inner-html/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api content; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/index.spec.js new file mode 100644 index 0000000000..b6a49ef4ed --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/index.spec.js @@ -0,0 +1,22 @@ +export default { + props: { + label: 'dynamic', + }, + snapshot(target) { + const cmp = target.shadowRoot.querySelector('x-child'); + const p = cmp.shadowRoot.querySelector('p'); + + return { + cmp, + p, + }; + }, + test(target, snapshots) { + const cmp = target.shadowRoot.querySelector('x-child'); + const p = cmp.shadowRoot.querySelector('p'); + + expect(cmp).toBe(snapshots.cmp); + expect(p).toBe(snapshots.p); + expect(p.textContent).toBe('dynamic'); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/x/child/child.html new file mode 100644 index 0000000000..260d58602d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/x/child/child.js new file mode 100644 index 0000000000..e250b53c38 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Child extends LightningElement { + @api label; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/x/main/main.html new file mode 100644 index 0000000000..575bfc8555 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/x/main/main.js new file mode 100644 index 0000000000..d64d3311e8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-is/x/main/main.js @@ -0,0 +1,7 @@ +import { LightningElement, api } from 'lwc'; +import Child from 'x/child'; + +export default class Main extends LightningElement { + @api label; + Ctor = Child; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-on/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-on/index.spec.js new file mode 100644 index 0000000000..d9cb0c0ad8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-on/index.spec.js @@ -0,0 +1,20 @@ +export default { + props: {}, + snapshot(target) { + const div = target.shadowRoot.querySelector('div'); + + return { + div, + }; + }, + test(target, snapshots) { + const snapshotAfterHydration = this.snapshot(target); + expect(snapshotAfterHydration.div).toBe(snapshots.div); + + // verify handler + snapshotAfterHydration.div.click(); + expect(target.timesClickedHandlerIsExecuted).toBe(1); + snapshotAfterHydration.div.dispatchEvent(new CustomEvent('foo')); + expect(target.timesFooHandlerIsExecuted).toBe(1); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-on/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-on/x/main/main.html new file mode 100644 index 0000000000..cabec61e8b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-on/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-on/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-on/x/main/main.js new file mode 100644 index 0000000000..4464d2fd7b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/directives/lwc-on/x/main/main.js @@ -0,0 +1,25 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + _clickedHandlerCounter = 0; + _fooHandlerCounter = 0; + + @api + get timesClickedHandlerIsExecuted() { + return this._clickedHandlerCounter; + } + + @api + get timesFooHandlerIsExecuted() { + return this._fooHandlerCounter; + } + + eventListeners = { + click: function () { + this._clickedHandlerCounter++; + }, + foo: function () { + this._fooHandlerCounter++; + }, + }; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/errors/already-hydrated/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/errors/already-hydrated/index.spec.js new file mode 100644 index 0000000000..251c761b6e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/errors/already-hydrated/index.spec.js @@ -0,0 +1,13 @@ +export default { + advancedTest(target, { Component, hydrateComponent, consoleSpy }) { + hydrateComponent(target, Component, {}); + + hydrateComponent(target, Component, {}); + + const consoleCalls = consoleSpy.calls; + + TestUtils.expectConsoleCalls(consoleCalls, { + warn: ['"hydrateComponent" expects an element that is not hydrated.'], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/errors/already-hydrated/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/errors/already-hydrated/x/main/main.html new file mode 100644 index 0000000000..c43fc008ba --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/errors/already-hydrated/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/errors/already-hydrated/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/errors/already-hydrated/x/main/main.js new file mode 100644 index 0000000000..80164ac007 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/errors/already-hydrated/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/events/dynamic/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/events/dynamic/index.spec.js new file mode 100644 index 0000000000..775cda244f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/events/dynamic/index.spec.js @@ -0,0 +1,18 @@ +export default { + props: {}, + snapshot(target) { + const button = target.shadowRoot.querySelector('button'); + + return { + button, + }; + }, + test(target, snapshots) { + const snapshotAfterHydration = this.snapshot(target); + expect(snapshotAfterHydration.button).toBe(snapshots.button); + + // verify handler + snapshotAfterHydration.button.click(); + expect(target.timesHandlerIsExecuted).toBe(1); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/events/dynamic/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/events/dynamic/x/main/main.html new file mode 100644 index 0000000000..365cb4c1f1 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/events/dynamic/x/main/main.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/events/dynamic/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/events/dynamic/x/main/main.js new file mode 100644 index 0000000000..d283549853 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/events/dynamic/x/main/main.js @@ -0,0 +1,15 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + dynamic = 'I am dynamic'; + _executedHandlerCounter = 0; + + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/events/static/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/events/static/index.spec.js new file mode 100644 index 0000000000..775cda244f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/events/static/index.spec.js @@ -0,0 +1,18 @@ +export default { + props: {}, + snapshot(target) { + const button = target.shadowRoot.querySelector('button'); + + return { + button, + }; + }, + test(target, snapshots) { + const snapshotAfterHydration = this.snapshot(target); + expect(snapshotAfterHydration.button).toBe(snapshots.button); + + // verify handler + snapshotAfterHydration.button.click(); + expect(target.timesHandlerIsExecuted).toBe(1); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/events/static/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/events/static/x/main/main.html new file mode 100644 index 0000000000..b4bab7ae61 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/events/static/x/main/main.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/events/static/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/events/static/x/main/main.js new file mode 100644 index 0000000000..f10a039ba8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/events/static/x/main/main.js @@ -0,0 +1,14 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + _executedHandlerCounter = 0; + + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/index.spec.js new file mode 100644 index 0000000000..4d584c357a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/index.spec.js @@ -0,0 +1,16 @@ +export default { + props: {}, + advancedTest(target, { consoleSpy }) { + const ids = Object.entries(TestUtils.extractDataIds(target)).filter( + ([id]) => !id.endsWith('.shadowRoot') + ); + for (const [id, node] of ids) { + expect(node.childNodes.length).toBe(1); + expect(node.firstChild.nodeType).toBe(Node.TEXT_NODE); + const expected = id.startsWith('lwc-inner-html-') ? 'injected' : 'original'; + expect(node.firstChild.nodeValue).toBe(expected); + } + expect(consoleSpy.calls.warn).toHaveSize(0); + expect(consoleSpy.calls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/x/component/component.html b/packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/x/component/component.html new file mode 100644 index 0000000000..6806310398 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/x/component/component.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/x/component/component.js b/packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/x/component/component.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/x/component/component.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/x/main/main.html new file mode 100644 index 0000000000..3e9615e892 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/x/main/main.html @@ -0,0 +1,20 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/x/main/main.js new file mode 100644 index 0000000000..dc4b54ded2 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/inner-outer-html/x/main/main.js @@ -0,0 +1,6 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + computed = 'injected'; + spread = { innerHTML: 'wheeeeeeeeeeeeeeeeeeeeeeeeeee' }; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/input/dynamic/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/input/dynamic/index.spec.js new file mode 100644 index 0000000000..dcb24ab10b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/input/dynamic/index.spec.js @@ -0,0 +1,334 @@ +// `` and `` have a peculiar attr/prop relationship, so the engine +// has historically treated them as props rather than attributes: +// https://github.com/salesforce/lwc/blob/b584d39/packages/%40lwc/template-compiler/src/parser/attribute.ts#L217-L221 +// For example, an element might be rendered as `` but `input.checked` could +// still return true. `value` behaves similarly. `value` and `checked` behave surprisingly +// because the attributes actually represent the "default" value rather than the current one: +// - https://jakearchibald.com/2024/attributes-vs-properties/#value-on-input-fields +// - https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#checked +// Here we check both the "default" and "runtime" variants of `checked`/`value`. Note that +// `defaultChecked`/`defaultValue` correspond to the `checked`/`value` attributes. +function getRelevantInputProps(input) { + const { defaultChecked, defaultValue, disabled, checked, type, value } = input; + return { + checked, + defaultChecked, + defaultValue, + disabled, + type, + value, + }; +} + +export default { + snapshot(target) { + const inputs = target.shadowRoot.querySelectorAll('input'); + return { + inputs, + }; + }, + test(target, snapshots, consoleCalls) { + const inputs = target.shadowRoot.querySelectorAll('input'); + + expect(inputs.length).toBe(snapshots.inputs.length); + for (let i = 0; i < inputs.length; i++) { + const input = inputs[i]; + expect(input).toBe(snapshots.inputs[i]); + } + + // prop values are as expected + expect([...inputs].map(getRelevantInputProps)).toEqual([ + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: true, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: true, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: true, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: true, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: true, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: 'undefined', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: 'false', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: 'true', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: '0', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: '0', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: 'NaN', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: 'Infinity', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: '-Infinity', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: 'foo,bar', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: '[object Object]', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: true, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: true, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: true, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: true, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: true, + type: 'text', + value: '', + }, + ]); + + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/input/dynamic/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/input/dynamic/x/main/main.html new file mode 100644 index 0000000000..ff13db4b2d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/input/dynamic/x/main/main.html @@ -0,0 +1,40 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/input/dynamic/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/input/dynamic/x/main/main.js new file mode 100644 index 0000000000..26486468a3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/input/dynamic/x/main/main.js @@ -0,0 +1,16 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + isUndefined = undefined; + isNull = null; + isFalse = false; + isTrue = true; + isZero = 0; + isNegZero = -0; + isNaN = NaN; + isInfinity = Infinity; + isNegInfinity = -Infinity; + isEmptyString = ''; + isArray = ['foo', 'bar']; + isObject = { foo: 'bar', baz: 'quux' }; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/input/static/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/input/static/index.spec.js new file mode 100644 index 0000000000..fb233a993e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/input/static/index.spec.js @@ -0,0 +1,209 @@ +// `` and `` have a peculiar attr/prop relationship, so the engine +// has historically treated them as props rather than attributes: +// https://github.com/salesforce/lwc/blob/b584d39/packages/%40lwc/template-compiler/src/parser/attribute.ts#L217-L221 +// For example, an element might be rendered as `` but `input.checked` could +// still return true. `value` behaves similarly. `value` and `checked` behave surprisingly +// because the attributes actually represent the "default" value rather than the current one: +// - https://jakearchibald.com/2024/attributes-vs-properties/#value-on-input-fields +// - https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#checked +// Here we check both the "default" and "runtime" variants of `checked`/`value`. Note that +// `defaultChecked`/`defaultValue` correspond to the `checked`/`value` attributes. +function getRelevantInputProps(input) { + const { defaultChecked, defaultValue, disabled, checked, type, value } = input; + return { + checked, + defaultChecked, + defaultValue, + disabled, + type, + value, + }; +} + +export default { + snapshot(target) { + const inputs = target.shadowRoot.querySelectorAll('input'); + return { + inputs, + }; + }, + test(target, snapshots, consoleCalls) { + const inputs = target.shadowRoot.querySelectorAll('input'); + + expect(inputs.length).toBe(snapshots.inputs.length); + for (let i = 0; i < inputs.length; i++) { + const input = inputs[i]; + expect(input).toBe(snapshots.inputs[i]); + + // "default" checked/value are not set by either SSR or runtime + expect(input.defaultValue).toBe(''); + expect(input.defaultChecked).toBe(false); + } + + expect([...inputs].map(getRelevantInputProps)).toEqual([ + { + checked: true, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: true, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: true, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: true, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: true, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: true, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'checkbox', + value: 'on', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: 'true', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: 'value', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: 'false', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: 'true', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: 'FALSE', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: 'TRUE', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: false, + type: 'text', + value: 'yolo', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: true, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: true, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: true, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: true, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: true, + type: 'text', + value: '', + }, + { + checked: false, + defaultChecked: false, + defaultValue: '', + disabled: true, + type: 'text', + value: '', + }, + ]); + + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/input/static/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/input/static/x/main/main.html new file mode 100644 index 0000000000..65f21a30cd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/input/static/x/main/main.html @@ -0,0 +1,24 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/input/static/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/input/static/x/main/main.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/input/static/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/connected-callback/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/connected-callback/index.spec.js new file mode 100644 index 0000000000..1cdf5a2f25 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/connected-callback/index.spec.js @@ -0,0 +1,15 @@ +export default { + snapshot(target) { + const p = target.querySelector('p'); + return { + p, + text: p.firstChild, + }; + }, + test(target, snapshots) { + const p = target.querySelector('p'); + expect(p).toBe(snapshots.p); + expect(p.firstChild).toBe(snapshots.text); + expect(p.textContent).toBe('connectedCallback:true'); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/connected-callback/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/connected-callback/x/main/main.html new file mode 100644 index 0000000000..4c60746d95 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/connected-callback/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/connected-callback/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/connected-callback/x/main/main.js new file mode 100644 index 0000000000..1a46e269c8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/connected-callback/x/main/main.js @@ -0,0 +1,10 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement { + static renderMode = 'light'; + + called = false; + connectedCallback() { + this.called = true; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/index.spec.js new file mode 100644 index 0000000000..786b3e7f9f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/index.spec.js @@ -0,0 +1,28 @@ +let disconnectedCalled = false; + +// NOTE: Disconnected callback is not triggered by Node.remove, see: https://github.com/salesforce/lwc/issues/1102 +// That's why we trick it by removing a component via the diffing algo. +export default { + props: { + showFoo: true, + disconnectedCb: () => { + disconnectedCalled = true; + }, + }, + snapshot(target) { + return { + xFoo: target.querySelector('x-foo'), + }; + }, + test(target, snapshots) { + const xFoo = target.querySelector('x-foo'); + expect(xFoo).not.toBe(null); + expect(xFoo).toBe(snapshots.xFoo); + + target.showFoo = false; + + return Promise.resolve().then(() => { + expect(disconnectedCalled).toBe(true); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/x/foo/foo.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/x/foo/foo.html new file mode 100644 index 0000000000..73ac2428e3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/x/foo/foo.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/x/foo/foo.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/x/foo/foo.js new file mode 100644 index 0000000000..783fcb21d5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/x/foo/foo.js @@ -0,0 +1,11 @@ +import { LightningElement, api } from 'lwc'; + +export default class Foo extends LightningElement { + static renderMode = 'light'; + + @api disconnectedCb; + + disconnectedCallback() { + this.disconnectedCb.call(null); + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/x/main/main.html new file mode 100644 index 0000000000..0796af64d2 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/x/main/main.html @@ -0,0 +1,6 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/x/main/main.js new file mode 100644 index 0000000000..0a890e26e1 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/disconnected-callback/x/main/main.js @@ -0,0 +1,12 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + static renderMode = 'light'; + + @api disconnectedCb; + @api showFoo; + + disconnectedCallback() { + this.disconnectedCb.call(null); + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/render-method/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/render-method/index.spec.js new file mode 100644 index 0000000000..599a9f8991 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/render-method/index.spec.js @@ -0,0 +1,24 @@ +export default { + props: { + useTplA: true, + }, + snapshot(target) { + const p = target.querySelector('p'); + return { + p, + text: p.firstChild, + }; + }, + test(target, snapshots) { + const p = target.querySelector('p'); + expect(p).toBe(snapshots.p); + expect(p.firstChild).toBe(snapshots.text); + expect(p.textContent).toBe('template A'); + + target.useTplA = false; + + return Promise.resolve().then(() => { + expect(target.querySelector('p').textContent).toBe('template B'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/render-method/x/main/a.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/render-method/x/main/a.html new file mode 100644 index 0000000000..96f5ba7d49 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/render-method/x/main/a.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/render-method/x/main/b.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/render-method/x/main/b.html new file mode 100644 index 0000000000..aa9c8b69ca --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/render-method/x/main/b.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/render-method/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/render-method/x/main/main.js new file mode 100644 index 0000000000..26b629428c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/render-method/x/main/main.js @@ -0,0 +1,13 @@ +import { LightningElement, api } from 'lwc'; +import tplA from './a.html'; +import tplB from './b.html'; + +export default class Main extends LightningElement { + static renderMode = 'light'; + + @api useTplA; + + render() { + return this.useTplA ? tplA : tplB; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/rendered-callback/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/rendered-callback/index.spec.js new file mode 100644 index 0000000000..5ecd60410c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/rendered-callback/index.spec.js @@ -0,0 +1,19 @@ +export default { + snapshot(target) { + const p = target.querySelector('p'); + return { + p, + text: p.firstChild, + }; + }, + test(target, snapshots) { + const p = target.querySelector('p'); + expect(p).toBe(snapshots.p); + expect(p.firstChild).toBe(snapshots.text); + expect(p.textContent).toBe('renderedCallback:false'); + + return Promise.resolve().then(() => { + expect(p.textContent).toBe('renderedCallback:true'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/rendered-callback/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/rendered-callback/x/main/main.html new file mode 100644 index 0000000000..b53f4312f2 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/rendered-callback/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/rendered-callback/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/rendered-callback/x/main/main.js new file mode 100644 index 0000000000..059f546fa9 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/component-lifecycle/rendered-callback/x/main/main.js @@ -0,0 +1,10 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement { + static renderMode = 'light'; + + called = false; + renderedCallback() { + this.called = true; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/comments/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/comments/index.spec.js new file mode 100644 index 0000000000..9c3fb4e8b8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/comments/index.spec.js @@ -0,0 +1,26 @@ +export default { + props: { + control: true, + }, + snapshot(target) { + const [firstComment, p] = target.childNodes; + const [secondComment, text] = p.childNodes; + return { + firstComment, + p, + secondComment, + text, + }; + }, + test(target, snapshots) { + const [firstComment, p] = target.childNodes; + const [secondComment, text] = p.childNodes; + + expect(firstComment).toBe(snapshots.firstComment); + expect(firstComment.nodeValue).toBe('first comment'); + expect(p).toBe(snapshots.p); + expect(secondComment).toBe(snapshots.secondComment); + expect(secondComment.nodeValue).toBe('comment inside element'); + expect(text).toBe(snapshots.text); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/comments/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/comments/x/main/main.html new file mode 100644 index 0000000000..16df91450f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/comments/x/main/main.html @@ -0,0 +1,7 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/comments/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/comments/x/main/main.js new file mode 100644 index 0000000000..86183b5f3e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/comments/x/main/main.js @@ -0,0 +1,7 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + static renderMode = 'light'; + + @api control; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/for-each/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/for-each/index.spec.js new file mode 100644 index 0000000000..d9d4602085 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/for-each/index.spec.js @@ -0,0 +1,31 @@ +export default { + props: { + colors: ['red', 'yellow', 'blue'], + }, + snapshot(target) { + return { + ul: target.querySelector('ul'), + colors: target.querySelectorAll('li'), + }; + }, + test(target, snapshots) { + const ul = target.querySelector('ul'); + let colors = ul.querySelectorAll('li'); + expect(ul).toBe(snapshots.ul); + expect(colors[0]).toBe(snapshots.colors[0]); + expect(colors[0].textContent).toBe('red'); + expect(colors[1]).toBe(snapshots.colors[1]); + expect(colors[1].textContent).toBe('yellow'); + expect(colors[2]).toBe(snapshots.colors[2]); + expect(colors[2].textContent).toBe('blue'); + + target.colors = ['orange', 'green', 'violet']; + + return Promise.resolve().then(() => { + colors = ul.querySelectorAll('li'); + expect(colors[0].textContent).toBe('orange'); + expect(colors[1].textContent).toBe('green'); + expect(colors[2].textContent).toBe('violet'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/for-each/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/for-each/x/main/main.html new file mode 100644 index 0000000000..29f28a4539 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/for-each/x/main/main.html @@ -0,0 +1,7 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/for-each/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/for-each/x/main/main.js new file mode 100644 index 0000000000..afb3f7c9aa --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/for-each/x/main/main.js @@ -0,0 +1,7 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + static renderMode = 'light'; + + @api colors; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-false/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-false/index.spec.js new file mode 100644 index 0000000000..bf7eeb7bcf --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-false/index.spec.js @@ -0,0 +1,19 @@ +export default { + props: { + control: false, + }, + snapshot(target) { + return { + p: target.querySelector('p'), + }; + }, + test(target, snapshots) { + expect(target.querySelector('p')).toBe(snapshots.p); + + target.control = true; + + return Promise.resolve().then(() => { + expect(target.querySelector('p')).toBeNull(); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-false/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-false/x/main/main.html new file mode 100644 index 0000000000..4a4c5b1ce0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-false/x/main/main.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-false/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-false/x/main/main.js new file mode 100644 index 0000000000..86183b5f3e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-false/x/main/main.js @@ -0,0 +1,7 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + static renderMode = 'light'; + + @api control; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-true/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-true/index.spec.js new file mode 100644 index 0000000000..33643e57be --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-true/index.spec.js @@ -0,0 +1,19 @@ +export default { + props: { + control: true, + }, + snapshot(target) { + return { + p: target.querySelector('p'), + }; + }, + test(target, snapshots) { + expect(target.querySelector('p')).toBe(snapshots.p); + + target.control = false; + + return Promise.resolve().then(() => { + expect(target.querySelector('p')).toBeNull(); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-true/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-true/x/main/main.html new file mode 100644 index 0000000000..2d51e71943 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-true/x/main/main.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-true/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-true/x/main/main.js new file mode 100644 index 0000000000..86183b5f3e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/if-true/x/main/main.js @@ -0,0 +1,7 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + static renderMode = 'light'; + + @api control; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/iterator/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/iterator/index.spec.js new file mode 100644 index 0000000000..d9d4602085 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/iterator/index.spec.js @@ -0,0 +1,31 @@ +export default { + props: { + colors: ['red', 'yellow', 'blue'], + }, + snapshot(target) { + return { + ul: target.querySelector('ul'), + colors: target.querySelectorAll('li'), + }; + }, + test(target, snapshots) { + const ul = target.querySelector('ul'); + let colors = ul.querySelectorAll('li'); + expect(ul).toBe(snapshots.ul); + expect(colors[0]).toBe(snapshots.colors[0]); + expect(colors[0].textContent).toBe('red'); + expect(colors[1]).toBe(snapshots.colors[1]); + expect(colors[1].textContent).toBe('yellow'); + expect(colors[2]).toBe(snapshots.colors[2]); + expect(colors[2].textContent).toBe('blue'); + + target.colors = ['orange', 'green', 'violet']; + + return Promise.resolve().then(() => { + colors = ul.querySelectorAll('li'); + expect(colors[0].textContent).toBe('orange'); + expect(colors[1].textContent).toBe('green'); + expect(colors[2].textContent).toBe('violet'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/iterator/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/iterator/x/main/main.html new file mode 100644 index 0000000000..9fd57c2a31 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/iterator/x/main/main.html @@ -0,0 +1,7 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/iterator/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/iterator/x/main/main.js new file mode 100644 index 0000000000..afb3f7c9aa --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/iterator/x/main/main.js @@ -0,0 +1,7 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + static renderMode = 'light'; + + @api colors; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/index.spec.js new file mode 100644 index 0000000000..77b5c3d75c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/index.spec.js @@ -0,0 +1,22 @@ +export default { + props: { + label: 'dynamic', + }, + snapshot(target) { + const cmp = target.querySelector('x-child'); + const p = cmp.querySelector('p'); + + return { + cmp, + p, + }; + }, + test(target, snapshots) { + const cmp = target.querySelector('x-child'); + const p = cmp.querySelector('p'); + + expect(cmp).toBe(snapshots.cmp); + expect(p).toBe(snapshots.p); + expect(p.textContent).toBe('dynamic'); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/x/child/child.html new file mode 100644 index 0000000000..a75c46f6e5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/x/child/child.js new file mode 100644 index 0000000000..ef40534ce2 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/x/child/child.js @@ -0,0 +1,7 @@ +import { LightningElement, api } from 'lwc'; + +export default class Child extends LightningElement { + static renderMode = 'light'; + + @api label; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/x/main/main.html new file mode 100644 index 0000000000..ce8c44c26e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/x/main/main.js new file mode 100644 index 0000000000..722fc79723 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-dynamic/x/main/main.js @@ -0,0 +1,9 @@ +import { LightningElement, api } from 'lwc'; +import Child from 'x/child'; + +export default class Main extends LightningElement { + static renderMode = 'light'; + + @api label; + Ctor = Child; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-inner-html/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-inner-html/index.spec.js new file mode 100644 index 0000000000..8b29eddea5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-inner-html/index.spec.js @@ -0,0 +1,25 @@ +export default { + props: { + content: '

test-content

', + }, + snapshot(target) { + const div = target.querySelector('div'); + const p = div.querySelector('p'); + return { + div, + p, + text: p.textContent, + }; + }, + test(target, snapshot, consoleCalls) { + const div = target.querySelector('div'); + const p = div.querySelector('p'); + + expect(div).toBe(snapshot.div); + expect(p).toBe(snapshot.p); + expect(p.textContent).toBe(snapshot.text); + + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-inner-html/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-inner-html/x/main/main.html new file mode 100644 index 0000000000..559313c99b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-inner-html/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-inner-html/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-inner-html/x/main/main.js new file mode 100644 index 0000000000..df07c2bf3e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-inner-html/x/main/main.js @@ -0,0 +1,7 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + static renderMode = 'light'; + + @api content; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/index.spec.js new file mode 100644 index 0000000000..77b5c3d75c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/index.spec.js @@ -0,0 +1,22 @@ +export default { + props: { + label: 'dynamic', + }, + snapshot(target) { + const cmp = target.querySelector('x-child'); + const p = cmp.querySelector('p'); + + return { + cmp, + p, + }; + }, + test(target, snapshots) { + const cmp = target.querySelector('x-child'); + const p = cmp.querySelector('p'); + + expect(cmp).toBe(snapshots.cmp); + expect(p).toBe(snapshots.p); + expect(p.textContent).toBe('dynamic'); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/x/child/child.html new file mode 100644 index 0000000000..a75c46f6e5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/x/child/child.js new file mode 100644 index 0000000000..ef40534ce2 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/x/child/child.js @@ -0,0 +1,7 @@ +import { LightningElement, api } from 'lwc'; + +export default class Child extends LightningElement { + static renderMode = 'light'; + + @api label; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/x/main/main.html new file mode 100644 index 0000000000..ce8c44c26e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/x/main/main.js new file mode 100644 index 0000000000..722fc79723 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/directives/lwc-is/x/main/main.js @@ -0,0 +1,9 @@ +import { LightningElement, api } from 'lwc'; +import Child from 'x/child'; + +export default class Main extends LightningElement { + static renderMode = 'light'; + + @api label; + Ctor = Child; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/index.spec.js new file mode 100644 index 0000000000..772d602562 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/index.spec.js @@ -0,0 +1,23 @@ +export default { + snapshot(target) { + const shadowChild = target.querySelector('[data-id="x-shadow-child"]'); + + return { + lightParent: target, + parentText: target.querySelector('[data-id="parent-text"]'), + shadowChild, + childText: shadowChild.shadowRoot.querySelector('[data-id="child-text"]'), + }; + }, + test(target, snapshots) { + const hydratedSnapshot = this.snapshot(target); + + expect(hydratedSnapshot.lightParent).toBe(snapshots.lightParent); + expect(hydratedSnapshot.parentText).toBe(snapshots.parentText); + expect(hydratedSnapshot.shadowChild).toBe(snapshots.shadowChild); + expect(hydratedSnapshot.childText).toBe(snapshots.childText); + + expect(hydratedSnapshot.parentText.textContent).toEqual('inside parent'); + expect(hydratedSnapshot.childText.textContent).toEqual('inside child'); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/x/main/main.html new file mode 100644 index 0000000000..fd151ea4de --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/x/main/main.js new file mode 100644 index 0000000000..0f60e8b223 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/x/shadowChild/shadowChild.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/x/shadowChild/shadowChild.html new file mode 100644 index 0000000000..f0475ce78c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/x/shadowChild/shadowChild.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/x/shadowChild/shadowChild.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/x/shadowChild/shadowChild.js new file mode 100644 index 0000000000..405b116075 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/light-parent-shadow-child/x/shadowChild/shadowChild.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class ShadowChild extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/index.spec.js new file mode 100644 index 0000000000..6d91b566f1 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/index.spec.js @@ -0,0 +1,14 @@ +export default { + test(target) { + expect(getComputedStyle(target).backgroundColor).toEqual('rgb(0, 0, 255)'); + expect(getComputedStyle(target.shadowRoot.querySelector('div')).color).toEqual( + 'rgb(255, 0, 0)' + ); + + return Promise.resolve().then(() => { + expect( + getComputedStyle(target.shadowRoot.querySelector('x-light-child div')).color + ).not.toEqual('rgb(255, 0, 0)'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/lightChild/lightChild.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/lightChild/lightChild.html new file mode 100644 index 0000000000..4042451180 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/lightChild/lightChild.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/lightChild/lightChild.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/lightChild/lightChild.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/lightChild/lightChild.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/main/main.html new file mode 100644 index 0000000000..eb975063f7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/main/main.js new file mode 100644 index 0000000000..80164ac007 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/main/main.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/main/main.scoped.css new file mode 100644 index 0000000000..1528e312bd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/can-scope-shadow-dom-styles/x/main/main.scoped.css @@ -0,0 +1,7 @@ +:host { + background: blue; +} + +div { + color: red; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/index.spec.js new file mode 100644 index 0000000000..3786ef65f3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/index.spec.js @@ -0,0 +1,24 @@ +export default { + snapshot(target) { + return { + basicElement: target.shadowRoot.querySelector('x-basic'), + otherElement: target.shadowRoot.querySelector('x-other'), + }; + }, + test(target, snapshots) { + const { basicElement, otherElement } = this.snapshot(target); + expect(basicElement).toBe(snapshots.basicElement); + expect(otherElement).toBe(snapshots.otherElement); + + const basicHostComputed = getComputedStyle(basicElement); + const basicComputed = getComputedStyle(basicElement.querySelector('div')); + const otherComputed = getComputedStyle(otherElement.querySelector('div')); + expect(basicHostComputed.backgroundColor).toEqual('rgb(255, 0, 0)'); + expect(basicComputed.color).toEqual('rgb(0, 128, 0)'); + expect(basicComputed.marginLeft).toEqual('10px'); + expect(basicComputed.marginRight).toEqual('5px'); + expect(otherComputed.color).toEqual('rgb(0, 0, 0)'); + expect(otherComputed.marginLeft).toEqual('10px'); + expect(otherComputed.marginRight).toEqual('5px'); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/basic/basic.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/basic/basic.css new file mode 100644 index 0000000000..106d26b08b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/basic/basic.css @@ -0,0 +1,3 @@ +div { + margin-left: 10px; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/basic/basic.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/basic/basic.html new file mode 100644 index 0000000000..21f7dcb6bf --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/basic/basic.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/basic/basic.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/basic/basic.js new file mode 100644 index 0000000000..33c4a65565 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/basic/basic.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class Basic extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/basic/basic.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/basic/basic.scoped.css new file mode 100644 index 0000000000..d81ae5ec22 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/basic/basic.scoped.css @@ -0,0 +1,7 @@ +:host { + background-color: red; +} + +div { + color: green; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/main/main.html new file mode 100644 index 0000000000..f9c22146e1 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/main/main.js new file mode 100644 index 0000000000..80164ac007 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/other/other.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/other/other.css new file mode 100644 index 0000000000..146b14a9ce --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/other/other.css @@ -0,0 +1,3 @@ +div { + margin-right: 5px; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/other/other.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/other/other.html new file mode 100644 index 0000000000..21f7dcb6bf --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/other/other.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/other/other.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/other/other.js new file mode 100644 index 0000000000..d7e9df134e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/css-allow-unscoped-css-leak-out/x/other/other.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class Other extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/index.spec.js new file mode 100644 index 0000000000..84218066a9 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/index.spec.js @@ -0,0 +1,9 @@ +export default { + test(target, snapshot, consoleCalls) { + // W-19087941: Expect no errors or warnings, hydration or otherwise + TestUtils.expectConsoleCalls(consoleCalls, { + error: [], + warn: [], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/child/child.html new file mode 100644 index 0000000000..6f06182f35 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/child/child.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/child/child.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/child/child.scoped.css new file mode 100644 index 0000000000..72e32daf4d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/child/child.scoped.css @@ -0,0 +1,3 @@ +.blue { + background-color: blue; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/main/main.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/main/main.css new file mode 100644 index 0000000000..edb1d0fb9d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/main/main.css @@ -0,0 +1,3 @@ +.main { + color: red; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/main/main.html new file mode 100644 index 0000000000..9b2366dfc3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/main/main.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/deduped-scoped-styles/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/index.spec.js new file mode 100644 index 0000000000..e7a776e357 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/index.spec.js @@ -0,0 +1,18 @@ +export default { + snapshot(target) { + return { + parent: target, + child: target.querySelector('x-child'), + }; + }, + advancedTest(target, { Component, hydrateComponent, consoleSpy }) { + const { parent, child } = this.snapshot(target); + hydrateComponent(target, Component, {}); + const consoleCalls = consoleSpy.calls; + // Validate there is no class attribute mismatch + expect(consoleCalls.error).toHaveSize(0); + // Validate there is no hydration mismatch + expect(parent).toBe(target); + expect(child).toBe(target.querySelector('x-child')); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/child/child.html new file mode 100644 index 0000000000..7840cce9fe --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/child/child.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/child/child.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/child/child.scoped.css new file mode 100644 index 0000000000..d0bcad1033 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/child/child.scoped.css @@ -0,0 +1,3 @@ +:host { + padding: 8px; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/main/main.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/main/main.css new file mode 100644 index 0000000000..edb1d0fb9d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/main/main.css @@ -0,0 +1,3 @@ +.main { + color: red; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/main/main.html new file mode 100644 index 0000000000..2d69fe28ac --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/main/main.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/child-scoped-styles/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/index.spec.js new file mode 100644 index 0000000000..e7a776e357 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/index.spec.js @@ -0,0 +1,18 @@ +export default { + snapshot(target) { + return { + parent: target, + child: target.querySelector('x-child'), + }; + }, + advancedTest(target, { Component, hydrateComponent, consoleSpy }) { + const { parent, child } = this.snapshot(target); + hydrateComponent(target, Component, {}); + const consoleCalls = consoleSpy.calls; + // Validate there is no class attribute mismatch + expect(consoleCalls.error).toHaveSize(0); + // Validate there is no hydration mismatch + expect(parent).toBe(target); + expect(child).toBe(target.querySelector('x-child')); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/child/child.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/child/child.css new file mode 100644 index 0000000000..d0bcad1033 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/child/child.css @@ -0,0 +1,3 @@ +:host { + padding: 8px; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/child/child.html new file mode 100644 index 0000000000..7840cce9fe --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/child/child.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/main/main.html new file mode 100644 index 0000000000..2d69fe28ac --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/main/main.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/main/main.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/main/main.scoped.css new file mode 100644 index 0000000000..158f6463c1 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/parent-scoped-styles/x/main/main.scoped.css @@ -0,0 +1,3 @@ +.main { + color: blue; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/index.spec.js new file mode 100644 index 0000000000..e7a776e357 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/index.spec.js @@ -0,0 +1,18 @@ +export default { + snapshot(target) { + return { + parent: target, + child: target.querySelector('x-child'), + }; + }, + advancedTest(target, { Component, hydrateComponent, consoleSpy }) { + const { parent, child } = this.snapshot(target); + hydrateComponent(target, Component, {}); + const consoleCalls = consoleSpy.calls; + // Validate there is no class attribute mismatch + expect(consoleCalls.error).toHaveSize(0); + // Validate there is no hydration mismatch + expect(parent).toBe(target); + expect(child).toBe(target.querySelector('x-child')); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/child/child.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/child/child.css new file mode 100644 index 0000000000..d0bcad1033 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/child/child.css @@ -0,0 +1,3 @@ +:host { + padding: 8px; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/child/child.html new file mode 100644 index 0000000000..7840cce9fe --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/child/child.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/main/main.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/main/main.css new file mode 100644 index 0000000000..5a5039b6e6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/main/main.css @@ -0,0 +1,3 @@ +:host { + color: blue; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/main/main.html new file mode 100644 index 0000000000..586e14e39f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/main/main.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/nested-scoped-styles/without-scoped-styles/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/index.spec.js new file mode 100644 index 0000000000..7dedd68aec --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/index.spec.js @@ -0,0 +1,31 @@ +export default { + test(target) { + const rafPromise = () => new Promise((resolve) => requestAnimationFrame(() => resolve())); + + // A (no styles) -> B (styles) -> C (no styles) -> D (styles) + expect(getComputedStyle(target).marginLeft).toEqual('0px'); + expect(getComputedStyle(target.querySelector('div')).color).toEqual('rgb(0, 0, 0)'); + target.next(); + return rafPromise() + .then(() => { + expect(getComputedStyle(target).marginLeft).toEqual('20px'); + expect(getComputedStyle(target.querySelector('div')).color).toEqual( + 'rgb(255, 0, 0)' + ); + target.next(); + return rafPromise(); + }) + .then(() => { + expect(getComputedStyle(target).marginLeft).toEqual('0px'); + expect(getComputedStyle(target.querySelector('div')).color).toEqual('rgb(0, 0, 0)'); + target.next(); + return rafPromise(); + }) + .then(() => { + expect(getComputedStyle(target).marginLeft).toEqual('30px'); + expect(getComputedStyle(target.querySelector('div')).color).toEqual( + 'rgb(0, 0, 255)' + ); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/a.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/a.html new file mode 100644 index 0000000000..4a39102bbe --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/a.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/b.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/b.html new file mode 100644 index 0000000000..71ebd6813c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/b.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/b.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/b.scoped.css new file mode 100644 index 0000000000..39b50ac938 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/b.scoped.css @@ -0,0 +1,7 @@ +:host { + margin-left: 20px; +} + +div { + color: red; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/c.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/c.html new file mode 100644 index 0000000000..e569b813fc --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/c.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/d.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/d.html new file mode 100644 index 0000000000..be6170af9f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/d.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/d.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/d.scoped.css new file mode 100644 index 0000000000..d8c0961b2c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/d.scoped.css @@ -0,0 +1,7 @@ +:host { + margin-left: 30px; +} + +div { + color: blue; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/main.js new file mode 100644 index 0000000000..8ccdc8c1c7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/x/main/main.js @@ -0,0 +1,21 @@ +import { LightningElement, api } from 'lwc'; +import A from './a.html'; +import B from './b.html'; +import C from './c.html'; +import D from './d.html'; + +const templates = [A, B, C, D]; + +export default class Main extends LightningElement { + static renderMode = 'light'; + current = 0; + + @api + next() { + this.current++; + } + + render() { + return templates[this.current]; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/index.spec.js new file mode 100644 index 0000000000..7662a615c4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/index.spec.js @@ -0,0 +1,8 @@ +export default { + advancedTest(target, { Component, hydrateComponent, consoleSpy }) { + hydrateComponent(target, Component, {}); + const consoleCalls = consoleSpy.calls; + // Validate there is no class attribute hydration mismatch + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/child/child.html new file mode 100644 index 0000000000..7840cce9fe --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/child/child.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/child/child.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/child/child.scoped.css new file mode 100644 index 0000000000..d0bcad1033 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/child/child.scoped.css @@ -0,0 +1,3 @@ +:host { + padding: 8px; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/main/main.html new file mode 100644 index 0000000000..4a8b50481d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/main/main.js new file mode 100644 index 0000000000..2aaa1dc37c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/main/main.js @@ -0,0 +1,6 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; + styles = 'yolo'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/main/main.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/main/main.scoped.css new file mode 100644 index 0000000000..1c50c3c426 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/dynamic-class/x/main/main.scoped.css @@ -0,0 +1,7 @@ +:host { + padding: 0; +} + +.yolo { + color: blue; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/index.spec.js new file mode 100644 index 0000000000..7662a615c4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/index.spec.js @@ -0,0 +1,8 @@ +export default { + advancedTest(target, { Component, hydrateComponent, consoleSpy }) { + hydrateComponent(target, Component, {}); + const consoleCalls = consoleSpy.calls; + // Validate there is no class attribute hydration mismatch + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/child/child.html new file mode 100644 index 0000000000..7840cce9fe --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/child/child.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/child/child.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/child/child.scoped.css new file mode 100644 index 0000000000..d0bcad1033 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/child/child.scoped.css @@ -0,0 +1,3 @@ +:host { + padding: 8px; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/main/main.html new file mode 100644 index 0000000000..b9c4779b5f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/main/main.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/main/main.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/main/main.scoped.css new file mode 100644 index 0000000000..1c50c3c426 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/static-class/x/main/main.scoped.css @@ -0,0 +1,7 @@ +:host { + padding: 0; +} + +.yolo { + color: blue; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/index.spec.js new file mode 100644 index 0000000000..7662a615c4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/index.spec.js @@ -0,0 +1,8 @@ +export default { + advancedTest(target, { Component, hydrateComponent, consoleSpy }) { + hydrateComponent(target, Component, {}); + const consoleCalls = consoleSpy.calls; + // Validate there is no class attribute hydration mismatch + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/child/child.html new file mode 100644 index 0000000000..7840cce9fe --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/child/child.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/child/child.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/child/child.scoped.css new file mode 100644 index 0000000000..d0bcad1033 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/child/child.scoped.css @@ -0,0 +1,3 @@ +:host { + padding: 8px; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/main/main.html new file mode 100644 index 0000000000..586e14e39f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/main/main.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/main/main.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/main/main.scoped.css new file mode 100644 index 0000000000..a962d1624d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/scoped-styles/with-host-selector/without-class/x/main/main.scoped.css @@ -0,0 +1,3 @@ +:host { + padding: 0; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/index.spec.js new file mode 100644 index 0000000000..571159d9bf --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/index.spec.js @@ -0,0 +1,23 @@ +export default { + snapshot(target) { + const lightChild = target.shadowRoot.querySelector('[data-id="x-light-child"]'); + + return { + lightParent: target, + parentText: target.shadowRoot.querySelector('[data-id="parent-text"]'), + shadowChild: lightChild, + childText: lightChild.querySelector('[data-id="child-text"]'), + }; + }, + test(target, snapshots) { + const hydratedSnapshot = this.snapshot(target); + + expect(hydratedSnapshot.lightParent).toBe(snapshots.lightParent); + expect(hydratedSnapshot.parentText).toBe(snapshots.parentText); + expect(hydratedSnapshot.shadowChild).toBe(snapshots.shadowChild); + expect(hydratedSnapshot.childText).toBe(snapshots.childText); + + expect(hydratedSnapshot.parentText.textContent).toEqual('inside parent'); + expect(hydratedSnapshot.childText.textContent).toEqual('inside child'); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/x/lightChild/lightChild.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/x/lightChild/lightChild.html new file mode 100644 index 0000000000..6672768dfd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/x/lightChild/lightChild.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/x/lightChild/lightChild.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/x/lightChild/lightChild.js new file mode 100644 index 0000000000..4b92f22854 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/x/lightChild/lightChild.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class LightChild extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/x/main/main.html new file mode 100644 index 0000000000..9735d640a4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/x/main/main.js new file mode 100644 index 0000000000..80164ac007 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/shadow-parent-light-child/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/index.spec.js new file mode 100644 index 0000000000..3d01fae07b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/index.spec.js @@ -0,0 +1,46 @@ +// NOTE: Disconnected callback is not triggered by Node.remove, see: https://github.com/salesforce/lwc/issues/1102 +// That's why we trick it by removing a component via the diffing algo. +export default { + props: { + slotText: 'initial', + }, + snapshot(target) { + const cmpWithSlot = target.querySelector('x-with-slots'); + const cmpWithSlotParagraphs = cmpWithSlot.querySelectorAll('p'); + const [mainText, secondText] = cmpWithSlot.querySelectorAll('span'); + + return { + withSlot: cmpWithSlot, + mainText, + secondText, + cmpWithSlotParagraphs, + }; + }, + test(target, snapshots) { + const snapshotAfterHydration = this.snapshot(target); + + expect(snapshotAfterHydration.withSlot).toBe(snapshots.withSlot); + expect(snapshotAfterHydration.mainText).toBe(snapshots.mainText); + expect(snapshotAfterHydration.secondText).toBe(snapshots.secondText); + expect(snapshotAfterHydration.cmpWithSlotParagraphs).toEqual( + snapshots.cmpWithSlotParagraphs + ); + + expect(snapshotAfterHydration.mainText.textContent).toBe('initial'); + + // let's verify handlers + snapshotAfterHydration.mainText.click(); + snapshotAfterHydration.cmpWithSlotParagraphs[0].click(); + + expect(target.timesHandlerIsExecuted).toBe(1); + expect(snapshotAfterHydration.withSlot.timesHandlerIsExecuted).toBe(1); + + target.slotText = 'changed'; + + return Promise.resolve().then(() => { + const lateSnapshot = this.snapshot(target); + + expect(lateSnapshot.mainText.textContent).toBe('changed'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/x/main/main.html new file mode 100644 index 0000000000..f2f34b2ce3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/x/main/main.html @@ -0,0 +1,8 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/x/main/main.js new file mode 100644 index 0000000000..69b7b33d44 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/x/main/main.js @@ -0,0 +1,17 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + static renderMode = 'light'; + + _executedHandlerCounter = 0; + + @api slotText; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/x/withSlots/withSlots.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/x/withSlots/withSlots.html new file mode 100644 index 0000000000..4463cb8744 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/x/withSlots/withSlots.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/x/withSlots/withSlots.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/x/withSlots/withSlots.js new file mode 100644 index 0000000000..31ef6c5a03 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/default/x/withSlots/withSlots.js @@ -0,0 +1,15 @@ +import { LightningElement, api } from 'lwc'; + +export default class WithSlots extends LightningElement { + static renderMode = 'light'; + + _executedHandlerCounter = 0; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/index.spec.js new file mode 100644 index 0000000000..3d01fae07b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/index.spec.js @@ -0,0 +1,46 @@ +// NOTE: Disconnected callback is not triggered by Node.remove, see: https://github.com/salesforce/lwc/issues/1102 +// That's why we trick it by removing a component via the diffing algo. +export default { + props: { + slotText: 'initial', + }, + snapshot(target) { + const cmpWithSlot = target.querySelector('x-with-slots'); + const cmpWithSlotParagraphs = cmpWithSlot.querySelectorAll('p'); + const [mainText, secondText] = cmpWithSlot.querySelectorAll('span'); + + return { + withSlot: cmpWithSlot, + mainText, + secondText, + cmpWithSlotParagraphs, + }; + }, + test(target, snapshots) { + const snapshotAfterHydration = this.snapshot(target); + + expect(snapshotAfterHydration.withSlot).toBe(snapshots.withSlot); + expect(snapshotAfterHydration.mainText).toBe(snapshots.mainText); + expect(snapshotAfterHydration.secondText).toBe(snapshots.secondText); + expect(snapshotAfterHydration.cmpWithSlotParagraphs).toEqual( + snapshots.cmpWithSlotParagraphs + ); + + expect(snapshotAfterHydration.mainText.textContent).toBe('initial'); + + // let's verify handlers + snapshotAfterHydration.mainText.click(); + snapshotAfterHydration.cmpWithSlotParagraphs[0].click(); + + expect(target.timesHandlerIsExecuted).toBe(1); + expect(snapshotAfterHydration.withSlot.timesHandlerIsExecuted).toBe(1); + + target.slotText = 'changed'; + + return Promise.resolve().then(() => { + const lateSnapshot = this.snapshot(target); + + expect(lateSnapshot.mainText.textContent).toBe('changed'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/x/main/main.html new file mode 100644 index 0000000000..59614ab0c2 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/x/main/main.html @@ -0,0 +1,10 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/x/main/main.js new file mode 100644 index 0000000000..69b7b33d44 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/x/main/main.js @@ -0,0 +1,17 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + static renderMode = 'light'; + + _executedHandlerCounter = 0; + + @api slotText; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/x/withSlots/withSlots.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/x/withSlots/withSlots.html new file mode 100644 index 0000000000..d143936f61 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/x/withSlots/withSlots.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/x/withSlots/withSlots.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/x/withSlots/withSlots.js new file mode 100644 index 0000000000..31ef6c5a03 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/named/x/withSlots/withSlots.js @@ -0,0 +1,15 @@ +import { LightningElement, api } from 'lwc'; + +export default class WithSlots extends LightningElement { + static renderMode = 'light'; + + _executedHandlerCounter = 0; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/index.spec.js new file mode 100644 index 0000000000..29e6f0ef67 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/index.spec.js @@ -0,0 +1,41 @@ +export default { + props: {}, + snapshot(target) { + const cmpChild = target.querySelector('x-child'); + const cmpChildDiv = target.querySelector('x-child div'); + const [cmpScopedOuter, cmpScopedInner] = target.querySelectorAll('x-scoped'); + + return { + target, + cmpScopedOuter, + cmpScopedInner, + cmpChild, + cmpChildDiv, + }; + }, + advancedTest(target, { Component, hydrateComponent, consoleSpy, container, selector }) { + const snapshotBeforeHydration = this.snapshot(target); + hydrateComponent(target, Component, this.props); + const hydratedTarget = container.querySelector(selector); + const snapshotAfterHydration = this.snapshot(hydratedTarget); + + for (const snapshotKey of Object.keys(snapshotBeforeHydration)) { + expect(snapshotBeforeHydration[snapshotKey]) + .withContext( + `${snapshotKey} should be the same DOM element both before and after hydration` + ) + .toBe(snapshotAfterHydration[snapshotKey]); + } + + for (const snapshotKey of ['target', 'cmpScopedOuter', 'cmpScopedInner']) { + expect(snapshotBeforeHydration[snapshotKey].childNodes) + .withContext( + `${snapshotKey} should have the same number of child nodes before & after hydration` + ) + .toHaveSize(snapshotAfterHydration[snapshotKey].childNodes.length); + } + + expect(consoleSpy.calls.warn).toHaveSize(0); + expect(consoleSpy.calls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/child/child.html new file mode 100644 index 0000000000..dbbdadf497 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/child/child.js new file mode 100644 index 0000000000..cd310547e9 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/main/main.html new file mode 100644 index 0000000000..59c9aab39e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/main/main.html @@ -0,0 +1,14 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/main/main.js new file mode 100644 index 0000000000..0f60e8b223 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/scoped/scoped.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/scoped/scoped.html new file mode 100644 index 0000000000..065c9b5d53 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/scoped/scoped.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/scoped/scoped.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/scoped/scoped.js new file mode 100644 index 0000000000..a14b4668fe --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested-and-scoped/x/scoped/scoped.js @@ -0,0 +1,12 @@ +import { LightningElement, api } from 'lwc'; + +export default class scoped extends LightningElement { + static renderMode = 'light'; + @api instance = 'unknown'; + + get scopedItem() { + return { + msg: `from-x-scoped-${this.instance}`, + }; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/index.spec.js new file mode 100644 index 0000000000..dc3a08be97 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/index.spec.js @@ -0,0 +1,54 @@ +// NOTE: Disconnected callback is not triggered by Node.remove, see: https://github.com/salesforce/lwc/issues/1102 +// That's why we trick it by removing a component via the diffing algo. +export default { + props: { + slotText: 'initial', + }, + snapshot(target) { + const cmpWithSlot = target.querySelector('x-with-slots'); + const cmpChild = target.querySelector('x-child'); + const cmpWithSlotParagraphs = cmpWithSlot.querySelectorAll('p'); + const childParagraphs = cmpChild.querySelectorAll('p'); + + const [mainText, secondText] = cmpWithSlot.querySelectorAll('span'); + + return { + withSlot: cmpWithSlot, + cmpChild, + mainText, + secondText, + cmpWithSlotParagraphs, + childParagraphs, + }; + }, + test(target, snapshots) { + const snapshotAfterHydration = this.snapshot(target); + + expect(snapshotAfterHydration.withSlot).toBe(snapshots.withSlot); + expect(snapshotAfterHydration.mainText).toBe(snapshots.mainText); + expect(snapshotAfterHydration.secondText).toBe(snapshots.secondText); + expect(snapshotAfterHydration.cmpWithSlotParagraphs).toEqual( + snapshots.cmpWithSlotParagraphs + ); + expect(snapshotAfterHydration.childParagraphs).toEqual(snapshots.childParagraphs); + + expect(snapshotAfterHydration.mainText.textContent).toBe('initial'); + + // let's verify handlers + snapshotAfterHydration.mainText.click(); + snapshotAfterHydration.cmpWithSlotParagraphs[0].click(); + snapshotAfterHydration.childParagraphs[0].click(); + + expect(target.timesHandlerIsExecuted).toBe(1); + expect(snapshotAfterHydration.withSlot.timesHandlerIsExecuted).toBe(1); + expect(snapshotAfterHydration.cmpChild.timesHandlerIsExecuted).toBe(1); + + target.slotText = 'changed'; + + return Promise.resolve().then(() => { + const lateSnapshot = this.snapshot(target); + + expect(lateSnapshot.mainText.textContent).toBe('changed'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/child/child.html new file mode 100644 index 0000000000..4463cb8744 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/child/child.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/child/child.js new file mode 100644 index 0000000000..7d2278eb5e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/child/child.js @@ -0,0 +1,15 @@ +import { LightningElement, api } from 'lwc'; + +export default class Child extends LightningElement { + static renderMode = 'light'; + + _executedHandlerCounter = 0; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/main/main.html new file mode 100644 index 0000000000..0bb3927ebd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/main/main.html @@ -0,0 +1,10 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/main/main.js new file mode 100644 index 0000000000..69b7b33d44 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/main/main.js @@ -0,0 +1,17 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + static renderMode = 'light'; + + _executedHandlerCounter = 0; + + @api slotText; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/withSlots/withSlots.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/withSlots/withSlots.html new file mode 100644 index 0000000000..4463cb8744 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/withSlots/withSlots.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/withSlots/withSlots.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/withSlots/withSlots.js new file mode 100644 index 0000000000..31ef6c5a03 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/nested/x/withSlots/withSlots.js @@ -0,0 +1,15 @@ +import { LightningElement, api } from 'lwc'; + +export default class WithSlots extends LightningElement { + static renderMode = 'light'; + + _executedHandlerCounter = 0; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/index.spec.js new file mode 100644 index 0000000000..a7b5f7bf0a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/index.spec.js @@ -0,0 +1,31 @@ +// NOTE: Disconnected callback is not triggered by Node.remove, see: https://github.com/salesforce/lwc/issues/1102 +// That's why we trick it by removing a component via the diffing algo. +export default { + props: { + slotText: 'initial', + }, + snapshot(target) { + const cmpWithSlot = target.querySelector('x-with-slots'); + const cmpWithSlotParagraphs = cmpWithSlot.querySelectorAll('p'); + + return { + withSlot: cmpWithSlot, + cmpWithSlotParagraphs, + }; + }, + test(target, snapshots) { + const snapshotAfterHydration = this.snapshot(target); + + expect(snapshotAfterHydration.withSlot).toBe(snapshots.withSlot); + expect(snapshotAfterHydration.cmpWithSlotParagraphs).toHaveSize(3); + expect(snapshotAfterHydration.cmpWithSlotParagraphs).toEqual( + snapshots.cmpWithSlotParagraphs + ); + + // let's verify handlers + snapshotAfterHydration.cmpWithSlotParagraphs[0].click(); + snapshotAfterHydration.cmpWithSlotParagraphs[1].click(); + + expect(snapshotAfterHydration.withSlot.timesHandlerIsExecuted).toBe(2); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/x/main/main.html new file mode 100644 index 0000000000..9be43c1622 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/x/main/main.js new file mode 100644 index 0000000000..69b7b33d44 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/x/main/main.js @@ -0,0 +1,17 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + static renderMode = 'light'; + + _executedHandlerCounter = 0; + + @api slotText; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/x/withSlots/withSlots.html b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/x/withSlots/withSlots.html new file mode 100644 index 0000000000..9f3345a948 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/x/withSlots/withSlots.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/x/withSlots/withSlots.js b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/x/withSlots/withSlots.js new file mode 100644 index 0000000000..31ef6c5a03 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/light-dom/slots/no-content/x/withSlots/withSlots.js @@ -0,0 +1,15 @@ +import { LightningElement, api } from 'lwc'; + +export default class WithSlots extends LightningElement { + static renderMode = 'light'; + + _executedHandlerCounter = 0; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-compatibility/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-compatibility/index.spec.js new file mode 100644 index 0000000000..e59544e875 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-compatibility/index.spec.js @@ -0,0 +1,30 @@ +export default { + props: { + ssr: true, + }, + clientProps: { + ssr: false, + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + expect(p).not.toBe(snapshots.p); + expect(p.getAttribute('title')).toBe('client-title'); + expect(p.getAttribute('data-same')).toBe('same-value'); + expect(p.getAttribute('data-another-diff')).toBe('client-val'); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

- rendered on server: title="ssr-title" - expected on client: title="client-title"', + 'Hydration attribute mismatch on:

- rendered on server: data-another-diff="ssr-val" - expected on client: data-another-diff="client-val"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-compatibility/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-compatibility/x/main/main.html new file mode 100644 index 0000000000..72e815ac86 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-compatibility/x/main/main.html @@ -0,0 +1,18 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-compatibility/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-compatibility/x/main/main.js new file mode 100644 index 0000000000..8d248b4077 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-compatibility/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api ssr; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-expression/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-expression/index.spec.js new file mode 100644 index 0000000000..00585b1f87 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-expression/index.spec.js @@ -0,0 +1,28 @@ +export default { + props: { + foo: 'server', + }, + clientProps: { + foo: 'client', + }, + snapshot(target) { + const div = target.shadowRoot.querySelector('div'); + return { + div, + }; + }, + test(target, snapshots, consoleCalls) { + const div = target.shadowRoot.querySelector('div'); + expect(div).not.toBe(snapshots.div); + expect(div.getAttribute('data-foo')).toBe('client'); + expect(div.getAttribute('data-static')).toBe('same-value'); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

- rendered on server: data-foo="server" - expected on client: data-foo="client"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-expression/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-expression/x/main/main.html new file mode 100644 index 0000000000..1a3f98cdd6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-expression/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-expression/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-expression/x/main/main.js new file mode 100644 index 0000000000..869ac698f9 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/attrs-expression/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api foo; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-different/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-different/index.spec.js new file mode 100644 index 0000000000..57e77fa42c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-different/index.spec.js @@ -0,0 +1,29 @@ +export default { + props: { + classes: 'c1 c2 c3', + }, + clientProps: { + classes: 'c2 c3 c4', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + classes: p.className, + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).not.toBe(snapshots.p); + expect(p.className).not.toBe(snapshots.classes); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

- rendered on server: class="c1 c2 c3" - expected on client: class="c2 c3 c4"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-different/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-different/x/main/main.html new file mode 100644 index 0000000000..840c1025f9 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-different/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-different/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-different/x/main/main.js new file mode 100644 index 0000000000..a9d7d6f286 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-different/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api classes; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-empty-in-ssr-null-string-in-client/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-empty-in-ssr-null-string-in-client/index.spec.js new file mode 100644 index 0000000000..d9662f2dd1 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-empty-in-ssr-null-string-in-client/index.spec.js @@ -0,0 +1,32 @@ +// SSR has no class at all, whereas the client has `class="null"`. +// This is to test if hydration is smart enough to recognize the difference between a null +// attribute and the literal string "null". +export default { + props: { + className: '', + }, + clientProps: { + className: 'null', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + className: p.className, + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).not.toBe(snapshots.p); + expect(p.className).not.toBe(snapshots.className); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

- rendered on server: class="" - expected on client: class="null"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-empty-in-ssr-null-string-in-client/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-empty-in-ssr-null-string-in-client/x/main/main.html new file mode 100644 index 0000000000..850e13d2f7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-empty-in-ssr-null-string-in-client/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-empty-in-ssr-null-string-in-client/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-empty-in-ssr-null-string-in-client/x/main/main.js new file mode 100644 index 0000000000..e6a58e407c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-empty-in-ssr-null-string-in-client/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api className; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-null-string-in-ssr-empty-in-client/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-null-string-in-ssr-empty-in-client/index.spec.js new file mode 100644 index 0000000000..ba5521c8b8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-null-string-in-ssr-empty-in-client/index.spec.js @@ -0,0 +1,32 @@ +// SSR has `class="null"`, whereas the client has no class at all. +// This is to test if hydration is smart enough to recognize the difference between a null +// attribute and the literal string "null". +export default { + props: { + className: 'null', + }, + clientProps: { + className: undefined, + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + className: p.className, + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).not.toBe(snapshots.p); + expect(p.className).not.toBe(snapshots.className); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

- rendered on server: class="null" - expected on client: class=""', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-null-string-in-ssr-empty-in-client/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-null-string-in-ssr-empty-in-client/x/main/main.html new file mode 100644 index 0000000000..850e13d2f7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-null-string-in-ssr-empty-in-client/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-null-string-in-ssr-empty-in-client/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-null-string-in-ssr-empty-in-client/x/main/main.js new file mode 100644 index 0000000000..e6a58e407c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-null-string-in-ssr-empty-in-client/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api className; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same-different-order-does-not-throw/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same-different-order-does-not-throw/index.spec.js new file mode 100644 index 0000000000..d60cecb71e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same-different-order-does-not-throw/index.spec.js @@ -0,0 +1,26 @@ +export default { + props: { + classes: 'c1 c2 c3', + }, + clientProps: { + classes: 'c3 c2 c1', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + classes: p.className, + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).toBe(snapshots.p); + expect(p.className).toBe(snapshots.classes); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same-different-order-does-not-throw/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same-different-order-does-not-throw/x/main/main.html new file mode 100644 index 0000000000..840c1025f9 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same-different-order-does-not-throw/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same-different-order-does-not-throw/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same-different-order-does-not-throw/x/main/main.js new file mode 100644 index 0000000000..a9d7d6f286 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same-different-order-does-not-throw/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api classes; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same/index.spec.js new file mode 100644 index 0000000000..2b318e9d58 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same/index.spec.js @@ -0,0 +1,18 @@ +export default { + props: { + classes: 'c1 c2 c3', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + classes: p.className, + }; + }, + test(target, snapshots) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).toBe(snapshots.p); + expect(p.className).toBe(snapshots.classes); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same/x/main/main.html new file mode 100644 index 0000000000..840c1025f9 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same/x/main/main.js new file mode 100644 index 0000000000..a9d7d6f286 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/dynamic-same/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api classes; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-client-nonempty-on-server/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-client-nonempty-on-server/index.spec.js new file mode 100644 index 0000000000..06fa19d842 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-client-nonempty-on-server/index.spec.js @@ -0,0 +1,28 @@ +export default { + props: { + classes: 'yolo', + }, + clientProps: { + classes: '', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + classes: p.className, + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + expect(p).not.toBe(snapshots.p); + expect(p.className).toBe(''); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

- rendered on server: class="yolo" - expected on client: class=""', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-client-nonempty-on-server/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-client-nonempty-on-server/x/main/main.html new file mode 100644 index 0000000000..213b575922 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-client-nonempty-on-server/x/main/main.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-client-nonempty-on-server/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-client-nonempty-on-server/x/main/main.js new file mode 100644 index 0000000000..837fcfe574 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-client-nonempty-on-server/x/main/main.js @@ -0,0 +1,4 @@ +import { LightningElement, api } from 'lwc'; +export default class Main extends LightningElement { + @api classes; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-server-nonempty-on-client/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-server-nonempty-on-client/index.spec.js new file mode 100644 index 0000000000..cf15d194a8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-server-nonempty-on-client/index.spec.js @@ -0,0 +1,28 @@ +export default { + props: { + classes: '', + }, + clientProps: { + classes: 'yolo', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + classes: p.className, + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + expect(p).not.toBe(snapshots.p); + expect(p.className).toBe('yolo'); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

- rendered on server: class="" - expected on client: class="yolo"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-server-nonempty-on-client/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-server-nonempty-on-client/x/main/main.html new file mode 100644 index 0000000000..213b575922 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-server-nonempty-on-client/x/main/main.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-server-nonempty-on-client/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-server-nonempty-on-client/x/main/main.js new file mode 100644 index 0000000000..837fcfe574 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string-on-server-nonempty-on-client/x/main/main.js @@ -0,0 +1,4 @@ +import { LightningElement, api } from 'lwc'; +export default class Main extends LightningElement { + @api classes; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string/index.spec.js new file mode 100644 index 0000000000..6766da610d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string/index.spec.js @@ -0,0 +1,22 @@ +export default { + props: { + classes: '', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + classes: p.className, + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + expect(p).toBe(snapshots.p); + expect(p.className).toBe(snapshots.classes); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string/x/main/main.html new file mode 100644 index 0000000000..213b575922 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string/x/main/main.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string/x/main/main.js new file mode 100644 index 0000000000..837fcfe574 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/empty-string/x/main/main.js @@ -0,0 +1,4 @@ +import { LightningElement, api } from 'lwc'; +export default class Main extends LightningElement { + @api classes; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-client/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-client/index.spec.js new file mode 100644 index 0000000000..c212253276 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-client/index.spec.js @@ -0,0 +1,30 @@ +export default { + props: { + ssr: true, + }, + clientProps: { + ssr: false, + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + classes: p.className, + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).not.toBe(snapshots.p); + expect(p.className).not.toBe(snapshots.classes); + expect(p.className).toBe('c1 c2 c3'); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

- rendered on server: class="c1 c3" - expected on client: class="c1 c2 c3"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-client/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-client/x/main/main.html new file mode 100644 index 0000000000..80f48b8b0f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-client/x/main/main.html @@ -0,0 +1,8 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-client/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-client/x/main/main.js new file mode 100644 index 0000000000..8d248b4077 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-client/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api ssr; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-server/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-server/index.spec.js new file mode 100644 index 0000000000..8a4869acb9 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-server/index.spec.js @@ -0,0 +1,30 @@ +export default { + props: { + ssr: true, + }, + clientProps: { + ssr: false, + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + classes: p.className, + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).not.toBe(snapshots.p); + expect(p.className).not.toBe(snapshots.classes); + expect(p.className).toBe('c1 c3'); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

- rendered on server: class="c1 c2 c3" - expected on client: class="c1 c3"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-server/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-server/x/main/main.html new file mode 100644 index 0000000000..b7da6683e3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-server/x/main/main.html @@ -0,0 +1,8 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-server/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-server/x/main/main.js new file mode 100644 index 0000000000..8d248b4077 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/extra-class-from-server/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api ssr; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/index.spec.js new file mode 100644 index 0000000000..6915109a14 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/index.spec.js @@ -0,0 +1,22 @@ +export default { + advancedTest(target, { Component, hydrateComponent, consoleSpy }) { + // This simulates a condition where the server-rendered markup has + // a classname that is incorrectly missing in the client-side + // VDOM at the time of validation. + // + // Outside of this test, the tested condition should never be reached + // unless something in SSR or hydration logic is broken. + target.shadowRoot.querySelector('x-child').classList.add('foo'); + + hydrateComponent(target, Component, {}); + + const consoleCalls = consoleSpy.calls; + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on: - rendered on server: class="foo" - expected on client: class=""', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/x/child/child.html new file mode 100644 index 0000000000..1b8ebb63c6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/x/child/child.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/x/child/child.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/x/main/main.html new file mode 100644 index 0000000000..fa8171b8f8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/x/main/main.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/only-present-in-ssr/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-different-order/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-different-order/index.spec.js new file mode 100644 index 0000000000..ea7c87d29f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-different-order/index.spec.js @@ -0,0 +1,37 @@ +export default { + props: { + ssr: true, + }, + clientProps: { + ssr: false, + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + classes: p.className, + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + // TODO [#4656]: static optimization causes mismatches for style/class only when ordering is different + if (process.env.DISABLE_STATIC_CONTENT_OPTIMIZATION) { + expect(p).toBe(snapshots.p); + expect(p.className).toBe(snapshots.classes); + + expect(consoleCalls.warn).toHaveSize(0); + } else { + expect(p).not.toBe(snapshots.p); + expect(p.className).toBe('c1 c2 c3'); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

- rendered on server: class="c3 c2 c1" - expected on client: class="c1 c2 c3"', + 'Hydration completed with errors.', + ], + }); + } + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-different-order/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-different-order/x/main/main.html new file mode 100644 index 0000000000..915b6893b3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-different-order/x/main/main.html @@ -0,0 +1,8 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-different-order/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-different-order/x/main/main.js new file mode 100644 index 0000000000..8d248b4077 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-different-order/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api ssr; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-with-static-parts/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-with-static-parts/index.spec.js new file mode 100644 index 0000000000..4ce3cf9fa4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-with-static-parts/index.spec.js @@ -0,0 +1,20 @@ +export default { + props: { + s1: 's1', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + classes: p.className, + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).toBe(snapshots.p); + expect(p.className).toBe(snapshots.classes); + // static classes are skipped by hydration validation + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-with-static-parts/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-with-static-parts/x/main/main.html new file mode 100644 index 0000000000..c721460f6d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-with-static-parts/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-with-static-parts/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-with-static-parts/x/main/main.js new file mode 100644 index 0000000000..c72a9e82b5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same-with-static-parts/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api s1; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same/index.spec.js new file mode 100644 index 0000000000..a69d00963d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same/index.spec.js @@ -0,0 +1,15 @@ +export default { + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + classes: p.className, + }; + }, + test(target, snapshots) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).toBe(snapshots.p); + expect(p.className).toBe(snapshots.classes); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same/x/main/main.html new file mode 100644 index 0000000000..137d2be8e4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same/x/main/main.js new file mode 100644 index 0000000000..80164ac007 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/same/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/scoped-styles-with-existing-class/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/scoped-styles-with-existing-class/index.spec.js new file mode 100644 index 0000000000..6abb8ac3a8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/scoped-styles-with-existing-class/index.spec.js @@ -0,0 +1,22 @@ +export default { + snapshot(target) { + const [div1, div2] = target.shadowRoot.querySelectorAll('div'); + return { + div1, + div2, + }; + }, + test(target, snapshots, consoleCalls) { + const [div1, div2] = target.shadowRoot.querySelectorAll('div'); + + expect(div1).toBe(snapshots.div1); + expect(div2).toBe(snapshots.div2); + + // TODO [#4714]: Scope token classes render in an inconsistent order for static vs dynamic classes + expect(new Set(div1.classList)).toEqual(new Set(['foo', 'lwc-6958o7oup43'])); + expect(new Set(div2.classList)).toEqual(new Set(['bar', 'lwc-6958o7oup43'])); + + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/scoped-styles-with-existing-class/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/scoped-styles-with-existing-class/x/main/main.html new file mode 100644 index 0000000000..82a80e8240 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/scoped-styles-with-existing-class/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/scoped-styles-with-existing-class/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/scoped-styles-with-existing-class/x/main/main.js new file mode 100644 index 0000000000..ee02424c67 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/scoped-styles-with-existing-class/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + clazz = 'bar'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/scoped-styles-with-existing-class/x/main/main.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/scoped-styles-with-existing-class/x/main/main.scoped.css new file mode 100644 index 0000000000..b80d2f3062 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/class-attr/scoped-styles-with-existing-class/x/main/main.scoped.css @@ -0,0 +1,3 @@ +div { + background-color: wheat; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/comment-instead-of-text/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/comment-instead-of-text/index.spec.js new file mode 100644 index 0000000000..dfc078cd9f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/comment-instead-of-text/index.spec.js @@ -0,0 +1,28 @@ +export default { + props: { + showAsText: true, + }, + clientProps: { + showAsText: false, + }, + snapshot(target) { + const text = target.shadowRoot.firstChild; + return { + text, + }; + }, + test(target, snapshots, consoleCalls) { + const comment = target.shadowRoot.firstChild; + + expect(comment.nodeType).toBe(Node.COMMENT_NODE); + expect(comment.nodeValue).toBe(snapshots.text.nodeValue); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration node mismatch on: #comment - rendered on server: #text - expected on client: #comment', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/comment-instead-of-text/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/comment-instead-of-text/x/main/main.html new file mode 100644 index 0000000000..c6bfcf022e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/comment-instead-of-text/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/comment-instead-of-text/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/comment-instead-of-text/x/main/main.js new file mode 100644 index 0000000000..edfb80773a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/comment-instead-of-text/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api showAsText; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/different-lwc-inner-html/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/different-lwc-inner-html/index.spec.js new file mode 100644 index 0000000000..461ce34b5a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/different-lwc-inner-html/index.spec.js @@ -0,0 +1,37 @@ +export default { + props: { + content: '

test-content

', + }, + clientProps: { + content: '

different-content

', + }, + snapshot(target) { + const div = target.shadowRoot.querySelector('div'); + const p = div.querySelector('p'); + return { + div, + p, + }; + }, + test(target, snapshot, consoleCalls) { + const div = target.shadowRoot.querySelector('div'); + const p = div.querySelector('p'); + + expect(div).toBe(snapshot.div); + expect(p).not.toBe(snapshot.p); + expect(p.textContent).toBe('different-content'); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration innerHTML mismatch on:
- rendered on server:

test-content

- expected on client:

different-content

', + ], + }); + + target.content = '

another-content

'; + + return Promise.resolve().then(() => { + expect(div.textContent).toBe('another-content'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/different-lwc-inner-html/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/different-lwc-inner-html/x/main/main.html new file mode 100644 index 0000000000..66a8e2c720 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/different-lwc-inner-html/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/different-lwc-inner-html/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/different-lwc-inner-html/x/main/main.js new file mode 100644 index 0000000000..8066dd4ab7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/different-lwc-inner-html/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api content; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/display-errors-attrs-class-style/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/display-errors-attrs-class-style/index.spec.js new file mode 100644 index 0000000000..13167f0a20 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/display-errors-attrs-class-style/index.spec.js @@ -0,0 +1,36 @@ +export default { + props: { + classes: 'ssr-class', + styles: 'background-color: red;', + attrs: 'ssr-attrs', + }, + clientProps: { + classes: 'client-class', + styles: 'background-color: blue;', + attrs: 'client-attrs', + }, + snapshot(target) { + return { + p: target.shadowRoot.querySelector('p'), + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).not.toBe(snapshots.p); + + expect(p.className).toBe('client-class'); + expect(p.getAttribute('style')).toBe('background-color: blue;'); + expect(p.getAttribute('data-attrs')).toBe('client-attrs'); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

- rendered on server: data-attrs="ssr-attrs" - expected on client: data-attrs="client-attrs"', + 'Hydration attribute mismatch on:

- rendered on server: class="ssr-class" - expected on client: class="client-class"', + 'Hydration attribute mismatch on:

- rendered on server: style="background-color: red;" - expected on client: style="background-color: blue;"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/display-errors-attrs-class-style/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/display-errors-attrs-class-style/x/main/main.html new file mode 100644 index 0000000000..046a32c620 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/display-errors-attrs-class-style/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/display-errors-attrs-class-style/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/display-errors-attrs-class-style/x/main/main.js new file mode 100644 index 0000000000..f73a8b980c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/display-errors-attrs-class-style/x/main/main.js @@ -0,0 +1,7 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api classes; + @api styles; + @api attrs; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/index.spec.js new file mode 100644 index 0000000000..658111cb33 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/index.spec.js @@ -0,0 +1,28 @@ +export default { + props: { + ctor: 'server', + }, + clientProps: { + ctor: 'client', + }, + snapshot(target) { + const cmp = target.shadowRoot.querySelector('x-server'); + return { + tagName: cmp.tagName.toLowerCase(), + }; + }, + test(target, snapshots, consoleCalls) { + // Server side constructor + expect(snapshots.tagName).toBe('x-server'); + // Client side constructor + expect(target.shadowRoot.querySelector('x-client')).not.toBeNull(); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration node mismatch on: - rendered on server: - expected on client: ', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/client/client.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/client/client.html new file mode 100644 index 0000000000..d8473e9580 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/client/client.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/client/client.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/client/client.js new file mode 100644 index 0000000000..3f0d7e7e52 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/client/client.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/main/main.html new file mode 100644 index 0000000000..f1bb24a788 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/main/main.js new file mode 100644 index 0000000000..2c262e24f7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/main/main.js @@ -0,0 +1,21 @@ +import { LightningElement, api } from 'lwc'; +import ServerCtor from 'x/server'; +import ClientCtor from 'x/client'; + +const ctors = { + server: ServerCtor, + client: ClientCtor, +}; + +export default class Main extends LightningElement { + #ctor; + + @api + set ctor(name) { + this.#ctor = ctors[name]; + } + + get ctor() { + return this.#ctor; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/server/server.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/server/server.html new file mode 100644 index 0000000000..2acfbad4a7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/server/server.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/server/server.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/server/server.js new file mode 100644 index 0000000000..3f0d7e7e52 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/dynamic-component/x/server/server.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/element-instead-of-textNode/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/element-instead-of-textNode/index.spec.js new file mode 100644 index 0000000000..4e928f311c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/element-instead-of-textNode/index.spec.js @@ -0,0 +1,30 @@ +export default { + props: { + showAsText: false, + }, + clientProps: { + showAsText: true, + }, + snapshot(target) { + return { + text: target.shadowRoot.firstChild.textContent, + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + + expect(hydratedSnapshot.text).toBe(snapshots.text); + + const text = target.shadowRoot.firstChild; + + expect(text.nodeType).toBe(Node.TEXT_NODE); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration node mismatch on: #text - rendered on server: - expected on client: #text', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/element-instead-of-textNode/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/element-instead-of-textNode/x/main/main.html new file mode 100644 index 0000000000..84e922c725 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/element-instead-of-textNode/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/element-instead-of-textNode/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/element-instead-of-textNode/x/main/main.js new file mode 100644 index 0000000000..edfb80773a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/element-instead-of-textNode/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api showAsText; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/empty-nodes/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/empty-nodes/index.spec.js new file mode 100644 index 0000000000..da46c27c61 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/empty-nodes/index.spec.js @@ -0,0 +1,18 @@ +export default { + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + firstText: p.childNodes[0], + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshots = this.snapshot(target); + + expect(snapshots.p).toBe(hydratedSnapshots.p); + expect(snapshots.firstText).toBe(hydratedSnapshots.firstText); + + expect(consoleCalls.error).toHaveSize(0); + expect(consoleCalls.warn).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/empty-nodes/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/empty-nodes/x/main/main.html new file mode 100644 index 0000000000..d1b2d05ef3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/empty-nodes/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/empty-nodes/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/empty-nodes/x/main/main.js new file mode 100644 index 0000000000..d9a989fbcc --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/empty-nodes/x/main/main.js @@ -0,0 +1,7 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement { + get emptyText() { + return ''; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-comment/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-comment/index.spec.js new file mode 100644 index 0000000000..f875575bfd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-comment/index.spec.js @@ -0,0 +1,28 @@ +export default { + props: { + showFirstComment: true, + }, + clientProps: { + showFirstComment: false, + }, + snapshot(target) { + const comment = target.shadowRoot.firstChild; + return { + comment, + commentText: comment.nodeValue, + }; + }, + test(target, snapshots, consoleCalls) { + const comment = target.shadowRoot.firstChild; + expect(comment).toBe(snapshots.comment); + expect(comment.nodeValue).not.toBe(snapshots.commentText); + expect(comment.nodeValue).toBe('second'); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration comment mismatch on: #comment - rendered on server: first - expected on client: second', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-comment/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-comment/x/main/main.html new file mode 100644 index 0000000000..2fa6b76597 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-comment/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-comment/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-comment/x/main/main.js new file mode 100644 index 0000000000..cd370b7c74 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-comment/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api showFirstComment; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-text/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-text/index.spec.js new file mode 100644 index 0000000000..188978106f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-text/index.spec.js @@ -0,0 +1,36 @@ +export default { + props: { + greeting: 'hello!', + }, + clientProps: { + greeting: 'bye!', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + text: p.firstChild, + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + expect(p).toBe(snapshots.p); + expect(p.firstChild).toBe(snapshots.text); + expect(p.textContent).toBe('bye!'); + if (process.env.DISABLE_STATIC_CONTENT_OPTIMIZATION) { + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration text content mismatch on: #text - rendered on server: hello! - expected on client: bye!', + ], + }); + } else { + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration text content mismatch on:

- rendered on server: hello! - expected on client: bye!', + ], + }); + } + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-text/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-text/x/main/main.html new file mode 100644 index 0000000000..fd4547d4f7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-text/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-text/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-text/x/main/main.js new file mode 100644 index 0000000000..aa674ccf41 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/favors-client-side-text/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api greeting; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/index.spec.js new file mode 100644 index 0000000000..63d8c26a72 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/index.spec.js @@ -0,0 +1,35 @@ +export default { + props: { + ssr: true, + }, + clientProps: { + ssr: false, + }, + snapshot(target) { + const child = target.shadowRoot.querySelector('x-child'); + const div = child.shadowRoot.querySelector('div'); + + return { + child, + div, + }; + }, + test(target, snapshots, consoleCalls) { + const snapshotAfterHydration = this.snapshot(target); + expect(snapshotAfterHydration.child).not.toBe(snapshots.child); + expect(snapshotAfterHydration.div).not.toBe(snapshots.div); + + const { child } = snapshotAfterHydration; + expect(child.getAttribute('data-foo')).toBe('bar'); + expect(child.getAttribute('data-mutatis')).toBe('mutandis'); + expect(child.getAttribute('class')).toBe('is-client'); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on: - rendered on server: class="is-server" - expected on client: class="is-client"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/x/child/child.html new file mode 100644 index 0000000000..b54169fa06 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/x/child/child.js new file mode 100644 index 0000000000..e9c7cbaa9c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/x/child/child.js @@ -0,0 +1,9 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement { + yolo = 'woot'; + + connectedCallback() { + this.setAttribute('data-mutatis', 'mutandis'); + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/x/main/main.html new file mode 100644 index 0000000000..3c9cf33c02 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/x/main/main.js new file mode 100644 index 0000000000..aacd9d30f5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr-mutated-class-mismatch/x/main/main.js @@ -0,0 +1,9 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api ssr; + + get mismatchingClass() { + return this.ssr ? 'is-server' : 'is-client'; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/index.spec.js new file mode 100644 index 0000000000..00065f381a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/index.spec.js @@ -0,0 +1,22 @@ +export default { + props: {}, + snapshot(target) { + const div = target.shadowRoot.querySelector('x-child').shadowRoot.querySelector('div'); + + return { + div, + }; + }, + test(target, snapshots, consoleCalls) { + const snapshotAfterHydration = this.snapshot(target); + expect(snapshotAfterHydration.div).toBe(snapshots.div); + const child = target.shadowRoot.querySelector('x-child'); + expect(child.getAttribute('data-foo')).toBe('bar'); + expect(child.getAttribute('data-mutatis')).toBe('mutandis'); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + warn: [], + error: [], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/x/child/child.html new file mode 100644 index 0000000000..b54169fa06 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/x/child/child.js new file mode 100644 index 0000000000..e9c7cbaa9c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/x/child/child.js @@ -0,0 +1,9 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement { + yolo = 'woot'; + + connectedCallback() { + this.setAttribute('data-mutatis', 'mutandis'); + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/x/main/main.html new file mode 100644 index 0000000000..23344b575b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/x/main/main.js new file mode 100644 index 0000000000..80164ac007 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/attr/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/index.spec.js new file mode 100644 index 0000000000..a63010e4d2 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/index.spec.js @@ -0,0 +1,34 @@ +export default { + props: { + ssr: true, + }, + clientProps: { + ssr: false, + }, + snapshot(target) { + const child = target.shadowRoot.querySelector('x-child'); + const div = child.shadowRoot.querySelector('div'); + + return { + child, + div, + }; + }, + test(target, snapshots, consoleCalls) { + const snapshotAfterHydration = this.snapshot(target); + expect(snapshotAfterHydration.child).not.toBe(snapshots.child); + expect(snapshotAfterHydration.div).not.toBe(snapshots.div); + + const { child } = snapshotAfterHydration; + expect(child.getAttribute('class')).toBe('static mutatis'); + expect(child.getAttribute('data-mismatched-attr')).toBe('is-client'); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on: - rendered on server: data-mismatched-attr="is-server" - expected on client: data-mismatched-attr="is-client"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/x/child/child.html new file mode 100644 index 0000000000..b54169fa06 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/x/child/child.js new file mode 100644 index 0000000000..92e1a94698 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/x/child/child.js @@ -0,0 +1,11 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement { + yolo = 'woot'; + + connectedCallback() { + this.classList.add('mutatis'); + this.classList.add('mutandis'); + this.classList.remove('mutandis'); + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/x/main/main.html new file mode 100644 index 0000000000..f53301c9d0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/x/main/main.js new file mode 100644 index 0000000000..05fbc211ee --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class-mutated-attr-mismatch/x/main/main.js @@ -0,0 +1,9 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api ssr; + + get mismatchedAttr() { + return this.ssr ? 'is-server' : 'is-client'; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/index.spec.js new file mode 100644 index 0000000000..2804139cdb --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/index.spec.js @@ -0,0 +1,22 @@ +export default { + props: {}, + snapshot(target) { + const div = target.shadowRoot.querySelector('x-child').shadowRoot.querySelector('div'); + + return { + div, + }; + }, + test(target, snapshots, consoleCalls) { + const snapshotAfterHydration = this.snapshot(target); + expect(snapshotAfterHydration.div).toBe(snapshots.div); + expect(target.shadowRoot.querySelector('x-child').getAttribute('class')).toBe( + 'static mutatis' + ); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + warn: [], + error: [], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/x/child/child.html new file mode 100644 index 0000000000..b54169fa06 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/x/child/child.js new file mode 100644 index 0000000000..92e1a94698 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/x/child/child.js @@ -0,0 +1,11 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement { + yolo = 'woot'; + + connectedCallback() { + this.classList.add('mutatis'); + this.classList.add('mutandis'); + this.classList.remove('mutandis'); + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/x/main/main.html new file mode 100644 index 0000000000..dfc8fe9982 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/x/main/main.js new file mode 100644 index 0000000000..80164ac007 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/class/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/index.spec.js new file mode 100644 index 0000000000..eeb6a10ceb --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/index.spec.js @@ -0,0 +1,20 @@ +export default { + props: {}, + snapshot(target) { + const div = target.shadowRoot.querySelector('x-child').shadowRoot.querySelector('div'); + + return { + div, + }; + }, + test(target, snapshots, consoleCalls) { + const snapshotAfterHydration = this.snapshot(target); + expect(snapshotAfterHydration.div).toBe(snapshots.div); + expect(target.shadowRoot.querySelector('x-child').style.color).toBe('blue'); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + warn: [], + error: [], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/x/child/child.html new file mode 100644 index 0000000000..b54169fa06 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/x/child/child.js new file mode 100644 index 0000000000..1fd2cb1d62 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/x/child/child.js @@ -0,0 +1,9 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement { + yolo = 'woot'; + + connectedCallback() { + this.setAttribute('style', 'color: blue;'); + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/x/main/main.html new file mode 100644 index 0000000000..ecf47151fa --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/x/main/main.js new file mode 100644 index 0000000000..80164ac007 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/host-mutation-in-connected-callback/style/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/foreach/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/foreach/index.spec.js new file mode 100644 index 0000000000..ebd16f0595 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/foreach/index.spec.js @@ -0,0 +1,26 @@ +export default { + props: { + colors: ['red', 'blue', 'green'], + }, + clientProps: { + colors: ['red', 'blue'], + }, + snapshot(target) { + return { + text: target.shadowRoot.firstChild.innerText, + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + + expect(hydratedSnapshot.text).not.toBe(snapshots.text); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration child node mismatch on:

    - rendered on server:
  • ,
  • ,
  • - expected on client:
  • ,
  • ', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/foreach/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/foreach/x/main/main.html new file mode 100644 index 0000000000..788d09d887 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/foreach/x/main/main.html @@ -0,0 +1,7 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/foreach/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/foreach/x/main/main.js new file mode 100644 index 0000000000..88c9d7ed9d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/foreach/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api colors; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/if-true/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/if-true/index.spec.js new file mode 100644 index 0000000000..14632e1b57 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/if-true/index.spec.js @@ -0,0 +1,37 @@ +export default { + props: { + showBlue: true, + }, + clientProps: { + showBlue: false, + }, + snapshot(target) { + return { + text: target.shadowRoot.firstChild.innerText, + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + + expect(hydratedSnapshot.text).not.toBe(snapshots.text); + + if (process.env.DISABLE_STATIC_CONTENT_OPTIMIZATION) { + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration text content mismatch on: #text - rendered on server: blue - expected on client: green', + 'Hydration child node mismatch on:
      - rendered on server:
    • ,
    • ,
    • - expected on client:
    • ,,
    • ', + 'Hydration completed with errors.', + ], + }); + } else { + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration child node mismatch on:
        - rendered on server:
      • ,
      • ,
      • - expected on client:
      • ,,
      • ', + 'Hydration completed with errors.', + ], + }); + } + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/if-true/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/if-true/x/main/main.html new file mode 100644 index 0000000000..8e7c249f44 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/if-true/x/main/main.html @@ -0,0 +1,7 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/if-true/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/if-true/x/main/main.js new file mode 100644 index 0000000000..b536e4afcd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/invalid-number-of-nodes/if-true/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api showBlue; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/preserve-ssr-attr/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/preserve-ssr-attr/index.spec.js new file mode 100644 index 0000000000..ae3cfa8bb2 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/preserve-ssr-attr/index.spec.js @@ -0,0 +1,22 @@ +export default { + props: { + ssr: true, + }, + clientProps: { + ssr: false, + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + title: p.title, + ssrOnlyAttr: p.getAttribute('data-ssr-only'), + }; + }, + test(target, snapshots) { + const p = target.shadowRoot.querySelector('p'); + expect(p).toBe(snapshots.p); + expect(p.title).toBe(snapshots.title); + expect(p.getAttribute('data-ssr-only')).toBe(snapshots.ssrOnlyAttr); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/preserve-ssr-attr/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/preserve-ssr-attr/x/main/main.html new file mode 100644 index 0000000000..461836b6b8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/preserve-ssr-attr/x/main/main.html @@ -0,0 +1,15 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/preserve-ssr-attr/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/preserve-ssr-attr/x/main/main.js new file mode 100644 index 0000000000..8d248b4077 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/preserve-ssr-attr/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api ssr; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/sibling-issue/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/sibling-issue/index.spec.js new file mode 100644 index 0000000000..7c3c8d9ff3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/sibling-issue/index.spec.js @@ -0,0 +1,27 @@ +export default { + props: { + showMe: false, + }, + clientProps: { + showMe: true, + }, + snapshot(target) { + return { + div: target.shadowRoot.querySelector('div'), + }; + }, + test(target, snapshots, consoleCalls) { + const div = target.shadowRoot.querySelector('div'); + + expect(snapshots.div).toBeNull(); + expect(div).toBeDefined(); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration child node mismatch on: #document-fragment - rendered on server: - expected on client: #comment', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/sibling-issue/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/sibling-issue/x/main/main.html new file mode 100644 index 0000000000..76734f3e77 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/sibling-issue/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/sibling-issue/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/sibling-issue/x/main/main.js new file mode 100644 index 0000000000..727ba9540d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/sibling-issue/x/main/main.js @@ -0,0 +1,14 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api showMe; + + __renderedOnce = false; + + renderedCallback() { + if (!this.__renderedOnce) { + this.__renderedOnce = true; + this.showMe = false; + } + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/different-priority/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/different-priority/index.spec.js new file mode 100644 index 0000000000..117ea9bf41 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/different-priority/index.spec.js @@ -0,0 +1,32 @@ +export default { + props: { + dynamicStyle: 'background-color: red; border-color: red;', + }, + clientProps: { + dynamicStyle: 'background-color: red; border-color: red !important;', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + style: p.getAttribute('style'), + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).not.toBe(snapshots.p); + expect(p.getAttribute('style')).not.toBe(snapshots.style); + expect(p.getAttribute('style')).toBe( + 'background-color: red; border-color: red !important;' + ); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

        - rendered on server: style="background-color: red; border-color: red;" - expected on client: style="background-color: red; border-color: red !important;"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/different-priority/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/different-priority/x/main/main.html new file mode 100644 index 0000000000..16a9ea3139 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/different-priority/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/different-priority/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/different-priority/x/main/main.js new file mode 100644 index 0000000000..d85340d1f4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/different-priority/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api dynamicStyle; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-client/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-client/index.spec.js new file mode 100644 index 0000000000..5d843688be --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-client/index.spec.js @@ -0,0 +1,32 @@ +export default { + props: { + dynamicStyle: 'background-color: red; border-color: red;', + }, + clientProps: { + dynamicStyle: 'background-color: red; border-color: red; margin: 1px;', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + style: p.getAttribute('style'), + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).not.toBe(snapshots.p); + expect(p.getAttribute('style')).not.toBe(snapshots.style); + expect(p.getAttribute('style')).toBe( + 'background-color: red; border-color: red; margin: 1px;' + ); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

        - rendered on server: style="background-color: red; border-color: red;" - expected on client: style="background-color: red; border-color: red; margin: 1px;"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-client/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-client/x/main/main.html new file mode 100644 index 0000000000..16a9ea3139 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-client/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-client/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-client/x/main/main.js new file mode 100644 index 0000000000..d85340d1f4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-client/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api dynamicStyle; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-server/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-server/index.spec.js new file mode 100644 index 0000000000..ca92f666fe --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-server/index.spec.js @@ -0,0 +1,30 @@ +export default { + props: { + dynamicStyle: 'background-color: red; border-color: red; margin: 1px;', + }, + clientProps: { + dynamicStyle: 'background-color: red; border-color: red;', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + style: p.getAttribute('style'), + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).not.toBe(snapshots.p); + expect(p.getAttribute('style')).not.toBe(snapshots.style); + expect(p.getAttribute('style')).toBe('background-color: red; border-color: red;'); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

        - rendered on server: style="background-color: red; border-color: red; margin: 1px;" - expected on client: style="background-color: red; border-color: red;"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-server/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-server/x/main/main.html new file mode 100644 index 0000000000..16a9ea3139 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-server/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-server/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-server/x/main/main.js new file mode 100644 index 0000000000..d85340d1f4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/extra-from-server/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api dynamicStyle; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-different-order/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-different-order/index.spec.js new file mode 100644 index 0000000000..a9f3d09d8a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-different-order/index.spec.js @@ -0,0 +1,31 @@ +export default { + props: { + dynamicStyle: 'background-color: red; border-color: red; margin: 1px;', + }, + clientProps: { + dynamicStyle: 'margin: 1px; border-color: red; background-color: red;', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + style: p.getAttribute('style'), + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).not.toBe(snapshots.p); + expect(p.getAttribute('style')).toBe( + 'margin: 1px; border-color: red; background-color: red;' + ); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

        - rendered on server: style="background-color: red; border-color: red; margin: 1px;" - expected on client: style="margin: 1px; border-color: red; background-color: red;"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-different-order/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-different-order/x/main/main.html new file mode 100644 index 0000000000..16a9ea3139 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-different-order/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-different-order/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-different-order/x/main/main.js new file mode 100644 index 0000000000..d85340d1f4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-different-order/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api dynamicStyle; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-priority/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-priority/index.spec.js new file mode 100644 index 0000000000..06a355fde7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-priority/index.spec.js @@ -0,0 +1,15 @@ +export default { + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + style: p.getAttribute('style'), + }; + }, + test(target, snapshots) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).toBe(snapshots.p); + expect(p.getAttribute('style')).toBe(snapshots.style); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-priority/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-priority/x/main/main.html new file mode 100644 index 0000000000..16a9ea3139 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-priority/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-priority/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-priority/x/main/main.js new file mode 100644 index 0000000000..a77cebf3ac --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same-priority/x/main/main.js @@ -0,0 +1,6 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement { + // Note: extra spaces matters + dynamicStyle = 'background-color: red; border-color: red !important ; '; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same/index.spec.js new file mode 100644 index 0000000000..fd3dbd4c66 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same/index.spec.js @@ -0,0 +1,17 @@ +export default { + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + style: p.getAttribute('style'), + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).toBe(snapshots.p); + expect(p.getAttribute('style')).toBe(snapshots.style); + + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same/x/main/main.html new file mode 100644 index 0000000000..16a9ea3139 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same/x/main/main.js new file mode 100644 index 0000000000..6c6ffd4122 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/computed/same/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api dynamicStyle = 'background-color: red; border-color: red; margin: 1px;'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-client-nonempty-on-server/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-client-nonempty-on-server/index.spec.js new file mode 100644 index 0000000000..6648a2a90a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-client-nonempty-on-server/index.spec.js @@ -0,0 +1,28 @@ +export default { + props: { + styles: 'color: burlywood;', + }, + clientProps: { + styles: '', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + styles: p.className, + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + expect(p).not.toBe(snapshots.p); + expect(p.getAttribute('style')).toBe(null); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

        - rendered on server: style="color: burlywood;" - expected on client: style=""', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-client-nonempty-on-server/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-client-nonempty-on-server/x/main/main.html new file mode 100644 index 0000000000..cf420d8b80 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-client-nonempty-on-server/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-client-nonempty-on-server/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-client-nonempty-on-server/x/main/main.js new file mode 100644 index 0000000000..5fde8a72d8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-client-nonempty-on-server/x/main/main.js @@ -0,0 +1,4 @@ +import { LightningElement, api } from 'lwc'; +export default class Main extends LightningElement { + @api styles; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-server-nonempty-on-client/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-server-nonempty-on-client/index.spec.js new file mode 100644 index 0000000000..aca494470d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-server-nonempty-on-client/index.spec.js @@ -0,0 +1,28 @@ +export default { + props: { + styles: '', + }, + clientProps: { + styles: 'color: burlywood;', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + styles: p.className, + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + expect(p).not.toBe(snapshots.p); + expect(p.getAttribute('style')).toBe('color: burlywood;'); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

        - rendered on server: style="" - expected on client: style="color: burlywood;"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-server-nonempty-on-client/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-server-nonempty-on-client/x/main/main.html new file mode 100644 index 0000000000..cf420d8b80 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-server-nonempty-on-client/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-server-nonempty-on-client/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-server-nonempty-on-client/x/main/main.js new file mode 100644 index 0000000000..5fde8a72d8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/empty-string/empty-on-server-nonempty-on-client/x/main/main.js @@ -0,0 +1,4 @@ +import { LightningElement, api } from 'lwc'; +export default class Main extends LightningElement { + @api styles; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/different-priority/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/different-priority/index.spec.js new file mode 100644 index 0000000000..80b6824fc4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/different-priority/index.spec.js @@ -0,0 +1,32 @@ +export default { + props: { + ssr: true, + }, + clientProps: { + ssr: false, + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + style: p.getAttribute('style'), + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).not.toBe(snapshots.p); + expect(p.getAttribute('style')).not.toBe(snapshots.style); + expect(p.getAttribute('style')).toBe( + 'background-color: red; border-color: red !important;' + ); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

        - rendered on server: style="background-color: red; border-color: red;" - expected on client: style="background-color: red; border-color: red !important;"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/different-priority/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/different-priority/x/main/main.html new file mode 100644 index 0000000000..a8bc6469a5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/different-priority/x/main/main.html @@ -0,0 +1,8 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/different-priority/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/different-priority/x/main/main.js new file mode 100644 index 0000000000..8d248b4077 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/different-priority/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api ssr; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-client/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-client/index.spec.js new file mode 100644 index 0000000000..89f82ca68a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-client/index.spec.js @@ -0,0 +1,32 @@ +export default { + props: { + ssr: true, + }, + clientProps: { + ssr: false, + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + style: p.getAttribute('style'), + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).not.toBe(snapshots.p); + expect(p.getAttribute('style')).not.toBe(snapshots.style); + expect(p.getAttribute('style')).toBe( + 'background-color: red; border-color: red; margin: 1px;' + ); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

        - rendered on server: style="background-color: red; border-color: red;" - expected on client: style="background-color: red; border-color: red; margin: 1px;"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-client/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-client/x/main/main.html new file mode 100644 index 0000000000..81671733e8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-client/x/main/main.html @@ -0,0 +1,8 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-client/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-client/x/main/main.js new file mode 100644 index 0000000000..8d248b4077 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-client/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api ssr; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-server/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-server/index.spec.js new file mode 100644 index 0000000000..f8bf2b3f88 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-server/index.spec.js @@ -0,0 +1,30 @@ +export default { + props: { + ssr: true, + }, + clientProps: { + ssr: false, + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + style: p.getAttribute('style'), + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).not.toBe(snapshots.p); + expect(p.getAttribute('style')).not.toBe(snapshots.style); + expect(p.getAttribute('style')).toBe('background-color: red; border-color: red;'); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

        - rendered on server: style="background-color: red; border-color: red; margin: 1px;" - expected on client: style="background-color: red; border-color: red;"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-server/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-server/x/main/main.html new file mode 100644 index 0000000000..17340f9969 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-server/x/main/main.html @@ -0,0 +1,8 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-server/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-server/x/main/main.js new file mode 100644 index 0000000000..8d248b4077 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/extra-from-server/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api ssr; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-different-order/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-different-order/index.spec.js new file mode 100644 index 0000000000..6c8fa727f2 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-different-order/index.spec.js @@ -0,0 +1,39 @@ +export default { + props: { + ssr: true, + }, + clientProps: { + ssr: false, + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + style: p.getAttribute('style'), + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + // TODO [#4656]: static optimization causes mismatches for style/class only when ordering is different + if (process.env.DISABLE_STATIC_CONTENT_OPTIMIZATION) { + expect(p).toBe(snapshots.p); + expect(p.getAttribute('style')).toBe(snapshots.style); + + expect(consoleCalls.warn).toHaveSize(0); + } else { + expect(p).not.toBe(snapshots.p); + expect(p.getAttribute('style')).toBe( + 'margin: 1px; border-color: red; background-color: red;' + ); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on:

        - rendered on server: style="background-color: red; border-color: red; margin: 1px;" - expected on client: style="margin: 1px; border-color: red; background-color: red;"', + 'Hydration completed with errors.', + ], + }); + } + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-different-order/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-different-order/x/main/main.html new file mode 100644 index 0000000000..73e2ad235f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-different-order/x/main/main.html @@ -0,0 +1,8 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-different-order/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-different-order/x/main/main.js new file mode 100644 index 0000000000..8d248b4077 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-different-order/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api ssr; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-priority/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-priority/index.spec.js new file mode 100644 index 0000000000..06a355fde7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-priority/index.spec.js @@ -0,0 +1,15 @@ +export default { + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + style: p.getAttribute('style'), + }; + }, + test(target, snapshots) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).toBe(snapshots.p); + expect(p.getAttribute('style')).toBe(snapshots.style); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-priority/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-priority/x/main/main.html new file mode 100644 index 0000000000..d427999eb8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-priority/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-priority/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-priority/x/main/main.js new file mode 100644 index 0000000000..80164ac007 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-priority/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-with-static-parts/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-with-static-parts/index.spec.js new file mode 100644 index 0000000000..fc0d9aa2dd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-with-static-parts/index.spec.js @@ -0,0 +1,20 @@ +export default { + props: { + c1: 'c1', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + style: p.getAttribute('style'), + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).toBe(snapshots.p); + expect(p.getAttribute('style')).toBe(snapshots.style); + // static classes are skipped by hydration validation + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-with-static-parts/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-with-static-parts/x/main/main.html new file mode 100644 index 0000000000..13ba37298d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-with-static-parts/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-with-static-parts/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-with-static-parts/x/main/main.js new file mode 100644 index 0000000000..8f11610826 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same-with-static-parts/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api c1; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same/index.spec.js new file mode 100644 index 0000000000..fd3dbd4c66 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same/index.spec.js @@ -0,0 +1,17 @@ +export default { + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + style: p.getAttribute('style'), + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('p'); + + expect(p).toBe(snapshots.p); + expect(p.getAttribute('style')).toBe(snapshots.style); + + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same/x/main/main.html new file mode 100644 index 0000000000..120071ff36 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same/x/main/main.js new file mode 100644 index 0000000000..80164ac007 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/static/same/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/with-newlines/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/with-newlines/index.spec.js new file mode 100644 index 0000000000..41ee06431f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/with-newlines/index.spec.js @@ -0,0 +1,17 @@ +export default { + snapshot(target) { + const p = target.shadowRoot.querySelector('div'); + return { + p, + style: p.getAttribute('style'), + }; + }, + test(target, snapshots, consoleCalls) { + const p = target.shadowRoot.querySelector('div'); + + expect(p).toBe(snapshots.p); + expect(p.getAttribute('style')).toBe(snapshots.style); + + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/with-newlines/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/with-newlines/x/main/main.html new file mode 100644 index 0000000000..c0802c1e54 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/with-newlines/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/with-newlines/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/with-newlines/x/main/main.js new file mode 100644 index 0000000000..47868e575e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/style-attr/with-newlines/x/main/main.js @@ -0,0 +1,10 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement { + get customStyles() { + return ` + color: blue; + margin: 16px; + `; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/text-instead-of-comment/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/text-instead-of-comment/index.spec.js new file mode 100644 index 0000000000..ff771b9486 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/text-instead-of-comment/index.spec.js @@ -0,0 +1,28 @@ +export default { + props: { + showAsText: false, + }, + clientProps: { + showAsText: true, + }, + snapshot(target) { + const comment = target.shadowRoot.firstChild; + return { + comment, + }; + }, + test(target, snapshots, consoleCalls) { + const text = target.shadowRoot.firstChild; + + expect(text.nodeType).toBe(Node.TEXT_NODE); + expect(text.nodeValue).toBe(snapshots.comment.nodeValue); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration node mismatch on: #text - rendered on server: #comment - expected on client: #text', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/text-instead-of-comment/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/text-instead-of-comment/x/main/main.html new file mode 100644 index 0000000000..c6bfcf022e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/text-instead-of-comment/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/text-instead-of-comment/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/text-instead-of-comment/x/main/main.js new file mode 100644 index 0000000000..edfb80773a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/text-instead-of-comment/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api showAsText; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/textNode-instead-of-element/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/textNode-instead-of-element/index.spec.js new file mode 100644 index 0000000000..677f8106d9 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/textNode-instead-of-element/index.spec.js @@ -0,0 +1,30 @@ +export default { + props: { + showAsText: true, + }, + clientProps: { + showAsText: false, + }, + snapshot(target) { + return { + text: target.shadowRoot.firstChild.textContent, + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + + expect(hydratedSnapshot.text).toBe(snapshots.text); + + const text = target.shadowRoot.firstChild; + + expect(text.nodeType).toBe(Node.ELEMENT_NODE); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration node mismatch on: - rendered on server: #text - expected on client: ', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/textNode-instead-of-element/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/textNode-instead-of-element/x/main/main.html new file mode 100644 index 0000000000..84e922c725 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/textNode-instead-of-element/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/textNode-instead-of-element/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/textNode-instead-of-element/x/main/main.js new file mode 100644 index 0000000000..edfb80773a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/textNode-instead-of-element/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api showAsText; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/type-coercion-to-string/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/type-coercion-to-string/index.spec.js new file mode 100644 index 0000000000..6bfc2471c3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/type-coercion-to-string/index.spec.js @@ -0,0 +1,20 @@ +export default { + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + text: p.firstChild, + }; + }, + test(target, snapshots, consoleCalls) { + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + + const p = target.shadowRoot.querySelector('p'); + expect(p).toBe(snapshots.p); + expect(p.firstChild).toBe(snapshots.text); + + expect(p.textContent).toBe('123'); + expect(p.getAttribute('data-attr')).toBe('123'); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/type-coercion-to-string/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/type-coercion-to-string/x/main/main.html new file mode 100644 index 0000000000..f27a8e93f0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/type-coercion-to-string/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/type-coercion-to-string/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/type-coercion-to-string/x/main/main.js new file mode 100644 index 0000000000..202b4a5835 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/type-coercion-to-string/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement { + num = 123; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/index.spec.js new file mode 100644 index 0000000000..7b056430a5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/index.spec.js @@ -0,0 +1,13 @@ +export default { + snapshot(target) { + return { + foo: target.shadowRoot.firstChild.firstChild.getAttribute('foo'), + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + expect(hydratedSnapshot.foo).toBe(snapshots.foo); + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/x/child/child.html new file mode 100644 index 0000000000..a59f61212d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/x/child/child.js new file mode 100644 index 0000000000..64a85c2284 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/x/child/child.js @@ -0,0 +1,10 @@ +import { LightningElement, api } from 'lwc'; + +export default class Child extends LightningElement { + @api foo; + static validationOptOut = true; + + connectedCallback() { + this.setAttribute('foo', 'something else'); + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/x/main/main.html new file mode 100644 index 0000000000..2f75778d47 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/x/main/main.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/x/main/main.js new file mode 100644 index 0000000000..a5746a015a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/attr-mismatch/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Parent extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/index.spec.js new file mode 100644 index 0000000000..93197d4fdf --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/index.spec.js @@ -0,0 +1,6 @@ +export default { + test(_target, _snapshots, consoleCalls) { + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/x/child/child.html new file mode 100644 index 0000000000..a59f61212d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/x/child/child.js new file mode 100644 index 0000000000..c9e3a9b1cb --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/x/child/child.js @@ -0,0 +1,9 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement { + static validationOptOut = ['foo']; + + connectedCallback() { + this.classList.add('bar'); + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/x/main/main.html new file mode 100644 index 0000000000..a51716a474 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/x/main/main.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/x/main/main.js new file mode 100644 index 0000000000..a5746a015a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-no-opt-out/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Parent extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/index.spec.js new file mode 100644 index 0000000000..1d50ad1135 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/index.spec.js @@ -0,0 +1,13 @@ +export default { + snapshot(target) { + return { + classes: target.shadowRoot.firstChild.firstChild.className, + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + expect(hydratedSnapshot.classes).toBe(snapshots.classes); + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/x/child/child.html new file mode 100644 index 0000000000..a59f61212d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/x/child/child.js new file mode 100644 index 0000000000..d8b8eb0b62 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/x/child/child.js @@ -0,0 +1,9 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement { + static validationOptOut = ['class']; + + connectedCallback() { + this.classList.add('bar'); + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/x/main/main.html new file mode 100644 index 0000000000..a51716a474 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/x/main/main.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/x/main/main.js new file mode 100644 index 0000000000..a5746a015a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch-only/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Parent extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/index.spec.js new file mode 100644 index 0000000000..1d50ad1135 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/index.spec.js @@ -0,0 +1,13 @@ +export default { + snapshot(target) { + return { + classes: target.shadowRoot.firstChild.firstChild.className, + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + expect(hydratedSnapshot.classes).toBe(snapshots.classes); + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/x/child/child.html new file mode 100644 index 0000000000..a59f61212d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/x/child/child.js new file mode 100644 index 0000000000..49bd879b8f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/x/child/child.js @@ -0,0 +1,9 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement { + static validationOptOut = true; + + connectedCallback() { + this.classList.add('bar'); + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/x/main/main.html new file mode 100644 index 0000000000..a51716a474 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/x/main/main.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/x/main/main.js new file mode 100644 index 0000000000..a5746a015a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/class-mismatch/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Parent extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/index.spec.js new file mode 100644 index 0000000000..c7de6e2d5f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/index.spec.js @@ -0,0 +1,19 @@ +export default { + snapshot(target) { + return { + child: target.shadowRoot.querySelector('x-child'), + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + expect(hydratedSnapshot.child).not.toBe(snapshots.child); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on: - rendered on server: data-mutate-during-render="true" - expected on client: data-mutate-during-render="false"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/x/child/child.js new file mode 100644 index 0000000000..d8f37284cb --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/x/child/child.js @@ -0,0 +1,13 @@ +import { LightningElement } from 'lwc'; +import template from './template.html'; + +export default class extends LightningElement { + connectedCallback() { + this.setAttribute('data-mutate-during-connected-callback', 'true'); + } + + render() { + this.setAttribute('data-mutate-during-render', 'true'); + return template; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/x/child/template.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/x/child/template.html new file mode 100644 index 0000000000..6beff5199f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/x/child/template.html @@ -0,0 +1,2 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/x/main/main.html new file mode 100644 index 0000000000..c9e761b068 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/x/main/main.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/no-opt-out/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/index.spec.js new file mode 100644 index 0000000000..f98157ec27 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/index.spec.js @@ -0,0 +1,13 @@ +export default { + snapshot(target) { + return { + child: target.shadowRoot.querySelector('x-child'), + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + expect(hydratedSnapshot.child).toBe(snapshots.child); + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/x/child/child.js new file mode 100644 index 0000000000..de5707d476 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/x/child/child.js @@ -0,0 +1,15 @@ +import { LightningElement } from 'lwc'; +import template from './template.html'; + +export default class extends LightningElement { + static validationOptOut = ['data-mutate-during-render']; + + connectedCallback() { + this.setAttribute('data-mutate-during-connected-callback', 'true'); + } + + render() { + this.setAttribute('data-mutate-during-render', 'true'); + return template; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/x/child/template.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/x/child/template.html new file mode 100644 index 0000000000..6beff5199f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/x/child/template.html @@ -0,0 +1,2 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/x/main/main.html new file mode 100644 index 0000000000..c9e761b068 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/x/main/main.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-array/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/index.spec.js new file mode 100644 index 0000000000..f98157ec27 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/index.spec.js @@ -0,0 +1,13 @@ +export default { + snapshot(target) { + return { + child: target.shadowRoot.querySelector('x-child'), + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + expect(hydratedSnapshot.child).toBe(snapshots.child); + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/x/child/child.js new file mode 100644 index 0000000000..bf59d66dac --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/x/child/child.js @@ -0,0 +1,15 @@ +import { LightningElement } from 'lwc'; +import template from './template.html'; + +export default class extends LightningElement { + static validationOptOut = true; + + connectedCallback() { + this.setAttribute('data-mutate-during-connected-callback', 'true'); + } + + render() { + this.setAttribute('data-mutate-during-render', 'true'); + return template; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/x/child/template.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/x/child/template.html new file mode 100644 index 0000000000..6beff5199f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/x/child/template.html @@ -0,0 +1,2 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/x/main/main.html new file mode 100644 index 0000000000..c9e761b068 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/x/main/main.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-true/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/index.spec.js new file mode 100644 index 0000000000..c7de6e2d5f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/index.spec.js @@ -0,0 +1,19 @@ +export default { + snapshot(target) { + return { + child: target.shadowRoot.querySelector('x-child'), + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + expect(hydratedSnapshot.child).not.toBe(snapshots.child); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on: - rendered on server: data-mutate-during-render="true" - expected on client: data-mutate-during-render="false"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/x/child/child.js new file mode 100644 index 0000000000..56be139d76 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/x/child/child.js @@ -0,0 +1,15 @@ +import { LightningElement } from 'lwc'; +import template from './template.html'; + +export default class extends LightningElement { + static validationOptOut = ['does-not-exist']; + + connectedCallback() { + this.setAttribute('data-mutate-during-connected-callback', 'true'); + } + + render() { + this.setAttribute('data-mutate-during-render', 'true'); + return template; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/x/child/template.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/x/child/template.html new file mode 100644 index 0000000000..6beff5199f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/x/child/template.html @@ -0,0 +1,2 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/x/main/main.html new file mode 100644 index 0000000000..c9e761b068 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/x/main/main.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/mutate-in-connected-and-render/opt-out-wrong-array/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/index.spec.js new file mode 100644 index 0000000000..1d50ad1135 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/index.spec.js @@ -0,0 +1,13 @@ +export default { + snapshot(target) { + return { + classes: target.shadowRoot.firstChild.firstChild.className, + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + expect(hydratedSnapshot.classes).toBe(snapshots.classes); + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/x/child/child.html new file mode 100644 index 0000000000..a59f61212d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/x/child/child.js new file mode 100644 index 0000000000..0843574942 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement { + static validationOptOut = true; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/x/main/main.html new file mode 100644 index 0000000000..a51716a474 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/x/main/main.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/x/main/main.js new file mode 100644 index 0000000000..a5746a015a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/no-mutation/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Parent extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/index.spec.js new file mode 100644 index 0000000000..f849298def --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/index.spec.js @@ -0,0 +1,25 @@ +export default { + props: { + isServer: true, + }, + clientProps: { + isServer: false, + }, + snapshot(target) { + return { + childMarkup: target.shadowRoot.firstChild.firstChild.shadowRoot.innerHTML, + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + expect(hydratedSnapshot.childMarkup).not.toBe(snapshots.childMarkup); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration child node mismatch on: - rendered on server:

        - expected on client:
        ,
        ', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/x/child/child.html new file mode 100644 index 0000000000..1479dba665 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/x/child/child.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/x/child/child.js new file mode 100644 index 0000000000..f873c97414 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/x/child/child.js @@ -0,0 +1,9 @@ +import { LightningElement, api } from 'lwc'; + +export default class Child extends LightningElement { + @api isServer; + + get things() { + return this.isServer ? ['foo'] : ['foo', 'bar']; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/x/main/main.html new file mode 100644 index 0000000000..2e3a63e36d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/x/main/main.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/x/main/main.js new file mode 100644 index 0000000000..df6ecb77bf --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/number-of-child-els/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Parent extends LightningElement { + @api isServer; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/index.spec.js new file mode 100644 index 0000000000..78fdd35939 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/index.spec.js @@ -0,0 +1,18 @@ +export default { + snapshot(target) { + return { + child: target.shadowRoot.querySelector('x-child'), + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + expect(hydratedSnapshot.child).toBe(snapshots.child); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + warn: [ + '`validationOptOut` must be `true` or an array of attributes that should not be validated.', + ], + error: [], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/x/child/child.html new file mode 100644 index 0000000000..6beff5199f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/x/child/child.html @@ -0,0 +1,2 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/x/child/child.js new file mode 100644 index 0000000000..318572f1bb --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement { + static validationOptOut = [undefined]; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/x/main/main.html new file mode 100644 index 0000000000..bbabacf0e3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/x/main/main.js new file mode 100644 index 0000000000..a5746a015a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-array-of-non-strings/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Parent extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/index.spec.js new file mode 100644 index 0000000000..78fdd35939 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/index.spec.js @@ -0,0 +1,18 @@ +export default { + snapshot(target) { + return { + child: target.shadowRoot.querySelector('x-child'), + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + expect(hydratedSnapshot.child).toBe(snapshots.child); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + warn: [ + '`validationOptOut` must be `true` or an array of attributes that should not be validated.', + ], + error: [], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/x/child/child.html new file mode 100644 index 0000000000..6beff5199f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/x/child/child.html @@ -0,0 +1,2 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/x/child/child.js new file mode 100644 index 0000000000..a85dfec430 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement { + static validationOptOut = false; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/x/main/main.html new file mode 100644 index 0000000000..bbabacf0e3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/x/main/main.js new file mode 100644 index 0000000000..a5746a015a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-false/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Parent extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/index.spec.js new file mode 100644 index 0000000000..78fdd35939 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/index.spec.js @@ -0,0 +1,18 @@ +export default { + snapshot(target) { + return { + child: target.shadowRoot.querySelector('x-child'), + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + expect(hydratedSnapshot.child).toBe(snapshots.child); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + warn: [ + '`validationOptOut` must be `true` or an array of attributes that should not be validated.', + ], + error: [], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/x/child/child.html new file mode 100644 index 0000000000..6beff5199f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/x/child/child.html @@ -0,0 +1,2 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/x/child/child.js new file mode 100644 index 0000000000..30db5fdf7b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement { + static validationOptOut = {}; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/x/main/main.html new file mode 100644 index 0000000000..bbabacf0e3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/x/main/main.js new file mode 100644 index 0000000000..a5746a015a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-non-array/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Parent extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/index.spec.js new file mode 100644 index 0000000000..78fdd35939 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/index.spec.js @@ -0,0 +1,18 @@ +export default { + snapshot(target) { + return { + child: target.shadowRoot.querySelector('x-child'), + }; + }, + test(target, snapshots, consoleCalls) { + const hydratedSnapshot = this.snapshot(target); + expect(hydratedSnapshot.child).toBe(snapshots.child); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + warn: [ + '`validationOptOut` must be `true` or an array of attributes that should not be validated.', + ], + error: [], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/x/child/child.html new file mode 100644 index 0000000000..6beff5199f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/x/child/child.html @@ -0,0 +1,2 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/x/child/child.js new file mode 100644 index 0000000000..b20b5bfeea --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement { + static validationOptOut = null; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/x/main/main.html new file mode 100644 index 0000000000..bbabacf0e3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/x/main/main.js new file mode 100644 index 0000000000..a5746a015a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/mismatches/with-validation-opt-out/warnings/opt-out-null/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Parent extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/refs/component/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/refs/component/index.spec.js new file mode 100644 index 0000000000..4a2aa80949 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/refs/component/index.spec.js @@ -0,0 +1,11 @@ +export default { + test(target, snapshots, consoleCalls) { + const expected = target.shadowRoot.querySelector('x-child'); + const actual = target.getRef('foo'); + + expect(expected).toBe(actual); + + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/refs/component/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/refs/component/x/child/child.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/refs/component/x/child/child.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/refs/component/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/refs/component/x/main/main.html new file mode 100644 index 0000000000..fa61dc4c49 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/refs/component/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/refs/component/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/refs/component/x/main/main.js new file mode 100644 index 0000000000..00de0a7f59 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/refs/component/x/main/main.js @@ -0,0 +1,7 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api getRef(name) { + return this.refs[name]; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/refs/element/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/refs/element/index.spec.js new file mode 100644 index 0000000000..dfa59de9c1 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/refs/element/index.spec.js @@ -0,0 +1,11 @@ +export default { + test(target, snapshots, consoleCalls) { + const expected = target.shadowRoot.querySelector('div'); + const actual = target.getRef('foo'); + + expect(expected).toBe(actual); + + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/refs/element/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/refs/element/x/main/main.html new file mode 100644 index 0000000000..b383d22f41 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/refs/element/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/refs/element/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/refs/element/x/main/main.js new file mode 100644 index 0000000000..00de0a7f59 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/refs/element/x/main/main.js @@ -0,0 +1,7 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api getRef(name) { + return this.refs[name]; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/simple/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/simple/index.spec.js new file mode 100644 index 0000000000..3152f00bec --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/simple/index.spec.js @@ -0,0 +1,26 @@ +export default { + props: { + greeting: 'hello!', + }, + snapshot(target) { + const p = target.shadowRoot.querySelector('p'); + return { + p, + text: p.firstChild, + }; + }, + test(target, snapshots) { + const p = target.shadowRoot.querySelector('p'); + expect(p).toBe(snapshots.p); + expect(p.firstChild).toBe(snapshots.text); + expect(p.textContent).toBe('hello!'); + expect(customElements.get(target.tagName.toLowerCase())).not.toBeUndefined(); + expect(customElements.get('x-child')).not.toBeUndefined(); + + target.greeting = 'bye!'; + + return Promise.resolve().then(() => { + expect(p.textContent).toBe('bye!'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/simple/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/simple/x/child/child.html new file mode 100644 index 0000000000..7bc67e3a9b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/simple/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/simple/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/simple/x/child/child.js new file mode 100644 index 0000000000..3f0d7e7e52 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/simple/x/child/child.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/simple/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/simple/x/main/main.html new file mode 100644 index 0000000000..fd34ef2b36 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/simple/x/main/main.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/simple/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/simple/x/main/main.js new file mode 100644 index 0000000000..aa674ccf41 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/simple/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api greeting; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/default/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/slots/default/index.spec.js new file mode 100644 index 0000000000..ee54773506 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/default/index.spec.js @@ -0,0 +1,46 @@ +// NOTE: Disconnected callback is not triggered by Node.remove, see: https://github.com/salesforce/lwc/issues/1102 +// That's why we trick it by removing a component via the diffing algo. +export default { + props: { + slotText: 'initial', + }, + snapshot(target) { + const cmpWithSlot = target.shadowRoot.querySelector('x-with-slots'); + const cmpWithSlotParagraphs = cmpWithSlot.shadowRoot.querySelectorAll('p'); + const [mainText, secondText] = cmpWithSlot.querySelectorAll('span'); + + return { + withSlot: cmpWithSlot, + mainText, + secondText, + cmpWithSlotParagraphs, + }; + }, + test(target, snapshots) { + const snapshotAfterHydration = this.snapshot(target); + + expect(snapshotAfterHydration.withSlot).toBe(snapshots.withSlot); + expect(snapshotAfterHydration.mainText).toBe(snapshots.mainText); + expect(snapshotAfterHydration.secondText).toBe(snapshots.secondText); + expect(snapshotAfterHydration.cmpWithSlotParagraphs).toEqual( + snapshots.cmpWithSlotParagraphs + ); + + expect(snapshotAfterHydration.mainText.textContent).toBe('initial'); + + // let's verify handlers + snapshotAfterHydration.mainText.click(); + snapshotAfterHydration.cmpWithSlotParagraphs[0].click(); + + expect(target.timesHandlerIsExecuted).toBe(1); + expect(snapshotAfterHydration.withSlot.timesHandlerIsExecuted).toBe(1); + + target.slotText = 'changed'; + + return Promise.resolve().then(() => { + const lateSnapshot = this.snapshot(target); + + expect(lateSnapshot.mainText.textContent).toBe('changed'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/default/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/slots/default/x/main/main.html new file mode 100644 index 0000000000..6162f1c0f4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/default/x/main/main.html @@ -0,0 +1,8 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/default/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/slots/default/x/main/main.js new file mode 100644 index 0000000000..c4aec9cecd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/default/x/main/main.js @@ -0,0 +1,15 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + _executedHandlerCounter = 0; + + @api slotText; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/default/x/withSlots/withSlots.html b/packages/@lwc/integration-not-karma/test-hydration/slots/default/x/withSlots/withSlots.html new file mode 100644 index 0000000000..9aba126ee0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/default/x/withSlots/withSlots.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/default/x/withSlots/withSlots.js b/packages/@lwc/integration-not-karma/test-hydration/slots/default/x/withSlots/withSlots.js new file mode 100644 index 0000000000..d12b871f4a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/default/x/withSlots/withSlots.js @@ -0,0 +1,13 @@ +import { LightningElement, api } from 'lwc'; + +export default class WithSlots extends LightningElement { + _executedHandlerCounter = 0; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/named/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/slots/named/index.spec.js new file mode 100644 index 0000000000..ee54773506 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/named/index.spec.js @@ -0,0 +1,46 @@ +// NOTE: Disconnected callback is not triggered by Node.remove, see: https://github.com/salesforce/lwc/issues/1102 +// That's why we trick it by removing a component via the diffing algo. +export default { + props: { + slotText: 'initial', + }, + snapshot(target) { + const cmpWithSlot = target.shadowRoot.querySelector('x-with-slots'); + const cmpWithSlotParagraphs = cmpWithSlot.shadowRoot.querySelectorAll('p'); + const [mainText, secondText] = cmpWithSlot.querySelectorAll('span'); + + return { + withSlot: cmpWithSlot, + mainText, + secondText, + cmpWithSlotParagraphs, + }; + }, + test(target, snapshots) { + const snapshotAfterHydration = this.snapshot(target); + + expect(snapshotAfterHydration.withSlot).toBe(snapshots.withSlot); + expect(snapshotAfterHydration.mainText).toBe(snapshots.mainText); + expect(snapshotAfterHydration.secondText).toBe(snapshots.secondText); + expect(snapshotAfterHydration.cmpWithSlotParagraphs).toEqual( + snapshots.cmpWithSlotParagraphs + ); + + expect(snapshotAfterHydration.mainText.textContent).toBe('initial'); + + // let's verify handlers + snapshotAfterHydration.mainText.click(); + snapshotAfterHydration.cmpWithSlotParagraphs[0].click(); + + expect(target.timesHandlerIsExecuted).toBe(1); + expect(snapshotAfterHydration.withSlot.timesHandlerIsExecuted).toBe(1); + + target.slotText = 'changed'; + + return Promise.resolve().then(() => { + const lateSnapshot = this.snapshot(target); + + expect(lateSnapshot.mainText.textContent).toBe('changed'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/named/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/slots/named/x/main/main.html new file mode 100644 index 0000000000..0434290c3d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/named/x/main/main.html @@ -0,0 +1,10 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/named/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/slots/named/x/main/main.js new file mode 100644 index 0000000000..c4aec9cecd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/named/x/main/main.js @@ -0,0 +1,15 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + _executedHandlerCounter = 0; + + @api slotText; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/named/x/withSlots/withSlots.html b/packages/@lwc/integration-not-karma/test-hydration/slots/named/x/withSlots/withSlots.html new file mode 100644 index 0000000000..19b7e18ca1 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/named/x/withSlots/withSlots.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/named/x/withSlots/withSlots.js b/packages/@lwc/integration-not-karma/test-hydration/slots/named/x/withSlots/withSlots.js new file mode 100644 index 0000000000..d12b871f4a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/named/x/withSlots/withSlots.js @@ -0,0 +1,13 @@ +import { LightningElement, api } from 'lwc'; + +export default class WithSlots extends LightningElement { + _executedHandlerCounter = 0; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/nested/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/slots/nested/index.spec.js new file mode 100644 index 0000000000..06278dffb0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/nested/index.spec.js @@ -0,0 +1,54 @@ +// NOTE: Disconnected callback is not triggered by Node.remove, see: https://github.com/salesforce/lwc/issues/1102 +// That's why we trick it by removing a component via the diffing algo. +export default { + props: { + slotText: 'initial', + }, + snapshot(target) { + const cmpWithSlot = target.shadowRoot.querySelector('x-with-slots'); + const cmpChild = target.shadowRoot.querySelector('x-child'); + const cmpWithSlotParagraphs = cmpWithSlot.shadowRoot.querySelectorAll('p'); + const childParagraphs = cmpChild.shadowRoot.querySelectorAll('p'); + + const [mainText, secondText] = cmpWithSlot.querySelectorAll('span'); + + return { + withSlot: cmpWithSlot, + cmpChild, + mainText, + secondText, + cmpWithSlotParagraphs, + childParagraphs, + }; + }, + test(target, snapshots) { + const snapshotAfterHydration = this.snapshot(target); + + expect(snapshotAfterHydration.withSlot).toBe(snapshots.withSlot); + expect(snapshotAfterHydration.mainText).toBe(snapshots.mainText); + expect(snapshotAfterHydration.secondText).toBe(snapshots.secondText); + expect(snapshotAfterHydration.cmpWithSlotParagraphs).toEqual( + snapshots.cmpWithSlotParagraphs + ); + expect(snapshotAfterHydration.childParagraphs).toEqual(snapshots.childParagraphs); + + expect(snapshotAfterHydration.mainText.textContent).toBe('initial'); + + // let's verify handlers + snapshotAfterHydration.mainText.click(); + snapshotAfterHydration.cmpWithSlotParagraphs[0].click(); + snapshotAfterHydration.childParagraphs[0].click(); + + expect(target.timesHandlerIsExecuted).toBe(1); + expect(snapshotAfterHydration.withSlot.timesHandlerIsExecuted).toBe(1); + expect(snapshotAfterHydration.cmpChild.timesHandlerIsExecuted).toBe(1); + + target.slotText = 'changed'; + + return Promise.resolve().then(() => { + const lateSnapshot = this.snapshot(target); + + expect(lateSnapshot.mainText.textContent).toBe('changed'); + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/child/child.html new file mode 100644 index 0000000000..9aba126ee0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/child/child.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/child/child.js new file mode 100644 index 0000000000..10342073dc --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/child/child.js @@ -0,0 +1,13 @@ +import { LightningElement, api } from 'lwc'; + +export default class Child extends LightningElement { + _executedHandlerCounter = 0; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/main/main.html new file mode 100644 index 0000000000..5493886ebb --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/main/main.html @@ -0,0 +1,10 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/main/main.js new file mode 100644 index 0000000000..c4aec9cecd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/main/main.js @@ -0,0 +1,15 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + _executedHandlerCounter = 0; + + @api slotText; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/withSlots/withSlots.html b/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/withSlots/withSlots.html new file mode 100644 index 0000000000..9aba126ee0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/withSlots/withSlots.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/withSlots/withSlots.js b/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/withSlots/withSlots.js new file mode 100644 index 0000000000..d12b871f4a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/nested/x/withSlots/withSlots.js @@ -0,0 +1,13 @@ +import { LightningElement, api } from 'lwc'; + +export default class WithSlots extends LightningElement { + _executedHandlerCounter = 0; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/no-content/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/slots/no-content/index.spec.js new file mode 100644 index 0000000000..510a2b8e20 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/no-content/index.spec.js @@ -0,0 +1,31 @@ +// NOTE: Disconnected callback is not triggered by Node.remove, see: https://github.com/salesforce/lwc/issues/1102 +// That's why we trick it by removing a component via the diffing algo. +export default { + props: { + slotText: 'initial', + }, + snapshot(target) { + const cmpWithSlot = target.shadowRoot.querySelector('x-with-slots'); + const cmpWithSlotParagraphs = cmpWithSlot.shadowRoot.querySelectorAll('p'); + + return { + withSlot: cmpWithSlot, + cmpWithSlotParagraphs, + }; + }, + test(target, snapshots) { + const snapshotAfterHydration = this.snapshot(target); + + expect(snapshotAfterHydration.withSlot).toBe(snapshots.withSlot); + expect(snapshotAfterHydration.cmpWithSlotParagraphs).toHaveSize(3); + expect(snapshotAfterHydration.cmpWithSlotParagraphs).toEqual( + snapshots.cmpWithSlotParagraphs + ); + + // let's verify handlers + snapshotAfterHydration.cmpWithSlotParagraphs[0].click(); + snapshotAfterHydration.cmpWithSlotParagraphs[1].click(); + + expect(snapshotAfterHydration.withSlot.timesHandlerIsExecuted).toBe(2); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/no-content/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/slots/no-content/x/main/main.html new file mode 100644 index 0000000000..956bf1c67f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/no-content/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/no-content/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/slots/no-content/x/main/main.js new file mode 100644 index 0000000000..c4aec9cecd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/no-content/x/main/main.js @@ -0,0 +1,15 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + _executedHandlerCounter = 0; + + @api slotText; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/no-content/x/withSlots/withSlots.html b/packages/@lwc/integration-not-karma/test-hydration/slots/no-content/x/withSlots/withSlots.html new file mode 100644 index 0000000000..d29301f03c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/no-content/x/withSlots/withSlots.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/slots/no-content/x/withSlots/withSlots.js b/packages/@lwc/integration-not-karma/test-hydration/slots/no-content/x/withSlots/withSlots.js new file mode 100644 index 0000000000..d12b871f4a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/slots/no-content/x/withSlots/withSlots.js @@ -0,0 +1,13 @@ +import { LightningElement, api } from 'lwc'; + +export default class WithSlots extends LightningElement { + _executedHandlerCounter = 0; + @api + get timesHandlerIsExecuted() { + return this._executedHandlerCounter; + } + + handleClick() { + this._executedHandlerCounter++; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/apply-style-to-host/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/apply-style-to-host/index.spec.js new file mode 100644 index 0000000000..a47250b831 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/apply-style-to-host/index.spec.js @@ -0,0 +1,10 @@ +export default { + test(elm) { + // should apply style to the host element + expect(window.getComputedStyle(elm).marginLeft).toBe('10px'); + + // should apply style to the host element with the matching attributes + elm.setAttribute('data-styled', true); + expect(window.getComputedStyle(elm).marginLeft).toBe('20px'); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/apply-style-to-host/x/main/main.css b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/apply-style-to-host/x/main/main.css new file mode 100644 index 0000000000..6e17044950 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/apply-style-to-host/x/main/main.css @@ -0,0 +1,8 @@ +:host { + display: block; + margin-left: 10px; +} + +:host([data-styled]) { + margin-left: 20px; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/apply-style-to-host/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/apply-style-to-host/x/main/main.html new file mode 100644 index 0000000000..f8c88139b8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/apply-style-to-host/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/apply-style-to-host/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/apply-style-to-host/x/main/main.js new file mode 100644 index 0000000000..80164ac007 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/apply-style-to-host/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/escaping/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/escaping/index.spec.js new file mode 100644 index 0000000000..9a3c29b1b6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/escaping/index.spec.js @@ -0,0 +1,18 @@ +export default { + test(target, snapshots, consoleCalls) { + const h1 = target.shadowRoot.querySelector('h1'); + const h2 = target.shadowRoot.querySelector('h2'); + const div = target.shadowRoot.querySelector('div'); + + expect(getComputedStyle(h1).color).toEqual('rgb(255, 0, 0)'); + expect(getComputedStyle(h1).backgroundColor).toEqual('rgb(0, 0, 255)'); + + expect(getComputedStyle(h2).color).toEqual('rgb(0, 128, 0)'); + + expect(getComputedStyle(div).color).toEqual('rgb(128, 0, 128)'); + expect(getComputedStyle(div).backgroundColor).toEqual('rgb(255, 255, 0)'); + + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/escaping/x/main/main.css b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/escaping/x/main/main.css new file mode 100644 index 0000000000..404ed144af --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/escaping/x/main/main.css @@ -0,0 +1,24 @@ +/* single quote */ +h1[data-foo='bar'] { + color: red; +} + +/* double quote */ +h1[data-foo='bar'] { + background-color: blue; +} + +/* less-than */ +h2[data-foo='<'] { + color: green; +} + +/* greater-than */ +h2 > div { + background-color: yellow; +} + +/* ampersand */ +div[data-foo='&'] { + color: purple; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/escaping/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/escaping/x/main/main.html new file mode 100644 index 0000000000..4ac0193774 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/escaping/x/main/main.html @@ -0,0 +1,6 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/escaping/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/escaping/x/main/main.js new file mode 100644 index 0000000000..80164ac007 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/escaping/x/main/main.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Main extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/index.spec.js new file mode 100644 index 0000000000..087a1cdf0b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/index.spec.js @@ -0,0 +1,21 @@ +export default { + snapshot(target) { + const child = target.querySelector('x-child'); + return { + child, + classList: new Set([...child.classList]), + h1: target.querySelector('h1'), + }; + }, + test(target, snapshots, consoleCalls) { + const child = target.querySelector('x-child'); + const h1 = target.querySelector('h1'); + expect(child).toBe(snapshots.child); + expect(h1).toBe(snapshots.h1); + + expect(new Set([...child.classList])).toEqual(snapshots.classList); + + expect(consoleCalls.warn).toHaveSize(0); + expect(consoleCalls.error).toHaveSize(0); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/child/child.html b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/child/child.html new file mode 100644 index 0000000000..ff253f9e05 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/child/child.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/child/child.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/child/child.scoped.css new file mode 100644 index 0000000000..e67c527284 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/child/child.scoped.css @@ -0,0 +1,3 @@ +h1 { + color: darkmagenta; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/main/main.html new file mode 100644 index 0000000000..586e14e39f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/main/main.js new file mode 100644 index 0000000000..0679d2bc10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/basic/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/index.spec.js new file mode 100644 index 0000000000..f716daa1a0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/index.spec.js @@ -0,0 +1,29 @@ +export default { + props: { + clazz: '', + }, + clientProps: { + clazz: 'foo', + }, + snapshot(target) { + const child = target.shadowRoot.querySelector('x-child'); + return { + child, + h1: child.shadowRoot.querySelector('h1'), + }; + }, + test(target, snapshots, consoleCalls) { + const child = target.shadowRoot.querySelector('x-child'); + const h1 = child.shadowRoot.querySelector('h1'); + expect(child).not.toBe(snapshots.child); + expect(h1).not.toBe(snapshots.h1); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on: - rendered on server: class="" - expected on client: class="foo"', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/child/child.js new file mode 100644 index 0000000000..75e9403ad7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/child/child.js @@ -0,0 +1,8 @@ +import { LightningElement } from 'lwc'; +import tmpl from './tmpl.html'; + +export default class Child extends LightningElement { + render() { + return tmpl; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/child/tmpl.html b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/child/tmpl.html new file mode 100644 index 0000000000..5ff0df9d16 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/child/tmpl.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/child/tmpl.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/child/tmpl.scoped.css new file mode 100644 index 0000000000..a26bc6195f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/child/tmpl.scoped.css @@ -0,0 +1,3 @@ +h1 { + color: sienna; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/main/main.html new file mode 100644 index 0000000000..1ff8264f43 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/main/main.js new file mode 100644 index 0000000000..c78615a5a3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-client/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api clazz; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/index.spec.js new file mode 100644 index 0000000000..2a3a0fdc62 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/index.spec.js @@ -0,0 +1,29 @@ +export default { + props: { + clazz: 'foo', + }, + clientProps: { + clazz: '', + }, + snapshot(target) { + const child = target.shadowRoot.querySelector('x-child'); + return { + child, + h1: child.shadowRoot.querySelector('h1'), + }; + }, + test(target, snapshots, consoleCalls) { + const child = target.shadowRoot.querySelector('x-child'); + const h1 = child.shadowRoot.querySelector('h1'); + expect(child).not.toBe(snapshots.child); + expect(h1).not.toBe(snapshots.h1); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on: - rendered on server: class="foo" - expected on client: class=""', + 'Hydration completed with errors.', + ], + }); + }, +}; diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/child/child.js b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/child/child.js new file mode 100644 index 0000000000..75e9403ad7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/child/child.js @@ -0,0 +1,8 @@ +import { LightningElement } from 'lwc'; +import tmpl from './tmpl.html'; + +export default class Child extends LightningElement { + render() { + return tmpl; + } +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/child/tmpl.html b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/child/tmpl.html new file mode 100644 index 0000000000..5ff0df9d16 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/child/tmpl.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/child/tmpl.scoped.css b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/child/tmpl.scoped.css new file mode 100644 index 0000000000..a26bc6195f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/child/tmpl.scoped.css @@ -0,0 +1,3 @@ +h1 { + color: sienna; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/main/main.html b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/main/main.html new file mode 100644 index 0000000000..1ff8264f43 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/main/main.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/main/main.js b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/main/main.js new file mode 100644 index 0000000000..c78615a5a3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/extra-class-in-server/x/main/main.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Main extends LightningElement { + @api clazz; +} diff --git a/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-scoped-template/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-scoped-template/index.spec.js new file mode 100644 index 0000000000..648071b0ac --- /dev/null +++ b/packages/@lwc/integration-not-karma/test-hydration/stylesheet/host-scope-token/dynamic-render/mismatches/wrong-scoped-template/index.spec.js @@ -0,0 +1,37 @@ +export default { + props: { + showA: false, + }, + clientProps: { + showA: true, + }, + snapshot(target) { + const child = target.shadowRoot.querySelector('x-child'); + return { + child, + classList: new Set([...child.classList]), + h1: child.shadowRoot.querySelector('h1'), + }; + }, + test(target, snapshots, consoleCalls) { + const child = target.shadowRoot.querySelector('x-child'); + const h1 = child.shadowRoot.querySelector('h1'); + + // is not considered mismatched but its children are + expect(child).toBe(snapshots.child); + expect(h1).not.toBe(snapshots.h1); + + expect( + getComputedStyle(child).getPropertyValue('--from-template').trim().replace(/"/g, "'") + ).toBe("'a'"); + + TestUtils.expectConsoleCallsDev(consoleCalls, { + error: [], + warn: [ + 'Hydration attribute mismatch on: +
        + `; + + document.body.appendChild(div); + + const supports = + getComputedStyle(div.querySelector('.test-dir-pseudo')).color === 'rgb(255, 0, 0)'; + document.body.removeChild(div); + return supports; +} + +// In native shadow we delegate to the browser, so it has to support :dir() +describe.runIf(!process.env.NATIVE_SHADOW || supportsDirPseudoclass())(':dir() pseudoclass', () => { + it('can apply styles based on :dir()', () => { + const elm = createElement('x-parent', { is: Component }); + document.body.appendChild(elm); + + elm.setAttribute('dir', 'ltr'); + + return Promise.resolve() + .then(() => { + expect(getComputedStyle(elm.shadowRoot.querySelector('div')).color).toEqual( + 'rgb(0, 0, 1)' + ); + expect(getComputedStyle(elm.shadowRoot.querySelector('.foo')).color).toEqual( + 'rgb(0, 0, 3)' + ); + expect(getComputedStyle(elm.shadowRoot.querySelector('.foo.bar')).color).toEqual( + 'rgb(0, 0, 5)' + ); + expect(getComputedStyle(elm.shadowRoot.querySelector('.baz span')).color).toEqual( + 'rgb(0, 0, 7)' + ); + expect(getComputedStyle(elm.shadowRoot.querySelector('.baz button')).color).toEqual( + 'rgb(0, 0, 9)' + ); + elm.setAttribute('dir', 'rtl'); + }) + .then(() => { + expect(getComputedStyle(elm.shadowRoot.querySelector('div')).color).toEqual( + 'rgb(0, 0, 2)' + ); + expect(getComputedStyle(elm.shadowRoot.querySelector('.foo')).color).toEqual( + 'rgb(0, 0, 4)' + ); + expect(getComputedStyle(elm.shadowRoot.querySelector('.foo.bar')).color).toEqual( + 'rgb(0, 0, 6)' + ); + expect(getComputedStyle(elm.shadowRoot.querySelector('.baz span')).color).toEqual( + 'rgb(0, 0, 8)' + ); + expect(getComputedStyle(elm.shadowRoot.querySelector('.baz button')).color).toEqual( + 'rgb(0, 0, 10)' + ); + }); + }); + + it('can apply styles based on :dir() for light-within-shadow', () => { + const elm = createElement('x-shadow-container', { is: ShadowContainer }); + document.body.appendChild(elm); + + elm.setAttribute('dir', 'ltr'); + + return Promise.resolve() + .then(() => { + expect(getComputedStyle(elm.shadowRoot.querySelector('div')).color).toEqual( + 'rgb(0, 0, 1)' + ); + elm.setAttribute('dir', 'rtl'); + }) + .then(() => { + expect(getComputedStyle(elm.shadowRoot.querySelector('div')).color).toEqual( + 'rgb(0, 0, 2)' + ); + }); + }); +}); + +it.runIf(process.env.NATIVE_SHADOW && supportsDirPseudoclass())( + 'can apply styles based on :dir() for light-at-root', + () => { + const elm = createElement('x-light', { is: Light }); + document.body.appendChild(elm); + + return Promise.resolve() + .then(() => { + // Unlike [dir], :dir(ltr) matches even when there is no dir attribute anywhere + expect(getComputedStyle(elm.querySelector('div')).color).toEqual('rgb(0, 0, 1)'); + elm.setAttribute('dir', 'rtl'); + }) + .then(() => { + expect(getComputedStyle(elm.querySelector('div')).color).toEqual('rgb(0, 0, 2)'); + elm.setAttribute('dir', 'ltr'); + }) + .then(() => { + expect(getComputedStyle(elm.querySelector('div')).color).toEqual('rgb(0, 0, 1)'); + }); + } +); diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/component/component.css b/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/component/component.css new file mode 100644 index 0000000000..6128229f3a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/component/component.css @@ -0,0 +1,39 @@ +div:dir(ltr) { + color: #000001; +} + +div:dir(rtl) { + color: #000002; +} + +.foo:dir(ltr):not(.bar) { + color: #000003; +} + +.foo:dir(rtl):not(.bar) { + color: #000004; +} + +.foo:dir(ltr) { + color: #000005; +} + +.foo:dir(rtl) { + color: #000006; +} + +.baz:dir(ltr) span { + color: #000007; +} + +.baz:dir(rtl) span { + color: #000008; +} + +.baz button:dir(ltr) { + color: #000009; +} + +.baz button:dir(rtl) { + color: #00000a; +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/component/component.html b/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/component/component.html new file mode 100644 index 0000000000..e0bbe7a3ca --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/component/component.html @@ -0,0 +1,9 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/component/component.js b/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/component/component.js new file mode 100644 index 0000000000..6d3542bb2f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/component/component.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Component extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/light/light.css b/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/light/light.css new file mode 100644 index 0000000000..8d29fcff15 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/light/light.css @@ -0,0 +1,7 @@ +div:dir(ltr) { + color: #000001; +} + +div:dir(rtl) { + color: #000002; +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/light/light.html b/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/light/light.html new file mode 100644 index 0000000000..78dc99f8d0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/light/light.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/light/light.js b/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/light/light.js new file mode 100644 index 0000000000..1152396f29 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/light/light.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class Light extends LightningElement { + static renderMode = 'light'; +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/shadowContainer/shadowContainer.html b/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/shadowContainer/shadowContainer.html new file mode 100644 index 0000000000..33f955c6e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/shadowContainer/shadowContainer.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/shadowContainer/shadowContainer.js b/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/shadowContainer/shadowContainer.js new file mode 100644 index 0000000000..fbb5fb517c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/dir-pseudoclass/x/shadowContainer/shadowContainer.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class ShadowContainer extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/event-post-dispatch.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/event-post-dispatch.spec.js new file mode 100644 index 0000000000..649afaae4d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/event-post-dispatch.spec.js @@ -0,0 +1,88 @@ +// Inspired from WPT: +// https://github.com/web-platform-tests/wpt/blob/master/shadow-dom/event-post-dispatch.html + +import { createElement } from 'lwc'; +import { extractDataIds } from 'test-utils'; + +import Container from 'x/container'; + +function assertEventStateReset(evt) { + expect(evt.eventPhase).toBe(0); + expect(evt.currentTarget).toBe(null); + expect(evt.composedPath().length).toBe(0); +} + +function createComponent() { + const element = createElement('x-container', { is: Container }); + element.setAttribute('data-id', 'x-container'); + document.body.appendChild(element); + return extractDataIds(element); +} + +describe('post-dispatch event state', () => { + describe('native element', () => { + it('{ bubbles: true, composed: true }', () => { + const nodes = createComponent(); + const event = new CustomEvent('test', { bubbles: true, composed: true }); + nodes.container_div.dispatchEvent(event); + + assertEventStateReset(event); + expect(event.target).toBe(nodes['x-container']); + }); + + it('{ bubbles: true, composed: false }', () => { + const nodes = createComponent(); + const event = new CustomEvent('test', { bubbles: true, composed: false }); + nodes.container_div.dispatchEvent(event); + + assertEventStateReset(event); + expect(event.target).toBe(null); + }); + }); + + describe('lwc:dom="manual" element', () => { + it('{ bubbles: true, composed: true }', () => { + const nodes = createComponent(); + const event = new CustomEvent('test', { bubbles: true, composed: true }); + nodes.container_span_manual.dispatchEvent(event); + + // lwc:dom=manual is async due to MutationObserver + return new Promise(setTimeout).then(() => { + assertEventStateReset(event); + expect(event.target).toBe(nodes['x-container']); + }); + }); + + it('{ bubbles: true, composed: false }', () => { + const nodes = createComponent(); + const event = new CustomEvent('test', { bubbles: true, composed: false }); + nodes.container_span_manual.dispatchEvent(event); + + // lwc:dom=manual is async due to MutationObserver + return new Promise(setTimeout).then(() => { + assertEventStateReset(event); + expect(event.target).toBe(null); + }); + }); + }); + + describe('component', () => { + it('{ bubbles: true, composed: true }', () => { + const nodes = createComponent(); + const event = new CustomEvent('test', { bubbles: true, composed: true }); + nodes['x-container'].dispatchEventComponent(event); + + assertEventStateReset(event); + expect(event.target).toBe(nodes['x-container']); + }); + + it('{ bubbles: true, composed: false }', () => { + const nodes = createComponent(); + const event = new CustomEvent('test', { bubbles: true, composed: false }); + nodes['x-container'].dispatchEventComponent(event); + + assertEventStateReset(event); + expect(event.target).toBe(nodes['x-container']); + }); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/propagation.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/propagation.spec.js new file mode 100644 index 0000000000..ba2920bab0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/propagation.spec.js @@ -0,0 +1,630 @@ +// Inspired from WPT: +// https://github.com/web-platform-tests/wpt/blob/master/shadow-dom/event-inside-shadow-tree.html + +import { createElement } from 'lwc'; +import { extractDataIds } from 'test-utils'; + +import Container from 'x/container'; + +function dispatchEventWithLog(target, nodes, event) { + const log = []; + + [...Object.values(nodes), document.body, document.documentElement, document, window].forEach( + (node) => { + node.addEventListener(event.type, (event) => { + log.push([node, event.target, event.composedPath()]); + }); + } + ); + + target.dispatchEvent(event); + return log; +} + +function createTestElement() { + const elm = createElement('x-container', { is: Container }); + elm.setAttribute('data-id', 'x-container'); + document.body.appendChild(elm); + return extractDataIds(elm); +} + +function createDisconnectedTestElement() { + const fragment = document.createDocumentFragment(); + const elm = createElement('x-container', { is: Container }); + elm.setAttribute('data-id', 'x-container'); + + const doAppend = () => fragment.appendChild(elm); + + if (!lwcRuntimeFlags.DISABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE) { + doAppend(); + } else { + // Expected warning, since we are working with disconnected nodes + expect(doAppend).toLogWarningDev( + Array(4) + .fill() + .map( + () => + /fired a `connectedCallback` and rendered, but was not connected to the DOM/ + ) + ); + } + + const nodes = extractDataIds(elm); + // Manually added because document fragments can't have attributes. + nodes.fragment = fragment; + return nodes; +} + +describe('event propagation', () => { + describe('dispatched on native element', () => { + it('{bubbles: true, composed: true}', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: true, composed: true }); + const actualLogs = dispatchEventWithLog(nodes.button, nodes, event); + + const composedPath = [ + nodes.button, + nodes.button_div, + nodes['x-button'].shadowRoot, + nodes['x-button'], + nodes.button_group_slot, + nodes.button_group_internal_slot, + nodes['x-button-group-internal'].shadowRoot, + nodes['x-button-group-internal'], + nodes.button_group_div, + nodes['x-button-group'].shadowRoot, + nodes['x-button-group'], + nodes.container_div, + nodes['x-container'].shadowRoot, + nodes['x-container'], + document.body, + document.documentElement, + document, + window, + ]; + const expectedLogs = [ + [nodes.button, nodes.button, composedPath], + [nodes.button_div, nodes.button, composedPath], + [nodes['x-button'].shadowRoot, nodes.button, composedPath], + [nodes['x-button'], nodes['x-button'], composedPath], + [nodes.button_group_slot, nodes['x-button'], composedPath], + [nodes.button_group_internal_slot, nodes['x-button'], composedPath], + [nodes['x-button-group-internal'].shadowRoot, nodes['x-button'], composedPath], + [nodes['x-button-group-internal'], nodes['x-button'], composedPath], + [nodes.button_group_div, nodes['x-button'], composedPath], + [nodes['x-button-group'].shadowRoot, nodes['x-button'], composedPath], + [nodes['x-button-group'], nodes['x-button'], composedPath], + [nodes.container_div, nodes['x-button'], composedPath], + [nodes['x-container'].shadowRoot, nodes['x-button'], composedPath], + [nodes['x-container'], nodes['x-container'], composedPath], + [document.body, nodes['x-container'], composedPath], + [document.documentElement, nodes['x-container'], composedPath], + [document, nodes['x-container'], composedPath], + [window, nodes['x-container'], composedPath], + ]; + + expect(actualLogs).toEqual(expectedLogs); + }); + + it('{bubbles: false, composed: true}', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: false, composed: true }); + const actualLogs = dispatchEventWithLog(nodes.button, nodes, event); + + const composedPath = [ + nodes.button, + nodes.button_div, + nodes['x-button'].shadowRoot, + nodes['x-button'], + nodes.button_group_slot, + nodes.button_group_internal_slot, + nodes['x-button-group-internal'].shadowRoot, + nodes['x-button-group-internal'], + nodes.button_group_div, + nodes['x-button-group'].shadowRoot, + nodes['x-button-group'], + nodes.container_div, + nodes['x-container'].shadowRoot, + nodes['x-container'], + document.body, + document.documentElement, + document, + window, + ]; + + let expectedLogs; + if (process.env.NATIVE_SHADOW) { + expectedLogs = [ + [nodes.button, nodes.button, composedPath], + [nodes['x-button'], nodes['x-button'], composedPath], + [nodes['x-container'], nodes['x-container'], composedPath], + ]; + } else { + // TODO [#1138]: {bubbles: false, composed: true} events should invoke event listeners on ancestor hosts + expectedLogs = [[nodes.button, nodes.button, composedPath]]; + } + + expect(actualLogs).toEqual(expectedLogs); + }); + + it('{bubbles: true, composed: false}', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: true, composed: false }); + const actualLogs = dispatchEventWithLog(nodes.button, nodes, event); + + const composedPath = [nodes.button, nodes.button_div, nodes['x-button'].shadowRoot]; + + const expectedLogs = [ + [nodes.button, nodes.button, composedPath], + [nodes.button_div, nodes.button, composedPath], + [nodes['x-button'].shadowRoot, nodes.button, composedPath], + ]; + + expect(actualLogs).toEqual(expectedLogs); + }); + + it('{bubbles: false, composed: false}', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: false, composed: false }); + const actualLogs = dispatchEventWithLog(nodes.button, nodes, event); + + const composedPath = [nodes.button, nodes.button_div, nodes['x-button'].shadowRoot]; + const expectedLogs = [[nodes.button, nodes.button, composedPath]]; + + expect(actualLogs).toEqual(expectedLogs); + }); + }); + + describe('dispatched on host element', () => { + it('{bubbles: true, composed: true}', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: true, composed: true }); + const actualLogs = dispatchEventWithLog(nodes['x-button'], nodes, event); + + const composedPath = [ + nodes['x-button'], + nodes.button_group_slot, + nodes.button_group_internal_slot, + nodes['x-button-group-internal'].shadowRoot, + nodes['x-button-group-internal'], + nodes.button_group_div, + nodes['x-button-group'].shadowRoot, + nodes['x-button-group'], + nodes.container_div, + nodes['x-container'].shadowRoot, + nodes['x-container'], + document.body, + document.documentElement, + document, + window, + ]; + const expectedLogs = [ + [nodes['x-button'], nodes['x-button'], composedPath], + [nodes.button_group_slot, nodes['x-button'], composedPath], + [nodes.button_group_internal_slot, nodes['x-button'], composedPath], + [nodes['x-button-group-internal'].shadowRoot, nodes['x-button'], composedPath], + [nodes['x-button-group-internal'], nodes['x-button'], composedPath], + [nodes.button_group_div, nodes['x-button'], composedPath], + [nodes['x-button-group'].shadowRoot, nodes['x-button'], composedPath], + [nodes['x-button-group'], nodes['x-button'], composedPath], + [nodes.container_div, nodes['x-button'], composedPath], + [nodes['x-container'].shadowRoot, nodes['x-button'], composedPath], + [nodes['x-container'], nodes['x-container'], composedPath], + [document.body, nodes['x-container'], composedPath], + [document.documentElement, nodes['x-container'], composedPath], + [document, nodes['x-container'], composedPath], + [window, nodes['x-container'], composedPath], + ]; + + expect(actualLogs).toEqual(expectedLogs); + }); + + it('{bubbles: true, composed: false}', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: true, composed: false }); + const actualLogs = dispatchEventWithLog(nodes['x-button'], nodes, event); + + const composedPath = [ + nodes['x-button'], + nodes.button_group_slot, + nodes.button_group_internal_slot, + nodes['x-button-group-internal'].shadowRoot, + nodes['x-button-group-internal'], + nodes.button_group_div, + nodes['x-button-group'].shadowRoot, + nodes['x-button-group'], + nodes.container_div, + nodes['x-container'].shadowRoot, + ]; + + const expectedLogs = [ + [nodes['x-button'], nodes['x-button'], composedPath], + [nodes.button_group_slot, nodes['x-button'], composedPath], + [nodes.button_group_internal_slot, nodes['x-button'], composedPath], + [nodes['x-button-group-internal'].shadowRoot, nodes['x-button'], composedPath], + [nodes['x-button-group-internal'], nodes['x-button'], composedPath], + [nodes.button_group_div, nodes['x-button'], composedPath], + [nodes['x-button-group'].shadowRoot, nodes['x-button'], composedPath], + [nodes['x-button-group'], nodes['x-button'], composedPath], + [nodes.container_div, nodes['x-button'], composedPath], + [nodes['x-container'].shadowRoot, nodes['x-button'], composedPath], + ]; + + expect(actualLogs).toEqual(expectedLogs); + }); + + it('{bubbles: false, composed: true}', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: false, composed: true }); + const actualLogs = dispatchEventWithLog(nodes['x-button'], nodes, event); + + const composedPath = [ + nodes['x-button'], + nodes.button_group_slot, + nodes.button_group_internal_slot, + nodes['x-button-group-internal'].shadowRoot, + nodes['x-button-group-internal'], + nodes.button_group_div, + nodes['x-button-group'].shadowRoot, + nodes['x-button-group'], + nodes.container_div, + nodes['x-container'].shadowRoot, + nodes['x-container'], + document.body, + document.documentElement, + document, + window, + ]; + + let expectedLogs; + if (process.env.NATIVE_SHADOW) { + expectedLogs = [ + [nodes['x-button'], nodes['x-button'], composedPath], + [nodes['x-container'], nodes['x-container'], composedPath], + ]; + } else { + expectedLogs = [[nodes['x-button'], nodes['x-button'], composedPath]]; + } + + expect(actualLogs).toEqual(expectedLogs); + }); + + it('{bubbles: false, composed: false}', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: false, composed: false }); + const actualLogs = dispatchEventWithLog(nodes['x-button'], nodes, event); + + const composedPath = [ + nodes['x-button'], + nodes.button_group_slot, + nodes.button_group_internal_slot, + nodes['x-button-group-internal'].shadowRoot, + nodes['x-button-group-internal'], + nodes.button_group_div, + nodes['x-button-group'].shadowRoot, + nodes['x-button-group'], + nodes.container_div, + nodes['x-container'].shadowRoot, + ]; + const expectedLogs = [[nodes['x-button'], nodes['x-button'], composedPath]]; + + expect(actualLogs).toEqual(expectedLogs); + }); + }); + + describe('dispatched on shadow root', () => { + it('{bubbles: true, composed: true}', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: true, composed: true }); + const actualLogs = dispatchEventWithLog(nodes['x-button'].shadowRoot, nodes, event); + + const composedPath = [ + nodes['x-button'].shadowRoot, + nodes['x-button'], + nodes.button_group_slot, + nodes.button_group_internal_slot, + nodes['x-button-group-internal'].shadowRoot, + nodes['x-button-group-internal'], + nodes.button_group_div, + nodes['x-button-group'].shadowRoot, + nodes['x-button-group'], + nodes.container_div, + nodes['x-container'].shadowRoot, + nodes['x-container'], + document.body, + document.documentElement, + document, + window, + ]; + const expectedLogs = [ + [nodes['x-button'].shadowRoot, nodes['x-button'].shadowRoot, composedPath], + [nodes['x-button'], nodes['x-button'], composedPath], + [nodes.button_group_slot, nodes['x-button'], composedPath], + [nodes.button_group_internal_slot, nodes['x-button'], composedPath], + [nodes['x-button-group-internal'].shadowRoot, nodes['x-button'], composedPath], + [nodes['x-button-group-internal'], nodes['x-button'], composedPath], + [nodes.button_group_div, nodes['x-button'], composedPath], + [nodes['x-button-group'].shadowRoot, nodes['x-button'], composedPath], + [nodes['x-button-group'], nodes['x-button'], composedPath], + [nodes.container_div, nodes['x-button'], composedPath], + [nodes['x-container'].shadowRoot, nodes['x-button'], composedPath], + [nodes['x-container'], nodes['x-container'], composedPath], + [document.body, nodes['x-container'], composedPath], + [document.documentElement, nodes['x-container'], composedPath], + [document, nodes['x-container'], composedPath], + [window, nodes['x-container'], composedPath], + ]; + + expect(actualLogs).toEqual(expectedLogs); + }); + + it('{bubbles: false, composed: true}', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: false, composed: true }); + const actualLogs = dispatchEventWithLog(nodes['x-button'].shadowRoot, nodes, event); + + const composedPath = [ + nodes['x-button'].shadowRoot, + nodes['x-button'], + nodes.button_group_slot, + nodes.button_group_internal_slot, + nodes['x-button-group-internal'].shadowRoot, + nodes['x-button-group-internal'], + nodes.button_group_div, + nodes['x-button-group'].shadowRoot, + nodes['x-button-group'], + nodes.container_div, + nodes['x-container'].shadowRoot, + nodes['x-container'], + document.body, + document.documentElement, + document, + window, + ]; + + let expectedLogs; + if (process.env.NATIVE_SHADOW) { + expectedLogs = [ + [nodes['x-button'].shadowRoot, nodes['x-button'].shadowRoot, composedPath], + [nodes['x-button'], nodes['x-button'], composedPath], + [nodes['x-container'], nodes['x-container'], composedPath], + ]; + } else { + expectedLogs = [ + [nodes['x-button'].shadowRoot, nodes['x-button'].shadowRoot, composedPath], + [nodes['x-button'], nodes['x-button'], composedPath], + ]; + } + + expect(actualLogs).toEqual(expectedLogs); + }); + + it('{bubbles: true, composed: false}', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: true, composed: false }); + const actualLogs = dispatchEventWithLog(nodes['x-button'].shadowRoot, nodes, event); + + const composedPath = [nodes['x-button'].shadowRoot]; + const expectedLogs = [ + [nodes['x-button'].shadowRoot, nodes['x-button'].shadowRoot, composedPath], + ]; + + expect(actualLogs).toEqual(expectedLogs); + }); + + it('{bubbles: false, composed: false}', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: false, composed: false }); + const actualLogs = dispatchEventWithLog(nodes['x-button'].shadowRoot, nodes, event); + + const composedPath = [nodes['x-button'].shadowRoot]; + const expectedLogs = [ + [nodes['x-button'].shadowRoot, nodes['x-button'].shadowRoot, composedPath], + ]; + + expect(actualLogs).toEqual(expectedLogs); + }); + }); + + describe('dispatched on lwc:dom="manual" node', () => { + it('{bubbles: true, composed: true}', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: true, composed: true }); + + const composedPath = [ + nodes.container_span_manual, + nodes.container_span, + nodes['x-container'].shadowRoot, + nodes['x-container'], + document.body, + document.documentElement, + document, + window, + ]; + const expectedLogs = [ + [nodes.container_span_manual, nodes.container_span_manual, composedPath], + [nodes.container_span, nodes.container_span_manual, composedPath], + [nodes['x-container'].shadowRoot, nodes.container_span_manual, composedPath], + [nodes['x-container'], nodes['x-container'], composedPath], + [document.body, nodes['x-container'], composedPath], + [document.documentElement, nodes['x-container'], composedPath], + [document, nodes['x-container'], composedPath], + [window, nodes['x-container'], composedPath], + ]; + + return new Promise(setTimeout).then(() => { + const actualLogs = dispatchEventWithLog(nodes.container_span_manual, nodes, event); + expect(actualLogs).toEqual(expectedLogs); + }); + }); + + it('{bubbles: true, composed: false}', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: true, composed: false }); + + const composedPath = [ + nodes.container_span_manual, + nodes.container_span, + nodes['x-container.shadowRoot'], + ]; + const expectedLogs = [ + [nodes.container_span_manual, nodes.container_span_manual, composedPath], + [nodes.container_span, nodes.container_span_manual, composedPath], + [nodes['x-container'].shadowRoot, nodes.container_span_manual, composedPath], + ]; + + return Promise.resolve().then(() => { + const actualLogs = dispatchEventWithLog(nodes.container_span_manual, nodes, event); + expect(actualLogs).toEqual(expectedLogs); + }); + }); + + it('{bubbles: false, composed: true}', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: false, composed: true }); + + const composedPath = [ + nodes.container_span_manual, + nodes.container_span, + nodes['x-container.shadowRoot'], + nodes['x-container'], + document.body, + document.documentElement, + document, + window, + ]; + + let expectedLogs; + if (process.env.NATIVE_SHADOW) { + expectedLogs = [ + [nodes.container_span_manual, nodes.container_span_manual, composedPath], + [nodes['x-container'], nodes['x-container'], composedPath], + ]; + } else { + expectedLogs = [ + [nodes.container_span_manual, nodes.container_span_manual, composedPath], + ]; + } + + return Promise.resolve().then(() => { + const actualLogs = dispatchEventWithLog(nodes.container_span_manual, nodes, event); + expect(actualLogs).toEqual(expectedLogs); + }); + }); + + it('{bubbles: false, composed: false}', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: false, composed: false }); + + const composedPath = [ + nodes.container_span_manual, + nodes.container_span, + nodes['x-container.shadowRoot'], + ]; + const expectedLogs = [ + [nodes.container_span_manual, nodes.container_span_manual, composedPath], + ]; + + return Promise.resolve().then(() => { + const actualLogs = dispatchEventWithLog(nodes.container_span_manual, nodes, event); + expect(actualLogs).toEqual(expectedLogs); + }); + }); + }); + + // This test does not work with native custom element lifecycle because disconnected + // fragments cannot fire connectedCallback/disconnectedCallback events + describe.runIf(lwcRuntimeFlags.DISABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE)( + 'dispatched within a disconnected tree', + () => { + it('{bubbles: true, composed: true}', () => { + const nodes = createDisconnectedTestElement(); + const event = new CustomEvent('test', { bubbles: true, composed: true }); + + const composedPath = [ + nodes.container_div, + nodes['x-container'].shadowRoot, + nodes['x-container'], + nodes.fragment, + ]; + const expectedLogs = [ + [nodes.container_div, nodes.container_div, composedPath], + [nodes['x-container'].shadowRoot, nodes.container_div, composedPath], + [nodes['x-container'], nodes['x-container'], composedPath], + [nodes.fragment, nodes['x-container'], composedPath], + ]; + + const actualLogs = dispatchEventWithLog(nodes.container_div, nodes, event); + expect(actualLogs).toEqual(expectedLogs); + }); + + it('{bubbles: true, composed: false}', () => { + const nodes = createDisconnectedTestElement(); + const event = new CustomEvent('test', { bubbles: true, composed: false }); + + const composedPath = [nodes.container_div, nodes['x-container'].shadowRoot]; + const expectedLogs = [ + [nodes.container_div, nodes.container_div, composedPath], + [nodes['x-container'].shadowRoot, nodes.container_div, composedPath], + ]; + + const actualLogs = dispatchEventWithLog(nodes.container_div, nodes, event); + expect(actualLogs).toEqual(expectedLogs); + }); + + it('{bubbles: false, composed: true}', () => { + const nodes = createDisconnectedTestElement(); + const event = new CustomEvent('test', { bubbles: false, composed: true }); + + const composedPath = [ + nodes.container_div, + nodes['x-container'].shadowRoot, + nodes['x-container'], + nodes.fragment, + ]; + + let expectedLogs; + if (process.env.NATIVE_SHADOW) { + expectedLogs = [ + [nodes.container_div, nodes.container_div, composedPath], + [nodes['x-container'], nodes['x-container'], composedPath], + ]; + } else { + expectedLogs = [[nodes.container_div, nodes.container_div, composedPath]]; + } + + const actualLogs = dispatchEventWithLog(nodes.container_div, nodes, event); + expect(actualLogs).toEqual(expectedLogs); + }); + + it('{bubbles: false, composed: false}', () => { + const nodes = createDisconnectedTestElement(); + const event = new CustomEvent('test', { bubbles: false, composed: false }); + + const composedPath = [nodes.container_div, nodes['x-container'].shadowRoot]; + const expectedLogs = [[nodes.container_div, nodes.container_div, composedPath]]; + + const actualLogs = dispatchEventWithLog(nodes.container_div, nodes, event); + expect(actualLogs).toEqual(expectedLogs); + }); + } + ); +}); + +describe('declarative event listener', () => { + it('when dispatching instance of Event', () => { + const nodes = createTestElement(); + const event = new Event('test', { bubbles: true, composed: true }); + nodes.button.dispatchEvent(event); + + expect(nodes['x-container'].testEventReceived).toBeTrue(); + }); + + it('when dispatching instance of CustomEvent', () => { + const nodes = createTestElement(); + const event = new CustomEvent('test', { bubbles: true, composed: true }); + nodes.button.dispatchEvent(event); + + expect(nodes['x-container'].testEventReceived).toBeTrue(); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/button/button.html b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/button/button.html new file mode 100644 index 0000000000..7c4c4475e6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/button/button.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/button/button.js b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/button/button.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/button/button.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/buttonGroup/buttonGroup.html b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/buttonGroup/buttonGroup.html new file mode 100644 index 0000000000..eefb05113e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/buttonGroup/buttonGroup.html @@ -0,0 +1,7 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/buttonGroup/buttonGroup.js b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/buttonGroup/buttonGroup.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/buttonGroup/buttonGroup.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/buttonGroupInternal/buttonGroupInternal.html b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/buttonGroupInternal/buttonGroupInternal.html new file mode 100644 index 0000000000..da292f7b44 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/buttonGroupInternal/buttonGroupInternal.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/buttonGroupInternal/buttonGroupInternal.js b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/buttonGroupInternal/buttonGroupInternal.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/buttonGroupInternal/buttonGroupInternal.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/container/container.html b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/container/container.html new file mode 100644 index 0000000000..5cc8426b4b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/container/container.html @@ -0,0 +1,8 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/container/container.js b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/container/container.js new file mode 100644 index 0000000000..81f9ada2ef --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/x/container/container.js @@ -0,0 +1,24 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api + dispatchEventComponent(event) { + this.dispatchEvent(event); + } + + @api + get testEventReceived() { + return this._testEventReceived || false; + } + + handleTest() { + this._testEventReceived = true; + } + + renderedCallback() { + const spanManual = document.createElement('span'); + spanManual.setAttribute('data-id', 'container_span_manual'); + const span = this.template.querySelector('[data-id="container_span"]'); + span.appendChild(spanManual); + } +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/issue-1090.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/issue-1090.spec.js new file mode 100644 index 0000000000..ca82ae97cd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/issue-1090.spec.js @@ -0,0 +1,13 @@ +import { createElement } from 'lwc'; + +import Parent from 'x/parent'; + +describe('Issue #1090', () => { + it('should disconnect slotted content even if it is not allocated into a slot', () => { + const elm = createElement('x-parent', { is: Parent }); + document.body.appendChild(elm); + expect(() => { + document.body.removeChild(elm); + }).not.toThrow(); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/child/child.html b/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/child/child.html new file mode 100644 index 0000000000..d8a9fafacf --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/child/child.js b/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/child/child.js new file mode 100644 index 0000000000..21a45d50a4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/child/child.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Container extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/parent/parent.html b/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/parent/parent.html new file mode 100644 index 0000000000..a98cacc1d5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/parent/parent.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/parent/parent.js b/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/parent/parent.js new file mode 100644 index 0000000000..21a45d50a4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/parent/parent.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Container extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/slotted/slotted.html b/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/slotted/slotted.html new file mode 100644 index 0000000000..fd35a22577 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/slotted/slotted.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/slotted/slotted.js b/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/slotted/slotted.js new file mode 100644 index 0000000000..21a45d50a4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/ignoring-slotted/x/slotted/slotted.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Container extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/@x/component/component.css b/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/@x/component/component.css new file mode 100644 index 0000000000..dda2cdf86b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/@x/component/component.css @@ -0,0 +1,3 @@ +h1 { + color: green; +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/@x/component/component.html b/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/@x/component/component.html new file mode 100644 index 0000000000..872866ee88 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/@x/component/component.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/@x/component/component.js b/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/@x/component/component.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/@x/component/component.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/index.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/index.spec.js new file mode 100644 index 0000000000..bfbc04f0f4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/index.spec.js @@ -0,0 +1,31 @@ +import { createElement } from 'lwc'; +import ComponentAtX from '@x/component'; +import ComponentXHashY from 'x#y/component'; + +describe('invalid character @ in namespace', () => { + let elm; + beforeEach(() => { + elm = createElement('x-component', { is: ComponentAtX }); + document.body.appendChild(elm); + }); + + it('element renders despite invalid char in namespace', () => { + const h1 = elm.shadowRoot.querySelector('h1'); + expect(h1.textContent).toEqual('Hello world'); + expect(getComputedStyle(h1).color).toEqual('rgb(0, 128, 0)'); + }); +}); + +describe('invalid character # in namespace', () => { + let elm; + beforeEach(() => { + elm = createElement('xy-component', { is: ComponentXHashY }); + document.body.appendChild(elm); + }); + + it('element renders despite invalid char in namespace', () => { + const h1 = elm.shadowRoot.querySelector('h1'); + expect(h1.textContent).toEqual('Hello world'); + expect(getComputedStyle(h1).color).toEqual('rgb(0, 128, 0)'); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/x#y/component/component.css b/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/x#y/component/component.css new file mode 100644 index 0000000000..dda2cdf86b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/x#y/component/component.css @@ -0,0 +1,3 @@ +h1 { + color: green; +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/x#y/component/component.html b/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/x#y/component/component.html new file mode 100644 index 0000000000..872866ee88 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/x#y/component/component.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/x#y/component/component.js b/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/x#y/component/component.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/invalid-char-in-namespace/x#y/component/component.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/index.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/index.spec.js new file mode 100644 index 0000000000..84170e115c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/index.spec.js @@ -0,0 +1,105 @@ +import { createElement } from 'lwc'; +import Multi from 'x/multi'; +import MultiNoStyleInFirst from 'x/multiNoStyleInFirst'; + +describe.runIf(process.env.NATIVE_SHADOW)( + 'Shadow DOM styling - multiple shadow DOM components', + () => { + it('Does not duplicate styles if template is re-rendered', () => { + const element = createElement('x-multi', { is: Multi }); + + const getNumStyleSheets = () => { + let count = 0; + if (element.shadowRoot.adoptedStyleSheets) { + count += element.shadowRoot.adoptedStyleSheets.length; + } + count += element.shadowRoot.querySelectorAll('style').length; + return count; + }; + + document.body.appendChild(element); + return Promise.resolve() + .then(() => { + expect(getComputedStyle(element.shadowRoot.querySelector('div')).color).toEqual( + 'rgb(0, 0, 255)' + ); + expect(getNumStyleSheets()).toEqual(1); + element.next(); + }) + .then(() => { + expect(getComputedStyle(element.shadowRoot.querySelector('div')).color).toEqual( + 'rgb(255, 0, 0)' + ); + expect(getNumStyleSheets()).toEqual(2); + element.next(); + }) + .then(() => { + expect(getComputedStyle(element.shadowRoot.querySelector('div')).color).toEqual( + 'rgb(0, 0, 255)' + ); + expect(getNumStyleSheets()).toEqual(2); + }); + }); + } +); + +describe('multiple stylesheets rendered in same component', () => { + it('works when first template has no style but second template does', () => { + const element = createElement('x-multi-no-style-in-first', { is: MultiNoStyleInFirst }); + document.body.appendChild(element); + return Promise.resolve() + .then(() => { + expect(getComputedStyle(element.shadowRoot.querySelector('.red')).color).toEqual( + 'rgb(0, 0, 0)' + ); + expect(getComputedStyle(element.shadowRoot.querySelector('.green')).color).toEqual( + 'rgb(0, 0, 0)' + ); + expect(getComputedStyle(element).marginLeft).toEqual('0px'); + element.next(); + return new Promise((resolve) => requestAnimationFrame(() => resolve())); + }) + .then(() => { + expect(getComputedStyle(element.shadowRoot.querySelector('.red')).color).toEqual( + 'rgb(255, 0, 0)' + ); + expect(getComputedStyle(element.shadowRoot.querySelector('.green')).color).toEqual( + 'rgb(0, 128, 0)' + ); + expect(getComputedStyle(element).marginLeft).toEqual('5px'); + element.next(); + return new Promise((resolve) => requestAnimationFrame(() => resolve())); + }) + .then(() => { + if (process.env.NATIVE_SHADOW) { + // TODO [#2466]: In native shadow, stylesheets are not removed from the DOM + expect( + getComputedStyle(element.shadowRoot.querySelector('.red')).color + ).toEqual('rgb(255, 0, 0)'); + expect( + getComputedStyle(element.shadowRoot.querySelector('.green')).color + ).toEqual('rgb(0, 128, 0)'); + expect(getComputedStyle(element).marginLeft).toEqual('5px'); + } else { + expect( + getComputedStyle(element.shadowRoot.querySelector('.red')).color + ).toEqual('rgb(0, 0, 0)'); + expect( + getComputedStyle(element.shadowRoot.querySelector('.green')).color + ).toEqual('rgb(0, 0, 0)'); + expect(getComputedStyle(element).marginLeft).toEqual('0px'); + } + element.next(); + return new Promise((resolve) => requestAnimationFrame(() => resolve())); + }) + .then(() => { + expect(getComputedStyle(element.shadowRoot.querySelector('.red')).color).toEqual( + 'rgb(255, 0, 0)' + ); + expect(getComputedStyle(element.shadowRoot.querySelector('.green')).color).toEqual( + 'rgb(0, 128, 0)' + ); + expect(getComputedStyle(element).marginLeft).toEqual('5px'); + }); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/a.css b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/a.css new file mode 100644 index 0000000000..91b0d5daea --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/a.css @@ -0,0 +1,3 @@ +.blue { + color: blue; +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/a.html b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/a.html new file mode 100644 index 0000000000..60f71823f3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/a.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/b.css b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/b.css new file mode 100644 index 0000000000..75424513d6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/b.css @@ -0,0 +1,3 @@ +.red { + color: red; +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/b.html b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/b.html new file mode 100644 index 0000000000..9663e6a2ed --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/b.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/multi.js b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/multi.js new file mode 100644 index 0000000000..6e524c36b9 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multi/multi.js @@ -0,0 +1,16 @@ +import { LightningElement, api } from 'lwc'; +import A from './a.html'; +import B from './b.html'; + +export default class Multi extends LightningElement { + current = A; + + @api + next() { + this.current = this.current === A ? B : A; + } + + render() { + return this.current; + } +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multiNoStyleInFirst/a.html b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multiNoStyleInFirst/a.html new file mode 100644 index 0000000000..ad144734c7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multiNoStyleInFirst/a.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multiNoStyleInFirst/b.css b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multiNoStyleInFirst/b.css new file mode 100644 index 0000000000..5d7fdee4f5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multiNoStyleInFirst/b.css @@ -0,0 +1,11 @@ +.red { + color: red; +} + +:host { + margin-left: 5px; +} + +.green { + color: green; +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multiNoStyleInFirst/b.html b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multiNoStyleInFirst/b.html new file mode 100644 index 0000000000..18da8747cb --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multiNoStyleInFirst/b.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multiNoStyleInFirst/multiNoStyleInFirst.js b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multiNoStyleInFirst/multiNoStyleInFirst.js new file mode 100644 index 0000000000..4bfcf69f5b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/multiple-templates/x/multiNoStyleInFirst/multiNoStyleInFirst.js @@ -0,0 +1,20 @@ +import { LightningElement, api } from 'lwc'; +import A from './a.html'; +import B from './b.html'; + +export default class MultiNoStyleInFirst extends LightningElement { + current = A; + + @api + next() { + this.current = this.current === A ? B : A; + } + + render() { + return this.current; + } + + renderedCallback() { + this.template.querySelector('.manual').innerHTML = '
        manual
        '; + } +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/index.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/index.spec.js new file mode 100644 index 0000000000..6fb5dc44ca --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/index.spec.js @@ -0,0 +1,18 @@ +import { createElement } from 'lwc'; +import { extractDataIds } from 'test-utils'; +import Grandparent from 'x/grandparent'; + +describe.runIf(process.env.NATIVE_SHADOW)('part and exportparts', () => { + it('supports part and exportparts', () => { + const elm = createElement('x-grandparent', { is: Grandparent }); + document.body.appendChild(elm); + + const ids = extractDataIds(elm); + + return Promise.resolve().then(() => { + expect(getComputedStyle(ids.overlay).color).toEqual('rgb(255, 0, 0)'); + expect(getComputedStyle(ids.text).color).toEqual('rgb(0, 0, 255)'); + expect(getComputedStyle(ids.badge).color).toEqual('rgb(0, 128, 0)'); + }); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/anotherChild/anotherChild.html b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/anotherChild/anotherChild.html new file mode 100644 index 0000000000..6beff5199f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/anotherChild/anotherChild.html @@ -0,0 +1,2 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/anotherChild/anotherChild.js b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/anotherChild/anotherChild.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/anotherChild/anotherChild.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/child/child.html b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/child/child.html new file mode 100644 index 0000000000..5025e8a8b6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/child/child.js b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/child/child.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/child/child.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/grandparent/grandparent.css b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/grandparent/grandparent.css new file mode 100644 index 0000000000..c2607113a9 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/grandparent/grandparent.css @@ -0,0 +1,11 @@ +x-parent::part(text) { + color: blue; +} + +x-parent::part(overlay) { + color: red; +} + +x-parent::part(badge) { + color: green; +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/grandparent/grandparent.html b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/grandparent/grandparent.html new file mode 100644 index 0000000000..26526d92b6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/grandparent/grandparent.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/grandparent/grandparent.js b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/grandparent/grandparent.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/grandparent/grandparent.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/parent/parent.html b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/parent/parent.html new file mode 100644 index 0000000000..3153bd6cf7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/parent/parent.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/parent/parent.js b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/parent/parent.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/x/parent/parent.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/index.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/index.spec.js new file mode 100644 index 0000000000..ec6ee2909d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/index.spec.js @@ -0,0 +1,54 @@ +import { createElement } from 'lwc'; + +import Parent from 'x/parent'; +import Host from 'x/host'; +import MultiTemplates from 'x/multiTemplates'; + +afterEach(() => { + window.__lwcResetGlobalStylesheets(); +}); + +describe('shadow encapsulation', () => { + it('should not style children elements', () => { + const elm = createElement('x-parent', { is: Parent }); + document.body.appendChild(elm); + + const parentDiv = elm.shadowRoot.querySelector('div'); + expect(window.getComputedStyle(parentDiv).marginLeft).toBe('10px'); + const childDiv = elm.shadowRoot.querySelector('x-child').shadowRoot.querySelector('div'); + expect(window.getComputedStyle(childDiv).marginLeft).toBe('0px'); + }); + + it('should work with multiple templates', () => { + const elm = createElement('x-multi-template', { is: MultiTemplates }); + document.body.appendChild(elm); + + const div = elm.shadowRoot.querySelector('div'); + expect(window.getComputedStyle(div).marginLeft).toBe('10px'); + expect(window.getComputedStyle(div).marginRight).toBe('0px'); + + elm.toggleTemplate(); + return Promise.resolve().then(() => { + const div = elm.shadowRoot.querySelector('div'); + expect(window.getComputedStyle(div).marginLeft).toBe('0px'); + expect(window.getComputedStyle(div).marginRight).toBe('10px'); + }); + }); +}); + +describe(':host', () => { + it('should apply style to the host element', () => { + const elm = createElement('x-host', { is: Host }); + document.body.appendChild(elm); + + expect(window.getComputedStyle(elm).marginLeft).toBe('10px'); + }); + + it('should apply style to the host element with the matching attributes', () => { + const elm = createElement('x-host', { is: Host }); + elm.setAttribute('data-styled', true); + document.body.appendChild(elm); + + expect(window.getComputedStyle(elm).marginLeft).toBe('20px'); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/child/child.html b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/child/child.html new file mode 100644 index 0000000000..36b061865a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/child/child.js b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/child/child.js new file mode 100644 index 0000000000..3f0d7e7e52 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/child/child.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Child extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/host/host.css b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/host/host.css new file mode 100644 index 0000000000..6e17044950 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/host/host.css @@ -0,0 +1,8 @@ +:host { + display: block; + margin-left: 10px; +} + +:host([data-styled]) { + margin-left: 20px; +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/host/host.html b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/host/host.html new file mode 100644 index 0000000000..f8c88139b8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/host/host.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/host/host.js b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/host/host.js new file mode 100644 index 0000000000..204b503a90 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/host/host.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Host extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/a.css b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/a.css new file mode 100644 index 0000000000..32b0d52c99 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/a.css @@ -0,0 +1,4 @@ +div { + margin-left: 10px; + margin-right: 0; +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/a.html b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/a.html new file mode 100644 index 0000000000..b8931c2137 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/a.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/b.css b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/b.css new file mode 100644 index 0000000000..d1132c9a86 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/b.css @@ -0,0 +1,4 @@ +div { + margin-left: 0; + margin-right: 10px; +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/b.html b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/b.html new file mode 100644 index 0000000000..6c23f51318 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/b.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/multiTemplates.js b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/multiTemplates.js new file mode 100644 index 0000000000..05f533825c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/multiTemplates/multiTemplates.js @@ -0,0 +1,17 @@ +import { LightningElement, api, track } from 'lwc'; + +import tmplA from './a.html'; +import tmplB from './b.html'; + +export default class MultiTemplates extends LightningElement { + @track tmpl = tmplA; + + @api + toggleTemplate() { + this.tmpl = this.tmpl === tmplA ? tmplB : tmplA; + } + + render() { + return this.tmpl; + } +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/parent/parent.css b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/parent/parent.css new file mode 100644 index 0000000000..106d26b08b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/parent/parent.css @@ -0,0 +1,3 @@ +div { + margin-left: 10px; +} diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/parent/parent.html b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/parent/parent.html new file mode 100644 index 0000000000..8311a2adda --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/parent/parent.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/parent/parent.js b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/parent/parent.js new file mode 100644 index 0000000000..a5746a015a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/stylesheet/x/parent/parent.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Parent extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/index.spec.js b/packages/@lwc/integration-not-karma/test/signal/protocol/index.spec.js new file mode 100644 index 0000000000..775661f5a6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/index.spec.js @@ -0,0 +1,248 @@ +import { createElement, setFeatureFlagForTest } from 'lwc'; +import Reactive from 'x/reactive'; +import NonReactive from 'x/nonReactive'; +import Container from 'x/container'; +import Parent from 'x/parent'; +import Child from 'x/child'; +import DuplicateSignalOnTemplate from 'x/duplicateSignalOnTemplate'; +import List from 'x/list'; +import Throws from 'x/throws'; + +// Note for testing purposes the signal implementation uses LWC module resolution to simplify things. +// In production the signal will come from a 3rd party library. +import { Signal } from 'x/signal'; + +describe('signal protocol', () => { + beforeAll(() => { + setFeatureFlagForTest('ENABLE_EXPERIMENTAL_SIGNALS', true); + }); + + afterAll(() => { + setFeatureFlagForTest('ENABLE_EXPERIMENTAL_SIGNALS', false); + }); + + describe('lwc engine subscribes template re-render callback when signal is bound to an LWC and used on a template', () => { + [ + { + testName: 'contains a getter that references a bound signal (.value on template)', + flag: 'showGetterSignal', + }, + { + testName: 'contains a getter that references a bound signal value', + flag: 'showOnlyUsingSignalNotValue', + }, + { + testName: 'contains a signal with @api annotation (.value on template)', + flag: 'showApiSignal', + }, + { + testName: 'contains a signal with @track annotation (.value on template)', + flag: 'showTrackedSignal', + }, + { + testName: 'contains an observed field referencing a signal (.value on template)', + flag: 'showObservedFieldSignal', + }, + { + testName: 'contains a direct reference to a signal (not .value) in the template', + flag: 'showOnlyUsingSignalNotValue', + }, + ].forEach(({ testName, flag }) => { + // Test all ways of binding signal to an LWC + template that cause re-rendering + it(testName, async () => { + const elm = createElement('x-reactive', { is: Reactive }); + document.body.appendChild(elm); + await Promise.resolve(); + + expect(elm.getSignalSubscriberCount()).toBe(0); + elm[flag] = true; + await Promise.resolve(); + + // the engine will automatically subscribe the re-render callback + expect(elm.getSignalSubscriberCount()).toBe(1); + }); + }); + }); + + it('lwc engine should automatically unsubscribe the re-render callback if signal is not used on a template', async () => { + const elm = createElement('x-reactive', { is: Reactive }); + elm.showObservedFieldSignal = true; + document.body.appendChild(elm); + await Promise.resolve(); + + expect(elm.getSignalSubscriberCount()).toBe(1); + elm.showObservedFieldSignal = false; + await Promise.resolve(); + + expect(elm.getSignalSubscriberCount()).toBe(0); + document.body.removeChild(elm); + }); + + it('lwc engine does not subscribe re-render callback if signal is not used on a template', async () => { + const elm = createElement('x-non-reactive', { is: NonReactive }); + document.body.appendChild(elm); + await Promise.resolve(); + + expect(elm.getSignalSubscriberCount()).toBe(0); + }); + + it('only the components referencing a signal should re-render', async () => { + const container = createElement('x-container', { is: Container }); + // append the container first to avoid error message with native lifecycle + document.body.appendChild(container); + await Promise.resolve(); + + const signalElm = createElement('x-signal-elm', { is: Child }); + const signal = new Signal('initial value'); + signalElm.signal = signal; + container.appendChild(signalElm); + await Promise.resolve(); + + expect(container.renderCount).toBe(1); + expect(signalElm.renderCount).toBe(1); + expect(signal.getSubscriberCount()).toBe(1); + + signal.value = 'updated value'; + await Promise.resolve(); + + expect(container.renderCount).toBe(1); + expect(signalElm.renderCount).toBe(2); + expect(signal.getSubscriberCount()).toBe(1); + }); + + it('only subscribes the re-render callback a single time when signal is referenced multiple times on a template', async () => { + const elm = createElement('x-duplicate-signals-on-template', { + is: DuplicateSignalOnTemplate, + }); + document.body.appendChild(elm); + await Promise.resolve(); + + expect(elm.renderCount).toBe(1); + expect(elm.getSignalSubscriberCount()).toBe(1); + expect(elm.getSignalRemovedSubscriberCount()).toBe(0); + + elm.updateSignalValue(); + await Promise.resolve(); + + expect(elm.renderCount).toBe(2); + expect(elm.getSignalSubscriberCount()).toBe(1); + expect(elm.getSignalRemovedSubscriberCount()).toBe(1); + }); + + it('only subscribes re-render callback a single time when signal is referenced multiple times in a list', async () => { + const elm = createElement('x-list', { is: List }); + const signal = new Signal('initial value'); + elm.signal = signal; + document.body.appendChild(elm); + await Promise.resolve(); + + expect(signal.getSubscriberCount()).toBe(1); + expect(signal.getRemovedSubscriberCount()).toBe(0); + + document.body.removeChild(elm); + await Promise.resolve(); + + expect(signal.getSubscriberCount()).toBe(0); + expect(signal.getRemovedSubscriberCount()).toBe(1); + }); + + it('unsubscribes when element is removed from the dom', async () => { + const elm = createElement('x-child', { is: Child }); + const signal = new Signal('initial value'); + elm.signal = signal; + document.body.appendChild(elm); + await Promise.resolve(); + + expect(signal.getSubscriberCount()).toBe(1); + expect(signal.getRemovedSubscriberCount()).toBe(0); + + document.body.removeChild(elm); + await Promise.resolve(); + + expect(signal.getSubscriberCount()).toBe(0); + expect(signal.getRemovedSubscriberCount()).toBe(1); + }); + + it('on template re-render unsubscribes all components where signal is not present on the template', async () => { + const elm = createElement('x-parent', { is: Parent }); + elm.showChild = true; + + document.body.appendChild(elm); + await Promise.resolve(); + + // subscribed both parent and child + // as long as parent contains reference to the signal, even if it's just to pass it to a child + // it will be subscribed. + expect(elm.getSignalSubscriberCount()).toBe(2); + expect(elm.getSignalRemovedSubscriberCount()).toBe(0); + + elm.showChild = false; + await Promise.resolve(); + + // The signal is not being used on the parent template anymore so it will be removed + expect(elm.getSignalSubscriberCount()).toBe(0); + expect(elm.getSignalRemovedSubscriberCount()).toBe(2); + }); + + it('does not subscribe if the signal shape is incorrect', async () => { + const elm = createElement('x-child', { is: Child }); + const subscribe = jasmine.createSpy(); + // Note the signals property is value's' and not value + const signal = { values: 'initial value', subscribe }; + elm.signal = signal; + document.body.appendChild(elm); + await Promise.resolve(); + + expect(subscribe).not.toHaveBeenCalled(); + }); + + it('does not subscribe if the signal is not added as trusted signal', async () => { + const elm = createElement('x-child', { is: Child }); + const subscribe = jasmine.createSpy(); + // Note this follows the shape of the signal implementation + // but it's not added as a trusted signal (add using lwc.addTrustedSignal) + const signal = { + get value() { + return 'initial value'; + }, + subscribe, + }; + elm.signal = signal; + document.body.appendChild(elm); + await Promise.resolve(); + + expect(subscribe).not.toHaveBeenCalled(); + }); + + it('does not throw an error for objects that throw upon "in" checks', async () => { + const elm = createElement('x-throws', { is: Throws }); + document.body.appendChild(elm); + + await Promise.resolve(); + + expect(elm.shadowRoot.querySelector('h1').textContent).toBe('hello'); + }); +}); + +describe('ENABLE_EXPERIMENTAL_SIGNALS not set', () => { + beforeAll(() => { + setFeatureFlagForTest('ENABLE_EXPERIMENTAL_SIGNALS', false); + }); + + it('does not subscribe or unsubscribe if feature flag is disabled', async () => { + const elm = createElement('x-child', { is: Child }); + const signal = new Signal('initial value'); + elm.signal = signal; + document.body.appendChild(elm); + await Promise.resolve(); + + expect(signal.getSubscriberCount()).toBe(0); + expect(signal.getRemovedSubscriberCount()).toBe(0); + + document.body.removeChild(elm); + await Promise.resolve(); + + expect(signal.getSubscriberCount()).toBe(0); + expect(signal.getRemovedSubscriberCount()).toBe(0); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/child/child.html b/packages/@lwc/integration-not-karma/test/signal/protocol/x/child/child.html new file mode 100644 index 0000000000..2428dd9e7c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/child/child.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/child/child.js b/packages/@lwc/integration-not-karma/test/signal/protocol/x/child/child.js new file mode 100644 index 0000000000..76a657a00f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/child/child.js @@ -0,0 +1,10 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api renderCount = 0; + @api signal; + + renderedCallback() { + this.renderCount++; + } +} diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/container/container.html b/packages/@lwc/integration-not-karma/test/signal/protocol/x/container/container.html new file mode 100644 index 0000000000..fba6288c0b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/container/container.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/container/container.js b/packages/@lwc/integration-not-karma/test/signal/protocol/x/container/container.js new file mode 100644 index 0000000000..dbb973cc07 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/container/container.js @@ -0,0 +1,9 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api renderCount = 0; + + renderedCallback() { + this.renderCount++; + } +} diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/duplicateSignalOnTemplate/duplicateSignalOnTemplate.html b/packages/@lwc/integration-not-karma/test/signal/protocol/x/duplicateSignalOnTemplate/duplicateSignalOnTemplate.html new file mode 100644 index 0000000000..9e7f95c88d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/duplicateSignalOnTemplate/duplicateSignalOnTemplate.html @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/duplicateSignalOnTemplate/duplicateSignalOnTemplate.js b/packages/@lwc/integration-not-karma/test/signal/protocol/x/duplicateSignalOnTemplate/duplicateSignalOnTemplate.js new file mode 100644 index 0000000000..67f2d836e1 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/duplicateSignalOnTemplate/duplicateSignalOnTemplate.js @@ -0,0 +1,26 @@ +import { LightningElement, api } from 'lwc'; +import { Signal } from 'x/signal'; + +export default class extends LightningElement { + signal = new Signal('initial value'); + @api renderCount = 0; + + renderedCallback() { + this.renderCount++; + } + + @api + getSignalSubscriberCount() { + return this.signal.getSubscriberCount(); + } + + @api + getSignalRemovedSubscriberCount() { + return this.signal.getRemovedSubscriberCount(); + } + + @api + updateSignalValue() { + this.signal.value = 'updated value'; + } +} diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/list/list.html b/packages/@lwc/integration-not-karma/test/signal/protocol/x/list/list.html new file mode 100644 index 0000000000..8dc4e54056 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/list/list.html @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/list/list.js b/packages/@lwc/integration-not-karma/test/signal/protocol/x/list/list.js new file mode 100644 index 0000000000..2b6333734e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/list/list.js @@ -0,0 +1,6 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api signal; + items = [1, 2, 3, 4, 5, 6]; +} diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/nonReactive/nonReactive.html b/packages/@lwc/integration-not-karma/test/signal/protocol/x/nonReactive/nonReactive.html new file mode 100644 index 0000000000..6505517bb7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/nonReactive/nonReactive.html @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/nonReactive/nonReactive.js b/packages/@lwc/integration-not-karma/test/signal/protocol/x/nonReactive/nonReactive.js new file mode 100644 index 0000000000..5face7363b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/nonReactive/nonReactive.js @@ -0,0 +1,22 @@ +import { LightningElement, api, track } from 'lwc'; +import { Signal } from 'x/signal'; + +const signal = new Signal('initial value'); + +export default class extends LightningElement { + // Note that this signal is bound but it's never referenced on the template + _signal = signal; + @api apiSignalValue = signal.value; + @track trackSignalValue = signal.value; + observedFieldExternalSignalValue = signal.value; + observedFieldBoundSignalValue = this._signal.value; + + get externalSignalValueGetter() { + return signal.value; + } + + @api + getSignalSubscriberCount() { + return signal.getSubscriberCount(); + } +} diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/parent/parent.html b/packages/@lwc/integration-not-karma/test/signal/protocol/x/parent/parent.html new file mode 100644 index 0000000000..279373129a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/parent/parent.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/parent/parent.js b/packages/@lwc/integration-not-karma/test/signal/protocol/x/parent/parent.js new file mode 100644 index 0000000000..c7c7c288c3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/parent/parent.js @@ -0,0 +1,28 @@ +import { LightningElement, api } from 'lwc'; +import { Signal } from 'x/signal'; + +export default class extends LightningElement { + signal = new Signal('initial value'); + + @api showChild = false; + @api renderCount = 0; + + renderedCallback() { + this.renderCount++; + } + + @api + getSignalSubscriberCount() { + return this.signal.getSubscriberCount(); + } + + @api + getSignalRemovedSubscriberCount() { + return this.signal.getRemovedSubscriberCount(); + } + + @api + updateSignalValue() { + this.signal.value = 'updated value'; + } +} diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/reactive/reactive.html b/packages/@lwc/integration-not-karma/test/signal/protocol/x/reactive/reactive.html new file mode 100644 index 0000000000..d0dc32ccf4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/reactive/reactive.html @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/reactive/reactive.js b/packages/@lwc/integration-not-karma/test/signal/protocol/x/reactive/reactive.js new file mode 100644 index 0000000000..625b406b0f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/reactive/reactive.js @@ -0,0 +1,32 @@ +import { LightningElement, api, track } from 'lwc'; +import { Signal } from 'x/signal'; + +const signal = new Signal('initial value'); + +export default class extends LightningElement { + @api showApiSignal = false; + @api showGetterSignal = false; + @api showGetterSignalValue = false; + @api showTrackedSignal = false; + @api showObservedFieldSignal = false; + @api showOnlyUsingSignalNotValue = false; + + @api apiSignal = signal; + @track trackSignal = signal; + + observedFieldSignal = signal; + + get getterSignalField() { + // this works because the signal is bound to the LWC + return this.observedFieldSignal; + } + + get getterSignalFieldValue() { + return this.observedFieldSignal.value; + } + + @api + getSignalSubscriberCount() { + return signal.getSubscriberCount(); + } +} diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/signal/signal.js b/packages/@lwc/integration-not-karma/test/signal/protocol/x/signal/signal.js new file mode 100644 index 0000000000..a88e8a5ef3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/signal/signal.js @@ -0,0 +1,45 @@ +// Note for testing purposes the signal implementation uses LWC module resolution to simplify things. +// In production the signal will come from a 3rd party library. + +import { addTrustedSignal } from 'test-utils'; + +export class Signal { + subscribers = new Set(); + removedSubscribers = []; + + constructor(initialValue) { + this._value = initialValue; + addTrustedSignal(this); + } + + set value(newValue) { + this._value = newValue; + this.notify(); + } + + get value() { + return this._value; + } + + subscribe(onUpdate) { + this.subscribers.add(onUpdate); + return () => { + this.subscribers.delete(onUpdate); + this.removedSubscribers.push(onUpdate); + }; + } + + notify() { + for (const subscriber of this.subscribers) { + subscriber(); + } + } + + getSubscriberCount() { + return this.subscribers.size; + } + + getRemovedSubscriberCount() { + return this.removedSubscribers.length; + } +} diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/throws/throws.html b/packages/@lwc/integration-not-karma/test/signal/protocol/x/throws/throws.html new file mode 100644 index 0000000000..e40c3bd251 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/throws/throws.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/throws/throws.js b/packages/@lwc/integration-not-karma/test/signal/protocol/x/throws/throws.js new file mode 100644 index 0000000000..21f0811441 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/throws/throws.js @@ -0,0 +1,23 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + foo; + + constructor() { + super(); + + this.foo = new Proxy( + {}, + { + has() { + throw new Error("oh no you don't!"); + }, + } + ); + } + + renderedCallback() { + // access `this.foo` to trigger mutation-tracker.ts + this.bar = this.foo; + } +} diff --git a/packages/@lwc/integration-not-karma/test/signal/reactivity/index.spec.js b/packages/@lwc/integration-not-karma/test/signal/reactivity/index.spec.js new file mode 100644 index 0000000000..6583037e4b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/reactivity/index.spec.js @@ -0,0 +1,105 @@ +import { createElement, setFeatureFlagForTest } from 'lwc'; + +import Reactive from 'x/reactive'; +import NonReactive from 'x/nonReactive'; +import ExplicitSubscribe from 'x/explicitSubscribe'; +import List from 'x/list'; + +// Note for testing purposes the signal implementation uses LWC module resolution to simplify things. +// In production the signal will come from a 3rd party library. +import { Signal } from 'x/signal'; + +const createElementSignalAndInsertIntoDom = async (tagName, ctor, signalInitialValue) => { + const elm = createElement(tagName, { is: ctor }); + const signal = new Signal(signalInitialValue); + elm.signal = signal; + document.body.appendChild(elm); + await Promise.resolve(); + + return { elm, signal }; +}; + +describe('signal reaction in lwc', () => { + beforeAll(() => { + setFeatureFlagForTest('ENABLE_EXPERIMENTAL_SIGNALS', true); + }); + + afterAll(() => { + setFeatureFlagForTest('ENABLE_EXPERIMENTAL_SIGNALS', false); + }); + + it('should render signal value', async () => { + const { elm } = await createElementSignalAndInsertIntoDom( + 'x-reactive', + Reactive, + 'initial value' + ); + + expect(elm.shadowRoot.textContent).toBe('initial value'); + }); + + it('should re-render when signal notification is sent', async () => { + const { elm, signal } = await createElementSignalAndInsertIntoDom( + 'x-reactive', + Reactive, + 'initial value' + ); + + expect(elm.shadowRoot.textContent).toBe('initial value'); + + // notification happens when value is updated + signal.value = 'updated value'; + await Promise.resolve(); + + expect(elm.shadowRoot.textContent).toEqual('updated value'); + }); + + it('does not re-render when signal is not bound to an LWC', async () => { + const elm = createElement('x-non-reactive', { is: NonReactive }); + document.body.appendChild(elm); + await Promise.resolve(); + + expect(elm.shadowRoot.textContent).toBe('external signal value'); + + elm.updateExternalSignal(); + await Promise.resolve(); + + expect(elm.shadowRoot.textContent).toBe('external signal value'); + }); + + it('should be able to re-render when manually subscribing to signal', async () => { + const { elm, signal } = await createElementSignalAndInsertIntoDom( + 'x-manual-subscribe', + ExplicitSubscribe, + 'initial value' + ); + expect(elm.shadowRoot.textContent).toEqual('default'); + + signal.value = 'new value'; + await Promise.resolve(); + + expect(elm.shadowRoot.textContent).toEqual('new value'); + }); + + it('render lists properly', async () => { + const { elm, signal } = await createElementSignalAndInsertIntoDom( + 'x-reactive-list', + List, + [1, 2, 3] + ); + + expect(elm.shadowRoot.children.length).toBe(3); + expect(elm.shadowRoot.children[0].textContent).toBe('1'); + expect(elm.shadowRoot.children[1].textContent).toBe('2'); + expect(elm.shadowRoot.children[2].textContent).toBe('3'); + + signal.value = [3, 2, 1]; + + await Promise.resolve(); + + expect(elm.shadowRoot.children.length).toBe(3); + expect(elm.shadowRoot.children[0].textContent).toBe('3'); + expect(elm.shadowRoot.children[1].textContent).toBe('2'); + expect(elm.shadowRoot.children[2].textContent).toBe('1'); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/signal/reactivity/x/explicitSubscribe/explicitSubscribe.html b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/explicitSubscribe/explicitSubscribe.html new file mode 100644 index 0000000000..6df6f20a58 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/explicitSubscribe/explicitSubscribe.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/signal/reactivity/x/explicitSubscribe/explicitSubscribe.js b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/explicitSubscribe/explicitSubscribe.js new file mode 100644 index 0000000000..24106084e4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/explicitSubscribe/explicitSubscribe.js @@ -0,0 +1,21 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api signal; + + foo = 'default'; + + signalUnsubscribe = () => {}; + + connectedCallback() { + this.signalUnsubscribe = this.signal.subscribe(() => this.updateOnSignalNotification()); + } + + disconnectedCallback() { + this.signalUnsubscribe(); + } + + updateOnSignalNotification() { + this.foo = this.signal.value; + } +} diff --git a/packages/@lwc/integration-not-karma/test/signal/reactivity/x/list/list.html b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/list/list.html new file mode 100644 index 0000000000..51c0f0998b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/list/list.html @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/signal/reactivity/x/list/list.js b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/list/list.js new file mode 100644 index 0000000000..b4ecf8087f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/list/list.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api signal; +} diff --git a/packages/@lwc/integration-not-karma/test/signal/reactivity/x/nonReactive/nonReactive.html b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/nonReactive/nonReactive.html new file mode 100644 index 0000000000..09ba2ab0bf --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/nonReactive/nonReactive.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/signal/reactivity/x/nonReactive/nonReactive.js b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/nonReactive/nonReactive.js new file mode 100644 index 0000000000..850199c81a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/nonReactive/nonReactive.js @@ -0,0 +1,15 @@ +import { LightningElement, api } from 'lwc'; +import { Signal } from 'x/signal'; + +const externalSignal = new Signal('external signal value'); + +export default class extends LightningElement { + get bar() { + return externalSignal.value; + } + + @api + updateExternalSignal() { + externalSignal.value = 'updated external value'; + } +} diff --git a/packages/@lwc/integration-not-karma/test/signal/reactivity/x/reactive/reactive.html b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/reactive/reactive.html new file mode 100644 index 0000000000..7f27bfba6f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/reactive/reactive.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/signal/reactivity/x/reactive/reactive.js b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/reactive/reactive.js new file mode 100644 index 0000000000..41eafcc1a0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/reactive/reactive.js @@ -0,0 +1,6 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api + signal; +} diff --git a/packages/@lwc/integration-not-karma/test/signal/reactivity/x/reactiveSubscriber/reactiveSubscriber.html b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/reactiveSubscriber/reactiveSubscriber.html new file mode 100644 index 0000000000..2da7be3d7f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/reactiveSubscriber/reactiveSubscriber.html @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/signal/reactivity/x/reactiveSubscriber/reactiveSubscriber.js b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/reactiveSubscriber/reactiveSubscriber.js new file mode 100644 index 0000000000..41eafcc1a0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/reactiveSubscriber/reactiveSubscriber.js @@ -0,0 +1,6 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api + signal; +} diff --git a/packages/@lwc/integration-not-karma/test/signal/reactivity/x/signal/signal.js b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/signal/signal.js new file mode 100644 index 0000000000..21fd9ea483 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/signal/signal.js @@ -0,0 +1,39 @@ +// Note for testing purposes the signal implementation uses LWC module resolution to simplify things. +// In production the signal will come from a 3rd party library. + +import { addTrustedSignal } from 'test-utils'; + +export class Signal { + subscribers = new Set(); + + constructor(initialValue) { + this._value = initialValue; + addTrustedSignal(this); + } + + set value(newValue) { + this._value = newValue; + this.notify(); + } + + get value() { + return this._value; + } + + subscribe(onUpdate) { + this.subscribers.add(onUpdate); + return () => { + this.subscribers.delete(onUpdate); + }; + } + + notify() { + for (const subscriber of this.subscribers) { + subscriber(); + } + } + + getSubscriberCount() { + return this.subscribers.size; + } +} diff --git a/packages/@lwc/integration-not-karma/test/spread/index.spec.js b/packages/@lwc/integration-not-karma/test/spread/index.spec.js new file mode 100644 index 0000000000..68f69035d1 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/spread/index.spec.js @@ -0,0 +1,117 @@ +import { createElement } from 'lwc'; +import Test from 'x/test'; +import { getHooks, setHooks } from 'test-utils'; + +function setSanitizeHtmlContentHookForTest(impl) { + const { sanitizeHtmlContent } = getHooks(); + + setHooks({ + sanitizeHtmlContent: impl, + }); + + return sanitizeHtmlContent; +} +describe('lwc:spread', () => { + let elm, simpleChild, overriddenChild, trackedChild, innerHTMLChild, originalHook, consoleSpy; + beforeEach(() => { + consoleSpy = spyOn(console, 'warn'); + originalHook = setSanitizeHtmlContentHookForTest((x) => x); + elm = createElement('x-test', { is: Test }); + document.body.appendChild(elm); + simpleChild = elm.shadowRoot.querySelector('.x-child-simple'); + overriddenChild = elm.shadowRoot.querySelector('.x-child-overridden'); + trackedChild = elm.shadowRoot.querySelector('.x-child-tracked'); + innerHTMLChild = elm.shadowRoot.querySelector('.div-innerhtml'); + spyOn(console, 'log'); + }); + afterEach(() => { + setSanitizeHtmlContentHookForTest(originalHook); + }); + it('should render basic test', () => { + expect(simpleChild.shadowRoot.querySelector('span').textContent).toEqual('Name: LWC'); + }); + it('should not override innerHTML from inner-html directive', () => { + expect(innerHTMLChild.innerHTML).toEqual(''); + + if (process.env.NODE_ENV === 'production') { + expect(consoleSpy).not.toHaveBeenCalled(); + } else { + expect(consoleSpy).toHaveBeenCalledTimes(1); + expect(consoleSpy.calls.argsFor(0)[0].message).toContain( + `Cannot set property "innerHTML". Instead, use lwc:inner-html or lwc:dom-manual.` + ); + } + }); + it('should assign onclick', () => { + simpleChild.click(); + // eslint-disable-next-line no-console + expect(console.log).toHaveBeenCalledWith('spread click called', simpleChild); + }); + it('should override values in template', async () => { + expect(overriddenChild.shadowRoot.querySelector('span').textContent).toEqual('Name: Aura'); + elm.modify(function () { + this.overriddenProps = {}; + }); + await Promise.resolve(); + expect(overriddenChild.shadowRoot.querySelector('span').textContent).toEqual('Name: lwc'); + }); + it('should assign onclick along with the one in template', () => { + overriddenChild.click(); + // eslint-disable-next-line no-console + expect(console.log).toHaveBeenCalledWith('spread click called', overriddenChild); + // eslint-disable-next-line no-console + expect(console.log).toHaveBeenCalledWith( + 'template click called', + jasmine.any(Object) /* component */ + ); + }); + + it('should assign props to standard elements', async () => { + expect(elm.shadowRoot.querySelector('span').className).toEqual('spanclass'); + + elm.modify(function () { + this.spanProps = { className: 'spanclass2' }; + }); + await Promise.resolve(); + expect(elm.shadowRoot.querySelector('span').className).toEqual('spanclass2'); + + elm.modify(function () { + this.spanProps = {}; + }); + await Promise.resolve(); + expect(elm.shadowRoot.querySelector('span').className).toEqual('spanclass2'); + + elm.modify(function () { + this.spanProps = { className: undefined }; + }); + await Promise.resolve(); + expect(elm.shadowRoot.querySelector('span').className).toEqual('undefined'); + + elm.modify(function () { + this.spanProps = { className: '' }; + }); + await Promise.resolve(); + expect(elm.shadowRoot.querySelector('span').className).toEqual(''); + }); + it('should assign props to dynamic elements using lwc:dynamic', () => { + expect( + elm.shadowRoot.querySelector('x-cmp').shadowRoot.querySelector('span').textContent + ).toEqual('Name: Dynamic'); + }); + it('should assign props to dynamic elements', () => { + expect( + elm.shadowRoot + .querySelector('[data-id="lwc-component"]') + .shadowRoot.querySelector('span').textContent + ).toEqual('Name: Dynamic'); + }); + + it('should rerender when tracked props are assigned', async () => { + expect(trackedChild.shadowRoot.querySelector('span').textContent).toEqual('Name: Tracked'); + elm.modify(function () { + this.trackedProps.name = 'Altered'; + }); + await Promise.resolve(); + expect(trackedChild.shadowRoot.querySelector('span').textContent).toEqual('Name: Altered'); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/spread/x/child/child.html b/packages/@lwc/integration-not-karma/test/spread/x/child/child.html new file mode 100644 index 0000000000..2e0fb89086 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/spread/x/child/child.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/spread/x/child/child.js b/packages/@lwc/integration-not-karma/test/spread/x/child/child.js new file mode 100644 index 0000000000..2803088a60 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/spread/x/child/child.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Child extends LightningElement { + @api name; +} diff --git a/packages/@lwc/integration-not-karma/test/spread/x/test/test.html b/packages/@lwc/integration-not-karma/test/spread/x/test/test.html new file mode 100644 index 0000000000..9a2aa1505f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/spread/x/test/test.html @@ -0,0 +1,9 @@ + diff --git a/packages/@lwc/integration-not-karma/test/spread/x/test/test.js b/packages/@lwc/integration-not-karma/test/spread/x/test/test.js new file mode 100644 index 0000000000..d5e2c852d7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/spread/x/test/test.js @@ -0,0 +1,27 @@ +import { api, LightningElement, track } from 'lwc'; +import Child from 'x/child'; + +export default class Test extends LightningElement { + simpleProps = { name: 'LWC', onclick: this.spreadClick }; + overriddenProps = { name: 'Aura', onclick: this.spreadClick }; + spanProps = { className: 'spanclass' }; + dynamicCtor = Child; + dynamicProps = { name: 'Dynamic' }; + @track trackedProps = { name: 'Tracked' }; + innerHTMLProps = { innerHTML: 'innerHTML from spread' }; + innerHTML = 'innerHTML from directive'; + + spreadClick() { + // eslint-disable-next-line no-console + console.log('spread click called', this); + } + + templateClick() { + // eslint-disable-next-line no-console + console.log('template click called', this); + } + + @api modify(fn) { + fn.call(this); + } +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/index.spec.js b/packages/@lwc/integration-not-karma/test/static-content/index.spec.js new file mode 100644 index 0000000000..07945e00fe --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/index.spec.js @@ -0,0 +1,865 @@ +import { createElement } from 'lwc'; +import { extractDataIds, LOWERCASE_SCOPE_TOKENS } from 'test-utils'; +import Container from 'x/container'; +import Escape from 'x/escape'; +import MultipleStyles from 'x/multipleStyles'; +import SvgNs from 'x/svgNs'; +import Table from 'x/table'; +import SvgPath from 'x/svgPath'; +import SvgPathInDiv from 'x/svgPathInDiv'; +import SvgPathInG from 'x/svgPathInG'; +import StaticUnsafeTopLevel from 'x/staticUnsafeTopLevel'; +import OnlyEventListener from 'x/onlyEventListener'; +import OnlyEventListenerChild from 'x/onlyEventListenerChild'; +import OnlyEventListenerGrandchild from 'x/onlyEventListenerGrandchild'; +import ListenerStaticWithUpdates from 'x/listenerStaticWithUpdates'; +import DeepListener from 'x/deepListener'; +import Comments from 'x/comments'; +import PreserveComments from 'x/preserveComments'; +import Attribute from 'x/attribute'; +import DeepAttribute from 'x/deepAttribute'; +import IframeOnload from 'x/iframeOnload'; +import WithKey from 'x/withKey'; +import Text from 'x/text'; +import TableWithExpression from 'x/tableWithExpressions'; +import TextWithoutPreserveComments from 'x/textWithoutPreserveComments'; +import TextWithPreserveComments from 'x/textWithPreserveComments'; + +describe.skipIf(process.env.NATIVE_SHADOW)('Mixed mode for static content', () => { + ['native', 'synthetic'].forEach((firstRenderMode) => { + it(`should set the tokens for synthetic shadow when it renders first in ${firstRenderMode}`, () => { + const elm = createElement('x-container', { is: Container }); + elm.syntheticFirst = firstRenderMode === 'synthetic'; + document.body.appendChild(elm); + + const syntheticMode = elm.shadowRoot + .querySelector('x-component') + .shadowRoot.querySelector('div'); + const nativeMode = elm.shadowRoot + .querySelector('x-native') + .shadowRoot.querySelector('x-component') + .shadowRoot.querySelector('div'); + + const token = LOWERCASE_SCOPE_TOKENS ? 'lwc-6a8uqob2ku4' : 'x-component_component'; + expect(syntheticMode.hasAttribute(token)).toBe(true); + expect(nativeMode.hasAttribute(token)).toBe(false); + }); + }); +}); + +describe('static content when stylesheets change', () => { + it('should reflect correct token for scoped styles', () => { + const elm = createElement('x-container', { is: MultipleStyles }); + + const stylesheetsWarning = + /Mutating the "stylesheets" property on a template is deprecated and will be removed in a future version of LWC/; + + expect(() => { + elm.updateTemplate({ + name: 'a', + useScopedCss: false, + }); + }).toLogWarningDev(stylesheetsWarning); + + window.__lwcResetAlreadyLoggedMessages(); + + document.body.appendChild(elm); + + expect(elm.shadowRoot.querySelector('div').getAttribute('class')).toBe('foo'); + + // atm, we need to switch templates. + expect(() => { + elm.updateTemplate({ + name: 'b', + useScopedCss: true, + }); + }).toLogWarningDev(stylesheetsWarning); + + window.__lwcResetAlreadyLoggedMessages(); + + return Promise.resolve() + .then(() => { + const classList = Array.from(elm.shadowRoot.querySelector('div').classList).sort(); + expect(classList).toEqual([ + 'foo', + LOWERCASE_SCOPE_TOKENS ? 'lwc-6fpm08fjoch' : 'x-multipleStyles_b', + ]); + + expect(() => { + elm.updateTemplate({ + name: 'a', + useScopedCss: false, + }); + }).toLogWarningDev(stylesheetsWarning); + }) + .then(() => { + const classList = Array.from(elm.shadowRoot.querySelector('div').classList).sort(); + expect(classList).toEqual(['foo']); + }); + }); +}); + +describe('svg and static content', () => { + it('should use correct namespace', () => { + const elm = createElement('x-svg-ns', { is: SvgNs }); + document.body.appendChild(elm); + + const allStaticNodes = elm.querySelectorAll('.static'); + + allStaticNodes.forEach((node) => { + expect(node.namespaceURI).toBe('http://www.w3.org/2000/svg'); + }); + }); + + function getDomStructure(elm) { + const tagName = elm.tagName.toLowerCase(); + const result = { tagName }; + for (let i = 0; i < elm.children.length; i++) { + const child = elm.children[i]; + result.children = result.children || []; + result.children.push(getDomStructure(child)); + } + return result; + } + + it('should correctly parse ', () => { + const elm = createElement('x-svg-path', { is: SvgPath }); + document.body.appendChild(elm); + + expect(getDomStructure(elm.shadowRoot.firstChild)).toEqual({ + tagName: 'svg', + children: [ + { + tagName: 'path', + }, + { + tagName: 'path', + }, + ], + }); + }); + + it('should correctly parse in div', () => { + const elm = createElement('x-svg-path-in-div', { is: SvgPathInDiv }); + document.body.appendChild(elm); + + expect(getDomStructure(elm.shadowRoot.firstChild)).toEqual({ + tagName: 'div', + children: [ + { + tagName: 'svg', + children: [ + { + tagName: 'path', + }, + { + tagName: 'path', + }, + ], + }, + ], + }); + }); + + it('should correctly parse in ', () => { + const elm = createElement('x-svg-path-in-g', { is: SvgPathInG }); + document.body.appendChild(elm); + + expect(getDomStructure(elm.shadowRoot.firstChild)).toEqual({ + tagName: 'svg', + children: [ + { + tagName: 'g', + children: [ + { + tagName: 'path', + }, + { + tagName: 'path', + }, + ], + }, + ], + }); + }); +}); + +describe('elements that cannot be parsed as top-level', () => { + it('should work with a static ', () => { + const elm = createElement('x-table', { is: Table }); + document.body.appendChild(elm); + + expect(elm.shadowRoot.querySelectorAll('td').length).toEqual(0); + + elm.addRow(); + + return Promise.resolve().then(() => { + expect(elm.shadowRoot.querySelectorAll('td').length).toEqual(1); + expect(elm.shadowRoot.querySelector('td').textContent).toEqual(''); + }); + }); + + it('works for all elements that cannot be safely parsed as top-level', () => { + const elm = createElement('x-static-unsafe-top-level', { is: StaticUnsafeTopLevel }); + document.body.appendChild(elm); + + const getChildrenTagNames = () => { + const result = []; + const { children } = elm.shadowRoot; + for (let i = 0; i < children.length; i++) { + result.push(children[i].tagName.toLowerCase()); + } + return result; + }; + + const expectedChildren = [ + 'caption', + 'col', + 'colgroup', + 'tbody', + 'td', + 'tfoot', + 'th', + 'thead', + 'tr', + ]; + + expect(getChildrenTagNames()).toEqual([]); + elm.doRender = true; + return Promise.resolve() + .then(() => { + expect(getChildrenTagNames()).toEqual(expectedChildren); + elm.doRender = false; + }) + .then(() => { + expect(getChildrenTagNames()).toEqual([]); + elm.doRender = true; + }) + .then(() => { + expect(getChildrenTagNames()).toEqual(expectedChildren); + }); + }); +}); + +describe('template literal escaping', () => { + it('should properly render escaped content', () => { + const elm = createElement('x-escape', { is: Escape }); + document.body.appendChild(elm); + + // "`" + [ + () => elm.shadowRoot.querySelector('.backtick-text').textContent, + () => elm.shadowRoot.querySelector('.backtick-comment').firstChild.textContent, + () => elm.shadowRoot.querySelector('.backtick-attr').getAttribute('data-message'), + ].forEach((selector) => { + expect(selector()).toBe('Escape `me`'); + }); + + // "\`" + [ + () => elm.shadowRoot.querySelector('.backtick-escape-text').textContent, + () => elm.shadowRoot.querySelector('.backtick-escape-comment').firstChild.textContent, + () => + elm.shadowRoot.querySelector('.backtick-escape-attr').getAttribute('data-message'), + ].forEach((selector) => { + expect(selector()).toBe('Escape \\`me`'); + }); + + // "${" + expect(elm.shadowRoot.querySelector('.dollar-attr').getAttribute('data-message')).toBe( + 'Escape ${me}' + ); + + // "\${" + expect( + elm.shadowRoot.querySelector('.dollar-escape-attr').getAttribute('data-message') + ).toBe('Escape \\${me}'); + }); +}); + +describe('static optimization with event listeners', () => { + // We test an event listener on the self, child, and grandchild, because we currently + // cannot optimize event listeners anywhere except at the top level of a static fragment. + // So we need to ensure that potentially-static parents/grandparents do not result in + // event listeners not being attached incorrectly. + const scenarios = [ + { + name: 'self', + Component: OnlyEventListener, + }, + { + name: 'child', + Component: OnlyEventListenerChild, + }, + { + name: 'grandchild', + Component: OnlyEventListenerGrandchild, + }, + ]; + + scenarios.forEach(({ name, Component }) => { + describe(name, () => { + // CustomEvent is not supported in IE11 + const CE = typeof CustomEvent === 'function' ? CustomEvent : Event; + + let elm; + let button; + + beforeEach(async () => { + elm = createElement('x-only-event-listener', { is: Component }); + document.body.appendChild(elm); + + await Promise.resolve(); + + button = elm.shadowRoot.querySelector('button'); + }); + + it('works with element that is static except for event listener', async () => { + button.dispatchEvent(new CE('foo')); + button.dispatchEvent(new CE('bar')); + expect(elm.counts).toEqual({ foo: 1, bar: 1 }); + + // trigger re-render + elm.dynamic = 'yolo'; + + await Promise.resolve(); + + button.dispatchEvent(new CE('foo')); + button.dispatchEvent(new CE('bar')); + expect(elm.counts).toEqual({ foo: 2, bar: 2 }); + }); + + it('can have manual listeners too', async () => { + const dispatcher = jasmine.createSpy(); + + button.addEventListener('baz', dispatcher); + button.dispatchEvent(new CE('baz')); + expect(dispatcher.calls.count()).toBe(1); + + // trigger re-render + elm.dynamic = 'yolo'; + + await Promise.resolve(); + + button.dispatchEvent(new CE('baz')); + expect(dispatcher.calls.count()).toBe(2); + }); + }); + }); +}); + +describe('event listeners on static nodes when other nodes are updated', () => { + it('event listeners work after updates', async () => { + const elm = createElement('x-listener-static-with-updates', { + is: ListenerStaticWithUpdates, + }); + document.body.appendChild(elm); + + await Promise.resolve(); + + let expectedCount = 0; + + expect(elm.fooEventCount).toBe(expectedCount); + elm.fireFooEvent(); + expect(elm.fooEventCount).toBe(++expectedCount); + + await Promise.resolve(); + for (let i = 0; i < 3; i++) { + elm.version = i; + elm.fireFooEvent(); + expect(elm.fooEventCount).toBe(++expectedCount); + await Promise.resolve(); + elm.fireFooEvent(); + expect(elm.fooEventCount).toBe(++expectedCount); + } + }); +}); + +describe('event listeners on deep paths', () => { + it('handles events correctly', async () => { + const elm = createElement('x-deep-listener', { + is: DeepListener, + }); + document.body.appendChild(elm); + + await Promise.resolve(); + + let count = 0; + expect(elm.counter).toBe(count); + + const childElms = Object.values(extractDataIds(elm)); + expect(childElms.length).toBe(12); // static1, dynamic1, deepStatic1, static2, etc. until 4 + + for (const childElm of childElms) { + childElm.dispatchEvent(new CustomEvent('foo')); + expect(elm.counter).toBe(++count); + } + }); +}); + +describe('static parts applies to comments correctly', () => { + it('has correct static parts when lwc:preserve-comments is off', async () => { + const elm = createElement('x-comments', { + is: Comments, + }); + document.body.appendChild(elm); + + await Promise.resolve(); + + const { foo, bar } = extractDataIds(elm); + const refs = elm.getRefs(); + + foo.click(); + expect(elm.fooWasClicked).toBe(true); + expect(refs.foo).toBe(foo); + + bar.click(); + expect(elm.barWasClicked).toBe(true); + expect(refs.bar).toBe(bar); + }); + + it('has correct static parts when lwc:preserve-comments is on', async () => { + const elm = createElement('x-preserve-comments', { + is: PreserveComments, + }); + document.body.appendChild(elm); + + await Promise.resolve(); + + const { foo, bar } = extractDataIds(elm); + const refs = elm.getRefs(); + + foo.click(); + expect(elm.fooWasClicked).toBe(true); + expect(refs.foo).toBe(foo); + + bar.click(); + expect(elm.barWasClicked).toBe(true); + expect(refs.bar).toBe(bar); + }); +}); + +describe('static content optimization with attribute', () => { + let nodes = {}; + let elm; + + beforeEach(async () => { + elm = createElement('x-attributes', { is: Attribute }); + document.body.appendChild(elm); + await Promise.resolve(); + nodes = extractDataIds(elm); + }); + + const verifyStyleAttributeAppliedCorrectly = ({ cmp, expected }) => + expect(cmp.getAttribute('style')).toEqual(expected); + + const verifyAttributeAppliedCorrectly = ({ cmp, expected }) => + expect(cmp.getAttribute('data-value')).toEqual(expected); + + const verifyClassAppliedCorrectly = ({ cmp, expected }) => + expect(cmp.getAttribute('class')).toEqual(expected); + + it('preserves static values', () => { + const { + staticAttr, + staticAttrNested, + staticClass, + staticClassBoolean, + staticClassEmpty, + staticClassNested, + staticClassSpaces, + staticClassTab, + staticClassTabs, + staticCombined, + staticCombinedNested, + staticStyle, + staticStyleBoolean, + staticStyleEmpty, + staticStyleInvalid, + staticStyleNested, + staticStyleSpaces, + staticStyleTab, + staticStyleTabs, + } = nodes; + + // styles + [ + { cmp: staticStyle, expected: 'color: blue;' }, + { cmp: staticCombined, expected: 'color: red;' }, + { cmp: staticStyleNested, expected: 'color: white;' }, + { cmp: staticCombinedNested, expected: 'color: orange;' }, + { cmp: staticStyleBoolean, expected: null }, + { cmp: staticStyleEmpty, expected: null }, + { cmp: staticStyleInvalid, expected: null }, + { cmp: staticStyleSpaces, expected: null }, + { cmp: staticStyleTab, expected: null }, + { cmp: staticStyleTabs, expected: null }, + ].forEach(verifyStyleAttributeAppliedCorrectly); + + // class + [ + { cmp: staticClass, expected: 'static class' }, + { cmp: staticCombined, expected: 'combined class' }, + { cmp: staticClassNested, expected: 'static nested class' }, + { cmp: staticCombinedNested, expected: 'static combined nested' }, + { cmp: staticClassBoolean, expected: null }, + { cmp: staticClassEmpty, expected: null }, + { cmp: staticClassSpaces, expected: null }, + { cmp: staticClassTab, expected: null }, + { cmp: staticClassTabs, expected: null }, + ].forEach(verifyClassAppliedCorrectly); + + // attributes + [ + { cmp: staticAttr, expected: 'static1' }, + { cmp: staticCombined, expected: 'static2' }, + { cmp: staticAttrNested, expected: 'static3' }, + { cmp: staticCombinedNested, expected: 'static4' }, + ].forEach(verifyAttributeAppliedCorrectly); + }); + + it('applies expressions on mount', () => { + const { + dynamicAttr, + dynamicStyle, + dynamicClass, + dynamicAttrNested, + dynamicStyleNested, + dynamicClassNested, + dynamicCombined, + dynamicCombinedNested, + } = nodes; + + // styles + [ + { cmp: dynamicStyle, expected: 'color: green;' }, + { cmp: dynamicStyleNested, expected: 'color: violet;' }, + { cmp: dynamicCombined, expected: 'color: orange;' }, + { cmp: dynamicCombinedNested, expected: 'color: black;' }, + ].forEach(verifyStyleAttributeAppliedCorrectly); + + // class + [ + { cmp: dynamicClass, expected: 'class1' }, + { cmp: dynamicClassNested, expected: 'nestedClass1' }, + { cmp: dynamicCombined, expected: 'combinedClass' }, + { cmp: dynamicCombinedNested, expected: 'combinedClassNested' }, + ].forEach(verifyClassAppliedCorrectly); + + // attributes + [ + { cmp: dynamicAttr, expected: 'dynamic1' }, + { cmp: dynamicAttrNested, expected: 'dynamic2' }, + { cmp: dynamicCombined, expected: 'dynamic3' }, + { cmp: dynamicCombinedNested, expected: 'dynamic4' }, + ].forEach(verifyAttributeAppliedCorrectly); + }); + + it('updates values when expressions change', async () => { + const { + dynamicAttr, + dynamicStyle, + dynamicClass, + dynamicAttrNested, + dynamicStyleNested, + dynamicClassNested, + dynamicCombined, + dynamicCombinedNested, + } = nodes; + + // styles + + elm.dynamicStyle = 'color: teal;'; + elm.dynamicStyleNested = 'color: rose;'; + elm.combinedStyle = 'color: purple;'; + elm.combinedStyleNested = 'color: random;'; + + await Promise.resolve(); + + [ + { cmp: dynamicStyle, expected: 'color: teal;' }, + { cmp: dynamicStyleNested, expected: 'color: rose;' }, + { cmp: dynamicCombined, expected: 'color: purple;' }, + { cmp: dynamicCombinedNested, expected: 'color: random;' }, + ].forEach(verifyStyleAttributeAppliedCorrectly); + + // class + elm.dynamicClass = 'class2'; + elm.dynamicClassNested = 'nestedClass2'; + elm.combinedClass = 'combinedClassUpdated'; + elm.combinedClassNested = 'combinedClassNestedUpdated'; + + await Promise.resolve(); + + [ + { cmp: dynamicClass, expected: 'class2' }, + { cmp: dynamicClassNested, expected: 'nestedClass2' }, + { cmp: dynamicCombined, expected: 'combinedClassUpdated' }, + { cmp: dynamicCombinedNested, expected: 'combinedClassNestedUpdated' }, + ].forEach(verifyClassAppliedCorrectly); + + // attributes + elm.dynamicAttr = 'dynamicUpdated1'; + elm.dynamicAttrNested = 'dynamicUpdated2'; + elm.combinedAttr = 'dynamicUpdated3'; + elm.combinedAttrNested = 'dynamicUpdated4'; + + await Promise.resolve(); + + [ + { cmp: dynamicAttr, expected: 'dynamicUpdated1' }, + { cmp: dynamicAttrNested, expected: 'dynamicUpdated2' }, + { cmp: dynamicCombined, expected: 'dynamicUpdated3' }, + { cmp: dynamicCombinedNested, expected: 'dynamicUpdated4' }, + ].forEach(verifyAttributeAppliedCorrectly); + }); + + it('applies expression to deeply nested data structure', async () => { + const elm = createElement('x-deeply-nested', { is: DeepAttribute }); + document.body.appendChild(elm); + await Promise.resolve(); + + nodes = extractDataIds(elm); + + // Test includes 4 levels of depth + for (let i = 1; i < 5; i++) { + // style + [ + { cmp: nodes[`deep${i}Style`], expected: `${i}` }, + { cmp: nodes[`deep${i}StyleNested`], expected: `${i}` }, + ].forEach(verifyStyleAttributeAppliedCorrectly); + + // class + [ + { cmp: nodes[`deep${i}Class`], expected: `${i}` }, + { cmp: nodes[`deep${i}ClassNested`], expected: `${i}` }, + ].forEach(verifyClassAppliedCorrectly); + + // attribute + [ + { cmp: nodes[`deep${i}Attr`], expected: `${i}` }, + { cmp: nodes[`deep${i}AttrNested`], expected: `${i}` }, + ].forEach(verifyAttributeAppliedCorrectly); + + // combined + [ + { cmp: nodes[`deep${i}Combined`], expected: `${i}` }, + { cmp: nodes[`deep${i}CombinedNested`], expected: `${i}` }, + ].forEach(verifyAttributeAppliedCorrectly); + } + }); +}); + +describe('iframe onload event listener', () => { + it('works with iframe onload listener', async () => { + const elm = createElement('x-iframe-onload', { is: IframeOnload }); + document.body.appendChild(elm); + // Oddly Firefox requires two macrotasks before the load event fires. Chrome/Safari only require a microtask. + await new Promise((resolve) => setTimeout(resolve)); + await new Promise((resolve) => setTimeout(resolve)); + expect(elm.loaded).toBeTrue(); + }); +}); + +describe('key directive', () => { + it('works with a key directive on top-level static content', async () => { + const elm = createElement('x-with-key', { is: WithKey }); + document.body.appendChild(elm); + await Promise.resolve(); + const tbody = elm.shadowRoot.querySelector('tbody'); + expect(tbody.children.length).toBe(0); + + // one child + elm.items = [0]; + await Promise.resolve(); + expect(tbody.children.length).toBe(1); + const trsA = [...elm.shadowRoot.querySelectorAll('tr')]; + const tdsA = [...elm.shadowRoot.querySelectorAll('td')]; + expect(trsA.length).toBe(1); + expect(tdsA.length).toBe(1); + + // second child + elm.items = [0, 1]; + await Promise.resolve(); + expect(tbody.children.length).toBe(2); + const trsB = [...elm.shadowRoot.querySelectorAll('tr')]; + const tdsB = [...elm.shadowRoot.querySelectorAll('td')]; + + expect(trsB.length).toBe(2); + expect(tdsB.length).toBe(2); + expect(trsB[0]).toBe(trsA[0]); + expect(tdsB[0]).toBe(tdsA[0]); + + // switch order + elm.items = [1, 0]; + await Promise.resolve(); + expect(tbody.children.length).toBe(2); + const trsC = [...elm.shadowRoot.querySelectorAll('tr')]; + const tdsC = [...elm.shadowRoot.querySelectorAll('td')]; + + expect(trsC.length).toBe(2); + expect(tdsC.length).toBe(2); + expect(trsC[0]).toBe(trsB[1]); + expect(tdsC[0]).toBe(tdsB[1]); + expect(trsC[1]).toBe(trsB[0]); + expect(tdsC[1]).toBe(tdsB[0]); + }); +}); + +describe('static content dynamic text', () => { + it('renders expressions on mount', async () => { + const elm = createElement('x-text', { is: Text }); + document.body.appendChild(elm); + + await Promise.resolve(); + + const { emptyString, concateBeginning, concateEnd, siblings } = extractDataIds(elm); + + expect(emptyString.textContent).toEqual(''); + expect(concateBeginning.textContent).toEqual('default value'); + expect(concateEnd.textContent).toEqual('value default'); + + expect(siblings.childNodes.length).toBe(2); + expect(siblings.childNodes[0].textContent).toEqual('standard text'); + expect(siblings.childNodes[1].textContent).toEqual('second default'); + }); + + it('updates expressions on mount', async () => { + const elm = createElement('x-text', { is: Text }); + document.body.appendChild(elm); + + await Promise.resolve(); + + elm.emptyString = 'not empty'; + elm.dynamicText = 'updated'; + elm.siblingDynamicText = 'updated second'; + + await Promise.resolve(); + + const { emptyString, concateBeginning, concateEnd, siblings } = extractDataIds(elm); + + expect(emptyString.textContent).toEqual('not empty'); + expect(concateBeginning.textContent).toEqual('updated value'); + expect(concateEnd.textContent).toEqual('value updated'); + + expect(siblings.childNodes.length).toEqual(2); + expect(siblings.childNodes[0].textContent).toEqual('standard text'); + expect(siblings.childNodes[1].textContent).toEqual('updated second'); + }); +}); + +describe('table with static content containing expressions', () => { + it('renders static content correctly', async () => { + const table = createElement('x-table', { is: TableWithExpression }); + document.body.appendChild(table); + + await Promise.resolve(); + + const tbody = table.shadowRoot.querySelector('tbody'); + expect(tbody.children.length).toEqual(3); + const trs = [...table.shadowRoot.querySelectorAll('tr')]; + const tds = [...table.shadowRoot.querySelectorAll('td')]; + + expect(trs.length).toEqual(3); + expect(tds.length).toEqual(3); + + tds.forEach((td, i) => { + expect(td.getAttribute('class')).toEqual(`class${i}`); + expect(td.getAttribute('style')).toEqual(`color: ${i};`); + expect(td.getAttribute('data-id')).toEqual(`${i}`); + expect(td.textContent).toEqual(`value${i}`); + }); + }); +}); + +describe('text containing comments', () => { + [ + { + tagName: 'x-text-without-preserve-comments', + preserveComments: false, + ctor: TextWithoutPreserveComments, + expected: { + staticText: Array(4).fill('static text'), + initialDynamicText: Array(4).fill(' text'), + updatedDynamicText: Array(4).fill('dynamic text'), + initialMixedText: ' static text text text ', + updatedMixedText: ' static textmixed textmixed text ', + }, + }, + { + tagName: 'x-text-with-preserve-comments', + preserveComments: true, + ctor: TextWithPreserveComments, + expected: { + staticText: [ + 'static text', + 'static text', + 'static text', + 'static text', + ], + initialDynamicText: [ + ' text', + ' text', + ' text', + ' text', + ], + updatedDynamicText: [ + 'dynamic text', + 'dynamic text', + 'dynamic text', + 'dynamic text', + ], + initialMixedText: + ' static text text text ', + updatedMixedText: + ' static textmixed textmixed text ', + }, + }, + ].forEach(({ tagName, preserveComments, ctor, expected }) => { + describe(`preserveComments ${preserveComments}`, () => { + let elm; + let nodes; + beforeEach(async () => { + elm = createElement(tagName, { + is: ctor, + }); + document.body.appendChild(elm); + await Promise.resolve(); + nodes = extractDataIds(elm); + }); + + afterAll(() => { + elm.remove(); + }); + + const assertChildNodesInnerHTMLMatches = (actual, expected) => { + expect(actual.length).toEqual(expected.length); + // Actual is a HTMLCollection + expect(Array.from(actual).map((val) => val.innerHTML)).toEqual(expected); + }; + + it('renders static text correctly', () => { + const { staticText } = nodes; + assertChildNodesInnerHTMLMatches(staticText.children, expected.staticText); + }); + + it('renders dynamic text correctly', async () => { + const { dynamicText } = nodes; + // Initially empty variable + assertChildNodesInnerHTMLMatches(dynamicText.children, expected.initialDynamicText); + elm.dynamicText = 'dynamic'; + await Promise.resolve(); + assertChildNodesInnerHTMLMatches(dynamicText.children, expected.updatedDynamicText); + }); + + it('renders mixed static and dynamic text correctly', async () => { + const { mixedText } = nodes; + // Initially empty variable + expect(mixedText.innerHTML).toEqual(expected.initialMixedText); + elm.mixedText = 'mixed'; + await Promise.resolve(); + expect(mixedText.innerHTML).toEqual(expected.updatedMixedText); + }); + }); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/attribute/attribute.html b/packages/@lwc/integration-not-karma/test/static-content/x/attribute/attribute.html new file mode 100644 index 0000000000..b615992eee --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/attribute/attribute.html @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/attribute/attribute.js b/packages/@lwc/integration-not-karma/test/static-content/x/attribute/attribute.js new file mode 100644 index 0000000000..1f9c0ee623 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/attribute/attribute.js @@ -0,0 +1,16 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api dynamicAttr = 'dynamic1'; + @api dynamicAttrNested = 'dynamic2'; + @api dynamicStyle = 'color: green;'; + @api dynamicStyleNested = 'color: violet;'; + @api dynamicClass = 'class1'; + @api dynamicClassNested = 'nestedClass1'; + @api combinedAttr = 'dynamic3'; + @api combinedStyle = 'color: orange;'; + @api combinedClass = 'combinedClass'; + @api combinedAttrNested = 'dynamic4'; + @api combinedStyleNested = 'color: black;'; + @api combinedClassNested = 'combinedClassNested'; +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/comments/comments.html b/packages/@lwc/integration-not-karma/test/static-content/x/comments/comments.html new file mode 100644 index 0000000000..90577520df --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/comments/comments.html @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/comments/comments.js b/packages/@lwc/integration-not-karma/test/static-content/x/comments/comments.js new file mode 100644 index 0000000000..a5c838f25c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/comments/comments.js @@ -0,0 +1,22 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api + fooWasClicked; + + @api + barWasClicked; + + onClickFoo() { + this.fooWasClicked = true; + } + + onClickBar() { + this.barWasClicked = true; + } + + @api + getRefs() { + return this.refs; + } +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/component/component.css b/packages/@lwc/integration-not-karma/test/static-content/x/component/component.css new file mode 100644 index 0000000000..5b5436e874 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/component/component.css @@ -0,0 +1,3 @@ +div { + color: blue; +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/component/component.html b/packages/@lwc/integration-not-karma/test/static-content/x/component/component.html new file mode 100644 index 0000000000..e50da2b875 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/component/component.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/component/component.js b/packages/@lwc/integration-not-karma/test/static-content/x/component/component.js new file mode 100644 index 0000000000..6d3542bb2f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/component/component.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Component extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/container/container.html b/packages/@lwc/integration-not-karma/test/static-content/x/container/container.html new file mode 100644 index 0000000000..4e179eb39d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/container/container.html @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/container/container.js b/packages/@lwc/integration-not-karma/test/static-content/x/container/container.js new file mode 100644 index 0000000000..5da038afe9 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/container/container.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class Container extends LightningElement { + @api syntheticFirst = false; +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/deepAttribute/deepAttribute.html b/packages/@lwc/integration-not-karma/test/static-content/x/deepAttribute/deepAttribute.html new file mode 100644 index 0000000000..a60ea0f985 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/deepAttribute/deepAttribute.html @@ -0,0 +1,49 @@ + diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/deepAttribute/deepAttribute.js b/packages/@lwc/integration-not-karma/test/static-content/x/deepAttribute/deepAttribute.js new file mode 100644 index 0000000000..d3e5e380c8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/deepAttribute/deepAttribute.js @@ -0,0 +1,8 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + one = '1'; + un = { deux: '2' }; + uno = { dos: { tres: '3' } }; + ichi = { ni: { san: { shi: '4' } } }; +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/deepListener/deepListener.html b/packages/@lwc/integration-not-karma/test/static-content/x/deepListener/deepListener.html new file mode 100644 index 0000000000..3d13762f1d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/deepListener/deepListener.html @@ -0,0 +1,29 @@ + diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/deepListener/deepListener.js b/packages/@lwc/integration-not-karma/test/static-content/x/deepListener/deepListener.js new file mode 100644 index 0000000000..bc35fe60a4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/deepListener/deepListener.js @@ -0,0 +1,33 @@ +import { LightningElement, api } from 'lwc'; + +export default class App extends LightningElement { + @api counter = 0; + + one() { + this.counter++; + } + + un = { + deux: () => { + this.counter++; + }, + }; + + uno = { + dos: { + tres: () => { + this.counter++; + }, + }, + }; + + ichi = { + ni: { + san: { + shi: () => { + this.counter++; + }, + }, + }, + }; +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/escape/escape.html b/packages/@lwc/integration-not-karma/test/static-content/x/escape/escape.html new file mode 100644 index 0000000000..cf40c868f6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/escape/escape.html @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/escape/escape.js b/packages/@lwc/integration-not-karma/test/static-content/x/escape/escape.js new file mode 100644 index 0000000000..2ca7708e5b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/escape/escape.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Escape extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/iframeOnload/iframeOnload.html b/packages/@lwc/integration-not-karma/test/static-content/x/iframeOnload/iframeOnload.html new file mode 100644 index 0000000000..7edc126067 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/iframeOnload/iframeOnload.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/iframeOnload/iframeOnload.js b/packages/@lwc/integration-not-karma/test/static-content/x/iframeOnload/iframeOnload.js new file mode 100644 index 0000000000..096f054523 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/iframeOnload/iframeOnload.js @@ -0,0 +1,9 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api loaded = false; + + loadHandler() { + this.loaded = true; + } +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/listenerStaticWithUpdates/listenerStaticWithUpdates.html b/packages/@lwc/integration-not-karma/test/static-content/x/listenerStaticWithUpdates/listenerStaticWithUpdates.html new file mode 100644 index 0000000000..6917e5dc87 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/listenerStaticWithUpdates/listenerStaticWithUpdates.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/listenerStaticWithUpdates/listenerStaticWithUpdates.js b/packages/@lwc/integration-not-karma/test/static-content/x/listenerStaticWithUpdates/listenerStaticWithUpdates.js new file mode 100644 index 0000000000..ab00870700 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/listenerStaticWithUpdates/listenerStaticWithUpdates.js @@ -0,0 +1,18 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api + fooEventCount = 0; + + @api + version = 0; + + handleFooEvent() { + this.fooEventCount++; + } + + @api + fireFooEvent() { + this.template.querySelector('div').dispatchEvent(new CustomEvent('foo')); + } +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/a.css b/packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/a.css new file mode 100644 index 0000000000..5b5436e874 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/a.css @@ -0,0 +1,3 @@ +div { + color: blue; +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/a.html b/packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/a.html new file mode 100644 index 0000000000..37e4160cf8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/a.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/b.html b/packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/b.html new file mode 100644 index 0000000000..1c210f7bc7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/b.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/b.scoped.css b/packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/b.scoped.css new file mode 100644 index 0000000000..cd16730bd8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/b.scoped.css @@ -0,0 +1,3 @@ +div { + color: red; +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/multipleStyles.js b/packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/multipleStyles.js new file mode 100644 index 0000000000..3e1672fbe8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/multipleStyles/multipleStyles.js @@ -0,0 +1,27 @@ +import { LightningElement, api } from 'lwc'; +import aTemplate from './a.html'; +import bTemplate from './b.html'; +import aCss from './a.css'; +import bCss from './b.scoped.css?scoped=true'; + +const templateMap = { + a: aTemplate, + b: bTemplate, +}; +export default class Container extends LightningElement { + _template = aTemplate; + + @api + updateTemplate({ name, useScopedCss }) { + const template = templateMap[name]; + + // TODO [#2826]: freeze the template object and stop supporting setting the stylesheets + template.stylesheets = useScopedCss ? [...aCss, ...bCss] : [...aCss]; + + this._template = template; + } + + render() { + return this._template; + } +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/native/native.html b/packages/@lwc/integration-not-karma/test/static-content/x/native/native.html new file mode 100644 index 0000000000..3db48ef294 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/native/native.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/native/native.js b/packages/@lwc/integration-not-karma/test/static-content/x/native/native.js new file mode 100644 index 0000000000..9397b74759 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/native/native.js @@ -0,0 +1,5 @@ +import { LightningElement } from 'lwc'; + +export default class Native extends LightningElement { + static shadowSupportMode = 'native'; +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListener/onlyEventListener.html b/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListener/onlyEventListener.html new file mode 100644 index 0000000000..74d50f8efc --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListener/onlyEventListener.html @@ -0,0 +1,7 @@ + diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListener/onlyEventListener.js b/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListener/onlyEventListener.js new file mode 100644 index 0000000000..b855a2919a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListener/onlyEventListener.js @@ -0,0 +1,14 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api counts = {}; + @api dynamic = ''; + + onFoo() { + this.counts.foo = (this.counts.foo || 0) + 1; + } + + onBar() { + this.counts.bar = (this.counts.bar || 0) + 1; + } +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListenerChild/onlyEventListenerChild.html b/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListenerChild/onlyEventListenerChild.html new file mode 100644 index 0000000000..496337b81b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListenerChild/onlyEventListenerChild.html @@ -0,0 +1,9 @@ + diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListenerChild/onlyEventListenerChild.js b/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListenerChild/onlyEventListenerChild.js new file mode 100644 index 0000000000..b855a2919a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListenerChild/onlyEventListenerChild.js @@ -0,0 +1,14 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api counts = {}; + @api dynamic = ''; + + onFoo() { + this.counts.foo = (this.counts.foo || 0) + 1; + } + + onBar() { + this.counts.bar = (this.counts.bar || 0) + 1; + } +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListenerGrandchild/onlyEventListenerGrandchild.html b/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListenerGrandchild/onlyEventListenerGrandchild.html new file mode 100644 index 0000000000..9751a248f4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListenerGrandchild/onlyEventListenerGrandchild.html @@ -0,0 +1,11 @@ + diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListenerGrandchild/onlyEventListenerGrandchild.js b/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListenerGrandchild/onlyEventListenerGrandchild.js new file mode 100644 index 0000000000..b855a2919a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/onlyEventListenerGrandchild/onlyEventListenerGrandchild.js @@ -0,0 +1,14 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api counts = {}; + @api dynamic = ''; + + onFoo() { + this.counts.foo = (this.counts.foo || 0) + 1; + } + + onBar() { + this.counts.bar = (this.counts.bar || 0) + 1; + } +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/preserveComments/preserveComments.html b/packages/@lwc/integration-not-karma/test/static-content/x/preserveComments/preserveComments.html new file mode 100644 index 0000000000..3e43c666b1 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/preserveComments/preserveComments.html @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/preserveComments/preserveComments.js b/packages/@lwc/integration-not-karma/test/static-content/x/preserveComments/preserveComments.js new file mode 100644 index 0000000000..a5c838f25c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/preserveComments/preserveComments.js @@ -0,0 +1,22 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api + fooWasClicked; + + @api + barWasClicked; + + onClickFoo() { + this.fooWasClicked = true; + } + + onClickBar() { + this.barWasClicked = true; + } + + @api + getRefs() { + return this.refs; + } +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/staticUnsafeTopLevel/staticUnsafeTopLevel.html b/packages/@lwc/integration-not-karma/test/static-content/x/staticUnsafeTopLevel/staticUnsafeTopLevel.html new file mode 100644 index 0000000000..bc8518b18c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/staticUnsafeTopLevel/staticUnsafeTopLevel.html @@ -0,0 +1,30 @@ + diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/staticUnsafeTopLevel/staticUnsafeTopLevel.js b/packages/@lwc/integration-not-karma/test/static-content/x/staticUnsafeTopLevel/staticUnsafeTopLevel.js new file mode 100644 index 0000000000..9e510127fb --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/staticUnsafeTopLevel/staticUnsafeTopLevel.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api doRender = false; +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/svgNs/svgNs.html b/packages/@lwc/integration-not-karma/test/static-content/x/svgNs/svgNs.html new file mode 100644 index 0000000000..381aaaf39b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/svgNs/svgNs.html @@ -0,0 +1,15 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/svgNs/svgNs.js b/packages/@lwc/integration-not-karma/test/static-content/x/svgNs/svgNs.js new file mode 100644 index 0000000000..f426960211 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/svgNs/svgNs.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class SvgNs extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/svgPath/svgPath.html b/packages/@lwc/integration-not-karma/test/static-content/x/svgPath/svgPath.html new file mode 100644 index 0000000000..d74c88cee4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/svgPath/svgPath.html @@ -0,0 +1,6 @@ + diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/svgPath/svgPath.js b/packages/@lwc/integration-not-karma/test/static-content/x/svgPath/svgPath.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/svgPath/svgPath.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/svgPathInDiv/svgPathInDiv.html b/packages/@lwc/integration-not-karma/test/static-content/x/svgPathInDiv/svgPathInDiv.html new file mode 100644 index 0000000000..9a59b19538 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/svgPathInDiv/svgPathInDiv.html @@ -0,0 +1,8 @@ + diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/svgPathInDiv/svgPathInDiv.js b/packages/@lwc/integration-not-karma/test/static-content/x/svgPathInDiv/svgPathInDiv.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/svgPathInDiv/svgPathInDiv.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/svgPathInG/svgPathInG.html b/packages/@lwc/integration-not-karma/test/static-content/x/svgPathInG/svgPathInG.html new file mode 100644 index 0000000000..d2e1ff6be9 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/svgPathInG/svgPathInG.html @@ -0,0 +1,8 @@ + diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/svgPathInG/svgPathInG.js b/packages/@lwc/integration-not-karma/test/static-content/x/svgPathInG/svgPathInG.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/svgPathInG/svgPathInG.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/table/table.html b/packages/@lwc/integration-not-karma/test/static-content/x/table/table.html new file mode 100644 index 0000000000..6ff6fb83e7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/table/table.html @@ -0,0 +1,11 @@ + diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/table/table.js b/packages/@lwc/integration-not-karma/test/static-content/x/table/table.js new file mode 100644 index 0000000000..4310425be5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/table/table.js @@ -0,0 +1,13 @@ +import { LightningElement, api, track } from 'lwc'; + +let count = 0; + +export default class extends LightningElement { + @track + rows = []; + + @api + addRow() { + this.rows.push(++count); + } +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/tableWithExpressions/tableWithExpressions.html b/packages/@lwc/integration-not-karma/test/static-content/x/tableWithExpressions/tableWithExpressions.html new file mode 100644 index 0000000000..ce11e98192 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/tableWithExpressions/tableWithExpressions.html @@ -0,0 +1,11 @@ + diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/tableWithExpressions/tableWithExpressions.js b/packages/@lwc/integration-not-karma/test/static-content/x/tableWithExpressions/tableWithExpressions.js new file mode 100644 index 0000000000..342d0d9db5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/tableWithExpressions/tableWithExpressions.js @@ -0,0 +1,24 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement { + rows = [ + { + id: 0, + style: 'color: 0;', + class: 'class0', + value: 'value0', + }, + { + id: 1, + style: 'color: 1;', + class: 'class1', + value: 'value1', + }, + { + id: 2, + style: 'color: 2;', + class: 'class2', + value: 'value2', + }, + ]; +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/text/text.html b/packages/@lwc/integration-not-karma/test/static-content/x/text/text.html new file mode 100644 index 0000000000..e11eaec371 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/text/text.html @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/text/text.js b/packages/@lwc/integration-not-karma/test/static-content/x/text/text.js new file mode 100644 index 0000000000..87e9f97965 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/text/text.js @@ -0,0 +1,7 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api emptyString = ''; + @api dynamicText = 'default'; + @api siblingDynamicText = 'second default'; +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/textWithPreserveComments/textWithPreserveComments.html b/packages/@lwc/integration-not-karma/test/static-content/x/textWithPreserveComments/textWithPreserveComments.html new file mode 100644 index 0000000000..0be6820869 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/textWithPreserveComments/textWithPreserveComments.html @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/textWithPreserveComments/textWithPreserveComments.js b/packages/@lwc/integration-not-karma/test/static-content/x/textWithPreserveComments/textWithPreserveComments.js new file mode 100644 index 0000000000..8961f3900d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/textWithPreserveComments/textWithPreserveComments.js @@ -0,0 +1,6 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api dynamicText; + @api mixedText; +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/textWithoutPreserveComments/textWithoutPreserveComments.html b/packages/@lwc/integration-not-karma/test/static-content/x/textWithoutPreserveComments/textWithoutPreserveComments.html new file mode 100644 index 0000000000..8db8bb598b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/textWithoutPreserveComments/textWithoutPreserveComments.html @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/textWithoutPreserveComments/textWithoutPreserveComments.js b/packages/@lwc/integration-not-karma/test/static-content/x/textWithoutPreserveComments/textWithoutPreserveComments.js new file mode 100644 index 0000000000..8961f3900d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/textWithoutPreserveComments/textWithoutPreserveComments.js @@ -0,0 +1,6 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api dynamicText; + @api mixedText; +} diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/withKey/withKey.html b/packages/@lwc/integration-not-karma/test/static-content/x/withKey/withKey.html new file mode 100644 index 0000000000..6f1619467b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/withKey/withKey.html @@ -0,0 +1,11 @@ + diff --git a/packages/@lwc/integration-not-karma/test/static-content/x/withKey/withKey.js b/packages/@lwc/integration-not-karma/test/static-content/x/withKey/withKey.js new file mode 100644 index 0000000000..503059cb83 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/static-content/x/withKey/withKey.js @@ -0,0 +1,5 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + @api items = []; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/components/base/a/a.html b/packages/@lwc/integration-not-karma/test/swapping/components/base/a/a.html new file mode 100644 index 0000000000..035c1d3d32 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/components/base/a/a.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/swapping/components/base/a/a.js b/packages/@lwc/integration-not-karma/test/swapping/components/base/a/a.js new file mode 100644 index 0000000000..2550bd693e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/components/base/a/a.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class A extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/swapping/components/base/b/b.html b/packages/@lwc/integration-not-karma/test/swapping/components/base/b/b.html new file mode 100644 index 0000000000..53bd907e14 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/components/base/b/b.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/swapping/components/base/b/b.js b/packages/@lwc/integration-not-karma/test/swapping/components/base/b/b.js new file mode 100644 index 0000000000..f93991df85 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/components/base/b/b.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class B extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/swapping/components/base/c/c.html b/packages/@lwc/integration-not-karma/test/swapping/components/base/c/c.html new file mode 100644 index 0000000000..d9647d362d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/components/base/c/c.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/swapping/components/base/c/c.js b/packages/@lwc/integration-not-karma/test/swapping/components/base/c/c.js new file mode 100644 index 0000000000..a580373312 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/components/base/c/c.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class C extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/swapping/components/base/container/container.html b/packages/@lwc/integration-not-karma/test/swapping/components/base/container/container.html new file mode 100644 index 0000000000..41da6cc12a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/components/base/container/container.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/swapping/components/base/container/container.js b/packages/@lwc/integration-not-karma/test/swapping/components/base/container/container.js new file mode 100644 index 0000000000..22045a5f17 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/components/base/container/container.js @@ -0,0 +1,10 @@ +import { LightningElement, api } from 'lwc'; +import Z from 'base/libraryz'; + +export default class Container extends LightningElement { + @api + testValue; + connectedCallback() { + this.testValue = new Z().value; + } +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/components/base/d/d.html b/packages/@lwc/integration-not-karma/test/swapping/components/base/d/d.html new file mode 100644 index 0000000000..0abdabc49d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/components/base/d/d.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/swapping/components/base/d/d.js b/packages/@lwc/integration-not-karma/test/swapping/components/base/d/d.js new file mode 100644 index 0000000000..1f8be71c10 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/components/base/d/d.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class D extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/swapping/components/base/e/e.html b/packages/@lwc/integration-not-karma/test/swapping/components/base/e/e.html new file mode 100644 index 0000000000..c4b1342e48 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/components/base/e/e.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/swapping/components/base/e/e.js b/packages/@lwc/integration-not-karma/test/swapping/components/base/e/e.js new file mode 100644 index 0000000000..d6c81e9d86 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/components/base/e/e.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class E extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/swapping/components/base/libraryx/libraryx.js b/packages/@lwc/integration-not-karma/test/swapping/components/base/libraryx/libraryx.js new file mode 100644 index 0000000000..feba9337e7 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/components/base/libraryx/libraryx.js @@ -0,0 +1,5 @@ +export default class LibraryX { + constructor() { + this.value = 'I am not a component'; + } +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/components/base/libraryz/libraryz.js b/packages/@lwc/integration-not-karma/test/swapping/components/base/libraryz/libraryz.js new file mode 100644 index 0000000000..3b8d980f79 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/components/base/libraryz/libraryz.js @@ -0,0 +1,5 @@ +export default class LibraryZ { + constructor() { + this.value = 'I may look like a component'; + } +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/components/index.spec.js b/packages/@lwc/integration-not-karma/test/swapping/components/index.spec.js new file mode 100644 index 0000000000..a3a542083b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/components/index.spec.js @@ -0,0 +1,62 @@ +import { createElement, swapComponent } from 'lwc'; + +import Container from 'base/container'; +import A from 'base/a'; +import B from 'base/b'; +import C from 'base/c'; +import D from 'base/d'; +import E from 'base/e'; +import X from 'base/libraryx'; +import Z from 'base/libraryz'; + +// Swapping is only enabled in dev mode +describe.skipIf(process.env.NODE_ENV === 'production')('component swapping', () => { + it('should work before and after instantiation', () => { + expect(swapComponent(A, B)).toBe(true); + const elm = createElement('x-container', { is: Container }); + document.body.appendChild(elm); + expect(elm.shadowRoot.firstChild.shadowRoot.firstChild.outerHTML).toBe( + '

        b

        ' + ); + expect(swapComponent(B, C)).toBe(true); + return Promise.resolve().then(() => { + expect(elm.shadowRoot.firstChild.shadowRoot.firstChild.outerHTML).toBe( + '

        c

        ' + ); + }); + }); + + it('should return false for root elements', () => { + const elm = createElement('x-d', { is: D }); + document.body.appendChild(elm); + expect(swapComponent(D, E)).toBe(false); // meaning you can reload the page + }); + + it('should throw for invalid old component', () => { + expect(() => { + swapComponent(function () {}, D); + }).toThrowError( + TypeError, + /Invalid Component: Attempting to swap a non-component with a component/ + ); + }); + + it('should throw for invalid new componeont', () => { + expect(() => { + swapComponent(D, function () {}); + }).toThrowError( + TypeError, + /Invalid Component: Attempting to swap a component with a non-component/ + ); + }); + + it('should be a no-op for non components', () => { + const elm = createElement('x-container', { is: Container }); + document.body.appendChild(elm); + expect(elm.testValue).toBe('I may look like a component'); + expect(swapComponent(Z, X)).toBe(false); + return Promise.resolve().then(() => { + expect(elm.testValue).toBe('I may look like a component'); + }); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/index.spec.js b/packages/@lwc/integration-not-karma/test/swapping/styles/index.spec.js new file mode 100644 index 0000000000..1da1911952 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/index.spec.js @@ -0,0 +1,321 @@ +import { createElement, swapStyle, swapTemplate } from 'lwc'; +import { extractDataIds } from 'test-utils'; +import ShadowUsesStaticStylesheets from 'shadow/usesStaticStylesheets'; +import LightUsesStaticStylesheets from 'light/usesStaticStylesheets'; +import LightGlobalUsesStaticStylesheets from 'light-global/usesStaticStylesheets'; +import ShadowSimple from 'shadow/simple'; +import ShadowStaleProp from 'shadow/staleProp'; +import LightSimple from 'light/simple'; +import LightStaleProp from 'light/staleProp'; +import LightGlobalSimple from 'light-global/simple'; +import LightGlobalStaleProp from 'light-global/staleProp'; +import LibraryUserA from 'x/libraryUserA'; +import LibraryUserB from 'x/libraryUserB'; +import libraryStyle from 'x/library'; +import libraryStyleV2 from 'x/libraryV2'; +import IdenticalStylesheets from 'shadow/identicalStylesheets'; +import IdenticalStylesheetsContainer from 'shadow/identicalStylesheetsContainer'; + +function expectStyles(elm, styles) { + const computed = getComputedStyle(elm); + for (const [style, value] of Object.entries(styles)) { + expect(computed[style]).toBe(value); + } +} + +// Swapping is only enabled in dev mode +describe.skipIf(process.env.NODE_ENV === 'production')('style swapping', () => { + afterEach(() => { + window.__lwcResetHotSwaps(); + window.__lwcResetStylesheetCache(); + window.__lwcResetGlobalStylesheets(); + }); + + const scenarios = [ + { + testName: 'shadow', + components: { + Simple: ShadowSimple, + StaleProp: ShadowStaleProp, + UsesStaticStylesheets: ShadowUsesStaticStylesheets, + }, + }, + { + testName: 'light', + components: { + Simple: LightSimple, + StaleProp: LightStaleProp, + UsesStaticStylesheets: LightUsesStaticStylesheets, + }, + }, + { + testName: 'light-global', + components: { + Simple: LightGlobalSimple, + StaleProp: LightGlobalStaleProp, + UsesStaticStylesheets: LightGlobalUsesStaticStylesheets, + }, + }, + ]; + scenarios.forEach(({ testName, components }) => { + describe(testName, () => { + const { Simple, StaleProp, UsesStaticStylesheets } = components; + it('should work with components with implicit style definition', async () => { + const { blockStyle, inlineStyle, noneStyle } = Simple; + const elm = createElement(`${testName}-simple`, { is: Simple }); + document.body.appendChild(elm); + + await Promise.resolve(); + expectStyles(extractDataIds(elm).paragraph, { + display: 'block', + }); + swapStyle(blockStyle[0], inlineStyle[0]); + + await Promise.resolve(); + expectStyles(extractDataIds(elm).paragraph, { + display: 'inline', + }); + swapStyle(inlineStyle[0], noneStyle[0]); + + await Promise.resolve(); + expectStyles(extractDataIds(elm).paragraph, { + display: 'none', + }); + }); + + it('should remove stale prop', async () => { + const { stylesV1, stylesV2, stylesV3 } = StaleProp; + const elm = createElement(`${testName}-stale-prop`, { is: StaleProp }); + document.body.appendChild(elm); + + await Promise.resolve(); + expectStyles(extractDataIds(elm).paragraph, { + display: 'flex', + opacity: '1', + borderRadius: '0px', + }); + swapStyle(stylesV1[0], stylesV2[0]); + + await Promise.resolve(); + expectStyles(extractDataIds(elm).paragraph, { + display: 'block', + opacity: '0.5', + borderRadius: '0px', + }); + swapStyle(stylesV2[0], stylesV3[0]); + + await Promise.resolve(); + expectStyles(extractDataIds(elm).paragraph, { + display: 'block', + opacity: '1', + borderRadius: '5px', + }); + }); + + it('should remove stale prop while swapping back and forth', async () => { + const { stylesV1, stylesV2 } = StaleProp; + const elm = createElement(`${testName}-stale-prop`, { is: StaleProp }); + document.body.appendChild(elm); + + await Promise.resolve(); + expectStyles(extractDataIds(elm).paragraph, { + display: 'flex', + opacity: '1', + }); + swapStyle(stylesV1[0], stylesV2[0]); + + await Promise.resolve(); + expectStyles(extractDataIds(elm).paragraph, { + display: 'block', + opacity: '0.5', + }); + swapStyle(stylesV2[0], stylesV1[0]); + + await Promise.resolve(); + expectStyles(extractDataIds(elm).paragraph, { + display: 'flex', + opacity: '1', + }); + }); + + it('should replace the same stylesheet in multiple components', async () => { + const { stylesV1, stylesV2 } = StaleProp; + const elm1 = createElement(`${testName}-stale-prop`, { is: StaleProp }); + const elm2 = createElement(`${testName}-stale-prop`, { is: StaleProp }); + document.body.appendChild(elm1); + document.body.appendChild(elm2); + + await Promise.resolve(); + for (const elm of [elm1, elm2]) { + expectStyles(extractDataIds(elm).paragraph, { + display: 'flex', + opacity: '1', + }); + } + swapStyle(stylesV1[0], stylesV2[0]); + + await Promise.resolve(); + for (const elm of [elm1, elm2]) { + expectStyles(extractDataIds(elm).paragraph, { + display: 'block', + opacity: '0.5', + }); + } + }); + + it('should replace static stylesheets', async () => { + const { asStatic, asStaticV2 } = UsesStaticStylesheets; + const elm = createElement(`${testName}-uses-static-stylesheets`, { + is: UsesStaticStylesheets, + }); + document.body.appendChild(elm); + + await Promise.resolve(); + expectStyles(extractDataIds(elm).paragraph, { + color: 'rgba(255, 0, 0, 0)', + fontStyle: 'italic', + }); + + swapStyle(asStatic[0], asStaticV2[0]); + + await Promise.resolve(); + expectStyles(extractDataIds(elm).paragraph, { + color: 'rgba(0, 0, 255, 0)', + fontStyle: 'italic', + }); + }); + + it('should be able to swap a style that will be used in future', async () => { + const { blockStyle, inlineStyle, noneStyle } = Simple; + const elm = createElement(`${testName}-simple`, { is: Simple }); + document.body.appendChild(elm); + + await Promise.resolve(); + expectStyles(extractDataIds(elm).paragraph, { + display: 'block', + }); + // Swap inlineStyle that hasn't been rendered yet + swapStyle(inlineStyle[0], noneStyle[0]); + + await Promise.resolve(); + // Verify that rendered content did not change + expectStyles(extractDataIds(elm).paragraph, { + display: 'block', + }); + // Swap blockStyle to inlineStyle, which will transitively be swapped to noneStyle + swapStyle(blockStyle[0], inlineStyle[0]); + + await Promise.resolve(); + expectStyles(extractDataIds(elm).paragraph, { + display: 'none', + }); + }); + }); + }); + + it('should be able to swap stylesheets that produce identical content', async () => { + const { style, identicalStyle, newStyle, implicitTemplate, newTemplate } = + IdenticalStylesheets; + const elm = createElement(`identical-stylesheets`, { + is: IdenticalStylesheetsContainer, + }); + document.body.appendChild(elm); + + // Step 1: wait for first render + // implicitTemplate is associated with identicalStyle + await Promise.resolve(); + expectStyles(extractDataIds(elm).paragraph, { + display: 'inline', + }); + + // Step 2: swap template with a new template to trigger rehydration + swapTemplate(implicitTemplate, newTemplate); + await Promise.resolve(); + + // Step 3: Associate an identical stylesheet with the same template(or a template with the same shadow token) + // associate identical stylesheet with the original template + expect(() => { + implicitTemplate.stylesheets = style; + }).toLogWarningDev(/Mutating the "stylesheets" property on a template/); + // reswap the template to implicit template + swapTemplate(newTemplate, implicitTemplate); + await Promise.resolve(); + + // Act to trigger the unrender of the identical stylesheets + swapStyle(style[0], newStyle[0]); + swapStyle(identicalStyle[0], newStyle[0]); + await Promise.resolve(); + + // Assert that the swap is successful + expectStyles(extractDataIds(elm).paragraph, { + display: 'none', + }); + }); + + describe('CSS library', () => { + const { style: styleA, styleV2: styleAV2 } = LibraryUserA; + const { style: styleB, styleV2: styleBV2 } = LibraryUserB; + + let elmA; + let elmB; + + beforeEach(async () => { + elmA = createElement('x-library-user-a', { is: LibraryUserA }); + elmB = createElement(`x-library-user-b`, { is: LibraryUserB }); + document.body.appendChild(elmA); + document.body.appendChild(elmB); + + await Promise.resolve(); + expectStyles(extractDataIds(elmA).paragraph, { + fontSize: '10px', + fontWeight: '100', + }); + expectStyles(extractDataIds(elmB).paragraph, { + fontSize: '10px', + fontWeight: '800', + }); + }); + + it('swaps a library CSS file', async () => { + swapStyle(libraryStyle[0], libraryStyleV2[0]); + + await Promise.resolve(); + expectStyles(extractDataIds(elmA).paragraph, { + fontSize: '20px', + fontWeight: '100', + }); + expectStyles(extractDataIds(elmB).paragraph, { + fontSize: '20px', + fontWeight: '800', + }); + }); + + it('swaps a non-library CSS file while keeping library styles', async () => { + // The library (`@import`) is the first stylesheet, so grab the second instead + swapStyle(styleA[1], styleAV2[1]); + + await Promise.resolve(); + expectStyles(extractDataIds(elmA).paragraph, { + fontSize: '10px', + fontWeight: '200', + }); + expectStyles(extractDataIds(elmB).paragraph, { + fontSize: '10px', + fontWeight: '800', + }); + + // The library (`@import`) is the first stylesheet, so grab the second instead + swapStyle(styleB[1], styleBV2[1]); + + await Promise.resolve(); + expectStyles(extractDataIds(elmA).paragraph, { + fontSize: '10px', + fontWeight: '200', + }); + expectStyles(extractDataIds(elmB).paragraph, { + fontSize: '10px', + fontWeight: '900', + }); + }); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/inline.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/inline.css new file mode 100644 index 0000000000..b2397d4adc --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/inline.css @@ -0,0 +1,3 @@ +.simple { + display: inline; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/none.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/none.css new file mode 100644 index 0000000000..c9c92b6439 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/none.css @@ -0,0 +1,3 @@ +.simple { + display: none; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/simple.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/simple.css new file mode 100644 index 0000000000..98dd3602de --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/simple.css @@ -0,0 +1,3 @@ +.simple { + display: block; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/simple.html b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/simple.html new file mode 100644 index 0000000000..2c2eb91e51 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/simple.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/simple.js b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/simple.js new file mode 100644 index 0000000000..b54178cd72 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/simple/simple.js @@ -0,0 +1,11 @@ +import { LightningElement } from 'lwc'; +import block from './simple.css'; +import inline from './inline.css'; +import none from './none.css'; + +export default class Simple extends LightningElement { + static renderMode = 'light'; + static blockStyle = block; + static inlineStyle = inline; + static noneStyle = none; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/staleProp.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/staleProp.css new file mode 100644 index 0000000000..657178ffe6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/staleProp.css @@ -0,0 +1,3 @@ +p { + display: flex; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/staleProp.html b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/staleProp.html new file mode 100644 index 0000000000..fac65630e6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/staleProp.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/staleProp.js b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/staleProp.js new file mode 100644 index 0000000000..b7cbb21958 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/staleProp.js @@ -0,0 +1,11 @@ +import { LightningElement } from 'lwc'; +import stylesV1 from './staleProp.css'; +import stylesV2 from './stylesV2.css'; +import stylesV3 from './stylesV3.css'; + +export default class extends LightningElement { + static renderMode = 'light'; + static stylesV1 = stylesV1; + static stylesV2 = stylesV2; + static stylesV3 = stylesV3; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/stylesV2.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/stylesV2.css new file mode 100644 index 0000000000..987d26e79d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/stylesV2.css @@ -0,0 +1,3 @@ +p { + opacity: 0.5; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/stylesV3.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/stylesV3.css new file mode 100644 index 0000000000..b61206b466 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/staleProp/stylesV3.css @@ -0,0 +1,3 @@ +p { + border-radius: 5px; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/asStatic.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/asStatic.css new file mode 100644 index 0000000000..ba894d0161 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/asStatic.css @@ -0,0 +1,3 @@ +p { + color: rgba(255, 0, 0, 0); +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/asStaticV2.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/asStaticV2.css new file mode 100644 index 0000000000..eeae35d47f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/asStaticV2.css @@ -0,0 +1,3 @@ +p { + color: rgba(0, 0, 255, 0); +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/usesStaticStylesheets.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/usesStaticStylesheets.css new file mode 100644 index 0000000000..1e375b2148 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/usesStaticStylesheets.css @@ -0,0 +1,3 @@ +p { + font-style: italic; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/usesStaticStylesheets.html b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/usesStaticStylesheets.html new file mode 100644 index 0000000000..96ea4b82f4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/usesStaticStylesheets.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/usesStaticStylesheets.js b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/usesStaticStylesheets.js new file mode 100644 index 0000000000..2fd93f2031 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light-global/usesStaticStylesheets/usesStaticStylesheets.js @@ -0,0 +1,11 @@ +import { LightningElement } from 'lwc'; +import asStatic from './asStatic.css'; +import asStaticV2 from './asStaticV2.css'; + +export default class extends LightningElement { + static renderMode = 'light'; + static stylesheets = [asStatic]; + + static asStatic = asStatic; + static asStaticV2 = asStaticV2; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/inline.scoped.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/inline.scoped.css new file mode 100644 index 0000000000..b2397d4adc --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/inline.scoped.css @@ -0,0 +1,3 @@ +.simple { + display: inline; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/none.scoped.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/none.scoped.css new file mode 100644 index 0000000000..c9c92b6439 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/none.scoped.css @@ -0,0 +1,3 @@ +.simple { + display: none; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/simple.html b/packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/simple.html new file mode 100644 index 0000000000..2c2eb91e51 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/simple.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/simple.js b/packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/simple.js new file mode 100644 index 0000000000..4f50fbadcd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/simple.js @@ -0,0 +1,11 @@ +import { LightningElement } from 'lwc'; +import block from './simple.scoped.css'; +import inline from './inline.scoped.css'; +import none from './none.scoped.css'; + +export default class Simple extends LightningElement { + static renderMode = 'light'; + static blockStyle = block; + static inlineStyle = inline; + static noneStyle = none; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/simple.scoped.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/simple.scoped.css new file mode 100644 index 0000000000..98dd3602de --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light/simple/simple.scoped.css @@ -0,0 +1,3 @@ +.simple { + display: block; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/staleProp.html b/packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/staleProp.html new file mode 100644 index 0000000000..fac65630e6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/staleProp.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/staleProp.js b/packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/staleProp.js new file mode 100644 index 0000000000..b2ee8f99f3 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/staleProp.js @@ -0,0 +1,11 @@ +import { LightningElement } from 'lwc'; +import stylesV1 from './staleProp.scoped.css'; +import stylesV2 from './stylesV2.scoped.css'; +import stylesV3 from './stylesV3.scoped.css'; + +export default class extends LightningElement { + static renderMode = 'light'; + static stylesV1 = stylesV1; + static stylesV2 = stylesV2; + static stylesV3 = stylesV3; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/staleProp.scoped.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/staleProp.scoped.css new file mode 100644 index 0000000000..657178ffe6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/staleProp.scoped.css @@ -0,0 +1,3 @@ +p { + display: flex; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/stylesV2.scoped.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/stylesV2.scoped.css new file mode 100644 index 0000000000..987d26e79d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/stylesV2.scoped.css @@ -0,0 +1,3 @@ +p { + opacity: 0.5; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/stylesV3.scoped.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/stylesV3.scoped.css new file mode 100644 index 0000000000..b61206b466 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light/staleProp/stylesV3.scoped.css @@ -0,0 +1,3 @@ +p { + border-radius: 5px; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/asStatic.scoped.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/asStatic.scoped.css new file mode 100644 index 0000000000..ba894d0161 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/asStatic.scoped.css @@ -0,0 +1,3 @@ +p { + color: rgba(255, 0, 0, 0); +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/asStaticV2.scoped.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/asStaticV2.scoped.css new file mode 100644 index 0000000000..eeae35d47f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/asStaticV2.scoped.css @@ -0,0 +1,3 @@ +p { + color: rgba(0, 0, 255, 0); +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/usesStaticStylesheets.html b/packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/usesStaticStylesheets.html new file mode 100644 index 0000000000..96ea4b82f4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/usesStaticStylesheets.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/usesStaticStylesheets.js b/packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/usesStaticStylesheets.js new file mode 100644 index 0000000000..62d1c85f41 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/usesStaticStylesheets.js @@ -0,0 +1,11 @@ +import { LightningElement } from 'lwc'; +import asStatic from './asStatic.scoped.css'; +import asStaticV2 from './asStaticV2.scoped.css'; + +export default class extends LightningElement { + static renderMode = 'light'; + static stylesheets = [asStatic]; + + static asStatic = asStatic; + static asStaticV2 = asStaticV2; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/usesStaticStylesheets.scoped.css b/packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/usesStaticStylesheets.scoped.css new file mode 100644 index 0000000000..1e375b2148 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/light/usesStaticStylesheets/usesStaticStylesheets.scoped.css @@ -0,0 +1,3 @@ +p { + font-style: italic; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/identicalStylesheets.css b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/identicalStylesheets.css new file mode 100644 index 0000000000..dc7d638fdd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/identicalStylesheets.css @@ -0,0 +1,3 @@ +.identical { + display: inline; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/identicalStylesheets.html b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/identicalStylesheets.html new file mode 100644 index 0000000000..35d5616ac9 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/identicalStylesheets.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/identicalStylesheets.js b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/identicalStylesheets.js new file mode 100644 index 0000000000..a55bb258a2 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/identicalStylesheets.js @@ -0,0 +1,14 @@ +import { LightningElement } from 'lwc'; +import style from './style.css'; +import identicalStyle from './identicalStylesheets.css'; +import newStyle from './newStyle.css'; +import implicitTemplate from './identicalStylesheets.html'; +import newTemplate from './newTemplate.html'; + +export default class IdenticalStylesheet extends LightningElement { + static style = style; + static identicalStyle = identicalStyle; + static newStyle = newStyle; + static implicitTemplate = implicitTemplate; + static newTemplate = newTemplate; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/newStyle.css b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/newStyle.css new file mode 100644 index 0000000000..8dc37d4376 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/newStyle.css @@ -0,0 +1,3 @@ +.identical { + display: none; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/newTemplate.html b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/newTemplate.html new file mode 100644 index 0000000000..6f01a53f17 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/newTemplate.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/style.css b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/style.css new file mode 100644 index 0000000000..dc7d638fdd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheets/style.css @@ -0,0 +1,3 @@ +.identical { + display: inline; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheetsContainer/identicalStylesheetsContainer.html b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheetsContainer/identicalStylesheetsContainer.html new file mode 100644 index 0000000000..4896a0dbc6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheetsContainer/identicalStylesheetsContainer.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheetsContainer/identicalStylesheetsContainer.js b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheetsContainer/identicalStylesheetsContainer.js new file mode 100644 index 0000000000..21a45d50a4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/identicalStylesheetsContainer/identicalStylesheetsContainer.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class Container extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/inline.css b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/inline.css new file mode 100644 index 0000000000..b2397d4adc --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/inline.css @@ -0,0 +1,3 @@ +.simple { + display: inline; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/none.css b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/none.css new file mode 100644 index 0000000000..c9c92b6439 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/none.css @@ -0,0 +1,3 @@ +.simple { + display: none; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/simple.css b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/simple.css new file mode 100644 index 0000000000..98dd3602de --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/simple.css @@ -0,0 +1,3 @@ +.simple { + display: block; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/simple.html b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/simple.html new file mode 100644 index 0000000000..97b369db93 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/simple.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/simple.js b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/simple.js new file mode 100644 index 0000000000..2138f47cfc --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/simple/simple.js @@ -0,0 +1,10 @@ +import { LightningElement } from 'lwc'; +import block from './simple.css'; +import inline from './inline.css'; +import none from './none.css'; + +export default class Simple extends LightningElement { + static blockStyle = block; + static inlineStyle = inline; + static noneStyle = none; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/staleProp.css b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/staleProp.css new file mode 100644 index 0000000000..657178ffe6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/staleProp.css @@ -0,0 +1,3 @@ +p { + display: flex; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/staleProp.html b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/staleProp.html new file mode 100644 index 0000000000..bf9b8dfd61 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/staleProp.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/staleProp.js b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/staleProp.js new file mode 100644 index 0000000000..a408931349 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/staleProp.js @@ -0,0 +1,10 @@ +import { LightningElement } from 'lwc'; +import stylesV1 from './staleProp.css'; +import stylesV2 from './stylesV2.css'; +import stylesV3 from './stylesV3.css'; + +export default class extends LightningElement { + static stylesV1 = stylesV1; + static stylesV2 = stylesV2; + static stylesV3 = stylesV3; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/stylesV2.css b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/stylesV2.css new file mode 100644 index 0000000000..987d26e79d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/stylesV2.css @@ -0,0 +1,3 @@ +p { + opacity: 0.5; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/stylesV3.css b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/stylesV3.css new file mode 100644 index 0000000000..b61206b466 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/staleProp/stylesV3.css @@ -0,0 +1,3 @@ +p { + border-radius: 5px; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/asStatic.css b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/asStatic.css new file mode 100644 index 0000000000..ba894d0161 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/asStatic.css @@ -0,0 +1,3 @@ +p { + color: rgba(255, 0, 0, 0); +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/asStaticV2.css b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/asStaticV2.css new file mode 100644 index 0000000000..eeae35d47f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/asStaticV2.css @@ -0,0 +1,3 @@ +p { + color: rgba(0, 0, 255, 0); +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/usesStaticStylesheets.css b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/usesStaticStylesheets.css new file mode 100644 index 0000000000..1e375b2148 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/usesStaticStylesheets.css @@ -0,0 +1,3 @@ +p { + font-style: italic; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/usesStaticStylesheets.html b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/usesStaticStylesheets.html new file mode 100644 index 0000000000..0cc51640e2 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/usesStaticStylesheets.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/usesStaticStylesheets.js b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/usesStaticStylesheets.js new file mode 100644 index 0000000000..896e075b59 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/shadow/usesStaticStylesheets/usesStaticStylesheets.js @@ -0,0 +1,10 @@ +import { LightningElement } from 'lwc'; +import asStatic from './asStatic.css'; +import asStaticV2 from './asStaticV2.css'; + +export default class extends LightningElement { + static stylesheets = [asStatic]; + + static asStatic = asStatic; + static asStaticV2 = asStaticV2; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/x/library/library.css b/packages/@lwc/integration-not-karma/test/swapping/styles/x/library/library.css new file mode 100644 index 0000000000..ae1ea2e00e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/x/library/library.css @@ -0,0 +1,3 @@ +p { + font-size: 10px; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserA/libraryUserA.css b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserA/libraryUserA.css new file mode 100644 index 0000000000..7eba4cd59a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserA/libraryUserA.css @@ -0,0 +1,5 @@ +@import 'x/library'; + +p { + font-weight: 100; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserA/libraryUserA.html b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserA/libraryUserA.html new file mode 100644 index 0000000000..a095f9ef61 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserA/libraryUserA.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserA/libraryUserA.js b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserA/libraryUserA.js new file mode 100644 index 0000000000..9280ff170c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserA/libraryUserA.js @@ -0,0 +1,8 @@ +import { LightningElement } from 'lwc'; +import style from './libraryUserA.css'; +import styleV2 from './styleV2.css'; + +export default class extends LightningElement { + static style = style; + static styleV2 = styleV2; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserA/styleV2.css b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserA/styleV2.css new file mode 100644 index 0000000000..96dbb56fc2 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserA/styleV2.css @@ -0,0 +1,5 @@ +@import 'x/library'; + +p { + font-weight: 200; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserB/libraryUserB.css b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserB/libraryUserB.css new file mode 100644 index 0000000000..ce986121ba --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserB/libraryUserB.css @@ -0,0 +1,5 @@ +@import 'x/library'; + +p { + font-weight: 800; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserB/libraryUserB.html b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserB/libraryUserB.html new file mode 100644 index 0000000000..a7d96b0cfe --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserB/libraryUserB.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserB/libraryUserB.js b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserB/libraryUserB.js new file mode 100644 index 0000000000..fdcb52eefd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserB/libraryUserB.js @@ -0,0 +1,8 @@ +import { LightningElement } from 'lwc'; +import style from './libraryUserB.css'; +import styleV2 from './styleV2.css'; + +export default class extends LightningElement { + static style = style; + static styleV2 = styleV2; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserB/styleV2.css b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserB/styleV2.css new file mode 100644 index 0000000000..052b8141e1 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryUserB/styleV2.css @@ -0,0 +1,5 @@ +@import 'x/library'; + +p { + font-weight: 900; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryV2/libraryV2.css b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryV2/libraryV2.css new file mode 100644 index 0000000000..20af690323 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/x/libraryV2/libraryV2.css @@ -0,0 +1,3 @@ +p { + font-size: 20px; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/templates/base/advanced/advanced.html b/packages/@lwc/integration-not-karma/test/swapping/templates/base/advanced/advanced.html new file mode 100644 index 0000000000..3e142e1ba4 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/templates/base/advanced/advanced.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/swapping/templates/base/advanced/advanced.js b/packages/@lwc/integration-not-karma/test/swapping/templates/base/advanced/advanced.js new file mode 100644 index 0000000000..75caca0a4b --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/templates/base/advanced/advanced.js @@ -0,0 +1,9 @@ +import { LightningElement } from 'lwc'; +import html from './advanced.html'; + +export default class Advanced extends LightningElement { + render() { + return html; + } + static baseTemplate = html; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/templates/base/simple/simple.html b/packages/@lwc/integration-not-karma/test/swapping/templates/base/simple/simple.html new file mode 100644 index 0000000000..5aeaef9bbd --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/templates/base/simple/simple.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/swapping/templates/base/simple/simple.js b/packages/@lwc/integration-not-karma/test/swapping/templates/base/simple/simple.js new file mode 100644 index 0000000000..ead794fe91 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/templates/base/simple/simple.js @@ -0,0 +1,6 @@ +import { LightningElement } from 'lwc'; +import html from './simple.html'; + +export default class Simple extends LightningElement { + static baseTemplate = html; +} diff --git a/packages/@lwc/integration-not-karma/test/swapping/templates/base/views/first.html b/packages/@lwc/integration-not-karma/test/swapping/templates/base/views/first.html new file mode 100644 index 0000000000..9e5258593d --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/templates/base/views/first.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/swapping/templates/base/views/second.html b/packages/@lwc/integration-not-karma/test/swapping/templates/base/views/second.html new file mode 100644 index 0000000000..ca5d29f11a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/templates/base/views/second.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/@lwc/integration-not-karma/test/swapping/templates/base/views/views.js b/packages/@lwc/integration-not-karma/test/swapping/templates/base/views/views.js new file mode 100644 index 0000000000..da367db39a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/templates/base/views/views.js @@ -0,0 +1,4 @@ +import first from './first.html'; +import second from './second.html'; + +export { first, second }; diff --git a/packages/@lwc/integration-not-karma/test/swapping/templates/index.spec.js b/packages/@lwc/integration-not-karma/test/swapping/templates/index.spec.js new file mode 100644 index 0000000000..dad5345046 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/swapping/templates/index.spec.js @@ -0,0 +1,48 @@ +import { createElement, swapTemplate } from 'lwc'; + +import Simple from 'base/simple'; +import Advanced from 'base/advanced'; +import { first, second } from 'base/views'; + +const simpleBaseTemplate = Simple.baseTemplate; +const advancedBaseTemplate = Advanced.baseTemplate; + +// Swapping is only enabled in dev mode +describe.skipIf(process.env.NODE_ENV === 'production')('template swapping', () => { + it('should work with components with implicit template definition', () => { + const elm = createElement('x-simple', { is: Simple }); + document.body.appendChild(elm); + expect(elm.shadowRoot.firstChild.outerHTML).toBe('

        simple

        '); + swapTemplate(simpleBaseTemplate, first); + return Promise.resolve() + .then(() => { + expect(elm.shadowRoot.firstChild.outerHTML).toBe('

        first

        '); + swapTemplate(first, second); + }) + .then(() => { + expect(elm.shadowRoot.firstChild.outerHTML).toBe('

        second

        '); + }); + }); + + it('should work with components with explict template definition', () => { + const elm = createElement('x-advanced', { is: Advanced }); + document.body.appendChild(elm); + expect(elm.shadowRoot.firstChild.outerHTML).toBe('

        advanced

        '); + swapTemplate(advancedBaseTemplate, second); + return Promise.resolve().then(() => { + expect(elm.shadowRoot.firstChild.outerHTML).toBe('

        second

        '); + }); + }); + + it('should throw for invalid old template', () => { + expect(() => { + swapTemplate(function () {}, second); + }).toThrow(); + }); + + it('should throw for invalid new template', () => { + expect(() => { + swapTemplate(second, function () {}); + }).toThrow(); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/index.spec.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/index.spec.js new file mode 100644 index 0000000000..482ef5c4e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/index.spec.js @@ -0,0 +1,32 @@ +import { createElement } from 'lwc'; +import Source from 'x/source'; +import Target from 'x/target'; + +describe.skipIf(process.env.NATIVE_SHADOW)('activeElement', () => { + it('can call shadowRoot.activeElement on transported node with no lwc:dom=manual', async () => { + const source = createElement('x-source', { is: Source }); + const target = createElement('x-target', { is: Target }); + document.body.appendChild(source); + document.body.appendChild(target); + await Promise.resolve(); + + const button = source.shadowRoot.querySelector('button'); + + // append directly to the element, not to some
        inside of it as recommended + target.appendChild(button); + + // make active + button.focus(); + + let activeElement; + + expect(() => { + activeElement = target.shadowRoot.activeElement; + }).toLogErrorDev( + /NodeOwnedBy\(\) should never be called with a node that is not a child node of/ + ); + + // synthetic shadow gets this wrong when lwc:dom=manual is not used, so just assert that it exists + expect(activeElement).not.toBeNull(); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/x/source/source.html b/packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/x/source/source.html new file mode 100644 index 0000000000..e3e45791a6 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/x/source/source.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/x/source/source.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/x/source/source.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/x/source/source.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/x/target/target.html b/packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/x/target/target.html new file mode 100644 index 0000000000..6beff5199f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/x/target/target.html @@ -0,0 +1,2 @@ + diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/x/target/target.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/x/target/target.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/active-element/x/target/target.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/add-event-listener/index.spec.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/add-event-listener/index.spec.js new file mode 100644 index 0000000000..6130d52b4e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/add-event-listener/index.spec.js @@ -0,0 +1,202 @@ +import { createElement } from 'lwc'; +import Test from 'x/test'; + +describe('add handleEvent support', () => { + describe('basic', () => { + function test(elm) { + let invoked = false; + const listenerObject = { + handleEvent() { + invoked = true; + }, + }; + elm.addEventListener('foo', listenerObject); + elm.dispatchEvent(new CustomEvent('foo')); + expect(invoked).toBe(true); + } + + it('lwc host element', () => { + test(createElement('x-test', { is: Test })); + }); + + it('native element', () => { + test(document.createElement('div')); + }); + + it('lwc shadow root', () => { + test(createElement('x-test', { is: Test }).shadowRoot); + }); + + it('native shadow root', () => { + test(document.createElement('div').attachShadow({ mode: 'open' })); + }); + }); + + describe('listener object mutation', () => { + function test(elm) { + let value; + const listenerObject = {}; + + listenerObject.handleEvent = () => { + value = 'first'; + }; + elm.addEventListener('foo', listenerObject); + listenerObject.handleEvent = () => { + value = 'second'; + }; + + elm.dispatchEvent(new CustomEvent('foo')); + expect(value).toBe('second'); + } + + it('lwc host element', () => { + test(createElement('x-test', { is: Test })); + }); + + it('native element', () => { + test(document.createElement('div')); + }); + + it('lwc shadow root', () => { + test(createElement('x-test', { is: Test }).shadowRoot); + }); + + it('native shadow root', () => { + test(document.createElement('div').attachShadow({ mode: 'open' })); + }); + }); +}); + +describe('remove handleEvent support', () => { + describe('listener object identity', () => { + function test(elm) { + let invoked = false; + const listenerObject = {}; + + listenerObject.handleEvent = () => { + invoked = true; + }; + elm.addEventListener('foo', listenerObject); + + listenerObject.handleEvent = () => { + invoked = true; + }; + elm.removeEventListener('foo', listenerObject); + + elm.dispatchEvent(new CustomEvent('foo')); + expect(invoked).toBe(false); + } + + it('lwc host element', () => { + test(createElement('x-test', { is: Test })); + }); + + it('native element', () => { + test(document.createElement('div')); + }); + + it('lwc shadow root', () => { + test(createElement('x-test', { is: Test }).shadowRoot); + }); + + it('native shadow root', () => { + test(document.createElement('div').attachShadow({ mode: 'open' })); + }); + }); + + describe('listener identity', () => { + function test(elm) { + let invoked = false; + const handleEvent = function () { + invoked = true; + }; + elm.addEventListener('foo', { handleEvent }); + elm.removeEventListener('foo', { handleEvent }); + elm.dispatchEvent(new CustomEvent('foo')); + expect(invoked).toBe(true); + } + + it('lwc host element', () => { + test(createElement('x-test', { is: Test })); + }); + + it('native element', () => { + test(document.createElement('div')); + }); + + it('lwc shadow root', () => { + test(createElement('x-test', { is: Test }).shadowRoot); + }); + + it('native shadow root', () => { + test(document.createElement('div').attachShadow({ mode: 'open' })); + }); + }); +}); + +describe('dedupe behavior for add handleEvent', () => { + describe('listener object identity', () => { + function test(elm) { + let count = 0; + const listenerObject = {}; + + listenerObject.handleEvent = () => { + count += 1; + }; + elm.addEventListener('foo', listenerObject); + + listenerObject.handleEvent = () => { + count += 1; + }; + elm.addEventListener('foo', listenerObject); + + elm.dispatchEvent(new CustomEvent('foo')); + expect(count).toBe(1); + } + + it('lwc host element', () => { + test(createElement('x-test', { is: Test })); + }); + + it('native element', () => { + test(document.createElement('div')); + }); + + it('lwc shadow root', () => { + test(createElement('x-test', { is: Test }).shadowRoot); + }); + + it('native shadow root', () => { + test(document.createElement('div').attachShadow({ mode: 'open' })); + }); + }); + + describe('listener identity', () => { + function test(elm) { + let count = 0; + const handleEvent = () => { + count += 1; + }; + elm.addEventListener('foo', { handleEvent }); + elm.addEventListener('foo', { handleEvent }); + elm.dispatchEvent(new CustomEvent('foo')); + expect(count).toBe(2); + } + + it('lwc host element', () => { + test(createElement('x-test', { is: Test })); + }); + + it('native element', () => { + test(document.createElement('div')); + }); + + it('lwc shadow root', () => { + test(createElement('x-test', { is: Test }).shadowRoot); + }); + + it('native shadow root', () => { + test(document.createElement('div').attachShadow({ mode: 'open' })); + }); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/add-event-listener/x/test/test.html b/packages/@lwc/integration-not-karma/test/synthetic-shadow/add-event-listener/x/test/test.html new file mode 100644 index 0000000000..cc340bc4c9 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/add-event-listener/x/test/test.html @@ -0,0 +1 @@ + diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/add-event-listener/x/test/test.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/add-event-listener/x/test/test.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/add-event-listener/x/test/test.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/disable-synthetic-shadow/index.spec.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/disable-synthetic-shadow/index.spec.js new file mode 100644 index 0000000000..d7ae52a839 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/disable-synthetic-shadow/index.spec.js @@ -0,0 +1,32 @@ +import { createElement, setFeatureFlagForTest } from 'lwc'; +import { IS_SYNTHETIC_SHADOW_LOADED, isSyntheticShadowRootInstance } from 'test-utils'; +import Component from 'x/component'; + +describe.runIf(IS_SYNTHETIC_SHADOW_LOADED && !process.env.FORCE_NATIVE_SHADOW_MODE_FOR_TEST)( + 'DISABLE_SYNTHETIC_SHADOW', + () => { + describe('flag disabled', () => { + it('renders synthetic shadow', () => { + const elm = createElement('x-component', { is: Component }); + document.body.appendChild(elm); + expect(isSyntheticShadowRootInstance(elm.shadowRoot)).toBe(true); + }); + }); + + describe('flag enabled', () => { + beforeEach(() => { + setFeatureFlagForTest('DISABLE_SYNTHETIC_SHADOW', true); + }); + + afterEach(() => { + setFeatureFlagForTest('DISABLE_SYNTHETIC_SHADOW', false); + }); + + it('renders native shadow', () => { + const elm = createElement('x-component', { is: Component }); + document.body.appendChild(elm); + expect(isSyntheticShadowRootInstance(elm.shadowRoot)).toBe(false); + }); + }); + } +); diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/disable-synthetic-shadow/x/component/component.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/disable-synthetic-shadow/x/component/component.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/disable-synthetic-shadow/x/component/component.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/index.spec.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/index.spec.js new file mode 100644 index 0000000000..a683920571 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/index.spec.js @@ -0,0 +1,60 @@ +import { createElement } from 'lwc'; + +import Unstyled from 'x/unstyled'; +import Styled from 'x/styled'; + +afterEach(() => { + window.__lwcResetGlobalStylesheets(); +}); + +describe('dom manual sharing nodes', () => { + it('has correct styles when sharing nodes from styled to unstyled component', () => { + const unstyled = createElement('x-unstyled', { is: Unstyled }); + const styled = createElement('x-styled', { is: Styled }); + document.body.appendChild(unstyled); + document.body.appendChild(styled); + + return new Promise((resolve) => requestAnimationFrame(() => resolve())) + .then(() => { + expect( + getComputedStyle(unstyled.shadowRoot.querySelector('.manual')).color + ).toEqual('rgb(0, 0, 0)'); + expect(getComputedStyle(styled.shadowRoot.querySelector('.manual')).color).toEqual( + 'rgb(255, 0, 0)' + ); + + styled.insertManualNode(unstyled.getManualNode()); + return new Promise((resolve) => requestAnimationFrame(() => resolve())); + }) + .then(() => { + expect(getComputedStyle(styled.shadowRoot.querySelector('.manual')).color).toEqual( + 'rgb(255, 0, 0)' + ); + }); + }); + + it('has correct styles when sharing nodes from unstyled to styled component', () => { + const unstyled = createElement('x-unstyled', { is: Unstyled }); + const styled = createElement('x-styled', { is: Styled }); + document.body.appendChild(unstyled); + document.body.appendChild(styled); + + return new Promise((resolve) => requestAnimationFrame(() => resolve())) + .then(() => { + expect( + getComputedStyle(unstyled.shadowRoot.querySelector('.manual')).color + ).toEqual('rgb(0, 0, 0)'); + expect(getComputedStyle(styled.shadowRoot.querySelector('.manual')).color).toEqual( + 'rgb(255, 0, 0)' + ); + + unstyled.insertManualNode(styled.getManualNode()); + return new Promise((resolve) => requestAnimationFrame(() => resolve())); + }) + .then(() => { + expect( + getComputedStyle(unstyled.shadowRoot.querySelector('.manual')).color + ).toEqual('rgb(0, 0, 0)'); + }); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/styled/styled.css b/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/styled/styled.css new file mode 100644 index 0000000000..63a609c238 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/styled/styled.css @@ -0,0 +1,3 @@ +.manual { + color: red; +} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/styled/styled.html b/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/styled/styled.html new file mode 100644 index 0000000000..375282739e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/styled/styled.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/styled/styled.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/styled/styled.js new file mode 100644 index 0000000000..14672a2f08 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/styled/styled.js @@ -0,0 +1,19 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + renderedCallback() { + this.template.querySelector('div').innerHTML = '
        manual
        '; + } + + @api + getManualNode() { + return this.template.querySelector('.manual'); + } + + @api + insertManualNode(node) { + const div = this.template.querySelector('div'); + div.innerHTML = ''; // clear + div.appendChild(node); + } +} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/unstyled/unstyled.html b/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/unstyled/unstyled.html new file mode 100644 index 0000000000..375282739e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/unstyled/unstyled.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/unstyled/unstyled.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/unstyled/unstyled.js new file mode 100644 index 0000000000..14672a2f08 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/dom-manual-sharing-nodes/x/unstyled/unstyled.js @@ -0,0 +1,19 @@ +import { LightningElement, api } from 'lwc'; + +export default class extends LightningElement { + renderedCallback() { + this.template.querySelector('div').innerHTML = '
        manual
        '; + } + + @api + getManualNode() { + return this.template.querySelector('.manual'); + } + + @api + insertManualNode(node) { + const div = this.template.querySelector('div'); + div.innerHTML = ''; // clear + div.appendChild(node); + } +} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/element-api.spec.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/element-api.spec.js new file mode 100644 index 0000000000..9d193c9590 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/element-api.spec.js @@ -0,0 +1,416 @@ +import { createElement } from 'lwc'; + +import Container from 'x/container'; +import ParentSpecialized from 'x/parentSpecialized'; + +/* +
        + +

        ctx first text

        +
        + +

        slot-container text

        + +

        with-slot text

        + +
        +

        slotted text

        +
        +
        +
        +
        +
        + +

        slot-container text

        + +

        with-slot text

        + +
        +

        slotted text

        +
        +
        +
        +
        +
        +
        +

        ctx last text

        +
        +
        + */ +describe.skipIf(process.env.NATIVE_SHADOW)('synthetic shadow with patch flags OFF', () => { + let lwcElementInsideShadow, + divManuallyApendedToShadow, + elementInShadow, + slottedComponent, + slottedNode, + elementOutsideLWC, + rootLwcElement, + cmpShadow; + beforeEach(() => { + spyOn(console, 'warn'); // ignore warning about manipulating node without lwc:dom="manual" + const elm = createElement('x-container', { is: Container }); + + elementOutsideLWC = document.createElement('div'); + elementOutsideLWC.appendChild(elm); + + document.body.appendChild(elementOutsideLWC); + + rootLwcElement = elm; + lwcElementInsideShadow = elm; + divManuallyApendedToShadow = elm.shadowRoot.querySelector('div.manual-ctx'); + cmpShadow = elm.shadowRoot.querySelector('x-slot-container').shadowRoot; + elementInShadow = rootLwcElement.shadowRoot.querySelector('div'); + slottedComponent = cmpShadow.querySelector('x-with-slot'); + slottedNode = cmpShadow.querySelector('.slotted'); + }); + + describe('Element.prototype API', () => { + it('should keep behavior for innerHTML', () => { + expect(elementOutsideLWC.innerHTML.length).toBe(455); + expect(rootLwcElement.innerHTML.length).toBe(0); + expect(lwcElementInsideShadow.innerHTML.length).toBe(0); + + expect(divManuallyApendedToShadow.innerHTML.length).toBe(176); //

        slot-container text

        with + + expect(cmpShadow.innerHTML.length).toBe(99); + + expect(slottedComponent.innerHTML.length).toBe(46); + expect(slottedNode.innerHTML.length).toBe(19); + }); + + it('should keep behavior for outerHTML', () => { + expect(elementOutsideLWC.outerHTML.length).toBe(466); + expect(rootLwcElement.outerHTML.length).toBe(27); + expect(lwcElementInsideShadow.outerHTML.length).toBe(27); + + expect(divManuallyApendedToShadow.outerHTML.length).toBe(206); //

        slot-container text

        wi .... + + expect(cmpShadow.outerHTML).toBe(undefined); + + expect(slottedComponent.outerHTML.length).toBe(73); + expect(slottedNode.outerHTML.length).toBe(46); + }); + + it('should keep behavior for children', () => { + expect(elementOutsideLWC.children.length).toBe(1); + expect(rootLwcElement.children.length).toBe(0); + expect(lwcElementInsideShadow.children.length).toBe(0); + + expect(divManuallyApendedToShadow.children.length).toBe(1); + + expect(cmpShadow.children.length).toBe(2); + + expect(slottedComponent.children.length).toBe(1); + expect(slottedNode.children.length).toBe(1); + }); + + it('should keep behavior for firstElementChild', () => { + expect(elementOutsideLWC.firstElementChild.tagName).toBe('X-CONTAINER'); + expect(rootLwcElement.firstElementChild).toBe(null); + expect(lwcElementInsideShadow.firstElementChild).toBe(null); + + expect(divManuallyApendedToShadow.firstElementChild.tagName).toBe( + 'X-MANUALLY-INSERTED' + ); + + expect(cmpShadow.firstElementChild.tagName).toBe('P'); + + expect(slottedComponent.firstElementChild.tagName).toBe('DIV'); + expect(slottedNode.firstElementChild.tagName).toBe('P'); + }); + + it('should keep behavior for lastElementChild', () => { + expect(elementOutsideLWC.lastElementChild.tagName).toBe('X-CONTAINER'); + expect(rootLwcElement.lastElementChild).toBe(null); + expect(lwcElementInsideShadow.lastElementChild).toBe(null); + + expect(divManuallyApendedToShadow.lastElementChild.tagName).toBe('X-MANUALLY-INSERTED'); + + expect(cmpShadow.lastElementChild.tagName).toBe('X-WITH-SLOT'); + + expect(slottedComponent.lastElementChild.tagName).toBe('DIV'); + expect(slottedNode.lastElementChild.tagName).toBe('P'); + }); + + describe('querySelector', () => { + it('should preserve element outside lwc boundary behavior', () => { + expect(elementOutsideLWC.querySelector('p').innerText).toBe('ctx first text'); + expect(elementOutsideLWC.querySelector('x-with-slot p').innerText).toBe( + 'with-slot text' + ); + expect(elementOutsideLWC.querySelector('.manual-ctx x-with-slot p').innerText).toBe( + 'with-slot text' + ); + expect(elementOutsideLWC.querySelector('div.slotted')).not.toBe(null); + }); + + it('should preserve root custom element behavior', () => { + expect(rootLwcElement.querySelector('p')).toBe(null); + expect(rootLwcElement.querySelector('x-with-slot p')).toBe(null); + expect(rootLwcElement.querySelector('.manual-ctx x-with-slot p')).toBe(null); + }); + + it('should preserve behavior for element inside shadow', () => { + const elemInShadow = rootLwcElement.shadowRoot.querySelector('div'); + + expect(elemInShadow.querySelector('x-slot-container')).not.toBe(null); + expect(elemInShadow.querySelector('x-with-slot p')).toBe(null); + }); + + it('should preserve behavior for shadowRoot', () => { + expect(cmpShadow.querySelector('p').innerText).toBe('slot-container text'); + expect(cmpShadow.querySelector('x-with-slot p').innerText).toBe('slotted text'); // skipped the one in the shadow of x-with-slot. + }); + + it('should preserve behavior for manually inserted element in shadow and with lwc components', () => { + expect(divManuallyApendedToShadow.querySelector('p').innerText).toBe( + 'slot-container text' + ); + expect(divManuallyApendedToShadow.querySelector('x-with-slot p').innerText).toBe( + 'with-slot text' + ); + expect(divManuallyApendedToShadow.querySelector('div.slotted')).not.toBe(null); + }); + }); + + it('should preserve behavior for querySelectorAll', () => { + expect(elementOutsideLWC.querySelectorAll('p').length).toBe(8); + expect(rootLwcElement.querySelectorAll('p').length).toBe(0); + + const elemInShadow = rootLwcElement.shadowRoot.querySelector('div'); + + // everything is inside a shadow, :+1: + expect(elemInShadow.querySelectorAll('p').length).toBe(0); + + expect(cmpShadow.querySelectorAll('p').length).toBe(2); // slotted elements + expect(slottedComponent.querySelectorAll('p').length).toBe(1); + expect(divManuallyApendedToShadow.querySelectorAll('p').length).toBe(3); + }); + + it('should preserve behavior for getElementsByTagName', () => { + expect(elementOutsideLWC.getElementsByTagName('p').length).toBe(8); + // This is an exception: not patching root lwc elements + expect(rootLwcElement.getElementsByTagName('p').length).toBe(8); + + // f, same, restricting this. + // const elemInShadow = rootLwcElement.shadowRoot.querySelector('div'); + // expect(elemInShadow.getElementsByTagName('p').length).toBe(6); + + // getElementsByTagName is not supported in the shadowRoot + // expect(cmpShadow.getElementsByTagName('p').length).toBe(2); + + // f: restricting, you should only get 1, that is inside the slot + // expect(slottedComponent.getElementsByTagName('p').length).toBe(2); + expect(slottedComponent.getElementsByTagName('p').length).toBe(1); + + expect(divManuallyApendedToShadow.getElementsByTagName('p').length).toBe(3); + }); + + it('should preserve behavior for getElementsByClassName', () => { + expect(elementOutsideLWC.getElementsByClassName('slotted').length).toBe(2); + // This is an exception: not patching root lwc elements + expect(rootLwcElement.getElementsByClassName('slotted').length).toBe(2); + + // f: inside shadow + // const elemInShadow = rootLwcElement.shadowRoot.querySelector('div'); + // expect(elemInShadow.getElementsByClassName('slotted').length).toBe(2); + + // getElementsByTagName is not supported in the shadowRoot + // expect(cmpShadow.getElementsByTagName('p').length).toBe(2); + + expect(slottedComponent.getElementsByClassName('slotted').length).toBe(1); + + expect(divManuallyApendedToShadow.getElementsByClassName('slotted').length).toBe(1); + }); + }); + + describe('Node.prototype API', () => { + it('should preserve behaviour for firstChild', () => { + expect(elementOutsideLWC.firstChild.tagName).toBe('X-CONTAINER'); + expect(rootLwcElement.firstChild).toBe(null); + expect(lwcElementInsideShadow.firstChild).toBe(null); + + expect(elementInShadow.firstChild.tagName).toBe('X-SLOT-CONTAINER'); + expect(divManuallyApendedToShadow.firstChild.tagName).toBe('X-MANUALLY-INSERTED'); + + expect(cmpShadow.firstChild.tagName).toBe('P'); + + expect(slottedComponent.firstChild.tagName).toBe('DIV'); + expect(slottedNode.firstChild.tagName).toBe('P'); + }); + + it('should preserve behaviour for lastChild', () => { + expect(elementOutsideLWC.lastChild.tagName).toBe('X-CONTAINER'); + expect(rootLwcElement.lastChild).toBe(null); + expect(lwcElementInsideShadow.lastChild).toBe(null); + + expect(elementInShadow.lastChild.tagName).toBe('DIV'); + expect(divManuallyApendedToShadow.lastChild.tagName).toBe('X-MANUALLY-INSERTED'); + + expect(cmpShadow.lastChild.tagName).toBe('X-WITH-SLOT'); + + expect(slottedComponent.lastChild.tagName).toBe('DIV'); + expect(slottedNode.lastChild.tagName).toBe('P'); + }); + + it('should preserve behaviour for textContent', () => { + expect(elementOutsideLWC.textContent.length).toBe(117); + expect(rootLwcElement.textContent.length).toBe(0); + expect(lwcElementInsideShadow.textContent.length).toBe(0); + + expect(elementInShadow.textContent.length).toBe(0); + expect(divManuallyApendedToShadow.textContent.length).toBe(45); + + expect(cmpShadow.textContent.length).toBe(31); + + expect(slottedComponent.textContent.length).toBe(12); + expect(slottedNode.textContent.length).toBe(12); + }); + + it('should preserve behaviour for parentNode', () => { + expect(elementOutsideLWC.parentNode.tagName).toBe('BODY'); + expect(rootLwcElement.parentNode.tagName).toBe('DIV'); + expect(lwcElementInsideShadow.parentNode.tagName).toBe('DIV'); + + expect(elementInShadow.parentNode).toBe(rootLwcElement.shadowRoot); + expect(divManuallyApendedToShadow.parentNode.tagName).toBe('DIV'); + + expect(cmpShadow.parentNode).toBe(null); + + const slotContainer = rootLwcElement.shadowRoot.querySelector('x-slot-container'); + expect(slottedComponent.parentNode).toBe(slotContainer.shadowRoot); + + // Note: check, but this is may be difference with the native shadow + expect(slottedNode.parentNode.tagName).toBe('X-WITH-SLOT'); + }); + + it('should preserve parentNode behavior when node was manually inserted', () => { + // this is a specialized test only for parentNode and parentElement + const lwcElem = createElement('x-parent-specialized', { is: ParentSpecialized }); + const containingElement = document.createElement('div'); + containingElement.appendChild(lwcElem); + document.body.appendChild(containingElement); + + const lwcRenderedNode = lwcElem.shadowRoot.querySelector('.lwc-rendered'); + const manualRenderedNode = lwcElem.shadowRoot.querySelector('.manual-rendered'); + + expect(lwcRenderedNode.parentNode).toBe(lwcElem.shadowRoot); + // is returning the custom element instead of the shadow root + expect(manualRenderedNode.parentNode).toBe(lwcElem); + }); + + it('should preserve behaviour for parentElement', () => { + expect(elementOutsideLWC.parentElement.tagName).toBe('BODY'); + expect(rootLwcElement.parentElement.tagName).toBe('DIV'); + expect(lwcElementInsideShadow.parentElement.tagName).toBe('DIV'); + + expect(elementInShadow.parentElement).toBe(null); + expect(divManuallyApendedToShadow.parentElement.tagName).toBe('DIV'); + + expect(cmpShadow.parentElement).toBe(null); + + expect(slottedComponent.parentElement).toBe(null); + + // Note: check, but this is may be difference with the native shadow + expect(slottedNode.parentElement.tagName).toBe('X-WITH-SLOT'); + }); + + it('should preserve parentElement behavior when node was manually inserted', () => { + // this is a specialized test only for parentNode and parentElement + const lwcElem = createElement('x-parent-specialized', { is: ParentSpecialized }); + const containingElement = document.createElement('div'); + containingElement.appendChild(lwcElem); + document.body.appendChild(containingElement); + + const lwcRenderedNode = lwcElem.shadowRoot.querySelector('.lwc-rendered'); + const manualRenderedNode = lwcElem.shadowRoot.querySelector('.manual-rendered'); + + expect(lwcRenderedNode.parentElement).toBe(null); + // is returning the custom element instead of the shadow root + expect(manualRenderedNode.parentElement).toBe(lwcElem); + }); + + it('should preserve childNodes behavior', () => { + expect(elementOutsideLWC.childNodes.length).toBe(1); + + expect(rootLwcElement.childNodes.length).toBe(0); + expect(lwcElementInsideShadow.childNodes.length).toBe(0); + expect(slottedComponent.childNodes.length).toBe(1); + + expect(divManuallyApendedToShadow.childNodes.length).toBe(1); + + expect(cmpShadow.childNodes.length).toBe(2); + + expect(slottedNode.childNodes.length).toBe(1); + }); + + it('should preserve hasChildNodes behavior', () => { + expect(elementOutsideLWC.hasChildNodes()).toBe(true); + expect(rootLwcElement.hasChildNodes()).toBe(false); + expect(lwcElementInsideShadow.hasChildNodes()).toBe(false); + + expect(divManuallyApendedToShadow.hasChildNodes()).toBe(true); + + expect(cmpShadow.hasChildNodes()).toBe(true); + + expect(slottedComponent.hasChildNodes()).toBe(true); + expect(slottedNode.hasChildNodes()).toBe(true); + }); + + it('should preserve compareDocumentPosition behavior', () => { + expect( + elementOutsideLWC.compareDocumentPosition(lwcElementInsideShadow) & + Node.DOCUMENT_POSITION_CONTAINED_BY + ).toBeGreaterThan(0); + + expect( + rootLwcElement.compareDocumentPosition(elementOutsideLWC) & + Node.DOCUMENT_POSITION_CONTAINS + ).toBeGreaterThan(0); + expect( + lwcElementInsideShadow.compareDocumentPosition(divManuallyApendedToShadow) & + Node.DOCUMENT_POSITION_FOLLOWING + ).toBeGreaterThan(0); + + expect( + divManuallyApendedToShadow.compareDocumentPosition(elementOutsideLWC) & + Node.DOCUMENT_POSITION_CONTAINS + ).toBeGreaterThan(0); + + expect( + cmpShadow.compareDocumentPosition(slottedNode) & Node.DOCUMENT_POSITION_CONTAINED_BY + ).toBeGreaterThan(0); + }); + + it('should preserve contains behavior', () => { + expect(elementOutsideLWC.contains(lwcElementInsideShadow)).toBe(true); + + expect(rootLwcElement.contains(elementOutsideLWC)).toBe(false); + expect(lwcElementInsideShadow.contains(divManuallyApendedToShadow)).toBe(true); + + expect(divManuallyApendedToShadow.contains(elementOutsideLWC)).toBe(false); + + expect(cmpShadow.contains(slottedNode)).toBe(true); + }); + }); +}); + +describe('synthetic shadow for mixed mode', () => { + describe('Element.prototype API', () => { + it('should preseve assignedSlot behavior', () => { + const div = document.createElement('div'); + document.body.appendChild(div); + + div.attachShadow({ mode: 'open' }).innerHTML = ` + + `; + + const slotted = document.createElement('div'); + slotted.textContent = 'slotted'; + div.appendChild(slotted); + + const assignedSlot = div.shadowRoot.querySelector('slot'); + expect(slotted.assignedSlot).toBe(assignedSlot); + }); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/container/container.html b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/container/container.html new file mode 100644 index 0000000000..c43f41c5de --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/container/container.html @@ -0,0 +1,7 @@ + diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/container/container.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/container/container.js new file mode 100644 index 0000000000..a54aa8855e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/container/container.js @@ -0,0 +1,16 @@ +import { LightningElement, createElement } from 'lwc'; +import SlotContainer from 'x/slotContainer'; + +export default class Container extends LightningElement { + renderedCallback() { + const templateDiv = this.template.querySelector('div'); + const createdDiv = document.createElement('div'); + createdDiv.classList.add('manual-ctx'); + + const cmp = createElement('x-manually-inserted', { is: SlotContainer }); + createdDiv.appendChild(cmp); + + // this.template.insertBefore(createdDiv, lastParagraph); + templateDiv.insertBefore(createdDiv, undefined); + } +} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/parentSpecialized/parentSpecialized.html b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/parentSpecialized/parentSpecialized.html new file mode 100644 index 0000000000..6c6b798087 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/parentSpecialized/parentSpecialized.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/parentSpecialized/parentSpecialized.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/parentSpecialized/parentSpecialized.js new file mode 100644 index 0000000000..3522d28539 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/parentSpecialized/parentSpecialized.js @@ -0,0 +1,10 @@ +import { LightningElement } from 'lwc'; + +export default class ParentSpecialized extends LightningElement { + renderedCallback() { + const createdDiv = document.createElement('div'); + createdDiv.classList.add('manual-rendered'); + + this.template.appendChild(createdDiv); + } +} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/slotContainer/slotContainer.html b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/slotContainer/slotContainer.html new file mode 100644 index 0000000000..1de5fd864a --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/slotContainer/slotContainer.html @@ -0,0 +1,6 @@ + diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/slotContainer/slotContainer.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/slotContainer/slotContainer.js new file mode 100644 index 0000000000..fd4a5c2e96 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/slotContainer/slotContainer.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class SlotContainer extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/withSlot/withSlot.html b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/withSlot/withSlot.html new file mode 100644 index 0000000000..a2f6d04671 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/withSlot/withSlot.html @@ -0,0 +1,4 @@ + diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/withSlot/withSlot.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/withSlot/withSlot.js new file mode 100644 index 0000000000..88c310b151 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/element-api/x/withSlot/withSlot.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class WithSlot extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/global-styles/index.spec.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/global-styles/index.spec.js new file mode 100644 index 0000000000..a695f4d476 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/global-styles/index.spec.js @@ -0,0 +1,17 @@ +import { createElement } from 'lwc'; +import Component from 'x/component'; + +// TODO [#2922]: remove this test when we can support document.adoptedStyleSheets. +// Currently we can't, due to backwards compat. + +describe.skipIf(process.env.NATIVE_SHADOW)('global styles', () => { + it('injects global styles in document.head in synthetic shadow', () => { + const numStyleSheetsBefore = document.styleSheets.length; + const elm = createElement('x-component', { is: Component }); + document.body.appendChild(elm); + return Promise.resolve().then(() => { + const numStyleSheetsAfter = document.styleSheets.length; + expect(numStyleSheetsBefore + 1).toEqual(numStyleSheetsAfter); + }); + }); +}); diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/global-styles/x/component/component.css b/packages/@lwc/integration-not-karma/test/synthetic-shadow/global-styles/x/component/component.css new file mode 100644 index 0000000000..b658ab0251 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/global-styles/x/component/component.css @@ -0,0 +1,4 @@ +h1 { + color: burlywood; + background: darkslategray; +} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/global-styles/x/component/component.html b/packages/@lwc/integration-not-karma/test/synthetic-shadow/global-styles/x/component/component.html new file mode 100644 index 0000000000..85a44655fc --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/global-styles/x/component/component.html @@ -0,0 +1,3 @@ + diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/global-styles/x/component/component.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/global-styles/x/component/component.js new file mode 100644 index 0000000000..ca8dce94e0 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/global-styles/x/component/component.js @@ -0,0 +1,3 @@ +import { LightningElement } from 'lwc'; + +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/index.spec.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/index.spec.js new file mode 100644 index 0000000000..de92292ead --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/index.spec.js @@ -0,0 +1,37 @@ +import { createElement } from 'lwc'; +import Valid from 'x/valid'; +import Invalid from 'x/invalid'; + +describe('host pseudo', () => { + function testComponent(Component, name, test = it) { + test(`supports :host() pseudo class - ${name}`, async () => { + const elm = createElement('x-component', { is: Component }); + document.body.appendChild(elm); + const div = elm.shadowRoot.querySelector('.quux'); + + // expected styles for the div based on classes added to the shadow host + const expectedStyles = [ + ['', 'rgb(0, 0, 0)', '0px'], + ['foo', 'rgb(0, 128, 0)', '17px'], + ['bar', 'rgb(0, 128, 0)', '17px'], + ['foo bar', 'rgb(0, 128, 0)', '17px'], + ]; + + for (const [className, color, marginLeft] of expectedStyles) { + const oldClassName = elm.className; + elm.className += ' ' + className; + await new Promise((resolve) => requestAnimationFrame(resolve)); + expect(getComputedStyle(div).color).toEqual(color); + expect(getComputedStyle(div).marginLeft).toEqual(marginLeft); + elm.className = oldClassName; // reset so we keep the scope token + } + }); + } + + // TODO [#3225]: we should not support selector lists in :host() + testComponent(Invalid, 'invalid syntax', it.skipIf(process.env.NATIVE_SHADOW)); + + // Here we are using the correct syntax here for :host(), so it should work in both native and synthetic shadow + // See: https://github.com/salesforce/lwc/issues/3225 + testComponent(Valid, 'valid syntax'); +}); diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/invalid/invalid.css b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/invalid/invalid.css new file mode 100644 index 0000000000..fd531b84a8 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/invalid/invalid.css @@ -0,0 +1,4 @@ +/* this syntax is technically invalid https://github.com/salesforce/lwc/issues/3225 */ +:host(.foo, .bar) .baz .quux { + margin-left: 17px; +} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/invalid/invalid.html b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/invalid/invalid.html new file mode 100644 index 0000000000..5dcd01ee7f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/invalid/invalid.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/invalid/invalid.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/invalid/invalid.js new file mode 100644 index 0000000000..dc6f09f6e5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/invalid/invalid.js @@ -0,0 +1,2 @@ +import { LightningElement } from 'lwc'; +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/invalid/invalid.scoped.css b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/invalid/invalid.scoped.css new file mode 100644 index 0000000000..498803dc8e --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/invalid/invalid.scoped.css @@ -0,0 +1,4 @@ +/* this syntax is technically invalid https://github.com/salesforce/lwc/issues/3225 */ +:host(.foo, .bar) .baz .quux { + color: green; +} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/valid/valid.css b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/valid/valid.css new file mode 100644 index 0000000000..336f9f945c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/valid/valid.css @@ -0,0 +1,4 @@ +:host(.foo) .baz .quux, +:host(.bar) .baz .quux { + margin-left: 17px; +} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/valid/valid.html b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/valid/valid.html new file mode 100644 index 0000000000..5dcd01ee7f --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/valid/valid.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/valid/valid.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/valid/valid.js new file mode 100644 index 0000000000..dc6f09f6e5 --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/valid/valid.js @@ -0,0 +1,2 @@ +import { LightningElement } from 'lwc'; +export default class extends LightningElement {} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/valid/valid.scoped.css b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/valid/valid.scoped.css new file mode 100644 index 0000000000..648800b6fe --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/host-pseudo/x/valid/valid.scoped.css @@ -0,0 +1,4 @@ +:host(.foo) .baz .quux, +:host(.bar) .baz .quux { + color: green; +} diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/inner-outer-text/inner-outer-text.spec.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/inner-outer-text/inner-outer-text.spec.js new file mode 100644 index 0000000000..4b0854781c --- /dev/null +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/inner-outer-text/inner-outer-text.spec.js @@ -0,0 +1,174 @@ +import { createElement } from 'lwc'; +import Container from 'x/container'; + +// Note: originally these tests tested the runtime flag `ENABLE_INNER_OUTER_TEXT_PATCH`. +// After https://github.com/salesforce/lwc/pull/3103 though, this became tests for existing +// synthetic shadow behavior, which is not necessarily consistent with native shadow behavior. +// If you're wondering why so many of the tests are doing toMatch() on a regex, it's because of +// differences in how browsers serialize text using innerText/outerText. +describe.skipIf(process.env.NATIVE_SHADOW)('innerText and outerText', () => { + describe('innerText', () => { + let elm; + beforeEach(() => { + elm = createElement('x-container', { is: Container }); + document.body.appendChild(elm); + }); + + it('should return textContent when text within element is not selectable', () => { + const testCase = elm.shadowRoot.querySelector('.non-selectable-text'); + + expect(testCase.innerText).toBe('non selectable text'); + }); + + it('should remove consecutive LF in between from partial results', () => { + const testCase = elm.shadowRoot.querySelector('.consecutive-LF'); + + expect(testCase.innerText).toMatch( + /initial\s+first case text\s+second case text\s+end/ + ); + }); + + it('should remove hidden text + removes empty text between LF counts', () => { + const testCase = elm.shadowRoot.querySelector('.hidden-text-in-between'); + + expect(testCase.innerText).toBe(`initialend`); + }); + + it('should remove hidden text with css', () => { + const testCase = elm.shadowRoot.querySelector('.hidden-text-with-css'); + + expect(testCase.innerText).toBe(`initialend`); + }); + + it('should display textContent if element is hidden', () => { + const testCase = elm.shadowRoot.querySelector('.element-hidden-shows-text-content'); + + expect(testCase.innerText).toBe(`initialfirst case textsecond case textend`); + }); + + it('should return empty when childNodes are hidden', () => { + const testCase = elm.shadowRoot.querySelector('.empty-inner-text-due-hidden-children'); + + expect(testCase.innerText).toBe(``); + }); + + it('should collect text from multiple levels', () => { + const testCase = elm.shadowRoot.querySelector('.collect-text-multiple-levels'); + + expect(testCase.innerText).toMatch( + /This is, a text that should be displayed, in one line\. It includes links\.\s+Also paragraphs\s+and then another text/ + ); + }); + + it('should collect text from tables (table-cell and table-row)', () => { + const testCase = elm.shadowRoot.querySelector('.table-testcase'); + + // Notice that: + // 1. the last \t on each row is incorrect, it's a relaxation from the spec. + // 2. the last \n is incorrect, it's also a relaxation from the spec. + expect(testCase.innerText).toMatch(/1,1\s+1,2\s+2,1\s+2,2/); + }); + + it('should collect text from select', () => { + const testCase = elm.shadowRoot.querySelector('.select-testcase'); + + // Safari does not serialize innerText from uses attribute "aria-labelledby" to reference element

        ', async () => { diff --git a/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/LightningElement.shadowSupportMode/index.spec.js b/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/LightningElement.shadowSupportMode/index.spec.js index a3342133f0..05e4bddffa 100644 --- a/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/LightningElement.shadowSupportMode/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/LightningElement.shadowSupportMode/index.spec.js @@ -1,15 +1,15 @@ import { createElement } from 'lwc'; -import { - isNativeShadowRootInstance, - isSyntheticShadowRootInstance, - IS_SYNTHETIC_SHADOW_LOADED, -} from 'test-utils'; import Any from 'x/any'; import Any2 from 'x/any2'; import Invalid from 'x/invalid'; import Valid from 'x/valid'; import NativeOnly from 'x/native'; +import { + isNativeShadowRootInstance, + isSyntheticShadowRootInstance, + IS_SYNTHETIC_SHADOW_LOADED, +} from '../../../helpers/utils.js'; describe('shadowSupportMode static property', () => { it('should log error for invalid values', () => { diff --git a/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/reporting/index.spec.js b/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/reporting/index.spec.js index c130d22ec0..a8ebaf3dea 100644 --- a/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/reporting/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/reporting/index.spec.js @@ -1,9 +1,12 @@ import { createElement } from 'lwc'; -import { attachReportingControlDispatcher, detachReportingControlDispatcher } from 'test-utils'; import Component from 'x/component'; import Parent from 'x/parent'; import Light from 'x/light'; +import { + attachReportingControlDispatcher, + detachReportingControlDispatcher, +} from '../../../helpers/utils.js'; // Should be kept in sync with the enum in vm.ts const ShadowMode = { diff --git a/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/shadowSupportModeReporting/index.spec.js b/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/shadowSupportModeReporting/index.spec.js index c70a4f2272..e0e5d25957 100644 --- a/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/shadowSupportModeReporting/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/shadowSupportModeReporting/index.spec.js @@ -1,10 +1,13 @@ import { createElement } from 'lwc'; -import { attachReportingControlDispatcher, detachReportingControlDispatcher } from 'test-utils'; import Any from 'x/any'; import Reset from 'x/reset'; import None from 'x/none'; import NativeOnly from 'x/native'; +import { + attachReportingControlDispatcher, + detachReportingControlDispatcher, +} from '../../../helpers/utils.js'; /** * These tests must be the first ones to generate the component def for the components they use. diff --git a/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/index.spec.js b/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/index.spec.js index 2a57066843..713918e79b 100644 --- a/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/synthetic-behavior/index.spec.js @@ -1,5 +1,4 @@ import { createElement } from 'lwc'; -import { extractDataIds, isNativeShadowRootInstance } from 'test-utils'; import ParentAnyChildAny from 'x/parentAnyChildAny'; import ParentAnyChildReset from 'x/parentAnyChildReset'; import ParentResetChildAny from 'x/parentResetChildAny'; @@ -14,6 +13,7 @@ import GrandparentResetParentAnyChildAny from 'x/grandparentResetParentAnyChildA import GrandparentResetParentAnyChildReset from 'x/grandparentResetParentAnyChildReset'; import GrandparentResetParentResetChildAny from 'x/grandparentResetParentResetChildAny'; import GrandparentResetParentResetChildReset from 'x/grandparentResetParentResetChildReset'; +import { extractDataIds, isNativeShadowRootInstance } from '../../../helpers/utils.js'; afterEach(() => { window.__lwcResetGlobalStylesheets(); diff --git a/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/transitivity/index.spec.js b/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/transitivity/index.spec.js index d6707402e0..18b14b83ec 100644 --- a/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/transitivity/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/mixed-shadow-mode/transitivity/index.spec.js @@ -1,9 +1,12 @@ import { createElement } from 'lwc'; -import { isNativeShadowRootInstance, isSyntheticShadowRootInstance } from 'test-utils'; import ResetExtendsAny from 'x/resetExtendsAny'; import LightContainer from 'x/lightContainer'; import NativeContainer from 'x/nativeContainer'; +import { + isNativeShadowRootInstance, + isSyntheticShadowRootInstance, +} from '../../../helpers/utils.js'; describe.skipIf(process.env.NATIVE_SHADOW)('transitivity', () => { describe('when root component shadowSupportMode="native"', () => { diff --git a/packages/@lwc/integration-not-karma/test/polyfills/aria-properties/index.spec.js b/packages/@lwc/integration-not-karma/test/polyfills/aria-properties/index.spec.js index 05701c536c..81e10ad6fd 100644 --- a/packages/@lwc/integration-not-karma/test/polyfills/aria-properties/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/polyfills/aria-properties/index.spec.js @@ -1,13 +1,13 @@ +import { createElement } from 'lwc'; + +import Component from 'x/component'; import { ariaPropertiesMapping, nonStandardAriaProperties, nonPolyfilledAriaProperties, attachReportingControlDispatcher, detachReportingControlDispatcher, -} from 'test-utils'; -import { createElement } from 'lwc'; - -import Component from 'x/component'; +} from '../../../helpers/utils.js'; function testAriaProperty(property, attribute, suite = describe) { suite(property, () => { diff --git a/packages/@lwc/integration-not-karma/test/regression/invalid-key/index.spec.js b/packages/@lwc/integration-not-karma/test/regression/invalid-key/index.spec.js index 7777468e2a..b3e092d5f0 100644 --- a/packages/@lwc/integration-not-karma/test/regression/invalid-key/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/regression/invalid-key/index.spec.js @@ -1,6 +1,6 @@ import { createElement } from 'lwc'; -import { extractDataIds, spyConsole } from 'test-utils'; import ConditionalList from 'x/conditionalList'; +import { extractDataIds, spyConsole } from '../../../helpers/utils.js'; it('W-15885661 - renders list when key is invalid (preserve backwards compat)', async () => { const elm = createElement('x-conditional-list', { is: ConditionalList }); diff --git a/packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/index.spec.js index a58ba7d429..b26da33e89 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/callback-invocation-order/index.spec.js @@ -1,5 +1,4 @@ import { createElement } from 'lwc'; -import { catchUnhandledRejectionsAndErrors } from 'test-utils'; import ShadowParent from 'x/shadowParent'; import ShadowLightParent from 'x/shadowLightParent'; import LightParent from 'x/lightParent'; @@ -8,6 +7,7 @@ import ToggleContainer from 'x/toggleContainer'; import MultiTemplateConditionals from 'x/multiTemplateConditionals'; import ShadowContainerMultipleConditionals from 'x/shadowContainerMultipleConditionals'; import LightContainerMultipleConditionals from 'x/lightContainerMultipleConditionals'; +import { catchUnhandledRejectionsAndErrors } from '../../../helpers/utils.js'; function resetTimingBuffer() { window.timingBuffer = []; diff --git a/packages/@lwc/integration-not-karma/test/rendering/fragment-cache/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/fragment-cache/index.spec.js index 14a0d83750..e3690b70c4 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/fragment-cache/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/fragment-cache/index.spec.js @@ -1,11 +1,11 @@ import { createElement } from 'lwc'; -import { LOWERCASE_SCOPE_TOKENS } from 'test-utils'; import NativeScopedStyles from 'x/nativeScopedStyles'; import NativeStyles from 'x/nativeStyles'; import NoStyles from 'x/noStyles'; import ScopedStyles from 'x/scopedStyles'; import Styles from 'x/styles'; +import { LOWERCASE_SCOPE_TOKENS } from '../../../helpers/utils.js'; const scenarios = [ { diff --git a/packages/@lwc/integration-not-karma/test/rendering/inner-outer-html/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/inner-outer-html/index.spec.js index f23e35c9ef..633d63ac95 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/inner-outer-html/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/inner-outer-html/index.spec.js @@ -1,7 +1,7 @@ import { createElement } from 'lwc'; -import { extractDataIds } from 'test-utils'; import Inner from 'x/inner'; import Outer from 'x/outer'; +import { extractDataIds } from '../../../helpers/utils.js'; beforeAll(() => { customElements.define('omg-whatever', class extends HTMLElement {}); diff --git a/packages/@lwc/integration-not-karma/test/rendering/iteration/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/iteration/index.spec.js index 0ec48f9768..f6d7fa741a 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/iteration/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/iteration/index.spec.js @@ -1,9 +1,9 @@ -import { extractDataIds } from 'test-utils'; import { createElement } from 'lwc'; import ForEach from 'x/forEach'; import Iterator from 'x/iterator'; import InlineForEach from 'x/inlineForEach'; import InlineIterator from 'x/inlineIterator'; +import { extractDataIds } from '../../../helpers/utils.js'; describe('iteration rendering', () => { function validateRenderedChildren(elm, iterationType) { diff --git a/packages/@lwc/integration-not-karma/test/rendering/legacy-scope-tokens/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/legacy-scope-tokens/index.spec.js index 74490e3dec..5b369b5fde 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/legacy-scope-tokens/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/legacy-scope-tokens/index.spec.js @@ -1,7 +1,7 @@ import { createElement, setFeatureFlagForTest } from 'lwc'; -import { LOWERCASE_SCOPE_TOKENS } from 'test-utils'; import Light from 'x/light'; import Shadow from 'x/shadow'; +import { LOWERCASE_SCOPE_TOKENS } from '../../../helpers/utils.js'; describe('legacy scope tokens', () => { [false, true].forEach((enableLegacyScopeTokens) => { diff --git a/packages/@lwc/integration-not-karma/test/rendering/sanitize-stylesheet-token/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/sanitize-stylesheet-token/index.spec.js index 2f22cbc934..99661be5a1 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/sanitize-stylesheet-token/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/sanitize-stylesheet-token/index.spec.js @@ -1,7 +1,7 @@ import { createElement, setFeatureFlagForTest } from 'lwc'; -import { catchUnhandledRejectionsAndErrors } from 'test-utils'; import Component from 'x/component'; import Scoping from 'x/scoping'; +import { catchUnhandledRejectionsAndErrors } from '../../../helpers/utils.js'; let caughtError; let logger; diff --git a/packages/@lwc/integration-not-karma/test/rendering/scoped-styles-with-existing-class/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/scoped-styles-with-existing-class/index.spec.js index 53e0304b86..cece772051 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/scoped-styles-with-existing-class/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/scoped-styles-with-existing-class/index.spec.js @@ -1,6 +1,6 @@ import { createElement, setFeatureFlagForTest } from 'lwc'; -import { LOWERCASE_SCOPE_TOKENS } from 'test-utils'; import Component from 'x/component'; +import { LOWERCASE_SCOPE_TOKENS } from '../../../helpers/utils.js'; // TODO [#3733]: remove support for legacy scope tokens [false, true].forEach((enableLegacyScopeTokens) => { diff --git a/packages/@lwc/integration-not-karma/test/rendering/side-effects/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/side-effects/index.spec.js index 6d0a1910ba..d071787dc3 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/side-effects/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/side-effects/index.spec.js @@ -1,10 +1,10 @@ import { createElement } from 'lwc'; -import { spyConsole } from 'test-utils'; import SideEffectDuringRender from 'x/sideEffectDuringRender'; import SideEffectDuringTemplate from 'x/sideEffectDuringTemplate'; import SideEffectDuringRenderExternal from 'x/sideEffectDuringRenderExternal'; import SideEffectDuringTemplateExternal from 'x/sideEffectDuringTemplateExternal'; +import { spyConsole } from '../../../helpers/utils.js'; describe('side effects', () => { let consoleSpy; diff --git a/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/light/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/light/index.spec.js index 5d2d965717..a9e6f42e4f 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/light/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/light/index.spec.js @@ -1,10 +1,10 @@ import { createElement } from 'lwc'; +import Outer from 'x/outer'; import { expectEquivalentDOM, USE_LIGHT_DOM_SLOT_FORWARDING, USE_COMMENTS_FOR_FRAGMENT_BOOKENDS, -} from 'test-utils'; -import Outer from 'x/outer'; +} from '../../../../../helpers/utils.js'; // `expectEquivalentDOM` requires `Document.parseHTMLUnsafe` it.runIf(Document.parseHTMLUnsafe)('renders slots not at the top level', async () => { diff --git a/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/shadow/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/shadow/index.spec.js index 2bd8c221e3..a22bfd0b76 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/shadow/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/element/shadow/index.spec.js @@ -1,6 +1,6 @@ import { createElement } from 'lwc'; -import { expectEquivalentDOM } from 'test-utils'; import Outer from 'x/outer'; +import { expectEquivalentDOM } from '../../../../../helpers/utils.js'; // `expectEquivalentDOM` requires `Document.parseHTMLUnsafe` it.runIf(Document.parseHTMLUnsafe)('renders slots not at the top level', async () => { diff --git a/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/light/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/light/index.spec.js index fb96f16342..b03fb4aadc 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/light/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/light/index.spec.js @@ -1,10 +1,10 @@ import { createElement } from 'lwc'; +import Outer from 'x/outer'; import { expectEquivalentDOM, USE_LIGHT_DOM_SLOT_FORWARDING, USE_COMMENTS_FOR_FRAGMENT_BOOKENDS, -} from 'test-utils'; -import Outer from 'x/outer'; +} from '../../../../../helpers/utils.js'; beforeAll(() => { customElements.define('x-external-light', class extends HTMLElement {}); diff --git a/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/shadow/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/shadow/index.spec.js index 11845a3f97..2bea15b07a 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/shadow/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/external/shadow/index.spec.js @@ -1,6 +1,6 @@ import { createElement } from 'lwc'; -import { expectEquivalentDOM } from 'test-utils'; import Outer from 'x/outer'; +import { expectEquivalentDOM } from '../../../../../helpers/utils.js'; beforeAll(() => { customElements.define('x-external-shadow', class extends HTMLElement {}); diff --git a/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/light/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/light/index.spec.js index 8179af0299..661a39f47c 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/light/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/light/index.spec.js @@ -1,10 +1,10 @@ import { createElement } from 'lwc'; +import Outer from 'x/outer'; import { expectEquivalentDOM, USE_LIGHT_DOM_SLOT_FORWARDING, USE_COMMENTS_FOR_FRAGMENT_BOOKENDS, -} from 'test-utils'; -import Outer from 'x/outer'; +} from '../../../../../helpers/utils.js'; // `expectEquivalentDOM` requires `Document.parseHTMLUnsafe` it.runIf(Document.parseHTMLUnsafe)('renders slots not at the top level', async () => { diff --git a/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/shadow/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/shadow/index.spec.js index 2192cca74e..74dbd5f4d0 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/shadow/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/ifTrue/shadow/index.spec.js @@ -1,6 +1,6 @@ import { createElement } from 'lwc'; -import { expectEquivalentDOM } from 'test-utils'; import Outer from 'x/outer'; +import { expectEquivalentDOM } from '../../../../../helpers/utils.js'; // `expectEquivalentDOM` requires `Document.parseHTMLUnsafe` it.runIf(Document.parseHTMLUnsafe)('renders slots not at the top level', async () => { diff --git a/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/light/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/light/index.spec.js index 8179af0299..661a39f47c 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/light/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/light/index.spec.js @@ -1,10 +1,10 @@ import { createElement } from 'lwc'; +import Outer from 'x/outer'; import { expectEquivalentDOM, USE_LIGHT_DOM_SLOT_FORWARDING, USE_COMMENTS_FOR_FRAGMENT_BOOKENDS, -} from 'test-utils'; -import Outer from 'x/outer'; +} from '../../../../../helpers/utils.js'; // `expectEquivalentDOM` requires `Document.parseHTMLUnsafe` it.runIf(Document.parseHTMLUnsafe)('renders slots not at the top level', async () => { diff --git a/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/shadow/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/shadow/index.spec.js index 2192cca74e..74dbd5f4d0 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/shadow/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/slot-not-at-top-level/lwcIf/shadow/index.spec.js @@ -1,6 +1,6 @@ import { createElement } from 'lwc'; -import { expectEquivalentDOM } from 'test-utils'; import Outer from 'x/outer'; +import { expectEquivalentDOM } from '../../../../../helpers/utils.js'; // `expectEquivalentDOM` requires `Document.parseHTMLUnsafe` it.runIf(Document.parseHTMLUnsafe)('renders slots not at the top level', async () => { diff --git a/packages/@lwc/integration-not-karma/test/rendering/slotting/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/slotting/index.spec.js index 978adc6ecf..e7db89f256 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/slotting/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/slotting/index.spec.js @@ -1,11 +1,11 @@ import { createElement } from 'lwc'; -import { spyConsole } from 'test-utils'; import RenderCountParent from 'x/renderCountParent'; import FallbackContentReuseParent from 'x/fallbackContentReuseParent'; import RegressionContainer from 'x/regressionContainer'; import FallbackContentReuseDynamicKeyParent from 'x/fallbackContentReuseDynamicKeyParent'; import UnknownSlotShadow from 'x/unknownSlotShadow'; import UnknownSlotLight from 'x/unknownSlotLight'; +import { spyConsole } from '../../../helpers/utils.js'; // TODO [#1617]: Engine currently has trouble with slotting and invocation of the renderedCallback. xit('should not render if the slotted content changes', () => { diff --git a/packages/@lwc/integration-not-karma/test/rendering/version-mismatch/index.spec.js b/packages/@lwc/integration-not-karma/test/rendering/version-mismatch/index.spec.js index dd44e7644e..fab876beaf 100644 --- a/packages/@lwc/integration-not-karma/test/rendering/version-mismatch/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/rendering/version-mismatch/index.spec.js @@ -1,9 +1,12 @@ import { createElement, LightningElement, registerTemplate, registerComponent } from 'lwc'; -import { attachReportingControlDispatcher, detachReportingControlDispatcher } from 'test-utils'; import Component from 'x/component'; import ComponentWithProp from 'x/componentWithProp'; import ComponentWithTemplateAndStylesheet from 'x/componentWithTemplateAndStylesheet'; +import { + attachReportingControlDispatcher, + detachReportingControlDispatcher, +} from '../../../helpers/utils.js'; describe('compiler version mismatch', () => { describe('stamped with version number', () => { diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/Element.assignedSlot.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/Element.assignedSlot.spec.js index 6c4ed4575a..7f72b7ce69 100644 --- a/packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/Element.assignedSlot.spec.js +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/Element-properties/Element.assignedSlot.spec.js @@ -1,5 +1,4 @@ import { createElement } from 'lwc'; -import { getHostChildNodes } from 'test-utils'; import SimpleParent from 'x/simpleParent'; import SlottedParent from 'x/slotted'; @@ -7,6 +6,7 @@ import SlottedCustomElement from 'x/slottedCustomElement'; import SlotReceiver from 'x/slot'; import CustomElementAsDefaultSlot from 'x/customElementAsDefaultSlot'; import TextSlotted from 'x/textSlotted'; +import { getHostChildNodes } from '../../../helpers/utils.js'; describe('assignedSlot', () => { it('should return null when custom element is not in slot', () => { diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/Event-methods/index.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/Event-methods/index.spec.js index 1b847b168e..f9808fa356 100644 --- a/packages/@lwc/integration-not-karma/test/shadow-dom/Event-methods/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/Event-methods/index.spec.js @@ -1,7 +1,6 @@ import { createElement } from 'lwc'; -import { extractDataIds } from 'test-utils'; - import Container from 'x/container'; +import { extractDataIds } from '../../../helpers/utils.js'; function dispatchEventWithLog(target, nodes, event) { const log = []; diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/EventTarget-methods/EventTarget.addEventListener.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/EventTarget-methods/EventTarget.addEventListener.spec.js index f679c72dff..b3000c7013 100644 --- a/packages/@lwc/integration-not-karma/test/shadow-dom/EventTarget-methods/EventTarget.addEventListener.spec.js +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/EventTarget-methods/EventTarget.addEventListener.spec.js @@ -1,7 +1,6 @@ import { createElement } from 'lwc'; -import { extractDataIds } from 'test-utils'; - import Container from 'x/container'; +import { extractDataIds } from '../../../helpers/utils.js'; function createShadowTree(parentNode) { const elm = createElement('x-container', { is: Container }); diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/EventTarget-methods/EventTarget.removeEventListener.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/EventTarget-methods/EventTarget.removeEventListener.spec.js index d21e793292..8775a8e0f5 100644 --- a/packages/@lwc/integration-not-karma/test/shadow-dom/EventTarget-methods/EventTarget.removeEventListener.spec.js +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/EventTarget-methods/EventTarget.removeEventListener.spec.js @@ -1,7 +1,6 @@ import { createElement } from 'lwc'; -import { extractDataIds } from 'test-utils'; - import Container from 'x/container'; +import { extractDataIds } from '../../../helpers/utils.js'; function createShadowTree(parentNode) { const elm = createElement('x-container', { is: Container }); diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/HTMLSlotElement-assigned.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/HTMLSlotElement-assigned.spec.js index f4a1f97323..294fa1eda2 100644 --- a/packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/HTMLSlotElement-assigned.spec.js +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/HTMLSlotElement-properties/HTMLSlotElement-assigned.spec.js @@ -1,10 +1,10 @@ import { createElement } from 'lwc'; -import { extractShadowDataIds } from 'test-utils'; import NoDirectChild from 'x/noDirectChild'; import Basic from 'x/basic'; import SlotsInSlots from 'x/slotsInSlots'; import Complex from 'x/complex'; +import { extractShadowDataIds } from '../../../helpers/utils.js'; describe('ignore non direct host children', () => { let elm; diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/Node.childNodes.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/Node.childNodes.spec.js index 0f76702e01..533228f80f 100644 --- a/packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/Node.childNodes.spec.js +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/Node-properties/Node.childNodes.spec.js @@ -1,5 +1,4 @@ import { createElement } from 'lwc'; -import { getHostChildNodes } from 'test-utils'; import Slotted from 'x/slotted'; import SlottedParent from 'x/slottedParent'; @@ -8,6 +7,7 @@ import UnslottedParent from 'x/unslottedParent'; import HasNoSlot from 'x/hasNoSlot'; import Parent from 'x/parent'; import SimpleParent from 'x/simpleParent'; +import { getHostChildNodes } from '../../../helpers/utils.js'; describe('Node.childNodes', () => { it('should return the right children Nodes - x-slotted', () => { diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/index.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/index.spec.js index d5bf175cc9..98ac4973a2 100644 --- a/packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/ShadowRoot.elementsFromPoint/index.spec.js @@ -1,7 +1,7 @@ import { createElement } from 'lwc'; import Container from 'x/container'; import Grandparent from 'x/grandparent'; -import { extractShadowDataIds } from 'test-utils'; +import { extractShadowDataIds } from '../../../helpers/utils.js'; // The browsers disagree on whether elements _above_ the shadow root should also be included // when calling shadowRoot.elementsFromPoint(). Firefox only returns elements inside of the diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/event-post-dispatch.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/event-post-dispatch.spec.js index 649afaae4d..4d1607e176 100644 --- a/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/event-post-dispatch.spec.js +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/event-post-dispatch.spec.js @@ -2,9 +2,8 @@ // https://github.com/web-platform-tests/wpt/blob/master/shadow-dom/event-post-dispatch.html import { createElement } from 'lwc'; -import { extractDataIds } from 'test-utils'; - import Container from 'x/container'; +import { extractDataIds } from '../../../helpers/utils.js'; function assertEventStateReset(evt) { expect(evt.eventPhase).toBe(0); diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/propagation.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/propagation.spec.js index ba2920bab0..aa9c81d892 100644 --- a/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/propagation.spec.js +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/event-in-shadow-tree/propagation.spec.js @@ -2,9 +2,8 @@ // https://github.com/web-platform-tests/wpt/blob/master/shadow-dom/event-inside-shadow-tree.html import { createElement } from 'lwc'; -import { extractDataIds } from 'test-utils'; - import Container from 'x/container'; +import { extractDataIds } from '../../../helpers/utils.js'; function dispatchEventWithLog(target, nodes, event) { const log = []; diff --git a/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/index.spec.js b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/index.spec.js index 6fb5dc44ca..373a01d248 100644 --- a/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/shadow-dom/part-and-exportparts/index.spec.js @@ -1,6 +1,6 @@ import { createElement } from 'lwc'; -import { extractDataIds } from 'test-utils'; import Grandparent from 'x/grandparent'; +import { extractDataIds } from '../../../helpers/utils.js'; describe.runIf(process.env.NATIVE_SHADOW)('part and exportparts', () => { it('supports part and exportparts', () => { diff --git a/packages/@lwc/integration-not-karma/test/signal/protocol/x/signal/signal.js b/packages/@lwc/integration-not-karma/test/signal/protocol/x/signal/signal.js index a88e8a5ef3..27a1f7b098 100644 --- a/packages/@lwc/integration-not-karma/test/signal/protocol/x/signal/signal.js +++ b/packages/@lwc/integration-not-karma/test/signal/protocol/x/signal/signal.js @@ -1,7 +1,7 @@ // Note for testing purposes the signal implementation uses LWC module resolution to simplify things. // In production the signal will come from a 3rd party library. -import { addTrustedSignal } from 'test-utils'; +import { addTrustedSignal } from '../../../../../helpers/utils.js'; export class Signal { subscribers = new Set(); diff --git a/packages/@lwc/integration-not-karma/test/signal/reactivity/x/signal/signal.js b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/signal/signal.js index 21fd9ea483..c174e53d93 100644 --- a/packages/@lwc/integration-not-karma/test/signal/reactivity/x/signal/signal.js +++ b/packages/@lwc/integration-not-karma/test/signal/reactivity/x/signal/signal.js @@ -1,7 +1,7 @@ // Note for testing purposes the signal implementation uses LWC module resolution to simplify things. // In production the signal will come from a 3rd party library. -import { addTrustedSignal } from 'test-utils'; +import { addTrustedSignal } from '../../../../../helpers/utils.js'; export class Signal { subscribers = new Set(); diff --git a/packages/@lwc/integration-not-karma/test/spread/index.spec.js b/packages/@lwc/integration-not-karma/test/spread/index.spec.js index 68f69035d1..a093933ad1 100644 --- a/packages/@lwc/integration-not-karma/test/spread/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/spread/index.spec.js @@ -1,6 +1,6 @@ import { createElement } from 'lwc'; import Test from 'x/test'; -import { getHooks, setHooks } from 'test-utils'; +import { getHooks, setHooks } from '../../helpers/utils.js'; function setSanitizeHtmlContentHookForTest(impl) { const { sanitizeHtmlContent } = getHooks(); diff --git a/packages/@lwc/integration-not-karma/test/static-content/index.spec.js b/packages/@lwc/integration-not-karma/test/static-content/index.spec.js index 07945e00fe..a38d7c1a2a 100644 --- a/packages/@lwc/integration-not-karma/test/static-content/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/static-content/index.spec.js @@ -1,5 +1,4 @@ import { createElement } from 'lwc'; -import { extractDataIds, LOWERCASE_SCOPE_TOKENS } from 'test-utils'; import Container from 'x/container'; import Escape from 'x/escape'; import MultipleStyles from 'x/multipleStyles'; @@ -24,6 +23,7 @@ import Text from 'x/text'; import TableWithExpression from 'x/tableWithExpressions'; import TextWithoutPreserveComments from 'x/textWithoutPreserveComments'; import TextWithPreserveComments from 'x/textWithPreserveComments'; +import { extractDataIds, LOWERCASE_SCOPE_TOKENS } from '../../helpers/utils.js'; describe.skipIf(process.env.NATIVE_SHADOW)('Mixed mode for static content', () => { ['native', 'synthetic'].forEach((firstRenderMode) => { diff --git a/packages/@lwc/integration-not-karma/test/swapping/styles/index.spec.js b/packages/@lwc/integration-not-karma/test/swapping/styles/index.spec.js index 1da1911952..d9f1a21e00 100644 --- a/packages/@lwc/integration-not-karma/test/swapping/styles/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/swapping/styles/index.spec.js @@ -1,5 +1,4 @@ import { createElement, swapStyle, swapTemplate } from 'lwc'; -import { extractDataIds } from 'test-utils'; import ShadowUsesStaticStylesheets from 'shadow/usesStaticStylesheets'; import LightUsesStaticStylesheets from 'light/usesStaticStylesheets'; import LightGlobalUsesStaticStylesheets from 'light-global/usesStaticStylesheets'; @@ -15,6 +14,7 @@ import libraryStyle from 'x/library'; import libraryStyleV2 from 'x/libraryV2'; import IdenticalStylesheets from 'shadow/identicalStylesheets'; import IdenticalStylesheetsContainer from 'shadow/identicalStylesheetsContainer'; +import { extractDataIds } from '../../../helpers/utils.js'; function expectStyles(elm, styles) { const computed = getComputedStyle(elm); diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/disable-synthetic-shadow/index.spec.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/disable-synthetic-shadow/index.spec.js index d7ae52a839..d34fa47233 100644 --- a/packages/@lwc/integration-not-karma/test/synthetic-shadow/disable-synthetic-shadow/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/disable-synthetic-shadow/index.spec.js @@ -1,6 +1,9 @@ import { createElement, setFeatureFlagForTest } from 'lwc'; -import { IS_SYNTHETIC_SHADOW_LOADED, isSyntheticShadowRootInstance } from 'test-utils'; import Component from 'x/component'; +import { + IS_SYNTHETIC_SHADOW_LOADED, + isSyntheticShadowRootInstance, +} from '../../../helpers/utils.js'; describe.runIf(IS_SYNTHETIC_SHADOW_LOADED && !process.env.FORCE_NATIVE_SHADOW_MODE_FOR_TEST)( 'DISABLE_SYNTHETIC_SHADOW', diff --git a/packages/@lwc/integration-not-karma/test/synthetic-shadow/shadow-token/index.spec.js b/packages/@lwc/integration-not-karma/test/synthetic-shadow/shadow-token/index.spec.js index c6a065ee2f..da8ca50807 100644 --- a/packages/@lwc/integration-not-karma/test/synthetic-shadow/shadow-token/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/synthetic-shadow/shadow-token/index.spec.js @@ -1,4 +1,4 @@ -import { IS_SYNTHETIC_SHADOW_LOADED } from 'test-utils'; +import { IS_SYNTHETIC_SHADOW_LOADED } from '../../../helpers/utils.js'; // From @lwc/shared/src/keys.ts const KEY__SHADOW_RESOLVER = '$shadowResolver$'; diff --git a/packages/@lwc/integration-not-karma/test/template/attribute-aria/index.spec.js b/packages/@lwc/integration-not-karma/test/template/attribute-aria/index.spec.js index 754394f135..18d67c58ea 100644 --- a/packages/@lwc/integration-not-karma/test/template/attribute-aria/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/template/attribute-aria/index.spec.js @@ -1,7 +1,6 @@ import { createElement } from 'lwc'; -import { ariaAttributes, ariaProperties, ariaPropertiesMapping } from 'test-utils'; - import Parent from 'x/parent'; +import { ariaAttributes, ariaProperties, ariaPropertiesMapping } from '../../../helpers/utils.js'; describe('setting aria attributes', () => { let childComponent; diff --git a/packages/@lwc/integration-not-karma/test/template/attribute-aria/x/child/child.js b/packages/@lwc/integration-not-karma/test/template/attribute-aria/x/child/child.js index 9184370c8e..6ce64f4ed8 100644 --- a/packages/@lwc/integration-not-karma/test/template/attribute-aria/x/child/child.js +++ b/packages/@lwc/integration-not-karma/test/template/attribute-aria/x/child/child.js @@ -1,5 +1,5 @@ import { LightningElement, api } from 'lwc'; -import { ariaProperties } from 'test-utils'; +import { ariaProperties } from '../../../../../helpers/utils.js'; export default class extends LightningElement { @api diff --git a/packages/@lwc/integration-not-karma/test/template/attribute-class/object-values.spec.js b/packages/@lwc/integration-not-karma/test/template/attribute-class/object-values.spec.js index 6b7449e225..ac9550e6f8 100644 --- a/packages/@lwc/integration-not-karma/test/template/attribute-class/object-values.spec.js +++ b/packages/@lwc/integration-not-karma/test/template/attribute-class/object-values.spec.js @@ -1,8 +1,8 @@ import { createElement } from 'lwc'; -import { TEMPLATE_CLASS_NAME_OBJECT_BINDING } from 'test-utils'; import Dynamic from 'x/dynamic'; import Reactive from 'x/reactive'; +import { TEMPLATE_CLASS_NAME_OBJECT_BINDING } from '../../../helpers/utils.js'; function createDynamicClass(value) { const elm = createElement('x-dynamic', { is: Dynamic }); diff --git a/packages/@lwc/integration-not-karma/test/template/directive-for-each/index.spec.js b/packages/@lwc/integration-not-karma/test/template/directive-for-each/index.spec.js index fd13f4dd1a..dca99a8b84 100644 --- a/packages/@lwc/integration-not-karma/test/template/directive-for-each/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/template/directive-for-each/index.spec.js @@ -1,9 +1,9 @@ import { createElement } from 'lwc'; -import { spyConsole } from 'test-utils'; import XTest from 'x/test'; import XTestStatic from 'x/testStatic'; import XTestCustomElement from 'x/testCustomElement'; import ArrayNullPrototype from 'x/arrayNullPrototype'; +import { spyConsole } from '../../../helpers/utils.js'; function testForEach(type, obj) { it(`should render ${type}`, () => { diff --git a/packages/@lwc/integration-not-karma/test/template/directive-lwc-inner-html/index.spec.js b/packages/@lwc/integration-not-karma/test/template/directive-lwc-inner-html/index.spec.js index 5b3f8976b1..e612ce814c 100644 --- a/packages/@lwc/integration-not-karma/test/template/directive-lwc-inner-html/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/template/directive-lwc-inner-html/index.spec.js @@ -1,7 +1,6 @@ import { createElement } from 'lwc'; -import { getHooks, setHooks } from 'test-utils'; - import XInnerHtml from 'x/innerHtml'; +import { getHooks, setHooks } from '../../../helpers/utils.js'; let originalSanitizeHtmlContent; diff --git a/packages/@lwc/integration-not-karma/test/template/directive-lwc-render-mode/index.spec.js b/packages/@lwc/integration-not-karma/test/template/directive-lwc-render-mode/index.spec.js index dd2ccde1f1..63bd8d564f 100644 --- a/packages/@lwc/integration-not-karma/test/template/directive-lwc-render-mode/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/template/directive-lwc-render-mode/index.spec.js @@ -1,7 +1,10 @@ import { createElement } from 'lwc'; -import { attachReportingControlDispatcher, detachReportingControlDispatcher } from 'test-utils'; import Shadow from 'x/shadow'; import Light from 'x/light'; +import { + attachReportingControlDispatcher, + detachReportingControlDispatcher, +} from '../../../helpers/utils.js'; describe('lwc:render-mode', () => { let dispatcher; diff --git a/packages/@lwc/integration-not-karma/test/template/escape-attr-name/index.spec.js b/packages/@lwc/integration-not-karma/test/template/escape-attr-name/index.spec.js index 39f3fc15fe..23e391dee4 100644 --- a/packages/@lwc/integration-not-karma/test/template/escape-attr-name/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/template/escape-attr-name/index.spec.js @@ -1,7 +1,7 @@ import { createElement } from 'lwc'; -import { catchUnhandledRejectionsAndErrors } from 'test-utils'; import BooleanValue from 'x/booleanValue'; import StringValue from 'x/stringValue'; +import { catchUnhandledRejectionsAndErrors } from '../../../helpers/utils.js'; // Browsers treat attribute names containing the ` (backtick) character differently // depending on whether the HTML is parsed or you call `setAttribute` directly. diff --git a/packages/@lwc/integration-not-karma/test/template/escape-tag-name/index.spec.js b/packages/@lwc/integration-not-karma/test/template/escape-tag-name/index.spec.js index a4f3d48861..49ef186274 100644 --- a/packages/@lwc/integration-not-karma/test/template/escape-tag-name/index.spec.js +++ b/packages/@lwc/integration-not-karma/test/template/escape-tag-name/index.spec.js @@ -1,6 +1,6 @@ import { createElement } from 'lwc'; -import { catchUnhandledRejectionsAndErrors } from 'test-utils'; import Component from 'x/component'; +import { catchUnhandledRejectionsAndErrors } from '../../../helpers/utils.js'; // Browsers treat tag names containing the \ (backslash) character differently // depending on whether the HTML is parsed or you call `createElement` directly. diff --git a/yarn.lock b/yarn.lock index e9b07563be..aa76d417ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3207,6 +3207,11 @@ resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.9.tgz#9f00abff2a17687e675ce6669e7b53c9e7d145f0" integrity sha512-8t4HtkW4wxiPVedMpeZ63n3vlWxEIquo/zc1Tm8ElU+SqVV7+D3Na2PWaJUp179AzTragMWVwkMv7mvty0NfyQ== +"@types/jasmine@^5.1.9": + version "5.1.9" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.9.tgz#9f00abff2a17687e675ce6669e7b53c9e7d145f0" + integrity sha512-8t4HtkW4wxiPVedMpeZ63n3vlWxEIquo/zc1Tm8ElU+SqVV7+D3Na2PWaJUp179AzTragMWVwkMv7mvty0NfyQ== + "@types/json-schema@^7.0.15": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" From 475662e88173d81acc8286177ee03f940a69a614 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Sep 2025 18:53:47 +0000 Subject: [PATCH 18/35] build(deps-dev): bump @vitest/eslint-plugin in the vitest group (#5474) Bumps the vitest group with 1 update: [@vitest/eslint-plugin](https://github.com/vitest-dev/eslint-plugin-vitest). Updates `@vitest/eslint-plugin` from 1.3.4 to 1.3.5 - [Release notes](https://github.com/vitest-dev/eslint-plugin-vitest/releases) - [Commits](https://github.com/vitest-dev/eslint-plugin-vitest/compare/v1.3.4...v1.3.5) --- updated-dependencies: - dependency-name: "@vitest/eslint-plugin" dependency-version: 1.3.5 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vitest ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 30 ++++++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 3def58408a..d0244e77c8 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "@types/babel__core": "^7.20.5", "@types/node": "^22.18.0", "@vitest/coverage-v8": "^3.2.4", - "@vitest/eslint-plugin": "^1.3.4", + "@vitest/eslint-plugin": "^1.3.6", "@vitest/ui": "^3.2.4", "bytes": "^3.1.2", "es-module-lexer": "^1.7.0", diff --git a/yarn.lock b/yarn.lock index aa76d417ba..50369722c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3459,6 +3459,14 @@ "@typescript-eslint/types" "8.41.0" "@typescript-eslint/visitor-keys" "8.41.0" +"@typescript-eslint/scope-manager@^8.41.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.42.0.tgz#36016757bc85b46ea42bae47b61f9421eddedde3" + integrity sha512-51+x9o78NBAVgQzOPd17DkNTnIzJ8T/O2dmMBLoK9qbY0Gm52XJcdJcCl18ExBMiHo6jPMErUQWUv5RLE51zJw== + dependencies: + "@typescript-eslint/types" "8.42.0" + "@typescript-eslint/visitor-keys" "8.42.0" + "@typescript-eslint/tsconfig-utils@8.41.0", "@typescript-eslint/tsconfig-utils@^8.41.0": version "8.41.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.41.0.tgz#134dee36eb16cdd78095a20bca0516d10b5dda75" @@ -3480,6 +3488,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.41.0.tgz#9935afeaae65e535abcbcee95383fa649c64d16d" integrity sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag== +"@typescript-eslint/types@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.42.0.tgz#ae15c09cebda20473772902033328e87372db008" + integrity sha512-LdtAWMiFmbRLNP7JNeY0SqEtJvGMYSzfiWBSmx+VSZ1CH+1zyl8Mmw1TT39OrtsRvIYShjJWzTDMPWZJCpwBlw== + "@typescript-eslint/typescript-estree@8.41.0": version "8.41.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.41.0.tgz#7c9cff8b4334ce96f14e9689692e8cf426ce4d59" @@ -3514,6 +3527,14 @@ "@typescript-eslint/types" "8.41.0" eslint-visitor-keys "^4.2.1" +"@typescript-eslint/visitor-keys@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.42.0.tgz#87c6caaa1ac307bc73a87c1fc469f88f0162f27e" + integrity sha512-3WbiuzoEowaEn8RSnhJBrxSwX8ULYE9CXaPepS2C2W3NSA5NNIvBaslpBSBElPq0UGr0xVJlXFWOAKIkyylydQ== + dependencies: + "@typescript-eslint/types" "8.42.0" + eslint-visitor-keys "^4.2.1" + "@vitest/coverage-v8@^3.2.4": version "3.2.4" resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-3.2.4.tgz#a2d8d040288c1956a1c7d0a0e2cdcfc7a3319f13" @@ -3533,11 +3554,12 @@ test-exclude "^7.0.1" tinyrainbow "^2.0.0" -"@vitest/eslint-plugin@^1.3.4": - version "1.3.4" - resolved "https://registry.yarnpkg.com/@vitest/eslint-plugin/-/eslint-plugin-1.3.4.tgz#010f99ecfdcf349eb6d9c1f29c31ebcc8f5e18f8" - integrity sha512-EOg8d0jn3BAiKnR55WkFxmxfWA3nmzrbIIuOXyTe6A72duryNgyU+bdBEauA97Aab3ho9kLmAwgPX63Ckj4QEg== +"@vitest/eslint-plugin@^1.3.6": + version "1.3.6" + resolved "https://registry.yarnpkg.com/@vitest/eslint-plugin/-/eslint-plugin-1.3.6.tgz#3c942c33429aaab036a4958da7e37a1e99277c1b" + integrity sha512-sa/QAljHbUP+sMdPjK8e/6nS2+QB/bh1aDKEkAKMqsKVzBXqz4LRYfT7UVGIP8LMIrskGTxqAbHuiL+FOYWzHg== dependencies: + "@typescript-eslint/scope-manager" "^8.41.0" "@typescript-eslint/utils" "^8.24.1" "@vitest/expect@3.2.4": From 9c108eaaca6180d4e19da5f49ee6dfe8d4d67936 Mon Sep 17 00:00:00 2001 From: Will Harney <62956339+wjhsf@users.noreply.github.com> Date: Tue, 9 Sep 2025 16:17:56 +0000 Subject: [PATCH 19/35] test(wtr): clean up hydration tests (#5478) * test(wtr): update tests to use relative path to utils instead of weird fake module * test(wtr): revert removing TestUtils * test(wtr): remove useless describe There's no setup/teardown needed, it's a single test, and WTR provides per-file encapsulation * test(wtr): replace IIFE script with module import * test(wtr): clean up SSR execution script working toward just importing and executing things, but not quite there yet * test(wtr): always use DISABLE_SYNTHETIC two env vars for the same goal is unnecessary * test(wtr): enable all hydration tests I think the last one was a concurrency related timeout, which was previously addressed. --- .../integration-not-karma/configs/base.js | 1 - .../configs/hydration.js | 10 +-- .../configs/plugins/serve-hydration.js | 89 ++++++++----------- .../integration-not-karma/helpers/options.js | 5 -- .../synthetic-shadow/index.spec.js | 6 +- 5 files changed, 40 insertions(+), 71 deletions(-) diff --git a/packages/@lwc/integration-not-karma/configs/base.js b/packages/@lwc/integration-not-karma/configs/base.js index 4b08ac144f..ea4e4459ff 100644 --- a/packages/@lwc/integration-not-karma/configs/base.js +++ b/packages/@lwc/integration-not-karma/configs/base.js @@ -14,7 +14,6 @@ const env = { 'DISABLE_STATIC_CONTENT_OPTIMIZATION', 'DISABLE_SYNTHETIC', 'ENABLE_ARIA_REFLECTION_GLOBAL_POLYFILL', - 'ENABLE_SYNTHETIC_SHADOW_IN_HYDRATION', 'ENGINE_SERVER', 'FORCE_NATIVE_SHADOW_MODE_FOR_TEST', 'NATIVE_SHADOW', diff --git a/packages/@lwc/integration-not-karma/configs/hydration.js b/packages/@lwc/integration-not-karma/configs/hydration.js index 547844d317..67a2419850 100644 --- a/packages/@lwc/integration-not-karma/configs/hydration.js +++ b/packages/@lwc/integration-not-karma/configs/hydration.js @@ -6,14 +6,6 @@ import hydrationTestPlugin from './plugins/serve-hydration.js'; /** @type {import("@web/test-runner").TestRunnerConfig} */ export default { ...baseConfig, - files: [ - // FIXME: These tests are just symlinks to integration-karma for now so the git diff smaller - 'test-hydration/**/*.spec.js', - // FIXME: hits timeout? - '!test-hydration/light-dom/scoped-styles/replace-scoped-styles-with-dynamic-templates/index.spec.js', - // FIXME: This uses ENABLE_SYNTHETIC_SHADOW_IN_MIGRATION to detect status, - // we should just use DISABLE_SYNTHETIC instead - '!test-hydration/synthetic-shadow/index.spec.js', - ], + files: ['test-hydration/**/*.spec.js'], plugins: [...baseConfig.plugins, hydrationTestPlugin], }; diff --git a/packages/@lwc/integration-not-karma/configs/plugins/serve-hydration.js b/packages/@lwc/integration-not-karma/configs/plugins/serve-hydration.js index ebb724d9a2..1e495f3033 100644 --- a/packages/@lwc/integration-not-karma/configs/plugins/serve-hydration.js +++ b/packages/@lwc/integration-not-karma/configs/plugins/serve-hydration.js @@ -4,14 +4,11 @@ import fs from 'node:fs/promises'; import { rollup } from 'rollup'; import lwcRollupPlugin from '@lwc/rollup-plugin'; import { DISABLE_STATIC_CONTENT_OPTIMIZATION, ENGINE_SERVER } from '../../helpers/options.js'; -const lwcSsr = await (ENGINE_SERVER ? import('@lwc/engine-server') : import('@lwc/ssr-runtime')); - -const ROOT_DIR = path.join(import.meta.dirname, '../..'); - -const context = { - LWC: lwcSsr, - moduleOutput: null, -}; +/** LWC SSR module to use when server-side rendering components. */ +const lwcSsr = await (ENGINE_SERVER + ? // Using import('literal') rather than import(variable) so static analysis tools work + import('@lwc/engine-server') + : import('@lwc/ssr-runtime')); lwcSsr.setHooks({ sanitizeHtmlContent(content) { @@ -19,6 +16,8 @@ lwcSsr.setHooks({ }, }); +const ROOT_DIR = path.join(import.meta.dirname, '../..'); + let guid = 0; const COMPONENT_UNDER_TEST = 'main'; @@ -100,7 +99,7 @@ function throwOnUnexpectedConsoleCalls(runnable, expectedConsoleCalls = {}) { }; } try { - runnable(); + return runnable(); } finally { Object.assign(console, originals); } @@ -117,31 +116,26 @@ function throwOnUnexpectedConsoleCalls(runnable, expectedConsoleCalls = {}) { * So, script runs, generates markup, & we get that markup out and return it for use * in client-side tests. */ -async function getSsrCode(moduleCode, testConfig, filename, expectedSSRConsoleCalls) { +async function getSsrCode(moduleCode, testConfig, filePath, expectedSSRConsoleCalls) { const script = new vm.Script( - // FIXME: Can these IIFEs be converted to ESM imports? - // No, vm.Script doesn't support that. But might be doable with experimental vm.Module - ` - ${testConfig}; - config = config || {}; - ${moduleCode}; - moduleOutput = LWC.renderComponent( + `(() => { + ${testConfig} + ${moduleCode} + return LWC.renderComponent( 'x-${COMPONENT_UNDER_TEST}-${guid++}', Main, config.props || {}, false, 'sync' ); - `, - { filename } + })()`, + { filename: `[SSR] ${filePath}` } ); - throwOnUnexpectedConsoleCalls(() => { - vm.createContext(context); - script.runInContext(context); - }, expectedSSRConsoleCalls); - - return await context.moduleOutput; + return throwOnUnexpectedConsoleCalls( + () => script.runInContext(vm.createContext({ LWC: lwcSsr })), + expectedSSRConsoleCalls + ); } async function getTestConfig(input) { @@ -178,37 +172,27 @@ async function existsUp(dir, file) { * This function wraps those configs in the test code to be executed. */ async function wrapHydrationTest(filePath) { - const suiteDir = path.dirname(filePath); - - // Wrap all the tests into a describe block with the file stricture name - const describeTitle = path.relative(ROOT_DIR, suiteDir).split(path.sep).join(' '); - - const testCode = await getTestConfig(filePath); - - // Create a temporary module to evaluate the bundled code and extract config properties for test configuration - const configModule = new vm.Script(testCode); - const configContext = { config: {} }; - vm.createContext(configContext); - configModule.runInContext(configContext); - const { expectedSSRConsoleCalls, requiredFeatureFlags } = configContext.config; - - requiredFeatureFlags?.forEach((featureFlag) => { - lwcSsr.setFeatureFlagForTest(featureFlag, true); - }); + const { + default: { expectedSSRConsoleCalls, requiredFeatureFlags }, + } = await import(path.join(ROOT_DIR, filePath)); try { + requiredFeatureFlags?.forEach((featureFlag) => { + lwcSsr.setFeatureFlagForTest(featureFlag, true); + }); + + const suiteDir = path.dirname(filePath); // You can add an `.only` file alongside an `index.spec.js` file to make it `fdescribe()` const onlyFileExists = await existsUp(suiteDir, '.only'); - const describeFn = onlyFileExists ? 'describe.only' : 'describe'; const componentDefCSR = await getCompiledModule(suiteDir, false); const componentDefSSR = ENGINE_SERVER ? componentDefCSR : await getCompiledModule(suiteDir, true); const ssrOutput = await getSsrCode( componentDefSSR, - testCode, - path.join(suiteDir, 'ssr.js'), + await getTestConfig(filePath), + filePath, expectedSSRConsoleCalls ); @@ -216,14 +200,13 @@ async function wrapHydrationTest(filePath) { return ` import { runTest } from '/helpers/test-hydrate.js'; import config from '/${filePath}?original=1'; - ${describeFn}("${describeTitle}", () => { - it('test', async () => { - const ssrRendered = ${JSON.stringify(ssrOutput) /* escape quotes */}; - // Component code, IIFE set as Main - ${componentDefCSR}; - return await runTest(ssrRendered, Main, config); - }) - });`; + ${onlyFileExists ? 'it.only' : 'it'}('${filePath}', async () => { + const ssrRendered = ${JSON.stringify(ssrOutput) /* escape quotes */}; + // Component code, IIFE set as Main + ${componentDefCSR}; + return await runTest(ssrRendered, Main, config); + }); + `; } finally { requiredFeatureFlags?.forEach((featureFlag) => { lwcSsr.setFeatureFlagForTest(featureFlag, false); diff --git a/packages/@lwc/integration-not-karma/helpers/options.js b/packages/@lwc/integration-not-karma/helpers/options.js index a18ae6df4a..477f534963 100644 --- a/packages/@lwc/integration-not-karma/helpers/options.js +++ b/packages/@lwc/integration-not-karma/helpers/options.js @@ -26,10 +26,6 @@ export const DISABLE_STATIC_CONTENT_OPTIMIZATION = Boolean( process.env.DISABLE_STATIC_CONTENT_OPTIMIZATION ); -export const ENABLE_SYNTHETIC_SHADOW_IN_HYDRATION = Boolean( - process.env.ENABLE_SYNTHETIC_SHADOW_IN_HYDRATION -); - export const DISABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE = Boolean( process.env.DISABLE_NATIVE_CUSTOM_ELEMENT_LIFECYCLE ); @@ -56,7 +52,6 @@ export const COVERAGE_DIR_FOR_OPTIONS = DISABLE_SYNTHETIC, DISABLE_SYNTHETIC_SHADOW_SUPPORT_IN_COMPILER, ENABLE_ARIA_REFLECTION_GLOBAL_POLYFILL, - ENABLE_SYNTHETIC_SHADOW_IN_HYDRATION, FORCE_NATIVE_SHADOW_MODE_FOR_TEST, LEGACY_BROWSERS, NODE_ENV_FOR_TEST, diff --git a/packages/@lwc/integration-not-karma/test-hydration/synthetic-shadow/index.spec.js b/packages/@lwc/integration-not-karma/test-hydration/synthetic-shadow/index.spec.js index 24177ac54f..7932c8bf9e 100644 --- a/packages/@lwc/integration-not-karma/test-hydration/synthetic-shadow/index.spec.js +++ b/packages/@lwc/integration-not-karma/test-hydration/synthetic-shadow/index.spec.js @@ -22,10 +22,10 @@ export default { expect(child.shadowRoot.synthetic).toBeUndefined(); // sanity check that the env var is working - if (process.env.ENABLE_SYNTHETIC_SHADOW_IN_HYDRATION) { - expect(document.body.attachShadow.toString()).not.toContain('[native code'); - } else { + if (process.env.DISABLE_SYNTHETIC) { expect(document.body.attachShadow.toString()).toContain('[native code'); + } else { + expect(document.body.attachShadow.toString()).not.toContain('[native code'); } expect(consoleCalls.warn).toHaveSize(0); From 7e0d0ce80b06aef24f23785d7de4eff14ce0e539 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Sep 2025 17:56:20 +0000 Subject: [PATCH 20/35] build(deps): bump the theoretically-non-breaking group with 13 updates (#5482) Bumps the theoretically-non-breaking group with 13 updates: | Package | From | To | | --- | --- | --- | | [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) | `9.34.0` | `9.35.0` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `22.18.0` | `22.18.1` | | [eslint](https://github.com/eslint/eslint) | `9.34.0` | `9.35.0` | | [magic-string](https://github.com/rich-harris/magic-string) | `0.30.18` | `0.30.19` | | [rollup](https://github.com/rollup/rollup) | `4.50.0` | `4.50.1` | | [terser](https://github.com/terser/terser) | `5.43.1` | `5.44.0` | | [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.41.0` | `8.42.0` | | [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) | `7.28.3` | `7.28.4` | | [@babel/plugin-transform-object-rest-spread](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-object-rest-spread) | `7.28.0` | `7.28.4` | | [dotenv](https://github.com/motdotla/dotenv) | `17.2.1` | `17.2.2` | | [@rollup/pluginutils](https://github.com/rollup/plugins/tree/HEAD/packages/pluginutils) | `5.2.0` | `5.3.0` | | [@babel/types](https://github.com/babel/babel/tree/HEAD/packages/babel-types) | `7.28.2` | `7.28.4` | | [immer](https://github.com/immerjs/immer) | `10.1.1` | `10.1.3` | Updates `@eslint/js` from 9.34.0 to 9.35.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/commits/v9.35.0/packages/js) Updates `@types/node` from 22.18.0 to 22.18.1 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `eslint` from 9.34.0 to 9.35.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v9.34.0...v9.35.0) Updates `magic-string` from 0.30.18 to 0.30.19 - [Changelog](https://github.com/Rich-Harris/magic-string/blob/master/CHANGELOG.md) - [Commits](https://github.com/rich-harris/magic-string/compare/v0.30.18...v0.30.19) Updates `rollup` from 4.50.0 to 4.50.1 - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v4.50.0...v4.50.1) Updates `terser` from 5.43.1 to 5.44.0 - [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md) - [Commits](https://github.com/terser/terser/compare/v5.43.1...v5.44.0) Updates `typescript-eslint` from 8.41.0 to 8.42.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.42.0/packages/typescript-eslint) Updates `@babel/core` from 7.28.3 to 7.28.4 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.28.4/packages/babel-core) Updates `@babel/plugin-transform-object-rest-spread` from 7.28.0 to 7.28.4 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.28.4/packages/babel-plugin-transform-object-rest-spread) Updates `dotenv` from 17.2.1 to 17.2.2 - [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md) - [Commits](https://github.com/motdotla/dotenv/compare/v17.2.1...v17.2.2) Updates `@rollup/pluginutils` from 5.2.0 to 5.3.0 - [Changelog](https://github.com/rollup/plugins/blob/master/packages/pluginutils/CHANGELOG.md) - [Commits](https://github.com/rollup/plugins/commits/babel-v5.3.0/packages/pluginutils) Updates `@babel/types` from 7.28.2 to 7.28.4 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.28.4/packages/babel-types) Updates `immer` from 10.1.1 to 10.1.3 - [Release notes](https://github.com/immerjs/immer/releases) - [Commits](https://github.com/immerjs/immer/compare/v10.1.1...v10.1.3) --- updated-dependencies: - dependency-name: "@eslint/js" dependency-version: 9.35.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: theoretically-non-breaking - dependency-name: "@types/node" dependency-version: 22.18.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: eslint dependency-version: 9.35.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: theoretically-non-breaking - dependency-name: magic-string dependency-version: 0.30.19 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: rollup dependency-version: 4.50.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: terser dependency-version: 5.44.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: theoretically-non-breaking - dependency-name: typescript-eslint dependency-version: 8.42.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: theoretically-non-breaking - dependency-name: "@babel/core" dependency-version: 7.28.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: "@babel/plugin-transform-object-rest-spread" dependency-version: 7.28.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: dotenv dependency-version: 17.2.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: "@rollup/pluginutils" dependency-version: 5.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: theoretically-non-breaking - dependency-name: "@babel/types" dependency-version: 7.28.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: theoretically-non-breaking - dependency-name: immer dependency-version: 10.1.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: theoretically-non-breaking ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Will Harney <62956339+wjhsf@users.noreply.github.com> --- package.json | 14 +- packages/@lwc/compiler/package.json | 4 +- packages/@lwc/integration-tests/package.json | 2 +- packages/@lwc/integration-types/package.json | 2 +- packages/@lwc/rollup-plugin/package.json | 2 +- packages/@lwc/ssr-compiler/package.json | 4 +- playground/package.json | 2 +- yarn.lock | 627 ++++++++----------- 8 files changed, 289 insertions(+), 368 deletions(-) diff --git a/package.json b/package.json index d0244e77c8..709e755173 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ }, "devDependencies": { "@commitlint/cli": "^19.8.1", - "@eslint/js": "9.34.0", + "@eslint/js": "9.35.0", "@lwc/eslint-plugin-lwc-internal": "link:./scripts/eslint-plugin", "@lwc/test-utils-lwc-internals": "link:./scripts/test-utils", "@nx/js": "21.4.1", @@ -51,13 +51,13 @@ "@swc/core": "~1.13.5", "@swc/helpers": "~0.5.17", "@types/babel__core": "^7.20.5", - "@types/node": "^22.18.0", + "@types/node": "^22.18.1", "@vitest/coverage-v8": "^3.2.4", "@vitest/eslint-plugin": "^1.3.6", "@vitest/ui": "^3.2.4", "bytes": "^3.1.2", "es-module-lexer": "^1.7.0", - "eslint": "9.34.0", + "eslint": "9.35.0", "eslint-config-flat-gitignore": "^2.1.0", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.32.0", @@ -67,14 +67,14 @@ "isbinaryfile": "^5.0.6", "jsdom": "^26.1.0", "lint-staged": "^16.1.6", - "magic-string": "^0.30.18", + "magic-string": "^0.30.19", "nx": "21.4.1", "prettier": "^3.6.2", - "rollup": "^4.50.0", - "terser": "^5.43.1", + "rollup": "^4.50.1", + "terser": "^5.44.0", "tslib": "^2.8.1", "typescript": "5.8.2", - "typescript-eslint": "8.41.0", + "typescript-eslint": "8.42.0", "vitest": "^3.2.4" }, "lint-staged": { diff --git a/packages/@lwc/compiler/package.json b/packages/@lwc/compiler/package.json index f5af5138a5..6c4e443b00 100644 --- a/packages/@lwc/compiler/package.json +++ b/packages/@lwc/compiler/package.json @@ -46,11 +46,11 @@ } }, "dependencies": { - "@babel/core": "7.28.3", + "@babel/core": "7.28.4", "@babel/plugin-transform-async-generator-functions": "7.28.0", "@babel/plugin-transform-async-to-generator": "7.27.1", "@babel/plugin-transform-class-properties": "7.27.1", - "@babel/plugin-transform-object-rest-spread": "7.28.0", + "@babel/plugin-transform-object-rest-spread": "7.28.4", "@locker/babel-plugin-transform-unforgeables": "0.22.0", "@lwc/babel-plugin-component": "8.21.6", "@lwc/errors": "8.21.6", diff --git a/packages/@lwc/integration-tests/package.json b/packages/@lwc/integration-tests/package.json index 68578fdb10..c7b16ac571 100644 --- a/packages/@lwc/integration-tests/package.json +++ b/packages/@lwc/integration-tests/package.json @@ -26,7 +26,7 @@ "@wdio/spec-reporter": "^9.17.0", "@wdio/static-server-service": "^9.16.2", "deepmerge": "^4.3.1", - "dotenv": "^17.2.1", + "dotenv": "^17.2.2", "lwc": "8.21.6", "minimist": "^1.2.8", "webdriverio": "^9.0.7" diff --git a/packages/@lwc/integration-types/package.json b/packages/@lwc/integration-types/package.json index 1d0920681e..3d76f8ca25 100644 --- a/packages/@lwc/integration-types/package.json +++ b/packages/@lwc/integration-types/package.json @@ -15,7 +15,7 @@ "devDependencies": { "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-typescript": "^12.1.4", - "rollup": "^4.50.0", + "rollup": "^4.50.1", "rollup-plugin-livereload": "^2.0.5", "rollup-plugin-serve": "^3.0.0" } diff --git a/packages/@lwc/rollup-plugin/package.json b/packages/@lwc/rollup-plugin/package.json index a9f80762ae..684f346e97 100644 --- a/packages/@lwc/rollup-plugin/package.json +++ b/packages/@lwc/rollup-plugin/package.json @@ -49,7 +49,7 @@ "@lwc/compiler": "8.21.6", "@lwc/module-resolver": "8.21.6", "@lwc/shared": "8.21.6", - "@rollup/pluginutils": "~5.2.0" + "@rollup/pluginutils": "~5.3.0" }, "devDependencies": { "@lwc/errors": "8.21.6" diff --git a/packages/@lwc/ssr-compiler/package.json b/packages/@lwc/ssr-compiler/package.json index ed425826c3..a1954bcc84 100644 --- a/packages/@lwc/ssr-compiler/package.json +++ b/packages/@lwc/ssr-compiler/package.json @@ -48,14 +48,14 @@ } }, "dependencies": { - "@babel/types": "7.28.2", + "@babel/types": "7.28.4", "@lwc/errors": "8.21.6", "@lwc/shared": "8.21.6", "@lwc/template-compiler": "8.21.6", "acorn": "8.15.0", "astring": "^1.9.0", "estree-toolkit": "^1.7.13", - "immer": "^10.1.1", + "immer": "^10.1.3", "meriyah": "^5.0.0" }, "devDependencies": { diff --git a/playground/package.json b/playground/package.json index af2a5aa32f..24662de594 100644 --- a/playground/package.json +++ b/playground/package.json @@ -13,7 +13,7 @@ "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-typescript": "^12.1.4", "lwc": "8.21.6", - "rollup": "^4.50.0", + "rollup": "^4.50.1", "rollup-plugin-livereload": "^2.0.5", "rollup-plugin-serve": "^3.0.0", "tslib": "^2.8.1" diff --git a/yarn.lock b/yarn.lock index 50369722c0..6b7b3cef90 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.3.0": +"@ampproject/remapping@^2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== @@ -40,21 +40,21 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.0.tgz#9fc6fd58c2a6a15243cd13983224968392070790" integrity sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw== -"@babel/core@7.28.3", "@babel/core@^7.12.3", "@babel/core@^7.23.2": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.3.tgz#aceddde69c5d1def69b839d09efa3e3ff59c97cb" - integrity sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ== +"@babel/core@7.28.4", "@babel/core@^7.12.3", "@babel/core@^7.23.2": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.4.tgz#12a550b8794452df4c8b084f95003bce1742d496" + integrity sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA== dependencies: - "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.27.1" "@babel/generator" "^7.28.3" "@babel/helper-compilation-targets" "^7.27.2" "@babel/helper-module-transforms" "^7.28.3" - "@babel/helpers" "^7.28.3" - "@babel/parser" "^7.28.3" + "@babel/helpers" "^7.28.4" + "@babel/parser" "^7.28.4" "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.3" - "@babel/types" "^7.28.2" + "@babel/traverse" "^7.28.4" + "@babel/types" "^7.28.4" + "@jridgewell/remapping" "^2.3.5" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -213,12 +213,7 @@ dependencies: "@babel/types" "^7.27.1" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" - integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== - -"@babel/helper-plugin-utils@^7.27.1": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5", "@babel/helper-plugin-utils@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== @@ -280,12 +275,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== - -"@babel/helper-validator-identifier@^7.27.1": +"@babel/helper-validator-identifier@^7.25.9", "@babel/helper-validator-identifier@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== @@ -318,20 +308,20 @@ "@babel/traverse" "^7.27.1" "@babel/types" "^7.27.1" -"@babel/helpers@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.3.tgz#b83156c0a2232c133d1b535dd5d3452119c7e441" - integrity sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw== +"@babel/helpers@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827" + integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== dependencies: "@babel/template" "^7.27.2" - "@babel/types" "^7.28.2" + "@babel/types" "^7.28.4" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.4", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.4.5": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.3.tgz#d2d25b814621bca5fe9d172bc93792547e7a2a71" - integrity sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.4", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.28.4", "@babel/parser@^7.4.5": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.4.tgz#da25d4643532890932cc03f7705fe19637e03fa8" + integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg== dependencies: - "@babel/types" "^7.28.2" + "@babel/types" "^7.28.4" "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": version "7.25.9" @@ -522,14 +512,7 @@ "@babel/helper-plugin-utils" "^7.25.9" "@babel/template" "^7.25.9" -"@babel/plugin-transform-destructuring@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" - integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-destructuring@^7.28.0": +"@babel/plugin-transform-destructuring@^7.25.9", "@babel/plugin-transform-destructuring@^7.28.0": version "7.28.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz#0f156588f69c596089b7d5b06f5af83d9aa7f97a" integrity sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A== @@ -689,25 +672,16 @@ dependencies: "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-object-rest-spread@7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz#d23021857ffd7cd809f54d624299b8086402ed8d" - integrity sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA== +"@babel/plugin-transform-object-rest-spread@7.28.4", "@babel/plugin-transform-object-rest-spread@^7.25.9": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz#9ee1ceca80b3e6c4bac9247b2149e36958f7f98d" + integrity sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew== dependencies: "@babel/helper-compilation-targets" "^7.27.2" "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-destructuring" "^7.28.0" "@babel/plugin-transform-parameters" "^7.27.7" - "@babel/traverse" "^7.28.0" - -"@babel/plugin-transform-object-rest-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" - integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== - dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/traverse" "^7.28.4" "@babel/plugin-transform-object-super@^7.25.9": version "7.25.9" @@ -732,14 +706,7 @@ "@babel/helper-plugin-utils" "^7.25.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-parameters@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" - integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-parameters@^7.27.7": +"@babel/plugin-transform-parameters@^7.25.9", "@babel/plugin-transform-parameters@^7.27.7": version "7.27.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz#1fd2febb7c74e7d21cf3b05f7aebc907940af53a" integrity sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg== @@ -994,23 +961,23 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse@^7.16.0", "@babel/traverse@^7.25.9", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.4.5": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.3.tgz#6911a10795d2cce43ec6a28cffc440cca2593434" - integrity sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ== +"@babel/traverse@^7.16.0", "@babel/traverse@^7.25.9", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.4.5": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.4.tgz#8d456101b96ab175d487249f60680221692b958b" + integrity sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ== dependencies: "@babel/code-frame" "^7.27.1" "@babel/generator" "^7.28.3" "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.28.3" + "@babel/parser" "^7.28.4" "@babel/template" "^7.27.2" - "@babel/types" "^7.28.2" + "@babel/types" "^7.28.4" debug "^4.3.1" -"@babel/types@7.28.2", "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.25.4", "@babel/types@^7.25.9", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.4.4": - version "7.28.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.2.tgz#da9db0856a9a88e0a13b019881d7513588cf712b" - integrity sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ== +"@babel/types@7.28.4", "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.10", "@babel/types@^7.25.4", "@babel/types@^7.25.9", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.4.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.4.tgz#0a4e618f4c60a7cd6c11cb2d48060e4dbe38ac3a" + integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q== dependencies: "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" @@ -1702,10 +1669,10 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz#7d79922cb2d88f9048f06393dbf62d2e4accb584" integrity sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg== -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.7.0": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a" - integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw== +"@eslint-community/eslint-utils@^4.7.0", "@eslint-community/eslint-utils@^4.8.0": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3" + integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== dependencies: eslint-visitor-keys "^3.4.3" @@ -1755,10 +1722,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.34.0": - version "9.34.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.34.0.tgz#fc423168b9d10e08dea9088d083788ec6442996b" - integrity sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw== +"@eslint/js@9.35.0": + version "9.35.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.35.0.tgz#ffbc7e13cf1204db18552e9cd9d4a8e17c692d07" + integrity sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw== "@eslint/object-schema@^2.1.6": version "2.1.6" @@ -2053,6 +2020,14 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.24" +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" @@ -2114,11 +2089,9 @@ "@lwc/eslint-plugin-lwc-internal@link:./scripts/eslint-plugin": version "0.0.0" - uid "" "@lwc/test-utils-lwc-internals@link:./scripts/test-utils": version "0.0.0" - uid "" "@napi-rs/wasm-runtime@0.2.4": version "0.2.4" @@ -2648,128 +2621,119 @@ resolved "https://registry.yarnpkg.com/@rollup/plugin-virtual/-/plugin-virtual-3.0.2.tgz#17e17eeecb4c9fa1c0a6e72c9e5f66382fddbb82" integrity sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A== -"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.1.0": - version "5.1.4" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz#bb94f1f9eaaac944da237767cdfee6c5b2262d4a" - integrity sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^2.0.2" - picomatch "^4.0.2" - -"@rollup/pluginutils@~5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.2.0.tgz#eac25ca5b0bdda4ba735ddaca5fbf26bd435f602" - integrity sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw== +"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.1.0", "@rollup/pluginutils@~5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.3.0.tgz#57ba1b0cbda8e7a3c597a4853c807b156e21a7b4" + integrity sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q== dependencies: "@types/estree" "^1.0.0" estree-walker "^2.0.2" picomatch "^4.0.2" -"@rollup/rollup-android-arm-eabi@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.0.tgz#939c1be9625d428d8513e4ab60d406fe8db23718" - integrity sha512-lVgpeQyy4fWN5QYebtW4buT/4kn4p4IJ+kDNB4uYNT5b8c8DLJDg6titg20NIg7E8RWwdWZORW6vUFfrLyG3KQ== - -"@rollup/rollup-android-arm64@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.0.tgz#b74005775903f7a8f4e363d2840c1dcef3776ff3" - integrity sha512-2O73dR4Dc9bp+wSYhviP6sDziurB5/HCym7xILKifWdE9UsOe2FtNcM+I4xZjKrfLJnq5UR8k9riB87gauiQtw== - -"@rollup/rollup-darwin-arm64@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.0.tgz#8c04603cdcf1ec0cd6b27152b3827e49295f2962" - integrity sha512-vwSXQN8T4sKf1RHr1F0s98Pf8UPz7pS6P3LG9NSmuw0TVh7EmaE+5Ny7hJOZ0M2yuTctEsHHRTMi2wuHkdS6Hg== - -"@rollup/rollup-darwin-x64@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.0.tgz#19ec976f1cc663def2692cd7ffb32981f2b0b733" - integrity sha512-cQp/WG8HE7BCGyFVuzUg0FNmupxC+EPZEwWu2FCGGw5WDT1o2/YlENbm5e9SMvfDFR6FRhVCBePLqj0o8MN7Vw== - -"@rollup/rollup-freebsd-arm64@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.0.tgz#a96b4ad8346229f6fcbd9d57f1c53040b037c2da" - integrity sha512-UR1uTJFU/p801DvvBbtDD7z9mQL8J80xB0bR7DqW7UGQHRm/OaKzp4is7sQSdbt2pjjSS72eAtRh43hNduTnnQ== - -"@rollup/rollup-freebsd-x64@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.0.tgz#fa565a282bc57967ee6668607b181678bdd74e4a" - integrity sha512-G/DKyS6PK0dD0+VEzH/6n/hWDNPDZSMBmqsElWnCRGrYOb2jC0VSupp7UAHHQ4+QILwkxSMaYIbQ72dktp8pKA== - -"@rollup/rollup-linux-arm-gnueabihf@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.0.tgz#dfc88f7295e1f98d77f25296be787e8a5d6ced75" - integrity sha512-u72Mzc6jyJwKjJbZZcIYmd9bumJu7KNmHYdue43vT1rXPm2rITwmPWF0mmPzLm9/vJWxIRbao/jrQmxTO0Sm9w== - -"@rollup/rollup-linux-arm-musleabihf@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.0.tgz#32cd70c87455ca031f0361090cf17da5a2ef66d5" - integrity sha512-S4UefYdV0tnynDJV1mdkNawp0E5Qm2MtSs330IyHgaccOFrwqsvgigUD29uT+B/70PDY1eQ3t40+xf6wIvXJyg== - -"@rollup/rollup-linux-arm64-gnu@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.0.tgz#0e7e1fe7241e3384f6c6b4ccdbcfa8ad8c78b869" - integrity sha512-1EhkSvUQXJsIhk4msxP5nNAUWoB4MFDHhtc4gAYvnqoHlaL9V3F37pNHabndawsfy/Tp7BPiy/aSa6XBYbaD1g== - -"@rollup/rollup-linux-arm64-musl@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.0.tgz#5d421f2f3e4a84786c4dfd9ce97e595c9b59e7f4" - integrity sha512-EtBDIZuDtVg75xIPIK1l5vCXNNCIRM0OBPUG+tbApDuJAy9mKago6QxX+tfMzbCI6tXEhMuZuN1+CU8iDW+0UQ== - -"@rollup/rollup-linux-loongarch64-gnu@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.0.tgz#a0fb5c7d0e88319e18acfd9436f19ee39354b027" - integrity sha512-BGYSwJdMP0hT5CCmljuSNx7+k+0upweM2M4YGfFBjnFSZMHOLYR0gEEj/dxyYJ6Zc6AiSeaBY8dWOa11GF/ppQ== - -"@rollup/rollup-linux-ppc64-gnu@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.0.tgz#a65b598af12f25210c3295da551a6e3616ea488d" - integrity sha512-I1gSMzkVe1KzAxKAroCJL30hA4DqSi+wGc5gviD0y3IL/VkvcnAqwBf4RHXHyvH66YVHxpKO8ojrgc4SrWAnLg== - -"@rollup/rollup-linux-riscv64-gnu@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.0.tgz#10ba776214ae2857c5bf4389690dabb2fbaf7d98" - integrity sha512-bSbWlY3jZo7molh4tc5dKfeSxkqnf48UsLqYbUhnkdnfgZjgufLS/NTA8PcP/dnvct5CCdNkABJ56CbclMRYCA== - -"@rollup/rollup-linux-riscv64-musl@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.0.tgz#c2a46cbaa329d5f21e5808f5a66bb9c78cf68aac" - integrity sha512-LSXSGumSURzEQLT2e4sFqFOv3LWZsEF8FK7AAv9zHZNDdMnUPYH3t8ZlaeYYZyTXnsob3htwTKeWtBIkPV27iQ== - -"@rollup/rollup-linux-s390x-gnu@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.0.tgz#a07447be069d64462e30c66611be20c4513963ed" - integrity sha512-CxRKyakfDrsLXiCyucVfVWVoaPA4oFSpPpDwlMcDFQvrv3XY6KEzMtMZrA+e/goC8xxp2WSOxHQubP8fPmmjOQ== - -"@rollup/rollup-linux-x64-gnu@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.0.tgz#8887c58bd51242754ae9c56947d6e883332dcc74" - integrity sha512-8PrJJA7/VU8ToHVEPu14FzuSAqVKyo5gg/J8xUerMbyNkWkO9j2ExBho/68RnJsMGNJq4zH114iAttgm7BZVkA== - -"@rollup/rollup-linux-x64-musl@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.0.tgz#6403fda72a2b3b9fbbeeff93d14f1c45ef9775f3" - integrity sha512-SkE6YQp+CzpyOrbw7Oc4MgXFvTw2UIBElvAvLCo230pyxOLmYwRPwZ/L5lBe/VW/qT1ZgND9wJfOsdy0XptRvw== - -"@rollup/rollup-openharmony-arm64@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.0.tgz#52809afccaff47e731b965a0c16e5686be819d5f" - integrity sha512-PZkNLPfvXeIOgJWA804zjSFH7fARBBCpCXxgkGDRjjAhRLOR8o0IGS01ykh5GYfod4c2yiiREuDM8iZ+pVsT+Q== - -"@rollup/rollup-win32-arm64-msvc@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.0.tgz#23fe00ddbb40b27a3889bc1e99e6310d97353ad5" - integrity sha512-q7cIIdFvWQoaCbLDUyUc8YfR3Jh2xx3unO8Dn6/TTogKjfwrax9SyfmGGK6cQhKtjePI7jRfd7iRYcxYs93esg== - -"@rollup/rollup-win32-ia32-msvc@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.0.tgz#520b588076b593413d919912d69dfd5728a1f305" - integrity sha512-XzNOVg/YnDOmFdDKcxxK410PrcbcqZkBmz+0FicpW5jtjKQxcW1BZJEQOF0NJa6JO7CZhett8GEtRN/wYLYJuw== - -"@rollup/rollup-win32-x64-msvc@4.50.0": - version "4.50.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.0.tgz#d81efe6a12060c7feddf9805e2a94c3ab0679f48" - integrity sha512-xMmiWRR8sp72Zqwjgtf3QbZfF1wdh8X2ABu3EaozvZcyHJeU0r+XAnXdKgs4cCAp6ORoYoCygipYP1mjmbjrsg== +"@rollup/rollup-android-arm-eabi@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.1.tgz#7d41dc45adcfcb272504ebcea9c8a5b2c659e963" + integrity sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag== + +"@rollup/rollup-android-arm64@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.1.tgz#6c708fae2c9755e994c42d56c34a94cb77020650" + integrity sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw== + +"@rollup/rollup-darwin-arm64@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.1.tgz#85ccf92ab114e434c83037a175923a525635cbb4" + integrity sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw== + +"@rollup/rollup-darwin-x64@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.1.tgz#0af089f3d658d05573208dabb3a392b44d7f4630" + integrity sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw== + +"@rollup/rollup-freebsd-arm64@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.1.tgz#46c22a16d18180e99686647543335567221caa9c" + integrity sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA== + +"@rollup/rollup-freebsd-x64@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.1.tgz#819ffef2f81891c266456952962a13110c8e28b5" + integrity sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ== + +"@rollup/rollup-linux-arm-gnueabihf@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.1.tgz#7fe283c14793e607e653a3214b09f8973f08262a" + integrity sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg== + +"@rollup/rollup-linux-arm-musleabihf@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.1.tgz#066e92eb22ea30560414ec800a6d119ba0b435ac" + integrity sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw== + +"@rollup/rollup-linux-arm64-gnu@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.1.tgz#480d518ea99a8d97b2a174c46cd55164f138cc37" + integrity sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw== + +"@rollup/rollup-linux-arm64-musl@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.1.tgz#ed7db3b8999b60dd20009ddf71c95f3af49423c8" + integrity sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w== + +"@rollup/rollup-linux-loongarch64-gnu@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.1.tgz#16a6927a35f5dbc505ff874a4e1459610c0c6f46" + integrity sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q== + +"@rollup/rollup-linux-ppc64-gnu@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.1.tgz#a006700469be0041846c45b494c35754e6a04eea" + integrity sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q== + +"@rollup/rollup-linux-riscv64-gnu@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.1.tgz#0fcc45b2ec8a0e54218ca48849ea6d596f53649c" + integrity sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ== + +"@rollup/rollup-linux-riscv64-musl@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.1.tgz#d6e617eec9fe6f5859ee13fad435a16c42b469f2" + integrity sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg== + +"@rollup/rollup-linux-s390x-gnu@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.1.tgz#b147760d63c6f35b4b18e6a25a2a760dd3ea0c05" + integrity sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg== + +"@rollup/rollup-linux-x64-gnu@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.1.tgz#fc0be1da374f85e7e85dccaf1ff12d7cfc9fbe3d" + integrity sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA== + +"@rollup/rollup-linux-x64-musl@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.1.tgz#54c79932e0f9a3c992b034c82325be3bcde0d067" + integrity sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg== + +"@rollup/rollup-openharmony-arm64@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.1.tgz#fc48e74d413623ac02c1d521bec3e5e784488fdc" + integrity sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA== + +"@rollup/rollup-win32-arm64-msvc@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.1.tgz#8ce3d1181644406362cf1e62c90e88ab083e02bb" + integrity sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ== + +"@rollup/rollup-win32-ia32-msvc@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.1.tgz#dd2dfc896eac4b2689d55f01c6d51c249263f805" + integrity sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A== + +"@rollup/rollup-win32-x64-msvc@4.50.1": + version "4.50.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.1.tgz#13f758c97b9fbbac56b6928547a3ff384e7cfb3e" + integrity sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA== "@rtsao/scc@^1.1.0": version "1.1.0" @@ -3202,16 +3166,6 @@ resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.9.tgz#9f00abff2a17687e675ce6669e7b53c9e7d145f0" integrity sha512-8t4HtkW4wxiPVedMpeZ63n3vlWxEIquo/zc1Tm8ElU+SqVV7+D3Na2PWaJUp179AzTragMWVwkMv7mvty0NfyQ== -"@types/jasmine@^5.1.9": - version "5.1.9" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.9.tgz#9f00abff2a17687e675ce6669e7b53c9e7d145f0" - integrity sha512-8t4HtkW4wxiPVedMpeZ63n3vlWxEIquo/zc1Tm8ElU+SqVV7+D3Na2PWaJUp179AzTragMWVwkMv7mvty0NfyQ== - -"@types/jasmine@^5.1.9": - version "5.1.9" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.9.tgz#9f00abff2a17687e675ce6669e7b53c9e7d145f0" - integrity sha512-8t4HtkW4wxiPVedMpeZ63n3vlWxEIquo/zc1Tm8ElU+SqVV7+D3Na2PWaJUp179AzTragMWVwkMv7mvty0NfyQ== - "@types/json-schema@^7.0.15": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" @@ -3270,10 +3224,10 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.10.tgz#91f62905e8d23cbd66225312f239454a23bebfa0" integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q== -"@types/node@*", "@types/node@>= 8", "@types/node@>=10.0.0", "@types/node@^22.18.0": - version "22.18.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.0.tgz#9e4709be4f104e3568f7dd1c71e2949bf147a47b" - integrity sha512-m5ObIqwsUp6BZzyiy4RdZpzWGub9bqLJMvZDD0QMXhxjqMHMENlj+SqF5QxoUwaQNFe+8kz8XM8ZQhqkQPTgMQ== +"@types/node@*", "@types/node@>= 8", "@types/node@>=10.0.0", "@types/node@^22.18.1": + version "22.18.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.1.tgz#cc85ee6999b2a2928739281d2f56ff410a140c52" + integrity sha512-rzSDyhn4cYznVG+PCzGe1lwuMYJrcBS1fc3JqSa2PvtABwWo+dZ1ij5OVok3tqfpEBCBoaR4d7upFJk73HRJDw== dependencies: undici-types "~6.21.0" @@ -3416,50 +3370,42 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.41.0.tgz#42209e2ce3e2274de0f5f9b75c777deedacaa558" - integrity sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw== +"@typescript-eslint/eslint-plugin@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.42.0.tgz#2172d0496c42eee8c7294b6661681100953fa88f" + integrity sha512-Aq2dPqsQkxHOLfb2OPv43RnIvfj05nw8v/6n3B2NABIPpHnjQnaLo9QGMTvml+tv4korl/Cjfrb/BYhoL8UUTQ== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.41.0" - "@typescript-eslint/type-utils" "8.41.0" - "@typescript-eslint/utils" "8.41.0" - "@typescript-eslint/visitor-keys" "8.41.0" + "@typescript-eslint/scope-manager" "8.42.0" + "@typescript-eslint/type-utils" "8.42.0" + "@typescript-eslint/utils" "8.42.0" + "@typescript-eslint/visitor-keys" "8.42.0" graphemer "^1.4.0" ignore "^7.0.0" natural-compare "^1.4.0" ts-api-utils "^2.1.0" -"@typescript-eslint/parser@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.41.0.tgz#677f5b2b3fa947ee1eac4129220c051b1990d898" - integrity sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg== +"@typescript-eslint/parser@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.42.0.tgz#20ea66f4867981fb5bb62cbe1454250fc4a440ab" + integrity sha512-r1XG74QgShUgXph1BYseJ+KZd17bKQib/yF3SR+demvytiRXrwd12Blnz5eYGm8tXaeRdd4x88MlfwldHoudGg== dependencies: - "@typescript-eslint/scope-manager" "8.41.0" - "@typescript-eslint/types" "8.41.0" - "@typescript-eslint/typescript-estree" "8.41.0" - "@typescript-eslint/visitor-keys" "8.41.0" + "@typescript-eslint/scope-manager" "8.42.0" + "@typescript-eslint/types" "8.42.0" + "@typescript-eslint/typescript-estree" "8.42.0" + "@typescript-eslint/visitor-keys" "8.42.0" debug "^4.3.4" -"@typescript-eslint/project-service@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.41.0.tgz#08ebf882d413a038926e73fda36e00c3dba84882" - integrity sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ== +"@typescript-eslint/project-service@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.42.0.tgz#636eb3418b6c42c98554dce884943708bf41a583" + integrity sha512-vfVpLHAhbPjilrabtOSNcUDmBboQNrJUiNAGoImkZKnMjs2TIcWG33s4Ds0wY3/50aZmTMqJa6PiwkwezaAklg== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.41.0" - "@typescript-eslint/types" "^8.41.0" + "@typescript-eslint/tsconfig-utils" "^8.42.0" + "@typescript-eslint/types" "^8.42.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.41.0.tgz#c8aba12129cb9cead1f1727f58e6a0fcebeecdb5" - integrity sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ== - dependencies: - "@typescript-eslint/types" "8.41.0" - "@typescript-eslint/visitor-keys" "8.41.0" - -"@typescript-eslint/scope-manager@^8.41.0": +"@typescript-eslint/scope-manager@8.42.0", "@typescript-eslint/scope-manager@^8.41.0": version "8.42.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.42.0.tgz#36016757bc85b46ea42bae47b61f9421eddedde3" integrity sha512-51+x9o78NBAVgQzOPd17DkNTnIzJ8T/O2dmMBLoK9qbY0Gm52XJcdJcCl18ExBMiHo6jPMErUQWUv5RLE51zJw== @@ -3467,41 +3413,36 @@ "@typescript-eslint/types" "8.42.0" "@typescript-eslint/visitor-keys" "8.42.0" -"@typescript-eslint/tsconfig-utils@8.41.0", "@typescript-eslint/tsconfig-utils@^8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.41.0.tgz#134dee36eb16cdd78095a20bca0516d10b5dda75" - integrity sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw== +"@typescript-eslint/tsconfig-utils@8.42.0", "@typescript-eslint/tsconfig-utils@^8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.42.0.tgz#21a3e74396fd7443ff930bc41b27789ba7e9236e" + integrity sha512-kHeFUOdwAJfUmYKjR3CLgZSglGHjbNTi1H8sTYRYV2xX6eNz4RyJ2LIgsDLKf8Yi0/GL1WZAC/DgZBeBft8QAQ== -"@typescript-eslint/type-utils@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.41.0.tgz#68d401e38fccf239925447e97bdbd048a9891ae5" - integrity sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ== +"@typescript-eslint/type-utils@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.42.0.tgz#d6733e7a9fbdf5af60c09c6038dffde13f4e4253" + integrity sha512-9KChw92sbPTYVFw3JLRH1ockhyR3zqqn9lQXol3/YbI6jVxzWoGcT3AsAW0mu1MY0gYtsXnUGV/AKpkAj5tVlQ== dependencies: - "@typescript-eslint/types" "8.41.0" - "@typescript-eslint/typescript-estree" "8.41.0" - "@typescript-eslint/utils" "8.41.0" + "@typescript-eslint/types" "8.42.0" + "@typescript-eslint/typescript-estree" "8.42.0" + "@typescript-eslint/utils" "8.42.0" debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@8.41.0", "@typescript-eslint/types@^8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.41.0.tgz#9935afeaae65e535abcbcee95383fa649c64d16d" - integrity sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag== - -"@typescript-eslint/types@8.42.0": +"@typescript-eslint/types@8.42.0", "@typescript-eslint/types@^8.42.0": version "8.42.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.42.0.tgz#ae15c09cebda20473772902033328e87372db008" integrity sha512-LdtAWMiFmbRLNP7JNeY0SqEtJvGMYSzfiWBSmx+VSZ1CH+1zyl8Mmw1TT39OrtsRvIYShjJWzTDMPWZJCpwBlw== -"@typescript-eslint/typescript-estree@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.41.0.tgz#7c9cff8b4334ce96f14e9689692e8cf426ce4d59" - integrity sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ== +"@typescript-eslint/typescript-estree@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.42.0.tgz#593c3af87d4462252c0d7239d1720b84a1b56864" + integrity sha512-ku/uYtT4QXY8sl9EDJETD27o3Ewdi72hcXg1ah/kkUgBvAYHLwj2ofswFFNXS+FL5G+AGkxBtvGt8pFBHKlHsQ== dependencies: - "@typescript-eslint/project-service" "8.41.0" - "@typescript-eslint/tsconfig-utils" "8.41.0" - "@typescript-eslint/types" "8.41.0" - "@typescript-eslint/visitor-keys" "8.41.0" + "@typescript-eslint/project-service" "8.42.0" + "@typescript-eslint/tsconfig-utils" "8.42.0" + "@typescript-eslint/types" "8.42.0" + "@typescript-eslint/visitor-keys" "8.42.0" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" @@ -3509,23 +3450,15 @@ semver "^7.6.0" ts-api-utils "^2.1.0" -"@typescript-eslint/utils@8.41.0", "@typescript-eslint/utils@^8.24.1": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.41.0.tgz#17cb3b766c1626311004ea41ffd8c27eb226b953" - integrity sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A== +"@typescript-eslint/utils@8.42.0", "@typescript-eslint/utils@^8.24.1": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.42.0.tgz#95f8e0c697ff2f7da5f72e16135011f878d815c0" + integrity sha512-JnIzu7H3RH5BrKC4NoZqRfmjqCIS1u3hGZltDYJgkVdqAezl4L9d1ZLw+36huCujtSBSAirGINF/S4UxOcR+/g== dependencies: "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.41.0" - "@typescript-eslint/types" "8.41.0" - "@typescript-eslint/typescript-estree" "8.41.0" - -"@typescript-eslint/visitor-keys@8.41.0": - version "8.41.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.41.0.tgz#16eb99b55d207f6688002a2cf425e039579aa9a9" - integrity sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg== - dependencies: - "@typescript-eslint/types" "8.41.0" - eslint-visitor-keys "^4.2.1" + "@typescript-eslint/scope-manager" "8.42.0" + "@typescript-eslint/types" "8.42.0" + "@typescript-eslint/typescript-estree" "8.42.0" "@typescript-eslint/visitor-keys@8.42.0": version "8.42.0" @@ -4198,11 +4131,6 @@ acorn@8.15.0, acorn@^8.15.0, acorn@~8.15.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== -acorn@^8.14.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" - integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== - address@^1.0.1: version "1.2.2" resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" @@ -6295,10 +6223,10 @@ dotenv@^16.4.5: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692" integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg== -dotenv@^17.2.0, dotenv@^17.2.1: - version "17.2.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.2.1.tgz#6f32e10faf014883515538dc922a0fb8765d9b32" - integrity sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ== +dotenv@^17.2.0, dotenv@^17.2.2: + version "17.2.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.2.2.tgz#4010cfe1c2be4fc0f46fd3d951afb424bc067ac6" + integrity sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q== dotenv@~16.4.5: version "16.4.7" @@ -6911,18 +6839,18 @@ eslint-visitor-keys@^4.2.1: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== -eslint@9.34.0: - version "9.34.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.34.0.tgz#0ea1f2c1b5d1671db8f01aa6b8ce722302016f7b" - integrity sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg== +eslint@9.35.0: + version "9.35.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.35.0.tgz#7a89054b7b9ee1dfd1b62035d8ce75547773f47e" + integrity sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg== dependencies: - "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/eslint-utils" "^4.8.0" "@eslint-community/regexpp" "^4.12.1" "@eslint/config-array" "^0.21.0" "@eslint/config-helpers" "^0.3.1" "@eslint/core" "^0.15.2" "@eslint/eslintrc" "^3.3.1" - "@eslint/js" "9.34.0" + "@eslint/js" "9.35.0" "@eslint/plugin-kit" "^0.3.5" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" @@ -8426,10 +8354,10 @@ immediate@~3.0.5: resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== -immer@^10.1.1: - version "10.1.1" - resolved "https://registry.yarnpkg.com/immer/-/immer-10.1.1.tgz#206f344ea372d8ea176891545ee53ccc062db7bc" - integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw== +immer@^10.1.3: + version "10.1.3" + resolved "https://registry.yarnpkg.com/immer/-/immer-10.1.3.tgz#e38a0b97db59949d31d9b381b04c2e441b1c3747" + integrity sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw== import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" @@ -9954,10 +9882,10 @@ macos-release@^2.2.0: resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.5.1.tgz#bccac4a8f7b93163a8d163b8ebf385b3c5f55bf9" integrity sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A== -magic-string@^0.30.12, magic-string@^0.30.17, magic-string@^0.30.18, magic-string@^0.30.3: - version "0.30.18" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.18.tgz#905bfbbc6aa5692703a93db26a9edcaa0007d2bb" - integrity sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ== +magic-string@^0.30.12, magic-string@^0.30.17, magic-string@^0.30.19, magic-string@^0.30.3: + version "0.30.19" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.19.tgz#cebe9f104e565602e5d2098c5f2e79a77cc86da9" + integrity sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw== dependencies: "@jridgewell/sourcemap-codec" "^1.5.5" @@ -12079,34 +12007,34 @@ rollup-plugin-serve@^3.0.0: mime "^4" opener "1" -rollup@^4.28.0, rollup@^4.4.0, rollup@^4.40.0, rollup@^4.50.0: - version "4.50.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.50.0.tgz#6f237f598b7163ede33ce827af8534c929aaa186" - integrity sha512-/Zl4D8zPifNmyGzJS+3kVoyXeDeT/GrsJM94sACNg9RtUE0hrHa1bNPtRSrfHTMH5HjRzce6K7rlTh3Khiw+pw== +rollup@^4.28.0, rollup@^4.4.0, rollup@^4.40.0, rollup@^4.50.1: + version "4.50.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.50.1.tgz#6f0717c34aacc65cc727eeaaaccc2afc4e4485fd" + integrity sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA== dependencies: "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.50.0" - "@rollup/rollup-android-arm64" "4.50.0" - "@rollup/rollup-darwin-arm64" "4.50.0" - "@rollup/rollup-darwin-x64" "4.50.0" - "@rollup/rollup-freebsd-arm64" "4.50.0" - "@rollup/rollup-freebsd-x64" "4.50.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.50.0" - "@rollup/rollup-linux-arm-musleabihf" "4.50.0" - "@rollup/rollup-linux-arm64-gnu" "4.50.0" - "@rollup/rollup-linux-arm64-musl" "4.50.0" - "@rollup/rollup-linux-loongarch64-gnu" "4.50.0" - "@rollup/rollup-linux-ppc64-gnu" "4.50.0" - "@rollup/rollup-linux-riscv64-gnu" "4.50.0" - "@rollup/rollup-linux-riscv64-musl" "4.50.0" - "@rollup/rollup-linux-s390x-gnu" "4.50.0" - "@rollup/rollup-linux-x64-gnu" "4.50.0" - "@rollup/rollup-linux-x64-musl" "4.50.0" - "@rollup/rollup-openharmony-arm64" "4.50.0" - "@rollup/rollup-win32-arm64-msvc" "4.50.0" - "@rollup/rollup-win32-ia32-msvc" "4.50.0" - "@rollup/rollup-win32-x64-msvc" "4.50.0" + "@rollup/rollup-android-arm-eabi" "4.50.1" + "@rollup/rollup-android-arm64" "4.50.1" + "@rollup/rollup-darwin-arm64" "4.50.1" + "@rollup/rollup-darwin-x64" "4.50.1" + "@rollup/rollup-freebsd-arm64" "4.50.1" + "@rollup/rollup-freebsd-x64" "4.50.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.50.1" + "@rollup/rollup-linux-arm-musleabihf" "4.50.1" + "@rollup/rollup-linux-arm64-gnu" "4.50.1" + "@rollup/rollup-linux-arm64-musl" "4.50.1" + "@rollup/rollup-linux-loongarch64-gnu" "4.50.1" + "@rollup/rollup-linux-ppc64-gnu" "4.50.1" + "@rollup/rollup-linux-riscv64-gnu" "4.50.1" + "@rollup/rollup-linux-riscv64-musl" "4.50.1" + "@rollup/rollup-linux-s390x-gnu" "4.50.1" + "@rollup/rollup-linux-x64-gnu" "4.50.1" + "@rollup/rollup-linux-x64-musl" "4.50.1" + "@rollup/rollup-openharmony-arm64" "4.50.1" + "@rollup/rollup-win32-arm64-msvc" "4.50.1" + "@rollup/rollup-win32-ia32-msvc" "4.50.1" + "@rollup/rollup-win32-x64-msvc" "4.50.1" fsevents "~2.3.2" router@^2.2.0: @@ -12292,14 +12220,7 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.1.1, semver@^7.3.2, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -semver@^7.6.3, semver@^7.7.2: +semver@^7.1.1, semver@^7.3.2, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3, semver@^7.7.2: version "7.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== @@ -13269,13 +13190,13 @@ tar@^7.4.3: mkdirp "^3.0.1" yallist "^5.0.0" -terser@^5.43.1: - version "5.43.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.43.1.tgz#88387f4f9794ff1a29e7ad61fb2932e25b4fdb6d" - integrity sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg== +terser@^5.44.0: + version "5.44.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.44.0.tgz#ebefb8e5b8579d93111bfdfc39d2cf63879f4a82" + integrity sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w== dependencies: "@jridgewell/source-map" "^0.3.3" - acorn "^8.14.0" + acorn "^8.15.0" commander "^2.20.0" source-map-support "~0.5.20" @@ -13617,15 +13538,15 @@ typed-query-selector@^2.12.0: resolved "https://registry.yarnpkg.com/typed-query-selector/-/typed-query-selector-2.12.0.tgz#92b65dbc0a42655fccf4aeb1a08b1dddce8af5f2" integrity sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg== -typescript-eslint@8.41.0: - version "8.41.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.41.0.tgz#a13879a5998717140fefb0d808c8c2fbde1cb769" - integrity sha512-n66rzs5OBXW3SFSnZHr2T685q1i4ODm2nulFJhMZBotaTavsS8TrI3d7bDlRSs9yWo7HmyWrN9qDu14Qv7Y0Dw== +typescript-eslint@8.42.0: + version "8.42.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.42.0.tgz#e92f6c88569e202b361d5ca1655ad8e33a0554ea" + integrity sha512-ozR/rQn+aQXQxh1YgbCzQWDFrsi9mcg+1PM3l/z5o1+20P7suOIaNg515bpr/OYt6FObz/NHcBstydDLHWeEKg== dependencies: - "@typescript-eslint/eslint-plugin" "8.41.0" - "@typescript-eslint/parser" "8.41.0" - "@typescript-eslint/typescript-estree" "8.41.0" - "@typescript-eslint/utils" "8.41.0" + "@typescript-eslint/eslint-plugin" "8.42.0" + "@typescript-eslint/parser" "8.42.0" + "@typescript-eslint/typescript-estree" "8.42.0" + "@typescript-eslint/utils" "8.42.0" typescript@5.8.2: version "5.8.2" From 5ecf5565ecbaf8e2de55f1e42178fa77eadd099f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Sep 2025 18:58:16 +0000 Subject: [PATCH 21/35] build(deps-dev): bump @vitest/eslint-plugin in the vitest group (#5481) Bumps the vitest group with 1 update: [@vitest/eslint-plugin](https://github.com/vitest-dev/eslint-plugin-vitest). Updates `@vitest/eslint-plugin` from 1.3.6 to 1.3.9 - [Release notes](https://github.com/vitest-dev/eslint-plugin-vitest/releases) - [Commits](https://github.com/vitest-dev/eslint-plugin-vitest/compare/v1.3.6...v1.3.9) --- updated-dependencies: - dependency-name: "@vitest/eslint-plugin" dependency-version: 1.3.9 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: vitest ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Will Harney <62956339+wjhsf@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 709e755173..4b400adc39 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "@types/babel__core": "^7.20.5", "@types/node": "^22.18.1", "@vitest/coverage-v8": "^3.2.4", - "@vitest/eslint-plugin": "^1.3.6", + "@vitest/eslint-plugin": "^1.3.9", "@vitest/ui": "^3.2.4", "bytes": "^3.1.2", "es-module-lexer": "^1.7.0", diff --git a/yarn.lock b/yarn.lock index 6b7b3cef90..2b74ec0c28 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3487,10 +3487,10 @@ test-exclude "^7.0.1" tinyrainbow "^2.0.0" -"@vitest/eslint-plugin@^1.3.6": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@vitest/eslint-plugin/-/eslint-plugin-1.3.6.tgz#3c942c33429aaab036a4958da7e37a1e99277c1b" - integrity sha512-sa/QAljHbUP+sMdPjK8e/6nS2+QB/bh1aDKEkAKMqsKVzBXqz4LRYfT7UVGIP8LMIrskGTxqAbHuiL+FOYWzHg== +"@vitest/eslint-plugin@^1.3.9": + version "1.3.9" + resolved "https://registry.yarnpkg.com/@vitest/eslint-plugin/-/eslint-plugin-1.3.9.tgz#723195146b6dbfec6a1bc9b071e6fb929467684c" + integrity sha512-wsNe7xy44ovm/h9ISDkDNcv0aOnUsaOYDqan2y6qCFAUQ0odFr6df/+FdGKHZN+mCM+SvIDWoXuvm5T5V3Kh6w== dependencies: "@typescript-eslint/scope-manager" "^8.41.0" "@typescript-eslint/utils" "^8.24.1" From 4bf3be7006340bdf27957352a91b467ca561c11f Mon Sep 17 00:00:00 2001 From: jhefferman-sfdc <83669775+jhefferman-sfdc@users.noreply.github.com> Date: Wed, 10 Sep 2025 11:41:52 -0600 Subject: [PATCH 22/35] HTML compliant CTE support (#5483) * feat: use default parse5 implementation * fix: directive-if/template-expression * chore: fixture updates * feat: cte validation * feat: attribute support and validation * feat: revert fuzzy end brace computation * feat: additional tests and restructuring * feat: additional coverage * fix: perf test syntax * chore: add comments * chore: add comments * fix: decode literals that precede expressions * fix: turn off feature for compatibility test * fix: test corrections * fix: legacy comment --- .../errors/src/compiler/error-info/index.ts | 2 +- .../compiler/error-info/template-transform.ts | 16 + .../src/benchmark/expression/expression.html | 4 +- .../directive-if/template-expression/ast.json | 88 ++-- .../template-expression/expected.js | 4 +- .../invalid/arrow-function-async/actual.html | 2 +- .../arrow-function-async/metadata.json | 6 +- .../arrow-function-block-body/actual.html | 2 +- .../arrow-function-block-body/metadata.json | 6 +- .../assignment-outside-arrow/actual.html | 2 +- .../assignment-outside-arrow/metadata.json | 6 +- .../invalid/await/actual.html | 2 +- .../invalid/await/metadata.json | 6 +- .../invalid/bigint-literal/actual.html | 2 +- .../invalid/bigint-literal/metadata.json | 6 +- .../invalid/class-expr/actual.html | 4 +- .../invalid/class-expr/metadata.json | 8 +- .../invalid/comma-operator/actual.html | 2 +- .../invalid/comma-operator/metadata.json | 8 +- .../invalid/comments/actual.html | 4 +- .../invalid/comments/metadata.json | 10 +- .../invalid/delete-operator/actual.html | 2 +- .../invalid/delete-operator/metadata.json | 6 +- .../invalid/function-expr/actual.html | 2 +- .../invalid/function-expr/metadata.json | 6 +- .../actual.html | 4 + .../ast.json | 1 + .../config.json | 3 + .../expected.js | 0 .../metadata.json | 15 + .../actual.html | 4 + .../ast.json | 1 + .../config.json | 3 + .../expected.js | 0 .../metadata.json | 15 + .../actual.html | 4 + .../ast.json | 1 + .../config.json | 4 + .../expected.js | 0 .../metadata.json | 15 + .../actual.html | 4 + .../ast.json | 1 + .../config.json | 4 + .../expected.js | 0 .../metadata.json | 15 + .../html-special-chars-attr/actual.html | 5 + .../invalid/html-special-chars-attr/ast.json | 1 + .../html-special-chars-attr/config.json | 3 + .../html-special-chars-attr/expected.js | 0 .../html-special-chars-attr/metadata.json | 15 + .../html-special-chars-text-node/actual.html | 7 + .../html-special-chars-text-node/ast.json | 1 + .../html-special-chars-text-node/config.json | 3 + .../html-special-chars-text-node/expected.js | 0 .../metadata.json | 15 + .../invalid/import-meta/actual.html | 2 +- .../invalid/import-meta/metadata.json | 8 +- .../invalid/import/actual.html | 2 +- .../invalid/import/metadata.json | 6 +- .../actual.html | 10 + .../less-than-unsupported-text-node/ast.json | 1 + .../config.json | 3 + .../expected.js | 0 .../metadata.json | 15 + .../invalid/new-operator/actual.html | 2 +- .../invalid/new-operator/metadata.json | 6 +- .../invalid/regexp-literal/actual.html | 2 +- .../invalid/regexp-literal/metadata.json | 6 +- .../invalid/super/actual.html | 2 +- .../invalid/super/metadata.json | 8 +- .../invalid/this/actual.html | 2 +- .../invalid/this/metadata.json | 6 +- .../invalid/throw/actual.html | 2 +- .../invalid/throw/metadata.json | 8 +- .../actual.html | 6 + .../ast.json | 1 + .../config.json | 3 + .../expected.js | 0 .../metadata.json | 15 + .../actual.html | 6 + .../ast.json | 1 + .../config.json | 3 + .../expected.js | 0 .../metadata.json | 15 + .../attribute/actual.html | 2 +- .../attribute/metadata.json | 6 +- .../text-content/metadata.json | 4 +- .../invalid/yield/actual.html | 2 +- .../invalid/yield/metadata.json | 10 +- .../valid/array-expr/actual.html | 2 +- .../valid/array-expr/ast.json | 204 ++------ .../valid/arrowfn-scoped-vars/actual.html | 4 +- .../valid/arrowfn-scoped-vars/ast.json | 22 +- .../valid/assignment-inside-arrow/actual.html | 2 +- .../valid/assignment-inside-arrow/ast.json | 36 +- .../valid/binary-expr-arithmetic/actual.html | 8 +- .../valid/binary-expr-arithmetic/ast.json | 412 +++++----------- .../valid/binary-expr-bit-shift/actual.html | 6 +- .../valid/binary-expr-bit-shift/ast.json | 100 ++-- .../valid/binary-expr-bitwise/actual.html | 6 +- .../valid/binary-expr-bitwise/ast.json | 310 ++++-------- .../valid/binary-expr-logical/actual.html | 4 +- .../valid/binary-expr-logical/ast.json | 208 +++----- .../valid/binary-expr-relational/actual.html | 11 +- .../valid/binary-expr-relational/ast.json | 266 +++------- .../valid/binary-expr-relational/expected.js | 15 +- .../valid/boolean-literal/actual.html | 4 +- .../valid/boolean-literal/ast.json | 136 ++---- .../valid/call-expr/actual.html | 2 +- .../valid/call-expr/ast.json | 88 ++-- .../valid/computed-property/actual.html | 2 +- .../valid/computed-property/ast.json | 436 ++++------------- .../valid/identifier/actual.html | 8 +- .../valid/identifier/ast.json | 276 +++++------ .../valid/iterator/actual.html | 2 +- .../valid/iterator/ast.json | 38 +- .../valid/member-expr/actual.html | 4 +- .../valid/member-expr/ast.json | 244 +++------ .../valid/null-literal/actual.html | 2 +- .../valid/null-literal/ast.json | 70 ++- .../valid/numeric-literal-binary/actual.html | 2 +- .../valid/numeric-literal-binary/ast.json | 36 +- .../valid/numeric-literal-float/actual.html | 2 +- .../valid/numeric-literal-float/ast.json | 36 +- .../valid/numeric-literal-hex/actual.html | 2 +- .../valid/numeric-literal-hex/ast.json | 36 +- .../valid/numeric-literal-int/actual.html | 2 +- .../valid/numeric-literal-int/ast.json | 70 ++- .../valid/numeric-literal-octal/actual.html | 2 +- .../valid/numeric-literal-octal/ast.json | 36 +- .../valid/object-expr/actual.html | 2 +- .../valid/object-expr/ast.json | 178 ++----- .../valid/optional-call-expr/actual.html | 2 +- .../valid/optional-call-expr/ast.json | 160 ++---- .../valid/string-literal/actual.html | 2 +- .../valid/string-literal/ast.json | 70 ++- .../valid/template-literal-tagged/actual.html | 2 +- .../valid/template-literal-tagged/ast.json | 160 ++---- .../valid/template-literal/actual.html | 2 +- .../valid/template-literal/ast.json | 160 ++---- .../valid/ternary/actual.html | 6 +- .../expression-complex/valid/ternary/ast.json | 418 ++++------------ .../valid/text-node-adjacency/ast.json | 462 +++++------------- .../valid/typeof-operator/actual.html | 2 +- .../valid/typeof-operator/ast.json | 36 +- .../valid/unary-expr-bitwise/actual.html | 2 +- .../valid/unary-expr-bitwise/ast.json | 88 ++-- .../valid/unary-expr-logical/actual.html | 2 +- .../valid/unary-expr-logical/ast.json | 36 +- .../valid/update-inside-arrow/actual.html | 2 +- .../valid/update-inside-arrow/ast.json | 36 +- .../valid/void-operator/actual.html | 2 +- .../valid/void-operator/ast.json | 36 +- .../template-compiler/src/parser/attribute.ts | 13 +- .../src/parser/expression-complex/html.ts | 334 ------------- .../src/parser/expression-complex/index.ts | 47 +- .../src/parser/expression-complex/validate.ts | 103 +++- .../src/parser/expression.ts | 60 +-- .../@lwc/template-compiler/src/parser/html.ts | 12 - .../template-compiler/src/parser/index.ts | 168 ++++--- .../template-compiler/src/parser/parser.ts | 15 +- .../@lwc/template-compiler/src/shared/ast.ts | 4 +- 162 files changed, 2212 insertions(+), 4077 deletions(-) create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/actual.html create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/ast.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/config.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/expected.js create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/metadata.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/actual.html create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/ast.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/config.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/expected.js create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/metadata.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/actual.html create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/ast.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/config.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/expected.js create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/metadata.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/actual.html create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/ast.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/config.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/expected.js create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/metadata.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/actual.html create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/ast.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/config.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/expected.js create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/metadata.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/actual.html create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/ast.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/config.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/expected.js create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/metadata.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/actual.html create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/ast.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/config.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/expected.js create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/metadata.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/actual.html create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/ast.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/config.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/expected.js create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/metadata.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/actual.html create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/ast.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/config.json create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/expected.js create mode 100644 packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/metadata.json delete mode 100644 packages/@lwc/template-compiler/src/parser/expression-complex/html.ts diff --git a/packages/@lwc/errors/src/compiler/error-info/index.ts b/packages/@lwc/errors/src/compiler/error-info/index.ts index 55f70e8f28..4129bedf60 100644 --- a/packages/@lwc/errors/src/compiler/error-info/index.ts +++ b/packages/@lwc/errors/src/compiler/error-info/index.ts @@ -5,7 +5,7 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ /** - * Next error code: 1207 + * Next error code: 1209 */ export * from './compiler'; diff --git a/packages/@lwc/errors/src/compiler/error-info/template-transform.ts b/packages/@lwc/errors/src/compiler/error-info/template-transform.ts index 3a86c7f486..70fa8f14b0 100644 --- a/packages/@lwc/errors/src/compiler/error-info/template-transform.ts +++ b/packages/@lwc/errors/src/compiler/error-info/template-transform.ts @@ -979,4 +979,20 @@ export const ParserDiagnostics = { level: DiagnosticLevel.Error, url: '', }, + + COMPUTED_PROPERTY_ACCESS_NOT_ALLOWED_COMPLEX: { + code: 1207, + message: + 'Template expression doesn\'t allow computed property access unless the expression is surrounded by quotes: "{0}"', + level: DiagnosticLevel.Error, + url: '', + }, + + INVALID_NODE_COMPLEX: { + code: 1208, + message: + 'Template expression doesn\'t allow {0} unless the expression is surrounded by quotes: "{1}"', + level: DiagnosticLevel.Error, + url: '', + }, }; diff --git a/packages/@lwc/perf-benchmarks-components/src/benchmark/expression/expression.html b/packages/@lwc/perf-benchmarks-components/src/benchmark/expression/expression.html index 357a427a1b..465cb4a1ee 100644 --- a/packages/@lwc/perf-benchmarks-components/src/benchmark/expression/expression.html +++ b/packages/@lwc/perf-benchmarks-components/src/benchmark/expression/expression.html @@ -5,7 +5,7 @@ For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT --> \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/compatibility/directive-if/template-expression/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/compatibility/directive-if/template-expression/ast.json index c5ea53b27b..02313ea19c 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/compatibility/directive-if/template-expression/ast.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/compatibility/directive-if/template-expression/ast.json @@ -112,39 +112,41 @@ "raw": "{foo}", "value": { "type": "Identifier", - "start": 80, - "end": 83, - "loc": { - "start": { - "line": 4, - "column": 13 - }, - "end": { - "line": 4, - "column": 16 - } - }, - "range": [ - 80, - 83 - ], + "start": 1, + "end": 4, "name": "foo", "location": { - "startLine": 4, - "startColumn": 13, - "endLine": 5, - "endColumn": 13, - "start": 79, - "end": 97 + "startLine": 3, + "startColumn": 42, + "endLine": 6, + "endColumn": 9, + "start": 66, + "end": 111 } }, "location": { - "startLine": 4, - "startColumn": 13, - "endLine": 5, - "endColumn": 13, - "start": 79, - "end": 97 + "startLine": 3, + "startColumn": 42, + "endLine": 6, + "endColumn": 9, + "start": 66, + "end": 111 + } + }, + { + "type": "Text", + "raw": " ", + "value": { + "type": "Literal", + "value": " " + }, + "location": { + "startLine": 3, + "startColumn": 42, + "endLine": 6, + "endColumn": 9, + "start": 66, + "end": 111 } }, { @@ -152,38 +154,24 @@ "raw": "{bar}", "value": { "type": "Identifier", - "start": 98, - "end": 101, - "loc": { - "start": { - "line": 5, - "column": 13 - }, - "end": { - "line": 5, - "column": 16 - } - }, - "range": [ - 98, - 101 - ], + "start": 7, + "end": 10, "name": "bar", "location": { - "startLine": 5, - "startColumn": 13, + "startLine": 3, + "startColumn": 42, "endLine": 6, "endColumn": 9, - "start": 97, + "start": 66, "end": 111 } }, "location": { - "startLine": 5, - "startColumn": 13, + "startLine": 3, + "startColumn": 42, "endLine": 6, "endColumn": 9, - "start": 97, + "start": 66, "end": 111 } } diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/compatibility/directive-if/template-expression/expected.js b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/compatibility/directive-if/template-expression/expected.js index 7486a6129e..3d0477e12e 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/compatibility/directive-if/template-expression/expected.js +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/compatibility/directive-if/template-expression/expected.js @@ -9,7 +9,9 @@ function tmpl($api, $cmp, $slotset, $ctx) { return [ api_element("section", stc0, [ $cmp.state.isTrue - ? api_text(api_dynamic_text($cmp.foo) + api_dynamic_text($cmp.bar)) + ? api_text( + api_dynamic_text($cmp.foo) + " " + api_dynamic_text($cmp.bar) + ) : null, ]), ]; diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/arrow-function-async/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/arrow-function-async/actual.html index 7b9d86cc8b..98c17f9430 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/arrow-function-async/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/arrow-function-async/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/arrow-function-async/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/arrow-function-async/metadata.json index 072ad08348..125a391f66 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/arrow-function-async/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/arrow-function-async/metadata.json @@ -6,9 +6,9 @@ "level": 1, "location": { "line": 3, - "column": 25, - "start": 50, - "length": 25 + "column": 17, + "start": 41, + "length": 37 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/arrow-function-block-body/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/arrow-function-block-body/actual.html index 83c8c6fd6e..4119f90fe5 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/arrow-function-block-body/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/arrow-function-block-body/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/arrow-function-block-body/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/arrow-function-block-body/metadata.json index 834029698c..13f365157e 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/arrow-function-block-body/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/arrow-function-block-body/metadata.json @@ -6,9 +6,9 @@ "level": 1, "location": { "line": 3, - "column": 25, - "start": 50, - "length": 24 + "column": 17, + "start": 41, + "length": 36 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/assignment-outside-arrow/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/assignment-outside-arrow/actual.html index 5372eeb66a..462eb584fa 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/assignment-outside-arrow/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/assignment-outside-arrow/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/assignment-outside-arrow/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/assignment-outside-arrow/metadata.json index 1afa9ed630..42d78ad3e4 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/assignment-outside-arrow/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/assignment-outside-arrow/metadata.json @@ -6,9 +6,9 @@ "level": 1, "location": { "line": 3, - "column": 25, - "start": 50, - "length": 15 + "column": 17, + "start": 41, + "length": 27 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/await/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/await/actual.html index 443d261dfe..8b79924f62 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/await/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/await/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/await/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/await/metadata.json index 7cd08ff00b..c72b606d59 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/await/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/await/metadata.json @@ -6,9 +6,9 @@ "level": 1, "location": { "line": 3, - "column": 25, - "start": 50, - "length": 11 + "column": 17, + "start": 41, + "length": 23 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/bigint-literal/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/bigint-literal/actual.html index df48808c74..c1bbb84453 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/bigint-literal/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/bigint-literal/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/bigint-literal/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/bigint-literal/metadata.json index c98ec2989a..ac275cc1e9 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/bigint-literal/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/bigint-literal/metadata.json @@ -6,9 +6,9 @@ "level": 1, "location": { "line": 3, - "column": 22, - "start": 47, - "length": 19 + "column": 18, + "start": 42, + "length": 27 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/class-expr/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/class-expr/actual.html index 904ab24ee9..2014e4c04c 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/class-expr/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/class-expr/actual.html @@ -1,9 +1,9 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/class-expr/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/class-expr/metadata.json index c855828f9a..dfbce8e407 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/class-expr/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/class-expr/metadata.json @@ -5,10 +5,10 @@ "message": "Invalid expression {\n class Bar {\n method() {}\n }\n } - LWC1196: Use of classes is disallowed within template expressions.", "level": 1, "location": { - "line": 4, - "column": 12, - "start": 62, - "length": 53 + "line": 3, + "column": 16, + "start": 40, + "length": 87 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/comma-operator/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/comma-operator/actual.html index 8a19cbc670..7e4c3e9d56 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/comma-operator/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/comma-operator/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/comma-operator/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/comma-operator/metadata.json index da7a6c9568..2d44455d65 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/comma-operator/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/comma-operator/metadata.json @@ -2,13 +2,13 @@ "warnings": [ { "code": 1196, - "message": "Invalid expression {(one(), two(), three(), iAmTheCount())} - LWC1196: Use of comma operators is disallowed within template expressions.", + "message": "Invalid expression {one(), two(), three(), iAmTheCount()} - LWC1196: Use of comma operators is disallowed within template expressions.", "level": 1, "location": { "line": 3, - "column": 26, - "start": 51, - "length": 36 + "column": 17, + "start": 41, + "length": 48 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/comments/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/comments/actual.html index 1e892981b3..d006bf86ee 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/comments/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/comments/actual.html @@ -1,8 +1,8 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/comments/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/comments/metadata.json index 12515509a7..c9c7d80c15 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/comments/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/comments/metadata.json @@ -2,8 +2,14 @@ "warnings": [ { "code": 1197, - "message": "Unexpected compilation error: LWC1197: Use of comments is disallowed within template expressions.", - "level": 1 + "message": "Invalid expression {\n /* what do you think ? */\n someValue\n } - LWC1197: Use of comments is disallowed within template expressions.", + "level": 1, + "location": { + "line": 3, + "column": 16, + "start": 40, + "length": 79 + } } ] } \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/delete-operator/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/delete-operator/actual.html index 6bcb80ee5e..ada7d2e1eb 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/delete-operator/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/delete-operator/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/delete-operator/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/delete-operator/metadata.json index af2fa0e971..bb5a747c95 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/delete-operator/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/delete-operator/metadata.json @@ -6,9 +6,9 @@ "level": 1, "location": { "line": 3, - "column": 25, - "start": 50, - "length": 16 + "column": 17, + "start": 41, + "length": 28 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/function-expr/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/function-expr/actual.html index 28b8ea3fe9..b5cce8563d 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/function-expr/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/function-expr/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/function-expr/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/function-expr/metadata.json index fdcd8ef506..5ac6889b0d 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/function-expr/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/function-expr/metadata.json @@ -6,9 +6,9 @@ "level": 1, "location": { "line": 3, - "column": 33, - "start": 58, - "length": 40 + "column": 18, + "start": 42, + "length": 59 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/actual.html new file mode 100644 index 0000000000..aa8e27f77f --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/actual.html @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/ast.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/ast.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/config.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/config.json new file mode 100644 index 0000000000..1f1b15380f --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/config.json @@ -0,0 +1,3 @@ +{ + "experimentalComplexExpressions": true +} diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/expected.js b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/expected.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/metadata.json new file mode 100644 index 0000000000..b84381cd83 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true-attr/metadata.json @@ -0,0 +1,15 @@ +{ + "warnings": [ + { + "code": 1083, + "message": "LWC1083: Error parsing template expression: Invalid expression {foo < bar} - Unexpected character '6' (1:7)", + "level": 1, + "location": { + "line": 3, + "column": 12, + "start": 125, + "length": 15 + } + } + ] +} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/actual.html new file mode 100644 index 0000000000..aa8e27f77f --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/actual.html @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/ast.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/ast.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/config.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/config.json new file mode 100644 index 0000000000..1f1b15380f --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/config.json @@ -0,0 +1,3 @@ +{ + "experimentalComplexExpressions": true +} diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/expected.js b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/expected.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/metadata.json new file mode 100644 index 0000000000..b84381cd83 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/experimental-complex-expressions-true/metadata.json @@ -0,0 +1,15 @@ +{ + "warnings": [ + { + "code": 1083, + "message": "LWC1083: Error parsing template expression: Invalid expression {foo < bar} - Unexpected character '6' (1:7)", + "level": 1, + "location": { + "line": 3, + "column": 12, + "start": 125, + "length": 15 + } + } + ] +} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/actual.html new file mode 100644 index 0000000000..81f6959315 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/actual.html @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/ast.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/ast.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/config.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/config.json new file mode 100644 index 0000000000..7f94823d90 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/config.json @@ -0,0 +1,4 @@ +{ + "enableStaticContentOptimization": false, + "experimentalComplexExpressions": true +} diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/expected.js b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/expected.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/metadata.json new file mode 100644 index 0000000000..7fb90a1841 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false-attr/metadata.json @@ -0,0 +1,15 @@ +{ + "warnings": [ + { + "code": 1083, + "message": "LWC1083: Error parsing template expression: Invalid expression {foo < bar} - Unexpected character '6' (1:7)", + "level": 1, + "location": { + "line": 3, + "column": 12, + "start": 125, + "length": 22 + } + } + ] +} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/actual.html new file mode 100644 index 0000000000..81f6959315 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/actual.html @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/ast.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/ast.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/config.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/config.json new file mode 100644 index 0000000000..7f94823d90 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/config.json @@ -0,0 +1,4 @@ +{ + "enableStaticContentOptimization": false, + "experimentalComplexExpressions": true +} diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/expected.js b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/expected.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/metadata.json new file mode 100644 index 0000000000..7fb90a1841 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-decoding/static-content-optimization-false/metadata.json @@ -0,0 +1,15 @@ +{ + "warnings": [ + { + "code": 1083, + "message": "LWC1083: Error parsing template expression: Invalid expression {foo < bar} - Unexpected character '6' (1:7)", + "level": 1, + "location": { + "line": 3, + "column": 12, + "start": 125, + "length": 22 + } + } + ] +} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/actual.html new file mode 100644 index 0000000000..5026819d07 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/actual.html @@ -0,0 +1,5 @@ + diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/ast.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/ast.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/config.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/config.json new file mode 100644 index 0000000000..1f1b15380f --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/config.json @@ -0,0 +1,3 @@ +{ + "experimentalComplexExpressions": true +} diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/expected.js b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/expected.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/metadata.json new file mode 100644 index 0000000000..0a7f9f7841 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-attr/metadata.json @@ -0,0 +1,15 @@ +{ + "warnings": [ + { + "code": 1083, + "message": "LWC1083: Error parsing template expression: Invalid expression {() => call( - Unexpected token (1:12)", + "level": 1, + "location": { + "line": 3, + "column": 16, + "start": 40, + "length": 19 + } + } + ] +} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/actual.html new file mode 100644 index 0000000000..c9310065d6 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/actual.html @@ -0,0 +1,7 @@ + diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/ast.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/ast.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/config.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/config.json new file mode 100644 index 0000000000..1f1b15380f --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/config.json @@ -0,0 +1,3 @@ +{ + "experimentalComplexExpressions": true +} diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/expected.js b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/expected.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/metadata.json new file mode 100644 index 0000000000..1d43449667 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/html-special-chars-text-node/metadata.json @@ -0,0 +1,15 @@ +{ + "warnings": [ + { + "code": 1083, + "message": "LWC1083: Error parsing template expression: Invalid expression {() => foo(\"} - Unterminated string constant (1:11)", + "level": 1, + "location": { + "line": 3, + "column": 16, + "start": 40, + "length": 26 + } + } + ] +} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/import-meta/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/import-meta/actual.html index 84ff5ed962..bcb68ac353 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/import-meta/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/import-meta/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/import-meta/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/import-meta/metadata.json index 929441d4a4..75fcb100f3 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/import-meta/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/import-meta/metadata.json @@ -1,12 +1,14 @@ { "warnings": [ { - "code": 1052, - "message": "Unexpected compilation error: LWC1052: Error parsing attribute: Cannot use 'import.meta' outside a module (3:39)", + "code": 1083, + "message": "LWC1083: Error parsing template expression: Invalid expression {() => doThing(import.meta.env.SSR)} - Cannot use 'import.meta' outside a module (1:15)", "level": 1, "location": { "line": 3, - "column": 39 + "column": 17, + "start": 41, + "length": 46 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/import/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/import/actual.html index 2e433ccc0c..cfb4be22af 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/import/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/import/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/import/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/import/metadata.json index 022f61d079..8f5504f00c 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/import/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/import/metadata.json @@ -6,9 +6,9 @@ "level": 1, "location": { "line": 3, - "column": 25, - "start": 50, - "length": 40 + "column": 17, + "start": 41, + "length": 52 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/actual.html new file mode 100644 index 0000000000..e83d5652f5 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/actual.html @@ -0,0 +1,10 @@ + diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/ast.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/ast.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/config.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/config.json new file mode 100644 index 0000000000..1f1b15380f --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/config.json @@ -0,0 +1,3 @@ +{ + "experimentalComplexExpressions": true +} diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/expected.js b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/expected.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/metadata.json new file mode 100644 index 0000000000..897b276e26 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/less-than-unsupported-text-node/metadata.json @@ -0,0 +1,15 @@ +{ + "warnings": [ + { + "code": 1058, + "message": "LWC1058: Invalid HTML syntax: invalid-first-character-of-tag-name. For more information, please visit https://html.spec.whatwg.org/multipage/parsing.html#parse-error-invalid-first-character-of-tag-name", + "level": 1, + "location": { + "line": 8, + "column": 22, + "start": 262, + "length": 0 + } + } + ] +} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/new-operator/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/new-operator/actual.html index 7d707ee56d..4455ae723f 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/new-operator/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/new-operator/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/new-operator/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/new-operator/metadata.json index a1c04d87e7..3f63509ea2 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/new-operator/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/new-operator/metadata.json @@ -6,9 +6,9 @@ "level": 1, "location": { "line": 3, - "column": 23, - "start": 48, - "length": 15 + "column": 16, + "start": 40, + "length": 26 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/regexp-literal/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/regexp-literal/actual.html index 80884d319c..0220011fed 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/regexp-literal/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/regexp-literal/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/regexp-literal/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/regexp-literal/metadata.json index 044f6cb402..9609d0a88f 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/regexp-literal/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/regexp-literal/metadata.json @@ -6,9 +6,9 @@ "level": 1, "location": { "line": 3, - "column": 25, - "start": 50, - "length": 10 + "column": 18, + "start": 42, + "length": 21 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/super/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/super/actual.html index 7ddb82cacc..ad3588ca52 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/super/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/super/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/super/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/super/metadata.json index e67c88ebce..7f1124c446 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/super/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/super/metadata.json @@ -1,12 +1,14 @@ { "warnings": [ { - "code": 1052, - "message": "Unexpected compilation error: LWC1052: Error parsing attribute: 'super' keyword outside a method (3:25)", + "code": 1083, + "message": "LWC1083: Error parsing template expression: Invalid expression {super('duper')} - 'super' keyword outside a method (1:1)", "level": 1, "location": { "line": 3, - "column": 25 + "column": 17, + "start": 41, + "length": 26 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/this/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/this/actual.html index f983765faa..c827c92ac8 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/this/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/this/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/this/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/this/metadata.json index 622b89a5ab..d6788165cd 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/this/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/this/metadata.json @@ -6,9 +6,9 @@ "level": 1, "location": { "line": 3, - "column": 21, - "start": 46, - "length": 8 + "column": 17, + "start": 41, + "length": 16 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/throw/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/throw/actual.html index 40674b5e76..efae0e536e 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/throw/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/throw/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/throw/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/throw/metadata.json index e568c58e26..192fbcc47b 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/throw/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/throw/metadata.json @@ -1,12 +1,14 @@ { "warnings": [ { - "code": 1052, - "message": "Unexpected compilation error: LWC1052: Error parsing attribute: Unexpected token (3:31)", + "code": 1083, + "message": "LWC1083: Error parsing template expression: Invalid expression {() => throw 'oh no!'} - Unexpected token (1:7)", "level": 1, "location": { "line": 3, - "column": 31 + "column": 17, + "start": 41, + "length": 32 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/actual.html new file mode 100644 index 0000000000..40f0011197 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/actual.html @@ -0,0 +1,6 @@ + diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/ast.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/ast.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/config.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/config.json new file mode 100644 index 0000000000..1f1b15380f --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/config.json @@ -0,0 +1,3 @@ +{ + "experimentalComplexExpressions": true +} diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/expected.js b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/expected.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/metadata.json new file mode 100644 index 0000000000..9b150de722 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-complex-expression/metadata.json @@ -0,0 +1,15 @@ +{ + "warnings": [ + { + "code": 1208, + "message": "Invalid expression {bar()} - LWC1208: Template expression doesn't allow CallExpression unless the expression is surrounded by quotes: \"{bar()}\"", + "level": 1, + "location": { + "line": 4, + "column": 16, + "start": 111, + "length": 12 + } + } + ] +} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/actual.html new file mode 100644 index 0000000000..2a6042b7f3 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/actual.html @@ -0,0 +1,6 @@ + diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/ast.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/ast.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/config.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/config.json new file mode 100644 index 0000000000..1f1b15380f --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/config.json @@ -0,0 +1,3 @@ +{ + "experimentalComplexExpressions": true +} diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/expected.js b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/expected.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/metadata.json new file mode 100644 index 0000000000..b522807464 --- /dev/null +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/unquoted-attribute-computed-expression/metadata.json @@ -0,0 +1,15 @@ +{ + "warnings": [ + { + "code": 1207, + "message": "Invalid expression {list[0].name} - LWC1207: Template expression doesn't allow computed property access unless the expression is surrounded by quotes: \"{list[0].name}\"", + "level": 1, + "location": { + "line": 4, + "column": 16, + "start": 111, + "length": 19 + } + } + ] +} \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/update-outside-arrow/attribute/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/update-outside-arrow/attribute/actual.html index 6bd8e6d6f1..ae69cb6f91 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/update-outside-arrow/attribute/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/update-outside-arrow/attribute/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/update-outside-arrow/attribute/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/update-outside-arrow/attribute/metadata.json index 6c64ab33ed..62bc290eed 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/update-outside-arrow/attribute/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/update-outside-arrow/attribute/metadata.json @@ -6,9 +6,9 @@ "level": 1, "location": { "line": 3, - "column": 25, - "start": 50, - "length": 5 + "column": 17, + "start": 41, + "length": 17 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/update-outside-arrow/text-content/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/update-outside-arrow/text-content/metadata.json index a0820de186..70275ffbdd 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/update-outside-arrow/text-content/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/update-outside-arrow/text-content/metadata.json @@ -7,8 +7,8 @@ "location": { "line": 3, "column": 17, - "start": 42, - "length": 10 + "start": 41, + "length": 12 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/yield/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/yield/actual.html index 319c6e31cb..03d93b30ef 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/yield/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/yield/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/yield/metadata.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/yield/metadata.json index 92e737301b..961c5e28d3 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/yield/metadata.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/invalid/yield/metadata.json @@ -2,8 +2,14 @@ "warnings": [ { "code": 1083, - "message": "Unexpected compilation error: LWC1083: Error parsing template expression: expression must end with curly brace.", - "level": 1 + "message": "Invalid expression {yield bar} - LWC1083: Error parsing template expression: expression must end with curly brace.", + "level": 1, + "location": { + "line": 3, + "column": 17, + "start": 41, + "length": 17 + } } ] } \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/array-expr/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/array-expr/actual.html index 703e2345f4..4375831f07 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/array-expr/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/array-expr/actual.html @@ -1,6 +1,6 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/array-expr/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/array-expr/ast.json index 1077cc1416..244f5d23ab 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/array-expr/ast.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/array-expr/ast.json @@ -7,7 +7,7 @@ "endLine": 6, "endColumn": 12, "start": 0, - "end": 136, + "end": 138, "startTag": { "startLine": 1, "startColumn": 1, @@ -21,8 +21,8 @@ "startColumn": 1, "endLine": 6, "endColumn": 12, - "start": 125, - "end": 136 + "start": 127, + "end": 138 } }, "directives": [], @@ -37,7 +37,7 @@ "endLine": 5, "endColumn": 15, "start": 15, - "end": 124, + "end": 126, "startTag": { "startLine": 2, "startColumn": 5, @@ -51,8 +51,8 @@ "startColumn": 5, "endLine": 5, "endColumn": 15, - "start": 114, - "end": 124 + "start": 116, + "end": 126 } }, "attributes": [], @@ -68,24 +68,24 @@ "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 48, + "endColumn": 50, "start": 33, - "end": 72, + "end": 74, "startTag": { "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 39, + "endColumn": 41, "start": 33, - "end": 63 + "end": 65 }, "endTag": { "startLine": 3, - "startColumn": 39, + "startColumn": 41, "endLine": 3, - "endColumn": 48, - "start": 63, - "end": 72 + "endColumn": 50, + "start": 65, + "end": 74 } }, "attributes": [], @@ -124,18 +124,18 @@ "startLine": 3, "startColumn": 17, "endLine": 3, - "endColumn": 38, + "endColumn": 40, "start": 41, - "end": 62 + "end": 64 } }, "location": { "startLine": 3, "startColumn": 17, "endLine": 3, - "endColumn": 38, + "endColumn": 40, "start": 41, - "end": 62 + "end": 64 } } ], @@ -148,118 +148,34 @@ "raw": "{['flop', floo, 2].join('')}", "value": { "type": "CallExpression", - "start": 82, - "end": 108, - "loc": { - "start": { - "line": 4, - "column": 9 - }, - "end": { - "line": 4, - "column": 35 - } - }, - "range": [ - 82, - 108 - ], + "start": 1, + "end": 27, "callee": { "type": "MemberExpression", - "start": 82, - "end": 104, - "loc": { - "start": { - "line": 4, - "column": 9 - }, - "end": { - "line": 4, - "column": 31 - } - }, - "range": [ - 82, - 104 - ], + "start": 1, + "end": 23, "object": { "type": "ArrayExpression", - "start": 82, - "end": 99, - "loc": { - "start": { - "line": 4, - "column": 9 - }, - "end": { - "line": 4, - "column": 26 - } - }, - "range": [ - 82, - 99 - ], + "start": 1, + "end": 18, "elements": [ { "type": "Literal", - "start": 83, - "end": 89, - "loc": { - "start": { - "line": 4, - "column": 10 - }, - "end": { - "line": 4, - "column": 16 - } - }, - "range": [ - 83, - 89 - ], + "start": 2, + "end": 8, "value": "flop", "raw": "'flop'" }, { "type": "Identifier", - "start": 91, - "end": 95, - "loc": { - "start": { - "line": 4, - "column": 18 - }, - "end": { - "line": 4, - "column": 22 - } - }, - "range": [ - 91, - 95 - ], + "start": 10, + "end": 14, "name": "floo" }, { "type": "Literal", - "start": 97, - "end": 98, - "loc": { - "start": { - "line": 4, - "column": 24 - }, - "end": { - "line": 4, - "column": 25 - } - }, - "range": [ - 97, - 98 - ], + "start": 16, + "end": 17, "value": 2, "raw": "2" } @@ -267,22 +183,8 @@ }, "property": { "type": "Identifier", - "start": 100, - "end": 104, - "loc": { - "start": { - "line": 4, - "column": 27 - }, - "end": { - "line": 4, - "column": 31 - } - }, - "range": [ - 100, - 104 - ], + "start": 19, + "end": 23, "name": "join" }, "computed": false, @@ -291,43 +193,29 @@ "arguments": [ { "type": "Literal", - "start": 105, - "end": 107, - "loc": { - "start": { - "line": 4, - "column": 32 - }, - "end": { - "line": 4, - "column": 34 - } - }, - "range": [ - 105, - 107 - ], + "start": 24, + "end": 26, "value": "", "raw": "''" } ], "optional": false, "location": { - "startLine": 4, - "startColumn": 9, - "endLine": 4, - "endColumn": 37, - "start": 81, - "end": 109 + "startLine": 3, + "startColumn": 50, + "endLine": 5, + "endColumn": 5, + "start": 74, + "end": 116 } }, "location": { - "startLine": 4, - "startColumn": 9, - "endLine": 4, - "endColumn": 37, - "start": 81, - "end": 109 + "startLine": 3, + "startColumn": 50, + "endLine": 5, + "endColumn": 5, + "start": 74, + "end": 116 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/arrowfn-scoped-vars/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/arrowfn-scoped-vars/actual.html index a3a103a836..7faed23141 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/arrowfn-scoped-vars/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/arrowfn-scoped-vars/actual.html @@ -1,10 +1,10 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/arrowfn-scoped-vars/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/arrowfn-scoped-vars/ast.json index 2d6f2180bb..ed667367ba 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/arrowfn-scoped-vars/ast.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/arrowfn-scoped-vars/ast.json @@ -7,7 +7,7 @@ "endLine": 10, "endColumn": 12, "start": 0, - "end": 188, + "end": 190, "startTag": { "startLine": 1, "startColumn": 1, @@ -21,8 +21,8 @@ "startColumn": 1, "endLine": 10, "endColumn": 12, - "start": 177, - "end": 188 + "start": 179, + "end": 190 } }, "directives": [], @@ -37,22 +37,22 @@ "endLine": 9, "endColumn": 15, "start": 15, - "end": 176, + "end": 178, "startTag": { "startLine": 2, "startColumn": 5, "endLine": 9, "endColumn": 6, "start": 15, - "end": 167 + "end": 169 }, "endTag": { "startLine": 9, "startColumn": 6, "endLine": 9, "endColumn": 15, - "start": 167, - "end": 176 + "start": 169, + "end": 178 } }, "attributes": [], @@ -178,18 +178,18 @@ "startLine": 3, "startColumn": 9, "endLine": 8, - "endColumn": 11, + "endColumn": 12, "start": 31, - "end": 161 + "end": 163 } }, "location": { "startLine": 3, "startColumn": 9, "endLine": 8, - "endColumn": 11, + "endColumn": 12, "start": 31, - "end": 161 + "end": 163 } } ], diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/assignment-inside-arrow/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/assignment-inside-arrow/actual.html index 6a2cc5fce1..f8eaca1ae9 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/assignment-inside-arrow/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/assignment-inside-arrow/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/assignment-inside-arrow/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/assignment-inside-arrow/ast.json index 98640a30a1..c0cf7aefcd 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/assignment-inside-arrow/ast.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/assignment-inside-arrow/ast.json @@ -7,7 +7,7 @@ "endLine": 5, "endColumn": 12, "start": 0, - "end": 109, + "end": 111, "startTag": { "startLine": 1, "startColumn": 1, @@ -21,8 +21,8 @@ "startColumn": 1, "endLine": 5, "endColumn": 12, - "start": 98, - "end": 109 + "start": 100, + "end": 111 } }, "directives": [], @@ -37,7 +37,7 @@ "endLine": 4, "endColumn": 15, "start": 15, - "end": 97, + "end": 99, "startTag": { "startLine": 2, "startColumn": 5, @@ -51,8 +51,8 @@ "startColumn": 5, "endLine": 4, "endColumn": 15, - "start": 87, - "end": 97 + "start": 89, + "end": 99 } }, "attributes": [], @@ -68,24 +68,24 @@ "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 58, + "endColumn": 60, "start": 33, - "end": 82, + "end": 84, "startTag": { "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 49, + "endColumn": 51, "start": 33, - "end": 73 + "end": 75 }, "endTag": { "startLine": 3, - "startColumn": 49, + "startColumn": 51, "endLine": 3, - "endColumn": 58, - "start": 73, - "end": 82 + "endColumn": 60, + "start": 75, + "end": 84 } }, "attributes": [], @@ -127,18 +127,18 @@ "startLine": 3, "startColumn": 17, "endLine": 3, - "endColumn": 48, + "endColumn": 50, "start": 41, - "end": 72 + "end": 74 } }, "location": { "startLine": 3, "startColumn": 17, "endLine": 3, - "endColumn": 48, + "endColumn": 50, "start": 41, - "end": 72 + "end": 74 } } ], diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-arithmetic/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-arithmetic/actual.html index 4dfe3589c4..fddd0ca932 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-arithmetic/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-arithmetic/actual.html @@ -1,8 +1,8 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-arithmetic/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-arithmetic/ast.json index 481bf10998..5e3ca422c5 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-arithmetic/ast.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-arithmetic/ast.json @@ -7,7 +7,7 @@ "endLine": 8, "endColumn": 12, "start": 0, - "end": 269, + "end": 277, "startTag": { "startLine": 1, "startColumn": 1, @@ -21,8 +21,8 @@ "startColumn": 1, "endLine": 8, "endColumn": 12, - "start": 258, - "end": 269 + "start": 266, + "end": 277 } }, "directives": [], @@ -37,7 +37,7 @@ "endLine": 7, "endColumn": 15, "start": 15, - "end": 257, + "end": 265, "startTag": { "startLine": 2, "startColumn": 5, @@ -51,8 +51,8 @@ "startColumn": 5, "endLine": 7, "endColumn": 15, - "start": 247, - "end": 257 + "start": 255, + "end": 265 } }, "attributes": [], @@ -68,24 +68,24 @@ "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 54, + "endColumn": 56, "start": 33, - "end": 78, + "end": 80, "startTag": { "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 34, + "endColumn": 36, "start": 33, - "end": 58 + "end": 60 }, "endTag": { "startLine": 3, - "startColumn": 45, + "startColumn": 47, "endLine": 3, - "endColumn": 54, - "start": 69, - "end": 78 + "endColumn": 56, + "start": 71, + "end": 80 } }, "attributes": [], @@ -115,18 +115,18 @@ "startLine": 3, "startColumn": 17, "endLine": 3, - "endColumn": 33, + "endColumn": 35, "start": 41, - "end": 57 + "end": 59 } }, "location": { "startLine": 3, "startColumn": 17, "endLine": 3, - "endColumn": 33, + "endColumn": 35, "start": 41, - "end": 57 + "end": 59 } } ], @@ -138,79 +138,37 @@ "raw": "{foo + bar}", "value": { "type": "BinaryExpression", - "start": 59, - "end": 68, - "loc": { - "start": { - "line": 3, - "column": 34 - }, - "end": { - "line": 3, - "column": 43 - } - }, - "range": [ - 59, - 68 - ], + "start": 1, + "end": 10, "left": { "type": "Identifier", - "start": 59, - "end": 62, - "loc": { - "start": { - "line": 3, - "column": 34 - }, - "end": { - "line": 3, - "column": 37 - } - }, - "range": [ - 59, - 62 - ], + "start": 1, + "end": 4, "name": "foo" }, "operator": "+", "right": { "type": "Identifier", - "start": 65, - "end": 68, - "loc": { - "start": { - "line": 3, - "column": 40 - }, - "end": { - "line": 3, - "column": 43 - } - }, - "range": [ - 65, - 68 - ], + "start": 7, + "end": 10, "name": "bar" }, "location": { "startLine": 3, - "startColumn": 34, + "startColumn": 36, "endLine": 3, - "endColumn": 45, - "start": 58, - "end": 69 + "endColumn": 47, + "start": 60, + "end": 71 } }, "location": { "startLine": 3, - "startColumn": 34, + "startColumn": 36, "endLine": 3, - "endColumn": 45, - "start": 58, - "end": 69 + "endColumn": 47, + "start": 60, + "end": 71 } } ] @@ -223,24 +181,24 @@ "startLine": 4, "startColumn": 9, "endLine": 4, - "endColumn": 54, - "start": 87, - "end": 132, + "endColumn": 56, + "start": 89, + "end": 136, "startTag": { "startLine": 4, "startColumn": 9, "endLine": 4, - "endColumn": 34, - "start": 87, - "end": 112 + "endColumn": 36, + "start": 89, + "end": 116 }, "endTag": { "startLine": 4, - "startColumn": 45, + "startColumn": 47, "endLine": 4, - "endColumn": 54, - "start": 123, - "end": 132 + "endColumn": 56, + "start": 127, + "end": 136 } }, "attributes": [], @@ -270,18 +228,18 @@ "startLine": 4, "startColumn": 17, "endLine": 4, - "endColumn": 33, - "start": 95, - "end": 111 + "endColumn": 35, + "start": 97, + "end": 115 } }, "location": { "startLine": 4, "startColumn": 17, "endLine": 4, - "endColumn": 33, - "start": 95, - "end": 111 + "endColumn": 35, + "start": 97, + "end": 115 } } ], @@ -293,79 +251,37 @@ "raw": "{foo / bar}", "value": { "type": "BinaryExpression", - "start": 113, - "end": 122, - "loc": { - "start": { - "line": 4, - "column": 34 - }, - "end": { - "line": 4, - "column": 43 - } - }, - "range": [ - 113, - 122 - ], + "start": 1, + "end": 10, "left": { "type": "Identifier", - "start": 113, - "end": 116, - "loc": { - "start": { - "line": 4, - "column": 34 - }, - "end": { - "line": 4, - "column": 37 - } - }, - "range": [ - 113, - 116 - ], + "start": 1, + "end": 4, "name": "foo" }, "operator": "/", "right": { "type": "Identifier", - "start": 119, - "end": 122, - "loc": { - "start": { - "line": 4, - "column": 40 - }, - "end": { - "line": 4, - "column": 43 - } - }, - "range": [ - 119, - 122 - ], + "start": 7, + "end": 10, "name": "bar" }, "location": { "startLine": 4, - "startColumn": 34, + "startColumn": 36, "endLine": 4, - "endColumn": 45, - "start": 112, - "end": 123 + "endColumn": 47, + "start": 116, + "end": 127 } }, "location": { "startLine": 4, - "startColumn": 34, + "startColumn": 36, "endLine": 4, - "endColumn": 45, - "start": 112, - "end": 123 + "endColumn": 47, + "start": 116, + "end": 127 } } ] @@ -378,24 +294,24 @@ "startLine": 5, "startColumn": 9, "endLine": 5, - "endColumn": 56, - "start": 141, - "end": 188, + "endColumn": 58, + "start": 145, + "end": 194, "startTag": { "startLine": 5, "startColumn": 9, "endLine": 5, - "endColumn": 35, - "start": 141, - "end": 167 + "endColumn": 37, + "start": 145, + "end": 173 }, "endTag": { "startLine": 5, - "startColumn": 47, + "startColumn": 49, "endLine": 5, - "endColumn": 56, - "start": 179, - "end": 188 + "endColumn": 58, + "start": 185, + "end": 194 } }, "attributes": [], @@ -425,18 +341,18 @@ "startLine": 5, "startColumn": 17, "endLine": 5, - "endColumn": 34, - "start": 149, - "end": 166 + "endColumn": 36, + "start": 153, + "end": 172 } }, "location": { "startLine": 5, "startColumn": 17, "endLine": 5, - "endColumn": 34, - "start": 149, - "end": 166 + "endColumn": 36, + "start": 153, + "end": 172 } } ], @@ -448,79 +364,37 @@ "raw": "{foo ** bar}", "value": { "type": "BinaryExpression", - "start": 168, - "end": 178, - "loc": { - "start": { - "line": 5, - "column": 35 - }, - "end": { - "line": 5, - "column": 45 - } - }, - "range": [ - 168, - 178 - ], + "start": 1, + "end": 11, "left": { "type": "Identifier", - "start": 168, - "end": 171, - "loc": { - "start": { - "line": 5, - "column": 35 - }, - "end": { - "line": 5, - "column": 38 - } - }, - "range": [ - 168, - 171 - ], + "start": 1, + "end": 4, "name": "foo" }, "operator": "**", "right": { "type": "Identifier", - "start": 175, - "end": 178, - "loc": { - "start": { - "line": 5, - "column": 42 - }, - "end": { - "line": 5, - "column": 45 - } - }, - "range": [ - 175, - 178 - ], + "start": 8, + "end": 11, "name": "bar" }, "location": { "startLine": 5, - "startColumn": 35, + "startColumn": 37, "endLine": 5, - "endColumn": 47, - "start": 167, - "end": 179 + "endColumn": 49, + "start": 173, + "end": 185 } }, "location": { "startLine": 5, - "startColumn": 35, + "startColumn": 37, "endLine": 5, - "endColumn": 47, - "start": 167, - "end": 179 + "endColumn": 49, + "start": 173, + "end": 185 } } ] @@ -533,24 +407,24 @@ "startLine": 6, "startColumn": 9, "endLine": 6, - "endColumn": 54, - "start": 197, - "end": 242, + "endColumn": 56, + "start": 203, + "end": 250, "startTag": { "startLine": 6, "startColumn": 9, "endLine": 6, - "endColumn": 34, - "start": 197, - "end": 222 + "endColumn": 36, + "start": 203, + "end": 230 }, "endTag": { "startLine": 6, - "startColumn": 45, + "startColumn": 47, "endLine": 6, - "endColumn": 54, - "start": 233, - "end": 242 + "endColumn": 56, + "start": 241, + "end": 250 } }, "attributes": [], @@ -580,18 +454,18 @@ "startLine": 6, "startColumn": 17, "endLine": 6, - "endColumn": 33, - "start": 205, - "end": 221 + "endColumn": 35, + "start": 211, + "end": 229 } }, "location": { "startLine": 6, "startColumn": 17, "endLine": 6, - "endColumn": 33, - "start": 205, - "end": 221 + "endColumn": 35, + "start": 211, + "end": 229 } } ], @@ -603,79 +477,37 @@ "raw": "{foo - bar}", "value": { "type": "BinaryExpression", - "start": 223, - "end": 232, - "loc": { - "start": { - "line": 6, - "column": 34 - }, - "end": { - "line": 6, - "column": 43 - } - }, - "range": [ - 223, - 232 - ], + "start": 1, + "end": 10, "left": { "type": "Identifier", - "start": 223, - "end": 226, - "loc": { - "start": { - "line": 6, - "column": 34 - }, - "end": { - "line": 6, - "column": 37 - } - }, - "range": [ - 223, - 226 - ], + "start": 1, + "end": 4, "name": "foo" }, "operator": "-", "right": { "type": "Identifier", - "start": 229, - "end": 232, - "loc": { - "start": { - "line": 6, - "column": 40 - }, - "end": { - "line": 6, - "column": 43 - } - }, - "range": [ - 229, - 232 - ], + "start": 7, + "end": 10, "name": "bar" }, "location": { "startLine": 6, - "startColumn": 34, + "startColumn": 36, "endLine": 6, - "endColumn": 45, - "start": 222, - "end": 233 + "endColumn": 47, + "start": 230, + "end": 241 } }, "location": { "startLine": 6, - "startColumn": 34, + "startColumn": 36, "endLine": 6, - "endColumn": 45, - "start": 222, - "end": 233 + "endColumn": 47, + "start": 230, + "end": 241 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-bit-shift/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-bit-shift/actual.html index fb7858046c..302bc9f9c4 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-bit-shift/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-bit-shift/actual.html @@ -1,7 +1,7 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-bit-shift/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-bit-shift/ast.json index b9656bd8a8..dbfb86a83c 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-bit-shift/ast.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-bit-shift/ast.json @@ -7,7 +7,7 @@ "endLine": 7, "endColumn": 12, "start": 0, - "end": 190, + "end": 196, "startTag": { "startLine": 1, "startColumn": 1, @@ -21,8 +21,8 @@ "startColumn": 1, "endLine": 7, "endColumn": 12, - "start": 179, - "end": 190 + "start": 185, + "end": 196 } }, "directives": [], @@ -37,7 +37,7 @@ "endLine": 6, "endColumn": 15, "start": 15, - "end": 178, + "end": 184, "startTag": { "startLine": 2, "startColumn": 5, @@ -51,8 +51,8 @@ "startColumn": 5, "endLine": 6, "endColumn": 15, - "start": 168, - "end": 178 + "start": 174, + "end": 184 } }, "attributes": [], @@ -68,24 +68,24 @@ "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 46, + "endColumn": 48, "start": 33, - "end": 70, + "end": 72, "startTag": { "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 36, + "endColumn": 38, "start": 33, - "end": 60 + "end": 62 }, "endTag": { "startLine": 3, - "startColumn": 36, + "startColumn": 38, "endLine": 3, - "endColumn": 46, - "start": 60, - "end": 70 + "endColumn": 48, + "start": 62, + "end": 72 } }, "attributes": [], @@ -115,18 +115,18 @@ "startLine": 3, "startColumn": 18, "endLine": 3, - "endColumn": 35, + "endColumn": 37, "start": 42, - "end": 59 + "end": 61 } }, "location": { "startLine": 3, "startColumn": 18, "endLine": 3, - "endColumn": 35, + "endColumn": 37, "start": 42, - "end": 59 + "end": 61 } } ], @@ -142,24 +142,24 @@ "startLine": 4, "startColumn": 9, "endLine": 4, - "endColumn": 46, - "start": 79, - "end": 116, + "endColumn": 48, + "start": 81, + "end": 120, "startTag": { "startLine": 4, "startColumn": 9, "endLine": 4, - "endColumn": 36, - "start": 79, - "end": 106 + "endColumn": 38, + "start": 81, + "end": 110 }, "endTag": { "startLine": 4, - "startColumn": 36, + "startColumn": 38, "endLine": 4, - "endColumn": 46, - "start": 106, - "end": 116 + "endColumn": 48, + "start": 110, + "end": 120 } }, "attributes": [], @@ -189,18 +189,18 @@ "startLine": 4, "startColumn": 18, "endLine": 4, - "endColumn": 35, - "start": 88, - "end": 105 + "endColumn": 37, + "start": 90, + "end": 109 } }, "location": { "startLine": 4, "startColumn": 18, "endLine": 4, - "endColumn": 35, - "start": 88, - "end": 105 + "endColumn": 37, + "start": 90, + "end": 109 } } ], @@ -216,24 +216,24 @@ "startLine": 5, "startColumn": 9, "endLine": 5, - "endColumn": 47, - "start": 125, - "end": 163, + "endColumn": 49, + "start": 129, + "end": 169, "startTag": { "startLine": 5, "startColumn": 9, "endLine": 5, - "endColumn": 37, - "start": 125, - "end": 153 + "endColumn": 39, + "start": 129, + "end": 159 }, "endTag": { "startLine": 5, - "startColumn": 37, + "startColumn": 39, "endLine": 5, - "endColumn": 47, - "start": 153, - "end": 163 + "endColumn": 49, + "start": 159, + "end": 169 } }, "attributes": [], @@ -263,18 +263,18 @@ "startLine": 5, "startColumn": 18, "endLine": 5, - "endColumn": 36, - "start": 134, - "end": 152 + "endColumn": 38, + "start": 138, + "end": 158 } }, "location": { "startLine": 5, "startColumn": 18, "endLine": 5, - "endColumn": 36, - "start": 134, - "end": 152 + "endColumn": 38, + "start": 138, + "end": 158 } } ], diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-bitwise/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-bitwise/actual.html index a2627f0f3e..c05cd3307b 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-bitwise/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-bitwise/actual.html @@ -1,7 +1,7 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-bitwise/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-bitwise/ast.json index fcb1bd4e1c..bb84d2a90e 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-bitwise/ast.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-bitwise/ast.json @@ -7,7 +7,7 @@ "endLine": 7, "endColumn": 12, "start": 0, - "end": 219, + "end": 225, "startTag": { "startLine": 1, "startColumn": 1, @@ -21,8 +21,8 @@ "startColumn": 1, "endLine": 7, "endColumn": 12, - "start": 208, - "end": 219 + "start": 214, + "end": 225 } }, "directives": [], @@ -37,7 +37,7 @@ "endLine": 6, "endColumn": 15, "start": 15, - "end": 207, + "end": 213, "startTag": { "startLine": 2, "startColumn": 5, @@ -51,8 +51,8 @@ "startColumn": 5, "endLine": 6, "endColumn": 15, - "start": 197, - "end": 207 + "start": 203, + "end": 213 } }, "attributes": [], @@ -68,24 +68,24 @@ "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 56, + "endColumn": 58, "start": 33, - "end": 80, + "end": 82, "startTag": { "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 35, + "endColumn": 37, "start": 33, - "end": 59 + "end": 61 }, "endTag": { "startLine": 3, - "startColumn": 46, + "startColumn": 48, "endLine": 3, - "endColumn": 56, - "start": 70, - "end": 80 + "endColumn": 58, + "start": 72, + "end": 82 } }, "attributes": [], @@ -115,18 +115,18 @@ "startLine": 3, "startColumn": 18, "endLine": 3, - "endColumn": 34, + "endColumn": 36, "start": 42, - "end": 58 + "end": 60 } }, "location": { "startLine": 3, "startColumn": 18, "endLine": 3, - "endColumn": 34, + "endColumn": 36, "start": 42, - "end": 58 + "end": 60 } } ], @@ -138,79 +138,37 @@ "raw": "{foo & bar}", "value": { "type": "BinaryExpression", - "start": 60, - "end": 69, - "loc": { - "start": { - "line": 3, - "column": 35 - }, - "end": { - "line": 3, - "column": 44 - } - }, - "range": [ - 60, - 69 - ], + "start": 1, + "end": 10, "left": { "type": "Identifier", - "start": 60, - "end": 63, - "loc": { - "start": { - "line": 3, - "column": 35 - }, - "end": { - "line": 3, - "column": 38 - } - }, - "range": [ - 60, - 63 - ], + "start": 1, + "end": 4, "name": "foo" }, "operator": "&", "right": { "type": "Identifier", - "start": 66, - "end": 69, - "loc": { - "start": { - "line": 3, - "column": 41 - }, - "end": { - "line": 3, - "column": 44 - } - }, - "range": [ - 66, - 69 - ], + "start": 7, + "end": 10, "name": "bar" }, "location": { "startLine": 3, - "startColumn": 35, + "startColumn": 37, "endLine": 3, - "endColumn": 46, - "start": 59, - "end": 70 + "endColumn": 48, + "start": 61, + "end": 72 } }, "location": { "startLine": 3, - "startColumn": 35, + "startColumn": 37, "endLine": 3, - "endColumn": 46, - "start": 59, - "end": 70 + "endColumn": 48, + "start": 61, + "end": 72 } } ] @@ -223,24 +181,24 @@ "startLine": 4, "startColumn": 9, "endLine": 4, - "endColumn": 56, - "start": 89, - "end": 136, + "endColumn": 58, + "start": 91, + "end": 140, "startTag": { "startLine": 4, "startColumn": 9, "endLine": 4, - "endColumn": 35, - "start": 89, - "end": 115 + "endColumn": 37, + "start": 91, + "end": 119 }, "endTag": { "startLine": 4, - "startColumn": 46, + "startColumn": 48, "endLine": 4, - "endColumn": 56, - "start": 126, - "end": 136 + "endColumn": 58, + "start": 130, + "end": 140 } }, "attributes": [], @@ -270,18 +228,18 @@ "startLine": 4, "startColumn": 18, "endLine": 4, - "endColumn": 34, - "start": 98, - "end": 114 + "endColumn": 36, + "start": 100, + "end": 118 } }, "location": { "startLine": 4, "startColumn": 18, "endLine": 4, - "endColumn": 34, - "start": 98, - "end": 114 + "endColumn": 36, + "start": 100, + "end": 118 } } ], @@ -293,79 +251,37 @@ "raw": "{foo | bar}", "value": { "type": "BinaryExpression", - "start": 116, - "end": 125, - "loc": { - "start": { - "line": 4, - "column": 35 - }, - "end": { - "line": 4, - "column": 44 - } - }, - "range": [ - 116, - 125 - ], + "start": 1, + "end": 10, "left": { "type": "Identifier", - "start": 116, - "end": 119, - "loc": { - "start": { - "line": 4, - "column": 35 - }, - "end": { - "line": 4, - "column": 38 - } - }, - "range": [ - 116, - 119 - ], + "start": 1, + "end": 4, "name": "foo" }, "operator": "|", "right": { "type": "Identifier", - "start": 122, - "end": 125, - "loc": { - "start": { - "line": 4, - "column": 41 - }, - "end": { - "line": 4, - "column": 44 - } - }, - "range": [ - 122, - 125 - ], + "start": 7, + "end": 10, "name": "bar" }, "location": { "startLine": 4, - "startColumn": 35, + "startColumn": 37, "endLine": 4, - "endColumn": 46, - "start": 115, - "end": 126 + "endColumn": 48, + "start": 119, + "end": 130 } }, "location": { "startLine": 4, - "startColumn": 35, + "startColumn": 37, "endLine": 4, - "endColumn": 46, - "start": 115, - "end": 126 + "endColumn": 48, + "start": 119, + "end": 130 } } ] @@ -378,24 +294,24 @@ "startLine": 5, "startColumn": 9, "endLine": 5, - "endColumn": 56, - "start": 145, - "end": 192, + "endColumn": 58, + "start": 149, + "end": 198, "startTag": { "startLine": 5, "startColumn": 9, "endLine": 5, - "endColumn": 35, - "start": 145, - "end": 171 + "endColumn": 37, + "start": 149, + "end": 177 }, "endTag": { "startLine": 5, - "startColumn": 46, + "startColumn": 48, "endLine": 5, - "endColumn": 56, - "start": 182, - "end": 192 + "endColumn": 58, + "start": 188, + "end": 198 } }, "attributes": [], @@ -425,18 +341,18 @@ "startLine": 5, "startColumn": 18, "endLine": 5, - "endColumn": 34, - "start": 154, - "end": 170 + "endColumn": 36, + "start": 158, + "end": 176 } }, "location": { "startLine": 5, "startColumn": 18, "endLine": 5, - "endColumn": 34, - "start": 154, - "end": 170 + "endColumn": 36, + "start": 158, + "end": 176 } } ], @@ -448,79 +364,37 @@ "raw": "{foo ^ bar}", "value": { "type": "BinaryExpression", - "start": 172, - "end": 181, - "loc": { - "start": { - "line": 5, - "column": 35 - }, - "end": { - "line": 5, - "column": 44 - } - }, - "range": [ - 172, - 181 - ], + "start": 1, + "end": 10, "left": { "type": "Identifier", - "start": 172, - "end": 175, - "loc": { - "start": { - "line": 5, - "column": 35 - }, - "end": { - "line": 5, - "column": 38 - } - }, - "range": [ - 172, - 175 - ], + "start": 1, + "end": 4, "name": "foo" }, "operator": "^", "right": { "type": "Identifier", - "start": 178, - "end": 181, - "loc": { - "start": { - "line": 5, - "column": 41 - }, - "end": { - "line": 5, - "column": 44 - } - }, - "range": [ - 178, - 181 - ], + "start": 7, + "end": 10, "name": "bar" }, "location": { "startLine": 5, - "startColumn": 35, + "startColumn": 37, "endLine": 5, - "endColumn": 46, - "start": 171, - "end": 182 + "endColumn": 48, + "start": 177, + "end": 188 } }, "location": { "startLine": 5, - "startColumn": 35, + "startColumn": 37, "endLine": 5, - "endColumn": 46, - "start": 171, - "end": 182 + "endColumn": 48, + "start": 177, + "end": 188 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-logical/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-logical/actual.html index 2cf4c0826d..ac4be05d34 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-logical/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-logical/actual.html @@ -1,6 +1,6 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-logical/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-logical/ast.json index b86f36d766..db136b7671 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-logical/ast.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-logical/ast.json @@ -7,7 +7,7 @@ "endLine": 6, "endColumn": 12, "start": 0, - "end": 163, + "end": 167, "startTag": { "startLine": 1, "startColumn": 1, @@ -21,8 +21,8 @@ "startColumn": 1, "endLine": 6, "endColumn": 12, - "start": 152, - "end": 163 + "start": 156, + "end": 167 } }, "directives": [], @@ -37,7 +37,7 @@ "endLine": 5, "endColumn": 15, "start": 15, - "end": 151, + "end": 155, "startTag": { "startLine": 2, "startColumn": 5, @@ -51,8 +51,8 @@ "startColumn": 5, "endLine": 5, "endColumn": 15, - "start": 141, - "end": 151 + "start": 145, + "end": 155 } }, "attributes": [], @@ -68,24 +68,24 @@ "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 56, + "endColumn": 58, "start": 33, - "end": 80, + "end": 82, "startTag": { "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 35, + "endColumn": 37, "start": 33, - "end": 59 + "end": 61 }, "endTag": { "startLine": 3, - "startColumn": 47, + "startColumn": 49, "endLine": 3, - "endColumn": 56, - "start": 71, - "end": 80 + "endColumn": 58, + "start": 73, + "end": 82 } }, "attributes": [], @@ -115,18 +115,18 @@ "startLine": 3, "startColumn": 17, "endLine": 3, - "endColumn": 34, + "endColumn": 36, "start": 41, - "end": 58 + "end": 60 } }, "location": { "startLine": 3, "startColumn": 17, "endLine": 3, - "endColumn": 34, + "endColumn": 36, "start": 41, - "end": 58 + "end": 60 } } ], @@ -138,79 +138,37 @@ "raw": "{foo || bar}", "value": { "type": "LogicalExpression", - "start": 60, - "end": 70, - "loc": { - "start": { - "line": 3, - "column": 35 - }, - "end": { - "line": 3, - "column": 45 - } - }, - "range": [ - 60, - 70 - ], + "start": 1, + "end": 11, "left": { "type": "Identifier", - "start": 60, - "end": 63, - "loc": { - "start": { - "line": 3, - "column": 35 - }, - "end": { - "line": 3, - "column": 38 - } - }, - "range": [ - 60, - 63 - ], + "start": 1, + "end": 4, "name": "foo" }, "operator": "||", "right": { "type": "Identifier", - "start": 67, - "end": 70, - "loc": { - "start": { - "line": 3, - "column": 42 - }, - "end": { - "line": 3, - "column": 45 - } - }, - "range": [ - 67, - 70 - ], + "start": 8, + "end": 11, "name": "bar" }, "location": { "startLine": 3, - "startColumn": 35, + "startColumn": 37, "endLine": 3, - "endColumn": 47, - "start": 59, - "end": 71 + "endColumn": 49, + "start": 61, + "end": 73 } }, "location": { "startLine": 3, - "startColumn": 35, + "startColumn": 37, "endLine": 3, - "endColumn": 47, - "start": 59, - "end": 71 + "endColumn": 49, + "start": 61, + "end": 73 } } ] @@ -223,24 +181,24 @@ "startLine": 4, "startColumn": 9, "endLine": 4, - "endColumn": 56, - "start": 89, - "end": 136, + "endColumn": 58, + "start": 91, + "end": 140, "startTag": { "startLine": 4, "startColumn": 9, "endLine": 4, - "endColumn": 35, - "start": 89, - "end": 115 + "endColumn": 37, + "start": 91, + "end": 119 }, "endTag": { "startLine": 4, - "startColumn": 47, + "startColumn": 49, "endLine": 4, - "endColumn": 56, - "start": 127, - "end": 136 + "endColumn": 58, + "start": 131, + "end": 140 } }, "attributes": [], @@ -270,18 +228,18 @@ "startLine": 4, "startColumn": 17, "endLine": 4, - "endColumn": 34, - "start": 97, - "end": 114 + "endColumn": 36, + "start": 99, + "end": 118 } }, "location": { "startLine": 4, "startColumn": 17, "endLine": 4, - "endColumn": 34, - "start": 97, - "end": 114 + "endColumn": 36, + "start": 99, + "end": 118 } } ], @@ -293,79 +251,37 @@ "raw": "{foo && bar}", "value": { "type": "LogicalExpression", - "start": 116, - "end": 126, - "loc": { - "start": { - "line": 4, - "column": 35 - }, - "end": { - "line": 4, - "column": 45 - } - }, - "range": [ - 116, - 126 - ], + "start": 1, + "end": 11, "left": { "type": "Identifier", - "start": 116, - "end": 119, - "loc": { - "start": { - "line": 4, - "column": 35 - }, - "end": { - "line": 4, - "column": 38 - } - }, - "range": [ - 116, - 119 - ], + "start": 1, + "end": 4, "name": "foo" }, "operator": "&&", "right": { "type": "Identifier", - "start": 123, - "end": 126, - "loc": { - "start": { - "line": 4, - "column": 42 - }, - "end": { - "line": 4, - "column": 45 - } - }, - "range": [ - 123, - 126 - ], + "start": 8, + "end": 11, "name": "bar" }, "location": { "startLine": 4, - "startColumn": 35, + "startColumn": 37, "endLine": 4, - "endColumn": 47, - "start": 115, - "end": 127 + "endColumn": 49, + "start": 119, + "end": 131 } }, "location": { "startLine": 4, - "startColumn": 35, + "startColumn": 37, "endLine": 4, - "endColumn": 47, - "start": 115, - "end": 127 + "endColumn": 49, + "start": 119, + "end": 131 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-relational/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-relational/actual.html index 0a33a38fef..66cec028d0 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-relational/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-relational/actual.html @@ -1,6 +1,11 @@ + \ No newline at end of file diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-relational/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-relational/ast.json index 0b63da31df..adaf026b43 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-relational/ast.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-relational/ast.json @@ -4,10 +4,10 @@ "location": { "startLine": 1, "startColumn": 1, - "endLine": 6, + "endLine": 11, "endColumn": 12, "start": 0, - "end": 159, + "end": 369, "startTag": { "startLine": 1, "startColumn": 1, @@ -17,12 +17,12 @@ "end": 10 }, "endTag": { - "startLine": 6, + "startLine": 11, "startColumn": 1, - "endLine": 6, + "endLine": 11, "endColumn": 12, - "start": 148, - "end": 159 + "start": 358, + "end": 369 } }, "directives": [], @@ -34,10 +34,10 @@ "location": { "startLine": 2, "startColumn": 5, - "endLine": 5, + "endLine": 10, "endColumn": 15, "start": 15, - "end": 147, + "end": 357, "startTag": { "startLine": 2, "startColumn": 5, @@ -47,12 +47,12 @@ "end": 24 }, "endTag": { - "startLine": 5, + "startLine": 10, "startColumn": 5, - "endLine": 5, + "endLine": 10, "endColumn": 15, - "start": 137, - "end": 147 + "start": 347, + "end": 357 } }, "attributes": [], @@ -68,24 +68,24 @@ "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 54, + "endColumn": 56, "start": 33, - "end": 78, + "end": 80, "startTag": { "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 34, + "endColumn": 36, "start": 33, - "end": 58 + "end": 60 }, "endTag": { "startLine": 3, - "startColumn": 45, + "startColumn": 47, "endLine": 3, - "endColumn": 54, - "start": 69, - "end": 78 + "endColumn": 56, + "start": 71, + "end": 80 } }, "attributes": [], @@ -115,18 +115,18 @@ "startLine": 3, "startColumn": 17, "endLine": 3, - "endColumn": 33, + "endColumn": 35, "start": 41, - "end": 57 + "end": 59 } }, "location": { "startLine": 3, "startColumn": 17, "endLine": 3, - "endColumn": 33, + "endColumn": 35, "start": 41, - "end": 57 + "end": 59 } } ], @@ -138,109 +138,80 @@ "raw": "{foo > bar}", "value": { "type": "BinaryExpression", - "start": 59, - "end": 68, - "loc": { - "start": { - "line": 3, - "column": 34 - }, - "end": { - "line": 3, - "column": 43 - } - }, - "range": [ - 59, - 68 - ], + "start": 1, + "end": 10, "left": { "type": "Identifier", - "start": 59, - "end": 62, - "loc": { - "start": { - "line": 3, - "column": 34 - }, - "end": { - "line": 3, - "column": 37 - } - }, - "range": [ - 59, - 62 - ], + "start": 1, + "end": 4, "name": "foo" }, "operator": ">", "right": { "type": "Identifier", - "start": 65, - "end": 68, - "loc": { - "start": { - "line": 3, - "column": 40 - }, - "end": { - "line": 3, - "column": 43 - } - }, - "range": [ - 65, - 68 - ], + "start": 7, + "end": 10, "name": "bar" }, "location": { "startLine": 3, - "startColumn": 34, + "startColumn": 36, "endLine": 3, - "endColumn": 45, - "start": 58, - "end": 69 + "endColumn": 47, + "start": 60, + "end": 71 } }, "location": { "startLine": 3, - "startColumn": 34, + "startColumn": 36, "endLine": 3, - "endColumn": 45, - "start": 58, - "end": 69 + "endColumn": 47, + "start": 60, + "end": 71 } } ] }, + { + "type": "Comment", + "raw": " \n Using > in a text node (foo < bar) would couse a html parsing error.\n It is not supported and has a dedicated test. Any expression must be HTML\n compliant \n ", + "value": " \n Using > in a text node (foo < bar) would couse a html parsing error.\n It is not supported and has a dedicated test. Any expression must be HTML\n compliant \n ", + "location": { + "startLine": 4, + "startColumn": 9, + "endLine": 8, + "endColumn": 12, + "start": 89, + "end": 296 + } + }, { "type": "Component", "name": "x-pert", "namespace": "http://www.w3.org/1999/xhtml", "location": { - "startLine": 4, + "startLine": 9, "startColumn": 9, - "endLine": 4, - "endColumn": 54, - "start": 87, - "end": 132, + "endLine": 9, + "endColumn": 45, + "start": 305, + "end": 341, "startTag": { - "startLine": 4, + "startLine": 9, "startColumn": 9, - "endLine": 4, - "endColumn": 34, - "start": 87, - "end": 112 + "endLine": 9, + "endColumn": 36, + "start": 305, + "end": 332 }, "endTag": { - "startLine": 4, - "startColumn": 45, - "endLine": 4, - "endColumn": 54, - "start": 123, - "end": 132 + "startLine": 9, + "startColumn": 36, + "endLine": 9, + "endColumn": 45, + "start": 332, + "end": 341 } }, "attributes": [], @@ -267,108 +238,27 @@ "name": "bar" }, "location": { - "startLine": 4, + "startLine": 9, "startColumn": 17, - "endLine": 4, - "endColumn": 33, - "start": 95, - "end": 111 + "endLine": 9, + "endColumn": 35, + "start": 313, + "end": 331 } }, "location": { - "startLine": 4, + "startLine": 9, "startColumn": 17, - "endLine": 4, - "endColumn": 33, - "start": 95, - "end": 111 + "endLine": 9, + "endColumn": 35, + "start": 313, + "end": 331 } } ], "directives": [], "listeners": [], - "children": [ - { - "type": "Text", - "raw": "{foo < bar}", - "value": { - "type": "BinaryExpression", - "start": 113, - "end": 122, - "loc": { - "start": { - "line": 4, - "column": 34 - }, - "end": { - "line": 4, - "column": 43 - } - }, - "range": [ - 113, - 122 - ], - "left": { - "type": "Identifier", - "start": 113, - "end": 116, - "loc": { - "start": { - "line": 4, - "column": 34 - }, - "end": { - "line": 4, - "column": 37 - } - }, - "range": [ - 113, - 116 - ], - "name": "foo" - }, - "operator": "<", - "right": { - "type": "Identifier", - "start": 119, - "end": 122, - "loc": { - "start": { - "line": 4, - "column": 40 - }, - "end": { - "line": 4, - "column": 43 - } - }, - "range": [ - 119, - 122 - ], - "name": "bar" - }, - "location": { - "startLine": 4, - "startColumn": 34, - "endLine": 4, - "endColumn": 45, - "start": 112, - "end": 123 - } - }, - "location": { - "startLine": 4, - "startColumn": 34, - "endLine": 4, - "endColumn": 45, - "start": 112, - "end": 123 - } - } - ] + "children": [] } ] } diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-relational/expected.js b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-relational/expected.js index bf577106fe..ccf5fac001 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-relational/expected.js +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/binary-expr-relational/expected.js @@ -25,17 +25,12 @@ function tmpl($api, $cmp, $slotset, $ctx) { }, [api_text(api_dynamic_text($cmp.foo > $cmp.bar))] ), - api_custom_element( - "x-pert", - _xPert, - { - props: { - attr: $cmp.foo < $cmp.bar, - }, - key: 2, + api_custom_element("x-pert", _xPert, { + props: { + attr: $cmp.foo < $cmp.bar, }, - [api_text(api_dynamic_text($cmp.foo < $cmp.bar))] - ), + key: 2, + }), ]), ]; /*LWC compiler vX.X.X*/ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/boolean-literal/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/boolean-literal/actual.html index 5c35107920..a7394d4fbe 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/boolean-literal/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/boolean-literal/actual.html @@ -1,6 +1,6 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/boolean-literal/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/boolean-literal/ast.json index f2b7c2141f..b5feb71e79 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/boolean-literal/ast.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/boolean-literal/ast.json @@ -7,7 +7,7 @@ "endLine": 6, "endColumn": 12, "start": 0, - "end": 141, + "end": 145, "startTag": { "startLine": 1, "startColumn": 1, @@ -21,8 +21,8 @@ "startColumn": 1, "endLine": 6, "endColumn": 12, - "start": 130, - "end": 141 + "start": 134, + "end": 145 } }, "directives": [], @@ -37,7 +37,7 @@ "endLine": 5, "endColumn": 15, "start": 15, - "end": 129, + "end": 133, "startTag": { "startLine": 2, "startColumn": 5, @@ -51,8 +51,8 @@ "startColumn": 5, "endLine": 5, "endColumn": 15, - "start": 119, - "end": 129 + "start": 123, + "end": 133 } }, "attributes": [], @@ -68,24 +68,24 @@ "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 44, + "endColumn": 46, "start": 33, - "end": 68, + "end": 70, "startTag": { "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 29, + "endColumn": 31, "start": 33, - "end": 53 + "end": 55 }, "endTag": { "startLine": 3, - "startColumn": 35, + "startColumn": 37, "endLine": 3, - "endColumn": 44, - "start": 59, - "end": 68 + "endColumn": 46, + "start": 61, + "end": 70 } }, "attributes": [], @@ -104,18 +104,18 @@ "startLine": 3, "startColumn": 17, "endLine": 3, - "endColumn": 28, + "endColumn": 30, "start": 41, - "end": 52 + "end": 54 } }, "location": { "startLine": 3, "startColumn": 17, "endLine": 3, - "endColumn": 28, + "endColumn": 30, "start": 41, - "end": 52 + "end": 54 } } ], @@ -127,40 +127,26 @@ "raw": "{true}", "value": { "type": "Literal", - "start": 54, - "end": 58, - "loc": { - "start": { - "line": 3, - "column": 29 - }, - "end": { - "line": 3, - "column": 33 - } - }, - "range": [ - 54, - 58 - ], + "start": 1, + "end": 5, "value": true, "raw": "true", "location": { "startLine": 3, - "startColumn": 29, + "startColumn": 31, "endLine": 3, - "endColumn": 35, - "start": 53, - "end": 59 + "endColumn": 37, + "start": 55, + "end": 61 } }, "location": { "startLine": 3, - "startColumn": 29, + "startColumn": 31, "endLine": 3, - "endColumn": 35, - "start": 53, - "end": 59 + "endColumn": 37, + "start": 55, + "end": 61 } } ] @@ -173,24 +159,24 @@ "startLine": 4, "startColumn": 9, "endLine": 4, - "endColumn": 46, - "start": 77, - "end": 114, + "endColumn": 48, + "start": 79, + "end": 118, "startTag": { "startLine": 4, "startColumn": 9, "endLine": 4, - "endColumn": 30, - "start": 77, - "end": 98 + "endColumn": 32, + "start": 79, + "end": 102 }, "endTag": { "startLine": 4, - "startColumn": 37, + "startColumn": 39, "endLine": 4, - "endColumn": 46, - "start": 105, - "end": 114 + "endColumn": 48, + "start": 109, + "end": 118 } }, "attributes": [], @@ -209,18 +195,18 @@ "startLine": 4, "startColumn": 17, "endLine": 4, - "endColumn": 29, - "start": 85, - "end": 97 + "endColumn": 31, + "start": 87, + "end": 101 } }, "location": { "startLine": 4, "startColumn": 17, "endLine": 4, - "endColumn": 29, - "start": 85, - "end": 97 + "endColumn": 31, + "start": 87, + "end": 101 } } ], @@ -232,40 +218,26 @@ "raw": "{false}", "value": { "type": "Literal", - "start": 99, - "end": 104, - "loc": { - "start": { - "line": 4, - "column": 30 - }, - "end": { - "line": 4, - "column": 35 - } - }, - "range": [ - 99, - 104 - ], + "start": 1, + "end": 6, "value": false, "raw": "false", "location": { "startLine": 4, - "startColumn": 30, + "startColumn": 32, "endLine": 4, - "endColumn": 37, - "start": 98, - "end": 105 + "endColumn": 39, + "start": 102, + "end": 109 } }, "location": { "startLine": 4, - "startColumn": 30, + "startColumn": 32, "endLine": 4, - "endColumn": 37, - "start": 98, - "end": 105 + "endColumn": 39, + "start": 102, + "end": 109 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/call-expr/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/call-expr/actual.html index 87d57d81b8..f0e76a6e56 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/call-expr/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/call-expr/actual.html @@ -1,5 +1,5 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/call-expr/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/call-expr/ast.json index 61be6f3ead..fe2840d84a 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/call-expr/ast.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/call-expr/ast.json @@ -7,7 +7,7 @@ "endLine": 5, "endColumn": 12, "start": 0, - "end": 103, + "end": 105, "startTag": { "startLine": 1, "startColumn": 1, @@ -21,8 +21,8 @@ "startColumn": 1, "endLine": 5, "endColumn": 12, - "start": 92, - "end": 103 + "start": 94, + "end": 105 } }, "directives": [], @@ -37,7 +37,7 @@ "endLine": 4, "endColumn": 15, "start": 15, - "end": 91, + "end": 93, "startTag": { "startLine": 2, "startColumn": 5, @@ -51,8 +51,8 @@ "startColumn": 5, "endLine": 4, "endColumn": 15, - "start": 81, - "end": 91 + "start": 83, + "end": 93 } }, "attributes": [], @@ -68,24 +68,24 @@ "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 52, + "endColumn": 54, "start": 33, - "end": 76, + "end": 78, "startTag": { "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 33, + "endColumn": 35, "start": 33, - "end": 57 + "end": 59 }, "endTag": { "startLine": 3, - "startColumn": 43, + "startColumn": 45, "endLine": 3, - "endColumn": 52, - "start": 67, - "end": 76 + "endColumn": 54, + "start": 69, + "end": 78 } }, "attributes": [], @@ -110,18 +110,18 @@ "startLine": 3, "startColumn": 17, "endLine": 3, - "endColumn": 32, + "endColumn": 34, "start": 41, - "end": 56 + "end": 58 } }, "location": { "startLine": 3, "startColumn": 17, "endLine": 3, - "endColumn": 32, + "endColumn": 34, "start": 41, - "end": 56 + "end": 58 } } ], @@ -133,60 +133,32 @@ "raw": "{getBaz()}", "value": { "type": "CallExpression", - "start": 58, - "end": 66, - "loc": { - "start": { - "line": 3, - "column": 33 - }, - "end": { - "line": 3, - "column": 41 - } - }, - "range": [ - 58, - 66 - ], + "start": 1, + "end": 9, "callee": { "type": "Identifier", - "start": 58, - "end": 64, - "loc": { - "start": { - "line": 3, - "column": 33 - }, - "end": { - "line": 3, - "column": 39 - } - }, - "range": [ - 58, - 64 - ], + "start": 1, + "end": 7, "name": "getBaz" }, "arguments": [], "optional": false, "location": { "startLine": 3, - "startColumn": 33, + "startColumn": 35, "endLine": 3, - "endColumn": 43, - "start": 57, - "end": 67 + "endColumn": 45, + "start": 59, + "end": 69 } }, "location": { "startLine": 3, - "startColumn": 33, + "startColumn": 35, "endLine": 3, - "endColumn": 43, - "start": 57, - "end": 67 + "endColumn": 45, + "start": 59, + "end": 69 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/computed-property/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/computed-property/actual.html index b6b8ed78d9..0dc80e2b6f 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/computed-property/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/computed-property/actual.html @@ -1,3 +1,3 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/computed-property/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/computed-property/ast.json index 5fd09af8f9..db2579040d 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/computed-property/ast.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/computed-property/ast.json @@ -7,7 +7,7 @@ "endLine": 3, "endColumn": 12, "start": 0, - "end": 123, + "end": 125, "startTag": { "startLine": 1, "startColumn": 1, @@ -21,8 +21,8 @@ "startColumn": 1, "endLine": 3, "endColumn": 12, - "start": 112, - "end": 123 + "start": 114, + "end": 125 } }, "directives": [], @@ -35,24 +35,24 @@ "startLine": 2, "startColumn": 5, "endLine": 2, - "endColumn": 101, + "endColumn": 103, "start": 15, - "end": 111, + "end": 113, "startTag": { "startLine": 2, "startColumn": 5, "endLine": 2, - "endColumn": 37, + "endColumn": 39, "start": 15, - "end": 47 + "end": 49 }, "endTag": { "startLine": 2, - "startColumn": 91, + "startColumn": 93, "endLine": 2, - "endColumn": 101, - "start": 101, - "end": 111 + "endColumn": 103, + "start": 103, + "end": 113 } }, "attributes": [], @@ -97,18 +97,18 @@ "startLine": 2, "startColumn": 14, "endLine": 2, - "endColumn": 36, + "endColumn": 38, "start": 24, - "end": 46 + "end": 48 } }, "location": { "startLine": 2, "startColumn": 14, "endLine": 2, - "endColumn": 36, + "endColumn": 38, "start": 24, - "end": 46 + "end": 48 } } ], @@ -118,78 +118,22 @@ "raw": "{bar.arr[baz]}", "value": { "type": "MemberExpression", - "start": 48, - "end": 60, - "loc": { - "start": { - "line": 2, - "column": 37 - }, - "end": { - "line": 2, - "column": 49 - } - }, - "range": [ - 48, - 60 - ], + "start": 1, + "end": 13, "object": { "type": "MemberExpression", - "start": 48, - "end": 55, - "loc": { - "start": { - "line": 2, - "column": 37 - }, - "end": { - "line": 2, - "column": 44 - } - }, - "range": [ - 48, - 55 - ], + "start": 1, + "end": 8, "object": { "type": "Identifier", - "start": 48, - "end": 51, - "loc": { - "start": { - "line": 2, - "column": 37 - }, - "end": { - "line": 2, - "column": 40 - } - }, - "range": [ - 48, - 51 - ], + "start": 1, + "end": 4, "name": "bar" }, "property": { "type": "Identifier", - "start": 52, - "end": 55, - "loc": { - "start": { - "line": 2, - "column": 41 - }, - "end": { - "line": 2, - "column": 44 - } - }, - "range": [ - 52, - 55 - ], + "start": 5, + "end": 8, "name": "arr" }, "computed": false, @@ -197,42 +141,28 @@ }, "property": { "type": "Identifier", - "start": 56, - "end": 59, - "loc": { - "start": { - "line": 2, - "column": 45 - }, - "end": { - "line": 2, - "column": 48 - } - }, - "range": [ - 56, - 59 - ], + "start": 9, + "end": 12, "name": "baz" }, "computed": true, "optional": false, "location": { "startLine": 2, - "startColumn": 37, + "startColumn": 39, "endLine": 2, - "endColumn": 51, - "start": 47, - "end": 61 + "endColumn": 93, + "start": 49, + "end": 103 } }, "location": { "startLine": 2, - "startColumn": 37, + "startColumn": 39, "endLine": 2, - "endColumn": 51, - "start": 47, - "end": 61 + "endColumn": 93, + "start": 49, + "end": 103 } }, { @@ -244,11 +174,11 @@ }, "location": { "startLine": 2, - "startColumn": 51, + "startColumn": 39, "endLine": 2, - "endColumn": 52, - "start": 61, - "end": 62 + "endColumn": 93, + "start": 49, + "end": 103 } }, { @@ -256,96 +186,26 @@ "raw": "{bar.baz.arr[quux]}", "value": { "type": "MemberExpression", - "start": 63, - "end": 80, - "loc": { - "start": { - "line": 2, - "column": 52 - }, - "end": { - "line": 2, - "column": 69 - } - }, - "range": [ - 63, - 80 - ], + "start": 16, + "end": 33, "object": { "type": "MemberExpression", - "start": 63, - "end": 74, - "loc": { - "start": { - "line": 2, - "column": 52 - }, - "end": { - "line": 2, - "column": 63 - } - }, - "range": [ - 63, - 74 - ], + "start": 16, + "end": 27, "object": { "type": "MemberExpression", - "start": 63, - "end": 70, - "loc": { - "start": { - "line": 2, - "column": 52 - }, - "end": { - "line": 2, - "column": 59 - } - }, - "range": [ - 63, - 70 - ], + "start": 16, + "end": 23, "object": { "type": "Identifier", - "start": 63, - "end": 66, - "loc": { - "start": { - "line": 2, - "column": 52 - }, - "end": { - "line": 2, - "column": 55 - } - }, - "range": [ - 63, - 66 - ], + "start": 16, + "end": 19, "name": "bar" }, "property": { "type": "Identifier", - "start": 67, - "end": 70, - "loc": { - "start": { - "line": 2, - "column": 56 - }, - "end": { - "line": 2, - "column": 59 - } - }, - "range": [ - 67, - 70 - ], + "start": 20, + "end": 23, "name": "baz" }, "computed": false, @@ -353,22 +213,8 @@ }, "property": { "type": "Identifier", - "start": 71, - "end": 74, - "loc": { - "start": { - "line": 2, - "column": 60 - }, - "end": { - "line": 2, - "column": 63 - } - }, - "range": [ - 71, - 74 - ], + "start": 24, + "end": 27, "name": "arr" }, "computed": false, @@ -376,42 +222,28 @@ }, "property": { "type": "Identifier", - "start": 75, - "end": 79, - "loc": { - "start": { - "line": 2, - "column": 64 - }, - "end": { - "line": 2, - "column": 68 - } - }, - "range": [ - 75, - 79 - ], + "start": 28, + "end": 32, "name": "quux" }, "computed": true, "optional": false, "location": { "startLine": 2, - "startColumn": 52, + "startColumn": 39, "endLine": 2, - "endColumn": 71, - "start": 62, - "end": 81 + "endColumn": 93, + "start": 49, + "end": 103 } }, "location": { "startLine": 2, - "startColumn": 52, + "startColumn": 39, "endLine": 2, - "endColumn": 71, - "start": 62, - "end": 81 + "endColumn": 93, + "start": 49, + "end": 103 } }, { @@ -423,11 +255,11 @@ }, "location": { "startLine": 2, - "startColumn": 71, + "startColumn": 39, "endLine": 2, - "endColumn": 72, - "start": 81, - "end": 82 + "endColumn": 93, + "start": 49, + "end": 103 } }, { @@ -435,78 +267,22 @@ "raw": "{bar.arr[baz.quux]}", "value": { "type": "MemberExpression", - "start": 83, - "end": 100, - "loc": { - "start": { - "line": 2, - "column": 72 - }, - "end": { - "line": 2, - "column": 89 - } - }, - "range": [ - 83, - 100 - ], + "start": 36, + "end": 53, "object": { "type": "MemberExpression", - "start": 83, - "end": 90, - "loc": { - "start": { - "line": 2, - "column": 72 - }, - "end": { - "line": 2, - "column": 79 - } - }, - "range": [ - 83, - 90 - ], + "start": 36, + "end": 43, "object": { "type": "Identifier", - "start": 83, - "end": 86, - "loc": { - "start": { - "line": 2, - "column": 72 - }, - "end": { - "line": 2, - "column": 75 - } - }, - "range": [ - 83, - 86 - ], + "start": 36, + "end": 39, "name": "bar" }, "property": { "type": "Identifier", - "start": 87, - "end": 90, - "loc": { - "start": { - "line": 2, - "column": 76 - }, - "end": { - "line": 2, - "column": 79 - } - }, - "range": [ - 87, - 90 - ], + "start": 40, + "end": 43, "name": "arr" }, "computed": false, @@ -514,60 +290,18 @@ }, "property": { "type": "MemberExpression", - "start": 91, - "end": 99, - "loc": { - "start": { - "line": 2, - "column": 80 - }, - "end": { - "line": 2, - "column": 88 - } - }, - "range": [ - 91, - 99 - ], + "start": 44, + "end": 52, "object": { "type": "Identifier", - "start": 91, - "end": 94, - "loc": { - "start": { - "line": 2, - "column": 80 - }, - "end": { - "line": 2, - "column": 83 - } - }, - "range": [ - 91, - 94 - ], + "start": 44, + "end": 47, "name": "baz" }, "property": { "type": "Identifier", - "start": 95, - "end": 99, - "loc": { - "start": { - "line": 2, - "column": 84 - }, - "end": { - "line": 2, - "column": 88 - } - }, - "range": [ - 95, - 99 - ], + "start": 48, + "end": 52, "name": "quux" }, "computed": false, @@ -577,20 +311,20 @@ "optional": false, "location": { "startLine": 2, - "startColumn": 72, + "startColumn": 39, "endLine": 2, - "endColumn": 91, - "start": 82, - "end": 101 + "endColumn": 93, + "start": 49, + "end": 103 } }, "location": { "startLine": 2, - "startColumn": 72, + "startColumn": 39, "endLine": 2, - "endColumn": 91, - "start": 82, - "end": 101 + "endColumn": 93, + "start": 49, + "end": 103 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/identifier/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/identifier/actual.html index 377329abac..539e57b89e 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/identifier/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/identifier/actual.html @@ -1,8 +1,8 @@ diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/identifier/ast.json b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/identifier/ast.json index dc3eebe9b1..ba35e43be6 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/identifier/ast.json +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/identifier/ast.json @@ -7,7 +7,7 @@ "endLine": 8, "endColumn": 12, "start": 0, - "end": 235, + "end": 246, "startTag": { "startLine": 1, "startColumn": 1, @@ -21,8 +21,8 @@ "startColumn": 1, "endLine": 8, "endColumn": 12, - "start": 224, - "end": 235 + "start": 235, + "end": 246 } }, "directives": [], @@ -37,7 +37,7 @@ "endLine": 7, "endColumn": 15, "start": 15, - "end": 223, + "end": 234, "startTag": { "startLine": 2, "startColumn": 5, @@ -51,8 +51,8 @@ "startColumn": 5, "endLine": 7, "endColumn": 15, - "start": 213, - "end": 223 + "start": 224, + "end": 234 } }, "attributes": [], @@ -68,24 +68,24 @@ "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 42, + "endColumn": 44, "start": 33, - "end": 66, + "end": 68, "startTag": { "startLine": 3, "startColumn": 9, "endLine": 3, - "endColumn": 28, + "endColumn": 30, "start": 33, - "end": 52 + "end": 54 }, "endTag": { "startLine": 3, - "startColumn": 33, + "startColumn": 35, "endLine": 3, - "endColumn": 42, - "start": 57, - "end": 66 + "endColumn": 44, + "start": 59, + "end": 68 } }, "attributes": [], @@ -103,18 +103,18 @@ "startLine": 3, "startColumn": 17, "endLine": 3, - "endColumn": 27, + "endColumn": 29, "start": 41, - "end": 51 + "end": 53 } }, "location": { "startLine": 3, "startColumn": 17, "endLine": 3, - "endColumn": 27, + "endColumn": 29, "start": 41, - "end": 51 + "end": 53 } } ], @@ -126,39 +126,25 @@ "raw": "{foo}", "value": { "type": "Identifier", - "start": 53, - "end": 56, - "loc": { - "start": { - "line": 3, - "column": 28 - }, - "end": { - "line": 3, - "column": 31 - } - }, - "range": [ - 53, - 56 - ], + "start": 1, + "end": 4, "name": "foo", "location": { "startLine": 3, - "startColumn": 28, + "startColumn": 30, "endLine": 3, - "endColumn": 33, - "start": 52, - "end": 57 + "endColumn": 35, + "start": 54, + "end": 59 } }, "location": { "startLine": 3, - "startColumn": 28, + "startColumn": 30, "endLine": 3, - "endColumn": 33, - "start": 52, - "end": 57 + "endColumn": 35, + "start": 54, + "end": 59 } } ] @@ -171,24 +157,24 @@ "startLine": 4, "startColumn": 9, "endLine": 4, - "endColumn": 46, - "start": 75, - "end": 112, + "endColumn": 48, + "start": 77, + "end": 116, "startTag": { "startLine": 4, "startColumn": 9, "endLine": 4, - "endColumn": 30, - "start": 75, - "end": 96 + "endColumn": 32, + "start": 77, + "end": 100 }, "endTag": { "startLine": 4, - "startColumn": 37, + "startColumn": 39, "endLine": 4, - "endColumn": 46, - "start": 103, - "end": 112 + "endColumn": 48, + "start": 107, + "end": 116 } }, "attributes": [], @@ -206,18 +192,18 @@ "startLine": 4, "startColumn": 17, "endLine": 4, - "endColumn": 29, - "start": 83, - "end": 95 + "endColumn": 31, + "start": 85, + "end": 99 } }, "location": { "startLine": 4, "startColumn": 17, "endLine": 4, - "endColumn": 29, - "start": 83, - "end": 95 + "endColumn": 31, + "start": 85, + "end": 99 } } ], @@ -229,39 +215,25 @@ "raw": "{ foo }", "value": { "type": "Identifier", - "start": 98, - "end": 101, - "loc": { - "start": { - "line": 4, - "column": 31 - }, - "end": { - "line": 4, - "column": 34 - } - }, - "range": [ - 98, - 101 - ], + "start": 2, + "end": 5, "name": "foo", "location": { "startLine": 4, - "startColumn": 30, + "startColumn": 32, "endLine": 4, - "endColumn": 37, - "start": 96, - "end": 103 + "endColumn": 39, + "start": 100, + "end": 107 } }, "location": { "startLine": 4, - "startColumn": 30, + "startColumn": 32, "endLine": 4, - "endColumn": 37, - "start": 96, - "end": 103 + "endColumn": 39, + "start": 100, + "end": 107 } } ] @@ -274,24 +246,24 @@ "startLine": 5, "startColumn": 9, "endLine": 5, - "endColumn": 48, - "start": 121, - "end": 160, + "endColumn": 52, + "start": 125, + "end": 168, "startTag": { "startLine": 5, "startColumn": 9, "endLine": 5, - "endColumn": 30, - "start": 121, - "end": 142 + "endColumn": 34, + "start": 125, + "end": 150 }, "endTag": { "startLine": 5, - "startColumn": 39, + "startColumn": 43, "endLine": 5, - "endColumn": 48, - "start": 151, - "end": 160 + "endColumn": 52, + "start": 159, + "end": 168 } }, "attributes": [], @@ -302,25 +274,25 @@ "attributeName": "attr", "value": { "type": "Identifier", - "start": 2, - "end": 5, + "start": 3, + "end": 6, "name": "foo", "location": { "startLine": 5, "startColumn": 17, "endLine": 5, - "endColumn": 29, - "start": 129, - "end": 141 + "endColumn": 33, + "start": 133, + "end": 149 } }, "location": { "startLine": 5, "startColumn": 17, "endLine": 5, - "endColumn": 29, - "start": 129, - "end": 141 + "endColumn": 33, + "start": 133, + "end": 149 } } ], @@ -332,39 +304,25 @@ "raw": "{ (foo )}", "value": { "type": "Identifier", - "start": 145, - "end": 148, - "loc": { - "start": { - "line": 5, - "column": 32 - }, - "end": { - "line": 5, - "column": 35 - } - }, - "range": [ - 145, - 148 - ], + "start": 3, + "end": 6, "name": "foo", "location": { "startLine": 5, - "startColumn": 30, + "startColumn": 34, "endLine": 5, - "endColumn": 39, - "start": 142, - "end": 151 + "endColumn": 43, + "start": 150, + "end": 159 } }, "location": { "startLine": 5, - "startColumn": 30, + "startColumn": 34, "endLine": 5, - "endColumn": 39, - "start": 142, - "end": 151 + "endColumn": 43, + "start": 150, + "end": 159 } } ] @@ -377,24 +335,24 @@ "startLine": 6, "startColumn": 9, "endLine": 6, - "endColumn": 48, - "start": 169, - "end": 208, + "endColumn": 51, + "start": 177, + "end": 219, "startTag": { "startLine": 6, "startColumn": 9, "endLine": 6, - "endColumn": 31, - "start": 169, - "end": 191 + "endColumn": 34, + "start": 177, + "end": 202 }, "endTag": { "startLine": 6, - "startColumn": 39, + "startColumn": 42, "endLine": 6, - "endColumn": 48, - "start": 199, - "end": 208 + "endColumn": 51, + "start": 210, + "end": 219 } }, "attributes": [], @@ -405,25 +363,25 @@ "attributeName": "attr", "value": { "type": "Identifier", - "start": 2, - "end": 5, + "start": 3, + "end": 6, "name": "foo", "location": { "startLine": 6, "startColumn": 17, "endLine": 6, - "endColumn": 30, - "start": 177, - "end": 190 + "endColumn": 33, + "start": 185, + "end": 201 } }, "location": { "startLine": 6, "startColumn": 17, "endLine": 6, - "endColumn": 30, - "start": 177, - "end": 190 + "endColumn": 33, + "start": 185, + "end": 201 } } ], @@ -435,39 +393,25 @@ "raw": "{( foo)}", "value": { "type": "Identifier", - "start": 194, - "end": 197, - "loc": { - "start": { - "line": 6, - "column": 33 - }, - "end": { - "line": 6, - "column": 36 - } - }, - "range": [ - 194, - 197 - ], + "start": 3, + "end": 6, "name": "foo", "location": { "startLine": 6, - "startColumn": 31, + "startColumn": 34, "endLine": 6, - "endColumn": 39, - "start": 191, - "end": 199 + "endColumn": 42, + "start": 202, + "end": 210 } }, "location": { "startLine": 6, - "startColumn": 31, + "startColumn": 34, "endLine": 6, - "endColumn": 39, - "start": 191, - "end": 199 + "endColumn": 42, + "start": 202, + "end": 210 } } ] diff --git a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/iterator/actual.html b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/iterator/actual.html index e3570452ee..9756ba3835 100644 --- a/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/iterator/actual.html +++ b/packages/@lwc/template-compiler/src/__tests__/fixtures/expression-complex/valid/iterator/actual.html @@ -1,7 +1,7 @@