slnodejs 6.1.925 → 6.1.930

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 (33) hide show
  1. package/package.json +3 -2
  2. package/tsOutputs/build-scanner/build-diff-process.js +12 -6
  3. package/tsOutputs/build-scanner/build-diff-process.js.map +1 -1
  4. package/tsOutputs/build-scanner/instrumentation/browser-instrumenter.js +196 -112
  5. package/tsOutputs/build-scanner/instrumentation/browser-instrumenter.js.map +1 -1
  6. package/tsOutputs/build-scanner/js_diff/sl-mapper.js +9 -1
  7. package/tsOutputs/build-scanner/js_diff/sl-mapper.js.map +1 -1
  8. package/tsOutputs/build-scanner/mappings/file-path-fixer.js +3 -3
  9. package/tsOutputs/build-scanner/mappings/file-path-fixer.js.map +1 -1
  10. package/tsOutputs/build-scanner/scm/scm-file-fixer.js +2 -2
  11. package/tsOutputs/build-scanner/scm/scm-file-fixer.js.map +1 -1
  12. package/tsOutputs/cli-parse/cli.js +6 -4
  13. package/tsOutputs/cli-parse/cli.js.map +1 -1
  14. package/tsOutputs/cli-parse/contracts.d.ts +4 -2
  15. package/tsOutputs/cli-parse/contracts.js.map +1 -1
  16. package/tsOutputs/cli-parse/executors/build-args-dto.js +2 -1
  17. package/tsOutputs/cli-parse/executors/build-args-dto.js.map +1 -1
  18. package/tsOutputs/cli-parse/executors/build-executor.js +5 -4
  19. package/tsOutputs/cli-parse/executors/build-executor.js.map +1 -1
  20. package/tsOutputs/cli-parse/utils.js +1 -31
  21. package/tsOutputs/cli-parse/utils.js.map +1 -1
  22. package/tsOutputs/common/constants/sl-env-vars.d.ts +2 -0
  23. package/tsOutputs/common/constants/sl-env-vars.js +2 -0
  24. package/tsOutputs/common/constants/sl-env-vars.js.map +1 -1
  25. package/tsOutputs/common/http/backend-proxy.js +4 -0
  26. package/tsOutputs/common/http/backend-proxy.js.map +1 -1
  27. package/tsOutputs/common/sl-mapper-tokenizer.d.ts +22 -0
  28. package/tsOutputs/common/sl-mapper-tokenizer.js +75 -0
  29. package/tsOutputs/common/sl-mapper-tokenizer.js.map +1 -0
  30. package/tsOutputs/common/source-map-handler.js +1 -1
  31. package/tsOutputs/common/utils/files-utils.d.ts +2 -0
  32. package/tsOutputs/common/utils/files-utils.js +30 -0
  33. package/tsOutputs/common/utils/files-utils.js.map +1 -1
