chore: extract @nuxt/test-utils to separate repo (#24146)

This commit is contained in:
Daniel Roe 2023-11-06 15:38:45 +00:00 committed by GitHub
parent d8674b9982
commit 75cf1914ba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 85 additions and 1189 deletions

View File

@ -11,7 +11,10 @@
"NodeJS": true,
"$fetch": true
},
"plugins": ["jsdoc", "no-only-tests"],
"plugins": [
"jsdoc",
"no-only-tests"
],
"extends": [
"plugin:jsdoc/recommended",
"@nuxtjs/eslint-config-typescript",
@ -41,14 +44,6 @@
"error",
{
"pathGroups": [
{
"pattern": "@nuxt/test-utils/experimental",
"group": "external"
},
{
"pattern": "@nuxt/test-utils",
"group": "external"
},
{
"pattern": "#vue-router",
"group": "external"
@ -108,26 +103,36 @@
"jsdoc/check-tag-names": [
"error",
{
"definedTags": ["__NO_SIDE_EFFECTS__"]
"definedTags": [
"__NO_SIDE_EFFECTS__"
]
}
]
},
"overrides": [
{
"files": ["packages/schema/**"],
"files": [
"packages/schema/**"
],
"rules": {
"jsdoc/no-undefined-types": "off",
"jsdoc/valid-types": "off",
"jsdoc/check-tag-names": [
"error",
{
"definedTags": ["experimental"]
"definedTags": [
"experimental"
]
}
]
}
},
{
"files": ["packages/nuxt/src/app/**", "test/**", "**/runtime/**"],
"files": [
"packages/nuxt/src/app/**",
"test/**",
"**/runtime/**"
],
"rules": {
"no-console": "off"
}

View File

@ -3,7 +3,6 @@
"overrides": {
"@nuxt/kit": "./packages/kit",
"@nuxt/schema": "./packages/schema",
"@nuxt/test-utils": "./packages/test-utils",
"@nuxt/vite": "./packages/vite",
"@nuxt/webpack": "./packages/webpack",
"nuxt": "./packages/nuxt"

View File

@ -12,18 +12,6 @@
"src/runtime/**/*.ts"
]
},
"packages/test-utils": {
"entry": [
"src/experimental.ts",
"src/index.ts"
]
},
"packages/nuxi": {
"entry": [
"src/index.ts",
"src/commands/*.ts"
]
},
"packages/nuxt": {
"entry": [
"src/app/**/*.ts",

View File

@ -29,7 +29,6 @@
"resolutions": {
"@nuxt/kit": "workspace:*",
"@nuxt/schema": "workspace:*",
"@nuxt/test-utils": "workspace:*",
"@nuxt/vite-builder": "workspace:*",
"@nuxt/webpack-builder": "workspace:*",
"nuxt": "workspace:*",
@ -38,7 +37,7 @@
"magic-string": "^0.30.5"
},
"devDependencies": {
"@nuxt/test-utils": "workspace:*",
"@nuxt/test-utils": "3.8.1",
"@nuxt/webpack-builder": "workspace:*",
"@nuxtjs/eslint-config-typescript": "12.1.0",
"@types/fs-extra": "11.0.3",

View File

@ -0,0 +1,5 @@
# Nuxt Test Utils
🧪 Test utilities for [Nuxt](https://nuxt.com).
- 👉 View on GitHub at https://github.com/nuxt/test-utils

View File

@ -1,12 +0,0 @@
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
declaration: true,
entries: [
'src/index',
'src/experimental',
{ input: 'src/runtime/', outDir: 'dist/runtime', format: 'esm' }
],
externals: [
]
})

View File

@ -1 +0,0 @@
export * from './dist/experimental'

View File

@ -1,62 +0,0 @@
{
"name": "@nuxt/test-utils",
"version": "3.8.1",
"repository": "nuxt/nuxt",
"description": "Test utilities for Nuxt",
"license": "MIT",
"type": "module",
"types": "./dist/index.d.ts",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.mjs"
},
"./experimental": {
"types": "./dist/experimental.d.ts",
"import": "./dist/experimental.mjs"
}
},
"files": [
"dist"
],
"scripts": {
"prepack": "unbuild"
},
"dependencies": {
"@nuxt/kit": "workspace:*",
"@nuxt/schema": "workspace:*",
"consola": "^3.2.3",
"defu": "^6.1.3",
"execa": "^8.0.1",
"get-port-please": "^3.1.1",
"ofetch": "^1.3.3",
"pathe": "^1.1.1",
"ufo": "^1.3.1"
},
"devDependencies": {
"@jest/globals": "29.7.0",
"playwright-core": "1.39.0",
"unbuild": "latest",
"vitest": "0.33.0"
},
"peerDependencies": {
"@jest/globals": "^29.5.0",
"playwright-core": "^1.34.3",
"vitest": "^0.30.0 || ^0.31.0 || ^0.32.0 || ^0.33.0",
"vue": "^3.3.4"
},
"peerDependenciesMeta": {
"@jest/globals": {
"optional": true
},
"playwright-core": {
"optional": true
},
"vitest": {
"optional": true
}
},
"engines": {
"node": "^14.18.0 || >=16.10.0"
}
}

View File

@ -1,46 +0,0 @@
import type { Browser, BrowserContextOptions } from 'playwright-core'
import { useTestContext } from './context'
import { url } from './server'
export async function createBrowser () {
const ctx = useTestContext()
let playwright: typeof import('playwright-core')
try {
// Workaround for https://github.com/nuxt/nuxt/issues/13441
// TODO: Remove when upstream issue resolved
playwright = await import(String('playwright-core'))
} catch {
/* istanbul ignore next */
throw new Error(`
The dependency 'playwright-core' not found.
Please run 'yarn add --dev playwright-core' or 'npm install --save-dev playwright-core'
`)
}
const { type, launch } = ctx.options.browserOptions
if (!playwright[type]) {
throw new Error(`Invalid browser '${type}'`)
}
ctx.browser = await playwright[type].launch(launch)
}
export async function getBrowser (): Promise<Browser> {
const ctx = useTestContext()
if (!ctx.browser) {
await createBrowser()
}
return ctx.browser!
}
export async function createPage (path?: string, options?: BrowserContextOptions) {
const browser = await getBrowser()
const page = await browser.newPage(options)
if (path) {
await page.goto(url(path))
}
return page
}

View File

@ -1,59 +0,0 @@
import { resolve } from 'node:path'
import { defu } from 'defu'
import type { TestContext, TestOptions, TestRunner } from './types'
let currentContext: TestContext | undefined
export function createTestContext (options: Partial<TestOptions>): TestContext {
const _options: Partial<TestOptions> = defu(options, {
testDir: resolve(process.cwd(), 'test'),
fixture: 'fixture',
configFile: 'nuxt.config',
setupTimeout: 120 * 1000,
dev: !!JSON.parse(process.env.NUXT_TEST_DEV || 'false'),
logLevel: 1,
server: true,
build: (options.browser !== false) || (options.server !== false),
nuxtConfig: {},
// TODO: auto detect based on process.env
runner: <TestRunner>'vitest',
browserOptions: {
type: 'chromium' as const
}
})
return setTestContext({
options: _options as TestOptions
})
}
export function useTestContext (): TestContext {
recoverContextFromEnv()
if (!currentContext) {
throw new Error('No context is available. (Forgot calling setup or createContext?)')
}
return currentContext
}
export function setTestContext (context: TestContext): TestContext
export function setTestContext (context?: TestContext): TestContext | undefined
export function setTestContext (context?: TestContext): TestContext | undefined {
currentContext = context
return currentContext
}
export function isDev () {
const ctx = useTestContext()
return ctx.options.dev
}
export function recoverContextFromEnv () {
if (!currentContext && process.env.NUXT_TEST_CONTEXT) {
setTestContext(JSON.parse(process.env.NUXT_TEST_CONTEXT || '{}'))
}
}
export function exposeContextToEnv () {
const { options, browser, url } = currentContext!
process.env.NUXT_TEST_CONTEXT = JSON.stringify({ options, browser, url })
}

View File

@ -1,4 +0,0 @@
import { fileURLToPath } from 'node:url'
import { dirname } from 'pathe'
export const distDir = dirname(fileURLToPath(import.meta.url))

View File

@ -1,23 +0,0 @@
import { $fetch as _$fetch, fetch as _fetch } from 'ofetch'
import * as _kit from '@nuxt/kit'
import { resolve } from 'pathe'
import { stringifyQuery } from 'ufo'
import { useTestContext } from './context'
import { $fetch } from './server'
/**
* This is a function to render a component directly with the Nuxt server.
*/
export function $fetchComponent (filepath: string, props?: Record<string, any>) {
return $fetch(componentTestUrl(filepath, props))
}
export function componentTestUrl (filepath: string, props?: Record<string, any>) {
const ctx = useTestContext()
filepath = resolve(ctx.options.rootDir, filepath)
const path = stringifyQuery({
path: filepath,
props: JSON.stringify(props)
})
return `/__nuxt_component_test__/?${path}`
}

View File

@ -1,8 +0,0 @@
export * from './browser'
export * from './context'
export * from './mock'
export * from './nuxt'
export * from './server'
export * from './setup'
export * from './run'
export * from './types'

View File

@ -1,16 +0,0 @@
import { consola } from 'consola'
import { useTestContext } from './context'
export function mockFn () {
const ctx = useTestContext()
return ctx.mockFn
}
export function mockLogger (): Record<string, Function> {
const mocks: any = {}
consola.mockTypes((type) => {
mocks[type] = mockFn()
return mocks[type]
})
return mocks
}

View File

@ -1,74 +0,0 @@
import { existsSync, promises as fsp } from 'node:fs'
import { resolve } from 'node:path'
import { defu } from 'defu'
import * as _kit from '@nuxt/kit'
import { useTestContext } from './context'
// @ts-expect-error type cast
// eslint-disable-next-line
const kit: typeof _kit = _kit.default || _kit
const isNuxtApp = (dir: string) => {
return existsSync(dir) && (
existsSync(resolve(dir, 'pages')) ||
existsSync(resolve(dir, 'nuxt.config.js')) ||
existsSync(resolve(dir, 'nuxt.config.mjs')) ||
existsSync(resolve(dir, 'nuxt.config.cjs')) ||
existsSync(resolve(dir, 'nuxt.config.ts'))
)
}
const resolveRootDir = () => {
const { options } = useTestContext()
const dirs = [
options.rootDir,
resolve(options.testDir, options.fixture),
process.cwd()
]
for (const dir of dirs) {
if (dir && isNuxtApp(dir)) {
return dir
}
}
throw new Error('Invalid nuxt app. (Please explicitly set `options.rootDir` pointing to a valid nuxt app)')
}
export async function loadFixture () {
const ctx = useTestContext()
ctx.options.rootDir = resolveRootDir()
if (!ctx.options.dev) {
const randomId = Math.random().toString(36).slice(2, 8)
const buildDir = resolve(ctx.options.rootDir, '.nuxt', randomId)
ctx.options.nuxtConfig = defu(ctx.options.nuxtConfig, {
buildDir,
nitro: {
output: {
dir: resolve(buildDir, 'output')
}
}
})
}
ctx.nuxt = await kit.loadNuxt({
cwd: ctx.options.rootDir,
dev: ctx.options.dev,
overrides: ctx.options.nuxtConfig,
configFile: ctx.options.configFile
})
await fsp.mkdir(ctx.nuxt.options.buildDir, { recursive: true })
}
export async function buildFixture () {
const ctx = useTestContext()
// Hide build info for test
const prevLevel = kit.logger.level
kit.logger.level = ctx.options.logLevel
await kit.buildNuxt(ctx.nuxt!)
kit.logger.level = prevLevel
}

View File

@ -1,69 +0,0 @@
import { resolve } from 'pathe'
import { distDir } from './dirs'
export interface RunTestOptions {
rootDir: string,
dev?: boolean,
watch?: boolean
runner?: 'vitest'
globalSetup?: boolean
}
const RunTestDefaults: Partial<RunTestOptions> = {
runner: 'vitest',
globalSetup: true
}
export async function runTests (opts: RunTestOptions) {
opts = { ...RunTestDefaults, ...opts }
if (opts.runner !== 'vitest') {
throw new Error(`Unsupported runner: ${opts.runner}. Currently only vitest runner is supported.`)
}
if (opts.dev) {
// Set default dev option for @nuxt/test-utils
process.env.NUXT_TEST_DEV = 'true'
}
// Consumed by recoverContextFromEnv()
process.env.NUXT_TEST_OPTIONS = JSON.stringify(opts)
const { startVitest } = await import('vitest/node')
const succeeded = await startVitest(
'test',
[] /* argv */,
// Vitest options
{
root: opts.rootDir,
run: !opts.watch,
deps: {
inline: [/@nuxt\/test-utils/]
}
},
// Vite options
{
esbuild: {
tsconfigRaw: '{}'
},
test: {
dir: opts.rootDir,
deps: {
inline: [
distDir,
'@nuxt/test-utils',
'@nuxt/test-utils-edge'
]
},
globals: true,
globalSetup: [
...opts.globalSetup ? [resolve(distDir, './runtime/global-setup')] : []
]
}
}
)
if (!succeeded) {
process.exit(1)
}
}

View File

@ -1,20 +0,0 @@
import * as _kit from '@nuxt/kit'
import { createTest, exposeContextToEnv } from '@nuxt/test-utils'
// @ts-expect-error type cast
// eslint-disable-next-line
const kit: typeof _kit = _kit.default || _kit
const options = JSON.parse(process.env.NUXT_TEST_OPTIONS || '{}')
const hooks = createTest(options)
export const setup = async () => {
kit.logger.info('Building Nuxt app...')
await hooks.setup()
exposeContextToEnv()
kit.logger.info('Running tests...')
}
export const teardown = async () => {
await hooks.afterAll()
}

View File

@ -1,87 +0,0 @@
import { execa } from 'execa'
import { getRandomPort, waitForPort } from 'get-port-please'
import type { FetchOptions } from 'ofetch'
import { $fetch as _$fetch, fetch as _fetch } from 'ofetch'
import * as _kit from '@nuxt/kit'
import { resolve } from 'pathe'
import { useTestContext } from './context'
// @ts-expect-error type cast
// eslint-disable-next-line
const kit: typeof _kit = _kit.default || _kit
export async function startServer () {
const ctx = useTestContext()
await stopServer()
const host = '127.0.0.1'
const port = ctx.options.port || await getRandomPort(host)
ctx.url = `http://${host}:${port}`
if (ctx.options.dev) {
const nuxiCLI = await kit.resolvePath('nuxi/cli')
ctx.serverProcess = execa(nuxiCLI, ['_dev'], {
cwd: ctx.nuxt!.options.rootDir,
stdio: 'inherit',
env: {
...process.env,
_PORT: String(port), // Used by internal _dev command
PORT: String(port),
HOST: host,
NODE_ENV: 'development'
}
})
await waitForPort(port, { retries: 32, host }).catch(() => {})
let lastError
for (let i = 0; i < 150; i++) {
await new Promise(resolve => setTimeout(resolve, 100))
try {
const res = await $fetch(ctx.nuxt!.options.app.baseURL)
if (!res.includes('__NUXT_LOADING__')) {
return
}
} catch (e) {
lastError = e
}
}
ctx.serverProcess.kill()
throw lastError || new Error('Timeout waiting for dev server!')
} else {
ctx.serverProcess = execa('node', [
resolve(ctx.nuxt!.options.nitro.output!.dir!, 'server/index.mjs')
], {
stdio: 'inherit',
env: {
...process.env,
PORT: String(port),
HOST: host,
NODE_ENV: 'test'
}
})
await waitForPort(port, { retries: 20, host })
}
}
export async function stopServer () {
const ctx = useTestContext()
if (ctx.serverProcess) {
await ctx.serverProcess.kill()
}
}
export function fetch (path: string, options?: any) {
return _fetch(url(path), options)
}
export function $fetch (path: string, options?: FetchOptions) {
return _$fetch(url(path), options)
}
export function url (path: string) {
const ctx = useTestContext()
if (!ctx.url) {
throw new Error('url is not available (is server option enabled?)')
}
if (path.startsWith(ctx.url)) {
return path
}
return ctx.url + path
}

View File

@ -1,76 +0,0 @@
import { createTestContext, setTestContext } from '../context'
import { buildFixture, loadFixture } from '../nuxt'
import { startServer, stopServer } from '../server'
import { createBrowser } from '../browser'
import type { TestHooks, TestOptions } from '../types'
import setupJest from './jest'
import setupVitest from './vitest'
export const setupMaps = {
jest: setupJest,
vitest: setupVitest
}
export function createTest (options: Partial<TestOptions>): TestHooks {
const ctx = createTestContext(options)
const beforeEach = () => {
setTestContext(ctx)
}
const afterEach = () => {
setTestContext(undefined)
}
const afterAll = async () => {
if (ctx.serverProcess) {
setTestContext(ctx)
await stopServer()
setTestContext(undefined)
}
if (ctx.nuxt && ctx.nuxt.options.dev) {
await ctx.nuxt.close()
}
if (ctx.browser) {
await ctx.browser.close()
}
}
const setup = async () => {
if (ctx.options.fixture) {
await loadFixture()
}
if (ctx.options.build) {
await buildFixture()
}
if (ctx.options.server) {
await startServer()
}
if (ctx.options.waitFor) {
await (new Promise(resolve => setTimeout(resolve, ctx.options.waitFor)))
}
if (ctx.options.browser) {
await createBrowser()
}
}
return {
beforeEach,
afterEach,
afterAll,
setup,
ctx
}
}
export async function setup (options: Partial<TestOptions> = {}) {
const hooks = createTest(options)
const setupFn = setupMaps[hooks.ctx.options.runner]
await setupFn(hooks)
}

View File

@ -1,12 +0,0 @@
import type { TestHooks } from '../types'
export default async function setupJest (hooks: TestHooks) {
const { jest, test, beforeEach, afterAll, afterEach } = await import('@jest/globals')
hooks.ctx.mockFn = jest.fn
test('setup', hooks.setup, hooks.ctx.options.setupTimeout)
beforeEach(hooks.beforeEach)
afterEach(hooks.afterEach)
afterAll(hooks.afterAll)
}

View File

@ -1,12 +0,0 @@
import type { TestHooks } from '../types'
export default async function setupVitest (hooks: TestHooks) {
const vitest = await import('vitest')
hooks.ctx.mockFn = vitest.vi.fn
vitest.beforeAll(hooks.setup, hooks.ctx.options.setupTimeout)
vitest.beforeEach(hooks.beforeEach)
vitest.afterEach(hooks.afterEach)
vitest.afterAll(hooks.afterAll)
}

View File

@ -1,44 +0,0 @@
import type { Nuxt, NuxtConfig } from '@nuxt/schema'
import type { ExecaChildProcess } from 'execa'
import type { Browser, LaunchOptions } from 'playwright-core'
export type TestRunner = 'vitest' | 'jest'
export interface TestOptions {
testDir: string
fixture: string
configFile: string
rootDir: string
buildDir: string
nuxtConfig: NuxtConfig
build: boolean
dev: boolean
setupTimeout: number
waitFor: number
browser: boolean
runner: TestRunner
logLevel: number
browserOptions: {
type: 'chromium' | 'firefox' | 'webkit'
launch?: LaunchOptions
}
server: boolean
port?: number
}
export interface TestContext {
options: TestOptions
nuxt?: Nuxt
browser?: Browser
url?: string
serverProcess?: ExecaChildProcess
mockFn?: Function
}
export interface TestHooks {
beforeEach: () => void
afterEach: () => void
afterAll: () => void
setup: () => void
ctx: TestContext
}

View File

@ -7,7 +7,6 @@ settings:
overrides:
'@nuxt/kit': workspace:*
'@nuxt/schema': workspace:*
'@nuxt/test-utils': workspace:*
'@nuxt/vite-builder': workspace:*
'@nuxt/webpack-builder': workspace:*
nuxt: workspace:*
@ -20,8 +19,8 @@ importers:
.:
devDependencies:
'@nuxt/test-utils':
specifier: workspace:*
version: link:packages/test-utils
specifier: 3.8.1
version: 3.8.1(playwright-core@1.39.0)(vitest@0.33.0)(vue@3.3.8)
'@nuxt/webpack-builder':
specifier: workspace:*
version: link:packages/webpack
@ -521,52 +520,6 @@ importers:
specifier: 6.1.1
version: 6.1.1(webpack@5.89.0)
packages/test-utils:
dependencies:
'@nuxt/kit':
specifier: workspace:*
version: link:../kit
'@nuxt/schema':
specifier: workspace:*
version: link:../schema
consola:
specifier: ^3.2.3
version: 3.2.3
defu:
specifier: ^6.1.3
version: 6.1.3
execa:
specifier: ^8.0.1
version: 8.0.1
get-port-please:
specifier: ^3.1.1
version: 3.1.1
ofetch:
specifier: ^1.3.3
version: 1.3.3
pathe:
specifier: ^1.1.1
version: 1.1.1
ufo:
specifier: ^1.3.1
version: 1.3.1
vue:
specifier: 3.3.8
version: 3.3.8(typescript@5.2.2)
devDependencies:
'@jest/globals':
specifier: 29.7.0
version: 29.7.0
playwright-core:
specifier: 1.39.0
version: 1.39.0
unbuild:
specifier: latest
version: 2.0.0(typescript@5.2.2)
vitest:
specifier: 0.33.0
version: 0.33.0(happy-dom@12.10.3)
packages/vite:
dependencies:
'@nuxt/kit':
@ -1141,33 +1094,6 @@ packages:
'@babel/plugin-syntax-decorators': 7.22.10(@babel/core@7.23.2)
dev: false
/@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.2):
resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
dev: true
/@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.2):
resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
dev: true
/@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.2):
resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
dev: true
/@babel/plugin-syntax-decorators@7.22.10(@babel/core@7.23.2):
resolution: {integrity: sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==}
engines: {node: '>=6.9.0'}
@ -1195,15 +1121,7 @@ packages:
dependencies:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
/@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.2):
resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
dev: true
dev: false
/@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.2):
resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==}
@ -1214,70 +1132,6 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
/@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.2):
resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
dev: true
/@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.2):
resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
dev: true
/@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.2):
resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
dev: true
/@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.2):
resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
dev: true
/@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.2):
resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
dev: true
/@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.2):
resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
dev: true
/@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.2):
resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
dev: true
/@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.2):
resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==}
engines: {node: '>=6.9.0'}
@ -1775,102 +1629,12 @@ packages:
wrap-ansi: 8.1.0
wrap-ansi-cjs: /wrap-ansi@7.0.0
/@istanbuljs/load-nyc-config@1.1.0:
resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
engines: {node: '>=8'}
dependencies:
camelcase: 5.3.1
find-up: 4.1.0
get-package-type: 0.1.0
js-yaml: 3.14.1
resolve-from: 5.0.0
dev: true
/@istanbuljs/schema@0.1.3:
resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
engines: {node: '>=8'}
dev: true
/@jest/environment@29.7.0:
resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3
'@types/node': 20.8.10
jest-mock: 29.7.0
dev: true
/@jest/expect-utils@29.7.0:
resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
jest-get-type: 29.6.3
dev: true
/@jest/expect@29.7.0:
resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
expect: 29.7.0
jest-snapshot: 29.7.0
transitivePeerDependencies:
- supports-color
dev: true
/@jest/fake-timers@29.7.0:
resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.3
'@sinonjs/fake-timers': 10.3.0
'@types/node': 20.8.10
jest-message-util: 29.7.0
jest-mock: 29.7.0
jest-util: 29.7.0
dev: true
/@jest/globals@29.7.0:
resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/environment': 29.7.0
'@jest/expect': 29.7.0
'@jest/types': 29.6.3
jest-mock: 29.7.0
transitivePeerDependencies:
- supports-color
dev: true
/@jest/schemas@29.6.3:
resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@sinclair/typebox': 0.27.8
/@jest/transform@29.7.0:
resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@babel/core': 7.23.2
'@jest/types': 29.6.3
'@jridgewell/trace-mapping': 0.3.20
babel-plugin-istanbul: 6.1.1
chalk: 4.1.2
convert-source-map: 2.0.0
fast-json-stable-stringify: 2.1.0
graceful-fs: 4.2.11
jest-haste-map: 29.7.0
jest-regex-util: 29.6.3
jest-util: 29.7.0
micromatch: 4.0.5
pirates: 4.0.6
slash: 3.0.0
write-file-atomic: 4.0.2
transitivePeerDependencies:
- supports-color
dev: true
/@jest/types@29.6.3:
resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@ -1881,6 +1645,7 @@ packages:
'@types/node': 20.8.10
'@types/yargs': 17.0.28
chalk: 4.1.2
dev: false
/@jridgewell/gen-mapping@0.3.3:
resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
@ -2184,6 +1949,36 @@ packages:
rc9: 2.1.1
std-env: 3.4.3
/@nuxt/test-utils@3.8.1(playwright-core@1.39.0)(vitest@0.33.0)(vue@3.3.8):
resolution: {integrity: sha512-8ZQ+OZ7z5Sc5KG2aCvk0piheYSpGb2UQJMCWr8ORwEyZIw4awrkkwGzUY06e344E4StvJB8zxN122MEcFNOkow==}
engines: {node: ^14.18.0 || >=16.10.0}
peerDependencies:
'@jest/globals': ^29.5.0
playwright-core: ^1.34.3
vitest: ^0.30.0 || ^0.31.0 || ^0.32.0 || ^0.33.0
vue: 3.3.8
peerDependenciesMeta:
'@jest/globals':
optional: true
playwright-core:
optional: true
vitest:
optional: true
dependencies:
'@nuxt/kit': link:packages/kit
'@nuxt/schema': link:packages/schema
consola: 3.2.3
defu: 6.1.3
execa: 8.0.1
get-port-please: 3.1.1
ofetch: 1.3.3
pathe: 1.1.1
playwright-core: 1.39.0
ufo: 1.3.1
vitest: 0.33.0(happy-dom@12.10.3)
vue: 3.3.8(typescript@5.2.2)
dev: true
/@nuxt/ui-templates@1.3.1:
resolution: {integrity: sha512-5gc02Pu1HycOVUWJ8aYsWeeXcSTPe8iX8+KIrhyEtEoOSkY0eMBuo0ssljB8wALuEmepv31DlYe5gpiRwkjESA==}
dev: false
@ -2537,18 +2332,6 @@ packages:
/@sinclair/typebox@0.27.8:
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
/@sinonjs/commons@3.0.0:
resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==}
dependencies:
type-detect: 4.0.8
dev: true
/@sinonjs/fake-timers@10.3.0:
resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
dependencies:
'@sinonjs/commons': 3.0.0
dev: true
/@tootallnate/once@2.0.0:
resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
engines: {node: '>= 10'}
@ -2620,12 +2403,6 @@ packages:
'@types/node': 20.8.10
dev: true
/@types/graceful-fs@4.1.8:
resolution: {integrity: sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==}
dependencies:
'@types/node': 20.8.10
dev: true
/@types/hash-sum@1.0.1:
resolution: {integrity: sha512-5JLywbPgWZVgxhAV//qTU6LPurKfQeiyw20GKZMi9V7AjHnAP4t1eNCJ1mC2L4TAicuS71MVoFYVcEM+EiR4lg==}
dev: true
@ -2637,16 +2414,19 @@ packages:
/@types/istanbul-lib-coverage@2.0.5:
resolution: {integrity: sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==}
dev: false
/@types/istanbul-lib-report@3.0.2:
resolution: {integrity: sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==}
dependencies:
'@types/istanbul-lib-coverage': 2.0.5
dev: false
/@types/istanbul-reports@3.0.3:
resolution: {integrity: sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==}
dependencies:
'@types/istanbul-lib-report': 3.0.2
dev: false
/@types/json-schema@7.0.14:
resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==}
@ -2714,10 +2494,6 @@ packages:
resolution: {integrity: sha512-Kdfm7Sk5VX8dFW7Vbp18+fmAatBewzBILa1raHYxrGEFXT0jNl9x3LWfuW7bTbjEKFNey9Dfkj/UzT6z/NvRlg==}
dev: true
/@types/stack-utils@2.0.2:
resolution: {integrity: sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==}
dev: true
/@types/tapable@1.0.10:
resolution: {integrity: sha512-q8F20SdXG5fdVJQ5yxsVlH+f+oekP42QeHv4s5KlrxTMT0eopXn7ol1rhxMcksf8ph7XNv811iVDE2hOpUvEPg==}
dev: true
@ -2781,11 +2557,13 @@ packages:
/@types/yargs-parser@21.0.1:
resolution: {integrity: sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==}
dev: false
/@types/yargs@17.0.28:
resolution: {integrity: sha512-N3e3fkS86hNhtk6BEnc0rj3zcehaxx8QWhCROJkqpl5Zaoi7nAic3jH8q94jVD3zu5LGk+PUB6KAiDmimYOEQw==}
dependencies:
'@types/yargs-parser': 21.0.1
dev: false
/@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.53.0)(typescript@5.2.2):
resolution: {integrity: sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==}
@ -3577,12 +3355,6 @@ packages:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
dev: false
/argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
dependencies:
sprintf-js: 1.0.3
dev: true
/argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@ -3727,39 +3499,6 @@ packages:
/b4a@1.6.4:
resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==}
/babel-plugin-istanbul@6.1.1:
resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
engines: {node: '>=8'}
dependencies:
'@babel/helper-plugin-utils': 7.22.5
'@istanbuljs/load-nyc-config': 1.1.0
'@istanbuljs/schema': 0.1.3
istanbul-lib-instrument: 5.2.1
test-exclude: 6.0.0
transitivePeerDependencies:
- supports-color
dev: true
/babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.2):
resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
'@babel/core': 7.23.2
'@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2)
'@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.2)
'@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.2)
'@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.2)
'@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2)
'@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2)
'@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2)
'@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2)
'@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2)
'@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2)
'@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2)
'@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.2)
dev: true
/babel-walk@3.0.0-canary-5:
resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==}
engines: {node: '>= 10.0.0'}
@ -3831,12 +3570,6 @@ packages:
node-releases: 2.0.13
update-browserslist-db: 1.0.13(browserslist@4.22.1)
/bser@2.1.1:
resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
dependencies:
node-int64: 0.4.0
dev: true
/buffer-crc32@0.2.13:
resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
@ -3925,11 +3658,6 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
/camelcase@5.3.1:
resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
engines: {node: '>=6'}
dev: true
/camelcase@6.3.0:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'}
@ -4866,11 +4594,6 @@ packages:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
/escape-string-regexp@2.0.0:
resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
engines: {node: '>=8'}
dev: true
/escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
@ -5220,12 +4943,6 @@ packages:
acorn-jsx: 5.3.2(acorn@8.11.2)
eslint-visitor-keys: 3.4.3
/esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
hasBin: true
dev: true
/esquery@1.5.0:
resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
engines: {node: '>=0.10'}
@ -5308,17 +5025,6 @@ packages:
signal-exit: 4.1.0
strip-final-newline: 3.0.0
/expect@29.7.0:
resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/expect-utils': 29.7.0
jest-get-type: 29.6.3
jest-matcher-utils: 29.7.0
jest-message-util: 29.7.0
jest-util: 29.7.0
dev: true
/exponential-backoff@3.1.1:
resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==}
dev: false
@ -5369,12 +5075,6 @@ packages:
dependencies:
reusify: 1.0.4
/fb-watchman@2.0.2:
resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
dependencies:
bser: 2.1.1
dev: true
/fflate@0.8.1:
resolution: {integrity: sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ==}
dev: true
@ -5587,11 +5287,6 @@ packages:
has-proto: 1.0.1
has-symbols: 1.0.3
/get-package-type@0.1.0:
resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
engines: {node: '>=8.0.0'}
dev: true
/get-port-please@3.1.1:
resolution: {integrity: sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==}
@ -6273,24 +5968,6 @@ packages:
engines: {node: '>=16'}
dev: false
/istanbul-lib-coverage@3.2.0:
resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==}
engines: {node: '>=8'}
dev: true
/istanbul-lib-instrument@5.2.1:
resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
engines: {node: '>=8'}
dependencies:
'@babel/core': 7.23.2
'@babel/parser': 7.23.0
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.0
semver: 6.3.1
transitivePeerDependencies:
- supports-color
dev: true
/jackspeak@2.3.6:
resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
engines: {node: '>=14'}
@ -6299,107 +5976,6 @@ packages:
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
/jest-diff@29.7.0:
resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
chalk: 4.1.2
diff-sequences: 29.6.3
jest-get-type: 29.6.3
pretty-format: 29.7.0
dev: true
/jest-get-type@29.6.3:
resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dev: true
/jest-haste-map@29.7.0:
resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.3
'@types/graceful-fs': 4.1.8
'@types/node': 20.8.10
anymatch: 3.1.3
fb-watchman: 2.0.2
graceful-fs: 4.2.11
jest-regex-util: 29.6.3
jest-util: 29.7.0
jest-worker: 29.7.0
micromatch: 4.0.5
walker: 1.0.8
optionalDependencies:
fsevents: 2.3.3
dev: true
/jest-matcher-utils@29.7.0:
resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
chalk: 4.1.2
jest-diff: 29.7.0
jest-get-type: 29.6.3
pretty-format: 29.7.0
dev: true
/jest-message-util@29.7.0:
resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@babel/code-frame': 7.22.13
'@jest/types': 29.6.3
'@types/stack-utils': 2.0.2
chalk: 4.1.2
graceful-fs: 4.2.11
micromatch: 4.0.5
pretty-format: 29.7.0
slash: 3.0.0
stack-utils: 2.0.6
dev: true
/jest-mock@29.7.0:
resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.3
'@types/node': 20.8.10
jest-util: 29.7.0
dev: true
/jest-regex-util@29.6.3:
resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dev: true
/jest-snapshot@29.7.0:
resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@babel/core': 7.23.2
'@babel/generator': 7.23.0
'@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2)
'@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2)
'@babel/types': 7.23.0
'@jest/expect-utils': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.2)
chalk: 4.1.2
expect: 29.7.0
graceful-fs: 4.2.11
jest-diff: 29.7.0
jest-get-type: 29.6.3
jest-matcher-utils: 29.7.0
jest-message-util: 29.7.0
jest-util: 29.7.0
natural-compare: 1.4.0
pretty-format: 29.7.0
semver: 7.5.4
transitivePeerDependencies:
- supports-color
dev: true
/jest-util@29.7.0:
resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@ -6410,6 +5986,7 @@ packages:
ci-info: 3.9.0
graceful-fs: 4.2.11
picomatch: 2.3.1
dev: false
/jest-worker@27.5.1:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
@ -6427,6 +6004,7 @@ packages:
jest-util: 29.7.0
merge-stream: 2.0.0
supports-color: 8.1.1
dev: false
/jiti@1.21.0:
resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
@ -6451,14 +6029,6 @@ packages:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
requiresBuild: true
/js-yaml@3.14.1:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
hasBin: true
dependencies:
argparse: 1.0.10
esprima: 4.0.1
dev: true
/js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
@ -6820,12 +6390,6 @@ packages:
- supports-color
dev: false
/makeerror@1.0.12:
resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
dependencies:
tmpl: 1.0.5
dev: true
/markdown-it@13.0.1:
resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==}
hasBin: true
@ -7287,10 +6851,6 @@ packages:
- supports-color
dev: false
/node-int64@0.4.0:
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
dev: true
/node-releases@2.0.13:
resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
@ -7771,11 +7331,6 @@ packages:
engines: {node: '>=14.16'}
dev: false
/pirates@4.0.6:
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
engines: {node: '>= 6'}
dev: true
/pkg-types@1.0.3:
resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
dependencies:
@ -8909,10 +8464,6 @@ packages:
/spdx-license-ids@3.0.16:
resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==}
/sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
dev: true
/ssri@10.0.5:
resolution: {integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@ -8920,13 +8471,6 @@ packages:
minipass: 7.0.4
dev: false
/stack-utils@2.0.6:
resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
engines: {node: '>=10'}
dependencies:
escape-string-regexp: 2.0.0
dev: true
/stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
dev: true
@ -9156,15 +8700,6 @@ packages:
commander: 2.20.3
source-map-support: 0.5.21
/test-exclude@6.0.0:
resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
engines: {node: '>=8'}
dependencies:
'@istanbuljs/schema': 0.1.3
glob: 7.2.3
minimatch: 3.1.2
dev: true
/text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
@ -9207,10 +8742,6 @@ packages:
resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==}
engines: {node: '>=12'}
/tmpl@1.0.5:
resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
dev: true
/to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
@ -10057,12 +9588,6 @@ packages:
'@vue/shared': 3.3.8
typescript: 5.2.2
/walker@1.0.8:
resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
dependencies:
makeerror: 1.0.12
dev: true
/watchpack@2.4.0:
resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
engines: {node: '>=10.13.0'}
@ -10321,14 +9846,6 @@ packages:
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
/write-file-atomic@4.0.2:
resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
dependencies:
imurmurhash: 0.1.4
signal-exit: 3.0.7
dev: true
/ws@7.5.9:
resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
engines: {node: '>=8.3.0'}

