@nest-yalc-2/jest-config 1.3.3

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 (47) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +31 -0
  3. package/package.json +31 -0
  4. package/src/CHANGELOG.md +8 -0
  5. package/src/README.md +31 -0
  6. package/src/config/CHANGELOG.md +8 -0
  7. package/src/config/README.md +31 -0
  8. package/src/config/gql-plugin.js +25 -0
  9. package/src/config/index.d.ts +2 -0
  10. package/src/config/index.js +19 -0
  11. package/src/config/index.js.map +1 -0
  12. package/src/config/index.ts +2 -0
  13. package/src/config/jest-conf.generator.d.ts +53 -0
  14. package/src/config/jest-conf.generator.js +228 -0
  15. package/src/config/jest-conf.generator.js.map +1 -0
  16. package/src/config/jest-conf.generator.ts +368 -0
  17. package/src/config/jest-def.config.d.ts +20 -0
  18. package/src/config/jest-def.config.js +172 -0
  19. package/src/config/jest-def.config.js.map +1 -0
  20. package/src/config/jest-def.config.ts +210 -0
  21. package/src/config/jest.setup.d.ts +0 -0
  22. package/src/config/jest.setup.js +9 -0
  23. package/src/config/jest.setup.js.map +1 -0
  24. package/src/config/jest.setup.ts +39 -0
  25. package/src/config/package.json +22 -0
  26. package/src/config/tsconfig.dev.json +3 -0
  27. package/src/config/tsconfig.json +9 -0
  28. package/src/gql-plugin.js +25 -0
  29. package/src/index.d.ts +2 -0
  30. package/src/index.js +19 -0
  31. package/src/index.js.map +1 -0
  32. package/src/index.ts +2 -0
  33. package/src/jest-conf.generator.d.ts +53 -0
  34. package/src/jest-conf.generator.js +227 -0
  35. package/src/jest-conf.generator.js.map +1 -0
  36. package/src/jest-conf.generator.ts +362 -0
  37. package/src/jest-def.config.d.ts +20 -0
  38. package/src/jest-def.config.js +187 -0
  39. package/src/jest-def.config.js.map +1 -0
  40. package/src/jest-def.config.ts +225 -0
  41. package/src/jest.setup.d.ts +0 -0
  42. package/src/jest.setup.js +25 -0
  43. package/src/jest.setup.js.map +1 -0
  44. package/src/jest.setup.ts +58 -0
  45. package/src/package.json +22 -0
  46. package/src/tsconfig.dev.json +3 -0
  47. package/src/tsconfig.json +9 -0
