Aktueller Stand

This commit is contained in:
2026-01-23 01:33:35 +01:00
parent 082dc5e110
commit 2766dd12c5
10109 changed files with 1578841 additions and 77685 deletions

View File

@@ -18,10 +18,10 @@ var __copyProps = (to, from, except, desc) => {
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var binaryTargetRegex_exports = {};
__export(binaryTargetRegex_exports, {
binaryTargetRegex: () => import_chunk_B23KD6U3.binaryTargetRegex
binaryTargetRegex: () => import_chunk_IPLRRT6O.binaryTargetRegex
});
module.exports = __toCommonJS(binaryTargetRegex_exports);
var import_chunk_B23KD6U3 = require("../chunk-B23KD6U3.js");
var import_chunk_IPLRRT6O = require("../chunk-IPLRRT6O.js");
var import_chunk_7MLUNQIZ = require("../chunk-7MLUNQIZ.js");
var import_chunk_2ESYSVXG = require("../chunk-2ESYSVXG.js");
(0, import_chunk_B23KD6U3.init_binaryTargetRegex)();
(0, import_chunk_IPLRRT6O.init_binaryTargetRegex)();

View File

@@ -1 +1 @@
export { type BaseContext, jestConsoleContext, jestContext, jestProcessContext } from './jestContext';
export { type BaseContext, jestConsoleContext, jestContext, jestStdoutContext, type ProcessContextSettings, processExitContext, } from './jestContext';

View File

@@ -18,11 +18,13 @@ var __copyProps = (to, from, except, desc) => {
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var test_utils_exports = {};
__export(test_utils_exports, {
jestConsoleContext: () => import_chunk_M5NKJZ76.jestConsoleContext,
jestContext: () => import_chunk_M5NKJZ76.jestContext,
jestProcessContext: () => import_chunk_M5NKJZ76.jestProcessContext
jestConsoleContext: () => import_chunk_GGL63BNP.jestConsoleContext,
jestContext: () => import_chunk_GGL63BNP.jestContext,
jestStdoutContext: () => import_chunk_GGL63BNP.jestStdoutContext,
processExitContext: () => import_chunk_GGL63BNP.processExitContext
});
module.exports = __toCommonJS(test_utils_exports);
var import_chunk_6HZWON4S = require("../chunk-6HZWON4S.js");
var import_chunk_M5NKJZ76 = require("../chunk-M5NKJZ76.js");
var import_chunk_GGL63BNP = require("../chunk-GGL63BNP.js");
var import_chunk_3UEKS5W6 = require("../chunk-3UEKS5W6.js");
var import_chunk_2ESYSVXG = require("../chunk-2ESYSVXG.js");

View File

@@ -1,5 +1,5 @@
/// <reference types="jest" />
import type { ExecaChildProcess } from 'execa';
import { type ExecaChildProcess } from 'execa';
import type { FSJetpack } from 'fs-jetpack/types';
/**
* Base test context.
@@ -75,10 +75,6 @@ export declare const jestContext: {
assemble(): BaseContext;
};
};
/**
* Factory for creating a context contributor possibly configured in some special way.
*/
type ContextContributorFactory<Settings, Context, NewContext> = Settings extends {} ? () => ContextContributor<Context, NewContext> : (settings: Settings) => ContextContributor<Context, NewContext>;
/**
* A function that provides additional test context.
*/
@@ -94,7 +90,7 @@ type ConsoleContext = {
'console.warn': jest.SpyInstance;
};
};
export declare const jestConsoleContext: ContextContributorFactory<{}, BaseContext, ConsoleContext>;
export declare const jestConsoleContext: <Ctx extends BaseContext>() => (c: Ctx) => Ctx & ConsoleContext;
/**
* Test context contributor. Mocks process.std(out|err).write with a Jest spy before each test.
*/
@@ -103,6 +99,24 @@ type ProcessContext = {
'process.stderr.write': jest.SpyInstance;
'process.stdout.write': jest.SpyInstance;
};
normalizedCapturedStdout: () => string;
normalizedCapturedStderr: () => string;
clearCapturedStdout: () => void;
clearCapturedStderr: () => void;
};
export declare const jestProcessContext: ContextContributorFactory<{}, BaseContext, ProcessContext>;
type NormalizationRule = [RegExp | string, string];
export type ProcessContextSettings = {
normalizationRules: NormalizationRule[];
};
export declare const jestStdoutContext: <Ctx extends BaseContext>({ normalizationRules }?: ProcessContextSettings) => (c: Ctx) => Ctx & ProcessContext;
/**
* Test context contributor. Mocks process.exit with a spay and records the exit code.
*/
type ProcessExitContext = {
mocked: {
'process.exit': jest.SpyInstance;
};
recordedExitCode: () => number;
};
export declare const processExitContext: <C extends BaseContext>() => (c: C) => C & ProcessExitContext;
export {};