View File

@ -23,6 +23,9 @@ for p in packages/* ; do
if [[ $p == "packages/nuxi" ]] ; then
continue
fi
if [[ $p == "packages/test-utils" ]] ; then
continue
fi
pushd $p
echo "Publishing $p"
cp ../../LICENSE .

View File

@ -13,6 +13,9 @@ for PKG in packages/* ; do
if [[ $PKG == "packages/nuxi" ]] ; then
continue
fi
if [[ $p == "packages/test-utils" ]] ; then
continue
fi
pushd $PKG
TAG="latest"
if [ "$PKG" == "packages/nuxt" ]; then

View File

@ -13,6 +13,9 @@ for PKG in packages/* ; do
if [[ $PKG == "packages/nuxi" ]] ; then
continue
fi
if [[ $p == "packages/test-utils" ]] ; then
continue
fi
pushd $PKG
TAG="latest"
echo "⚡ Publishing $PKG with tag $TAG"

View File

@ -5,6 +5,7 @@ import { joinURL, withQuery } from 'ufo'
import { isCI, isWindows } from 'std-env'
import { join, normalize } from 'pathe'
import { $fetch, createPage, fetch, isDev, setup, startServer, url, useTestContext } from '@nuxt/test-utils'
// @ts-expect-error subpath export needs to be fixed upstream
import { $fetchComponent } from '@nuxt/test-utils/experimental'
import type { NuxtIslandResponse } from '../packages/nuxt/src/core/runtime/nitro/renderer'

View File

@ -7,9 +7,7 @@ export default defineConfig({
resolve: {
alias: {
'#build/nuxt.config.mjs': resolve('./test/mocks/nuxt-config'),
'#app': resolve('./packages/nuxt/dist/app/index'),
'@nuxt/test-utils/experimental': resolve('./packages/test-utils/src/experimental.ts'),
'@nuxt/test-utils': resolve('./packages/test-utils/src/index.ts')
'#app': resolve('./packages/nuxt/dist/app/index')
}
},
define: {