@@ -0,0 +1,210 @@
1
+ /* istanbul ignore file */
2
+
3
+ import * as path from 'path';
4
+ import * as readTsConfig from 'get-tsconfig';
5
+ import { pathsToModuleNameMapper } from 'ts-jest';
6
+ import { defaults } from 'jest-config';
7
+ import type { JestConfigWithTsJest } from 'ts-jest';
8
+
9
+ export const coveragePathIgnorePatterns = [
10
+ '/env/dist/',
11
+ '/node_modules/',
12
+ '/database/seeds/',
13
+ '/database/migrations/',
14
+ '/test/feature/',
15
+ ];
16
+
17
+ export const globals = () => {
18
+ return {
19
+ __JEST_DISABLE_DB: true,
20
+ };
21
+ };
22
+
23
+ export const tsJestConfigE2E = (
24
+ tsConfPath = '',
25
+ withGqlPlugin = true,
26
+ overrideTsJestConfig?: any,
27
+ ) => {
28
+ const tsConfigFile = readTsConfig.getTsconfig(path.resolve(tsConfPath));
29
+ const { tsconfig, ...restTsJest } = overrideTsJestConfig ?? {};
30
+
31
+ const conf: any = {
32
+ diagnostics: false,
33
+ tsconfig: {
34
+ ...(tsConfigFile?.config.compilerOptions ?? {}),
35
+ ...(tsconfig ?? {}),
36
+ },
37
+ ...restTsJest,
38
+ };
39
+
40
+ if (withGqlPlugin) {
41
+ conf.astTransformers = {
42
+ before: [path.join(__dirname, 'gql-plugin.js')],
43
+ };
44
+ }
45
+
46
+ return conf;
47
+ };
48
+
49
+ export const tsJestConfig = (tsConfPath = '', overrideTsJestConfig?: any) => {
50
+ const tsConfigFile = readTsConfig.getTsconfig(
51
+ path.resolve(path.dirname(tsConfPath)),
52
+ path.basename(tsConfPath),
53
+ );
54
+
55
+ if (tsConfigFile?.path !== tsConfPath) {
56
+ throw new Error(`Cannot find ${tsConfPath}`);
57
+ }
58
+
59
+ const { tsconfig, ...restTsJest } = overrideTsJestConfig ?? {};
60
+
61
+ const config = {
62
+ tsconfig: {
63
+ ...(tsConfigFile?.config.compilerOptions ?? {}),
64
+ ...(tsconfig ?? {}),
65
+ },
66
+ diagnostics: false,
67
+ ...restTsJest,
68
+ };
69
+
70
+ return config;
71
+ };
72
+
73
+ export const coverageThreshold = (
74
+ projects: any[] = [],
75
+ defaultCoverageThreshold = {
76
+ branches: 100,
77
+ functions: 100,
78
+ lines: 100,
79
+ statements: 100,
80
+ },
81
+ ) => {
82
+ const coverage: Record<string, any> = {
83
+ global: {
84
+ ...defaultCoverageThreshold,
85
+ },
86
+ };
87
+
88
+ projects.map((project) => {
89
+ // /**
90
+ // * @todo should be removed and be set to 100% asap
91
+ // */
92
+ // switch (project.name) {
93
+ // case 'unit/common/crud-gen':
94
+ // branches = 92.27;
95
+ // functions = 98.92;
96
+ // lines = 98.75;
97
+ // statements = 98.5;
98
+ // break;
99
+ // default:
100
+ // branches = 100;
101
+ // break;
102
+ // }
103
+
104
+ coverage[project.rootDir] = {
105
+ ...defaultCoverageThreshold,
106
+ };
107
+
108
+ if (project?.coverageThreshold) {
109
+ coverage[project.rootDir] = {
110
+ ...coverage[project.rootDir],
111
+ ...project?.coverageThreshold,
112
+ };
113
+ }
114
+ });
115
+
116
+ return coverage;
117
+ };
118
+
119
+ export interface IDefaultConfOptions {
120
+ /** node modules to transform
121
+ * string array -> add extra esmodule to transform
122
+ * true -> transform esmodule only using the default array
123
+ * false -> disable esmodule transformation (default)
124
+ */
125
+ transformEsModules?: string[] | boolean;
126
+ tsJestConf?: any;
127
+ jestConf?: any;
128
+ }
129
+
130
+ /**
131
+ * for both unit and e2e
132
+ * @param dirname
133
+ * @returns
134
+ */
135
+ const defaultConf = (
136
+ dirname: string,
137
+ options: IDefaultConfOptions = {},
138
+ tsJestConfig: any = {},
139
+ ): JestConfigWithTsJest => {
140
+ const tsConfigFile = readTsConfig.getTsconfig(
141
+ path.join(dirname, 'tsconfig.json'),
142
+ );
143
+ const compilerOptions = tsConfigFile?.config.compilerOptions ?? {};
144
+
145
+ // We need this to make sure that some esm modules are transformed
146
+ // ref: https://github.com/nrwl/nx/issues/812
147
+ // ref: https://github.com/jaredpalmer/tsdx/issues/187#issuecomment-825536863
148
+
149
+ const config: JestConfigWithTsJest = {
150
+ rootDir: dirname,
151
+ modulePathIgnorePatterns: [
152
+ '<rootDir>/var/',
153
+ '<rootDir>/env/',
154
+ '<rootDir>/docs/',
155
+ '<rootDir>/dist/',
156
+ '<rootDir>/../dist/',
157
+ '<rootDir>/node_modules/',
158
+ '.*/dist/',
159
+ ],
160
+ preset: 'ts-jest/presets/default-esm',
161
+ testEnvironment: 'node',
162
+ moduleFileExtensions: [...defaults.moduleFileExtensions, 'ts'], // add typescript to the default options
163
+ testRegex: '.*\\.spec\\.ts$',
164
+ transform: {
165
+ '^.+\\.(t|j)sx?$': [
166
+ 'ts-jest',
167
+ {
168
+ useESM: true,
169
+ ...tsJestConfig,
170
+ },
171
+ ],
172
+ },
173
+ moduleNameMapper: {
174
+ // this fixes the issue with wrong line numbers in stack traces,
175
+ /** @see https://github.com/kulshekhar/ts-jest/issues/727 */
176
+ 'source-map-support/register': 'identity-obj-proxy',
177
+ // for ESM support
178
+ '^(\\.{1,2}/.*)\\.js$': '$1.ts',
179
+ ...pathsToModuleNameMapper(compilerOptions.paths ?? {}, {
180
+ prefix: `${dirname}/`,
181
+ useESM: true,
182
+ }),
183
+ },
184
+ errorOnDeprecated: true,
185
+ extensionsToTreatAsEsm: ['.ts'],
186
+ // injectGlobals: false,
187
+ ...options?.jestConf,
188
+ };
189
+
190
+ if (options.transformEsModules) {
191
+ const esModules = [
192
+ ...(Array.isArray(options.transformEsModules)
193
+ ? options.transformEsModules
194
+ : []),
195
+ 'aggregate-error',
196
+ 'clean-stack',
197
+ 'escape-string-regexp',
198
+ 'indent-string',
199
+ 'p-map',
200
+ ].join('|');
201
+
202
+ config.transformIgnorePatterns = [
203
+ `[/\\\\]node_modules[/\\\\](?!${esModules}).+\\.(js|jsx)$`,
204
+ ];
205
+ }
206
+
207
+ return config;
208
+ };
209
+
210
+ export default defaultConf;
File without changes
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ process.env.NODE_ENV = 'test';
3
+ if (!process.env.LISTENING_TO_UNHANDLED_REJECTION) {
4
+ process.on('unhandledRejection', (err) => {
5
+ throw err;
6
+ });
7
+ process.env.LISTENING_TO_UNHANDLED_REJECTION = 'true';
8
+ }
9
+ //# sourceMappingURL=jest.setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jest.setup.js","sourceRoot":"","sources":["jest.setup.ts"],"names":[],"mappings":";AAEA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC;AAI9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,CAAC;IAClD,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,EAAE;QACvC,MAAM,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,gCAAgC,GAAG,MAAM,CAAC;AACxD,CAAC"}
@@ -0,0 +1,39 @@
1
+ /* istanbul ignore file */
2
+
3
+ process.env.NODE_ENV = 'test';
4
+
5
+ // without this, jest won't fail with unhandled promises
6
+ // (e.g. missing awaits)
7
+ if (!process.env.LISTENING_TO_UNHANDLED_REJECTION) {
8
+ process.on('unhandledRejection', (err) => {
9
+ throw err;
10
+ });
11
+ // Avoid memory leak by adding too many listeners
12
+ process.env.LISTENING_TO_UNHANDLED_REJECTION = 'true';
13
+ }
14
+
15
+ // try {
16
+ // jest.unstable_mockModule('@nestjs/graphql', () => {
17
+ // class Fake {}
18
+ // return {
19
+ // ...jest.requireActual<any>('@nestjs/graphql'),
20
+ // InputType: () => jest.fn(),
21
+ // OmitType: () => Fake,
22
+ // PickType: () => Fake,
23
+ // PartialType: () => Fake,
24
+ // IntersectionType: () => Fake,
25
+ // };
26
+ // });
27
+ // // eslint-disable-next-line no-console
28
+ // console.debug('Mocked @nestjs/graphql');
29
+ // } catch (e) {
30
+ // // eslint-disable-next-line no-console
31
+ // console.debug("Can't mock @nestjs/graphql. Not installed?");
32
+ // }
33
+
34
+ // jest.mock('@nestjs/common', () => {
35
+ // return {
36
+ // ...jest.requireActual<any>('@nestjs/common'),
37
+ // Injectable: () => jest.fn(),
38
+ // };
39
+ // });
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@nest-yalc-2/jest-config",
3
+ "version": "1.3.3",
4
+ "description": "",
5
+ "main": "./index.ts",
6
+ "exports": {
7
+ ".": "./index.ts",
8
+ "./*": "./*.ts"
9
+ },
10
+ "scripts": {
11
+ "test": "echo \"Error: no test specified\" && exit 1"
12
+ },
13
+ "author": "",
14
+ "license": "MIT",
15
+ "types": "./index.ts",
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "dependencies": {
20
+ "tslib": "^2.6.3"
21
+ }
22
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "../../tsconfig.dev.json"
3
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "compilerOptions": {
3
+ "strict": true,
4
+ "esModuleInterop": false,
5
+ "allowSyntheticDefaultImports": true,
6
+ "moduleResolution": "node",
7
+ "module": "CommonJS",
8
+ }
9
+ }
@@ -0,0 +1,25 @@
1
+ /* istanbul ignore file */
2
+
3
+ /* eslint-disable @typescript-eslint/no-var-requires */
4
+ const transformer = require('@nestjs/graphql/plugin');
5
+
6
+ module.exports.name = 'nestjs-graphql-transformer';
7
+ // you should change the version number anytime you change the configuration below - otherwise, jest will not detect changes
8
+ module.exports.version = 4;
9
+
10
+ module.exports.factory = (cs) => {
11
+ return transformer.before(
12
+ {
13
+ typeFileNameSuffix: [
14
+ '.input.ts',
15
+ '.args.ts',
16
+ '.arg.ts',
17
+ '.entity.ts',
18
+ '.type.ts',
19
+ '.dto.ts',
20
+ ],
21
+ introspectComments: true,
22
+ },
23
+ cs.program, // "cs.tsCompiler.program" for older versions of Jest (<= v27)
24
+ );
25
+ };
package/src/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './jest-conf.generator.js';
2
+ export * from './jest-def.config.js';
package/src/index.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./jest-conf.generator.js"), exports);
18
+ __exportStar(require("./jest-def.config.js"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,uDAAqC"}
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './jest-conf.generator.js';
2
+ export * from './jest-def.config.js';
@@ -0,0 +1,53 @@
1
+ import type { JestConfigWithTsJest } from 'ts-jest';
2
+ import { IDefaultConfOptions } from './jest-def.config';
3
+ interface IAppDep {
4
+ name: string;
5
+ path: string;
6
+ }
7
+ export interface IAppProjSetting {
8
+ confOverride?: any;
9
+ deps: IAppDep[];
10
+ }
11
+ export interface IProjectInfo {
12
+ path: string;
13
+ sourcePath: string;
14
+ type: 'library' | 'application' | string;
15
+ }
16
+ export interface IOptions {
17
+ skipProjects?: string[];
18
+ confOverrides?: {
19
+ [key: string]: any;
20
+ };
21
+ defaultCoverageThreshold?: {
22
+ branches: number;
23
+ functions: number;
24
+ lines: number;
25
+ statements: number;
26
+ };
27
+ tsConfigPath?: {
28
+ (proj: IProjectInfo): string;
29
+ };
30
+ coverageOutputPath?: {
31
+ (subProjectPath: string): string;
32
+ };
33
+ defaultConfOptions?: IDefaultConfOptions;
34
+ tsJestConfig?: any;
35
+ extraSetupFiles?: string[];
36
+ setupFilesAfterEnv?: string[];
37
+ }
38
+ export declare function jestConfGenerator(rootPath: string, projectList: {
39
+ [key: string]: IProjectInfo;
40
+ }, appProjectsSettings: {
41
+ [key: string]: IAppProjSetting;
42
+ }, options: IOptions): JestConfigWithTsJest;
43
+ export interface E2EOptions {
44
+ alias?: string;
45
+ e2eDirname: string;
46
+ rootDirname: string;
47
+ defaultConfOptions?: IDefaultConfOptions;
48
+ confOverride?: JestConfigWithTsJest;
49
+ withGqlPlugins?: boolean;
50
+ tsJestConfig?: any;
51
+ }
52
+ export declare const createE2EConfig: (options: E2EOptions) => JestConfigWithTsJest;
53
+ export {};
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createE2EConfig = void 0;
40
+ exports.jestConfGenerator = jestConfGenerator;
41
+ const path = __importStar(require("path"));
42
+ const jest_def_config_1 = __importStar(require("./jest-def.config"));
43
+ const yargs_1 = __importDefault(require("yargs/yargs"));
44
+ const helpers_1 = require("yargs/helpers");
45
+ const maxWorkers = process.env.npm_config_jestworkers ||
46
+ process.env.JEST_WORKERS ||
47
+ '50%';
48
+ console.log(`Max workers: ${maxWorkers}`);
49
+ function jestConfGenerator(rootPath, projectList, appProjectsSettings, options) {
50
+ const createProjectSets = (projects) => {
51
+ const _projectSets = {};
52
+ for (const app in appProjectsSettings) {
53
+ _projectSets[app] = projects.filter((p) => appProjectsSettings[app].deps.some((v) => p.displayName.startsWith(`unit/${v.name}`)));
54
+ }
55
+ return {
56
+ ..._projectSets,
57
+ all: projects,
58
+ };
59
+ };
60
+ const cacheDirBase = '/tmp/jest_rs/';
61
+ let projects = [];
62
+ const confFactory = (projName, proj, _projects) => ({
63
+ ...(0, jest_def_config_1.default)(`${rootPath}/`, options.defaultConfOptions, (0, jest_def_config_1.tsJestConfig)(options.tsConfigPath?.(proj) ?? `${rootPath}/${proj.path}/tsconfig.json`, options.tsJestConfig)),
64
+ globals: (0, jest_def_config_1.globals)(),
65
+ displayName: `unit/${projName}`,
66
+ cacheDirectory: `${cacheDirBase}/unit/${projName}`,
67
+ rootDir: `${rootPath}/${proj.sourcePath}/`,
68
+ roots: [
69
+ `${rootPath}/${proj.path}`,
70
+ `${rootPath}/__mocks__`,
71
+ ],
72
+ setupFiles: [
73
+ `${__dirname}/jest.setup.js`,
74
+ ...(options.extraSetupFiles ?? []),
75
+ ],
76
+ coveragePathIgnorePatterns: jest_def_config_1.coveragePathIgnorePatterns,
77
+ });
78
+ for (const projName of Object.keys(projectList)) {
79
+ const proj = projectList[projName];
80
+ if (!options.skipProjects?.includes(projName) && !options.skipProjects?.includes(proj.path)) {
81
+ let conf = confFactory(projName, proj);
82
+ if (appProjectsSettings[projName]?.confOverride) {
83
+ conf = { ...conf, ...appProjectsSettings[projName].confOverride };
84
+ }
85
+ if (options.confOverrides) {
86
+ const overrideKey = Object.keys(options.confOverrides).find((v) => projName === v && v);
87
+ const overrideConf = overrideKey && options.confOverrides[overrideKey]
88
+ ? options.confOverrides[overrideKey]
89
+ : {};
90
+ conf = { ...conf, ...overrideConf };
91
+ }
92
+ projects.push(conf);
93
+ }
94
+ }
95
+ const projectSets = createProjectSets(projects);
96
+ const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
97
+ .command('$0 [paths]', 'test paths', (yargs) => {
98
+ return yargs
99
+ .positional('path', {
100
+ describe: 'test path',
101
+ type: 'string',
102
+ coerce: (arg) => {
103
+ return arg.split(',');
104
+ },
105
+ })
106
+ .option('proj', {
107
+ describe: 'comma-separated project names',
108
+ type: 'string',
109
+ coerce: (arg) => {
110
+ return arg.split(',');
111
+ },
112
+ })
113
+ .option('paths', {
114
+ describe: 'comma-separated test paths',
115
+ type: 'string',
116
+ coerce: (arg) => {
117
+ return arg.split(',');
118
+ },
119
+ });
120
+ })
121
+ .showHelpOnFail(false)
122
+ .fail(() => {
123
+ }).argv;
124
+ const selectedProj = argv.proj || process.env.npm_config_projects?.split(',') || 'all';
125
+ projects = Array.isArray(selectedProj)
126
+ ? Object.values(projectSets)
127
+ .flat()
128
+ .filter((value) => {
129
+ return selectedProj.some((projName) => {
130
+ return value.displayName === `unit/${projName}`;
131
+ });
132
+ })
133
+ : projectSets[selectedProj];
134
+ const paths = [];
135
+ if (argv.path) {
136
+ paths.push(argv.path);
137
+ }
138
+ if (argv.paths) {
139
+ paths.push(...argv.paths);
140
+ }
141
+ const possiblePath = (paths.length > 0 ? paths : null) ??
142
+ argv.testPathPattern?.[0] ??
143
+ argv.coverage ??
144
+ '';
145
+ console.debug('possiblePaths', possiblePath);
146
+ let config = {};
147
+ function getSubprojectPath(testPath) {
148
+ let subProjectPath = testPath.startsWith('.')
149
+ ? testPath.slice(1)
150
+ : testPath;
151
+ subProjectPath = subProjectPath.startsWith(rootPath)
152
+ ? subProjectPath.slice(rootPath.length)
153
+ : subProjectPath;
154
+ subProjectPath = subProjectPath.startsWith('/')
155
+ ? subProjectPath
156
+ : `/${subProjectPath}`;
157
+ for (const proj of Object.values(projectList)) {
158
+ const root = proj.path;
159
+ if (testPath.startsWith(root) && subProjectPath.length < root.length) {
160
+ subProjectPath = `/${root}`;
161
+ }
162
+ }
163
+ const lastIndexOfSrc = subProjectPath.lastIndexOf(`/src/`);
164
+ if (lastIndexOfSrc >= 0)
165
+ subProjectPath = subProjectPath.substring(0, lastIndexOfSrc);
166
+ return subProjectPath;
167
+ }
168
+ let selectedProjects = [];
169
+ if (possiblePath === true) {
170
+ if (Array.isArray(selectedProj)) {
171
+ selectedProjects.push(...projects.filter((p) => selectedProj.some((projName) => p.displayName.startsWith(`unit/${projName}`))));
172
+ }
173
+ else {
174
+ selectedProjects = projects;
175
+ }
176
+ }
177
+ else {
178
+ const testPaths = Array.isArray(possiblePath)
179
+ ? possiblePath
180
+ : [possiblePath];
181
+ console.debug('testPaths', testPaths);
182
+ const subProjectPathList = testPaths.map((v) => getSubprojectPath(v));
183
+ selectedProjects = projects.filter((v) => subProjectPathList.some((subProjectPath) => v.rootDir.startsWith(`${rootPath}${subProjectPath}`)));
184
+ if (Array.isArray(selectedProj)) {
185
+ selectedProjects.push(...projects.filter((p) => selectedProj.some((projName) => p.displayName.startsWith(`unit/${projName}`))));
186
+ }
187
+ console.debug('Subproject path:', subProjectPathList ?? ['']);
188
+ }
189
+ console.debug('selectedProjects', selectedProjects.map((v) => v.displayName));
190
+ const coverageFolder = selectedProjects.length > 1 ? '' : selectedProj;
191
+ config = {
192
+ maxWorkers,
193
+ coverageReporters: ['json-summary', 'json', 'lcov', 'text', 'clover'],
194
+ rootDir: `${rootPath}`,
195
+ coverageThreshold: (0, jest_def_config_1.coverageThreshold)(selectedProjects, options.defaultCoverageThreshold),
196
+ coverageDirectory: path.join(rootPath, options.coverageOutputPath?.(coverageFolder) ??
197
+ `var/coverage/${coverageFolder}`),
198
+ collectCoverageFrom: [
199
+ `**/*.{js,ts}`,
200
+ '!**/node_modules/**',
201
+ '!**/.warmup/**',
202
+ ],
203
+ };
204
+ config.projects = selectedProjects;
205
+ return config;
206
+ }
207
+ const createE2EConfig = (options) => {
208
+ let conf = {
209
+ ...(0, jest_def_config_1.default)(`${options.rootDirname}`, options.defaultConfOptions, (0, jest_def_config_1.tsJestConfigE2E)(path.resolve(`${options.e2eDirname}/tsconfig.json`), options.withGqlPlugins ?? false, options.tsJestConfig)),
210
+ testRegex: '.*\\.e2e-spec\\.ts$',
211
+ setupFilesAfterEnv: [`${options.e2eDirname}/jest.e2e-setup.ts`],
212
+ roots: [`${options.e2eDirname}`],
213
+ bail: 1,
214
+ };
215
+ if (options.alias) {
216
+ conf.displayName = `e2e/${options.alias}`;
217
+ }
218
+ if (options.confOverride) {
219
+ conf = {
220
+ ...conf,
221
+ ...options.confOverride,
222
+ };
223
+ }
224
+ return conf;
225
+ };
226
+ exports.createE2EConfig = createE2EConfig;
227
+ //# sourceMappingURL=jest-conf.generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jest-conf.generator.js","sourceRoot":"","sources":["jest-conf.generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiEA,8CA8PC;AA7TD,2CAA6B;AAG7B,qEAO2B;AAE3B,wDAAgC;AAChC,2CAAwC;AA0CxC,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,sBAAsB;IAClC,OAAO,CAAC,GAAG,CAAC,YAAY;IACxB,KAAK,CAAC;AAGR,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC;AAE1C,SAAgB,iBAAiB,CAC/B,QAAgB,EAChB,WAA4C,EAC5C,mBAEC,EACD,OAAiB;IAEjB,MAAM,iBAAiB,GAAG,CAAC,QAAe,EAAE,EAAE;QAC5C,MAAM,YAAY,GAA2B,EAAE,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;YACtC,YAAY,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACxC,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACvC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAC3C,CACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,GAAG,YAAY;YACf,GAAG,EAAE,QAAQ;SACd,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,eAAe,CAAC;IAErC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,MAAM,WAAW,GAAG,CAClB,QAAgB,EAChB,IAAkB,EAClB,SAAe,EACf,EAAE,CAAC,CAAC;QACJ,GAAG,IAAA,yBAAW,EACZ,GAAG,QAAQ,GAAG,EACd,OAAO,CAAC,kBAAkB,EAC1B,IAAA,8BAAY,EACV,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,IAAI,IAAI,CAAC,IAAI,gBAAgB,EACxE,OAAO,CAAC,YAAY,CACrB,CACF;QACD,OAAO,EAAE,IAAA,yBAAO,GAAE;QAElB,WAAW,EAAE,QAAQ,QAAQ,EAAE;QAC/B,cAAc,EAAE,GAAG,YAAY,SAAS,QAAQ,EAAE;QAClD,OAAO,EAAE,GAAG,QAAQ,IAAI,IAAI,CAAC,UAAU,GAAG;QAC1C,KAAK,EAAE;YACL,GAAG,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;YAC1B,GAAG,QAAQ,YAAY;SACxB;QACD,UAAU,EAAE;YACV,GAAG,SAAS,gBAAgB;YAC5B,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC;SACnC;QACD,0BAA0B,EAA1B,4CAA0B;KAC3B,CAAC,CAAC;IAEH,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5F,IAAI,IAAI,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAEvC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;gBAChD,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC,YAAY,EAAE,CAAC;YACpE,CAAC;YAED,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC1B,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CACzD,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,CAC3B,CAAC;gBAEF,MAAM,YAAY,GAChB,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC;oBAC/C,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC;oBACpC,CAAC,CAAC,EAAE,CAAC;gBAET,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,YAAY,EAAE,CAAC;YACtC,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAA2B,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAGxE,MAAM,IAAI,GAAQ,IAAA,eAAK,EAAC,IAAA,iBAAO,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC3C,OAAO,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;QAC7C,OAAO,KAAK;aACT,UAAU,CAAC,MAAM,EAAE;YAClB,QAAQ,EAAE,WAAW;YACrB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,CAAC,GAAW,EAAY,EAAE;gBAChC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;SACF,CAAC;aACD,MAAM,CAAC,MAAM,EAAE;YACd,QAAQ,EAAE,+BAA+B;YACzC,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,CAAC,GAAW,EAAY,EAAE;gBAChC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;SACF,CAAC;aACD,MAAM,CAAC,OAAO,EAAE;YACf,QAAQ,EAAE,4BAA4B;YACtC,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,CAAC,GAAW,EAAY,EAAE;gBAChC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;SACF,CAAC,CAAC;IACP,CAAC,CAAC;SACD,cAAc,CAAC,KAAK,CAAC;SAErB,IAAI,CAAC,GAAG,EAAE;IAEX,CAAC,CAAC,CAAC,IAAI,CAAC;IAEV,MAAM,YAAY,GAChB,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;IAEpE,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;QACpC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;aACzB,IAAI,EAAE;aACN,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAChB,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACpC,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,QAAQ,EAAE,CAAC;YAClD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACJ,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAE9B,MAAM,KAAK,GAAG,EAAE,CAAC;IAEjB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,YAAY,GAChB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ;QACb,EAAE,CAAC;IAGL,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IAE7C,IAAI,MAAM,GAAQ,EAAE,CAAC;IAErB,SAAS,iBAAiB,CAAC,QAAgB;QAEzC,IAAI,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;YAC3C,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACnB,CAAC,CAAC,QAAQ,CAAC;QACb,cAAc,GAAG,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC;YAClD,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvC,CAAC,CAAC,cAAc,CAAC;QAEnB,cAAc,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC;YAC7C,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC;QAIzB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAW,IAAI,CAAC,IAAI,CAAC;YAC/B,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACrE,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,cAAc,IAAI,CAAC;YACrB,cAAc,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QAE/D,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,gBAAgB,GAAU,EAAE,CAAC;IACjC,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,gBAAgB,CAAC,IAAI,CACnB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAC5B,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC7B,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,QAAQ,EAAE,CAAC,CAC7C,CACF,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,gBAAgB,GAAG,QAAQ,CAAC;QAC9B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAa,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;YACrD,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAGnB,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACtC,MAAM,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtE,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAC5C,kBAAkB,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,CACzC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,cAAc,EAAE,CAAC,CACrD,CACF,CAAC;QAEF,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,gBAAgB,CAAC,IAAI,CACnB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAC5B,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC7B,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,QAAQ,EAAE,CAAC,CAC7C,CACF,CACF,CAAC;QACJ,CAAC;QAGD,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,kBAAkB,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;IAGD,OAAO,CAAC,KAAK,CACX,kBAAkB,EAClB,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAChD,CAAC;IAGF,MAAM,cAAc,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;IAEvE,MAAM,GAAG;QACP,UAAU;QACV,iBAAiB,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;QACrE,OAAO,EAAE,GAAG,QAAQ,EAAE;QACtB,iBAAiB,EAAE,IAAA,mCAAiB,EAClC,gBAAgB,EAChB,OAAO,CAAC,wBAAwB,CACjC;QACD,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAC1B,QAAQ,EACR,OAAO,CAAC,kBAAkB,EAAE,CAAC,cAAc,CAAC;YAC5C,gBAAgB,cAAc,EAAE,CACjC;QACD,mBAAmB,EAAE;YACnB,cAAc;YACd,qBAAqB;YACrB,gBAAgB;SACjB;KACF,CAAC;IAEF,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC;IAEnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAYM,MAAM,eAAe,GAAG,CAAC,OAAmB,EAAwB,EAAE;IAC3E,IAAI,IAAI,GAAyB;QAC/B,GAAG,IAAA,yBAAW,EACZ,GAAG,OAAO,CAAC,WAAW,EAAE,EACxB,OAAO,CAAC,kBAAkB,EAC1B,IAAA,iCAAe,EACb,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,gBAAgB,CAAC,EACnD,OAAO,CAAC,cAAc,IAAI,KAAK,EAC/B,OAAO,CAAC,YAAY,CACrB,CACF;QACD,SAAS,EAAE,qBAAqB;QAChC,kBAAkB,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,oBAAoB,CAAC;QAC/D,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,EAAE,CAAC;KACR,CAAC;IAEF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;IAE5C,CAAC;IAED,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,IAAI,GAAG;YACL,GAAG,IAAI;YACP,GAAG,OAAO,CAAC,YAAY;SACxB,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AA9BW,QAAA,eAAe,mBA8B1B"}