testplane 8.20.6 → 8.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/build/package.json +4 -1
  2. package/build/src/browser/commands/assert-view/assert-view-results.js +2 -0
  3. package/build/src/browser/commands/assert-view/assert-view-results.js.map +1 -1
  4. package/build/src/browser/commands/assert-view/capture-processors/assert-refs.d.ts +1 -0
  5. package/build/src/browser/commands/assert-view/capture-processors/assert-refs.js +4 -0
  6. package/build/src/browser/commands/assert-view/capture-processors/assert-refs.js.map +1 -1
  7. package/build/src/browser/commands/assert-view/capture-processors/update-refs.d.ts +3 -0
  8. package/build/src/browser/commands/assert-view/capture-processors/update-refs.js +7 -4
  9. package/build/src/browser/commands/assert-view/capture-processors/update-refs.js.map +1 -1
  10. package/build/src/browser/commands/assert-view/errors/invalid-ref-image-error.d.ts +8 -0
  11. package/build/src/browser/commands/assert-view/errors/invalid-ref-image-error.js +15 -0
  12. package/build/src/browser/commands/assert-view/errors/invalid-ref-image-error.js.map +1 -0
  13. package/build/src/browser/commands/assert-view/index.js +3 -3
  14. package/build/src/browser/commands/assert-view/index.js.map +1 -1
  15. package/build/src/index.d.ts +1 -0
  16. package/build/src/index.js +15 -0
  17. package/build/src/index.js.map +1 -1
  18. package/build/src/mock/index.d.ts +4 -0
  19. package/build/src/mock/index.js +25 -0
  20. package/build/src/mock/index.js.map +1 -0
  21. package/build/src/mock/vitest-spy.d.ts +321 -0
  22. package/build/src/mock/vitest-spy.js +173 -0
  23. package/build/src/mock/vitest-spy.js.map +1 -0
  24. package/build/src/runner/browser-env/vite/browser-modules/mock.d.ts +5 -0
  25. package/build/src/runner/browser-env/vite/browser-modules/mock.js +38 -0
  26. package/build/src/runner/browser-env/vite/browser-modules/mock.js.map +1 -0
  27. package/build/src/runner/browser-env/vite/browser-modules/stubs/@wdio-logger.js.map +1 -0
  28. package/build/src/runner/browser-env/vite/browser-modules/{mock → stubs}/default-module.js.map +1 -1
  29. package/build/src/runner/browser-env/vite/browser-modules/{mock → stubs}/import-meta-resolve.js.map +1 -1
  30. package/build/src/runner/browser-env/vite/browser-modules/tsconfig.tsbuildinfo +1 -1
  31. package/build/src/runner/browser-env/vite/browser-modules/types.d.ts +2 -0
  32. package/build/src/runner/browser-env/vite/constants.d.ts +3 -0
  33. package/build/src/runner/browser-env/vite/constants.js +4 -1
  34. package/build/src/runner/browser-env/vite/constants.js.map +1 -1
  35. package/build/src/runner/browser-env/vite/manual-mock.d.ts +23 -0
  36. package/build/src/runner/browser-env/vite/manual-mock.js +65 -0
  37. package/build/src/runner/browser-env/vite/manual-mock.js.map +1 -0
  38. package/build/src/runner/browser-env/vite/plugins/generate-index-html.js +26 -25
  39. package/build/src/runner/browser-env/vite/plugins/generate-index-html.js.map +1 -1
  40. package/build/src/runner/browser-env/vite/plugins/mock.d.ts +3 -0
  41. package/build/src/runner/browser-env/vite/plugins/mock.js +301 -0
  42. package/build/src/runner/browser-env/vite/plugins/mock.js.map +1 -0
  43. package/build/src/runner/browser-env/vite/server.js +8 -1
  44. package/build/src/runner/browser-env/vite/server.js.map +1 -1
  45. package/build/src/runner/browser-env/vite/types.d.ts +13 -0
  46. package/build/src/runner/browser-env/vite/types.js.map +1 -1
  47. package/build/src/runner/browser-env/vite/utils.d.ts +10 -0
  48. package/build/src/runner/browser-env/vite/utils.js +31 -1
  49. package/build/src/runner/browser-env/vite/utils.js.map +1 -1
  50. package/package.json +4 -1
  51. package/build/src/browser/commands/assert-view/errors/invalid-png-error.d.ts +0 -5
  52. package/build/src/browser/commands/assert-view/errors/invalid-png-error.js +0 -9
  53. package/build/src/browser/commands/assert-view/errors/invalid-png-error.js.map +0 -1
  54. package/build/src/runner/browser-env/vite/browser-modules/mock/@wdio-logger.js.map +0 -1
  55. /package/build/src/runner/browser-env/vite/browser-modules/{mock → stubs}/@wdio-logger.d.ts +0 -0
  56. /package/build/src/runner/browser-env/vite/browser-modules/{mock → stubs}/@wdio-logger.js +0 -0
  57. /package/build/src/runner/browser-env/vite/browser-modules/{mock → stubs}/default-module.d.ts +0 -0
  58. /package/build/src/runner/browser-env/vite/browser-modules/{mock → stubs}/default-module.js +0 -0
  59. /package/build/src/runner/browser-env/vite/browser-modules/{mock → stubs}/import-meta-resolve.d.ts +0 -0
  60. /package/build/src/runner/browser-env/vite/browser-modules/{mock → stubs}/import-meta-resolve.js +0 -0
@@ -89,6 +89,7 @@ declare global {
89
89
  errors: BrowserError[];
90
90
  socket: BrowserViteSocket;
91
91
  browser: WebdriverIO.Browser;
92
+ mockCache: Map<string, unknown>;
92
93
  } & WorkerInitializePayload;
93
94
  testplane: typeof Proxy;
94
95
  hermione: typeof Proxy;
@@ -96,3 +97,4 @@ declare global {
96
97
  expect: Expect;
97
98
  }
98
99
  }
