@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.
- package/lib/globalCoverage.d.ts +5 -0
- package/lib/globalCoverage.js +3 -0
- package/lib/globalCoverage.js.map +1 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +32 -20
- package/lib/index.js.map +1 -1
- package/lib/interceptors.js +7 -2
- package/lib/interceptors.js.map +1 -1
- package/lib/loader.js +3 -1
- package/lib/loader.js.map +1 -1
- package/package.json +12 -6
- package/src/globalCoverage.ts +8 -0
- package/src/index.ts +32 -22
- package/src/interceptors.ts +7 -3
- package/src/loader.ts +2 -1
|
@@ -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
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|
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: /\.
|
|
168
|
+
test: /\.[tj]s$/,
|
|
153
169
|
exclude: [
|
|
154
170
|
/\/node_modules\//,
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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
|
|
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
|
-
|
|
177
|
-
|
|
178
|
-
this.
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/interceptors.js
CHANGED
|
@@ -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
|
-
|
|
15
|
-
|
|
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
|
},
|
package/lib/interceptors.js.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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,
|
|
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.
|
|
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/
|
|
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.
|
|
25
|
-
"@temporalio/workflow": "1.
|
|
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": "
|
|
45
|
+
"gitHead": "368aa83c631555fc31cff25f4af8817d069878d8"
|
|
40
46
|
}
|
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
|
-
|
|
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.
|
|
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
|
|
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: /\.
|
|
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
|
|
186
|
+
rules,
|
|
167
187
|
},
|
|
168
188
|
};
|
|
169
189
|
}
|
|
@@ -177,21 +197,11 @@ export class WorkflowCoverage {
|
|
|
177
197
|
return;
|
|
178
198
|
}
|
|
179
199
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
this.coverageMap.merge(
|
|
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
|
-
|
|
195
|
-
global.__coverage__ = coverageMapData;
|
|
205
|
+
global.__coverage__ = coverageMap.data;
|
|
196
206
|
}
|
|
197
207
|
}
|
package/src/interceptors.ts
CHANGED
|
@@ -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
|
-
|
|
17
|
-
|
|
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
|
-
|
|
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,
|