Changes
This commit is contained in:
-510
@@ -1,510 +0,0 @@
|
|||||||
/*!
|
|
||||||
* /**
|
|
||||||
* * Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
||||||
* *
|
|
||||||
* * This source code is licensed under the MIT license found in the
|
|
||||||
* * LICENSE file in the root directory of this source tree.
|
|
||||||
* * /
|
|
||||||
*/
|
|
||||||
/******/ (() => { // webpackBootstrap
|
|
||||||
/******/ "use strict";
|
|
||||||
/******/ var __webpack_modules__ = ({
|
|
||||||
|
|
||||||
/***/ "./src/runTest.ts":
|
|
||||||
/***/ ((__unused_webpack_module, exports) => {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", ({
|
|
||||||
value: true
|
|
||||||
}));
|
|
||||||
exports["default"] = runTest;
|
|
||||||
function _nodeVm() {
|
|
||||||
const data = require("node:vm");
|
|
||||||
_nodeVm = function () {
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
function _chalk() {
|
|
||||||
const data = _interopRequireDefault(require("chalk"));
|
|
||||||
_chalk = function () {
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
function fs() {
|
|
||||||
const data = _interopRequireWildcard(require("graceful-fs"));
|
|
||||||
fs = function () {
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
function sourcemapSupport() {
|
|
||||||
const data = _interopRequireWildcard(require("source-map-support"));
|
|
||||||
sourcemapSupport = function () {
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
function _console() {
|
|
||||||
const data = require("@jest/console");
|
|
||||||
_console = function () {
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
function _transform() {
|
|
||||||
const data = require("@jest/transform");
|
|
||||||
_transform = function () {
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
function docblock() {
|
|
||||||
const data = _interopRequireWildcard(require("jest-docblock"));
|
|
||||||
docblock = function () {
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
function _jestLeakDetector() {
|
|
||||||
const data = _interopRequireDefault(require("jest-leak-detector"));
|
|
||||||
_jestLeakDetector = function () {
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
function _jestMessageUtil() {
|
|
||||||
const data = require("jest-message-util");
|
|
||||||
_jestMessageUtil = function () {
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
function _jestResolve() {
|
|
||||||
const data = require("jest-resolve");
|
|
||||||
_jestResolve = function () {
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
function _jestUtil() {
|
|
||||||
const data = require("jest-util");
|
|
||||||
_jestUtil = function () {
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
/**
|
|
||||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
||||||
*
|
|
||||||
* This source code is licensed under the MIT license found in the
|
|
||||||
* LICENSE file in the root directory of this source tree.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
|
|
||||||
|
|
||||||
function freezeConsole(testConsole, config) {
|
|
||||||
// @ts-expect-error: `_log` is `private` - we should figure out some proper API here
|
|
||||||
testConsole._log = function fakeConsolePush(_type, message) {
|
|
||||||
const error = new (_jestUtil().ErrorWithStack)(`${_chalk().default.red(`${_chalk().default.bold('Cannot log after tests are done.')} Did you forget to wait for something async in your test?`)}\nAttempted to log "${message}".`, fakeConsolePush);
|
|
||||||
const formattedError = (0, _jestMessageUtil().formatExecError)(error, config, {
|
|
||||||
noStackTrace: false
|
|
||||||
}, undefined, true);
|
|
||||||
process.stderr.write(`\n${formattedError}\n`);
|
|
||||||
process.exitCode = 1;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Keeping the core of "runTest" as a separate function (as "runTestInternal")
|
|
||||||
// is key to be able to detect memory leaks. Since all variables are local to
|
|
||||||
// the function, when "runTestInternal" finishes its execution, they can all be
|
|
||||||
// freed, UNLESS something else is leaking them (and that's why we can detect
|
|
||||||
// the leak!).
|
|
||||||
//
|
|
||||||
// If we had all the code in a single function, we should manually nullify all
|
|
||||||
// references to verify if there is a leak, which is not maintainable and error
|
|
||||||
// prone. That's why "runTestInternal" CANNOT be inlined inside "runTest".
|
|
||||||
async function runTestInternal(path, globalConfig, projectConfig, resolver, context, sendMessageToJest) {
|
|
||||||
const testSource = fs().readFileSync(path, 'utf8');
|
|
||||||
const docblockPragmas = docblock().parse(docblock().extract(testSource));
|
|
||||||
const customEnvironment = docblockPragmas['jest-environment'];
|
|
||||||
const loadTestEnvironmentStart = Date.now();
|
|
||||||
let testEnvironment = projectConfig.testEnvironment;
|
|
||||||
if (customEnvironment) {
|
|
||||||
if (Array.isArray(customEnvironment)) {
|
|
||||||
throw new TypeError(`You can only define a single test environment through docblocks, got "${customEnvironment.join(', ')}"`);
|
|
||||||
}
|
|
||||||
testEnvironment = (0, _jestResolve().resolveTestEnvironment)({
|
|
||||||
...projectConfig,
|
|
||||||
// we wanna avoid webpack trying to be clever
|
|
||||||
requireResolveFunction: module => require.resolve(module),
|
|
||||||
testEnvironment: customEnvironment
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const cacheFS = new Map([[path, testSource]]);
|
|
||||||
const transformer = await (0, _transform().createScriptTransformer)(projectConfig, cacheFS);
|
|
||||||
const TestEnvironment = await transformer.requireAndTranspileModule(testEnvironment);
|
|
||||||
const testFramework = await transformer.requireAndTranspileModule(process.env.JEST_JASMINE === '1' ? require.resolve('jest-jasmine2') : projectConfig.testRunner);
|
|
||||||
const Runtime = (0, _jestUtil().interopRequireDefault)(projectConfig.runtime ? require(projectConfig.runtime) : require('jest-runtime')).default;
|
|
||||||
const consoleOut = globalConfig.useStderr ? process.stderr : process.stdout;
|
|
||||||
const consoleFormatter = (type, message) => (0, _console().getConsoleOutput)(
|
|
||||||
// 4 = the console call is buried 4 stack frames deep
|
|
||||||
_console().BufferedConsole.write([], type, message, 4), projectConfig, globalConfig);
|
|
||||||
let testConsole;
|
|
||||||
if (globalConfig.silent) {
|
|
||||||
testConsole = new (_console().NullConsole)(consoleOut, consoleOut, consoleFormatter);
|
|
||||||
} else if (globalConfig.verbose) {
|
|
||||||
testConsole = new (_console().CustomConsole)(consoleOut, consoleOut, consoleFormatter);
|
|
||||||
} else {
|
|
||||||
testConsole = new (_console().BufferedConsole)();
|
|
||||||
}
|
|
||||||
let extraTestEnvironmentOptions;
|
|
||||||
const docblockEnvironmentOptions = docblockPragmas['jest-environment-options'];
|
|
||||||
if (typeof docblockEnvironmentOptions === 'string') {
|
|
||||||
extraTestEnvironmentOptions = JSON.parse(docblockEnvironmentOptions);
|
|
||||||
}
|
|
||||||
const environment = new TestEnvironment({
|
|
||||||
globalConfig,
|
|
||||||
projectConfig: extraTestEnvironmentOptions ? {
|
|
||||||
...projectConfig,
|
|
||||||
testEnvironmentOptions: {
|
|
||||||
...projectConfig.testEnvironmentOptions,
|
|
||||||
...extraTestEnvironmentOptions
|
|
||||||
}
|
|
||||||
} : projectConfig
|
|
||||||
}, {
|
|
||||||
console: testConsole,
|
|
||||||
docblockPragmas,
|
|
||||||
testPath: path
|
|
||||||
});
|
|
||||||
const loadTestEnvironmentEnd = Date.now();
|
|
||||||
if (typeof environment.getVmContext !== 'function') {
|
|
||||||
console.error(`Test environment found at "${testEnvironment}" does not export a "getVmContext" method, which is mandatory from Jest 27. This method is a replacement for "runScript".`);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
const leakDetector = projectConfig.detectLeaks ? new (_jestLeakDetector().default)(environment) : null;
|
|
||||||
(0, _jestUtil().setGlobal)(environment.global, 'console', testConsole, 'retain');
|
|
||||||
const runtime = new Runtime(projectConfig, environment, resolver, transformer, cacheFS, {
|
|
||||||
changedFiles: context.changedFiles,
|
|
||||||
collectCoverage: globalConfig.collectCoverage,
|
|
||||||
collectCoverageFrom: globalConfig.collectCoverageFrom,
|
|
||||||
coverageProvider: globalConfig.coverageProvider,
|
|
||||||
sourcesRelatedToTestsInChangedFiles: context.sourcesRelatedToTestsInChangedFiles
|
|
||||||
}, path, globalConfig);
|
|
||||||
let isTornDown = false;
|
|
||||||
const tearDownEnv = async () => {
|
|
||||||
if (!isTornDown) {
|
|
||||||
runtime.teardown();
|
|
||||||
|
|
||||||
// source-map-support keeps memory leftovers in `Error.prepareStackTrace`
|
|
||||||
(0, _nodeVm().runInContext)("Error.prepareStackTrace = () => '';", environment.getVmContext());
|
|
||||||
sourcemapSupport().resetRetrieveHandlers();
|
|
||||||
try {
|
|
||||||
await environment.teardown();
|
|
||||||
} finally {
|
|
||||||
isTornDown = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const start = Date.now();
|
|
||||||
const setupFilesStart = Date.now();
|
|
||||||
for (const path of projectConfig.setupFiles) {
|
|
||||||
const esm = runtime.unstable_shouldLoadAsEsm(path);
|
|
||||||
if (esm) {
|
|
||||||
await runtime.unstable_importModule(path);
|
|
||||||
} else {
|
|
||||||
const setupFile = runtime.requireModule(path);
|
|
||||||
if (typeof setupFile === 'function') {
|
|
||||||
await setupFile();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const setupFilesEnd = Date.now();
|
|
||||||
const sourcemapOptions = {
|
|
||||||
environment: 'node',
|
|
||||||
handleUncaughtExceptions: false,
|
|
||||||
retrieveSourceMap: source => {
|
|
||||||
const sourceMapSource = runtime.getSourceMaps()?.get(source);
|
|
||||||
if (sourceMapSource) {
|
|
||||||
try {
|
|
||||||
return {
|
|
||||||
map: JSON.parse(fs().readFileSync(sourceMapSource, 'utf8')),
|
|
||||||
url: source
|
|
||||||
};
|
|
||||||
} catch {}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// For tests
|
|
||||||
runtime.requireInternalModule(require.resolve('source-map-support')).install(sourcemapOptions);
|
|
||||||
|
|
||||||
// For runtime errors
|
|
||||||
sourcemapSupport().install(sourcemapOptions);
|
|
||||||
if (environment.global && environment.global.process && environment.global.process.exit) {
|
|
||||||
const realExit = environment.global.process.exit;
|
|
||||||
environment.global.process.exit = function exit(...args) {
|
|
||||||
const error = new (_jestUtil().ErrorWithStack)(`process.exit called with "${args.join(', ')}"`, exit);
|
|
||||||
const formattedError = (0, _jestMessageUtil().formatExecError)(error, projectConfig, {
|
|
||||||
noStackTrace: false
|
|
||||||
}, undefined, true);
|
|
||||||
process.stderr.write(formattedError);
|
|
||||||
return realExit(...args);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we don't have `getVmContext` on the env skip coverage
|
|
||||||
const collectV8Coverage = globalConfig.collectCoverage && globalConfig.coverageProvider === 'v8' && typeof environment.getVmContext === 'function';
|
|
||||||
|
|
||||||
// Node's error-message stack size is limited at 10, but it's pretty useful
|
|
||||||
// to see more than that when a test fails.
|
|
||||||
Error.stackTraceLimit = 100;
|
|
||||||
try {
|
|
||||||
await environment.setup();
|
|
||||||
let result;
|
|
||||||
try {
|
|
||||||
if (collectV8Coverage) {
|
|
||||||
await runtime.collectV8Coverage();
|
|
||||||
}
|
|
||||||
result = await testFramework(globalConfig, projectConfig, environment, runtime, path, sendMessageToJest);
|
|
||||||
} catch (error) {
|
|
||||||
// Access all stacks before uninstalling sourcemaps
|
|
||||||
let e = error;
|
|
||||||
while (typeof e === 'object' && e !== null && 'stack' in e) {
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
||||||
e.stack;
|
|
||||||
e = e?.cause;
|
|
||||||
}
|
|
||||||
throw error;
|
|
||||||
} finally {
|
|
||||||
if (collectV8Coverage) {
|
|
||||||
await runtime.stopCollectingV8Coverage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
freezeConsole(testConsole, projectConfig);
|
|
||||||
const testCount = result.numPassingTests + result.numFailingTests + result.numPendingTests + result.numTodoTests;
|
|
||||||
const end = Date.now();
|
|
||||||
const testRuntime = end - start;
|
|
||||||
result.perfStats = {
|
|
||||||
...result.perfStats,
|
|
||||||
end,
|
|
||||||
loadTestEnvironmentEnd,
|
|
||||||
loadTestEnvironmentStart,
|
|
||||||
runtime: testRuntime,
|
|
||||||
setupFilesEnd,
|
|
||||||
setupFilesStart,
|
|
||||||
slow: testRuntime / 1000 > projectConfig.slowTestThreshold,
|
|
||||||
start
|
|
||||||
};
|
|
||||||
result.testFilePath = path;
|
|
||||||
result.console = testConsole.getBuffer();
|
|
||||||
result.skipped = testCount === result.numPendingTests;
|
|
||||||
result.displayName = projectConfig.displayName;
|
|
||||||
const coverage = runtime.getAllCoverageInfoCopy();
|
|
||||||
if (coverage) {
|
|
||||||
const coverageKeys = Object.keys(coverage);
|
|
||||||
if (coverageKeys.length > 0) {
|
|
||||||
result.coverage = coverage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (collectV8Coverage) {
|
|
||||||
const v8Coverage = runtime.getAllV8CoverageInfoCopy();
|
|
||||||
if (v8Coverage && v8Coverage.length > 0) {
|
|
||||||
result.v8Coverage = v8Coverage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (globalConfig.logHeapUsage) {
|
|
||||||
globalThis.gc?.();
|
|
||||||
result.memoryUsage = process.memoryUsage().heapUsed;
|
|
||||||
}
|
|
||||||
await tearDownEnv();
|
|
||||||
|
|
||||||
// Delay the resolution to allow log messages to be output.
|
|
||||||
return await new Promise(resolve => {
|
|
||||||
setImmediate(() => resolve({
|
|
||||||
leakDetector,
|
|
||||||
result
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
} finally {
|
|
||||||
await tearDownEnv();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
async function runTest(path, globalConfig, config, resolver, context, sendMessageToJest) {
|
|
||||||
const {
|
|
||||||
leakDetector,
|
|
||||||
result
|
|
||||||
} = await runTestInternal(path, globalConfig, config, resolver, context, sendMessageToJest);
|
|
||||||
if (leakDetector) {
|
|
||||||
// We wanna allow a tiny but time to pass to allow last-minute cleanup
|
|
||||||
await new Promise(resolve => setTimeout(resolve, 100));
|
|
||||||
|
|
||||||
// Resolve leak detector, outside the "runTestInternal" closure.
|
|
||||||
result.leaks = await leakDetector.isLeaking();
|
|
||||||
} else {
|
|
||||||
result.leaks = false;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***/ })
|
|
||||||
|
|
||||||
/******/ });
|
|
||||||
/************************************************************************/
|
|
||||||
/******/ // The module cache
|
|
||||||
/******/ var __webpack_module_cache__ = {};
|
|
||||||
/******/
|
|
||||||
/******/ // The require function
|
|
||||||
/******/ function __webpack_require__(moduleId) {
|
|
||||||
/******/ // Check if module is in cache
|
|
||||||
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
||||||
/******/ if (cachedModule !== undefined) {
|
|
||||||
/******/ return cachedModule.exports;
|
|
||||||
/******/ }
|
|
||||||
/******/ // Create a new module (and put it into the cache)
|
|
||||||
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
||||||
/******/ // no module.id needed
|
|
||||||
/******/ // no module.loaded needed
|
|
||||||
/******/ exports: {}
|
|
||||||
/******/ };
|
|
||||||
/******/
|
|
||||||
/******/ // Execute the module function
|
|
||||||
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
||||||
/******/
|
|
||||||
/******/ // Return the exports of the module
|
|
||||||
/******/ return module.exports;
|
|
||||||
/******/ }
|
|
||||||
/******/
|
|
||||||
/************************************************************************/
|
|
||||||
var __webpack_exports__ = {};
|
|
||||||
// This entry needs to be wrapped in an IIFE because it uses a non-standard name for the exports (exports).
|
|
||||||
(() => {
|
|
||||||
var exports = __webpack_exports__;
|
|
||||||
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", ({
|
|
||||||
value: true
|
|
||||||
}));
|
|
||||||
exports.setup = setup;
|
|
||||||
exports.worker = worker;
|
|
||||||
function _exitX() {
|
|
||||||
const data = _interopRequireDefault(require("exit-x"));
|
|
||||||
_exitX = function () {
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
function _jestHasteMap() {
|
|
||||||
const data = _interopRequireDefault(require("jest-haste-map"));
|
|
||||||
_jestHasteMap = function () {
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
function _jestMessageUtil() {
|
|
||||||
const data = require("jest-message-util");
|
|
||||||
_jestMessageUtil = function () {
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
function _jestRuntime() {
|
|
||||||
const data = _interopRequireDefault(require("jest-runtime"));
|
|
||||||
_jestRuntime = function () {
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
function _jestWorker() {
|
|
||||||
const data = require("jest-worker");
|
|
||||||
_jestWorker = function () {
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
var _runTest = _interopRequireDefault(__webpack_require__("./src/runTest.ts"));
|
|
||||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
||||||
/**
|
|
||||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
||||||
*
|
|
||||||
* This source code is licensed under the MIT license found in the
|
|
||||||
* LICENSE file in the root directory of this source tree.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Make sure uncaught errors are logged before we exit.
|
|
||||||
process.on('uncaughtException', err => {
|
|
||||||
if (err.stack) {
|
|
||||||
console.error(err.stack);
|
|
||||||
} else {
|
|
||||||
console.error(err);
|
|
||||||
}
|
|
||||||
(0, _exitX().default)(1);
|
|
||||||
});
|
|
||||||
const formatError = error => {
|
|
||||||
if (typeof error === 'string') {
|
|
||||||
const {
|
|
||||||
message,
|
|
||||||
stack
|
|
||||||
} = (0, _jestMessageUtil().separateMessageFromStack)(error);
|
|
||||||
return {
|
|
||||||
message,
|
|
||||||
stack,
|
|
||||||
type: 'Error'
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
code: error.code || undefined,
|
|
||||||
message: error.message,
|
|
||||||
stack: error.stack,
|
|
||||||
type: 'Error'
|
|
||||||
};
|
|
||||||
};
|
|
||||||
const resolvers = new Map();
|
|
||||||
const getResolver = config => {
|
|
||||||
const resolver = resolvers.get(config.id);
|
|
||||||
if (!resolver) {
|
|
||||||
throw new Error(`Cannot find resolver for: ${config.id}`);
|
|
||||||
}
|
|
||||||
return resolver;
|
|
||||||
};
|
|
||||||
function setup(setupData) {
|
|
||||||
// Module maps that will be needed for the test runs are passed.
|
|
||||||
for (const {
|
|
||||||
config,
|
|
||||||
serializableModuleMap
|
|
||||||
} of setupData.serializableResolvers) {
|
|
||||||
const moduleMap = _jestHasteMap().default.getStatic(config).getModuleMapFromJSON(serializableModuleMap);
|
|
||||||
resolvers.set(config.id, _jestRuntime().default.createResolver(config, moduleMap));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const sendMessageToJest = (eventName, args) => {
|
|
||||||
(0, _jestWorker().messageParent)([eventName, args]);
|
|
||||||
};
|
|
||||||
async function worker({
|
|
||||||
config,
|
|
||||||
globalConfig,
|
|
||||||
path,
|
|
||||||
context
|
|
||||||
}) {
|
|
||||||
try {
|
|
||||||
return await (0, _runTest.default)(path, globalConfig, config, getResolver(config), {
|
|
||||||
...context,
|
|
||||||
changedFiles: context.changedFiles && new Set(context.changedFiles),
|
|
||||||
sourcesRelatedToTestsInChangedFiles: context.sourcesRelatedToTestsInChangedFiles && new Set(context.sourcesRelatedToTestsInChangedFiles)
|
|
||||||
}, sendMessageToJest);
|
|
||||||
} catch (error) {
|
|
||||||
throw formatError(error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
|
|
||||||
module.exports = __webpack_exports__;
|
|
||||||
/******/ })()
|
|
||||||
;
|
|
||||||
-13
@@ -1,13 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
/**
|
|
||||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
||||||
*
|
|
||||||
* This source code is licensed under the MIT license found in the
|
|
||||||
* LICENSE file in the root directory of this source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
const importLocal = require('import-local');
|
|
||||||
|
|
||||||
if (!importLocal(__filename)) {
|
|
||||||
require('jest-cli/bin/jest');
|
|
||||||
}
|
|
||||||
@@ -28,12 +28,12 @@ JWT_REFRESH_EXPIRATION=7d
|
|||||||
|
|
||||||
# Email Configuration (SMTP)
|
# Email Configuration (SMTP)
|
||||||
# CHANGE THESE: Configure your email provider
|
# CHANGE THESE: Configure your email provider
|
||||||
EMAIL_HOST=smtp.yourmailprovider.com
|
EMAIL_HOST=mail.serpentrace.hu
|
||||||
EMAIL_PORT=587
|
EMAIL_PORT=465
|
||||||
EMAIL_SECURE=false
|
EMAIL_SECURE=true
|
||||||
EMAIL_USER=your_email@yourdomain.com
|
EMAIL_USER=noreply@serpentrace.hu
|
||||||
EMAIL_PASS=your_email_password
|
EMAIL_PASS=ZUx720ece&Cin&F{
|
||||||
EMAIL_FROM="SerpentRace <noreply@yourdomain.com>"
|
EMAIL_FROM="SerpentRace <noreply@serpentrace.hu>"
|
||||||
|
|
||||||
# MinIO Object Storage
|
# MinIO Object Storage
|
||||||
MINIO_ENDPOINT=minio
|
MINIO_ENDPOINT=minio
|
||||||
@@ -45,7 +45,7 @@ MINIO_SECRET_KEY=CHANGE_THIS_MINIO_SECRET_KEY_123!
|
|||||||
MINIO_BUCKET_NAME=serpentrace-logs
|
MINIO_BUCKET_NAME=serpentrace-logs
|
||||||
|
|
||||||
# Application Settings
|
# Application Settings
|
||||||
APP_BASE_URL=http://your-domain.com
|
APP_BASE_URL=https://szesnake.ddc.sze.hu
|
||||||
PORT=3000
|
PORT=3000
|
||||||
|
|
||||||
# Chat System Limits
|
# Chat System Limits
|
||||||
|
|||||||
@@ -200,4 +200,12 @@ docker-compose -f docker-compose.deploy.yml up -d
|
|||||||
- PostgreSQL: 15-alpine
|
- PostgreSQL: 15-alpine
|
||||||
- Redis: 7-alpine
|
- Redis: 7-alpine
|
||||||
- MinIO: Latest
|
- MinIO: Latest
|
||||||
- Nginx: Alpine
|
- Nginx: Alpine
|
||||||
|
|
||||||
|
|
||||||
|
## DataBase information
|
||||||
|
- System: PostgreSQL
|
||||||
|
- Server: postgres
|
||||||
|
- Username: postgres
|
||||||
|
- Password: postgres
|
||||||
|
- Database: serpentrace
|
||||||
@@ -106,6 +106,32 @@ services:
|
|||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
|
# Adminer Database Viewer
|
||||||
|
pgadmin:
|
||||||
|
image: adminer:latest
|
||||||
|
container_name: serpentrace-adminer
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8083:8080" # Access via http://<server-ip>:8083
|
||||||
|
depends_on:
|
||||||
|
- postgres
|
||||||
|
networks:
|
||||||
|
- serpentrace-network
|
||||||
|
|
||||||
|
# Redis Commander
|
||||||
|
redis-commander:
|
||||||
|
image: rediscommander/redis-commander:latest
|
||||||
|
container_name: serpentrace-redis-commander
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8082:8081" # Access via http://<server-ip>:8082
|
||||||
|
environment:
|
||||||
|
REDIS_HOSTS: local:serpentrace-redis:6379
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
|
networks:
|
||||||
|
- serpentrace-network
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
postgres_data:
|
postgres_data:
|
||||||
driver: local
|
driver: local
|
||||||
|
|||||||
+37
-4
@@ -45,10 +45,43 @@ server {
|
|||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Static assets caching
|
# Adminer Database Viewer proxy
|
||||||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
|
location /pgadmin/ {
|
||||||
expires 1y;
|
proxy_pass http://pgadmin:8080/;
|
||||||
add_header Cache-Control "public, immutable";
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Redis Commander proxy
|
||||||
|
location /redis/ {
|
||||||
|
proxy_pass http://redis-commander:8081/;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection 'upgrade';
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_redirect http://redis-commander:8081/ /redis/;
|
||||||
|
proxy_cache_bypass $http_upgrade;
|
||||||
|
}
|
||||||
|
|
||||||
|
# MinIO Console proxy
|
||||||
|
location /minio/ {
|
||||||
|
proxy_pass http://minio:9001/;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection 'upgrade';
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_redirect http://minio:9001/ /minio/;
|
||||||
|
sub_filter '<base href="/"' '<base href="/minio/"';
|
||||||
|
sub_filter_types text/html;
|
||||||
|
proxy_cache_bypass $http_upgrade;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Health check endpoint
|
# Health check endpoint
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
"Port": 5432,
|
"Port": 5432,
|
||||||
"MaintenanceDB": "serpentrace",
|
"MaintenanceDB": "serpentrace",
|
||||||
"Username": "postgres",
|
"Username": "postgres",
|
||||||
|
"Password": "postgres",
|
||||||
"SSLMode": "prefer",
|
"SSLMode": "prefer",
|
||||||
"Comment": "SerpentRace Production Database"
|
"Comment": "SerpentRace Production Database"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user