@teamscale/javascript-instrumenter 1.0.0-beta.2 → 1.0.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.
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teamscale/javascript-instrumenter",
3
- "version": "1.0.0-beta.2",
3
+ "version": "1.0.0-beta.5",
4
4
  "description": "JavaScript coverage instrumenter with coverage forwarding to a collector process",
5
5
  "main": "dist/src/main.js",
6
6
  "bin": "dist/src/main.js",
@@ -23,13 +23,12 @@
23
23
  "@babel/core": "^7.26.8",
24
24
  "@babel/plugin-transform-modules-commonjs": "^7.26.3",
25
25
  "@babel/preset-env": "^7.26.8",
26
- "@types/argparse": "^2.0.17",
27
26
  "@types/async": "^3.2.24",
28
27
  "@types/babel__generator": "^7.6.8",
29
28
  "@types/babel__traverse": "^7.20.6",
30
29
  "@types/bunyan": "^1.8.11",
31
30
  "@types/convert-source-map": "^2.0.3",
32
- "@types/glob": "^8.1.0",
31
+ "@types/glob": "^9.0.0",
33
32
  "@types/jest": "^29.5.14",
34
33
  "@types/node": "^22.13.4",
35
34
  "@types/ws": "^8.5.14",
@@ -52,7 +51,6 @@
52
51
  "@babel/traverse": "^7.26.8",
53
52
  "@babel/types": "^7.26.8",
54
53
  "@types/micromatch": "^4.0.9",
55
- "argparse": "^2.0.1",
56
54
  "async": "^3.2.6",
57
55
  "bunyan": "^1.8.15",
58
56
  "convert-source-map": "^2.0.0",
@@ -61,7 +59,6 @@
61
59
  "micromatch": "4.0.8",
62
60
  "mkdirp": "^3.0.1",
63
61
  "source-map": "0.7.4",
64
- "typescript-optional": "^2.0.1",
65
62
  "unload": "^2.4.1",
66
63
  "uuid": "^11.1.0",
67
64
  "web-worker": "^1.5.0"
package/dist/src/App.d.ts CHANGED
@@ -44,5 +44,9 @@ export declare class App {
44
44
  static runForConfigArguments(config: InstrumenterOptions, logger?: Logger): Promise<TaskResult>;
45
45
  private static createInstrumentationTask;
46
46
  private static createInstrumenter;
47
+ /**
48
+ * Processes the task result and produces console outputs, and possibly a process exit with a corresponding code.
49
+ */
50
+ private static finalizeAppRunWithConsoleOutputs;
47
51
  }
48
52
  //# sourceMappingURL=App.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/App.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAYtE,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAA4C,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAGlH;;GAEG;AACH,qBAAa,GAAG;IACf;;;OAGG;WACiB,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;IAI9C;;OAEG;WACiB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IA2BnE;;;;;;OAMG;WACW,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,2BAA2B,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,GAAG,mBAAmB;IAM1I;;;OAGG;WACW,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAwClE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IA+B1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAI/B;;;;;OAKG;WACW,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAoCtG,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAIxC,OAAO,CAAC,MAAM,CAAC,kBAAkB;CAajC"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/App.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAYtE,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAA4C,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAGlH;;GAEG;AACH,qBAAa,GAAG;IACf;;;OAGG;WACiB,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;IAI9C;;OAEG;WACiB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IA2BnE;;;;;;OAMG;WACW,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,2BAA2B,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,GAAG,mBAAmB;IAM1I;;;OAGG;WACW,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAwClE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IA+B1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAI/B;;;;;OAKG;WACW,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAqCtG,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAIxC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAcjC;;OAEG;mBACkB,gCAAgC;CAmDrD"}
package/dist/src/App.js CHANGED
@@ -207,7 +207,8 @@ class App {
207
207
  }
208
208
  const task = this.createInstrumentationTask(config);
209
209
  commons_1.Contract.require(task.elements.length > 0, 'The instrumentation task must not be empty.');
