aboutsummaryrefslogtreecommitdiffstats
path: root/vanilla/node_modules/vitest/dist/chunks/creator.DAmOKTvJ.js
diff options
context:
space:
mode:
Diffstat (limited to 'vanilla/node_modules/vitest/dist/chunks/creator.DAmOKTvJ.js')
-rw-r--r--vanilla/node_modules/vitest/dist/chunks/creator.DAmOKTvJ.js673
1 files changed, 0 insertions, 673 deletions
diff --git a/vanilla/node_modules/vitest/dist/chunks/creator.DAmOKTvJ.js b/vanilla/node_modules/vitest/dist/chunks/creator.DAmOKTvJ.js
deleted file mode 100644
index 1d47182..0000000
--- a/vanilla/node_modules/vitest/dist/chunks/creator.DAmOKTvJ.js
+++ /dev/null
@@ -1,673 +0,0 @@
-import { existsSync, writeFileSync, readFileSync } from 'node:fs';
-import { mkdir, writeFile } from 'node:fs/promises';
-import { resolve, dirname, relative } from 'node:path';
-import { detectPackageManager, installPackage } from './index.D3XRDfWc.js';
-import { p as prompt, a as any } from './index.D4KonVSU.js';
-import { x } from 'tinyexec';
-import c from 'tinyrainbow';
-import { c as configFiles } from './constants.D_Q9UYh-.js';
-import 'node:process';
-import 'node:module';
-import 'node:url';
-import './_commonjsHelpers.D26ty3Ew.js';
-import 'readline';
-import 'events';
-
-const jsxExample = {
- name: "HelloWorld.jsx",
- js: `
-export default function HelloWorld({ name }) {
- return (
- <div>
- <h1>Hello {name}!</h1>
- </div>
- )
-}
-`,
- ts: `
-export default function HelloWorld({ name }: { name: string }) {
- return (
- <div>
- <h1>Hello {name}!</h1>
- </div>
- )
-}
-`,
- test: `
-import { expect, test } from 'vitest'
-import { render } from '@testing-library/jsx'
-import HelloWorld from './HelloWorld.<EXT>x'
-
-test('renders name', async () => {
- const { getByText } = await render(<HelloWorld name="Vitest" />)
- await expect.element(getByText('Hello Vitest!')).toBeInTheDocument()
-})
-`
-};
-const vueExample = {
- name: "HelloWorld.vue",
- js: `
-<script setup>
-defineProps({
- name: String
-})
-<\/script>
-
-<template>
- <div>
- <h1>Hello {{ name }}!</h1>
- </div>
-</template>
-`,
- ts: `
-<script setup lang="ts">
-defineProps<{
- name: string
-}>()
-<\/script>
-
-<template>
- <div>
- <h1>Hello {{ name }}!</h1>
- </div>
-</template>
-`,
- test: `
-import { expect, test } from 'vitest'
-import { render } from 'vitest-browser-vue'
-import HelloWorld from './HelloWorld.vue'
-
-test('renders name', async () => {
- const { getByText } = render(HelloWorld, {
- props: { name: 'Vitest' },
- })
- await expect.element(getByText('Hello Vitest!')).toBeInTheDocument()
-})
-`
-};
-const svelteExample = {
- name: "HelloWorld.svelte",
- js: `
-<script>
- export let name
-<\/script>
-
-<h1>Hello {name}!</h1>
-`,
- ts: `
-<script lang="ts">
- export let name: string
-<\/script>
-
-<h1>Hello {name}!</h1>
-`,
- test: `
-import { expect, test } from 'vitest'
-import { render } from 'vitest-browser-svelte'
-import HelloWorld from './HelloWorld.svelte'
-
-test('renders name', async () => {
- const { getByText } = render(HelloWorld, { name: 'Vitest' })
- await expect.element(getByText('Hello Vitest!')).toBeInTheDocument()
-})
-`
-};
-const markoExample = {
- name: "HelloWorld.marko",
- js: `
-class {
- onCreate() {
- this.state = { name: null }
- }
-}
-
-<h1>Hello \${state.name}!</h1>
-`,
- ts: `
-export interface Input {
- name: string
-}
-
-<h1>Hello \${input.name}!</h1>
-`,
- test: `
-import { expect, test } from 'vitest'
-import { render } from '@marko/testing-library'
-import HelloWorld from './HelloWorld.svelte'
-
-test('renders name', async () => {
- const { getByText } = await render(HelloWorld, { name: 'Vitest' })
- const element = getByText('Hello Vitest!')
- expect(element).toBeInTheDocument()
-})
-`
-};
-const litExample = {
- name: "HelloWorld.js",
- js: `
-import { html, LitElement } from 'lit'
-
-export class HelloWorld extends LitElement {
- static properties = {
- name: { type: String },
- }
-
- constructor() {
- super()
- this.name = 'World'
- }
-
- render() {
- return html\`<h1>Hello \${this.name}!</h1>\`
- }
-}
-
-customElements.define('hello-world', HelloWorld)
-`,
- ts: `
-import { html, LitElement } from 'lit'
-import { customElement, property } from 'lit/decorators.js'
-
-@customElement('hello-world')
-export class HelloWorld extends LitElement {
- @property({ type: String })
- name = 'World'
-
- render() {
- return html\`<h1>Hello \${this.name}!</h1>\`
- }
-}
-
-declare global {
- interface HTMLElementTagNameMap {
- 'hello-world': HelloWorld
- }
-}
-`,
- test: `
-import { expect, test } from 'vitest'
-import { render } from 'vitest-browser-lit'
-import { html } from 'lit'
-import './HelloWorld.js'
-
-test('renders name', async () => {
- const screen = render(html\`<hello-world name="Vitest"></hello-world>\`)
- const element = screen.getByText('Hello Vitest!')
- await expect.element(element).toBeInTheDocument()
-})
-`
-};
-const qwikExample = {
- name: "HelloWorld.jsx",
- js: `
-import { component$ } from '@builder.io/qwik'
-
-export default component$(({ name }) => {
- return (
- <div>
- <h1>Hello {name}!</h1>
- </div>
- )
-})
-`,
- ts: `
-import { component$ } from '@builder.io/qwik'
-
-export default component$(({ name }: { name: string }) => {
- return (
- <div>
- <h1>Hello {name}!</h1>
- </div>
- )
-})
-`,
- test: `
-import { expect, test } from 'vitest'
-import { render } from 'vitest-browser-qwik'
-import HelloWorld from './HelloWorld.tsx'
-
-test('renders name', async () => {
- const { getByText } = render(<HelloWorld name="Vitest" />)
- await expect.element(getByText('Hello Vitest!')).toBeInTheDocument()
-})
-`
-};
-const vanillaExample = {
- name: "HelloWorld.js",
- js: `
-export default function HelloWorld({ name }) {
- const parent = document.createElement('div')
-
- const h1 = document.createElement('h1')
- h1.textContent = 'Hello ' + name + '!'
- parent.appendChild(h1)
-
- return parent
-}
-`,
- ts: `
-export default function HelloWorld({ name }: { name: string }): HTMLDivElement {
- const parent = document.createElement('div')
-
- const h1 = document.createElement('h1')
- h1.textContent = 'Hello ' + name + '!'
- parent.appendChild(h1)
-
- return parent
-}
-`,
- test: `
-import { expect, test } from 'vitest'
-import { getByText } from '@testing-library/dom'
-import HelloWorld from './HelloWorld.js'
-
-test('renders name', () => {
- const parent = HelloWorld({ name: 'Vitest' })
- document.body.appendChild(parent)
-
- const element = getByText(parent, 'Hello Vitest!')
- expect(element).toBeInTheDocument()
-})
-`
-};
-function getExampleTest(framework) {
- switch (framework) {
- case "solid": return {
- ...jsxExample,
- test: jsxExample.test.replace("@testing-library/jsx", `@testing-library/${framework}`)
- };
- case "preact":
- case "react": return {
- ...jsxExample,
- test: jsxExample.test.replace("@testing-library/jsx", `vitest-browser-${framework}`)
- };
- case "vue": return vueExample;
- case "svelte": return svelteExample;
- case "lit": return litExample;
- case "marko": return markoExample;
- case "qwik": return qwikExample;
- default: return vanillaExample;
- }
-}
-async function generateExampleFiles(framework, lang) {
- const example = getExampleTest(framework);
- let fileName = example.name;
- const folder = resolve(process.cwd(), "vitest-example");
- const fileContent = example[lang];
- if (!existsSync(folder)) await mkdir(folder, { recursive: true });
- const isJSX = fileName.endsWith(".jsx");
- if (isJSX && lang === "ts") fileName = fileName.replace(".jsx", ".tsx");
- else if (fileName.endsWith(".js") && lang === "ts") fileName = fileName.replace(".js", ".ts");
- example.test = example.test.replace("<EXT>", lang);
- const filePath = resolve(folder, fileName);
- const testPath = resolve(folder, `HelloWorld.test.${isJSX ? `${lang}x` : lang}`);
- writeFileSync(filePath, fileContent.trimStart(), "utf-8");
- writeFileSync(testPath, example.test.trimStart(), "utf-8");
- return testPath;
-}
-
-// eslint-disable-next-line no-console
-const log = console.log;
-function getProviderOptions() {
- return Object.entries({
- playwright: "Playwright relies on Chrome DevTools protocol. Read more: https://playwright.dev",
- webdriverio: "WebdriverIO uses WebDriver protocol. Read more: https://webdriver.io",
- preview: "Preview is useful to quickly run your tests in the browser, but not suitable for CI."
- }).map(([provider, description]) => {
- return {
- title: provider,
- description,
- value: provider
- };
- });
-}
-function getBrowserNames(provider) {
- switch (provider) {
- case "webdriverio": return [
- "chrome",
- "firefox",
- "edge",
- "safari"
- ];
- case "playwright": return [
- "chromium",
- "firefox",
- "webkit"
- ];
- case "preview": return [
- "chrome",
- "firefox",
- "safari"
- ];
- }
-}
-function getFramework() {
- return [
- {
- title: "vanilla",
- value: "vanilla",
- description: "No framework, just plain JavaScript or TypeScript."
- },
- {
- title: "vue",
- value: "vue",
- description: "\"The Progressive JavaScript Framework\""
- },
- {
- title: "svelte",
- value: "svelte",
- description: "\"Svelte: cybernetically enhanced web apps\""
- },
- {
- title: "react",
- value: "react",
- description: "\"The library for web and native user interfaces\""
- },
- {
- title: "lit",
- value: "lit",
- description: "\"A simple library for building fast, lightweight web components.\""
- },
- {
- title: "preact",
- value: "preact",
- description: "\"Fast 3kB alternative to React with the same modern API\""
- },
- {
- title: "solid",
- value: "solid",
- description: "\"Simple and performant reactivity for building user interfaces\""
- },
- {
- title: "marko",
- value: "marko",
- description: "\"A declarative, HTML-based language that makes building web apps fun\""
- },
- {
- title: "qwik",
- value: "qwik",
- description: "\"Instantly interactive web apps at scale\""
- }
- ];
-}
-function getFrameworkTestPackage(framework) {
- switch (framework) {
- case "vanilla": return null;
- case "vue": return "vitest-browser-vue";
- case "svelte": return "vitest-browser-svelte";
- case "react": return "vitest-browser-react";
- case "lit": return "vitest-browser-lit";
- case "preact": return "vitest-browser-preact";
- case "solid": return "@solidjs/testing-library";
- case "marko": return "@marko/testing-library";
- case "qwik": return "vitest-browser-qwik";
- }
- throw new Error(`Unsupported framework: ${framework}`);
-}
-function getFrameworkPluginPackage(framework) {
- switch (framework) {
- case "vue": return "@vitejs/plugin-vue";
- case "svelte": return "@sveltejs/vite-plugin-svelte";
- case "react": return "@vitejs/plugin-react";
- case "preact": return "@preact/preset-vite";
- case "solid": return "vite-plugin-solid";
- case "marko": return "@marko/vite";
- case "qwik": return "@builder.io/qwik/optimizer";
- }
- return null;
-}
-function getLanguageOptions() {
- return [{
- title: "TypeScript",
- description: "Use TypeScript.",
- value: "ts"
- }, {
- title: "JavaScript",
- description: "Use plain JavaScript.",
- value: "js"
- }];
-}
-async function installPackages(pkgManager, packages) {
- if (!packages.length) {
- log(c.green("✔"), c.bold("All packages are already installed."));
- return;
- }
- log(c.cyan("◼"), c.bold("Installing packages..."));
- log(c.cyan("◼"), packages.join(", "));
- log();
- await installPackage(packages, {
- dev: true,
- packageManager: pkgManager ?? void 0
- });
-}
-function readPkgJson(path) {
- if (!existsSync(path)) return null;
- const content = readFileSync(path, "utf-8");
- return JSON.parse(content);
-}
-function getPossibleDefaults(dependencies) {
- return {
- lang: "ts",
- provider: getPossibleProvider(dependencies),
- framework: getPossibleFramework(dependencies)
- };
-}
-function getPossibleFramework(dependencies) {
- if (dependencies.vue || dependencies["vue-tsc"] || dependencies["@vue/reactivity"]) return "vue";
- if (dependencies.react || dependencies["react-dom"]) return "react";
- if (dependencies.svelte || dependencies["@sveltejs/kit"]) return "svelte";
- if (dependencies.lit || dependencies["lit-html"]) return "lit";
- if (dependencies.preact) return "preact";
- if (dependencies["solid-js"] || dependencies["@solidjs/start"]) return "solid";
- if (dependencies.marko) return "marko";
- if (dependencies["@builder.io/qwik"] || dependencies["@qwik.dev/core"]) return "qwik";
- return "vanilla";
-}
-function getPossibleProvider(dependencies) {
- if (dependencies.webdriverio || dependencies["@wdio/cli"] || dependencies["@wdio/config"]) return "webdriverio";
- // playwright is the default recommendation
- return "playwright";
-}
-function getProviderDocsLink(provider) {
- switch (provider) {
- case "playwright": return "https://vitest.dev/config/browser/playwright";
- case "webdriverio": return "https://vitest.dev/config/browser/webdriverio";
- }
-}
-function sort(choices, value) {
- const index = choices.findIndex((i) => i.value === value);
- if (index === -1) return choices;
- return [choices.splice(index, 1)[0], ...choices];
-}
-function fail() {
- process.exitCode = 1;
-}
-function getFrameworkImportInfo(framework) {
- switch (framework) {
- case "svelte": return {
- importName: "svelte",
- isNamedExport: true
- };
- case "qwik": return {
- importName: "qwikVite",
- isNamedExport: true
- };
- default: return {
- importName: framework,
- isNamedExport: false
- };
- }
-}
-async function generateFrameworkConfigFile(options) {
- const { importName, isNamedExport } = getFrameworkImportInfo(options.framework);
- const frameworkImport = isNamedExport ? `import { ${importName} } from '${options.frameworkPlugin}'` : `import ${importName} from '${options.frameworkPlugin}'`;
- const configContent = [
- `import { defineConfig } from 'vitest/config'`,
- `import { ${options.provider} } from '@vitest/browser-${options.provider}'`,
- options.frameworkPlugin ? frameworkImport : null,
- ``,
- "export default defineConfig({",
- options.frameworkPlugin ? ` plugins: [${importName}()],` : null,
- ` test: {`,
- ` browser: {`,
- ` enabled: true,`,
- ` provider: ${options.provider}(),`,
- options.provider !== "preview" && ` // ${getProviderDocsLink(options.provider)}`,
- ` instances: [`,
- ...options.browsers.map((browser) => ` { browser: '${browser}' },`),
- ` ],`,
- ` },`,
- ` },`,
- `})`,
- ""
- ].filter((t) => typeof t === "string").join("\n");
- await writeFile(options.configPath, configContent);
-}
-async function updatePkgJsonScripts(pkgJsonPath, vitestScript) {
- if (!existsSync(pkgJsonPath)) {
- const pkg = { scripts: { "test:browser": vitestScript } };
- await writeFile(pkgJsonPath, `${JSON.stringify(pkg, null, 2)}\n`, "utf-8");
- } else {
- const pkg = JSON.parse(readFileSync(pkgJsonPath, "utf-8"));
- pkg.scripts = pkg.scripts || {};
- pkg.scripts["test:browser"] = vitestScript;
- await writeFile(pkgJsonPath, `${JSON.stringify(pkg, null, 2)}\n`, "utf-8");
- }
- log(c.green("✔"), "Added \"test:browser\" script to your package.json.");
-}
-function getRunScript(pkgManager) {
- switch (pkgManager) {
- case "yarn@berry":
- case "yarn": return "yarn test:browser";
- case "pnpm@6":
- case "pnpm": return "pnpm test:browser";
- case "bun": return "bun test:browser";
- default: return "npm run test:browser";
- }
-}
-function getPlaywrightRunArgs(pkgManager) {
- switch (pkgManager) {
- case "yarn@berry":
- case "yarn": return ["yarn", "exec"];
- case "pnpm@6":
- case "pnpm": return ["pnpx"];
- case "bun": return ["bunx"];
- default: return ["npx"];
- }
-}
-async function create() {
- log(c.cyan("◼"), "This utility will help you set up a browser testing environment.\n");
- const pkgJsonPath = resolve(process.cwd(), "package.json");
- const pkg = readPkgJson(pkgJsonPath) || {};
- const dependencies = {
- ...pkg.dependencies,
- ...pkg.devDependencies
- };
- const defaults = getPossibleDefaults(dependencies);
- const { lang } = await prompt({
- type: "select",
- name: "lang",
- message: "Choose a language for your tests",
- choices: sort(getLanguageOptions(), defaults?.lang)
- });
- if (!lang) return fail();
- const { provider } = await prompt({
- type: "select",
- name: "provider",
- message: "Choose a browser provider. Vitest will use its API to control the testing environment",
- choices: sort(getProviderOptions(), defaults?.provider)
- });
- if (!provider) return fail();
- const { browsers } = await prompt({
- type: "multiselect",
- name: "browsers",
- message: "Choose a browser",
- choices: getBrowserNames(provider).map((browser) => ({
- title: browser,
- value: browser
- }))
- });
- if (!provider) return fail();
- const { framework } = await prompt({
- type: "select",
- name: "framework",
- message: "Choose your framework",
- choices: sort(getFramework(), defaults?.framework)
- });
- if (!framework) return fail();
- let installPlaywright = false;
- if (provider === "playwright") ({installPlaywright} = await prompt({
- type: "confirm",
- name: "installPlaywright",
- message: `Install Playwright browsers (can be done manually via 'pnpm exec playwright install')?`
- }));
- if (installPlaywright == null) return fail();
- const dependenciesToInstall = [`@vitest/browser-${provider}`];
- const frameworkPackage = getFrameworkTestPackage(framework);
- if (frameworkPackage) dependenciesToInstall.push(frameworkPackage);
- const frameworkPlugin = getFrameworkPluginPackage(framework);
- if (frameworkPlugin) dependenciesToInstall.push(frameworkPlugin);
- const pkgManager = await detectPackageManager();
- log();
- await installPackages(pkgManager, dependenciesToInstall.filter((pkg) => !dependencies[pkg]));
- const rootConfig = any(configFiles, { cwd: process.cwd() });
- let scriptCommand = "vitest";
- log();
- if (rootConfig) {
- const configPath = resolve(dirname(rootConfig), `vitest.browser.config.${lang}`);
- scriptCommand = `vitest --config=${relative(process.cwd(), configPath)}`;
- await generateFrameworkConfigFile({
- configPath,
- framework,
- frameworkPlugin,
- provider,
- browsers
- });
- log(
- c.green("✔"),
- "Created a new config file for browser tests:",
- c.bold(relative(process.cwd(), configPath)),
- // TODO: Can we modify the config ourselves?
- "\nSince you already have a Vitest config file, it is recommended to copy the contents of the new file ",
- "into your existing config located at ",
- c.bold(relative(process.cwd(), rootConfig))
- );
- } else {
- const configPath = resolve(process.cwd(), `vitest.config.${lang}`);
- await generateFrameworkConfigFile({
- configPath,
- framework,
- frameworkPlugin,
- provider,
- browsers
- });
- log(c.green("✔"), "Created a config file for browser tests:", c.bold(relative(process.cwd(), configPath)));
- }
- log();
- await updatePkgJsonScripts(pkgJsonPath, scriptCommand);
- if (installPlaywright) {
- log();
- const [command, ...args] = getPlaywrightRunArgs(pkgManager);
- const allArgs = [
- ...args,
- "playwright",
- "install",
- "--with-deps"
- ];
- log(c.cyan("◼"), `Installing Playwright dependencies with \`${c.bold(command)} ${c.bold(allArgs.join(" "))}\`...`);
- log();
- await x(command, allArgs, { nodeOptions: { stdio: [
- "pipe",
- "inherit",
- "inherit"
- ] } });
- }
- log();
- const exampleTestFile = await generateExampleFiles(framework, lang);
- log(c.green("✔"), "Created example test file in", c.bold(relative(process.cwd(), exampleTestFile)));
- log(c.dim(" You can safely delete this file once you have written your own tests."));
- log();
- log(c.cyan("◼"), "All done! Run your tests with", c.bold(getRunScript(pkgManager)));
-}
-
-export { create };