@@ -0,0 +1,22 @@
1
+ export declare class SlMapperTokenizer {
2
+ private readonly SlMappingType;
3
+ private readonly version;
4
+ private readonly uniqueIdDelimiter;
5
+ private readonly pairDelimiter;
6
+ private readonly tokenDelimiter;
7
+ isTokenizedSlMapping(slMapping: ITokenizedSlMapping): boolean;
8
+ tokenizeSlMapping(slMapping: Record<string, string>): ITokenizedSlMapping;
9
+ detokenizeSlMapping(slMapping: ITokenizedSlMapping): Record<string, string>;
10
+ private tokenizeKeyValuePair;
11
+ private createToken;
12
+ private detokenizeToken;
13
+ }
14
+ export interface ITokenizedSlMapping {
15
+ type: string;
16
+ version: number;
17
+ tokens: Record<string, string>;
18
+ commonKeysPrefix: string;
19
+ commonValuesPrefix: string;
20
+ data: string;
21
+ [key: string]: any;
22
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SlMapperTokenizer = void 0;
4
+ const files_utils_1 = require("./utils/files-utils");
5
+ /*
6
+ * This class is responsible for tokenizing the sl-mapping JSON object
7
+ * It provides both methods to tokenize and detokenize the JSON object
8
+ * The tokenized object is used to send the sl-mapping JSON object to the backend
9
+ * The detokenized object is used throughout the agent if a tokenized sl-mapping was received from the backend
10
+ */
11
+ class SlMapperTokenizer {
12
+ constructor() {
13
+ this.SlMappingType = 'sl-mapping';
14
+ this.version = 2;
15
+ this.uniqueIdDelimiter = '@';
16
+ this.pairDelimiter = '|';
17
+ this.tokenDelimiter = '$';
18
+ }
19
+ isTokenizedSlMapping(slMapping) {
20
+ return (slMapping === null || slMapping === void 0 ? void 0 : slMapping.type) === this.SlMappingType && slMapping.version === this.version;
21
+ }
22
+ tokenizeSlMapping(slMapping) {
23
+ // Extract the common prefix for keys and values initially (projectRoot usually)
24
+ const commonKeysPrefix = files_utils_1.FilesUtils.commonPathPrefix(Object.keys(slMapping));
25
+ const commonValuesPrefix = files_utils_1.FilesUtils.commonPathPrefix(Object.values(slMapping));
26
+ // Create tokens object to store the tokenized keys and values
27
+ const tokens = {};
28
+ // Tokenize each key-value pair
29
+ const tokenizedSlMapping = Object.entries(slMapping)
30
+ .map(([key, value]) => this.tokenizeKeyValuePair(key, value, commonKeysPrefix, commonValuesPrefix, tokens)).join(this.pairDelimiter);
31
+ return {
32
+ type: this.SlMappingType,
33
+ version: this.version,
34
+ tokens,
35
+ commonKeysPrefix,
36
+ commonValuesPrefix,
37
+ data: tokenizedSlMapping,
38
+ };
39
+ }
40
+ detokenizeSlMapping(slMapping) {
41
+ if (!this.isTokenizedSlMapping(slMapping)) {
42
+ return slMapping;
43
+ }
44
+ const { tokens, data } = slMapping;
45
+ const detokenizedSlMapping = data.split(this.pairDelimiter).reduce((acc, tokenizedKeyValuePair) => {
46
+ const [keyToken, valueToken] = tokenizedKeyValuePair.split('=');
47
+ const key = this.detokenizeToken(keyToken, slMapping.commonKeysPrefix, tokens);
48
+ const value = this.detokenizeToken(valueToken, slMapping.commonValuesPrefix, tokens);
49
+ acc[key] = value;
50
+ return acc;
51
+ }, {});
52
+ return detokenizedSlMapping;
53
+ }
54
+ tokenizeKeyValuePair(key, value, commonKeysPrefix, commonValuesPrefix, tokens) {
55
+ const keyToken = this.createToken(key, commonKeysPrefix, tokens);
56
+ const valueToken = this.createToken(value, commonValuesPrefix, tokens);
57
+ const keyPosition = key.split(this.uniqueIdDelimiter)[1];
58
+ const valuePosition = value.split(this.uniqueIdDelimiter)[1];
59
+ return `${keyToken}${this.uniqueIdDelimiter}${keyPosition}=${valueToken}${this.uniqueIdDelimiter}${valuePosition}`;
60
+ }
61
+ createToken(input, commonPrefix, tokens) {
62
+ const tokenIndex = Object.keys(tokens).length;
63
+ const inputWithoutPrefix = input.replace(commonPrefix, '');
64
+ const token = `${this.tokenDelimiter}${tokenIndex}`;
65
+ tokens[token] = inputWithoutPrefix.split(this.uniqueIdDelimiter)[0]; // Store token with its uncompressed value without the method position
66
+ return token;
67
+ }
68
+ detokenizeToken(token, prefix, tokens) {
69
+ const [tokenValue, position] = token.split(this.uniqueIdDelimiter);
70
+ const originalSlMappingValue = tokens[tokenValue];
71
+ return `${prefix}${originalSlMappingValue}${this.uniqueIdDelimiter}${position}`;
72
+ }
73
+ }
74
+ exports.SlMapperTokenizer = SlMapperTokenizer;
75
+ //# sourceMappingURL=sl-mapper-tokenizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sl-mapper-tokenizer.js","sourceRoot":"","sources":["../../common/sl-mapper-tokenizer.ts"],"names":[],"mappings":"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"}
@@ -53,7 +53,7 @@ class SourceMapHandler {
53
53
  }
54
54
  this.resolveRelativePath();
55
55
  }
