@nuxt/test-utils
Version:
Test utilities for Nuxt
62 lines (61 loc) • 1.85 kB
JavaScript
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 };