@nlabs/lex 1.48.4 → 1.48.5

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 (62) hide show
  1. package/.vscode/settings.json +1 -1
  2. package/README.md +293 -22
  3. package/__mocks__/compare-versions.js +3 -0
  4. package/__mocks__/fileMock.js +1 -0
  5. package/__mocks__/latest-version.js +1 -0
  6. package/__mocks__/react-markdown.js +12 -0
  7. package/babel.config.json +2 -1
  8. package/dist/Button.stories.d.ts +19 -0
  9. package/dist/LexConfig.d.ts +84 -0
  10. package/dist/LexConfig.js +1 -4
  11. package/dist/commands/ai/ai.d.ts +17 -0
  12. package/dist/commands/ai/index.d.ts +8 -0
  13. package/dist/commands/build/build.d.ts +18 -0
  14. package/dist/commands/clean/clean.d.ts +7 -0
  15. package/dist/commands/compile/compile.d.ts +2 -0
  16. package/dist/commands/config/config.d.ts +7 -0
  17. package/dist/commands/config/config.js +2 -2
  18. package/dist/commands/copy/copy.d.ts +6 -0
  19. package/dist/commands/create/create.d.ts +8 -0
  20. package/dist/commands/dev/dev.d.ts +11 -0
  21. package/dist/commands/init/init.d.ts +9 -0
  22. package/dist/commands/link/link.d.ts +6 -0
  23. package/dist/commands/lint/autofix.d.ts +2 -0
  24. package/dist/commands/lint/lint.d.ts +39 -0
  25. package/dist/commands/migrate/migrate.d.ts +7 -0
  26. package/dist/commands/publish/publish.d.ts +12 -0
  27. package/dist/commands/storybook/storybook.d.ts +13 -0
  28. package/dist/commands/storybook/storybook.js +3 -5
  29. package/dist/commands/test/test.d.ts +50 -0
  30. package/dist/commands/test/test.js +80 -10
  31. package/dist/commands/update/update.d.ts +9 -0
  32. package/dist/commands/upgrade/upgrade.d.ts +7 -0
  33. package/dist/commands/versions/versions.d.ts +13 -0
  34. package/dist/create/changelog.d.ts +6 -0
  35. package/dist/index.d.ts +33 -0
  36. package/dist/index.js +2 -1
  37. package/dist/lex.d.ts +2 -0
  38. package/dist/test-react/index.d.ts +8 -0
  39. package/dist/test-react/index.js +86 -0
  40. package/dist/types.d.ts +5 -0
  41. package/dist/utils/aiService.d.ts +9 -0
  42. package/dist/utils/app.d.ts +45 -0
  43. package/dist/utils/file.d.ts +8 -0
  44. package/dist/utils/file.js +9 -3
  45. package/dist/utils/log.d.ts +1 -0
  46. package/dist/utils/reactShim.d.ts +4 -0
  47. package/dist/utils/reactShim.js +82 -2
  48. package/jest.config.d.mts +50 -0
  49. package/jest.config.mjs +69 -0
  50. package/jest.config.template.cjs +63 -0
  51. package/jest.setup.js +18 -15
  52. package/jest.setup.template.js +18 -0
  53. package/package.json +24 -7
  54. package/tsconfig.build.json +8 -10
  55. package/tsconfig.lint.json +2 -2
  56. package/tsconfig.test.json +2 -2
  57. package/dist/dist/LexConfig.d.ts +0 -119
  58. package/dist/dist/utils/file.d.ts +0 -8
  59. package/dist/dist/utils/log.d.ts +0 -1
  60. package/dist/jest.config.lex.d.ts +0 -2
  61. package/jest.config.cjs +0 -43
  62. package/jest.config.lex.js +0 -118
package/jest.setup.js CHANGED
@@ -1,18 +1,4 @@
1
- // jest.mock('execa', () => jest.fn().mockResolvedValue({
2
- // stdout: '',
3
- // stderr: '',
4
- // exitCode: 0,
5
- // command: 'mocked-command',
6
- // pid: 123
7
- // }));
8
-
9
- jest.mock('ora');
10
-
11
- try {
12
- jest.mock('latest-version', () => jest.fn().mockResolvedValue('1.0.0'));
13
- } catch (error) {
14
- jest.doMock('latest-version', () => jest.fn().mockResolvedValue('1.0.0'));
15
- }
1
+ require('@testing-library/jest-dom');
16
2
 