View File

@@ -18,10 +18,12 @@ var __copyProps = (to, from, except, desc) => {
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var jestContext_exports = {};
__export(jestContext_exports, {
jestConsoleContext: () => import_chunk_M5NKJZ76.jestConsoleContext,
jestContext: () => import_chunk_M5NKJZ76.jestContext,
jestProcessContext: () => import_chunk_M5NKJZ76.jestProcessContext
jestConsoleContext: () => import_chunk_GGL63BNP.jestConsoleContext,
jestContext: () => import_chunk_GGL63BNP.jestContext,
jestStdoutContext: () => import_chunk_GGL63BNP.jestStdoutContext,
processExitContext: () => import_chunk_GGL63BNP.processExitContext
});
module.exports = __toCommonJS(jestContext_exports);
var import_chunk_M5NKJZ76 = require("../chunk-M5NKJZ76.js");
var import_chunk_GGL63BNP = require("../chunk-GGL63BNP.js");
var import_chunk_3UEKS5W6 = require("../chunk-3UEKS5W6.js");
var import_chunk_2ESYSVXG = require("../chunk-2ESYSVXG.js");

View File

@@ -21,74 +21,14 @@ __export(jestSnapshotSerializer_exports, {
default: () => jestSnapshotSerializer_default
});
module.exports = __toCommonJS(jestSnapshotSerializer_exports);
var import_chunk_B23KD6U3 = require("../chunk-B23KD6U3.js");
var import_chunk_IPLRRT6O = require("../chunk-IPLRRT6O.js");
var import_chunk_7MLUNQIZ = require("../chunk-7MLUNQIZ.js");
var import_chunk_2ESYSVXG = require("../chunk-2ESYSVXG.js");
var require_replace_string = (0, import_chunk_2ESYSVXG.__commonJS)({
"../../node_modules/.pnpm/replace-string@3.1.0/node_modules/replace-string/index.js"(exports, module2) {
"use strict";
module2.exports = (string, needle, replacement, options = {}) => {
if (typeof string !== "string") {
throw new TypeError(`Expected input to be a string, got ${typeof string}`);
}
if (!(typeof needle === "string" && needle.length > 0) || !(typeof replacement === "string" || typeof replacement === "function")) {
return string;
}
let result = "";
let matchCount = 0;
let prevIndex = options.fromIndex > 0 ? options.fromIndex : 0;
if (prevIndex > string.length) {
return string;
}
while (true) {
const index = options.caseInsensitive ? string.toLowerCase().indexOf(needle.toLowerCase(), prevIndex) : string.indexOf(needle, prevIndex);
if (index === -1) {
break;
}
matchCount++;
const replaceStr = typeof replacement === "string" ? replacement : replacement(
// If `caseInsensitive`` is enabled, the matched substring may be different from the needle.
string.slice(index, index + needle.length),
matchCount,
string,
index
);
const beginSlice = matchCount === 1 ? 0 : prevIndex;
result += string.slice(beginSlice, index) + replaceStr;
prevIndex = index + needle.length;
}
if (matchCount === 0) {
return string;
}
return result + string.slice(prevIndex);
};
}
});
var require_ansi_regex = (0, import_chunk_2ESYSVXG.__commonJS)({
"../../node_modules/.pnpm/ansi-regex@5.0.1/node_modules/ansi-regex/index.js"(exports, module2) {
"use strict";
module2.exports = ({ onlyFirst = false } = {}) => {
const pattern = [
"[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)",
"(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"
].join("|");
return new RegExp(pattern, onlyFirst ? void 0 : "g");
};
}
});
var require_strip_ansi = (0, import_chunk_2ESYSVXG.__commonJS)({
"../../node_modules/.pnpm/strip-ansi@6.0.1/node_modules/strip-ansi/index.js"(exports, module2) {
"use strict";
var ansiRegex = require_ansi_regex();
module2.exports = (string) => typeof string === "string" ? string.replace(ansiRegex(), "") : string;
}
});
var require_jestSnapshotSerializer = (0, import_chunk_2ESYSVXG.__commonJS)({
"src/test-utils/jestSnapshotSerializer.js"(exports, module2) {
var path = (0, import_chunk_2ESYSVXG.__require)("path");
var replaceAll = require_replace_string();
var stripAnsi = require_strip_ansi();
var { binaryTargetRegex } = ((0, import_chunk_B23KD6U3.init_binaryTargetRegex)(), (0, import_chunk_2ESYSVXG.__toCommonJS)(import_chunk_B23KD6U3.binaryTargetRegex_exports));
var path = (0, import_chunk_2ESYSVXG.__require)("node:path");
var { stripVTControlCharacters } = (0, import_chunk_2ESYSVXG.__require)("node:util");
var { binaryTargetRegex } = ((0, import_chunk_IPLRRT6O.init_binaryTargetRegex)(), (0, import_chunk_2ESYSVXG.__toCommonJS)(import_chunk_IPLRRT6O.binaryTargetRegex_exports));
var pipe = (...fns) => (x) => fns.reduce((v, f) => f(v), x);
function normalizePrismaPaths(str) {
return str.replace(/prisma\\([\w-]+)\.prisma/g, "prisma/$1.prisma").replace(/prisma\\seed\.ts/g, "prisma/seed.ts").replace(/custom-folder\\seed\.js/g, "custom-folder/seed.js");
@@ -100,14 +40,27 @@ var require_jestSnapshotSerializer = (0, import_chunk_2ESYSVXG.__commonJS)({
).replace(/Starting a postgresql pool with \d+ connections./g, "Starting a postgresql pool with XX connections.");
}
function normalizeTmpDir(str) {
return str.replace(/\/tmp\/([a-z0-9]+)\//g, "/tmp/dir/");
const tempDirRegexes = [
// Linux
/\/tmp\/([a-z0-9]+)/g,
// macOS
/\/private\/var\/folders\/[^/]+\/[^/]+\/T\/[a-z0-9]+/g
];
if (process.env.TEMP) {
const escapedPath = process.env.TEMP.replaceAll("\\", "\\\\");
tempDirRegexes.push(new RegExp(`${escapedPath}\\\\[a-z0-9]+`, "g"));
}
for (const regex of tempDirRegexes) {
str = str.replace(regex, "/tmp/dir");
}
return str;
}
function trimErrorPaths(str) {
const parentDir = path.dirname(path.dirname(path.dirname(__dirname)));
return replaceAll(str, parentDir, "");
return str.replaceAll(parentDir, "");
}
function normalizeToUnixPaths(str) {
return replaceAll(str, path.sep, "/");
return str.replaceAll(path.sep, "/");
}
function normalizeGitHubLinks(str) {
return str.replace(/https:\/\/github.com\/prisma\/prisma(-client-js)?\/issues\/new\S+/, "TEST_GITHUB_LINK");
@@ -118,12 +71,6 @@ var require_jestSnapshotSerializer = (0, import_chunk_2ESYSVXG.__commonJS)({
function removePlatforms(str) {
return str.replace(binaryTargetRegex, "TEST_PLATFORM");
}
function normalizeNodeApiLibFilePath(str) {
return str.replace(
/((lib)?query_engine-TEST_PLATFORM\.)(.*)(\.node)/g,
"libquery_engine-TEST_PLATFORM.LIBRARY_TYPE.node"
);
}
function normalizeBinaryFilePath(str) {
return str.replace(/\.exe(\s+)?(\W.*)/g, "$1$2").replace(/\.exe$/g, "");
}
@@ -172,7 +119,7 @@ var require_jestSnapshotSerializer = (0, import_chunk_2ESYSVXG.__commonJS)({
serialize(value) {
const message = typeof value === "string" ? value : value instanceof Error ? value.message : "";
return pipe(
stripAnsi,
stripVTControlCharacters,
// integration-tests pkg
prepareSchemaForSnapshot,
// Generic
@@ -181,7 +128,6 @@ var require_jestSnapshotSerializer = (0, import_chunk_2ESYSVXG.__commonJS)({
// From Client package
normalizeGitHubLinks,
removePlatforms,
normalizeNodeApiLibFilePath,
normalizeBinaryFilePath,
normalizeTsClientStackTrace,
trimErrorPaths,

View File

@@ -0,0 +1,123 @@
import { type ExecaChildProcess } from 'execa';
import type { FSJetpack } from 'fs-jetpack/types';
import { type MockInstance } from 'vitest';
/**
* Base test context.
*/
export type BaseContext = {
tmpDir: string;
fs: FSJetpack;
mocked: {
cwd: string;
};
/**
* Set up the temporary directory based on the contents of some fixture.
*/
fixture: (name: string) => void;
/**
* Spawn the Prisma cli using the temporary directory as the CWD.
*
* @remarks
*
* For this to work the source must be built
*/
cli: (...input: string[]) => ExecaChildProcess<string>;
printDir(dir: string, extensions: string[]): void;
/**
* JavaScript-friendly implementation of the `tree` command. It skips the `node_modules` directory.
* @param itemPath The path to start the tree from, defaults to the root of the temporary directory
* @param indent How much to indent each level of the tree, defaults to ''
* @returns String representation of the directory tree
*/
tree: (itemPath?: string, indent?: string) => void;
};
/**
* Create test context to use in tests. Provides the following:
*
* - A temporary directory
* - an fs-jetpack instance bound to the temporary directory
* - Mocked process.cwd via Node process.chdir
* - Fixture loader for bootstrapping the temporary directory with content
*/
export declare const vitestContext: {
new: (ctx?: BaseContext) => {
add<NewContext>(contextContributor: ContextContributor<BaseContext, NewContext>): {
add<NewContext_1>(contextContributor: ContextContributor<BaseContext & NewContext, NewContext_1>): {
add<NewContext_2>(contextContributor: ContextContributor<BaseContext & NewContext & NewContext_1, NewContext_2>): {
add<NewContext_3>(contextContributor: ContextContributor<BaseContext & NewContext & NewContext_1 & NewContext_2, NewContext_3>): {
add<NewContext_4>(contextContributor: ContextContributor<BaseContext & NewContext & NewContext_1 & NewContext_2 & NewContext_3, NewContext_4>): {
add<NewContext_5>(contextContributor: ContextContributor<BaseContext & NewContext & NewContext_1 & NewContext_2 & NewContext_3 & NewContext_4, NewContext_5>): {
add<NewContext_6>(contextContributor: ContextContributor<BaseContext & NewContext & NewContext_1 & NewContext_2 & NewContext_3 & NewContext_4 & NewContext_5, NewContext_6>): {
add<NewContext_7>(contextContributor: ContextContributor<BaseContext & NewContext & NewContext_1 & NewContext_2 & NewContext_3 & NewContext_4 & NewContext_5 & NewContext_6, NewContext_7>): {
add<NewContext_8>(contextContributor: ContextContributor<BaseContext & NewContext & NewContext_1 & NewContext_2 & NewContext_3 & NewContext_4 & NewContext_5 & NewContext_6 & NewContext_7, NewContext_8>): {
add<NewContext_9>(contextContributor: ContextContributor<BaseContext & NewContext & NewContext_1 & NewContext_2 & NewContext_3 & NewContext_4 & NewContext_5 & NewContext_6 & NewContext_7 & NewContext_8, NewContext_9>): {
add<NewContext_10>(contextContributor: ContextContributor<BaseContext & NewContext & NewContext_1 & NewContext_2 & NewContext_3 & NewContext_4 & NewContext_5 & NewContext_6 & NewContext_7 & NewContext_8 & NewContext_9, NewContext_10>): any;
assemble(): BaseContext & NewContext & NewContext_1 & NewContext_2 & NewContext_3 & NewContext_4 & NewContext_5 & NewContext_6 & NewContext_7 & NewContext_8 & NewContext_9;
};
assemble(): BaseContext & NewContext & NewContext_1 & NewContext_2 & NewContext_3 & NewContext_4 & NewContext_5 & NewContext_6 & NewContext_7 & NewContext_8;
};
assemble(): BaseContext & NewContext & NewContext_1 & NewContext_2 & NewContext_3 & NewContext_4 & NewContext_5 & NewContext_6 & NewContext_7;
};
assemble(): BaseContext & NewContext & NewContext_1 & NewContext_2 & NewContext_3 & NewContext_4 & NewContext_5 & NewContext_6;
};
assemble(): BaseContext & NewContext & NewContext_1 & NewContext_2 & NewContext_3 & NewContext_4 & NewContext_5;
};
assemble(): BaseContext & NewContext & NewContext_1 & NewContext_2 & NewContext_3 & NewContext_4;
};
assemble(): BaseContext & NewContext & NewContext_1 & NewContext_2 & NewContext_3;
};
assemble(): BaseContext & NewContext & NewContext_1 & NewContext_2;
};
assemble(): BaseContext & NewContext & NewContext_1;
};
assemble(): BaseContext & NewContext;
};
assemble(): BaseContext;
};
};
/**
* A function that provides additional test context.
*/
type ContextContributor<Context, NewContext> = (ctx: Context) => Context & NewContext;
/**
* Test context contributor. Mocks console.error with a Vitest spy before each test.
*/
type ConsoleContext = {
mocked: {
'console.error': MockInstance<typeof console.error>;
'console.log': MockInstance<typeof console.log>;
'console.info': MockInstance<typeof console.info>;
'console.warn': MockInstance<typeof console.warn>;
};
};
export declare const vitestConsoleContext: <Ctx extends BaseContext>() => (c: Ctx) => Ctx & ConsoleContext;
/**
* Test context contributor. Mocks process.std(out|err).write with a Vitest spy before each test.
*/
type ProcessContext = {
mocked: {
'process.stderr.write': MockInstance<typeof process.stderr.write>;
'process.stdout.write': MockInstance<typeof process.stdout.write>;
};
normalizedCapturedStdout: () => string;
normalizedCapturedStderr: () => string;
clearCapturedStdout: () => void;
clearCapturedStderr: () => void;
};
type NormalizationRule = [RegExp | string, string];
export type ProcessContextSettings = {
normalizationRules: NormalizationRule[];
};
export declare const vitestStdoutContext: <Ctx extends BaseContext>({ normalizationRules }?: ProcessContextSettings) => (c: Ctx) => Ctx & ProcessContext;
/**
* Test context contributor. Mocks process.exit with a spy and records the exit code.
*/
type ProcessExitContext = {
mocked: {
'process.exit': MockInstance<typeof process.exit>;
};
recordedExitCode: () => number;
};
export declare const vitestProcessExitContext: <C extends BaseContext>() => (c: C) => C & ProcessExitContext;
export declare const processExitContext: <C extends BaseContext>() => (c: C) => C & ProcessExitContext;
export {};

File diff suppressed because it is too large Load Diff