mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-10-26 15:54:20 -04:00
chore: Upgrade Node and Nuxt (#6240)
This commit is contained in:
@@ -11,7 +11,7 @@
|
|||||||
// Use -bullseye variants on local on arm64/Apple Silicon.
|
// Use -bullseye variants on local on arm64/Apple Silicon.
|
||||||
"VARIANT": "3.12-bullseye",
|
"VARIANT": "3.12-bullseye",
|
||||||
// Options
|
// Options
|
||||||
"NODE_VERSION": "20"
|
"NODE_VERSION": "22"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mounts": [
|
"mounts": [
|
||||||
|
|||||||
2
.github/workflows/build-package.yml
vendored
2
.github/workflows/build-package.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
|||||||
- name: Setup node env 🏗
|
- name: Setup node env 🏗
|
||||||
uses: actions/setup-node@v4.0.0
|
uses: actions/setup-node@v4.0.0
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 22
|
||||||
check-latest: true
|
check-latest: true
|
||||||
|
|
||||||
- name: Get yarn cache directory path 🛠
|
- name: Get yarn cache directory path 🛠
|
||||||
|
|||||||
2
.github/workflows/e2e.yml
vendored
2
.github/workflows/e2e.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 22
|
||||||
cache: 'yarn'
|
cache: 'yarn'
|
||||||
cache-dependency-path: ./tests/e2e/yarn.lock
|
cache-dependency-path: ./tests/e2e/yarn.lock
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
|
|||||||
2
.github/workflows/test-frontend.yml
vendored
2
.github/workflows/test-frontend.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
|||||||
- name: Setup node env 🏗
|
- name: Setup node env 🏗
|
||||||
uses: actions/setup-node@v4.0.0
|
uses: actions/setup-node@v4.0.0
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 22
|
||||||
check-latest: true
|
check-latest: true
|
||||||
|
|
||||||
- name: Get yarn cache directory path 🛠
|
- name: Get yarn cache directory path 🛠
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
###############################################
|
###############################################
|
||||||
# Frontend Build
|
# Frontend Build
|
||||||
###############################################
|
###############################################
|
||||||
FROM node:20@sha256:abcf9c98af22ea2c5d33435143d9d8a5f6f191e1e1938a7650fc8b78c382b5a9 \
|
FROM node:22@sha256:4973262386dc1cb70f7d6fc48a855027d8f12d2d3b1fe559b9db9a4fcb74668f \
|
||||||
AS frontend-builder
|
AS frontend-builder
|
||||||
|
|
||||||
WORKDIR /frontend
|
WORKDIR /frontend
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ Make sure the VSCode Dev Containers extension is installed, then select "Dev Con
|
|||||||
|
|
||||||
- [Python 3.12](https://www.python.org/downloads/)
|
- [Python 3.12](https://www.python.org/downloads/)
|
||||||
- [Poetry](https://python-poetry.org/docs/#installation)
|
- [Poetry](https://python-poetry.org/docs/#installation)
|
||||||
- [Node v16.x](https://nodejs.org/en/)
|
- [Node](https://nodejs.org/en/)
|
||||||
- [yarn](https://classic.yarnpkg.com/lang/en/docs/install/#mac-stable)
|
- [yarn](https://classic.yarnpkg.com/lang/en/docs/install/#mac-stable)
|
||||||
- [task](https://taskfile.dev/#/installation)
|
- [task](https://taskfile.dev/#/installation)
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,13 @@
|
|||||||
import { useAsyncKey } from "../use-utils";
|
|
||||||
import type { AppInfo } from "~/lib/api/types/admin";
|
import type { AppInfo } from "~/lib/api/types/admin";
|
||||||
|
|
||||||
export function useAppInfo(): Ref<AppInfo | null> {
|
export function useAppInfo(): Ref<AppInfo | null> {
|
||||||
const appInfo = ref<null | AppInfo>(null);
|
|
||||||
|
|
||||||
const i18n = useI18n();
|
const i18n = useI18n();
|
||||||
const { $axios } = useNuxtApp();
|
const { $axios } = useNuxtApp();
|
||||||
$axios.defaults.headers.common["Accept-Language"] = i18n.locale.value;
|
$axios.defaults.headers.common["Accept-Language"] = i18n.locale.value;
|
||||||
|
|
||||||
useAsyncData(useAsyncKey(), async () => {
|
const { data: appInfo } = useAsyncData("app-info", async () => {
|
||||||
const data = await $axios.get<AppInfo>("/api/app/about");
|
const data = await $axios.get<AppInfo>("/api/app/about");
|
||||||
appInfo.value = data.data;
|
return data.data;
|
||||||
});
|
});
|
||||||
|
|
||||||
return appInfo;
|
return appInfo;
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
// @ts-check
|
// @ts-check
|
||||||
import stylisticJs from "@stylistic/eslint-plugin-js";
|
import stylistic from "@stylistic/eslint-plugin";
|
||||||
import withNuxt from "./.nuxt/eslint.config.mjs";
|
import withNuxt from "./.nuxt/eslint.config.mjs";
|
||||||
|
|
||||||
export default withNuxt({
|
export default withNuxt({
|
||||||
plugins: {
|
plugins: {
|
||||||
"@stylistic/js": stylisticJs,
|
"@stylistic": stylistic,
|
||||||
},
|
},
|
||||||
// Your custom configs here
|
// Your custom configs here
|
||||||
rules: {
|
rules: {
|
||||||
@@ -14,11 +14,13 @@ export default withNuxt({
|
|||||||
"object-curly-newline": "off",
|
"object-curly-newline": "off",
|
||||||
"consistent-list-newline": "off",
|
"consistent-list-newline": "off",
|
||||||
"vue/first-attribute-linebreak": "off",
|
"vue/first-attribute-linebreak": "off",
|
||||||
"@stylistic/js/no-tabs": ["error", { allowIndentationTabs: true }],
|
|
||||||
"@stylistic/no-tabs": ["error", { allowIndentationTabs: true }],
|
"@stylistic/no-tabs": ["error", { allowIndentationTabs: true }],
|
||||||
"@stylistic/no-mixed-spaces-and-tabs": ["error", "smart-tabs"],
|
"@stylistic/no-mixed-spaces-and-tabs": ["error", "smart-tabs"],
|
||||||
"vue/max-attributes-per-line": "off",
|
"vue/max-attributes-per-line": "off",
|
||||||
"vue/html-indent": "off",
|
"vue/html-indent": "off",
|
||||||
"vue/html-closing-bracket-newline": "off",
|
"vue/html-closing-bracket-newline": "off",
|
||||||
|
// TODO: temporarily off to get this PR in without a crazy diff
|
||||||
|
"@stylistic/indent": "off",
|
||||||
|
"@stylistic/operator-linebreak": "off",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "mealie",
|
"name": "mealie",
|
||||||
"version": "3.2.1",
|
"version": "3.2.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "nuxt dev",
|
"dev": "nuxt dev",
|
||||||
@@ -21,17 +21,17 @@
|
|||||||
"@mdi/js": "^7.4.47",
|
"@mdi/js": "^7.4.47",
|
||||||
"@nuxt/fonts": "^0.11.4",
|
"@nuxt/fonts": "^0.11.4",
|
||||||
"@nuxtjs/i18n": "^9.2.1",
|
"@nuxtjs/i18n": "^9.2.1",
|
||||||
"@sidebase/nuxt-auth": "0.10.0",
|
"@sidebase/nuxt-auth": "^1.1.0",
|
||||||
"@vite-pwa/nuxt": "0.10.6",
|
"@vite-pwa/nuxt": "^0.10.6",
|
||||||
"@vueuse/core": "^12.7.0",
|
"@vueuse/core": "^12.7.0",
|
||||||
"axios": "^1.8.1",
|
"axios": "^1.8.1",
|
||||||
"date-fns": "^4.1.0",
|
"date-fns": "^4.1.0",
|
||||||
"fuse.js": "^7.1.0",
|
"fuse.js": "^7.1.0",
|
||||||
"isomorphic-dompurify": "^2.22.0",
|
"isomorphic-dompurify": "^2.28.0",
|
||||||
"json-editor-vue": "^0.18.1",
|
"json-editor-vue": "^0.18.1",
|
||||||
"marked": "^15.0.12",
|
"marked": "^15.0.12",
|
||||||
"next-auth": "~4.24.0",
|
"next-auth": "~4.24.0",
|
||||||
"nuxt": "^3.15.4",
|
"nuxt": "^3.19.2",
|
||||||
"vite": "^6.2.0",
|
"vite": "^6.2.0",
|
||||||
"vue-advanced-cropper": "^2.8.9",
|
"vue-advanced-cropper": "^2.8.9",
|
||||||
"vue-draggable-plus": "^0.6.0",
|
"vue-draggable-plus": "^0.6.0",
|
||||||
@@ -39,11 +39,11 @@
|
|||||||
"vuetify-nuxt-module": "^0.18.3"
|
"vuetify-nuxt-module": "^0.18.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nuxt/eslint": "1.2.0",
|
"@nuxt/eslint": "^1.2.0",
|
||||||
"@nuxt/types": "^2.18.1",
|
"@nuxt/types": "^2.18.1",
|
||||||
"@nuxtjs/eslint-config-typescript": "^12.1.0",
|
"@nuxtjs/eslint-config-typescript": "^12.1.0",
|
||||||
"@nuxtjs/eslint-module": "^4.1.0",
|
"@nuxtjs/eslint-module": "^4.1.0",
|
||||||
"@stylistic/eslint-plugin-js": "^4.2.0",
|
"@stylistic/eslint-plugin": "^5.4.0",
|
||||||
"@types/sortablejs": "^1.15.8",
|
"@types/sortablejs": "^1.15.8",
|
||||||
"eslint": "^9.22.0",
|
"eslint": "^9.22.0",
|
||||||
"eslint-config-prettier": "^10.0.2",
|
"eslint-config-prettier": "^10.0.2",
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
"lint-staged": "^15.4.3",
|
"lint-staged": "^15.4.3",
|
||||||
"prettier": "^3.5.2",
|
"prettier": "^3.5.2",
|
||||||
"sass-embedded": "^1.85.1",
|
"sass-embedded": "^1.85.1",
|
||||||
"typescript": "5.3",
|
"typescript": "^5.3",
|
||||||
"vite-plugin-commonjs": "^0.10.4",
|
"vite-plugin-commonjs": "^0.10.4",
|
||||||
"vitest": "^3.0.7"
|
"vitest": "^3.0.7"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -110,7 +110,7 @@
|
|||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-if="allowOidc && allowPasswordLogin"
|
v-if="appInfoLoaded && allowOidc && allowPasswordLogin"
|
||||||
class="d-flex my-4 justify-center align-center"
|
class="d-flex my-4 justify-center align-center"
|
||||||
width="80%"
|
width="80%"
|
||||||
>
|
>
|
||||||
@@ -126,7 +126,7 @@
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<v-card-actions
|
<v-card-actions
|
||||||
v-if="allowOidc"
|
v-if="appInfoLoaded && allowOidc"
|
||||||
class="justify-center"
|
class="justify-center"
|
||||||
>
|
>
|
||||||
<div class="max-button">
|
<div class="max-button">
|
||||||
@@ -270,6 +270,7 @@ export default defineNuxtComponent({
|
|||||||
|
|
||||||
const { passwordIcon, inputType, togglePasswordShow } = usePasswordField();
|
const { passwordIcon, inputType, togglePasswordShow } = usePasswordField();
|
||||||
|
|
||||||
|
const appInfoLoaded = computed(() => appInfo.value !== null);
|
||||||
const allowSignup = computed(() => appInfo.value?.allowSignup || false);
|
const allowSignup = computed(() => appInfo.value?.allowSignup || false);
|
||||||
const allowOidc = computed(() => appInfo.value?.enableOidc || false);
|
const allowOidc = computed(() => appInfo.value?.enableOidc || false);
|
||||||
const oidcRedirect = computed(() => appInfo.value?.oidcRedirect || false);
|
const oidcRedirect = computed(() => appInfo.value?.oidcRedirect || false);
|
||||||
@@ -277,7 +278,7 @@ export default defineNuxtComponent({
|
|||||||
const allowPasswordLogin = computed(() => appInfo.value?.allowPasswordLogin ?? true);
|
const allowPasswordLogin = computed(() => appInfo.value?.allowPasswordLogin ?? true);
|
||||||
|
|
||||||
whenever(
|
whenever(
|
||||||
() => allowOidc.value && oidcRedirect.value && !isCallback() && !isDirectLogin() /* && !$auth.check().valid */,
|
() => appInfoLoaded.value && allowOidc.value && oidcRedirect.value && !isCallback() && !isDirectLogin() /* && !$auth.check().valid */,
|
||||||
() => oidcAuthenticate(),
|
() => oidcAuthenticate(),
|
||||||
{ immediate: true },
|
{ immediate: true },
|
||||||
);
|
);
|
||||||
@@ -359,6 +360,7 @@ export default defineNuxtComponent({
|
|||||||
isDark,
|
isDark,
|
||||||
form,
|
form,
|
||||||
loggingIn,
|
loggingIn,
|
||||||
|
appInfoLoaded,
|
||||||
allowSignup,
|
allowSignup,
|
||||||
allowPasswordLogin,
|
allowPasswordLogin,
|
||||||
allowOidc,
|
allowOidc,
|
||||||
|
|||||||
@@ -6,16 +6,15 @@ export default defineNuxtPlugin(() => {
|
|||||||
const axiosInstance = axios.create({
|
const axiosInstance = axios.create({
|
||||||
// timeout removed to allow backend to handle timeouts
|
// timeout removed to allow backend to handle timeouts
|
||||||
baseURL: "/", // api calls already pass with /api
|
baseURL: "/", // api calls already pass with /api
|
||||||
headers: {
|
|
||||||
Authorization: "Bearer " + useCookie(tokenName).value,
|
|
||||||
},
|
|
||||||
withCredentials: true,
|
withCredentials: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Add request interceptor
|
|
||||||
axiosInstance.interceptors.request.use(
|
axiosInstance.interceptors.request.use(
|
||||||
(config) => {
|
(config) => {
|
||||||
// You can add auth tokens or other headers here
|
const token = useCookie(tokenName).value;
|
||||||
|
if (token) {
|
||||||
|
config.headers.Authorization = `Bearer ${token}`;
|
||||||
|
}
|
||||||
return config;
|
return config;
|
||||||
},
|
},
|
||||||
(error) => {
|
(error) => {
|
||||||
|
|||||||
8032
frontend/yarn.lock
8032
frontend/yarn.lock
File diff suppressed because it is too large
Load Diff
@@ -26,7 +26,7 @@ test('ldap login', async ({ page }) => {
|
|||||||
await expect(page).toHaveURL(/\/g\/home/);
|
await expect(page).toHaveURL(/\/g\/home/);
|
||||||
await expect(page.getByRole('navigation')).toContainText(name);
|
await expect(page.getByRole('navigation')).toContainText(name);
|
||||||
await page.getByText('Settings', { exact: true }).click();
|
await page.getByText('Settings', { exact: true }).click();
|
||||||
await expect(page.getByRole('link', { name: 'Admin Settings' })).not.toBeVisible();
|
await expect(page.getByText('Admin Settings')).not.toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('ldap admin login', async ({ page }) => {
|
test('ldap admin login', async ({ page }) => {
|
||||||
@@ -42,7 +42,7 @@ test('ldap admin login', async ({ page }) => {
|
|||||||
await page.getByRole('link', { name: "I'm already set up, just bring me to the homepage" }).click();
|
await page.getByRole('link', { name: "I'm already set up, just bring me to the homepage" }).click();
|
||||||
await expect(page.getByRole('navigation')).toContainText(name);
|
await expect(page.getByRole('navigation')).toContainText(name);
|
||||||
await page.getByText('Settings', { exact: true }).click();
|
await page.getByText('Settings', { exact: true }).click();
|
||||||
await expect(page.getByRole('link', { name: 'Admin Settings' })).toBeVisible();
|
await expect(page.getByText('Admin Settings')).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('oidc initial login', async ({ page }) => {
|
test('oidc initial login', async ({ page }) => {
|
||||||
@@ -64,7 +64,7 @@ test('oidc initial login', async ({ page }) => {
|
|||||||
await expect(page).toHaveURL(/\/g\/home/);
|
await expect(page).toHaveURL(/\/g\/home/);
|
||||||
await expect(page.getByRole('navigation')).toContainText(name);
|
await expect(page.getByRole('navigation')).toContainText(name);
|
||||||
await page.getByText('Settings', { exact: true }).click();
|
await page.getByText('Settings', { exact: true }).click();
|
||||||
await expect(page.getByRole('link', { name: 'Admin Settings' })).not.toBeVisible();
|
await expect(page.getByText('Admin Settings')).not.toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('oidc login with user not in propery group', async ({ page }) => {
|
test('oidc login with user not in propery group', async ({ page }) => {
|
||||||
@@ -171,5 +171,5 @@ test('oidc admin user', async ({ page }) => {
|
|||||||
await page.getByRole('link', { name: "I'm already set up, just bring me to the homepage" }).click();
|
await page.getByRole('link', { name: "I'm already set up, just bring me to the homepage" }).click();
|
||||||
await expect(page.getByRole('navigation')).toContainText(name);
|
await expect(page.getByRole('navigation')).toContainText(name);
|
||||||
await page.getByText('Settings', { exact: true }).click();
|
await page.getByText('Settings', { exact: true }).click();
|
||||||
await expect(page.getByRole('link', { name: 'Admin Settings' })).toBeVisible();
|
await expect(page.getByText('Admin Settings')).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@playwright/test": "^1.40.1",
|
"@playwright/test": "^1.55.1",
|
||||||
"@types/node": "^20.10.4"
|
"@types/node": "^22.10.2"
|
||||||
},
|
},
|
||||||
"scripts": {}
|
"scripts": {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,40 +2,40 @@
|
|||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
"@playwright/test@^1.40.1":
|
"@playwright/test@^1.55.1":
|
||||||
version "1.47.2"
|
version "1.55.1"
|
||||||
resolved "https://registry.npmjs.org/@playwright/test/-/test-1.47.2.tgz"
|
resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.55.1.tgz#80f775d5f948cd3ef550fcc45ef99986d3ffb36c"
|
||||||
integrity sha512-jTXRsoSPONAs8Za9QEQdyjFn+0ZQFjCiIztAIF6bi1HqhBzG9Ma7g1WotyiGqFSBRZjIEqMdT8RUlbk1QVhzCQ==
|
integrity sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==
|
||||||
dependencies:
|
dependencies:
|
||||||
playwright "1.47.2"
|
playwright "1.55.1"
|
||||||
|
|
||||||
"@types/node@^22.13.10":
|
"@types/node@^22.10.2":
|
||||||
version "22.13.10"
|
version "22.18.6"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.10.tgz#df9ea358c5ed991266becc3109dc2dc9125d77e4"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.6.tgz#38172ef0b65e09d1a4fc715eb09a7d5decfdc748"
|
||||||
integrity sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==
|
integrity sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
undici-types "~6.20.0"
|
undici-types "~6.21.0"
|
||||||
|
|
||||||
fsevents@2.3.2:
|
fsevents@2.3.2:
|
||||||
version "2.3.2"
|
version "2.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
|
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
|
||||||
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
|
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
|
||||||
|
|
||||||
playwright-core@1.47.2:
|
playwright-core@1.55.1:
|
||||||
version "1.47.2"
|
version "1.55.1"
|
||||||
resolved "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.2.tgz"
|
resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.55.1.tgz#5d3bb1846bc4289d364ea1a9dcb33f14545802e9"
|
||||||
integrity sha512-3JvMfF+9LJfe16l7AbSmU555PaTl2tPyQsVInqm3id16pdDfvZ8TTZ/pyzmkbDrZTQefyzU7AIHlZqQnxpqHVQ==
|
integrity sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==
|
||||||
|
|
||||||
playwright@1.47.2:
|
playwright@1.55.1:
|
||||||
version "1.47.2"
|
version "1.55.1"
|
||||||
resolved "https://registry.npmjs.org/playwright/-/playwright-1.47.2.tgz"
|
resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.55.1.tgz#8a9954e9e61ed1ab479212af9be336888f8b3f0e"
|
||||||
integrity sha512-nx1cLMmQWqmA3UsnjaaokyoUpdVaaDhJhMoxX2qj3McpjnsqFHs516QAKYhqHAgOP+oCFTEOCOAaD1RgD/RQfA==
|
integrity sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==
|
||||||
dependencies:
|
dependencies:
|
||||||
playwright-core "1.47.2"
|
playwright-core "1.55.1"
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents "2.3.2"
|
fsevents "2.3.2"
|
||||||
|
|
||||||
undici-types@~6.20.0:
|
undici-types@~6.21.0:
|
||||||
version "6.20.0"
|
version "6.21.0"
|
||||||
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433"
|
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb"
|
||||||
integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==
|
integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==
|
||||||
|
|||||||
Reference in New Issue
Block a user