diff --git a/.eslintrc b/.eslintrc index feb6e78660..01503f1a1e 100644 --- a/.eslintrc +++ b/.eslintrc @@ -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/**"], - "rules": { - "jsdoc/no-undefined-types": "off", - "jsdoc/valid-types": "off", - "jsdoc/check-tag-names": [ - "error", - { - "definedTags": ["experimental"] - } - ] - } + "files": [ + "packages/schema/**" + ], + "rules": { + "jsdoc/no-undefined-types": "off", + "jsdoc/valid-types": "off", + "jsdoc/check-tag-names": [ + "error", + { + "definedTags": [ + "experimental" + ] + } + ] + } }, { - "files": ["packages/nuxt/src/app/**", "test/**", "**/runtime/**"], + "files": [ + "packages/nuxt/src/app/**", + "test/**", + "**/runtime/**" + ], "rules": { "no-console": "off" } diff --git a/.stackblitz/codeflow.json b/.stackblitz/codeflow.json index c6f914a9e6..eea4179117 100644 --- a/.stackblitz/codeflow.json +++ b/.stackblitz/codeflow.json @@ -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" diff --git a/knip.json b/knip.json index 96a59fca9f..2ce29ce41d 100644 --- a/knip.json +++ b/knip.json @@ -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", diff --git a/package.json b/package.json index d5b2d0f3da..2fc34ed564 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/packages/test-utils/README.md b/packages/test-utils/README.md new file mode 100644 index 0000000000..bf877e0d9d --- /dev/null +++ b/packages/test-utils/README.md @@ -0,0 +1,5 @@ +# Nuxt Test Utils + +๐Ÿงช Test utilities for [Nuxt](https://nuxt.com). + +- ๐Ÿ‘‰ View on GitHub at https://github.com/nuxt/test-utils diff --git a/packages/test-utils/build.config.ts b/packages/test-utils/build.config.ts deleted file mode 100644 index 8d3b45ff31..0000000000 --- a/packages/test-utils/build.config.ts +++ /dev/null @@ -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: [ - ] -}) diff --git a/packages/test-utils/experimental.d.ts b/packages/test-utils/experimental.d.ts deleted file mode 100644 index c9d24adffa..0000000000 --- a/packages/test-utils/experimental.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/experimental' diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json deleted file mode 100644 index 249702859f..0000000000 --- a/packages/test-utils/package.json +++ /dev/null @@ -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" - } -} diff --git a/packages/test-utils/src/browser.ts b/packages/test-utils/src/browser.ts deleted file mode 100644 index 867d42121f..0000000000 --- a/packages/test-utils/src/browser.ts +++ /dev/null @@ -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 { - 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 -} diff --git a/packages/test-utils/src/context.ts b/packages/test-utils/src/context.ts deleted file mode 100644 index 4686f9cab0..0000000000 --- a/packages/test-utils/src/context.ts +++ /dev/null @@ -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): TestContext { - const _options: Partial = 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: '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 }) -} diff --git a/packages/test-utils/src/dirs.ts b/packages/test-utils/src/dirs.ts deleted file mode 100644 index 0b49bbfc3b..0000000000 --- a/packages/test-utils/src/dirs.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { fileURLToPath } from 'node:url' -import { dirname } from 'pathe' - -export const distDir = dirname(fileURLToPath(import.meta.url)) diff --git a/packages/test-utils/src/experimental.ts b/packages/test-utils/src/experimental.ts deleted file mode 100644 index 3b04a2171e..0000000000 --- a/packages/test-utils/src/experimental.ts +++ /dev/null @@ -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) { - return $fetch(componentTestUrl(filepath, props)) -} - -export function componentTestUrl (filepath: string, props?: Record) { - const ctx = useTestContext() - filepath = resolve(ctx.options.rootDir, filepath) - const path = stringifyQuery({ - path: filepath, - props: JSON.stringify(props) - }) - return `/__nuxt_component_test__/?${path}` -} diff --git a/packages/test-utils/src/index.ts b/packages/test-utils/src/index.ts deleted file mode 100644 index f55ad8e569..0000000000 --- a/packages/test-utils/src/index.ts +++ /dev/null @@ -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' diff --git a/packages/test-utils/src/mock.ts b/packages/test-utils/src/mock.ts deleted file mode 100644 index 37ade5a203..0000000000 --- a/packages/test-utils/src/mock.ts +++ /dev/null @@ -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 { - const mocks: any = {} - consola.mockTypes((type) => { - mocks[type] = mockFn() - return mocks[type] - }) - return mocks -} diff --git a/packages/test-utils/src/nuxt.ts b/packages/test-utils/src/nuxt.ts deleted file mode 100644 index c5f557d5ad..0000000000 --- a/packages/test-utils/src/nuxt.ts +++ /dev/null @@ -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 -} diff --git a/packages/test-utils/src/run.ts b/packages/test-utils/src/run.ts deleted file mode 100644 index 6229ef0f3b..0000000000 --- a/packages/test-utils/src/run.ts +++ /dev/null @@ -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 = { - 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) - } -} diff --git a/packages/test-utils/src/runtime/global-setup.ts b/packages/test-utils/src/runtime/global-setup.ts deleted file mode 100644 index 5528dab5ed..0000000000 --- a/packages/test-utils/src/runtime/global-setup.ts +++ /dev/null @@ -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() -} diff --git a/packages/test-utils/src/server.ts b/packages/test-utils/src/server.ts deleted file mode 100644 index 1305f7b5ea..0000000000 --- a/packages/test-utils/src/server.ts +++ /dev/null @@ -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 -} diff --git a/packages/test-utils/src/setup/index.ts b/packages/test-utils/src/setup/index.ts deleted file mode 100644 index 6fc205cc6a..0000000000 --- a/packages/test-utils/src/setup/index.ts +++ /dev/null @@ -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): 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 = {}) { - const hooks = createTest(options) - - const setupFn = setupMaps[hooks.ctx.options.runner] - - await setupFn(hooks) -} diff --git a/packages/test-utils/src/setup/jest.ts b/packages/test-utils/src/setup/jest.ts deleted file mode 100644 index 5ae223d0d0..0000000000 --- a/packages/test-utils/src/setup/jest.ts +++ /dev/null @@ -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) -} diff --git a/packages/test-utils/src/setup/vitest.ts b/packages/test-utils/src/setup/vitest.ts deleted file mode 100644 index d55ece3438..0000000000 --- a/packages/test-utils/src/setup/vitest.ts +++ /dev/null @@ -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) -} diff --git a/packages/test-utils/src/types.ts b/packages/test-utils/src/types.ts deleted file mode 100644 index e8847091bb..0000000000 --- a/packages/test-utils/src/types.ts +++ /dev/null @@ -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 -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2388ba95f2..d3bce35763 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -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'} diff --git a/scripts/release-edge.sh b/scripts/release-edge.sh index 88bdde3218..6884a1e758 100755 --- a/scripts/release-edge.sh +++ b/scripts/release-edge.sh @@ -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 . diff --git a/scripts/release-rc.sh b/scripts/release-rc.sh index 8c9ade8f7e..2b029b9352 100755 --- a/scripts/release-rc.sh +++ b/scripts/release-rc.sh @@ -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 diff --git a/scripts/release.sh b/scripts/release.sh index f33fcb7f34..f0e84a91b0 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -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" diff --git a/test/basic.test.ts b/test/basic.test.ts index 10455df657..3aa9526f5e 100644 --- a/test/basic.test.ts +++ b/test/basic.test.ts @@ -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' diff --git a/vitest.config.ts b/vitest.config.ts index a0cbffa65a..a4c36c5bcf 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -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: {