100
+ export type MockFactory = (originalImport?: unknown) => unknown;
@@ -12,3 +12,6 @@ export declare const BROWSER_EVENT_PREFIX = "browser";
12
12
  export declare const SOCKET_MAX_TIMEOUT = 2147483647;
13
13
  export declare const SOCKET_TIMED_OUT_ERROR = "operation has timed out";
14
14
  export declare const WORKER_ENV_BY_RUN_UUID: Map<string, WorkerInitializePayload>;
15
+ export declare const MOCK_MODULE_NAME = "testplane";
16
+ export declare const DEFAULT_AUTOMOCK = false;
17
+ export declare const DEFAULT_AUTOMOCK_DIRECTORY = "__mocks__";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WORKER_ENV_BY_RUN_UUID = exports.SOCKET_TIMED_OUT_ERROR = exports.SOCKET_MAX_TIMEOUT = exports.BROWSER_EVENT_PREFIX = exports.VITE_RUN_UUID_ROUTE = exports.VITE_DEFAULT_CONFIG_ENV = exports.MODULE_NAMES = exports.MODULE_PREFIX = void 0;
3
+ exports.DEFAULT_AUTOMOCK_DIRECTORY = exports.DEFAULT_AUTOMOCK = exports.MOCK_MODULE_NAME = exports.WORKER_ENV_BY_RUN_UUID = exports.SOCKET_TIMED_OUT_ERROR = exports.SOCKET_MAX_TIMEOUT = exports.BROWSER_EVENT_PREFIX = exports.VITE_RUN_UUID_ROUTE = exports.VITE_DEFAULT_CONFIG_ENV = exports.MODULE_NAMES = exports.MODULE_PREFIX = void 0;
4
4
  exports.MODULE_PREFIX = "@testplane";
