@temporalio/nyc-test-coverage 1.6.0 → 1.7.1

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,5 @@
1
+ import { CoverageMapData } from 'istanbul-lib-coverage';
2
+ declare global {
3
+ var __coverage__: CoverageMapData;
4
+ }
5
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=globalCoverage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globalCoverage.js","sourceRoot":"","sources":["../src/globalCoverage.ts"],"names":[],"mappings":""}
package/lib/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import { InjectedSinks, BundleOptions, WorkerOptions } from '@temporalio/worker'
3
3
  import { CoverageSinks } from './sinks';
4
4
  declare type WebpackConfigType = ReturnType<NonNullable<BundleOptions['webpackConfigHook']>>;
5
5
  export declare class WorkflowCoverage {
6
- coverageMap: libCoverage.CoverageMap;
6
+ coverageMapsData: libCoverage.CoverageMapData[];
7
7
  private hasCoverageGlobal;
8
8
  /**
9
9
  * Add all necessary coverage-specific logic to Worker config:
package/lib/index.js CHANGED
@@ -27,11 +27,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.WorkflowCoverage = void 0;
30
- const path_1 = __importDefault(require("path"));
30
+ const node_path_1 = __importDefault(require("node:path"));
31
31
  const libCoverage = __importStar(require("istanbul-lib-coverage"));
32
32
  class WorkflowCoverage {
33
33
  constructor() {
34
- this.coverageMap = libCoverage.createCoverageMap();
34
+ this.coverageMapsData = [];
35
35
  }
36
36
  // Check if running through nyc or some other Istanbul-based tool.
37
37
  // If not, any `workflowCoverage()` tools are a no-op.
@@ -130,7 +130,7 @@ class WorkflowCoverage {
130
130
  coverage: {
131
131
  merge: {
132
132
  fn: (_workflowInfo, testCoverage) => {
133
- this.coverageMap.merge(testCoverage);
133
+ this.coverageMapsData.push(testCoverage);
134
134
  },
135
135
  callDuringReplay: false,
136
136
  },
@@ -144,24 +144,40 @@ class WorkflowCoverage {
144
144
  if (!this.hasCoverageGlobal()) {
145
145
  return config;
146
146
  }
147
- const newRule = {
147
+ const rules = config?.module?.rules || [];
148
+ if (Object.keys(require.cache).some((file) => file.includes('ts-node/register'))) {
149
+ // ts-node is currently loaded
150
+ // ts-node and SWC doesn't translate TypeScript code the same way, which will cause
151
+ // line number mismatches in generated coverage reports.
152
+ const tsLoaderRule = {
153
+ test: /\.ts$/,
154
+ loader: require.resolve('ts-loader'),
155
+ exclude: /node_modules/,
156
+ };
157
+ const swcRuleIndex = rules.findIndex((rule) => {
158
+ const loader = rule.use?.loader;
159
+ return loader && loader.indexOf('swc-loader') >= 0;
160
+ });
161
+ rules[swcRuleIndex] = tsLoaderRule;
162
+ }
163
+ rules.push({
148
164
  use: {
149
165
  loader: require.resolve('./loader'),
150
166
  },
151
167
  enforce: 'post',
152
- test: /\.js$/,
168
+ test: /\.[tj]s$/,
153
169
  exclude: [
154
170
  /\/node_modules\//,
155
- path_1.default.dirname(require.resolve('@temporalio/common')),
156
- path_1.default.dirname(require.resolve('@temporalio/workflow')),
157
- path_1.default.dirname(require.resolve('@temporalio/nyc-test-coverage')),
171
+ node_path_1.default.dirname(require.resolve('@temporalio/common')),
172
+ node_path_1.default.dirname(require.resolve('@temporalio/workflow')),
173
+ node_path_1.default.dirname(require.resolve('@temporalio/nyc-test-coverage')),
158
174
  ],
159
- };
175
+ });
160
176
  return {
161
177
  ...config,
162
178
  module: {
163
179
  ...config?.module,
164
- rules: [...(config?.module?.rules || []), newRule],
180
+ rules,
165
181
  },
166
182
  };
167
183
  }
@@ -173,16 +189,12 @@ class WorkflowCoverage {
173
189
  if (!this.hasCoverageGlobal()) {
174
190
  return;
175
191
  }
176
- /* eslint-disable @typescript-eslint/ban-ts-comment */
177
- // @ts-ignore
178
- this.coverageMap.merge(global.__coverage__);
179
- const coverageMapData = Object.keys(this.coverageMap.data).reduce((cur, path) => {
180
- const fileCoverage = this.coverageMap.data[path];
181
- cur[path] = fileCoverage.data;
182
- return cur;
183
- }, {});
184
- // @ts-ignore
185
- global.__coverage__ = coverageMapData;
192
+ const coverageMap = libCoverage.createCoverageMap();
193
+ this.coverageMapsData.unshift(global.__coverage__);
194
+ for (const data of this.coverageMapsData)
195
+ coverageMap.merge(data);
196
+ this.coverageMapsData = [];
197
+ global.__coverage__ = coverageMap.data;
186
198
  }
