UNPKG

@nuxt/test-utils

Version:

Test utilities for Nuxt

62 lines (61 loc) 1.85 kB
import destr from "destr"; import { snakeCase } from "scule"; import { pathToFileURL } from "node:url"; import { resolveModulePath } from "exsolve"; //#region src/utils.ts function getEnv(key, opts) { const env = opts.env ?? process.env; const envKey = snakeCase(key).toUpperCase(); return destr(env[opts.prefix + envKey] ?? env[opts.altPrefix + envKey]); } function _isObject(input) { return typeof input === "object" && !Array.isArray(input); } function applyEnv(obj, opts, parentKey = "") { for (const key in obj) { const subKey = parentKey ? `${parentKey}_${key}` : key; const envValue = getEnv(subKey, opts); if (_isObject(obj[key])) if (_isObject(envValue)) { obj[key] = { ...obj[key], ...envValue }; applyEnv(obj[key], opts, subKey); } else if (envValue === void 0) applyEnv(obj[key], opts, subKey); else obj[key] = envValue ?? obj[key]; else obj[key] = envValue ?? obj[key]; } return obj; } async function loadKit(rootDir) { try { let kit = await import(pathToFileURL(resolveModulePath("@nuxt/kit", { from: tryResolveNuxt(rootDir) || rootDir })).href); if (!kit.writeTypes) kit = { ...kit, writeTypes: () => { throw new Error("`writeTypes` is not available in this version of `@nuxt/kit`. Please upgrade to v3.7 or newer."); } }; return kit; } catch (e) { if (e.toString().includes("Cannot find module '@nuxt/kit'")) throw new Error("`@nuxt/test-utils` requires `@nuxt/kit` to be installed in your project. Try installing `nuxt` v3+ or `@nuxt/bridge` first.", { cause: e }); throw e; } } function tryResolveNuxt(rootDir) { for (const pkg of [ "nuxt-nightly", "nuxt", "nuxt3", "nuxt-edge" ]) { const path = resolveModulePath(pkg, { from: rootDir, try: true }); if (path) return path; } return null; } //#endregion export { loadKit as n, applyEnv as t };