skuba 3.17.0-beta.0 → 3.17.0-beta.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.
@@ -0,0 +1,74 @@
1
+ const path = require('path');
2
+
3
+ const { pathsToModuleNameMapper } = require('ts-jest/utils');
4
+ const {
5
+ sys,
6
+ findConfigFile,
7
+ readConfigFile,
8
+ parseJsonConfigFileContent,
9
+ } = require('typescript');
10
+
11
+ /**
12
+ * Set a default `src` module alias for backward compatibility.
13
+ *
14
+ * TODO: drop this default in skuba v4.
15
+ */
16
+ const DEFAULT_PATHS = { src: ['src'], 'src/*': ['src/*'] };
17
+
18
+ /**
19
+ * @returns {unknown}
20
+ */
21
+ const getConfigFromDisk = () => {
22
+ const filename =
23
+ findConfigFile('.', sys.fileExists.bind(this)) || 'tsconfig.json';
24
+
25
+ return readConfigFile(filename, sys.readFile.bind(this)).config;
26
+ };
27
+
28
+ module.exports.createModuleNameMapper = (getConfig = getConfigFromDisk) => {
29
+ try {
30
+ const json = getConfig();
31
+
32
+ const parsedConfig = parseJsonConfigFileContent(json, sys, '.');
33
+
34
+ const paths = Object.fromEntries(
35
+ Object.entries(parsedConfig.options.paths ?? DEFAULT_PATHS).flatMap(
36
+ ([key, values]) => [
37
+ [
38
+ key.replace(/\/$/, ''),
39
+ values.map((value) => value.replace(/\/$/, '')),
40
+ ],
41
+ ...(key.endsWith('/*')
42
+ ? [
43
+ [
44
+ key.replace(/\/\*$/, ''),
45
+ values.map((value) => value.replace(/\/\*$/, '')),
46
+ ],
47
+ ]
48
+ : [
49
+ [
50
+ path.join(key, '*'),
51
+ values.map((value) => path.join(value, '*')),
52
+ ],
53
+ ]),
54
+ ],
55
+ ),
56
+ );
57
+
58
+ const prefix = path.join('<rootDir>', parsedConfig.options.baseUrl || '.');
59
+
60
+ const moduleNameMapper = pathsToModuleNameMapper(paths, { prefix });
61
+
62
+ return Object.fromEntries(
63
+ Object.entries(moduleNameMapper).map(([key, values]) => [
64
+ key,
65
+ Array.isArray(values)
66
+ ? values.map((value) => path.normalize(value))
67
+ : path.normalize(values),
68
+ ]),
69
+ );
70
+ } catch {
71
+ // Bail out here to support zero-config mode.
72
+ return pathsToModuleNameMapper(DEFAULT_PATHS, { prefix: '<rootDir>' });
73
+ }
74
+ };
@@ -0,0 +1,75 @@
1
+ import { createModuleNameMapper } from './moduleNameMapper';
2
+
3
+ describe('moduleNameMapper', () => {
4
+ const act = (paths?: unknown, baseUrl?: string) =>
5
+ createModuleNameMapper(() => ({
6
+ compilerOptions: {
7
+ baseUrl,
8
+ paths,
9
+ },
10
+ }));
11
+
12
+ it('expands wildcard paths', () =>
13
+ expect(act({ 'src/*': ['src/*'], 'lib/wip/*': ['lib/wip/*'] }))
14
+ .toMatchInlineSnapshot(`
15
+ Object {
16
+ "^lib/wip$": "<rootDir>/lib/wip",
17
+ "^lib/wip/(.*)$": "<rootDir>/lib/wip/$1",
18
+ "^src$": "<rootDir>/src",
19
+ "^src/(.*)$": "<rootDir>/src/$1",
20
+ }
21
+ `));
22
+
23
+ it('expands non-wildcard paths', () =>
24
+ expect(act({ cli: ['cli'], 'src/': ['src/'] })).toMatchInlineSnapshot(`
25
+ Object {
26
+ "^cli$": "<rootDir>/cli",
27
+ "^cli/(.*)$": "<rootDir>/cli/$1",
28
+ "^src$": "<rootDir>/src",
29
+ "^src/(.*)$": "<rootDir>/src/$1",
30
+ }
31
+ `));
32
+
33
+ it('expands duplicate asymmetric paths', () =>
34
+ expect(
35
+ act({
36
+ jquery: ['node_modules/jquery/dist/jquery'],
37
+ 'jquery/*': ['node_modules/jquery/dist/jquery/*'],
38
+ }),
39
+ ).toMatchInlineSnapshot(`
40
+ Object {
41
+ "^jquery$": "<rootDir>/node_modules/jquery/dist/jquery",
42
+ "^jquery/(.*)$": "<rootDir>/node_modules/jquery/dist/jquery/$1",
43
+ }
44
+ `));
45
+
46
+ it('respects a base URL', () =>
47
+ expect(act({ cli: ['../cli'], 'app/*': ['app/*'] }, 'src'))
48
+ .toMatchInlineSnapshot(`
49
+ Object {
50
+ "^app$": "<rootDir>/src/app",
51
+ "^app/(.*)$": "<rootDir>/src/app/$1",
52
+ "^cli$": "<rootDir>/cli",
53
+ "^cli/(.*)$": "<rootDir>/cli/$1",
54
+ }
55
+ `));
56
+
57
+ it('respects no paths', () =>
58
+ expect(act({})).toMatchInlineSnapshot(`Object {}`));
59
+
60
+ it('falls back on undefined paths', () =>
61
+ expect(act(undefined)).toMatchInlineSnapshot(`
62
+ Object {
63
+ "^src$": "<rootDir>/src",
64
+ "^src/(.*)$": "<rootDir>/src/$1",
65
+ }
66
+ `));
67
+
68
+ it('falls back on invalid config', () =>
69
+ expect(act('INVALID')).toMatchInlineSnapshot(`
70
+ Object {
71
+ "^src$": "<rootDir>/src",
72
+ "^src/(.*)$": "<rootDir>/src/$1",
73
+ }
74
+ `));
75
+ });
@@ -0,0 +1,19 @@
1
+ const { defaults } = require('ts-jest/presets');
2
+
3
+ const TS_JEST_NAME = 'ts-jest';
4
+
5
+ /**
6
+ * Resolved path of the `ts-jest` preset.
7
+ *
8
+ * This allows Jest to resolve the preset even if it is installed to a nested
9
+ * `./node_modules/skuba/node_modules/ts-jest` directory.
10
+ */
11
+ const TS_JEST_PATH = require.resolve(TS_JEST_NAME);
12
+
13
+ // Rewrite `ts-jest` transformations using our resolved `TS_JEST_PATH`.
14
+ module.exports.transform = Object.fromEntries(
15
+ Object.entries(defaults.transform).map(([key, value]) => [
16
+ key,
17
+ value === TS_JEST_NAME ? TS_JEST_PATH : value,
18
+ ]),
19
+ );
package/jest-preset.js CHANGED
@@ -1,28 +1,14 @@
1
- const { defaults: tsJestDefaults } = require('ts-jest/presets');
1
+ const { defaults } = require('ts-jest/presets');
2
2
 