210
- return this.createInstrumenter(logger !== null && logger !== void 0 ? logger : this.buildDummyLogger(), task.collector, task.targetBucket).instrument(task);
210
+ const instrumentationResult = this.createInstrumenter(logger !== null && logger !== void 0 ? logger : this.buildDummyLogger(), task.collector, task.targetBucket).instrument(task);
211
+ return App.finalizeAppRunWithConsoleOutputs(instrumentationResult);
211
212
  }
212
213
  static createInstrumentationTask(config) {
213
214
  return new TaskBuilder_1.TaskBuilder().addFromConfig(config).build();
@@ -226,5 +227,57 @@ class App {
226
227
  return new Instrumenter_1.IstanbulInstrumenter(pathVariant2, logger, collector, targetBucket);
227
228
  }
228
229
  }
230
+ /**
231
+ * Processes the task result and produces console outputs, and possibly a process exit with a corresponding code.
232
+ */
233
+ static async finalizeAppRunWithConsoleOutputs(resultPromise) {
234
+ var _a, _b;
235
+ try {
236
+ const result = await resultPromise;
237
+ console.log('Instrumentation finished.');
238
+ console.log(`\tInstrumented: ${result.translated}`);
239
+ console.log(`\tExcluded: ${result.excluded}`);
240
+ console.log(`\tInstrumented from cache: ${result.translatedFromCache}`);
241
+ console.log(`\tAlready instrumented: ${result.alreadyInstrumented}`);
242
+ console.log(`\tUnsupported: ${result.unsupported}`);
243
+ console.log(`\tWith warning: ${result.warnings}`);
244
+ console.log(`\tFailed: ${result.failed}`);
245
+ if ((_a = result.task) === null || _a === void 0 ? void 0 : _a.originSourcePattern.patternsSpecified()) {
246
+ const stats = (_b = result.task) === null || _b === void 0 ? void 0 : _b.originSourcePattern.retrieveMatchingFiles();
247
+ console.log(`\tSource origin matches`);
248
+ console.log(`\t\tInclude patterns: [${stats.includePatterns}]`);
249
+ console.log(`\t\tExclude patterns: [${stats.excludePatterns}]`);
250
+ console.log(`\t\tInclude matches: ${stats.includeMatches.length}`);
251
+ console.log(`\t\tExclude matches: ${stats.excludeMatches.length}`);
252
+ console.log(`\t\tNeither matches: ${stats.neitherExcludedNorIncluded.length}`);
253
+ if (stats.includeMatches.length === 0 && stats.excludeMatches.length === 0) {
254
+ console.error('\nWARNING: Specified include/exclude patterns are expected to match at least once. ' +
255
+ 'None matched for this instrumenter invocation.\n');
256
+ }
257
+ }
258
+ if (result.translated === 0 && result.translatedFromCache === 0 && result.alreadyInstrumented === 0) {
259
+ console.error('\nWARNING: Each invocation of the JavaScript Instrumenter is supposed to match at \n' +
260
+ 'least one file to instrument; no file was matched for instrumentation in this invocation. \n' +
261
+ 'Please check the list of input files and the include/exclude patterns.\n');
262
+ }
263
+ if (result.failed > 0) {
264
+ console.error('FAILURE: The instrumentation failed for some files. Please check the log for details.\n');
265
+ }
266
+ return result;
267
+ }
268
+ catch (reason) {
269
+ if (reason instanceof commons_1.InvalidConfigurationException) {
270
+ // Do not print the stack trace for invalid configuration parameters from the user.
271
+ console.error(`Failed: ${reason.message}`);
272
+ }
273
+ else {
274
+ console.error('Failed: ', reason);
275
+ }
276
+ process.exit(1);
277
+ }
278
+ finally {
279
+ console.log('Bye bye.');
280
+ }
281
+ }
229
282
  }
230
283
  exports.App = App;
@@ -1,6 +1,5 @@
1
1
  import { FileExcludePattern, InstrumentationTask, OriginSourcePattern, SourceMapReference, TaskElement, TaskResult } from './Task';
2
2
  import { RawSourceMap, SourceMapConsumer } from 'source-map';
3
- import { Optional } from 'typescript-optional';
4
3
  import Logger from 'bunyan';
5
4
  import { CollectorSpecifier, CoverageBucketSpecifier } from '@src/vaccine/types';
6
5
  export declare const IS_INSTRUMENTED_TOKEN = "$IS_JS_PROFILER_INSTRUMENTED=true";