17
3
  const originalReadFileSync = require('fs').readFileSync;
18
4
  require('fs').readFileSync = jest.fn((path, encoding) => {
@@ -29,3 +15,20 @@ require('fs').readFileSync = jest.fn((path, encoding) => {
29
15
  }
30
16
  return originalReadFileSync(path, encoding);
31
17
  });
18
+
19
+ global.ResizeObserver = jest.fn().mockImplementation(() => ({
20
+ observe: jest.fn(),
21
+ unobserve: jest.fn(),
22
+ disconnect: jest.fn(),
23
+ }));
24
+
25
+ global.matchMedia = jest.fn().mockImplementation(query => ({
26
+ matches: false,
27
+ media: query,
28
+ onchange: null,
29
+ addListener: jest.fn(),
30
+ removeListener: jest.fn(),
31
+ addEventListener: jest.fn(),
32
+ removeEventListener: jest.fn(),
33
+ dispatchEvent: jest.fn(),
34
+ }));
@@ -0,0 +1,18 @@
1
+ require('@testing-library/jest-dom');
2
+
3
+ global.ResizeObserver = jest.fn().mockImplementation(() => ({
4
+ observe: jest.fn(),
5
+ unobserve: jest.fn(),
6
+ disconnect: jest.fn(),
7
+ }));
8
+
9
+ global.matchMedia = jest.fn().mockImplementation(query => ({
10
+ matches: false,
11
+ media: query,
12
+ onchange: null,
13
+ addListener: jest.fn(),
14
+ removeListener: jest.fn(),
15
+ addEventListener: jest.fn(),
16
+ removeEventListener: jest.fn(),
17
+ dispatchEvent: jest.fn(),
18
+ }));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlabs/lex",
3
- "version": "1.48.4",
3
+ "version": "1.48.5",
4
4
  "description": "Lex",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -10,6 +10,11 @@
10
10
  ".": {
11
11
  "import": "./dist/index.js",
12
12
  "require": "./index.cjs"
13
+ },
14
+ "./test-react": {
15
+ "types": "./dist/test-react/index.d.ts",
16
+ "import": "./dist/test-react/index.js",
17
+ "require": "./dist/test-react/index.js"
13
18
  }
14
19
  },
15
20
  "types": "./dist/index.d.ts",
@@ -39,12 +44,12 @@
39
44
  "build": "NODE_ENV=production && rm -rf dist && esbuild $(find src -name '*.ts' -not -name '*.test.ts' -not -name '*.spec.ts') --platform=node --outdir=./dist --sourcemap=inline --target=node22 --format=esm --packages=external && npm run declarations",
40
45
  "build:all": "npm run build && npm run build:ai",
41
46
  "build:ai": "NODE_ENV=production && esbuild src/commands/ai/*.ts --platform=node --outdir=./dist/commands/ai --sourcemap=inline --target=node22 --format=esm --packages=external",
42
- "declarations": "tsc --declaration --emitDeclarationOnly --outDir dist",
47
+ "declarations": "tsc -p tsconfig.build.json",
43
48
  "clean": "rm -rf dist node_modules package-lock.json *.log coverage",
44
49
  "compile": "tsc -p tsconfig.build.json",
45
50
  "env": "LEX_CONFIG='{\"useTypescript\":true}'",
46
- "lint": "eslint ./src --fix || true",
47
- "lint:ai": "node ./dist/lex.js lint --fix || true",
51
+ "lint": "eslint ./src --fix",
52
+ "lint:ai": "node ./dist/lex.js lint --fix",
48
53
  "lint:rebuild": "npm run build && npm run lint:ai",
49
54
  "prepublishOnly": "npm run build",
50
55
  "publish:major": "npm version major && npm publish",
@@ -52,6 +57,19 @@
52
57
  "publish:patch": "npm version patch && npm publish",
53
58
  "test": "NODE_ENV=test && npm run lint && npm run test:unit",
54
59
  "test:unit": "NODE_ENV=test npm run env && npx jest",
