@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
package/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # @nest-yalc-2/jest-config
2
+
3
+ Reusable Jest configuration generators for YALC-style TypeScript and NestJS
4
+ projects.
5
+
6
+ Use this package when a consuming workspace wants the same ts-jest defaults,
7
+ coverage threshold handling, GraphQL AST transformer, and project generation
8
+ used by the YALC monorepo.
9
+
10
+ ## Installation
11
+
12
+ ```bash
13
+ npm install --save-dev @nest-yalc-2/jest-config
14
+ ```
15
+
16
+ ## Main Exports
17
+
18
+ - `jestConfGenerator` for creating multi-project Jest configs.
19
+ - `createE2EConfig` for e2e Jest configuration.
20
+ - `tsJestConfig` and `tsJestConfigE2E` for ts-jest setup.
21
+ - `coverageThreshold`, `coveragePathIgnorePatterns`, and default globals.
22
+
23
+ ## Example
24
+
25
+ ```ts
26
+ import { jestConfGenerator } from '@nest-yalc-2/jest-config';
27
+
28
+ export default jestConfGenerator(rootPath, projects, appProjects, {
29
+ skipProjects: ['types'],
30
+ });
31
+ ```
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@nest-yalc-2/jest-config",
3
+ "version": "1.3.3",
4
+ "description": "",
5
+ "main": "./src/index.js",
6
+ "exports": {
7
+ ".": "./src/index.js",
8
+ "./*": "./src/*.js"
9
+ },
10
+ "author": "",
11
+ "license": "MIT",
12
+ "types": "./src/index.d.ts",
13
+ "files": [
14
+ "dist",
15
+ "src"
16
+ ],
17
+ "dependencies": {
18
+ "tslib": "^2.6.3"
19
+ },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/Nek97/nestjs-yalc.git"
23
+ },
24
+ "bugs": {
25
+ "url": "https://github.com/Nek97/nestjs-yalc/issues"
26
+ },
27
+ "homepage": "https://github.com/Nek97/nestjs-yalc#readme",
28
+ "publishConfig": {
29
+ "access": "public"
30
+ }
31
+ }
@@ -0,0 +1,8 @@
1
+ # @nest-yalc-2/jest-config
2
+
3
+ ## 1.3.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Publish npm-safe README files for every package and prevent Jekyll landing-page
8
+ markup from being copied into npm tarballs.
package/src/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # @nest-yalc-2/jest-config
2
+
3
+ Reusable Jest configuration generators for YALC-style TypeScript and NestJS
4
+ projects.
5
+
6
+ Use this package when a consuming workspace wants the same ts-jest defaults,
7
+ coverage threshold handling, GraphQL AST transformer, and project generation
8
+ used by the YALC monorepo.
9
+
10
+ ## Installation
11
+
12
+ ```bash
13
+ npm install --save-dev @nest-yalc-2/jest-config
14
+ ```
15
+
16
+ ## Main Exports
17
+
18
+ - `jestConfGenerator` for creating multi-project Jest configs.
19
+ - `createE2EConfig` for e2e Jest configuration.
20
+ - `tsJestConfig` and `tsJestConfigE2E` for ts-jest setup.
21
+ - `coverageThreshold`, `coveragePathIgnorePatterns`, and default globals.
22
+
23
+ ## Example
24
+
25
+ ```ts
26
+ import { jestConfGenerator } from '@nest-yalc-2/jest-config';
27
+
28
+ export default jestConfGenerator(rootPath, projects, appProjects, {
29
+ skipProjects: ['types'],
30
+ });
31
+ ```
@@ -0,0 +1,8 @@
1
+ # @nest-yalc-2/jest-config
2
+
3
+ ## 1.3.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Publish npm-safe README files for every package and prevent Jekyll landing-page
8
+ markup from being copied into npm tarballs.
@@ -0,0 +1,31 @@
1
+ # @nest-yalc-2/jest-config
2
+
3
+ Reusable Jest configuration generators for YALC-style TypeScript and NestJS
4
+ projects.
5
+
6
+ Use this package when a consuming workspace wants the same ts-jest defaults,
7
+ coverage threshold handling, GraphQL AST transformer, and project generation
8
+ used by the YALC monorepo.
9
+
10
+ ## Installation
11
+
12
+ ```bash
13
+ npm install --save-dev @nest-yalc-2/jest-config
14
+ ```
15
+
16
+ ## Main Exports
17
+
18
+ - `jestConfGenerator` for creating multi-project Jest configs.
19
+ - `createE2EConfig` for e2e Jest configuration.
20
+ - `tsJestConfig` and `tsJestConfigE2E` for ts-jest setup.
21
+ - `coverageThreshold`, `coveragePathIgnorePatterns`, and default globals.
22
+
23
+ ## Example
24
+
25
+ ```ts
26
+ import { jestConfGenerator } from '@nest-yalc-2/jest-config';
27
+
28
+ export default jestConfGenerator(rootPath, projects, appProjects, {
29
+ skipProjects: ['types'],
30
+ });
31
+ ```
@@ -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
+ };
@@ -0,0 +1,2 @@
1
+ export * from './jest-conf.generator.js';
2
+ export * from './jest-def.config.js';
@@ -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"}
@@ -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.js';
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,228 @@
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 os_1 = __importDefault(require("os"));
43
+ const jest_def_config_js_1 = __importStar(require("./jest-def.config.js"));
44
+ const yargs_1 = __importDefault(require("yargs/yargs"));
45
+ const helpers_1 = require("yargs/helpers");
46
+ const maxWorkers = process.env.npm_config_jestworkers ||
47
+ process.env.JEST_WORKERS ||
48
+ os_1.default.cpus().length ||
49
+ 10;
50
+ console.log(`Max workers: ${maxWorkers}`);
51
+ function jestConfGenerator(rootPath, projectList, appProjectsSettings, options) {
52
+ const createProjectSets = (projects) => {
53
+ const _projectSets = {};
54
+ for (const app in appProjectsSettings) {
55
+ _projectSets[app] = projects.filter((p) => appProjectsSettings[app].deps.some((v) => p.displayName.startsWith(`unit/${v.name}`)));
56
+ }
57
+ return {
58
+ ..._projectSets,
59
+ all: projects,
60
+ };
61
+ };
62
+ const cacheDirBase = '/tmp/jest_rs/';
63
+ let projects = [];
64
+ const confFactory = (projName, proj, projects) => ({
65
+ ...(0, jest_def_config_js_1.default)(`${rootPath}/`, options.defaultConfOptions, (0, jest_def_config_js_1.tsJestConfig)(options.tsConfigPath?.(proj) ??
66
+ `${rootPath}/${proj.path}/tsconfig.${proj.type === 'library' ? 'lib' : 'app'}.json`, options.tsJestConfig)),
67
+ globals: (0, jest_def_config_js_1.globals)(),
68
+ displayName: `unit/${projName}`,
69
+ cacheDirectory: `${cacheDirBase}/unit/${projName}`,
70
+ rootDir: `${rootPath}/${proj.sourcePath}/`,
71
+ roots: [`${rootPath}/${proj.path}`],
72
+ maxWorkers,
73
+ setupFiles: [
74
+ `${__dirname}/jest.setup.js`,
75
+ ...(options.extraSetupFiles ?? []),
76
+ ],
77
+ coverageThreshold: (0, jest_def_config_js_1.coverageThreshold)(projects, options.defaultCoverageThreshold),
78
+ coveragePathIgnorePatterns: jest_def_config_js_1.coveragePathIgnorePatterns,
79
+ });
80
+ for (const projName of Object.keys(projectList)) {
81
+ const proj = projectList[projName];
82
+ if (!options.skipProjects?.includes(proj.path)) {
83
+ let conf = confFactory(projName, proj);
84
+ if (appProjectsSettings[projName]?.confOverride) {
85
+ conf = { ...conf, ...appProjectsSettings[projName].confOverride };
86
+ }
87
+ if (options.confOverrides) {
88
+ const overrideKey = Object.keys(options.confOverrides).find((v) => projName === v && v);
89
+ const overrideConf = overrideKey && options.confOverrides[overrideKey]
90
+ ? options.confOverrides[overrideKey]
91
+ : {};
92
+ conf = { ...conf, ...overrideConf };
93
+ }
94
+ projects.push(conf);
95
+ }
96
+ }
97
+ const projectSets = createProjectSets(projects);
98
+ const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
99
+ .command('$0 [paths]', 'test paths', (yargs) => {
100
+ return yargs
101
+ .positional('path', {
102
+ describe: 'test path',
103
+ type: 'string',
104
+ coerce: (arg) => {
105
+ return arg.split(',');
106
+ },
107
+ })
108
+ .option('proj', {
109
+ describe: 'comma-separated project names',
110
+ type: 'string',
111
+ coerce: (arg) => {
112
+ return arg.split(',');
113
+ },
114
+ })
115
+ .option('paths', {
116
+ describe: 'comma-separated test paths',
117
+ type: 'string',
118
+ coerce: (arg) => {
119
+ return arg.split(',');
120
+ },
121
+ });
122
+ })
123
+ .showHelpOnFail(false)
124
+ .fail(() => {
125
+ }).argv;
126
+ const selectedProj = argv.proj || process.env.npm_config_projects?.split(',') || 'all';
127
+ projects = Array.isArray(selectedProj)
128
+ ? Object.values(projectSets)
129
+ .flat()
130
+ .filter((value) => {
131
+ return selectedProj.some((projName) => {
132
+ return value.displayName === `unit/${projName}`;
133
+ });
134
+ })
135
+ : projectSets[selectedProj];
136
+ const paths = [];
137
+ if (argv.path) {
138
+ paths.push(argv.path);
139
+ }
140
+ if (argv.paths) {
141
+ paths.push(...argv.paths);
142
+ }
143
+ const possiblePath = (paths.length > 0 ? paths : null) ??
144
+ argv.testPathPattern?.[0] ??
145
+ argv.coverage ??
146
+ '';
147
+ console.debug('possiblePaths', possiblePath);
148
+ let config = {};
149
+ function getSubprojectPath(testPath) {
150
+ let subProjectPath = testPath.startsWith('.')
151
+ ? testPath.slice(1)
152
+ : testPath;
153
+ subProjectPath = subProjectPath.startsWith(rootPath)
154
+ ? subProjectPath.slice(rootPath.length)
155
+ : subProjectPath;
156
+ subProjectPath = subProjectPath.startsWith('/')
157
+ ? subProjectPath
158
+ : `/${subProjectPath}`;
159
+ for (const proj of Object.values(projectList)) {
160
+ const root = proj.path;
161
+ if (testPath.startsWith(root) && subProjectPath.length < root.length) {
162
+ subProjectPath = `/${root}`;
163
+ }
164
+ }
165
+ const lastIndexOfSrc = subProjectPath.lastIndexOf(`/src/`);
166
+ if (lastIndexOfSrc >= 0)
167
+ subProjectPath = subProjectPath.substring(0, lastIndexOfSrc);
168
+ return subProjectPath;
169
+ }
170
+ let selectedProjects = [];
171
+ if (possiblePath === true) {
172
+ if (Array.isArray(selectedProj)) {
173
+ selectedProjects.push(...projects.filter((p) => selectedProj.some((projName) => p.displayName.startsWith(`unit/${projName}`))));
174
+ }
175
+ else {
176
+ selectedProjects = projects;
177
+ }
178
+ }
179
+ else {
180
+ const testPaths = Array.isArray(possiblePath)
181
+ ? possiblePath
182
+ : [possiblePath];
183
+ console.debug('testPaths', testPaths);
184
+ const subProjectPathList = testPaths.map((v) => getSubprojectPath(v));
185
+ selectedProjects = projects.filter((v) => subProjectPathList.some((subProjectPath) => v.rootDir.startsWith(`${rootPath}${subProjectPath}`)));
186
+ if (Array.isArray(selectedProj)) {
187
+ selectedProjects.push(...projects.filter((p) => selectedProj.some((projName) => p.displayName.startsWith(`unit/${projName}`))));
188
+ }
189
+ console.debug('Subproject path:', subProjectPathList ?? ['']);
190
+ }
191
+ console.debug('selectedProjects', selectedProjects.map((v) => v.displayName));
192
+ const coverageFolder = selectedProjects.length > 1 ? '' : selectedProj;
193
+ config = {
194
+ coverageReporters: ['json-summary', 'json', 'lcov', 'text', 'clover'],
195
+ rootDir: `${rootPath}`,
196
+ coverageThreshold: (0, jest_def_config_js_1.coverageThreshold)(selectedProjects, options.defaultCoverageThreshold),
197
+ coverageDirectory: path.join(rootPath, options.coverageOutputPath?.(coverageFolder) ??
198
+ `var/coverage/${coverageFolder}`),
199
+ collectCoverageFrom: [
200
+ `**/*.{js,ts}`,
201
+ '!**/node_modules/**',
202
+ '!**/.warmup/**',
203
+ ],
204
+ };
205
+ config.projects = selectedProjects;
206
+ return config;
207
+ }
208
+ const createE2EConfig = (options) => {
209
+ let conf = {
210
+ ...(0, jest_def_config_js_1.default)(`${options.rootDirname}`, options.defaultConfOptions, (0, jest_def_config_js_1.tsJestConfigE2E)(path.resolve(`${options.e2eDirname}/tsconfig.json`), options.withGqlPlugins ?? false, options.tsJestConfig)),
211
+ testRegex: '.*\\.e2e-spec\\.ts$',
212
+ setupFilesAfterEnv: [`${options.e2eDirname}/jest.e2e-setup.ts`],
213
+ roots: [`${options.e2eDirname}`],
214
+ bail: 1,
215
+ };
216
+ if (options.alias) {
217
+ conf.displayName = `e2e/${options.alias}`;
218
+ }
219
+ if (options.confOverride) {
220
+ conf = {
221
+ ...conf,
222
+ ...options.confOverride,
223
+ };
224
+ }
225
+ return conf;
226
+ };
227
+ exports.createE2EConfig = createE2EConfig;
228
+ //# 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":"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"}