@modern-js/plugin-testing 2.21.0 → 2.21.2-alpha.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/base/config/index.js +9 -3
  3. package/dist/cjs/base/config/patches/assetsModule.js +3 -1
  4. package/dist/cjs/base/config/patches/filemock.js +3 -1
  5. package/dist/cjs/base/config/patches/index.js +3 -1
  6. package/dist/cjs/base/config/patches/transformer.js +3 -1
  7. package/dist/cjs/base/config/testConfigOperator.js +3 -1
  8. package/dist/cjs/base/config/transformer/babelTransformer.js +3 -1
  9. package/dist/cjs/base/hook.js +9 -3
  10. package/dist/cjs/base/index.js +18 -6
  11. package/dist/cjs/base/runJest.js +6 -2
  12. package/dist/cjs/base/utils.js +9 -3
  13. package/dist/cjs/cli/bff/app.js +12 -4
  14. package/dist/cjs/cli/bff/constant.js +3 -1
  15. package/dist/cjs/cli/bff/index.js +6 -2
  16. package/dist/cjs/cli/bff/mockAPI.js +3 -1
  17. package/dist/cjs/cli/bff/setup.js +14 -14
  18. package/dist/cjs/cli/bff/utils/index.js +3 -1
  19. package/dist/cjs/cli/index.js +7 -2
  20. package/dist/cjs/cli/test.js +3 -1
  21. package/dist/cjs/constant.js +3 -1
  22. package/dist/cjs/runtime-testing/app.js +3 -1
  23. package/dist/cjs/runtime-testing/base.js +5 -11
  24. package/dist/cjs/runtime-testing/{request.js → bff.js} +4 -2
  25. package/dist/cjs/runtime-testing/customRender.js +3 -1
  26. package/dist/cjs/runtime-testing/reduck.js +12 -4
  27. package/dist/cjs/runtime-testing/resolvePlugins.js +3 -1
  28. package/dist/esm/cli/bff/setup.js +15 -14
  29. package/dist/esm/cli/index.js +1 -0
  30. package/dist/esm/runtime-testing/base.js +0 -1
  31. package/dist/esm/runtime-testing/{request.js → bff.js} +1 -1
  32. package/dist/esm-node/cli/bff/setup.js +14 -14
  33. package/dist/esm-node/cli/index.js +1 -0
  34. package/dist/esm-node/runtime-testing/base.js +0 -1
  35. package/dist/esm-node/runtime-testing/bff.js +14 -0
  36. package/dist/js/modern/base/config/index.js +36 -0
  37. package/dist/js/modern/base/config/patches/assetsModule.js +11 -0
  38. package/dist/js/modern/base/config/patches/filemock.js +4 -0
  39. package/dist/js/modern/base/config/patches/index.js +34 -0
  40. package/dist/js/modern/base/config/patches/transformer.js +38 -0
  41. package/dist/js/modern/base/config/resolver.js +21 -0
  42. package/dist/js/modern/base/config/testConfigOperator.js +69 -0
  43. package/dist/js/modern/base/config/transformer/babelTransformer.js +19 -0
  44. package/dist/js/modern/base/hook.js +12 -0
  45. package/dist/js/modern/base/index.js +14 -0
  46. package/dist/js/modern/base/runJest.js +102 -0
  47. package/dist/js/modern/base/types/index.js +0 -0
  48. package/dist/js/modern/base/utils.js +66 -0
  49. package/dist/js/modern/cli/bff/app.js +58 -0
  50. package/dist/js/modern/cli/bff/constant.js +4 -0
  51. package/dist/js/modern/cli/bff/index.js +149 -0
  52. package/dist/js/modern/cli/bff/mockAPI.js +109 -0
  53. package/dist/js/modern/cli/bff/setup.js +75 -0
  54. package/dist/js/modern/cli/bff/utils/index.js +37 -0
  55. package/dist/js/modern/cli/index.js +115 -0
  56. package/dist/js/modern/cli/test.js +61 -0
  57. package/dist/js/modern/constant.js +4 -0
  58. package/dist/js/modern/index.js +3 -0
  59. package/dist/js/modern/runtime-testing/app.js +48 -0
  60. package/dist/js/modern/runtime-testing/base.js +7 -0
  61. package/dist/js/modern/runtime-testing/customRender.js +25 -0
  62. package/dist/js/modern/runtime-testing/index.js +2 -0
  63. package/dist/js/modern/runtime-testing/reduck.js +55 -0
  64. package/dist/{esm-node → js/modern}/runtime-testing/request.js +3 -1
  65. package/dist/js/modern/runtime-testing/resolvePlugins.js +33 -0
  66. package/dist/js/node/base/config/index.js +67 -0
  67. package/dist/js/node/base/config/patches/assetsModule.js +40 -0
  68. package/dist/js/node/base/config/patches/filemock.js +25 -0
  69. package/dist/js/node/base/config/patches/index.js +57 -0
  70. package/dist/js/node/base/config/patches/transformer.js +67 -0
  71. package/dist/js/node/base/config/resolver.js +30 -0
  72. package/dist/js/node/base/config/testConfigOperator.js +90 -0
  73. package/dist/js/node/base/config/transformer/babelTransformer.js +46 -0
  74. package/dist/js/node/base/hook.js +37 -0
  75. package/dist/js/node/base/index.js +43 -0
  76. package/dist/js/node/base/runJest.js +132 -0
  77. package/dist/js/node/base/types/index.js +15 -0
  78. package/dist/js/node/base/utils.js +95 -0
  79. package/dist/js/node/cli/bff/app.js +84 -0
  80. package/dist/js/node/cli/bff/constant.js +27 -0
  81. package/dist/js/node/cli/bff/index.js +173 -0
  82. package/dist/js/node/cli/bff/mockAPI.js +134 -0
  83. package/dist/js/node/cli/bff/setup.js +84 -0
  84. package/dist/js/node/cli/bff/utils/index.js +64 -0
  85. package/dist/js/node/cli/index.js +135 -0
  86. package/dist/js/node/cli/test.js +88 -0
  87. package/dist/js/node/constant.js +27 -0
  88. package/dist/js/node/index.js +19 -0
  89. package/dist/js/node/runtime-testing/app.js +73 -0
  90. package/dist/js/node/runtime-testing/base.js +38 -0
  91. package/dist/js/node/runtime-testing/customRender.js +50 -0
  92. package/dist/js/node/runtime-testing/index.js +18 -0
  93. package/dist/js/node/runtime-testing/reduck.js +85 -0
  94. package/dist/js/node/runtime-testing/request.js +45 -0
  95. package/dist/js/node/runtime-testing/resolvePlugins.js +52 -0
  96. package/dist/js/treeshaking/base/config/index.js +154 -0
  97. package/dist/js/treeshaking/base/config/patches/assetsModule.js +9 -0
  98. package/dist/js/treeshaking/base/config/patches/filemock.js +2 -0
  99. package/dist/js/treeshaking/base/config/patches/index.js +225 -0
  100. package/dist/js/treeshaking/base/config/patches/transformer.js +36 -0
  101. package/dist/js/treeshaking/base/config/resolver.js +37 -0
  102. package/dist/js/treeshaking/base/config/testConfigOperator.js +127 -0
  103. package/dist/js/treeshaking/base/config/transformer/babelTransformer.js +17 -0
  104. package/dist/js/treeshaking/base/hook.js +8 -0
  105. package/dist/js/treeshaking/base/index.js +7 -0
  106. package/dist/js/treeshaking/base/runJest.js +292 -0
  107. package/dist/js/treeshaking/base/types/index.js +1 -0
  108. package/dist/js/treeshaking/base/utils.js +76 -0
  109. package/dist/js/treeshaking/cli/bff/app.js +200 -0
  110. package/dist/js/treeshaking/cli/bff/constant.js +2 -0
  111. package/dist/js/treeshaking/cli/bff/index.js +297 -0
  112. package/dist/js/treeshaking/cli/bff/mockAPI.js +188 -0
  113. package/dist/js/treeshaking/cli/bff/setup.js +192 -0
  114. package/dist/js/treeshaking/cli/bff/utils/index.js +47 -0
  115. package/dist/js/treeshaking/cli/index.js +255 -0
  116. package/dist/js/treeshaking/cli/test.js +180 -0
  117. package/dist/js/treeshaking/constant.js +2 -0
  118. package/dist/js/treeshaking/index.js +3 -0
  119. package/dist/js/treeshaking/runtime-testing/app.js +90 -0
  120. package/dist/js/treeshaking/runtime-testing/base.js +4 -0
  121. package/dist/js/treeshaking/runtime-testing/customRender.js +41 -0
  122. package/dist/js/treeshaking/runtime-testing/index.js +2 -0
  123. package/dist/js/treeshaking/runtime-testing/reduck.js +89 -0
  124. package/dist/js/treeshaking/runtime-testing/request.js +51 -0
  125. package/dist/js/treeshaking/runtime-testing/resolvePlugins.js +46 -0
  126. package/dist/types/runtime-testing/base.d.ts +1 -2
  127. package/dist/types/runtime-testing/{request.d.ts → bff.d.ts} +1 -1
  128. package/package.json +23 -14
  129. package/types/index.d.ts +6 -1
