Prepare for move to element-web monorepo
This commit is contained in:
@@ -0,0 +1 @@
|
||||
**/node_modules/
|
||||
@@ -0,0 +1,79 @@
|
||||
module.exports = {
|
||||
plugins: ["matrix-org", "eslint-plugin-react-compiler"],
|
||||
extends: ["plugin:matrix-org/typescript", "plugin:matrix-org/react", "plugin:matrix-org/a11y"],
|
||||
parserOptions: {
|
||||
project: ["./tsconfig.json"],
|
||||
},
|
||||
env: {
|
||||
browser: true,
|
||||
node: true,
|
||||
},
|
||||
rules: {
|
||||
"react/jsx-key": ["error"],
|
||||
|
||||
"no-restricted-properties": [
|
||||
"error",
|
||||
...buildRestrictedPropertiesOptions(
|
||||
["window.innerHeight", "window.innerWidth", "window.visualViewport"],
|
||||
"Use UIStore to access window dimensions instead.",
|
||||
),
|
||||
...buildRestrictedPropertiesOptions(
|
||||
["*.mxcUrlToHttp", "*.getHttpUriForMxc"],
|
||||
"Use Media helper instead to centralise access for customisation.",
|
||||
),
|
||||
...buildRestrictedPropertiesOptions(["window.setImmediate"], "Use setTimeout instead."),
|
||||
],
|
||||
"no-restricted-globals": [
|
||||
"error",
|
||||
{
|
||||
name: "setImmediate",
|
||||
message: "Use setTimeout instead.",
|
||||
},
|
||||
{
|
||||
name: "Buffer",
|
||||
message: "Buffer is not available in the web.",
|
||||
},
|
||||
],
|
||||
|
||||
"import/no-duplicates": ["error"],
|
||||
"matrix-org/require-copyright-header": "error",
|
||||
|
||||
"react-compiler/react-compiler": "error",
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
files: [
|
||||
"packages/element-web-playwright-common/**/*.ts",
|
||||
"playwright/**/*.ts",
|
||||
"modules/*/element-web/e2e/**/*.{ts,tsx}",
|
||||
],
|
||||
rules: {
|
||||
// This is necessary for Playwright fixtures
|
||||
"no-empty-pattern": "off",
|
||||
// This is necessary for Playwright fixtures
|
||||
"react-hooks/rules-of-hooks": "off",
|
||||
// This just gets annoying in test code
|
||||
"@typescript-eslint/explicit-function-return-type": "off",
|
||||
},
|
||||
},
|
||||
],
|
||||
settings: {
|
||||
react: {
|
||||
version: "detect",
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
function buildRestrictedPropertiesOptions(properties, message) {
|
||||
return properties.map((prop) => {
|
||||
let [object, property] = prop.split(".");
|
||||
if (object === "*") {
|
||||
object = undefined;
|
||||
}
|
||||
return {
|
||||
object,
|
||||
property,
|
||||
message,
|
||||
};
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
### Node template
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
.pnpm-debug.log*
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Snowpack dependency directory (https://snowpack.dev/)
|
||||
web_modules/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional stylelint cache
|
||||
.stylelintcache
|
||||
|
||||
# Microbundle cache
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variable files
|
||||
.env
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.local
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# Next.js build output
|
||||
.next
|
||||
out
|
||||
|
||||
# Nuxt.js build / generate output
|
||||
.nuxt
|
||||
dist
|
||||
|
||||
# Gatsby files
|
||||
.cache/
|
||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||
# public
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# vuepress v2.x temp and cache directory
|
||||
.temp
|
||||
.cache
|
||||
|
||||
# Docusaurus cache and generated files
|
||||
.docusaurus
|
||||
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
|
||||
# TernJS port file
|
||||
.tern-port
|
||||
|
||||
# Stores VSCode versions used for testing VSCode extensions
|
||||
.vscode-test
|
||||
|
||||
# yarn v2
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
||||
|
||||
# Python
|
||||
.venv
|
||||
__pycache__/
|
||||
.tox/
|
||||
.coverage*
|
||||
coverage.*
|
||||
*.egg-info/
|
||||
_trial_temp/
|
||||
.mypy_cache/
|
||||
|
||||
# Custom rules
|
||||
# Ignore all built libraries
|
||||
lib/
|
||||
temp/
|
||||
coverage/
|
||||
|
||||
/playwright-html-report/
|
||||
**/test-results
|
||||
**/_results
|
||||
# Only commit snapshots from Linux
|
||||
**/e2e/snapshots/**/*.png
|
||||
**/e2e/snapshots/**/*.yml
|
||||
!**/e2e/snapshots/**/*-linux.png
|
||||
!**/e2e/snapshots/**/*-linux.aria.yml
|
||||
/playwright-report/
|
||||
.DS_Store
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"*": "prettier -u --write"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
*.api.md
|
||||
@@ -0,0 +1,3 @@
|
||||
import config from "eslint-plugin-matrix-org/.prettierrc.js";
|
||||
|
||||
export default config;
|
||||
@@ -0,0 +1,24 @@
|
||||
ARG ELEMENT_VERSION=latest@sha256:a84f294ce46e4327ebacecb78bfc94cf6a45c7ffa5104a28f06b5ac69d0b2548
|
||||
|
||||
FROM --platform=$BUILDPLATFORM node:lts-alpine@sha256:2bdb65ed1dab192432bc31c95f94155ca5ad7fc1392fb7eb7526ab682fa5bf14 AS builder
|
||||
|
||||
ARG BUILD_CONTEXT
|
||||
|
||||
RUN apk add --no-cache jq
|
||||
|
||||
WORKDIR /app
|
||||
COPY package.json yarn.lock ./
|
||||
# Copy the package.json files of all modules & packages to ensure the frozen workspace lockfile holds up
|
||||
RUN --mount=type=bind,target=/docker-context \
|
||||
cd /docker-context/; \
|
||||
find . -path ./node_modules -prune -o -name "package.json" -mindepth 0 -maxdepth 4 -exec cp --parents "{}" /app/ \;
|
||||
RUN yarn install --frozen-lockfile --ignore-scripts
|
||||
COPY tsconfig.json ./
|
||||
COPY ./$BUILD_CONTEXT ./$BUILD_CONTEXT
|
||||
RUN cd $BUILD_CONTEXT && yarn vite build
|
||||
RUN mkdir /modules
|
||||
RUN cp -r ./$BUILD_CONTEXT/lib/ /modules/$(jq -r '"\(.name)-v\(.version)"' ./$BUILD_CONTEXT/package.json)
|
||||
|
||||
FROM ghcr.io/element-hq/element-web:${ELEMENT_VERSION}
|
||||
|
||||
COPY --from=builder /modules /modules/
|
||||
@@ -0,0 +1,55 @@
|
||||
// https://github.com/docker/metadata-action#bake-definition
|
||||
target "docker-metadata-action" {}
|
||||
|
||||
variable "ELEMENT_VERSION" {
|
||||
default = "latest"
|
||||
}
|
||||
|
||||
variable "DATE" {
|
||||
validation {
|
||||
condition = DATE != ""
|
||||
error_message = "DATE must be set"
|
||||
}
|
||||
|
||||
validation {
|
||||
condition = DATE == regex("\\d{6}", DATE)
|
||||
error_message = "The variable 'DATE' must be of format YYMMNN where NN is the build number of the month."
|
||||
}
|
||||
}
|
||||
|
||||
variable "BUILD_TAG" {
|
||||
default = "${ELEMENT_VERSION}-${DATE}"
|
||||
}
|
||||
|
||||
group "default" {
|
||||
targets = [
|
||||
"element-web-modules-opendesk-plugin"
|
||||
]
|
||||
}
|
||||
|
||||
target "_common" {
|
||||
inherits = ["docker-metadata-action"]
|
||||
platforms = [
|
||||
"linux/amd64",
|
||||
"linux/arm64",
|
||||
]
|
||||
context = "."
|
||||
}
|
||||
|
||||
target "_element_web_module_base" {
|
||||
inherits = ["_common"]
|
||||
dockerfile = "./Dockerfile"
|
||||
}
|
||||
|
||||
target "element-web-modules-opendesk-plugin" {
|
||||
inherits = ["_element_web_module_base"]
|
||||
tags = [
|
||||
"ghcr.io/element-hq/element-web-modules/opendesk-plugin:latest",
|
||||
"ghcr.io/element-hq/element-web-modules/opendesk-plugin:${BUILD_TAG}",
|
||||
"registry.opencode.de/bmi/opendesk/components/supplier/element/images/opendesk-element-web:${BUILD_TAG}"
|
||||
]
|
||||
args = {
|
||||
ELEMENT_VERSION = "${ELEMENT_VERSION}"
|
||||
BUILD_CONTEXT = "modules/opendesk/element-web"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
Copyright 2025 New Vector Ltd.
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import { KnipConfig } from "knip";
|
||||
|
||||
// Specify this as knip loads config files which may conditionally add reporters, e.g. `vitest-sonar-reporter`
|
||||
process.env.GITHUB_ACTIONS = "1";
|
||||
|
||||
export default {
|
||||
ignoreDependencies: [
|
||||
// Needed for lint:workflows
|
||||
"@action-validator/cli",
|
||||
"@action-validator/core",
|
||||
// Unlisted peer dependency for @element-hq/element-web-module-api
|
||||
"matrix-widget-api",
|
||||
],
|
||||
ignoreBinaries: [
|
||||
// False positive for `yarn list`
|
||||
"list",
|
||||
],
|
||||
workspaces: {
|
||||
"modules/*/element-web": {
|
||||
entry: "src/index.ts{x,}",
|
||||
},
|
||||
},
|
||||
} satisfies KnipConfig;
|
||||
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"workspaces": [
|
||||
"packages/*",
|
||||
"modules/*/element-web",
|
||||
"modules/*/synapse"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=20.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
"lint:workflows": "find .github/workflows -type f \\( -iname '*.yaml' -o -iname '*.yml' \\) | xargs -I {} sh -c 'echo \"Linting {}\"; action-validator \"{}\"'",
|
||||
"lint:prettier": "prettier --check .",
|
||||
"lint:prettier:fix": "prettier --write .",
|
||||
"lint:eslint": "eslint --max-warnings 0 modules/*/element-web/src",
|
||||
"lint:types": "yarn workspaces run lint:types",
|
||||
"lint:codestyle": "yarn workspaces run lint:codestyle",
|
||||
"lint:knip": "knip",
|
||||
"test": "yarn workspaces run test",
|
||||
"test:playwright": "playwright test",
|
||||
"test:playwright:open": "yarn test:playwright --ui",
|
||||
"test:playwright:screenshots": "playwright-screenshots yarn test:playwright --update-snapshots --grep @screenshot",
|
||||
"prepare": "patch-package && husky && yarn workspaces run prepare"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@action-validator/cli": "^0.6.0",
|
||||
"@action-validator/core": "^0.6.0",
|
||||
"@element-hq/element-web-module-api": "1.14.0",
|
||||
"@element-hq/element-web-playwright-common": "^6.0.0",
|
||||
"@playwright/test": "^1.52.0",
|
||||
"@stylistic/eslint-plugin": "^5.0.0",
|
||||
"@types/node": "^22.12.0",
|
||||
"@typescript-eslint/eslint-plugin": "^8.22.0",
|
||||
"@typescript-eslint/parser": "^8.22.0",
|
||||
"eslint": "^8.26.0",
|
||||
"eslint-config-google": "^0.14.0",
|
||||
"eslint-config-prettier": "^10.0.0",
|
||||
"eslint-plugin-deprecate": "^0.9.0",
|
||||
"eslint-plugin-import": "^2.25.4",
|
||||
"eslint-plugin-jsx-a11y": "^6.10.2",
|
||||
"eslint-plugin-matrix-org": "^3.0.0",
|
||||
"eslint-plugin-react": "^7.37.4",
|
||||
"eslint-plugin-react-compiler": "^19.0.0-beta-27714ef-20250124",
|
||||
"eslint-plugin-react-hooks": "^7.0.0",
|
||||
"eslint-plugin-unicorn": "^56.0.0",
|
||||
"husky": "^9.1.7",
|
||||
"knip": "^6.0.0",
|
||||
"lint-staged": "^17.0.0",
|
||||
"patch-package": "^8.0.1",
|
||||
"prettier": "^3.4.2",
|
||||
"typescript": "^6.0.0"
|
||||
},
|
||||
"resolutions": {
|
||||
"vite": "8.0.15",
|
||||
"@vitest/browser-playwright": "4.1.8",
|
||||
"@vitest/coverage-v8": "4.1.8",
|
||||
"vitest": "4.1.8"
|
||||
},
|
||||
"packageManager": "yarn@1.22.22"
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
diff --git a/node_modules/@arcmantle/vite-plugin-import-css-sheet/client.d.ts b/node_modules/@arcmantle/vite-plugin-import-css-sheet/client.d.ts
|
||||
index d884a7e..533850e 100644
|
||||
--- a/node_modules/@arcmantle/vite-plugin-import-css-sheet/client.d.ts
|
||||
+++ b/node_modules/@arcmantle/vite-plugin-import-css-sheet/client.d.ts
|
||||
@@ -1,3 +1,4 @@
|
||||
declare module '*.css' {
|
||||
- export default styles as CSSStyleSheet;
|
||||
+ const styles: CSSStyleSheet;
|
||||
+ export default styles;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
diff --git a/node_modules/@element-hq/element-web-playwright-common/playwright-screenshots.sh b/node_modules/@element-hq/element-web-playwright-common/playwright-screenshots.sh
|
||||
index d860e34..d252f3a 100755
|
||||
--- a/node_modules/@element-hq/element-web-playwright-common/playwright-screenshots.sh
|
||||
+++ b/node_modules/@element-hq/element-web-playwright-common/playwright-screenshots.sh
|
||||
@@ -16,7 +16,7 @@ function build_image() {
|
||||
WS_PORT=3000
|
||||
|
||||
# Check the playwright version
|
||||
-PW_VERSION=$(pnpm --silent -- playwright --version | awk '{print $2}')
|
||||
+PW_VERSION=$(yarn --silent run playwright --version | awk '{print $2}')
|
||||
IMAGE_NAME="ghcr.io/element-hq/element-web/playwright-server:$PW_VERSION"
|
||||
|
||||
# If the image exists in the repository, pull it; otherwise, build it.
|
||||
@@ -42,7 +42,7 @@ trap clean_up EXIT
|
||||
|
||||
# Wait for playwright-server to be ready
|
||||
echo "playwright-screenshots: Waiting for playwright-server"
|
||||
-pnpm --dir "$SCRIPT_DIR" exec wait-on "tcp:$WS_PORT"
|
||||
+npx -y wait-on "tcp:$WS_PORT"
|
||||
|
||||
# Playwright seems to overwrite the last line from the console, so add an
|
||||
# extra newline to make sure this doesn't get lost.
|
||||
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
Copyright 2025 New Vector Ltd.
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import { defineConfig, devices, type Project } from "@playwright/test";
|
||||
import fs, { globSync } from "node:fs";
|
||||
import path from "node:path";
|
||||
|
||||
import type { Options } from "./playwright/element-web-test";
|
||||
|
||||
const chromeProject = {
|
||||
...devices["Desktop Chrome"],
|
||||
channel: "chromium",
|
||||
permissions: ["clipboard-write", "clipboard-read", "microphone"],
|
||||
launchOptions: {
|
||||
args: ["--use-fake-ui-for-media-stream", "--use-fake-device-for-media-stream", "--mute-audio"],
|
||||
},
|
||||
connectOptions: process.env.PW_TEST_CONNECT_WS_ENDPOINT
|
||||
? {
|
||||
wsEndpoint: process.env.PW_TEST_CONNECT_WS_ENDPOINT,
|
||||
exposeNetwork: "<loopback>",
|
||||
}
|
||||
: undefined,
|
||||
};
|
||||
|
||||
/**
|
||||
We assume that all modules will have the following directory structure:
|
||||
<repo_root>
|
||||
└── modules/
|
||||
└── my-module/
|
||||
└── element-web/
|
||||
├── e2e/
|
||||
│ ├── test-1.spec.ts
|
||||
│ └── test-2.spec.ts
|
||||
└── package.json
|
||||
|
||||
The following code maps each such module (my-module in the example above) to a separate
|
||||
playwright project.
|
||||
*/
|
||||
const projects: Project<Options>[] = [];
|
||||
|
||||
// Get all the directories that hold playwright tests
|
||||
const moduleTestDirectories = globSync("modules/*/element-web/e2e", {});
|
||||
|
||||
// Process each directory
|
||||
for (const testDirectory of moduleTestDirectories) {
|
||||
// Based on the directory structure, the parent directory of the test directory holds package.json.
|
||||
const moduleDirectory = path.join(testDirectory, "..");
|
||||
|
||||
// Get module name from package.json
|
||||
const packageJson = JSON.parse(fs.readFileSync(path.join(moduleDirectory, "package.json"), "utf-8"));
|
||||
const MODULE_PREFIX = "@element-hq/element-web-module-";
|
||||
const name = packageJson.name.startsWith(MODULE_PREFIX)
|
||||
? packageJson.name.slice(MODULE_PREFIX.length)
|
||||
: packageJson.name;
|
||||
|
||||
// Create playwright project
|
||||
projects.push({
|
||||
name,
|
||||
use: {
|
||||
...chromeProject,
|
||||
moduleDir: moduleDirectory,
|
||||
},
|
||||
testDir: testDirectory,
|
||||
snapshotDir: `${testDirectory}/snapshots`,
|
||||
outputDir: `${testDirectory}/_results`,
|
||||
});
|
||||
}
|
||||
|
||||
const baseURL = process.env["BASE_URL"] ?? "http://localhost:8080";
|
||||
|
||||
export default defineConfig<Options>({
|
||||
projects,
|
||||
use: {
|
||||
viewport: { width: 1280, height: 720 },
|
||||
ignoreHTTPSErrors: true,
|
||||
video: "retain-on-failure",
|
||||
baseURL,
|
||||
trace: "on-first-retry",
|
||||
},
|
||||
webServer: {
|
||||
command: process.env.WEBAPP_PATH
|
||||
? `npx serve -p 8080 -L ${process.env.WEBAPP_PATH}`
|
||||
: "docker run --rm -p 8080:80 ghcr.io/element-hq/element-web:develop",
|
||||
url: `${baseURL}/config.json`,
|
||||
reuseExistingServer: true,
|
||||
timeout: (process.env.CI ? 30 : 120) * 1000,
|
||||
},
|
||||
workers: 1,
|
||||
retries: process.env.CI ? 2 : 0,
|
||||
reporter: process.env.CI
|
||||
? [
|
||||
["list"],
|
||||
["html"],
|
||||
["github"],
|
||||
["@element-hq/element-web-playwright-common/lib/stale-screenshot-reporter.js"],
|
||||
]
|
||||
: [["list"], ["html", { outputFolder: "playwright-html-report" }]],
|
||||
// When running the browser in docker, set the platform to `linux` as that is the platform where the browser is running
|
||||
snapshotPathTemplate: `{snapshotDir}/{testFilePath}/{arg}-${process.env.PW_TEST_CONNECT_WS_ENDPOINT ? "linux" : "{platform}"}{ext}`,
|
||||
forbidOnly: !!process.env.CI,
|
||||
});
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
Copyright 2025 New Vector Ltd.
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import { test as base, expect, type TestFixtures } from "@element-hq/element-web-playwright-common";
|
||||
|
||||
export interface Options {
|
||||
moduleDir: string;
|
||||
modules: string[];
|
||||
}
|
||||
|
||||
export const test = base.extend<TestFixtures & Options>({
|
||||
moduleDir: ["", { option: true }],
|
||||
modules: async ({ moduleDir }, use) => {
|
||||
await use([`${moduleDir}/lib/index.js`]);
|
||||
},
|
||||
|
||||
page: async ({ page, modules, config }, use) => {
|
||||
config.modules = [];
|
||||
for (let i = 0; i < modules.length; i++) {
|
||||
const module = `/modules/module-${i}/index.js`;
|
||||
await page.route(module, async (route) => {
|
||||
await route.fulfill({ path: modules[i] });
|
||||
});
|
||||
config.modules.push(module);
|
||||
}
|
||||
|
||||
await use(page);
|
||||
},
|
||||
});
|
||||
|
||||
export { expect };
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es2022",
|
||||
"jsx": "react",
|
||||
"lib": ["ESNext", "es2022", "dom", "dom.iterable"],
|
||||
"resolveJsonModule": true,
|
||||
"esModuleInterop": true,
|
||||
"moduleResolution": "node",
|
||||
"module": "es2022",
|
||||
"allowImportingTsExtensions": true
|
||||
},
|
||||
"include": ["**/*.ts", "../modules/*/element-web/test/**/*.ts"]
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "http://json.schemastore.org/tsconfig",
|
||||
"compilerOptions": {
|
||||
"target": "esnext",
|
||||
"module": "esnext",
|
||||
"lib": ["dom", "es2022", "esnext"],
|
||||
"moduleResolution": "bundler",
|
||||
"esModuleInterop": true,
|
||||
"allowImportingTsExtensions": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"declaration": true
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user