@@ -82,7 +81,7 @@ export declare function loadSourceMap(instrumentedSource: string, instrumentedSo
82
81
  * @param taskFile - The name of the file the `inputSource` is from.
83
82
  * @param externalSourceMapFile - An external source map file to consider.
84
83
  */
85
- export declare function loadInputSourceMap(inputSource: string, taskFile: string, externalSourceMapFile: Optional<SourceMapReference>): RawSourceMap | undefined;
84
+ export declare function loadInputSourceMap(inputSource: string, taskFile: string, externalSourceMapFile?: SourceMapReference): RawSourceMap | undefined;
86
85
  /**
87
86
  * Extract a sourcemap for a given code comment.
88
87
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Instrumenter.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/Instrumenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,kBAAkB,EAElB,mBAAmB,EACnB,mBAAmB,EAEnB,kBAAkB,EAElB,WAAW,EACX,UAAU,EACV,MAAM,QAAQ,CAAC;AAEhB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAM7D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAO5B,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAEjF,eAAO,MAAM,qBAAqB,sCAAsC,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC3D;AA0BD;;GAEG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IACzD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAS;gBAEX,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,YAAY,EAAE,uBAAuB;IAUzH;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IA2BhE;;;;;;;;OAQG;IACG,aAAa,CAClB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,kBAAkB,EAClC,aAAa,EAAE,mBAAmB,EAClC,eAAe,EAAE,MAAM,GAAG,SAAS,GACjC,OAAO,CAAC,UAAU,CAAC;YAsER,gBAAgB;IA8C9B,OAAO,CAAC,eAAe;IA0BvB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IAgBpC,+EAA+E;IAC/E,OAAO,CAAC,SAAS;IAUjB,+EAA+E;IAC/E,OAAO,CAAC,UAAU;CAYlB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAClC,kBAAkB,EAAE,MAAM,EAC1B,0BAA0B,EAAE,MAAM,GAChC,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAUxC;AAsBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CACjC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,qBAAqB,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GACjD,YAAY,GAAG,SAAS,CAU1B;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAwC7G"}
1
+ {"version":3,"file":"Instrumenter.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/Instrumenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,kBAAkB,EAElB,mBAAmB,EACnB,mBAAmB,EAEnB,kBAAkB,EAElB,WAAW,EACX,UAAU,EACV,MAAM,QAAQ,CAAC;AAEhB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAM7D,OAAO,MAAM,MAAM,QAAQ,CAAC;AAO5B,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAEjF,eAAO,MAAM,qBAAqB,sCAAsC,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC3D;AA0BD;;GAEG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IACzD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAS;gBAEX,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,YAAY,EAAE,uBAAuB;IAUzH;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IA2BhE;;;;;;;;OAQG;IACG,aAAa,CAClB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,kBAAkB,EAClC,aAAa,EAAE,mBAAmB,EAClC,eAAe,EAAE,MAAM,GAAG,SAAS,GACjC,OAAO,CAAC,UAAU,CAAC;YAsER,gBAAgB;IA8C9B,OAAO,CAAC,eAAe;IA0BvB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IAgBpC,+EAA+E;IAC/E,OAAO,CAAC,SAAS;IAUjB,+EAA+E;IAC/E,OAAO,CAAC,UAAU;CAYlB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAClC,kBAAkB,EAAE,MAAM,EAC1B,0BAA0B,EAAE,MAAM,GAChC,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAUxC;AAsBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CACjC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,qBAAqB,CAAC,EAAE,kBAAkB,GACxC,YAAY,GAAG,SAAS,CAU1B;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAwC7G"}
@@ -48,7 +48,6 @@ const fs = __importStar(require("fs"));
48
48
  const mkdirp = __importStar(require("mkdirp"));
49
49
  const path = __importStar(require("path"));
50
50
  const convertSourceMap = __importStar(require("convert-source-map"));
51
- const typescript_optional_1 = require("typescript-optional");
52
51
  const async_1 = __importDefault(require("async"));
53
52
  const WebToolkit_1 = require("./WebToolkit");
54
53
  const FileSystem_1 = require("./FileSystem");
@@ -283,7 +282,7 @@ exports.IstanbulInstrumenter = IstanbulInstrumenter;
283
282
  * @param instrumentedSourceFileName - The file name to assume for the file name.
284
283
  */
285
284
  async function loadSourceMap(instrumentedSource, instrumentedSourceFileName) {
286
- const instrumentedSourceMap = loadInputSourceMap(instrumentedSource, instrumentedSourceFileName, typescript_optional_1.Optional.empty());
285
+ const instrumentedSourceMap = loadInputSourceMap(instrumentedSource, instrumentedSourceFileName, undefined);
287
286
  if (instrumentedSourceMap) {
288
287
  return await new source_map_1.SourceMapConsumer(instrumentedSourceMap);
289
288
  }
@@ -308,8 +307,8 @@ function loadInputSourceMapsStandard(taskFile, bundleFile, externalSourceMapFile
308
307
  * @param externalSourceMapFile - An external source map file to consider.
309
308
  */
310
309
  function loadInputSourceMap(inputSource, taskFile, externalSourceMapFile) {
311
- if (externalSourceMapFile.isPresent()) {
312
- const sourceMapOrigin = externalSourceMapFile.get();
310
+ if (externalSourceMapFile) {
311
+ const sourceMapOrigin = externalSourceMapFile;
313
312
  if (!(sourceMapOrigin instanceof Task_1.SourceMapFileReference)) {
314
313
  throw new commons_1.IllegalArgumentException('Type of source map not yet supported!');
315
314
  }
@@ -1 +1 @@
1
- {"version":3,"file":"InstrumenterConfig.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/InstrumenterConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,uBAAuB,EAGvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAsBF;;;GAGG;AACH,wBAAgB,wCAAwC,IAAI,uBAAuB,CAqHlF"}
1
+ {"version":3,"file":"InstrumenterConfig.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/InstrumenterConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,uBAAuB,EAGvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAGxC;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAsBF;;;GAGG;AACH,wBAAgB,wCAAwC,IAAI,uBAAuB,CA0HlF"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildInstrumenterConfigurationParameters = buildInstrumenterConfigurationParameters;
4
4
  const commons_1 = require("@cqse/commons");
5
+ const commons_2 = require("@cqse/commons");
5
6
  const CONFIG_GROUP_INPUT = {
6
7
  order: 1,
7
8
  title: 'Instrumenter Input and Output'
@@ -115,6 +116,11 @@ function buildInstrumenterConfigurationParameters() {
115
116
  }
116
117
  });
117
118
  parameters.addRequiredArgumentFor('commit');
119
+ parameters.addArgumentCheck(options => {
120
+ if (!(0, commons_2.isValidCommitInfo)(options.commit)) {
121
+ return 'The given commit must be of the form <branch>:<UNIX timestamp in milliseconds> or a Git hash.';
122
+ }
123
+ });
118
124
  parameters.addArgumentCheck(options => {
119
125
  if (!options.collector && !options.relativeCollector) {
120
126
  return 'Either a collector URL or a relative collector URL must be specified.';
@@ -1,4 +1,3 @@
1
- import { Optional } from 'typescript-optional';
2
1
  import { CollectorSpecifier, CoverageBucketSpecifier } from '../vaccine/types';
3
2
  /**
4
3
  * An abstract source map type.
@@ -39,7 +38,7 @@ export declare class TaskElement {
39
38
  /** The destination file */
40
39
  readonly toFile: string;
41
40
  /** An external source map file relevant for the file at hand */
42
- readonly externalSourceMapFile: Optional<SourceMapReference>;
41
+ readonly externalSourceMapFile?: SourceMapReference;
43
42
  constructor(fromFile: string, toFile: string, externalSourceMap?: SourceMapReference);
44
43
  /**
45
44
  * Is it an in-place instrumentation task?
@@ -1 +1 @@
1
- {"version":3,"file":"Task.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/Task.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Task.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/Task.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.SourceMapFileReference = exports.TaskResult = exports.InstrumentationTask = exports.FileExcludePattern = exports.OriginSourcePattern = exports.TaskElement = exports.SourceMapReference = void 0;
7
7
  exports.createCollectorSpecifier = createCollectorSpecifier;
8
- const typescript_optional_1 = require("typescript-optional");
9
8
  const commons_1 = require("@cqse/commons");
10
9
  const micromatch_1 = __importDefault(require("micromatch"));
11
10
  const RelativeCollectorPatternParser_1 = require("./RelativeCollectorPatternParser");
@@ -23,7 +22,7 @@ class TaskElement {
23
22
  constructor(fromFile, toFile, externalSourceMap) {
24
23
  this.fromFile = commons_1.Contract.requireDefined(fromFile);
25
24
  this.toFile = commons_1.Contract.requireDefined(toFile);
26
- this.externalSourceMapFile = typescript_optional_1.Optional.ofNullable(externalSourceMap);
25
+ this.externalSourceMapFile = externalSourceMap;
27
26
  }
28
27
  /**
29
28
  * Is it an in-place instrumentation task?
package/dist/src/main.js CHANGED
@@ -1,74 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
3
  Object.defineProperty(exports, "__esModule", { value: true });
37
4
  const App_1 = require("./App");
38
- const commons_1 = require("@cqse/commons");
39
- const process = __importStar(require("node:process"));
40
- // Run the instrumenter and print the results to the console.
41
- App_1.App.run()
42
- .then(result => {
43
- var _a, _b;
44
- console.log('Instrumentation finished.');
45
- console.log(`\tInstrumented: ${result.translated}`);
46
- console.log(`\tExcluded: ${result.excluded}`);
47
- console.log(`\tInstrumented from cache: ${result.translatedFromCache}`);
48
- console.log(`\tAlready instrumented: ${result.alreadyInstrumented}`);
49
- console.log(`\tUnsupported: ${result.unsupported}`);
50
- console.log(`\tWith warning: ${result.warnings}`);
51
- console.log(`\tFailed: ${result.failed}`);
52
- if ((_a = result.task) === null || _a === void 0 ? void 0 : _a.originSourcePattern.patternsSpecified()) {
53
- const stats = (_b = result.task) === null || _b === void 0 ? void 0 : _b.originSourcePattern.retrieveMatchingFiles();
54
- console.log(`\tSource origin matches`);
55
- console.log(`\t\tInclude patterns: [${stats.includePatterns}]`);
56
- console.log(`\t\tExclude patterns: [${stats.excludePatterns}]`);
57
- console.log(`\t\tInclude matches: ${stats.includeMatches.length}`);
58
- console.log(`\t\tExclude matches: ${stats.excludeMatches.length}`);
59
- console.log(`\t\tNeither matches: ${stats.neitherExcludedNorIncluded.length}`);
60
- }
61
- })
62
- .catch(reason => {
63
- if (reason instanceof commons_1.InvalidConfigurationException) {
64
- // Do not print the stack trace for invalid configuration parameters from the user.
65
- console.error(`Failed: ${reason.message}`);
66
- }
67
- else {
68
- console.error('Failed: ', reason);
69
- }
70
- process.exit(1);
71
- })
72
- .finally(() => {
73
- console.log('Bye bye.');
5
+ // Main function of the instrumenter
6
+ App_1.App.run().catch(reason => {
7
+ console.error(reason);
74
8
  });
package/dist/vaccine.js CHANGED
@@ -1 +1 @@
1
- "use strict";(()=>{function u(e){let n=new Blob([e],{type:"text/javascript"}),t=URL.createObjectURL(n),a=new Worker(t);return URL.revokeObjectURL(t),a}function h(){return u('var i=class{constructor(){this.socket=null,this.url="",this.messageOnConnect="",this.cachedMessages=[]}connect(e,s){this.url=e,this.socket=this.createSocket(),this.messageOnConnect=s}createSocket(){let e=new WebSocket(this.url);return e.onopen=()=>this.onopen(),e.onclose=()=>this.onclose(),e}onclose(){this.socket=this.createSocket()}onopen(){console.log("Connection to Coverage Collector established."),this.socket.send(this.messageOnConnect),this.cachedMessages.forEach(e=>this.socket.send(e)),this.cachedMessages=[]}send(e){this.socket!==null&&this.socket.readyState===WebSocket.OPEN?this.socket.send(e):(this.cachedMessages.push(e),this.cachedMessages.length%500===0&&console.log(`More than ${this.cachedMessages.length} messages are queued to be sent.`))}};var c=class{constructor(e,s){this.milliseconds=e;this.onCountedToZero=s;this.timerHandle=null}restartCountdown(){this.stopCountdown(),this.timerHandle=self.setTimeout(()=>{this.stopCountdown(),this.onCountedToZero()},this.milliseconds)}stopCountdown(){this.timerHandle!==null&&(self.clearTimeout(this.timerHandle),this.timerHandle=null)}};var f=20,v=1e3,S="c",g="b",a=class{constructor(e){this.socket=e,this.cachedCoveredRanges=new Map,this.numberOfCachedPositions=0,this.flushCountdown=new c(v,()=>this.flush())}addLines(e,s){let t=this.cachedCoveredRanges.get(e);t||(t=new Set,this.cachedCoveredRanges.set(e,t)),s.forEach(n=>t.add(n)),this.numberOfCachedPositions+=1,this.flushCountdown.restartCountdown(),this.numberOfCachedPositions>=f&&this.flush()}arrayToLineCov(e){let s=[];for(let t of e)s.push(`${t}`);return s.join(";")}flush(){if(this.numberOfCachedPositions===0)return;this.flushCountdown.stopCountdown();let e=[];this.cachedCoveredRanges.forEach((s,t)=>{e.push(`@${t}`),e.push(this.arrayToLineCov(s))}),this.socket.send(`${S} ${e.join(";")}`),this.cachedCoveredRanges.clear(),this.numberOfCachedPositions=0}};var l=class o{static resolve(e,s,t){switch(e.type){case"url":return e.url;case"relative":return o.resolveRelative(s,t,e)}}static resolveRelative(e,s,t){var u;let n=e;t.hostReplace&&(n=e.replace(t.hostReplace.search,t.hostReplace.replace));let m=(u=t.scheme)!=null?u:"ws",r;t.port===void 0?r="":t.port==="keep"?r=`:${s}`:r=`:${t.port}`;let h="";t.path&&(h=`/${t.path}`);let d=`${m}://${n}${r}${h}`;return console.debug(`Resolved collector URL ${d} from ${e}:${s}`),d}};console.log("Starting coverage forwarding worker.");var C=new i,p=new a(C);onmessage=o=>{if(Array.isArray(o.data)){let[e,s]=o.data;p.addLines(e,s)}else if(o.data==="unload")p.flush();else if(o.data.type==="location"){let e=o.data,s=l.resolve($COLLECTOR_SPECIFIER,e.hostname,e.port),t=`${g} $BUCKET_SPECIFIER`;C.connect(`${s}/socket`,t)}else console.error(`No handler for message: ${o.data}`)};\n')}function c(){return d()}function d(){return window}function g(e,n){let t=c()[e];return t||(t=n,c()[e]=t),t}function p(e,n){let t=new Map;function a(i){let o=t.get(i);return o||(o={lines:new Set},t.set(i,o),o)}function r(i,o,w=o){let f=a(i).lines;for(let l=o;l<=w;l++)f.add(l);f.size>255&&s()}function s(){n(t),t.clear()}return setInterval(()=>s(),e),{putLineCoverage:r,flush:s}}var v=g("__TS_AGENT",{});function C(){return v._$BcWorker}function b(e){return v._$BcWorker=e,e}var m=p(250,e=>{for(let n of e.entries())C().postMessage([n[0],Array.from(n[1].lines)])});c()._$l=m.putLineCoverage;if(!C()){let e=b(new h),n={type:"location",hostname:document.location.hostname,port:document.location.port};e.postMessage(n),function(){let a=()=>{m.flush(),e.postMessage("unload")},r=function(i,o){o&&o.addEventListener(i,a,{capture:!0})},s=d();r("blur",s),r("unload",s),r("visibilitychange",s),r("beforeunload",s)}()}})();
1
+ "use strict";(()=>{function u(e){let n=new Blob([e],{type:"text/javascript"}),t=URL.createObjectURL(n),a=new Worker(t);return URL.revokeObjectURL(t),a}function h(){return u('var r=class{constructor(){this.socket=null,this.url="",this.messageOnConnect="",this.cachedMessages=[],this.reconnectTimer=null}connect(e,s){this.url=e,this.messageOnConnect=s,this.socket=this.createSocket(),this.startReconnectTimer()}createSocket(){let e=new WebSocket(this.url);return e.onopen=()=>this.onopen(),e.onclose=()=>this.onclose(),e}startReconnectTimer(){this.reconnectTimer!==null&&clearInterval(this.reconnectTimer),this.reconnectTimer=setInterval(()=>{this.checkConnectionAndReconnect()},1e4)}checkConnectionAndReconnect(){var e;(this.socket===null||this.socket.readyState!==WebSocket.OPEN)&&((e=this.socket)==null||e.close(),console.log("Connection lost, attempting to reconnect..."),this.socket=this.createSocket())}onclose(){this.socket=this.createSocket()}onopen(){console.log("Connection to Coverage Collector established."),this.socket.send(this.messageOnConnect),this.cachedMessages.forEach(e=>this.socket.send(e)),this.cachedMessages=[]}send(e){if(this.socket!==null&&this.socket.readyState===WebSocket.OPEN)try{this.socket.send(e)}catch(s){console.error("Sending failed. Message will be re-sent when connection is available again.",s),this.addMessageToCache(e)}else this.addMessageToCache(e)}addMessageToCache(e){this.cachedMessages.push(e),this.cachedMessages.length%500===0&&console.log(`More than ${this.cachedMessages.length} messages are queued to be sent.`)}disconnect(){this.reconnectTimer!==null&&(clearInterval(this.reconnectTimer),this.reconnectTimer=null),this.socket!==null&&(this.socket.close(),this.socket=null)}};var c=class{constructor(e,s){this.milliseconds=e;this.onCountedToZero=s;this.timerHandle=null}restartCountdown(){this.stopCountdown(),this.timerHandle=self.setTimeout(()=>{this.stopCountdown(),this.onCountedToZero()},this.milliseconds)}stopCountdown(){this.timerHandle!==null&&(self.clearTimeout(this.timerHandle),this.timerHandle=null)}};var v=20,f=1e3,S="c",g="b",a=class{constructor(e){this.socket=e,this.cachedCoveredRanges=new Map,this.numberOfCachedPositions=0,this.flushCountdown=new c(f,()=>this.flush())}addLines(e,s){let t=this.cachedCoveredRanges.get(e);t||(t=new Set,this.cachedCoveredRanges.set(e,t)),s.forEach(n=>t.add(n)),this.numberOfCachedPositions+=1,this.flushCountdown.restartCountdown(),this.numberOfCachedPositions>=v&&this.flush()}arrayToLineCov(e){let s=[];for(let t of e)s.push(`${t}`);return s.join(";")}flush(){if(this.numberOfCachedPositions===0)return;this.flushCountdown.stopCountdown();let e=[];this.cachedCoveredRanges.forEach((s,t)=>{e.push(`@${t}`),e.push(this.arrayToLineCov(s))}),this.socket.send(`${S} ${e.join(";")}`),this.cachedCoveredRanges.clear(),this.numberOfCachedPositions=0}};var l=class o{static resolve(e,s,t){switch(e.type){case"url":return e.url;case"relative":return o.resolveRelative(s,t,e)}}static resolveRelative(e,s,t){var u;let n=e;t.hostReplace&&(n=e.replace(t.hostReplace.search,t.hostReplace.replace));let C=(u=t.scheme)!=null?u:"ws",i;t.port===void 0?i="":t.port==="keep"?i=`:${s}`:i=`:${t.port}`;let h="";t.path&&(h=`/${t.path}`);let d=`${C}://${n}${i}${h}`;return console.debug(`Resolved collector URL ${d} from ${e}:${s}`),d}};console.log("Starting coverage forwarding worker.");var p=new r,m=new a(p);onmessage=o=>{if(Array.isArray(o.data)){let[e,s]=o.data;m.addLines(e,s)}else if(o.data==="unload")m.flush();else if(o.data.type==="location"){let e=o.data,s=l.resolve($COLLECTOR_SPECIFIER,e.hostname,e.port),t=`${g} $BUCKET_SPECIFIER`;p.connect(`${s}/socket`,t)}else console.error(`No handler for message: ${o.data}`)};\n')}function c(){return d()}function d(){return window}function g(e,n){let t=c()[e];return t||(t=n,c()[e]=t),t}function p(e,n){let t=new Map;function a(i){let o=t.get(i);return o||(o={lines:new Set},t.set(i,o),o)}function r(i,o,k=o){let f=a(i).lines;for(let l=o;l<=k;l++)f.add(l);f.size>255&&s()}function s(){n(t),t.clear()}return setInterval(()=>s(),e),{putLineCoverage:r,flush:s}}var v=g("__TS_AGENT",{});function m(){return v._$BcWorker}function b(e){return v._$BcWorker=e,e}var C=p(250,e=>{for(let n of e.entries())m().postMessage([n[0],Array.from(n[1].lines)])});c()._$l=C.putLineCoverage;if(!m()){let e=b(new h),n={type:"location",hostname:document.location.hostname,port:document.location.port};e.postMessage(n),function(){let a=()=>{C.flush(),e.postMessage("unload")},r=function(i,o){o&&o.addEventListener(i,a,{capture:!0})},s=d();r("blur",s),r("unload",s),r("visibilitychange",s),r("beforeunload",s)}()}})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teamscale/javascript-instrumenter",
3
- "version": "1.0.0-beta.2",
3
+ "version": "1.0.0-beta.5",
4
4
  "description": "JavaScript coverage instrumenter with coverage forwarding to a collector process",
5
5
  "main": "dist/src/main.js",
6
6
  "bin": "dist/src/main.js",
@@ -11,38 +11,12 @@
11
11
  "files": [
12
12
  "dist/**/*"
13
13
  ],
14
- "devDependencies": {
15
- "@babel/core": "^7.26.8",
16
- "@babel/plugin-transform-modules-commonjs": "^7.26.3",
17
- "@babel/preset-env": "^7.26.8",
18
- "@types/argparse": "^2.0.17",
19
- "@types/async": "^3.2.24",
20
- "@types/babel__generator": "^7.6.8",
21
- "@types/babel__traverse": "^7.20.6",
22
- "@types/bunyan": "^1.8.11",
23
- "@types/convert-source-map": "^2.0.3",
24
- "@types/glob": "^8.1.0",
25
- "@types/jest": "^29.5.14",
26
- "@types/node": "^22.13.4",
27
- "@types/ws": "^8.5.14",
28
- "@types/uuid": "^10.0.0",
29
- "babel-jest": "^29.7.0",
30
- "esbuild": "^0.25.0",
31
- "esbuild-plugin-inline-worker": "^0.1.1",
32
- "jest": "^29.7.0",
33
- "rimraf": "^6.0.1",
34
- "ts-jest": "^29.2.5",
35
- "ts-node": "^10.9.2",
36
- "tslib": "^2.8.1",
37
- "typescript": "^5.7.3"
38
- },
39
14
  "dependencies": {
40
15
  "@babel/generator": "^7.26.8",
41
16
  "@babel/parser": "^7.26.8",
42
17
  "@babel/traverse": "^7.26.8",
43
18
  "@babel/types": "^7.26.8",
44
19
  "@types/micromatch": "^4.0.9",
45
- "argparse": "^2.0.1",
46
20
  "async": "^3.2.6",
47
21
  "bunyan": "^1.8.15",
48
22
  "convert-source-map": "^2.0.0",
@@ -51,12 +25,11 @@
51
25
  "micromatch": "4.0.8",
52
26
  "mkdirp": "^3.0.1",
53
27
  "source-map": "0.7.4",
54
- "typescript-optional": "^2.0.1",
55
28
  "unload": "^2.4.1",
56
29
  "uuid": "^11.1.0",
57
30
  "web-worker": "^1.5.0",
58
- "@cqse/commons": "1.0.0-beta.2",
59
- "@teamscale/lib-instrument": "1.0.0-beta.2"
31
+ "@cqse/commons": "1.0.0-beta.5",
32
+ "@teamscale/lib-instrument": "1.0.0-beta.5"
60
33
  },
61
34
  "publishConfig": {
62
35
  "access": "public"