60
+ "test:integration": "NODE_ENV=test && npx jest --testPathPattern=integration",
61
+ "test:cli": "NODE_ENV=test && npx jest --testPathPattern=cli",
62
+ "test:commands": "NODE_ENV=test && npm run test:cli && npm run test:integration",
63
+ "test:coverage": "NODE_ENV=test && npx jest --coverage --coverageDirectory=coverage --coverageReporters=text --coverageReporters=lcov --coverageReporters=html",
64
+ "test:coverage:upload": "codecov",
65
+ "type-check": "tsc --noEmit --project tsconfig.lint.json",
66
+ "type-check:build": "tsc --noEmit --project tsconfig.build.json",
67
+ "type-check:test": "tsc --noEmit --project tsconfig.test.json",
68
+ "package": "npm run build && npm pack",
69
+ "ci:install": "npm ci",
70
+ "ci:test": "npm run lint && npm run type-check && npm run test:unit",
71
+ "ci:build": "npm run build && npm run package",
72
+ "ci:deploy": "npm run prepublishOnly",
55
73
  "update": "npm-check-updates -i",
56
74
  "watch": "NODE_ENV=development rm -rf dist && npm run compile -w"
57
75
  },
@@ -81,6 +99,7 @@
81
99
  "@storybook/react-webpack5": "^9.0.17",
82
100
  "@tailwindcss/postcss": "4.1.11",
83
101
  "@testing-library/jest-dom": "^6.6.3",
102
+ "@testing-library/react": "^16.3.0",
84
103
  "@typescript-eslint/eslint-plugin": "^8.37.0",
85
104
  "@typescript-eslint/parser": "^8.37.0",
86
105
  "acorn": "^8.15.0",
@@ -134,7 +153,7 @@
134
153
  "luxon": "^3.7.1",
135
154
  "net": "^1.0.2",
136
155
  "npm-check-updates": "^18.0.1",
137
- "openai": "^5.9.2",
156
+ "openai": "^5.10.1",
138
157
  "ora": "8.2.0",
139
158
  "os-browserify": "^0.3.0",
140
159
  "path-browserify": "^1.0.1",
@@ -159,8 +178,6 @@
159
178
  "resolve": "^1.22.10",
160
179
  "rimraf": "^6.0.1",
161
180
  "semver": "^7.7.2",
162
- "source-map-loader": "^5.0.0",
163
- "source-map-support": "^0.5.21",
164
181
  "speed-measure-webpack-plugin": "^1.5.0",
165
182
  "static-site-generator-webpack-plugin": "^3.4.2",
166
183
  "storybook": "^9.0.17",
@@ -3,18 +3,15 @@
3
3
  "compilerOptions": {
4
4
  "allowJs": true,
5
5
  "allowSyntheticDefaultImports": true,
6
- "baseUrl": "./src",
7
6
  "declaration": true,
8
- "emitDeclarationOnly": false,
7
+ "emitDeclarationOnly": true,
9
8
  "esModuleInterop": true,
10
- "experimentalDecorators": true,
11
- "forceConsistentCasingInFileNames": true,
12
9
  "inlineSourceMap": true,
13
10
  "isolatedModules": true,
14
11
  "jsx": "react",
15
12
  "lib": [
16
- "ESNext",
17
- "DOM"
13
+ "dom",
14
+ "ESNext"
18
15
  ],
19
16
  "module": "NodeNext",
20
17
  "moduleResolution": "NodeNext",
@@ -22,14 +19,14 @@
22
19
  "noImplicitReturns": true,
23
20
  "noImplicitThis": true,
24
21
  "noUnusedLocals": false,
25
- "outDir": "./dist",
26
22
  "pretty": true,
27
- "removeComments": true,
28
23
  "resolveJsonModule": true,
24
+ "outDir": "./dist",
25
+ "rootDir": "./src",
29
26
  "skipLibCheck": true,
30
- "strict": true,
31
27
  "target": "ESNext",
32
28
  "types": [
29
+ "jest",
33
30
  "node"
34
31
  ]
35
32
  },
@@ -43,6 +40,7 @@
43
40
  "**/__tests__/**",
44
41
  "**/__mocks__/**",
45
42
  "dist",
46
- "node_modules"
43
+ "node_modules",
44
+ "jest.config.mjs"
47
45
  ]