187
199
  }
188
200
  exports.WorkflowCoverage = WorkflowCoverage;
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -11,8 +11,13 @@ const interceptors = () => ({
11
11
  /* eslint-disable @typescript-eslint/ban-ts-comment */
12
12
  // @ts-ignore
13
13
  const globalCoverage = global.__coverage__;
14
- coverage.merge(JSON.parse(JSON.stringify(globalCoverage)));
15
- clearCoverage(globalCoverage);
14
+ if (globalCoverage) {
15
+ // Send coverage data through the sink to be merged into the _real_ global coverage map
16
+ // Make a deep copy first, otherwise clearCoverage may wipe out the data
17
+ // before it actually get processed by the sink
18
+ coverage.merge(JSON.parse(JSON.stringify(globalCoverage)));
19
+ clearCoverage(globalCoverage);
20
+ }
16
21
  return next(input);
17
22
  },
18
23
  },
@@ -1 +1 @@
1
- {"version":3,"file":"interceptors.js","sourceRoot":"","sources":["../src/interceptors.ts"],"names":[],"mappings":";;;AACA,mDAAwE;AAGxE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,qBAAU,GAAiB,CAAC;AAEjD,0BAA0B;AACnB,MAAM,YAAY,GAAG,GAAyB,EAAE,CAAC,CAAC;IACvD,SAAS,EAAE;QACT;YACE,kBAAkB,CAAC,KAAK,EAAE,IAAI;gBAC5B,sDAAsD;gBACtD,aAAa;gBACb,MAAM,cAAc,GAAoB,MAAM,CAAC,YAAY,CAAC;gBAE5D,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC3D,aAAa,CAAC,cAAc,CAAC,CAAC;gBAE9B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;SACF;KACF;CACF,CAAC,CAAC;AAfU,QAAA,YAAY,gBAetB;AAEH,SAAS,aAAa,CAAC,QAAyB;IAC9C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;QACxC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;YACjD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SAC7B;KACF;AACH,CAAC"}
1
+ {"version":3,"file":"interceptors.js","sourceRoot":"","sources":["../src/interceptors.ts"],"names":[],"mappings":";;;AACA,mDAAwE;AAGxE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,qBAAU,GAAiB,CAAC;AAEjD,0BAA0B;AACnB,MAAM,YAAY,GAAG,GAAyB,EAAE,CAAC,CAAC;IACvD,SAAS,EAAE;QACT;YACE,kBAAkB,CAAC,KAAK,EAAE,IAAI;gBAC5B,sDAAsD;gBACtD,aAAa;gBACb,MAAM,cAAc,GAAoB,MAAM,CAAC,YAAY,CAAC;gBAC5D,IAAI,cAAc,EAAE;oBAClB,uFAAuF;oBACvF,wEAAwE;oBACxE,+CAA+C;oBAC/C,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;oBAC3D,aAAa,CAAC,cAAc,CAAC,CAAC;iBAC/B;gBAED,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;SACF;KACF;CACF,CAAC,CAAC;AAnBU,QAAA,YAAY,gBAmBtB;AAEH,SAAS,aAAa,CAAC,QAAyB;IAC9C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;QACxC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;YACjD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SAC7B;KACF;AACH,CAAC"}
package/lib/loader.js CHANGED
@@ -26,7 +26,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  const istanbul_lib_instrument_1 = require("istanbul-lib-instrument");
27
27
  const convert = __importStar(require("convert-source-map"));