56
- // TODO: used only in GeneratedFileSignature that olso not in use
56
+ // TODO: used only in GeneratedFileSignature that also not in use
57
57
  setScmParams(scmFilesContainer, scmRootDir) {
58
58
  this.scmFilesContainer = scmFilesContainer;
59
59
  this.scmRootDir = scmRootDir;
@@ -3,4 +3,6 @@ export declare class FilesUtils {
3
3
  fixPathAndSpecialChar(path: string): string;
4
4
  static adjustPathSlashes(filePath: string): string;
5
5
  static findFileUp(file: any, folder: any): any;
6
+ static determineSeparator: (paths: string[]) => string;
7
+ static commonPathPrefix: (paths: string[], sep?: string) => string;
6
8
  }
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ var _a;
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  exports.FilesUtils = void 0;
4
5
  const path = require("path");
@@ -40,4 +41,33 @@ class FilesUtils {
40
41
  }
41
42
  }
42
43
  exports.FilesUtils = FilesUtils;
44
+ _a = FilesUtils;
45
+ FilesUtils.determineSeparator = (paths) => {
46
+ for (const path of paths) {
47
+ const match = /(\/|\\)/.exec(path);
48
+ if (match !== null)
49
+ return match[0];
50
+ }
51
+ return path.sep;
52
+ };
53
+ // Taken as is an re-written to TypeScript from npm module common-path-prefix
54
+ FilesUtils.commonPathPrefix = (paths, sep = _a.determineSeparator(paths)) => {
55
+ const [first = '', ...remaining] = paths;
56
+ if (first === '' || remaining.length === 0)
57
+ return '';
58
+ const parts = first.split(sep);
59
+ let endOfPrefix = parts.length;
60
+ for (const path of remaining) {
61
+ const compare = path.split(sep);
62
+ for (let i = 0; i < endOfPrefix; i++) {
63
+ if (compare[i] !== parts[i]) {
64
+ endOfPrefix = i;
65
+ }
66
+ }
67
+ if (endOfPrefix === 0)
68
+ return '';
69
+ }
70
+ const prefix = parts.slice(0, endOfPrefix).join(sep);
71
+ return prefix.endsWith(sep) ? prefix : prefix + sep;
72
+ };
43
73
  //# sourceMappingURL=files-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"files-utils.js","sourceRoot":"","sources":["../../../common/utils/files-utils.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAC7B,yBAAyB;AAEzB,MAAa,UAAU;IAEZ,MAAM,CAAC,2BAA2B,CAAC,QAAgB,EAAE,gBAAwB;QAChF,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;YACnC,OAAO,gBAAgB,CAAC;SAC3B;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;QAChE,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED,qBAAqB,CAAC,IAAY;QAC9B,IAAI,IAAI,EAAE;YACN,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBACrC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC/C;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACrC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IACM,MAAM,CAAC,iBAAiB,CAAC,QAAgB;QAC5C,QAAQ,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YACzB,OAAO,QAAQ,CAAC;SACnB;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,MAAM,KAAK,GAAG,EAAE;YACxD,OAAO,IAAI,CAAC;SACf;QACD,IAAI,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3C,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC5C,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC;CACJ;AAtCD,gCAsCC"}
1
+ {"version":3,"file":"files-utils.js","sourceRoot":"","sources":["../../../common/utils/files-utils.ts"],"names":[],"mappings":"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"}