48
46
  }
@@ -4,8 +4,8 @@
4
4
  "allowJs": true,
5
5
  "allowSyntheticDefaultImports": true,
6
6
  "baseUrl": "./src",
7
- "declaration": false,
8
- "emitDeclarationOnly": false,
7
+ "declaration": true,
8
+ "emitDeclarationOnly": true,
9
9
  "esModuleInterop": true,
10
10
  "experimentalDecorators": true,
11
11
  "forceConsistentCasingInFileNames": true,
@@ -3,8 +3,8 @@
3
3
  "allowJs": true,
4
4
  "allowSyntheticDefaultImports": true,
5
5
  "baseUrl": "./src",
6
- "declaration": false,
7
- "emitDeclarationOnly": false,
6
+ "declaration": true,
7
+ "emitDeclarationOnly": true,
8
8
  "esModuleInterop": true,
9
9
  "experimentalDecorators": true,
10
10
  "forceConsistentCasingInFileNames": true,
@@ -1,119 +0,0 @@
1
- export class LexConfig {
2
- static config: {
3
- ai: {
4
- provider: string;
5
- model: string;
6
- maxTokens: number;
7
- temperature: number;
8
- };
9
- configFiles: any[];
10
- copyFiles: any[];
11
- entryHTML: string;
12
- entryJs: string;
13
- esbuild: {
14
- minify: boolean;
15
- treeShaking: boolean;
16
- drop: string[];
17
- pure: string[];
18
- legalComments: string;
19
- splitting: boolean;
20
- metafile: boolean;
21
- sourcemap: boolean;
22
- };
23
- env: any;
24
- jest: {};
25
- outputFullPath: string;
26
- outputHash: boolean;
27
- outputPath: string;
28
- packageManager: string;
29
- preset: string;
30
- sourceFullPath: string;
31
- sourcePath: string;
32
- targetEnvironment: string;
33
- useGraphQl: boolean;
34
- useTypescript: boolean;
35
- webpack: {};
36
- };
37
- /**
38
- * Get the Lex package root directory, handling both development and installed environments
39
- */
40
- static getLexDir(): string;
41
- static set useTypescript(value: any);
42
- static updateConfig(updatedConfig: any): {
43
- ai: {
44
- provider: string;
45
- model: string;
46
- maxTokens: number;
47
- temperature: number;
48
- };
49
- configFiles: any[];
50
- copyFiles: any[];
51
- entryHTML: string;
52
- entryJs: string;
53
- esbuild: {
54
- minify: boolean;
55
- treeShaking: boolean;
56
- drop: string[];
57
- pure: string[];
58
- legalComments: string;
59
- splitting: boolean;
60
- metafile: boolean;
61
- sourcemap: boolean;
62
- };
63
- env: any;
64
- jest: {};
65
- outputFullPath: string;
66
- outputHash: boolean;
67
- outputPath: string;
68
- packageManager: string;
69
- preset: string;
70
- sourceFullPath: string;
71
- sourcePath: string;
72
- targetEnvironment: string;
73
- useGraphQl: boolean;
74
- useTypescript: boolean;
75
- webpack: {};
76
- };
77
- static addConfigParams(cmd: any, params: any): void;
78
- static parseConfig(cmd: any, isRoot?: boolean): Promise<void>;
79
- static checkTypescriptConfig(): void;
80
- static checkCompileTypescriptConfig(): void;
81
- static checkLintTypescriptConfig(): void;
82
- static checkTestTypescriptConfig(): void;
83
- }
84
- export namespace defaultConfigValues {
85
- namespace ai {
86
- let provider: string;
87
- let model: string;
88
- let maxTokens: number;
89
- let temperature: number;
90
- }
91
- let configFiles: any[];
92
- let copyFiles: any[];
93
- let entryHTML: string;
94
- let entryJs: string;
95
- namespace esbuild {
96
- let minify: boolean;
97
- let treeShaking: boolean;
98
- let drop: string[];
99
- let pure: string[];
100
- let legalComments: string;
101
- let splitting: boolean;
102
- let metafile: boolean;
103
- let sourcemap: boolean;
104
- }
105
- let env: any;
106
- let jest: {};
107
- let outputFullPath: string;
108
- let outputHash: boolean;
109
- let outputPath: string;
110
- let packageManager: string;
111
- let preset: string;
112
- let sourceFullPath: string;
113
- let sourcePath: string;
114
- let targetEnvironment: string;
115
- let useGraphQl: boolean;
116
- let useTypescript: boolean;
117
- let webpack: {};
118
- }
119
- export function getTypeScriptConfigPath(configName: any): string;
@@ -1,8 +0,0 @@
1
- export function findTailwindCssPath(): string;
2
- export function getDirName(): any;
3
- export function getFilePath(relativePath: any): any;
4
- export function getLexPackageJsonPath(): string;
5
- export function getNodePath(moduleName: any): any;
6
- export function relativeFilePath(filename: any, dirPath?: string, backUp?: number): any;
7
- export function relativeNodePath(filename: any, dirPath?: string, backUp?: number): any;
8
- export function resolveBinaryPath(binaryName: any, packageName: any): string;
@@ -1 +0,0 @@
1
- export function log(message: any, type?: string, quiet?: boolean): void;
@@ -1,2 +0,0 @@
1
- declare const _default: any;
2
- export default _default;
package/jest.config.cjs DELETED
@@ -1,43 +0,0 @@
1
- /**
2
- * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
- */
5
- const pack = require('./package.json');
6
-
7
- module.exports = {
8
- displayName: pack.name,
9
- testEnvironment: 'node',
10
- extensionsToTreatAsEsm: ['.ts'],
11
- moduleFileExtensions: ['js', 'ts', 'tsx', 'json'],
12
- moduleNameMapper: {
13
- '^(\\.{1,2}/.*)\\.js$': '$1',
14
- // Mock problematic ES modules
15
- '^execa$': '<rootDir>/__mocks__/execa.js',
16
- '^boxen$': '<rootDir>/__mocks__/boxen.js',
17
- '^chalk$': '<rootDir>/__mocks__/chalk.js',
18
- '^ora$': '<rootDir>/__mocks__/ora.js',
19
- // Mock modules that use import.meta.url
20
- '.*LexConfig.*': '<rootDir>/__mocks__/LexConfig.js',
21
- '.*build\\.js$': '<rootDir>/__mocks__/build.js',
22
- '.*versions\\.js$': '<rootDir>/__mocks__/versions.js',
23
- '.*compile\\.js$': '<rootDir>/__mocks__/compile.js',
24
- // Mock file utility to avoid import.meta.url issues
25
- 'utils/file\\.js$': '<rootDir>/__mocks__/file.js',
26
- '.*/utils/file\\.js$': '<rootDir>/__mocks__/file.js',
27
- '^(\\.{1,2}/)*utils/file\\.js$': '<rootDir>/__mocks__/file.js',
28
-
29
- },
30
- rootDir: './',
31
- testMatch: ['<rootDir>/**/*.test.ts*'],
32
- transform: {
33
- '^.+\\.ts$|^.+\\.tsx$': ['babel-jest', {
34
- presets: [
35
- ['@babel/preset-env', {targets: {node: 'current'}}],
36
- '@babel/preset-typescript'
37
- ]
38
- }]
39
- },
40
- collectCoverage: false,
41
- transformIgnorePatterns: [],
42
- setupFilesAfterEnv: ['./jest.setup.js']
43
- };
@@ -1,118 +0,0 @@
1
- import {existsSync} from 'fs';
2
- import {resolve as pathResolve} from 'path';
3
- import {URL} from 'url';
4
-
5
- import {getNodePath} from './dist/utils/file.js';
6
-
7
- const rootDir = process.cwd();
8
- const { jest, sourceFullPath, targetEnvironment, useTypescript } = JSON.parse(
9
- process.env.LEX_CONFIG || '{}'
10
- );
11
-
12
- const dirName = new URL('.', import.meta.url).pathname;
13
- const nodePath = pathResolve(dirName, './node_modules');
14
- const lexSetupFile = pathResolve(dirName, './jest.setup.js');
15
- const projectSetupFile = pathResolve(rootDir, './jest.setup.js');
16
- const setupFilesAfterEnv = [];
17
-
18
- setupFilesAfterEnv.push(lexSetupFile);
19
-
20
- if(existsSync(projectSetupFile)) {
21
- setupFilesAfterEnv.push(projectSetupFile);
22
- }
23
-
24
- let testEnvironment = 'node';
25
- let testEnvironmentOptions = {};
26
-
27
- if(targetEnvironment === 'web') {
28
- testEnvironment = 'jsdom';
29
- testEnvironmentOptions = {
30
- url: 'http://localhost'
31
- };
32
- }
33
-
34
- let moduleFileExtensions = ['js', 'json', 'cjs', 'mjs'];
35
- let testRegex = '(/__tests__/.*|\\.(test|spec|integration))\\.(js)?$';
36
- let transformIgnorePatterns = [];
37
-
38
- if(useTypescript) {
39
- moduleFileExtensions = ['js', 'ts', 'tsx', 'json', 'cjs', 'mjs'];
40
- testRegex = '(/__tests__/.*|\\.(test|spec|integration))\\.(ts|tsx)?$';
41
- transformIgnorePatterns = [];
42
- }
43
-
44
- const baseConfig = {
45
- collectCoverage: true,
46
- coverageDirectory: '<rootDir>/coverage',
47
- coveragePathIgnorePatterns: [
48
- '/node_modules/',
49
- '/dist',
50
- '/lib',
51
- '__snapshots__',
52
- '.d.ts'
53
- ],
54
- coverageReporters: ['html', 'text'],
55
- extensionsToTreatAsEsm: ['.ts', '.tsx'],
56
- moduleDirectories: ['node_modules', nodePath],
57
- moduleFileExtensions,
58
- moduleNameMapper: {
59
- '^chalk$': getNodePath('chalk/source/index.js'),
60
- '^#ansi-styles$': getNodePath('chalk/node_modules/ansi-styles/index.js'),
61
- '^#supports-color$': getNodePath('chalk/node_modules/supports-color/index.js'),
62
- '\\.(css|jpg|png|svg|txt)$': pathResolve(dirName, './emptyModule')
63
- },
64
- modulePaths: [rootDir, `${rootDir}/node_modules`, nodePath, sourceFullPath],
65
- resolver: pathResolve(dirName, './resolver.cjs'),
66
- rootDir,
67
- setupFiles: [
68
- getNodePath('core-js'),
69
- getNodePath('regenerator-runtime/runtime.js')
70
- ],
71
- setupFilesAfterEnv,
72
- testEnvironment,
73
- testEnvironmentOptions,
74
- testPathIgnorePatterns: ['/node_modules/', `${nodePath}/`],
75
- testRegex,
76
- transform: {
77
- ...(useTypescript ? {
78
- '\\.tsx?$': [getNodePath('ts-jest/dist/index.js'), {
79
- useESM: true,
80
- tsconfig: {
81
- useDefineForClassFields: true,
82
- esModuleInterop: true,
83
- allowSyntheticDefaultImports: true
84
- }
85
- }]
86
- } : {
87
- '\\.[jt]sx?$': getNodePath('babel-jest')
88
- }),
89
- '\\.(gql|graphql)$': getNodePath('jest-transform-graphql'),
90
- '\\.mjs$': [getNodePath('ts-jest/dist/index.js'), {
91
- useESM: true
92
- }],
93
- '\\.cjs$': getNodePath('babel-jest')
94
- },
95
- transformIgnorePatterns: [
96
- 'node_modules/(?!(chalk|@testing-library/jest-dom|zod|@nlabs)/)'
97
- ],
98
- verbose: true
99
- };
100
-
101
- const deepMerge = (target, source) => {
102
- if(!source) return target;
103
- const output = { ...target };
104
-
105
- Object.keys(source).forEach(key => {
106
- if(source[key] instanceof Object && key in target && target[key] instanceof Object && !Array.isArray(source[key]) && !Array.isArray(target[key])) {
107
- output[key] = {...target[key], ...source[key]};
108
- } else if(Array.isArray(source[key]) && Array.isArray(target[key])) {
109
- output[key] = [...target[key], ...source[key]];
110
- } else {
111
- output[key] = source[key];
112
- }
113
- });
114
-
115
- return output;
116
- };
117
-
118
- export default deepMerge(baseConfig, jest);