5
5
  exports.MODULE_NAMES = {
6
6
  mocha: `${exports.MODULE_PREFIX}/mocha`,
@@ -16,4 +16,7 @@ exports.BROWSER_EVENT_PREFIX = "browser";
16
16
  exports.SOCKET_MAX_TIMEOUT = 2147483647;
17
17
  exports.SOCKET_TIMED_OUT_ERROR = "operation has timed out";
18
18
  exports.WORKER_ENV_BY_RUN_UUID = new Map();
19
+ exports.MOCK_MODULE_NAME = "testplane";
20
+ exports.DEFAULT_AUTOMOCK = false;
21
+ exports.DEFAULT_AUTOMOCK_DIRECTORY = "__mocks__";
19
22
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../src/runner/browser-env/vite/constants.ts"],"names":[],"mappings":";;;AAGa,QAAA,aAAa,GAAG,YAAY,CAAC;AAC7B,QAAA,YAAY,GAAG;IACxB,KAAK,EAAE,GAAG,qBAAa,QAAQ;IAC/B,aAAa,EAAE,GAAG,qBAAa,iBAAiB;IAChD,OAAO,EAAE,GAAG,qBAAa,UAAU;CACtC,CAAC;AAEW,QAAA,uBAAuB,GAAc;IAC9C,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa;CAC7E,CAAC;AACW,QAAA,mBAAmB,GAAG,WAAW,CAAC;AAElC,QAAA,oBAAoB,GAAG,SAAS,CAAC;AAEjC,QAAA,kBAAkB,GAAG,UAAU,CAAC;AAChC,QAAA,sBAAsB,GAAG,yBAAyB,CAAC;AAEnD,QAAA,sBAAsB,GAAG,IAAI,GAAG,EAAmC,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../src/runner/browser-env/vite/constants.ts"],"names":[],"mappings":";;;AAGa,QAAA,aAAa,GAAG,YAAY,CAAC;AAC7B,QAAA,YAAY,GAAG;IACxB,KAAK,EAAE,GAAG,qBAAa,QAAQ;IAC/B,aAAa,EAAE,GAAG,qBAAa,iBAAiB;IAChD,OAAO,EAAE,GAAG,qBAAa,UAAU;CACtC,CAAC;AAEW,QAAA,uBAAuB,GAAc;IAC9C,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa;CAC7E,CAAC;AACW,QAAA,mBAAmB,GAAG,WAAW,CAAC;AAElC,QAAA,oBAAoB,GAAG,SAAS,CAAC;AAEjC,QAAA,kBAAkB,GAAG,UAAU,CAAC;AAChC,QAAA,sBAAsB,GAAG,yBAAyB,CAAC;AAEnD,QAAA,sBAAsB,GAAG,IAAI,GAAG,EAAmC,CAAC;AAEpE,QAAA,gBAAgB,GAAG,WAAW,CAAC;AAE/B,QAAA,gBAAgB,GAAG,KAAK,CAAC;AACzB,QAAA,0BAA0B,GAAG,WAAW,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { InlineConfig } from "vite";
2
+ import type { BrowserTestRunEnvOptions } from "./types";
3
+ type MockOnFs = {
4
+ fullPath: string;
5
+ moduleName: string;
6
+ };
7
+ type ManualMockOptions = {
8
+ automock: boolean;
9
+ mocksOnFs: MockOnFs[];
10
+ };
11
+ export declare class ManualMock {
12
+ private _automock;
13
+ private _mocksOnFs;
14
+ private _mocks;
15
+ private _unmocks;
16
+ static create<T extends ManualMock>(this: new (opts: ManualMockOptions) => T, config: Partial<InlineConfig>, options?: BrowserTestRunEnvOptions): Promise<T>;
17
+ constructor(options: ManualMockOptions);
18
+ resolveId(id: string): Promise<string | void>;
19
+ mock(moduleName: string): void;
20
+ unmock(moduleName: string): void;
21
+ resetMocks(): void;
22
+ }
23
+ export {};
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ManualMock = void 0;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const promises_1 = __importDefault(require("node:fs/promises"));
9
+ const lodash_1 = __importDefault(require("lodash"));
10
+ const constants_1 = require("./constants");
11
+ class ManualMock {
12
+ static async create(config, options) {
13
+ const automock = typeof options?.automock === "boolean" ? options?.automock : constants_1.DEFAULT_AUTOMOCK;
14
+ const automockDir = node_path_1.default.resolve(config?.root || "", options?.automockDir || constants_1.DEFAULT_AUTOMOCK_DIRECTORY);
15
+ const mocksOnFs = await getMocksOnFs(automockDir);
16
+ return new this({ automock, mocksOnFs });
17
+ }
18
+ constructor(options) {
19
+ this._automock = options.automock;
20
+ this._mocksOnFs = options.mocksOnFs;
21
+ this._mocks = [];
22
+ this._unmocks = [];
23
+ }
24
+ async resolveId(id) {
25
+ const foundMockOnFs = this._mocksOnFs.find(mock => id === mock.moduleName);
26
+ if ((this._mocks.includes(id) || this._automock) && foundMockOnFs && !this._unmocks.includes(id)) {
27
+ return foundMockOnFs.fullPath;
28
+ }
29
+ }
30
+ mock(moduleName) {
31
+ this._mocks.push(moduleName);
32
+ }
33
+ unmock(moduleName) {
34
+ this._unmocks.push(moduleName);
35
+ }
36
+ resetMocks() {
37
+ this._mocks = [];
38
+ this._unmocks = [];
39
+ }
40
+ }
41
+ exports.ManualMock = ManualMock;
42
+ async function getMocksOnFs(automockDir) {
43
+ const mockedModules = await getFilesFromDirectory(automockDir);
44
+ return mockedModules.map(filePath => {
45
+ const extName = node_path_1.default.extname(filePath);
46
+ return {
47
+ fullPath: filePath,
48
+ moduleName: filePath.slice(automockDir.length + 1, -extName.length),
49
+ };
50
+ });
51
+ }
52
+ async function getFilesFromDirectory(dir) {
53
+ const isDirExists = await promises_1.default.access(dir).then(() => true, () => false);
54
+ if (!isDirExists) {
55
+ return [];
56
+ }
57
+ const files = await promises_1.default.readdir(dir);
58
+ const allFiles = await Promise.all(files.map(async (file) => {
59
+ const filePath = node_path_1.default.join(dir, file);
60
+ const stats = await promises_1.default.stat(filePath);
61
+ return stats.isDirectory() ? getFilesFromDirectory(filePath) : filePath;
62
+ }));
63
+ return lodash_1.default.flatten(allFiles).filter(Boolean);
64
+ }
65
+ //# sourceMappingURL=manual-mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manual-mock.js","sourceRoot":"","sources":["../../../../../src/runner/browser-env/vite/manual-mock.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@ const polyfill_1 = require("../polyfill");
15
15
  const logger_1 = __importDefault(require("../../../../utils/logger"));
16
16
  const debug = (0, debug_1.default)("vite:plugin:generateIndexHtml");
17
17
  // modules that used only in NodeJS environment and don't need to be compiled
18
- const DEFAULT_MODULES_TO_MOCK = ["puppeteer-core", "archiver", "@wdio/repl", "jszip"];
18
+ const DEFAULT_MODULES_TO_STUB = ["puppeteer-core", "archiver", "@wdio/repl", "jszip"];
19
19
  const POLYFILLS = [...node_module_1.builtinModules, ...node_module_1.builtinModules.map(m => `node:${m}`)];
20
20
  const virtualDriverModuleId = "virtual:@testplane/driver";
21
21
  const virtualModules = {
@@ -35,13 +35,14 @@ const plugin = async () => {
35
35
  const browserRunnerModulePath = node_path_1.default.resolve(browserModulesPath, "index.js");
36
36
  const globalsModulePath = node_path_1.default.resolve(browserModulesPath, "globals.js");
37
37
  const driverModulePath = node_path_1.default.resolve(browserModulesPath, "driver.js");
38
+ const mockModulePath = node_path_1.default.resolve(browserModulesPath, "mock.js");
38
39
  const automationProtocolPath = `/@fs${driverModulePath}`;
39
- const mockDefaultModulePath = node_path_1.default.resolve(browserModulesPath, "mock/default-module.js");
40
- const mockImportMetaResolvePath = node_path_1.default.resolve(browserModulesPath, "mock/import-meta-resolve.js");
41
- const mockWdioLoggerPath = node_path_1.default.resolve(browserModulesPath, "mock/@wdio-logger.js");
42
- const modulesToMock = DEFAULT_MODULES_TO_MOCK.reduce((acc, val) => lodash_1.default.set(acc, val, mockDefaultModulePath), {
43
- "@wdio/logger": mockWdioLoggerPath,
44
- "import-meta-resolve": mockImportMetaResolvePath,
40
+ const stubDefaultModulePath = node_path_1.default.resolve(browserModulesPath, "stubs/default-module.js");
41
+ const stubImportMetaResolvePath = node_path_1.default.resolve(browserModulesPath, "stubs/import-meta-resolve.js");
42
+ const stubWdioLoggerPath = node_path_1.default.resolve(browserModulesPath, "stubs/@wdio-logger.js");
43
+ const modulesToStub = DEFAULT_MODULES_TO_STUB.reduce((acc, val) => lodash_1.default.set(acc, val, stubDefaultModulePath), {
44
+ "@wdio/logger": stubWdioLoggerPath,
45
+ "import-meta-resolve": stubImportMetaResolvePath,
45
46
  });
46
47
  return [
47
48
  {
@@ -51,24 +52,12 @@ const plugin = async () => {
51
52
  return () => {
52
53
  server.middlewares.use(async (req, res, next) => {
53
54
  debug(`Received request for: ${req.originalUrl}`);
54
- if (!req.url?.endsWith("index.html") || !req.originalUrl) {
55
- return next();
56
- }
57
- const parsedUrl = node_url_1.default.parse(req.originalUrl);
58
- const [routeName, runUuid] = lodash_1.default.compact(parsedUrl.pathname?.split("/"));
59
55
  try {
60
- if (routeName !== constants_1.VITE_RUN_UUID_ROUTE || !runUuid) {
61
- throw new Error(`Pathname must be in "/${constants_1.VITE_RUN_UUID_ROUTE}/:uuid" format, but got: ${req.originalUrl}`);
62
- }
63
- const env = constants_1.WORKER_ENV_BY_RUN_UUID.get(runUuid);
64
- if (!env) {
65
- throw new Error(`Worker environment is not found by "${runUuid}". ` +
66
- "This is possible if:\n" +
67
- ' - "runUuid" is not generated by Testplane\n' +
68
- " - the test has already been completed\n" +
69
- " - worker was disconnected");
56
+ const testInfo = (0, utils_1.getTestInfoFromViteRequest)(req);
57
+ if (!testInfo) {
58
+ return next();
70
59
  }
71
- const template = generateTemplate(env, runUuid);
60
+ const template = generateTemplate(testInfo.env, testInfo.runUuid);
72
61
  res.end(await server.transformIndexHtml(`${req.originalUrl}`, template));
73
62
  }
74
63
  catch (err) {
@@ -84,6 +73,10 @@ const plugin = async () => {
84
73
  if (id === virtualModules.driver.id) {
85
74
  return virtualModules.driver.resolvedId;
86
75
  }
76
+ // fake module and load the implementation of the browser mock
77
+ if (id === constants_1.MOCK_MODULE_NAME) {
78
+ return mockModulePath;
79
+ }
87
80
  if (id.endsWith(constants_1.MODULE_NAMES.browserRunner)) {
88
81
  return browserRunnerModulePath;
89
82
  }
@@ -96,8 +89,8 @@ const plugin = async () => {
96
89
  if (POLYFILLS.includes(id)) {
97
90
  return (0, polyfill_1.polyfillPath)(id.replace("/promises", ""));
98
91
  }
99
- if (Object.keys(modulesToMock).includes(id)) {
100
- return modulesToMock[id];
92
+ if (Object.keys(modulesToStub).includes(id)) {
93
+ return modulesToStub[id];
101
94
  }
102
95
  },
103
96
  load: (id) => {
@@ -126,6 +119,14 @@ function generateTemplate(env, runUuid) {
126
119
  <link rel="icon" href="https://testplane.io/img/favicon.ico">
127
120
  <script type="module">
128
121
  window.__testplane__ = ${JSON.stringify({ runUuid, ...env })};
122
+ window.__testplane__.mockCache = new Map();
123
+ window.importWithMock = function(modName, mod) {
124
+ if (window.__testplane__.mockCache.has(modName)) {
125
+ return window.__testplane__.mockCache.get(modName);
126
+ }
127
+
128
+ return mod;
129
+ }
129
130
  </script>
130
131
  <script type="module" src="${constants_1.MODULE_NAMES.globals}"></script>
131
132
  <script type="module" src="${constants_1.MODULE_NAMES.mocha}"></script>
@@ -1 +1 @@
1
- {"version":3,"file":"generate-index-html.js","sourceRoot":"","sources":["../../../../../../src/runner/browser-env/vite/plugins/generate-index-html.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-index-html.js","sourceRoot":"","sources":["../../../../../../src/runner/browser-env/vite/plugins/generate-index-html.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ManualMock } from "../manual-mock";
2
+ import type { Plugin } from "vite";
3
+ export declare const plugin: (manualMock: ManualMock) => Plugin[];
@@ -0,0 +1,301 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.plugin = void 0;
7
+ const node_url_1 = __importDefault(require("node:url"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const debug_1 = __importDefault(require("debug"));
10
+ const recast_1 = require("recast");
11
+ const logger_1 = __importDefault(require("../../../../utils/logger"));
12
+ const constants_1 = require("../constants");
13
+ const utils_1 = require("../utils");
14
+ const debug = (0, debug_1.default)("vite:plugin:mock");
15
+ const b = recast_1.types.builders;
16
+ const plugin = (manualMock) => {
17
+ const registeredMocks = new Set();
18
+ const testFileMocks = new Map();
19
+ let testFilePath = null;
20
+ return [
21
+ {
22
+ name: "testplane:manual-mock",
23
+ enforce: "pre",
24
+ resolveId: manualMock.resolveId.bind(manualMock),
25
+ },
26
+ {
27
+ name: "testplane:mock",
28
+ enforce: "post",
29
+ configureServer(server) {
30
+ return () => {
31
+ server.middlewares.use("/", async (req, _res, next) => {
32
+ const testInfo = (0, utils_1.getTestInfoFromViteRequest)(req);
33
+ if (!testInfo) {
34
+ return next();
35
+ }
36
+ testFilePath = testInfo.env?.file;
37
+ manualMock.resetMocks();
38
+ return next();
39
+ });
40
+ };
41
+ },
42
+ transform(code, id) {
43
+ const isTestModule = testFilePath === id;
44
+ if (!isTestModule) {
45
+ const isModuleFromNodeModules = id.includes("/node_modules/");
46
+ const isVirtualModule = id.startsWith("virtual:");
47
+ const hasRegisteredMocks = registeredMocks.size > 0;
48
+ if (isModuleFromNodeModules || isVirtualModule || !hasRegisteredMocks) {
49
+ return { code };
50
+ }
51
+ }
52
+ let ast;
53
+ const start = Date.now();
54
+ try {
55
+ ast = (0, recast_1.parse)(code, {
56
+ parser: require("recast/parsers/typescript"),
57
+ sourceFileName: id,
58
+ sourceRoot: node_path_1.default.dirname(id),
59
+ });
60
+ debug(`Parsed file for mocking: ${id} in ${Date.now() - start}ms`);
61
+ }
62
+ catch (err) {
63
+ logger_1.default.error(`Failed to parse file ${id}: ${err.stack}`);
64
+ return { code };
65
+ }
66
+ const state = {
67
+ importIndex: 0,
68
+ mockFnName: "",
69
+ unmockFnName: "",
70
+ mockCalls: [],
71
+ };
72
+ const testModuleVisitorMethods = isTestModule
73
+ ? { visitExpressionStatement: handleMockCalls({ state, registeredMocks, manualMock }) }
74
+ : {};
75
+ (0, recast_1.visit)(ast, {
76
+ visitImportDeclaration: handleModuleImportWithMocks(state),
77
+ ...testModuleVisitorMethods,
78
+ });
79
+ (0, recast_1.visit)(ast, {
80
+ visitImportDeclaration: rewriteImportDeclaration({
81
+ state,
82
+ id,
83
+ testFilePath,
84
+ isTestModule,
85
+ registeredMocks,
86
+ testFileMocks,
87
+ }),
88
+ });
89
+ const preparedMockCalls = state.mockCalls.map(mockCall => {
90
+ const exp = mockCall;
91
+ if (!isCallExpression(exp)) {
92
+ return mockCall;
93
+ }
94
+ const mockCallExpression = exp.expression;
95
+ const mockModuleName = mockCallExpression.arguments[0]
96
+ .value;
97
+ if (testFileMocks.has(mockModuleName)) {
98
+ mockCallExpression.arguments.push(b.identifier(testFileMocks.get(mockModuleName)));
99
+ }
100
+ else {
101
+ throw new Error(`Cannot find mocked module "${mockModuleName}"`);
102
+ }
103
+ return b.expressionStatement(b.awaitExpression(mockCallExpression));
104
+ });
105
+ ast.program.body.unshift(...preparedMockCalls);
106
+ try {
107
+ const newCode = (0, recast_1.print)(ast, { sourceMapName: id });
108
+ debug(`Transformed file for mocking: ${id} in ${Date.now() - start}ms`);
109
+ return newCode;
110
+ }
111
+ catch (err) {
112
+ logger_1.default.error(`Failed to transform file ${id} for mocking: ${err.stack}`);
113
+ return { code };
114
+ }
115
+ },
116
+ },
117
+ ];
118
+ };
119
+ exports.plugin = plugin;
120
+ /**
121
+ * Find import module with mocks and save name for mock and unmock calls
122
+ */
123
+ function handleModuleImportWithMocks(state) {
124
+ return function (nodePath) {
125
+ const declaration = nodePath.value;
126
+ const source = declaration.source.value;
127
+ const specifiers = declaration.specifiers;
128
+ if (!specifiers || specifiers.length === 0 || source !== constants_1.MOCK_MODULE_NAME) {
129
+ return this.traverse(nodePath);
130
+ }
131
+ const mockSpecifier = specifiers
132
+ .filter(s => s.type === recast_1.types.namedTypes.ImportSpecifier.toString())
133
+ .find(s => s.imported.name === "mock");
134
+ if (mockSpecifier && mockSpecifier.local) {
135
+ state.mockFnName = mockSpecifier.local.name;
136
+ }
137
+ const unmockSpecifier = declaration.specifiers
138
+ .filter(s => s.type === recast_1.types.namedTypes.ImportSpecifier.toString())
139
+ .find(s => s.imported.name === "unmock");
140
+ if (unmockSpecifier && unmockSpecifier.local) {
141
+ state.unmockFnName = unmockSpecifier.local.name;
142
+ }
143
+ // Move import module with mocks to the top of the file
144
+ state.mockCalls.push(declaration);
145
+ nodePath.prune();
146
+ return this.traverse(nodePath);
147
+ };
148
+ }
149
+ /**
150
+ * Detect which modules are supposed to be mocked
151
+ */
152
+ function handleMockCalls({ state, registeredMocks, manualMock, }) {
153
+ return function (nodePath) {
154
+ const exp = nodePath.value;
155
+ if (exp.expression.type !== recast_1.types.namedTypes.CallExpression.toString()) {
156
+ return this.traverse(nodePath);
157
+ }
158
+ const callExp = exp.expression;
159
+ const isMockCall = Boolean(state.mockFnName) && callExp.callee.name === state.mockFnName;
160
+ const isUnmockCall = Boolean(state.unmockFnName) && callExp.callee.name === state.unmockFnName;
161
+ if (!isMockCall && !isUnmockCall) {
162
+ return this.traverse(nodePath);
163
+ }
164
+ if (isUnmockCall &&
165
+ callExp.arguments[0] &&
166
+ typeof callExp.arguments[0].value === "string") {
167
+ manualMock.unmock(callExp.arguments[0].value);
168
+ }
169
+ if (isMockCall) {
170
+ const mockCall = exp.expression;
171
+ if (mockCall.arguments.length === 1) {
172
+ manualMock.mock(mockCall.arguments[0].value);
173
+ }
174
+ else {
175
+ if (exp.expression.arguments.length) {
176
+ registeredMocks.add(exp.expression.arguments[0]
177
+ .value);
178
+ }
179
+ state.mockCalls.push(exp);
180
+ }
181
+ }
182
+ // Remove original node from ast
183
+ nodePath.prune();
184
+ return this.traverse(nodePath);
185
+ };
186
+ }
187
+ /**
188
+ * Rewrite import declarations in test file and its dependencies in order to use user mocks instead original module.
189
+ * Exmample in test file:
190
+ *
191
+ * From:
192
+ * import {fn, mock} from "testplane/mock";
193
+ * import {foo} from "bar";
194
+ * import {handleClick} from "./utils";
195
+ * mock("./utils", () => ({handleClick: fn()});
196
+ *
197
+ * To:
198
+ * import * as __testplane_import_0__ from "./utils"; // move import of mocked module to the top
199
+ * await mock("utils", () => ({handleClick: fn()}, __testplane_import_0__); // move right after import original module (will call `mock` from `vite/browser-modules/mock.ts`)
200
+ * const {foo} = await import("bar"); // transform to import expression in order to import it only after mock module
201
+ * const {handleClick} = importWithMock("/Users/../utils", __testplane_import_0__); // use importWithMock helper in order to get mocked module
202
+ }));
203
+ */
204
+ function rewriteImportDeclaration({ state, id, testFilePath, isTestModule, registeredMocks, testFileMocks, }) {
205
+ return function (nodePath) {
206
+ const declaration = nodePath.value;
207
+ const source = declaration.source.value;
208
+ if (!declaration.specifiers || declaration.specifiers.length === 0) {
209
+ return this.traverse(nodePath);
210
+ }
211
+ const absImportPath = node_path_1.default.resolve(node_path_1.default.dirname(id), source);
212
+ const absImportPathWithoutExtName = (0, utils_1.getPathWithoutExtName)(absImportPath);
213
+ const isModuleMockedRelatively = Boolean(source.startsWith(".") &&
214
+ [...registeredMocks.values()].find(m => {
215
+ const absMockPath = node_path_1.default.resolve(node_path_1.default.dirname(testFilePath || "/"), m);
216
+ const absMockPathWithoutExtName = (0, utils_1.getPathWithoutExtName)(absMockPath);
217
+ return absImportPathWithoutExtName === absMockPathWithoutExtName;
218
+ }));
219
+ const isModuleMocked = isModuleMockedRelatively || registeredMocks.has(source);
220
+ const newImportIdentifier = genImportIdentifier(state);
221
+ if (isTestModule && isModuleMocked) {
222
+ testFileMocks.set(source, newImportIdentifier);
223
+ }
224
+ /**
225
+ * Use import with custom namespace specifier for mocked module
226
+ *
227
+ * From:
228
+ * import {handleClick} from "./utils";
229
+ *
230
+ * To:
231
+ * import * as __testplane_import_0__ from "./utils";
232
+ */
233
+ if (isModuleMocked) {
234
+ const newNode = b.importDeclaration([b.importNamespaceSpecifier(b.identifier(newImportIdentifier))], b.literal(source));
235
+ // should be specified first in order to correctly mock module
236
+ state.mockCalls.unshift(newNode);
237
+ }
238
+ let mockImport;
239
+ /**
240
+ * Transform import mocked module to use helper `importWithMock` in order to get mocked implementation
241
+ *
242
+ * From:
243
+ * import {handleClick} from "./utils";
244
+ *
245
+ * To:
246
+ * import * as __testplane_import_0__ from "./utils"; // from code above
247
+ * const { handleClick } = await importWithMock("./utils", __testplane_import_0__);
248
+ */
249
+ if (isModuleMocked) {
250
+ const mockModuleIdentifier = source.startsWith(".") || source.startsWith("/")
251
+ ? node_url_1.default.pathToFileURL(absImportPathWithoutExtName).pathname
252
+ : source;
253
+ const variableValue = b.callExpression(b.identifier("importWithMock"), [
254
+ b.literal(mockModuleIdentifier),
255
+ b.identifier(newImportIdentifier),
256
+ ]);
257
+ mockImport = b.variableDeclaration("const", [
258
+ b.variableDeclarator(genVarDeclKey(declaration), variableValue),
259
+ ]);
260
+ }
261
+ /**
262
+ * Transform not mocked import declarations to import expressions only in test file.
263
+ * In order to hoist `mock(...)` calls and run them before another dependencies.
264
+ *
265
+ * From:
266
+ * import {foo} from "bar";
267
+ *
268
+ * To:
269
+ * const {foo} = await import("bar");
270
+ */
271
+ if (isTestModule && !isModuleMocked) {
272
+ mockImport = b.variableDeclaration("const", [
273
+ b.variableDeclarator(genVarDeclKey(declaration), b.awaitExpression(b.importExpression(b.literal(source)))),
274
+ ]);
275
+ }
276
+ if (mockImport) {
277
+ nodePath.replace(mockImport);
278
+ }
279
+ return this.traverse(nodePath);
280
+ };
281
+ }
282
+ function genVarDeclKey(declaration) {
283
+ const isNamespaceImport = declaration.specifiers?.length === 1 &&
284
+ declaration.specifiers[0].type === recast_1.types.namedTypes.ImportNamespaceSpecifier.toString();
285
+ if (isNamespaceImport) {
286
+ return declaration.specifiers[0].local;
287
+ }
288
+ return b.objectPattern(declaration.specifiers.map(s => {
289
+ if (s.type === recast_1.types.namedTypes.ImportDefaultSpecifier.toString()) {
290
+ return b.property("init", b.identifier("default"), b.identifier(s.local.name));
291
+ }
292
+ return b.property("init", b.identifier(s.imported.name), b.identifier(s.local.name));
293
+ }));
294
+ }
295
+ function genImportIdentifier(state) {
296
+ return `__testplane_import_${state.importIndex++}__`;
297
+ }
298
+ function isCallExpression(exp) {
299
+ return exp.expression && exp.expression.type === recast_1.types.namedTypes.CallExpression.toString();
300
+ }
301
+ //# sourceMappingURL=mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../../../../../src/runner/browser-env/vite/plugins/mock.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA2B;AAC3B,0DAA6B;AAC7B,kDAAgC;AAChC,mCAAoD;AAGpD,sEAA8C;AAC9C,4CAAgD;AAChD,oCAA6E;AAI7E,MAAM,KAAK,GAAG,IAAA,eAAW,EAAC,kBAAkB,CAAC,CAAC;AAC9C,MAAM,CAAC,GAAG,cAAK,CAAC,QAAQ,CAAC;AAwBlB,MAAM,MAAM,GAAG,CAAC,UAAsB,EAAY,EAAE;IACvD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEhD,IAAI,YAAY,GAAkB,IAAI,CAAC;IAEvC,OAAO;QACH;YACI,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;SACnD;QACD;YACI,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,MAAM;YACf,eAAe,CAAC,MAAM;gBAClB,OAAO,GAAG,EAAE;oBACR,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;wBAClD,MAAM,QAAQ,GAAG,IAAA,kCAA0B,EAAC,GAAG,CAAC,CAAC;wBACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;4BACZ,OAAO,IAAI,EAAE,CAAC;wBAClB,CAAC;wBAED,YAAY,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;wBAClC,UAAU,CAAC,UAAU,EAAE,CAAC;wBAExB,OAAO,IAAI,EAAE,CAAC;oBAClB,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC;YACN,CAAC;YAED,SAAS,CAAC,IAAI,EAAE,EAAE;gBACd,MAAM,YAAY,GAAG,YAAY,KAAK,EAAE,CAAC;gBAEzC,IAAI,CAAC,YAAY,EAAE,CAAC;oBAChB,MAAM,uBAAuB,GAAG,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;oBAC9D,MAAM,eAAe,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;oBAClD,MAAM,kBAAkB,GAAG,eAAe,CAAC,IAAI,GAAG,CAAC,CAAC;oBAEpD,IAAI,uBAAuB,IAAI,eAAe,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBACpE,OAAO,EAAE,IAAI,EAAE,CAAC;oBACpB,CAAC;gBACL,CAAC;gBAED,IAAI,GAA0B,CAAC;gBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAEzB,IAAI,CAAC;oBACD,GAAG,GAAG,IAAA,cAAK,EAAC,IAAI,EAAE;wBACd,MAAM,EAAE,OAAO,CAAC,2BAA2B,CAAC;wBAC5C,cAAc,EAAE,EAAE;wBAClB,UAAU,EAAE,mBAAI,CAAC,OAAO,CAAC,EAAE,CAAC;qBAC/B,CAAC,CAAC;oBAEH,KAAK,CAAC,4BAA4B,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;gBACvE,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACX,gBAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAM,GAAa,CAAC,KAAK,EAAE,CAAC,CAAC;oBAEpE,OAAO,EAAE,IAAI,EAAE,CAAC;gBACpB,CAAC;gBAED,MAAM,KAAK,GAAc;oBACrB,WAAW,EAAE,CAAC;oBACd,UAAU,EAAE,EAAE;oBACd,YAAY,EAAE,EAAE;oBAChB,SAAS,EAAE,EAAE;iBAChB,CAAC;gBAEF,MAAM,wBAAwB,GAAG,YAAY;oBACzC,CAAC,CAAC,EAAE,wBAAwB,EAAE,eAAe,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,EAAE;oBACvF,CAAC,CAAC,EAAE,CAAC;gBAET,IAAA,cAAK,EAAC,GAAG,EAAE;oBACP,sBAAsB,EAAE,2BAA2B,CAAC,KAAK,CAAC;oBAC1D,GAAG,wBAAwB;iBAC9B,CAAC,CAAC;gBAEH,IAAA,cAAK,EAAC,GAAG,EAAE;oBACP,sBAAsB,EAAE,wBAAwB,CAAC;wBAC7C,KAAK;wBACL,EAAE;wBACF,YAAY;wBACZ,YAAY;wBACZ,eAAe;wBACf,aAAa;qBAChB,CAAC;iBACL,CAAC,CAAC;gBAEH,MAAM,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;oBACrD,MAAM,GAAG,GAAG,QAAgD,CAAC;oBAE7D,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;wBACzB,OAAO,QAAQ,CAAC;oBACpB,CAAC;oBAED,MAAM,kBAAkB,GAAG,GAAG,CAAC,UAA6C,CAAC;oBAC7E,MAAM,cAAc,GAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAA8B;yBAC/E,KAAe,CAAC;oBAErB,IAAI,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;wBACpC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC,CAAC,CAAC;oBACxF,CAAC;yBAAM,CAAC;wBACJ,MAAM,IAAI,KAAK,CAAC,8BAA8B,cAAc,GAAG,CAAC,CAAC;oBACrE,CAAC;oBAED,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBACxE,CAAC,CAAC,CAAC;gBAEH,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,iBAAiB,CAAC,CAAC;gBAE/C,IAAI,CAAC;oBACD,MAAM,OAAO,GAAG,IAAA,cAAK,EAAC,GAAG,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;oBAClD,KAAK,CAAC,iCAAiC,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;oBAExE,OAAO,OAAO,CAAC;gBACnB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACX,gBAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,iBAAkB,GAAa,CAAC,KAAK,EAAE,CAAC,CAAC;oBACpF,OAAO,EAAE,IAAI,EAAE,CAAC;gBACpB,CAAC;YACL,CAAC;SACJ;KACJ,CAAC;AACN,CAAC,CAAC;AA1HW,QAAA,MAAM,UA0HjB;AAEF;;GAEG;AACH,SAAS,2BAA2B,CAAC,KAAgB;IACjD,OAAO,UAAU,QAAQ;QACrB,MAAM,WAAW,GAAG,QAAQ,CAAC,KAA2C,CAAC;QACzE,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,KAAM,CAAC;QACzC,MAAM,UAAU,GAAG,WAAW,CAAC,UAAgD,CAAC;QAEhF,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,4BAAgB,EAAE,CAAC;YACxE,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,aAAa,GAAG,UAAU;aAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAK,CAAC,UAAU,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;aACnE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAE3C,IAAI,aAAa,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;YACvC,KAAK,CAAC,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,IAAc,CAAC;QAC1D,CAAC;QAED,MAAM,eAAe,GAAI,WAAW,CAAC,UAAiD;aACjF,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAK,CAAC,UAAU,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;aACnE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAE7C,IAAI,eAAe,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;YAC3C,KAAK,CAAC,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,IAAc,CAAC;QAC9D,CAAC;QAED,uDAAuD;QACvD,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEjB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,EACrB,KAAK,EACL,eAAe,EACf,UAAU,GACQ;IAClB,OAAO,UAAU,QAAQ;QACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,KAA6C,CAAC;QAEnE,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK,cAAK,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC;YACrE,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,UAA6C,CAAC;QAClE,MAAM,UAAU,GACZ,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAK,OAAO,CAAC,MAAsC,CAAC,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC;QAC3G,MAAM,YAAY,GACd,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAK,OAAO,CAAC,MAAsC,CAAC,IAAI,KAAK,KAAK,CAAC,YAAY,CAAC;QAE/G,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QAED,IACI,YAAY;YACZ,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;YACpB,OAAQ,OAAO,CAAC,SAAS,CAAC,CAAC,CAA8B,CAAC,KAAK,KAAK,QAAQ,EAC9E,CAAC;YACC,UAAU,CAAC,MAAM,CAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAA8B,CAAC,KAAe,CAAC,CAAC;QAC1F,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,GAAG,CAAC,UAA6C,CAAC;YAEnE,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,UAAU,CAAC,IAAI,CAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAoC,CAAC,KAAK,CAAC,CAAC;YACrF,CAAC;iBAAM,CAAC;gBACJ,IAAK,GAAG,CAAC,UAA8C,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;oBACvE,eAAe,CAAC,GAAG,CACb,GAAG,CAAC,UAA8C,CAAC,SAAS,CAAC,CAAC,CAA8B;yBACzF,KAAe,CACvB,CAAC;gBACN,CAAC;gBAED,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC;QAED,gCAAgC;QAChC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEjB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC;AACN,CAAC;AACD;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,wBAAwB,CAAC,EAC9B,KAAK,EACL,EAAE,EACF,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,aAAa,GACc;IAC3B,OAAO,UAAU,QAAQ;QACrB,MAAM,WAAW,GAAG,QAAQ,CAAC,KAA2C,CAAC;QACzE,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,KAAe,CAAC;QAElD,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjE,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,aAAa,GAAG,mBAAI,CAAC,OAAO,CAAC,mBAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7D,MAAM,2BAA2B,GAAG,IAAA,6BAAqB,EAAC,aAAa,CAAC,CAAC;QAEzE,MAAM,wBAAwB,GAAG,OAAO,CACpC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACnC,MAAM,WAAW,GAAG,mBAAI,CAAC,OAAO,CAAC,mBAAI,CAAC,OAAO,CAAC,YAAY,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvE,MAAM,yBAAyB,GAAG,IAAA,6BAAqB,EAAC,WAAW,CAAC,CAAC;gBAErE,OAAO,2BAA2B,KAAK,yBAAyB,CAAC;YACrE,CAAC,CAAC,CACT,CAAC;QAEF,MAAM,cAAc,GAAG,wBAAwB,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/E,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEvD,IAAI,YAAY,IAAI,cAAc,EAAE,CAAC;YACjC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QACnD,CAAC;QAED;;;;;;;;WAQG;QACH,IAAI,cAAc,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,CAAC,CAAC,iBAAiB,CAC/B,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAC/D,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CACpB,CAAC;YAEF,8DAA8D;YAC9D,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,UAA4D,CAAC;QAEjE;;;;;;;;;WASG;QACH,IAAI,cAAc,EAAE,CAAC;YACjB,MAAM,oBAAoB,GACtB,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;gBAC5C,CAAC,CAAC,kBAAG,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC,QAAQ;gBACzD,CAAC,CAAC,MAAM,CAAC;YAEjB,MAAM,aAAa,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;gBACnE,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC;gBAC/B,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC;aACpC,CAAC,CAAC;YAEH,UAAU,GAAG,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE;gBACxC,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC;aAClE,CAAC,CAAC;QACP,CAAC;QAED;;;;;;;;;WASG;QACH,IAAI,YAAY,IAAI,CAAC,cAAc,EAAE,CAAC;YAClC,UAAU,GAAG,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE;gBACxC,CAAC,CAAC,kBAAkB,CAChB,aAAa,CAAC,WAAW,CAAC,EAC1B,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAC3D;aACJ,CAAC,CAAC;QACP,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,aAAa,CAClB,WAA+C;IAE/C,MAAM,iBAAiB,GACnB,WAAW,CAAC,UAAU,EAAE,MAAM,KAAK,CAAC;QACpC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,QAAQ,EAAE,CAAC;IAE5F,IAAI,iBAAiB,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,UAAW,CAAC,CAAC,CAAC,CAAC,KAAoC,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,CAAC,aAAa,CAClB,WAAW,CAAC,UAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAC5B,IAAI,CAAC,CAAC,IAAI,KAAK,cAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,QAAQ,EAAE,EAAE,CAAC;YAChE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAM,CAAC,IAAc,CAAC,CAAC,CAAC;QAC9F,CAAC;QAED,OAAO,CAAC,CAAC,QAAQ,CACb,MAAM,EACN,CAAC,CAAC,UAAU,CAAE,CAAsC,CAAC,QAAQ,CAAC,IAAc,CAAC,EAC7E,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAM,CAAC,IAAc,CAAC,CACxC,CAAC;IACN,CAAC,CAAC,CACL,CAAC;AACN,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAgB;IACzC,OAAO,sBAAsB,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC;AACzD,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAyC;IAC/D,OAAO,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK,cAAK,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;AAChG,CAAC"}
@@ -37,6 +37,8 @@ const chalk_1 = __importDefault(require("chalk"));
37
37
  const logger_1 = __importDefault(require("../../../utils/logger"));
38
38
  const socket_1 = require("./socket");
39
39
  const generate_index_html_1 = require("./plugins/generate-index-html");
40
+ const mock_1 = require("./plugins/mock");
41
+ const manual_mock_1 = require("./manual-mock");
40
42
  const constants_1 = require("./constants");
41
43
  class ViteServer {
42
44
  static create(testplaneConfig) {
@@ -107,7 +109,12 @@ class ViteServer {
107
109
  this._viteConfig = lodash_1.default.merge(this._viteConfig, preparedConfig);
108
110
  }
109
111
  async _addRequiredVitePlugins() {
110
- this._viteConfig.plugins = [...(this._viteConfig.plugins || []), await (0, generate_index_html_1.plugin)()];
112
+ const manualMock = await manual_mock_1.ManualMock.create(this._viteConfig, this._options);
113
+ this._viteConfig.plugins = [
114
+ ...(this._viteConfig.plugins || []),
115
+ await (0, generate_index_html_1.plugin)(),
116
+ (0, mock_1.plugin)(manualMock),
117
+ ];
111
118
  }
112
119
  get baseUrl() {
113
120
  return this._server?.resolvedUrls.local[0];
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../../src/runner/browser-env/vite/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../../src/runner/browser-env/vite/server.ts"],"names":[],"mappings":"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"}