3
- const TS_JEST_NAME = 'ts-jest';
4
-
5
- /**
6
- * Resolved path of the `ts-jest` preset.
7
- *
8
- * This allows Jest to resolve the preset even if it is installed to a nested
9
- * `./node_modules/skuba/node_modules/ts-jest` directory.
10
- */
11
- const TS_JEST_PATH = require.resolve(TS_JEST_NAME);
12
-
13
- // Rewrite `ts-jest` transformations using our resolved `TS_JEST_PATH`.
14
- const tsJestTransform = Object.fromEntries(
15
- Object.entries(tsJestDefaults.transform).map(([key, value]) => [
16
- key,
17
- value === TS_JEST_NAME ? TS_JEST_PATH : value,
18
- ]),
19
- );
3
+ const { createModuleNameMapper } = require('./jest/moduleNameMapper');
4
+ const { transform } = require('./jest/transform');
20
5
 
21
6
  /** @type {import('@jest/types').Config.InitialOptions} */
22
7
  module.exports = {
23
- ...tsJestDefaults,
8
+ ...defaults,
24
9
 
25
- transform: tsJestTransform,
10
+ moduleNameMapper: createModuleNameMapper(),
11
+ transform,
26
12
 
27
13
  collectCoverageFrom: [
28
14
  '**/*.ts',
@@ -35,10 +21,6 @@ module.exports = {
35
21
  '!<rootDir>/jest.*.ts',
36
22
  ],
37
23
  coverageDirectory: 'coverage',
38
- moduleNameMapper: {
39
- '^src$': '<rootDir>/src',
40
- '^src/(.+)$': '<rootDir>/src/$1',
41
- },
42
24
  testEnvironment: 'node',
43
25
  testPathIgnorePatterns: [
44
26
  '/node_modules.*/',
@@ -1,3 +1,6 @@
1
1
  export type { Annotation } from './checkRun';
2
+ export { buildNameFromEnvironment } from './environment';
2
3
  export { createCheckRun } from './checkRun';
3
- export { buildNameFromEnvironment, enabledFromEnvironment, } from './environment';
4
+ export { enabledFromEnvironment } from './environment';
5
+ export { getPullRequestNumber } from './pullRequest';
6
+ export { putIssueComment } from './issueComment';
@@ -1,9 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.enabledFromEnvironment = exports.buildNameFromEnvironment = exports.createCheckRun = void 0;
4
- var checkRun_1 = require("./checkRun");
5
- Object.defineProperty(exports, "createCheckRun", { enumerable: true, get: function () { return checkRun_1.createCheckRun; } });
3
+ exports.putIssueComment = exports.getPullRequestNumber = exports.enabledFromEnvironment = exports.createCheckRun = exports.buildNameFromEnvironment = void 0;
6
4
  var environment_1 = require("./environment");
7
5
  Object.defineProperty(exports, "buildNameFromEnvironment", { enumerable: true, get: function () { return environment_1.buildNameFromEnvironment; } });
8
- Object.defineProperty(exports, "enabledFromEnvironment", { enumerable: true, get: function () { return environment_1.enabledFromEnvironment; } });
6
+ var checkRun_1 = require("./checkRun");
7
+ Object.defineProperty(exports, "createCheckRun", { enumerable: true, get: function () { return checkRun_1.createCheckRun; } });
8
+ var environment_2 = require("./environment");
9
+ Object.defineProperty(exports, "enabledFromEnvironment", { enumerable: true, get: function () { return environment_2.enabledFromEnvironment; } });
10
+ var pullRequest_1 = require("./pullRequest");
11
+ Object.defineProperty(exports, "getPullRequestNumber", { enumerable: true, get: function () { return pullRequest_1.getPullRequestNumber; } });
12
+ var issueComment_1 = require("./issueComment");
13
+ Object.defineProperty(exports, "putIssueComment", { enumerable: true, get: function () { return issueComment_1.putIssueComment; } });
9
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/github/index.ts"],"names":[],"mappings":";;;AACA,uCAA4C;AAAnC,0GAAA,cAAc,OAAA;AACvB,6CAGuB;AAFrB,uHAAA,wBAAwB,OAAA;AACxB,qHAAA,sBAAsB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/github/index.ts"],"names":[],"mappings":";;;AACA,6CAAyD;AAAhD,uHAAA,wBAAwB,OAAA;AACjC,uCAA4C;AAAnC,0GAAA,cAAc,OAAA;AACvB,6CAAuD;AAA9C,qHAAA,sBAAsB,OAAA;AAC/B,6CAAqD;AAA5C,mHAAA,oBAAoB,OAAA;AAC7B,+CAAiD;AAAxC,+GAAA,eAAe,OAAA"}
package/package.json CHANGED
@@ -7,11 +7,12 @@
7
7
  "engines": {
8
8
  "node": ">=12"
9
9
  },
10
- "version": "3.17.0-beta.0",
10
+ "version": "3.17.0-beta.5",
11
11
  "main": "lib/index.js",
12
12
  "typings": "lib/index.d.ts",
13
13
  "files": [
14
14
  "config/**/*",
15
+ "jest/**/*",
15
16
  "lib*/**/*.d.ts",
16
17
  "lib*/**/*.js",
17
18
  "lib*/**/*.js.map",