28
28
  const instrumentWithIstanbulLoader = function (source, sourceMap) {
29
- const srcMap = sourceMap ?? convert.fromSource(source)?.sourcemap;
29
+ let srcMap = sourceMap ?? convert.fromSource(source)?.sourcemap;
30
+ if (typeof srcMap === 'string')
31
+ srcMap = JSON.parse(srcMap);
30
32
  const instrumenter = (0, istanbul_lib_instrument_1.createInstrumenter)({
31
33
  esModules: true,
32
34
  produceSourceMap: true,
package/lib/loader.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qEAA6D;AAC7D,4DAA8C;AAG9C,MAAM,4BAA4B,GAA6B,UAAU,MAAM,EAAE,SAAS;IACxF,MAAM,MAAM,GAAG,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAElE,MAAM,YAAY,GAAG,IAAA,4CAAkB,EAAC;QACtC,SAAS,EAAE,IAAI;QACf,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IAEH,YAAY,CAAC,UAAU,CACrB,MAAM,EACN,IAAI,CAAC,YAAY,EACjB,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE;QAC5B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,EAAE,YAAY,CAAC,aAAa,EAAS,CAAC,CAAC;IAChF,CAAC,EACD,MAAa,CACd,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,4BAA4B,CAAC"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qEAA6D;AAC7D,4DAA8C;AAG9C,MAAM,4BAA4B,GAA6B,UAAU,MAAM,EAAE,SAAS;IACxF,IAAI,MAAM,GAAG,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAChE,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE5D,MAAM,YAAY,GAAG,IAAA,4CAAkB,EAAC;QACtC,SAAS,EAAE,IAAI;QACf,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IAEH,YAAY,CAAC,UAAU,CACrB,MAAM,EACN,IAAI,CAAC,YAAY,EACjB,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE;QAC5B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,EAAE,YAAY,CAAC,aAAa,EAAS,CAAC,CAAC;IAChF,CAAC,EACD,MAAa,CACd,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,4BAA4B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@temporalio/nyc-test-coverage",
3
- "version": "1.6.0",
3
+ "version": "1.7.1",
4
4
  "description": "Temporal.io SDK code coverage integration",
5
5
  "keywords": [
6
6
  "temporal",
@@ -8,10 +8,15 @@
8
8
  "testing",
9
9
  "coverage"
10
10
  ],
11
- "homepage": "https://github.com/temporalio/sdk-typescript/tree/main/packages/testing",
11
+ "homepage": "https://github.com/temporalio/sdk-typescript/tree/main/packages/nyc=test-coverage",
12
12
  "bugs": {
13
13
  "url": "https://github.com/temporalio/sdk-typescript/issues"
14
14
  },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/temporalio/sdk-typescript.git",
18
+ "directory": "packages/nyc-test-coverage"
19
+ },
15
20
  "license": "MIT",
16
21
  "author": "Temporal Technologies Inc. <sdk@temporal.io>",
17
22
  "main": "lib/index.js",
@@ -21,11 +26,12 @@
21
26
  "src"
22
27
  ],
23
28
  "dependencies": {
24
- "@temporalio/worker": "1.6.0",
25
- "@temporalio/workflow": "1.6.0",
29
+ "@temporalio/worker": "1.7.1",
30
+ "@temporalio/workflow": "1.7.1",
26
31
  "convert-source-map": "^2.0.0",
27
32
  "istanbul-lib-coverage": "^3.2.0",
28
- "istanbul-lib-instrument": "^5.2.1"
33
+ "istanbul-lib-instrument": "^5.2.1",
34
+ "ts-loader": "^9.4.2"
29
35
  },
30
36
  "devDependencies": {
31
37
  "@types/convert-source-map": "^2.0.0",
@@ -36,5 +42,5 @@
36
42
  "publishConfig": {
37
43
  "access": "public"
38
44
  },
39
- "gitHead": "49c6b1341daef2b94a0a989d515cbf97b8b02fa7"
45
+ "gitHead": "368aa83c631555fc31cff25f4af8817d069878d8"
40
46
  }
@@ -0,0 +1,8 @@
1
+ import { CoverageMapData } from 'istanbul-lib-coverage';
2
+
3
+ declare global {
4
+ // eslint-disable-next-line no-var
5
+ var __coverage__: CoverageMapData;
6
+ }
7
+
8
+ export {};
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- import path from 'path';
1
+ import path from 'node:path';
2
2
  import * as libCoverage from 'istanbul-lib-coverage';
3
3
  import { InjectedSinks, BundleOptions, WorkerOptions } from '@temporalio/worker';
4
4
  import { CoverageSinks } from './sinks';
@@ -7,7 +7,7 @@ import { CoverageSinks } from './sinks';
7
7
  type WebpackConfigType = ReturnType<NonNullable<BundleOptions['webpackConfigHook']>>;
8
8
 
9
9
  export class WorkflowCoverage {
10
- coverageMap = libCoverage.createCoverageMap();
10
+ coverageMapsData: libCoverage.CoverageMapData[] = [];
11
11
 
12
12
  // Check if running through nyc or some other Istanbul-based tool.
13
13
  // If not, any `workflowCoverage()` tools are a no-op.
@@ -129,7 +129,7 @@ export class WorkflowCoverage {
129
129
  coverage: {
130
130
  merge: {
131
131
  fn: (_workflowInfo, testCoverage) => {
132
- this.coverageMap.merge(testCoverage);
132
+ this.coverageMapsData.push(testCoverage);
133
133
  },
134
134
  callDuringReplay: false,
135
135
  },
@@ -145,25 +145,45 @@ export class WorkflowCoverage {
145
145
  return config;
146
146
  }
147
147
 
148
- const newRule = {
148
+ const rules = config?.module?.rules || [];
149
+
150
+ if (Object.keys(require.cache).some((file) => file.includes('ts-node/register'))) {
151
+ // ts-node is currently loaded
152
+ // ts-node and SWC doesn't translate TypeScript code the same way, which will cause
153
+ // line number mismatches in generated coverage reports.
154
+ const tsLoaderRule = {
155
+ test: /\.ts$/,
156
+ loader: require.resolve('ts-loader'),
157
+ exclude: /node_modules/,
158
+ };
159
+
160
+ const swcRuleIndex = rules.findIndex((rule) => {
161
+ const loader = (rule as any).use?.loader;
162
+ return loader && loader.indexOf('swc-loader') >= 0;
163
+ });
164
+
165
+ rules[swcRuleIndex] = tsLoaderRule;
166
+ }
167
+
168
+ rules.push({
149
169
  use: {
150
170
  loader: require.resolve('./loader'),
151
171
  },
152
172
  enforce: 'post' as const,
153
- test: /\.js$/,
173
+ test: /\.[tj]s$/,
154
174
  exclude: [
155
175
  /\/node_modules\//,
156
176
  path.dirname(require.resolve('@temporalio/common')),
157
177
  path.dirname(require.resolve('@temporalio/workflow')),
158
178
  path.dirname(require.resolve('@temporalio/nyc-test-coverage')),
159
179
  ],
160
- };
180
+ });
161
181
 
162
182
  return {
163
183
  ...config,
164
184
  module: {
165
185
  ...config?.module,
166
- rules: [...(config?.module?.rules || []), newRule],
186
+ rules,
167
187
  },
168
188
  };
169
189
  }
@@ -177,21 +197,11 @@ export class WorkflowCoverage {
177
197
  return;
178
198
  }
179
199
 
180
- /* eslint-disable @typescript-eslint/ban-ts-comment */
181
- // @ts-ignore
182
- this.coverageMap.merge(global.__coverage__);
183
-
184
- const coverageMapData: libCoverage.CoverageMapData = Object.keys(this.coverageMap.data).reduce(
185
- (cur: libCoverage.CoverageMapData, path) => {
186
- const fileCoverage = this.coverageMap.data[path] as libCoverage.FileCoverage;
187
-
188
- cur[path] = fileCoverage.data;
189
- return cur;
190
- },
191
- {}
192
- );
200
+ const coverageMap = libCoverage.createCoverageMap();
201
+ this.coverageMapsData.unshift(global.__coverage__);
202
+ for (const data of this.coverageMapsData) coverageMap.merge(data);
203
+ this.coverageMapsData = [];
193
204
 
194
- // @ts-ignore
195
- global.__coverage__ = coverageMapData;
205
+ global.__coverage__ = coverageMap.data;
196
206
  }
197
207
  }
@@ -12,9 +12,13 @@ export const interceptors = (): WorkflowInterceptors => ({
12
12
  /* eslint-disable @typescript-eslint/ban-ts-comment */
13
13
  // @ts-ignore
14
14
  const globalCoverage: CoverageMapData = global.__coverage__;
15
-
16
- coverage.merge(JSON.parse(JSON.stringify(globalCoverage)));
17
- clearCoverage(globalCoverage);
15
+ if (globalCoverage) {
16
+ // Send coverage data through the sink to be merged into the _real_ global coverage map
17
+ // Make a deep copy first, otherwise clearCoverage may wipe out the data
18
+ // before it actually get processed by the sink
19
+ coverage.merge(JSON.parse(JSON.stringify(globalCoverage)));
20
+ clearCoverage(globalCoverage);
21
+ }
18
22
 
19
23
  return next(input);
20
24
  },
package/src/loader.ts CHANGED
@@ -3,7 +3,8 @@ import * as convert from 'convert-source-map';
3
3
  import type { LoaderDefinitionFunction } from 'webpack';
4
4
 
5
5
  const instrumentWithIstanbulLoader: LoaderDefinitionFunction = function (source, sourceMap): void {
6
- const srcMap = sourceMap ?? convert.fromSource(source)?.sourcemap;
6
+ let srcMap = sourceMap ?? convert.fromSource(source)?.sourcemap;
7
+ if (typeof srcMap === 'string') srcMap = JSON.parse(srcMap);
7
8
 
8
9
  const instrumenter = createInstrumenter({
9
10
  esModules: true,