@@ -0,0 +1,4 @@
1
+ var filemock_default = "test-file-stub";
2
+ export {
3
+ filemock_default as default
4
+ };
@@ -0,0 +1,34 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+ import { patchTransformer } from "./transformer";
22
+ import { patchAssetsModule } from "./assetsModule";
23
+ const _applyPatches = (patches2, testOperator) => __async(void 0, null, function* () {
24
+ for (const patch of patches2) {
25
+ yield patch(testOperator);
26
+ }
27
+ });
28
+ const patches = [patchTransformer, patchAssetsModule];
29
+ const applyPatches = (testConfig) => __async(void 0, null, function* () {
30
+ yield _applyPatches(patches, testConfig);
31
+ });
32
+ export {
33
+ applyPatches
34
+ };
@@ -0,0 +1,38 @@
1
+ import { readCompilerOptions } from "../../utils";
2
+ const resolveTsCompilerOptions = () => {
3
+ const tsCompilerOptions = readCompilerOptions() || {};
4
+ const { jsx } = tsCompilerOptions;
5
+ if (!jsx) {
6
+ return null;
7
+ }
8
+ tsCompilerOptions.jsx = "react-jsx";
9
+ return tsCompilerOptions;
10
+ };
11
+ const patchTransformer = (testOperator) => {
12
+ const { transformer } = testOperator.testConfig;
13
+ if (transformer === "babel-jest") {
14
+ testOperator.mergeJestConfig({
15
+ transform: {
16
+ "\\.[jt]sx?$": require.resolve("../transformer/babelTransformer")
17
+ }
18
+ });
19
+ }
20
+ if (transformer === "ts-jest") {
21
+ testOperator.mergeJestConfig({
22
+ transform: {
23
+ "\\.[jt]sx?$": require.resolve("ts-jest")
24
+ }
25
+ });
26
+ const compilerOptions = resolveTsCompilerOptions();
27
+ compilerOptions && testOperator.mergeJestConfig({
28
+ globals: {
29
+ "ts-jest": {
30
+ tsconfig: compilerOptions
31
+ }
32
+ }
33
+ });
34
+ }
35
+ };
36
+ export {
37
+ patchTransformer
38
+ };
@@ -0,0 +1,21 @@
1
+ var __getOwnPropNames = Object.getOwnPropertyNames;
2
+ var __commonJS = (cb, mod) => function __require() {
3
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
4
+ };
5
+ import enhanceResolve from "enhanced-resolve";
6
+ var require_resolver = __commonJS({
7
+ "src/base/config/resolver.ts"(exports, module) {
8
+ const resolver = enhanceResolve.create.sync({
9
+ conditionNames: ["require", "node", "default"],
10
+ extensions: [".js", ".json", ".node", ".ts", ".tsx"]
11
+ });
12
+ const shouldResolveByEnhance = (url) => /^@[^/]+\/[^/]+\/.*/.test(url);
13
+ module.exports = function(request, options) {
14
+ if (shouldResolveByEnhance(request)) {
15
+ return resolver(options.basedir, request);
16
+ }
17
+ return options.defaultResolver(request, options);
18
+ };
19
+ }
20
+ });
21
+ export default require_resolver();
@@ -0,0 +1,69 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ import { merge } from "@modern-js/utils/lodash";
18
+ class TestConfigOperator {
19
+ constructor(testConfig) {
20
+ this.defaultTestConfig = {
21
+ transformer: "babel-jest"
22
+ };
23
+ this._testConfig = testConfig;
24
+ this._jestConfig = {};
25
+ this.userJestConfig = testConfig.jest;
26
+ this.initial();
27
+ }
28
+ initial() {
29
+ this._testConfig = merge({}, this.defaultTestConfig, this.testConfig);
30
+ }
31
+ get jestConfig() {
32
+ return this._jestConfig;
33
+ }
34
+ get testConfig() {
35
+ return this._testConfig;
36
+ }
37
+ mergeJestConfig(sourceConfig) {
38
+ this._jestConfig = merge({}, this._jestConfig, sourceConfig);
39
+ }
40
+ setJestUserConfig() {
41
+ const { userJestConfig } = this;
42
+ if (typeof userJestConfig === "object") {
43
+ this.setJestConfig(userJestConfig);
44
+ }
45
+ }
46
+ setJestConfig(sourceConfig, options) {
47
+ if (options) {
48
+ const { force } = options;
49
+ if (force) {
50
+ this._jestConfig = sourceConfig;
51
+ return;
52
+ }
53
+ }
54
+ this._jestConfig = __spreadValues(__spreadValues({}, this._jestConfig), sourceConfig);
55
+ }
56
+ getFinalConfig() {
57
+ const { userJestConfig } = this;
58
+ if (!userJestConfig) {
59
+ return this._jestConfig;
60
+ }
61
+ if (typeof userJestConfig === "function") {
62
+ return userJestConfig(this._jestConfig);
63
+ }
64
+ return this.jestConfig;
65
+ }
66
+ }
67
+ export {
68
+ TestConfigOperator
69
+ };
@@ -0,0 +1,19 @@
1
+ var _a, _b;
2
+ import babelJest from "babel-jest";
3
+ const babelTransformer = (_b = (_a = babelJest).createTransformer) == null ? void 0 : _b.call(_a, {
4
+ presets: [
5
+ [
6
+ require.resolve("@modern-js/babel-preset-app"),
7
+ {
8
+ appDirectory: process.cwd(),
9
+ modules: "cjs"
10
+ }
11
+ ]
12
+ ],
13
+ configFile: false,
14
+ babelrc: false
15
+ });
16
+ var babelTransformer_default = babelTransformer;
17
+ export {
18
+ babelTransformer_default as default
19
+ };
@@ -0,0 +1,12 @@
1
+ import { createAsyncPipeline, createParallelWorkflow } from "@modern-js/plugin";
2
+ const jestConfigHook = createAsyncPipeline();
3
+ const afterTestHook = createParallelWorkflow();
4
+ const testingHooks = {
5
+ jestConfig: createAsyncPipeline(),
6
+ afterTest: createParallelWorkflow()
7
+ };
8
+ export {
9
+ afterTestHook,
10
+ jestConfigHook,
11
+ testingHooks
12
+ };
@@ -0,0 +1,14 @@
1
+ import { runTest, runJest } from "./runJest";
2
+ import { getModuleNameMapper } from "./utils";
3
+ import { DEFAULT_RESOLVER_PATH } from "./config";
4
+ import { TestConfigOperator } from "./config/testConfigOperator";
5
+ import { testingHooks } from "./hook";
6
+ export * from "./types";
7
+ export {
8
+ DEFAULT_RESOLVER_PATH,
9
+ TestConfigOperator,
10
+ getModuleNameMapper,
11
+ runJest,
12
+ runTest,
13
+ testingHooks
14
+ };
@@ -0,0 +1,102 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+ import yargs from "yargs/yargs";
22
+ import { runCLI } from "jest";
23
+ import { chalk } from "@modern-js/utils";
24
+ import { getJestUtils, patchConfig } from "./config";
25
+ import { debug } from "./utils";
26
+ const buildArgv = (rawArgv, config) => __async(void 0, null, function* () {
27
+ const argv = yield yargs(rawArgv).argv;
28
+ const result = {
29
+ $0: argv.$0,
30
+ _: argv._.slice(1)
31
+ };
32
+ Object.keys(argv).forEach((key) => {
33
+ if (key.includes("-") || key === "_") {
34
+ return;
35
+ }
36
+ result[key] = argv[key];
37
+ });
38
+ if (config) {
39
+ result.config = JSON.stringify(config);
40
+ }
41
+ return result;
42
+ });
43
+ const readResultsAndExit = (result, globalConfig) => {
44
+ const code = !result || result.success ? 0 : globalConfig.testFailureExitCode;
45
+ process.on("exit", () => {
46
+ if (typeof code === "number" && code !== 0) {
47
+ process.exitCode = code;
48
+ }
49
+ });
50
+ if (globalConfig.forceExit) {
51
+ if (!globalConfig.detectOpenHandles) {
52
+ console.warn(
53
+ `${chalk.bold(
54
+ "Force exiting Jest: "
55
+ )}Have you considered using \`--detectOpenHandles\` to detect async operations that kept running after all tests finished?`
56
+ );
57
+ }
58
+ process.exit(code);
59
+ } else if (!globalConfig.detectOpenHandles) {
60
+ setTimeout(() => {
61
+ console.warn(
62
+ chalk.yellow.bold(
63
+ "Jest did not exit one second after the test run has completed.\n\n"
64
+ ) + chalk.yellow(
65
+ "This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue."
66
+ )
67
+ );
68
+ }, 1e3).unref();
69
+ }
70
+ };
71
+ function runJest(_0) {
72
+ return __async(this, arguments, function* (config, pwd = process.cwd()) {
73
+ try {
74
+ const argvConfig = yield buildArgv(process.argv.slice(2), config);
75
+ const { results, globalConfig } = yield runCLI(argvConfig, [pwd]);
76
+ readResultsAndExit(results, globalConfig);
77
+ } catch (e) {
78
+ console.error(chalk.red((e == null ? void 0 : e.stack) || e));
79
+ process.exit(1);
80
+ }
81
+ });
82
+ }
83
+ function runTest(_0, _1) {
84
+ return __async(this, arguments, function* (api, config, pwd = process.cwd()) {
85
+ process.env.NODE_ENV = "test";
86
+ const jestUtils = getJestUtils(config);
87
+ yield patchConfig(jestUtils);
88
+ jestUtils.setJestUserConfig();
89
+ const hookRunners = api.useHookRunners();
90
+ const testConfigOperator = yield hookRunners.jestConfig(jestUtils, {
91
+ onLast: (input) => input
92
+ });
93
+ const finalConfig = testConfigOperator.getFinalConfig();
94
+ debug("Jest config:", finalConfig);
95
+ yield runJest(finalConfig, pwd);
96
+ yield hookRunners.afterTest();
97
+ });
98
+ }
99
+ export {
100
+ runJest,
101
+ runTest
102
+ };
File without changes
@@ -0,0 +1,66 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ import fs from "fs";
18
+ import path from "path";
19
+ import { createDebugger } from "@modern-js/utils";
20
+ const debug = createDebugger("test");
21
+ const readCompilerOptions = (pwd = process.cwd(), filename = "tsconfig.json") => {
22
+ let tsConfig = {};
23
+ let extendedCompilerOptions = {};
24
+ let tsconfigFile = "";
25
+ try {
26
+ const maybeTsconfigFile = path.join(pwd, filename);
27
+ if (fs.existsSync(maybeTsconfigFile)) {
28
+ tsconfigFile = maybeTsconfigFile;
29
+ } else {
30
+ tsconfigFile = require.resolve(filename);
31
+ }
32
+ ({ config: tsConfig } = require("typescript").parseConfigFileTextToJson(
33
+ tsconfigFile,
34
+ fs.readFileSync(tsconfigFile, "utf8")
35
+ ));
36
+ } catch (e) {
37
+ return {};
38
+ }
39
+ if (tsConfig.extends) {
40
+ extendedCompilerOptions = readCompilerOptions(
41
+ path.dirname(tsconfigFile),
42
+ tsConfig.extends
43
+ );
44
+ }
45
+ return __spreadValues(__spreadValues({}, extendedCompilerOptions), tsConfig.compilerOptions);
46
+ };
47
+ const getModuleNameMapper = (alias) => Object.keys(alias).reduce((memo, cur) => {
48
+ const aliasValue = Array.isArray(alias[cur]) ? alias[cur] : [alias[cur]];
49
+ const isFile = aliasValue.some((s) => s.endsWith(".js"));
50
+ if (cur === "@modern-js/runtime$") {
51
+ memo[`.+${cur}`] = aliasValue[0];
52
+ return memo;
53
+ }
54
+ if (isFile) {
55
+ memo[cur] = aliasValue[0];
56
+ }
57
+ const key = `^${cur}/(.*)$`;
58
+ const value = path.normalize(`${aliasValue}/$1`);
59
+ memo[key] = value;
60
+ return memo;
61
+ }, {});
62
+ export {
63
+ debug,
64
+ getModuleNameMapper,
65
+ readCompilerOptions
66
+ };
@@ -0,0 +1,58 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+ import { AsyncLocalStorage } from "async_hooks";
22
+ import { Server } from "@modern-js/prod-server";
23
+ const store = new AsyncLocalStorage();
24
+ const isInHandler = () => Boolean(store.getStore());
25
+ let server = null;
26
+ const createApp = (pwd, config, plugins, routes) => __async(void 0, null, function* () {
27
+ if (!server) {
28
+ config.output.path = "./";
29
+ server = new Server({
30
+ apiOnly: true,
31
+ pwd,
32
+ config,
33
+ internalPlugins: plugins,
34
+ routes
35
+ });
36
+ yield server.init();
37
+ }
38
+ const app = server.getRequestHandler();
39
+ return app;
40
+ });
41
+ const getApp = () => {
42
+ if (!server) {
43
+ throw new Error("please createApp first");
44
+ }
45
+ return server.getRequestHandler();
46
+ };
47
+ const closeServer = () => __async(void 0, null, function* () {
48
+ if (!server) {
49
+ throw new Error("please createApp first");
50
+ }
51
+ yield server.close();
52
+ });
53
+ export {
54
+ closeServer,
55
+ createApp,
56
+ getApp,
57
+ isInHandler
58
+ };
@@ -0,0 +1,4 @@
1
+ const bff_info_key = "modern_bff_info";
2
+ export {
3
+ bff_info_key
4
+ };
@@ -0,0 +1,149 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ var __async = (__this, __arguments, generator) => {
18
+ return new Promise((resolve, reject) => {
19
+ var fulfilled = (value) => {
20
+ try {
21
+ step(generator.next(value));
22
+ } catch (e) {
23
+ reject(e);
24
+ }
25
+ };
26
+ var rejected = (value) => {
27
+ try {
28
+ step(generator.throw(value));
29
+ } catch (e) {
30
+ reject(e);
31
+ }
32
+ };
33
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
34
+ step((generator = generator.apply(__this, __arguments)).next());
35
+ });
36
+ };
37
+ import path from "path";
38
+ import { isApiOnly } from "@modern-js/utils";
39
+ import {
40
+ getModuleNameMapper,
41
+ DEFAULT_RESOLVER_PATH
42
+ } from "../../base";
43
+ import { bff_info_key } from "./constant";
44
+ import { isBFFProject } from "./utils";
45
+ const setJestConfigForBFF = (_0) => __async(void 0, [_0], function* ({
46
+ pwd,
47
+ userConfig,
48
+ plugins,
49
+ routes,
50
+ utils
51
+ }) {
52
+ var _a;
53
+ const bffConfig = {
54
+ rootDir: path.join(pwd, "./api"),
55
+ setupFilesAfterEnv: [require.resolve("./setup")],
56
+ testEnvironment: "node",
57
+ testMatch: [`**/api/**/*.test.[jt]s`],
58
+ globals: {
59
+ "ts-jest": {
60
+ diagnostics: {
61
+ warnOnly: true
62
+ }
63
+ },
64
+ [bff_info_key]: {
65
+ appDir: pwd,
66
+ modernUserConfig: userConfig,
67
+ plugins,
68
+ routes
69
+ }
70
+ }
71
+ };
72
+ const { jestConfig } = utils;
73
+ const alias = ((_a = userConfig == null ? void 0 : userConfig.source) == null ? void 0 : _a.alias) || {};
74
+ const aliasMapper = getModuleNameMapper(alias);
75
+ const { moduleNameMapper } = jestConfig;
76
+ const transform = {
77
+ "\\.[jt]sx?$": require.resolve("ts-jest")
78
+ };
79
+ const apiOnly = yield isApiOnly(pwd);
80
+ const mergedModuleNameMapper = __spreadValues(__spreadValues({}, moduleNameMapper), aliasMapper);
81
+ const resolver = jestConfig.resolver || DEFAULT_RESOLVER_PATH;
82
+ const configFields = ["coverage", "collectCoverage", "testTimeout"];
83
+ const commonConfig = configFields.reduce((obj, field) => {
84
+ if (jestConfig.hasOwnProperty(field)) {
85
+ obj[field] = jestConfig[field];
86
+ }
87
+ return obj;
88
+ }, {});
89
+ if (!apiOnly) {
90
+ utils.setJestConfig(
91
+ {
92
+ projects: [
93
+ __spreadValues({}, jestConfig),
94
+ __spreadValues({
95
+ transform,
96
+ moduleNameMapper: mergedModuleNameMapper,
97
+ resolver
98
+ }, bffConfig)
99
+ ]
100
+ },
101
+ {
102
+ force: true
103
+ }
104
+ );
105
+ } else {
106
+ utils.setJestConfig(
107
+ {
108
+ projects: [
109
+ __spreadValues({
110
+ transform,
111
+ moduleNameMapper: mergedModuleNameMapper,
112
+ resolver
113
+ }, bffConfig)
114
+ ]
115
+ },
116
+ {
117
+ force: true
118
+ }
119
+ );
120
+ }
121
+ utils.setJestConfig(commonConfig);
122
+ });
123
+ var bff_default = () => ({
124
+ name: "@modern-js/testing-plugin-bff",
125
+ setup(api) {
126
+ return {
127
+ jestConfig: (utils, next) => __async(this, null, function* () {
128
+ const appContext = api.useAppContext();
129
+ const pwd = appContext.appDirectory;
130
+ if (!isBFFProject(pwd)) {
131
+ return next(utils);
132
+ }
133
+ const userConfig = api.useResolvedConfigContext();
134
+ yield setJestConfigForBFF({
135
+ pwd,
136
+ userConfig,
137
+ routes: appContext.serverRoutes,
138
+ plugins: appContext.serverInternalPlugins,
139
+ utils
140
+ });
141
+ return next(utils);
142
+ })
143
+ };
144
+ }
145
+ });
146
+ export {
147
+ bff_default as default,
148
+ setJestConfigForBFF
149
+ };