@salesforce/apex-node 3.1.0 → 4.0.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.
Files changed (65) hide show
  1. package/lib/src/index.d.ts +2 -2
  2. package/lib/src/index.js +3 -1
  3. package/lib/src/index.js.map +1 -1
  4. package/lib/src/narrowing/index.d.ts +1 -0
  5. package/lib/src/narrowing/index.js +27 -0
  6. package/lib/src/narrowing/index.js.map +1 -0
  7. package/lib/src/narrowing/narrowing.d.ts +18 -0
  8. package/lib/src/narrowing/narrowing.js +82 -0
  9. package/lib/src/narrowing/narrowing.js.map +1 -0
  10. package/lib/src/reporters/humanFormatTransform.d.ts +15 -0
  11. package/lib/src/reporters/humanFormatTransform.js +240 -0
  12. package/lib/src/reporters/humanFormatTransform.js.map +1 -0
  13. package/lib/src/reporters/humanReporter.js +7 -9
  14. package/lib/src/reporters/humanReporter.js.map +1 -1
  15. package/lib/src/reporters/index.d.ts +2 -0
  16. package/lib/src/reporters/index.js +6 -2
  17. package/lib/src/reporters/index.js.map +1 -1
  18. package/lib/src/reporters/junitFormatTransformer.d.ts +12 -0
  19. package/lib/src/reporters/junitFormatTransformer.js +106 -0
  20. package/lib/src/reporters/junitFormatTransformer.js.map +1 -0
  21. package/lib/src/reporters/junitReporter.d.ts +1 -2
  22. package/lib/src/reporters/junitReporter.js +7 -15
  23. package/lib/src/reporters/junitReporter.js.map +1 -1
  24. package/lib/src/reporters/tapFormatTransform.d.ts +18 -0
  25. package/lib/src/reporters/tapFormatTransform.js +86 -0
  26. package/lib/src/reporters/tapFormatTransform.js.map +1 -0
  27. package/lib/src/reporters/tapReporter.d.ts +1 -1
  28. package/lib/src/streaming/codeCoverageStringifyStream.d.ts +12 -0
  29. package/lib/src/streaming/codeCoverageStringifyStream.js +80 -0
  30. package/lib/src/streaming/codeCoverageStringifyStream.js.map +1 -0
  31. package/lib/src/streaming/index.d.ts +3 -0
  32. package/lib/src/streaming/index.js +11 -1
  33. package/lib/src/streaming/index.js.map +1 -1
  34. package/lib/src/streaming/jsonStringifyStream.d.ts +18 -0
  35. package/lib/src/streaming/jsonStringifyStream.js +118 -0
  36. package/lib/src/streaming/jsonStringifyStream.js.map +1 -0
  37. package/lib/src/streaming/streamingClient.js +12 -12
  38. package/lib/src/streaming/streamingClient.js.map +1 -1
  39. package/lib/src/streaming/testResultStringifyStream.d.ts +12 -0
  40. package/lib/src/streaming/testResultStringifyStream.js +102 -0
  41. package/lib/src/streaming/testResultStringifyStream.js.map +1 -0
  42. package/lib/src/streaming/utils.d.ts +8 -0
  43. package/lib/src/streaming/utils.js +43 -0
  44. package/lib/src/streaming/utils.js.map +1 -0
  45. package/lib/src/tests/asyncTests.js +2 -1
  46. package/lib/src/tests/asyncTests.js.map +1 -1
  47. package/lib/src/tests/index.d.ts +1 -1
  48. package/lib/src/tests/index.js +2 -2
  49. package/lib/src/tests/index.js.map +1 -1
  50. package/lib/src/tests/testService.d.ts +2 -2
  51. package/lib/src/tests/testService.js +96 -64
  52. package/lib/src/tests/testService.js.map +1 -1
  53. package/lib/src/tests/types.d.ts +1 -1
  54. package/lib/src/tests/utils.d.ts +0 -2
  55. package/lib/src/tests/utils.js +1 -12
  56. package/lib/src/tests/utils.js.map +1 -1
  57. package/lib/src/utils/index.d.ts +2 -2
  58. package/lib/src/utils/index.js.map +1 -1
  59. package/lib/src/utils/table.d.ts +1 -7
  60. package/lib/src/utils/table.js.map +1 -1
  61. package/lib/src/utils/tableWritableStream.d.ts +16 -0
  62. package/lib/src/utils/tableWritableStream.js +111 -0
  63. package/lib/src/utils/tableWritableStream.js.map +1 -0
  64. package/lib/src/utils/types.d.ts +13 -0
  65. package/package.json +1 -1
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.JUnitFormatTransformer = void 0;
10
+ const utils_1 = require("../utils");
11
+ const node_stream_1 = require("node:stream");
12
+ const narrowing_1 = require("../narrowing");
13
+ // cli currently has spaces in multiples of four for junit format
14
+ const tab = ' ';
15
+ const timeProperties = [
16
+ 'testExecutionTimeInMs',
17
+ 'testTotalTimeInMs',
18
+ 'commandTimeInMs'
19
+ ];
20
+ // properties not in cli junit spec
21
+ const skippedProperties = ['skipRate', 'totalLines', 'linesCovered'];
22
+ class JUnitFormatTransformer extends node_stream_1.Readable {
23
+ testResult;
24
+ constructor(testResult, options) {
25
+ super(options);
26
+ this.testResult = testResult;
27
+ this.testResult = testResult;
28
+ }
29
+ _read() {
30
+ this.format();
31
+ this.push(null); // Signal the end of the stream
32
+ }
33
+ format() {
34
+ const { summary } = this.testResult;
35
+ this.push(`<?xml version="1.0" encoding="UTF-8"?>\n`);
36
+ this.push(`<testsuites>\n`);
37
+ this.push(`${tab}<testsuite name="force.apex" `);
38
+ this.push(`timestamp="${summary.testStartTime}" `);
39
+ this.push(`hostname="${summary.hostname}" `);
40
+ this.push(`tests="${summary.testsRan}" `);
41
+ this.push(`failures="${summary.failing}" `);
42
+ this.push(`errors="0" `);
43
+ this.push(`time="${(0, utils_1.msToSecond)(summary.testExecutionTimeInMs)}">\n`);
44
+ this.buildProperties();
45
+ this.buildTestCases();
46
+ this.push(`${tab}</testsuite>\n`);
47
+ this.push(`</testsuites>\n`);
48
+ }
49
+ buildProperties() {
50
+ this.push(`${tab}${tab}<properties>\n`);
51
+ Object.entries(this.testResult.summary).forEach(([key, value]) => {
52
+ if ((0, narrowing_1.isEmpty)(value) || skippedProperties.includes(key)) {
53
+ return;
54
+ }
55
+ if (timeProperties.includes(key)) {
56
+ value = `${(0, utils_1.msToSecond)(value)} s`;
57
+ key = key.replace('InMs', '');
58
+ }
59
+ if (key === 'outcome' && value === 'Passed') {
60
+ value = 'Successful';
61
+ }
62
+ if (key === 'testStartTime') {
63
+ value = (0, utils_1.formatStartTime)(value);
64
+ }
65
+ this.push(`${tab}${tab}${tab}<property name="${key}" value="${value}"/>\n`);
66
+ });
67
+ this.push(`${tab}${tab}</properties>\n`);
68
+ }
69
+ buildTestCases() {
70
+ const testCases = this.testResult.tests;
71
+ for (const testCase of testCases) {
72
+ const methodName = JUnitFormatTransformer.xmlEscape(testCase.methodName);
73
+ this.push(`${tab}${tab}<testcase name="${methodName}" classname="${testCase.apexClass.fullName}" time="${(0, utils_1.msToSecond)(testCase.runTime)}">\n`);
74
+ if (testCase.outcome === "Fail" /* ApexTestResultOutcome.Fail */ ||
75
+ testCase.outcome === "CompileFail" /* ApexTestResultOutcome.CompileFail */) {
76
+ let message = (0, narrowing_1.isEmpty)(testCase.message) ? '' : testCase.message;
77
+ message = JUnitFormatTransformer.xmlEscape(message);
78
+ this.push(`${tab}${tab}${tab}<failure message="${message}">`);
79
+ if (testCase.stackTrace) {
80
+ this.push(`<![CDATA[${testCase.stackTrace}]]>`);
81
+ }
82
+ this.push(`</failure>\n`);
83
+ }
84
+ this.push(`${tab}${tab}</testcase>\n`);
85
+ }
86
+ }
87
+ static xmlEscape(value) {
88
+ return value
89
+ .replace(/&/g, '&amp;')
90
+ .replace(/</g, '&lt;')
91
+ .replace(/>/g, '&gt;')
92
+ .replace(/"/g, '&quot;')
93
+ .replace(/'/g, '&apos;');
94
+ }
95
+ }
96
+ exports.JUnitFormatTransformer = JUnitFormatTransformer;
97
+ __decorate([
98
+ (0, utils_1.elapsedTime)()
99
+ ], JUnitFormatTransformer.prototype, "format", null);
100
+ __decorate([
101
+ (0, utils_1.elapsedTime)()
102
+ ], JUnitFormatTransformer.prototype, "buildProperties", null);
103
+ __decorate([
104
+ (0, utils_1.elapsedTime)()
105
+ ], JUnitFormatTransformer.prototype, "buildTestCases", null);
106
+ //# sourceMappingURL=junitFormatTransformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"junitFormatTransformer.js","sourceRoot":"","sources":["../../../src/reporters/junitFormatTransformer.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,7 @@
1
- import { TestResult } from '../tests/types';
1
+ import { TestResult } from '../tests';
2
2
  export declare class JUnitReporter {
3
3
  format(testResult: TestResult): string;
4
4
  private buildProperties;
5
5
  private buildTestCases;
6
6
  private xmlEscape;
7
- private isEmpty;
8
7
  }
@@ -8,8 +8,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.JUnitReporter = void 0;
10
10
  const utils_1 = require("../utils");
11
- const elapsedTime_1 = require("../utils/elapsedTime");
12
11
  const core_1 = require("@salesforce/core");
12
+ const narrowing_1 = require("../narrowing");
13
13
  // cli currently has spaces in multiples of four for junit format
14
14
  const tab = ' ';
15
15
  const timeProperties = [
@@ -40,7 +40,7 @@ class JUnitReporter {
40
40
  buildProperties(testResult) {
41
41
  let junitProperties = `${tab}${tab}<properties>\n`;
42
42
  Object.entries(testResult.summary).forEach(([key, value]) => {
43
- if (this.isEmpty(value) || skippedProperties.includes(key)) {
43
+ if ((0, narrowing_1.isEmpty)(value) || skippedProperties.includes(key)) {
44
44
  return;
45
45
  }
46
46
  if (timeProperties.includes(key)) {
@@ -65,7 +65,7 @@ class JUnitReporter {
65
65
  junitTests += `${tab}${tab}<testcase name="${methodName}" classname="${testCase.apexClass.fullName}" time="${(0, utils_1.msToSecond)(testCase.runTime)}">\n`;
66
66
  if (testCase.outcome === "Fail" /* ApexTestResultOutcome.Fail */ ||
67
67
  testCase.outcome === "CompileFail" /* ApexTestResultOutcome.CompileFail */) {
68
- let message = this.isEmpty(testCase.message) ? '' : testCase.message;
68
+ let message = (0, narrowing_1.isEmpty)(testCase.message) ? '' : testCase.message;
69
69
  message = this.xmlEscape(message);
70
70
  junitTests += `${tab}${tab}${tab}<failure message="${message}">`;
71
71
  if (testCase.stackTrace) {
@@ -85,26 +85,18 @@ class JUnitReporter {
85
85
  .replace(/"/g, '&quot;')
86
86
  .replace(/'/g, '&apos;');
87
87
  }
88
- isEmpty(value) {
89
- if (value === null ||
90
- value === undefined ||
91
- (typeof value === 'string' && value.length === 0)) {
92
- return true;
93
- }
94
- return false;
95
- }
96
88
  }
97
89
  exports.JUnitReporter = JUnitReporter;
98
90
  __decorate([
99
- (0, elapsedTime_1.elapsedTime)()
91
+ (0, utils_1.elapsedTime)()
100
92
  ], JUnitReporter.prototype, "format", null);
101
93
  __decorate([
102
- (0, elapsedTime_1.elapsedTime)()
94
+ (0, utils_1.elapsedTime)()
103
95
  ], JUnitReporter.prototype, "buildProperties", null);
104
96
  __decorate([
105
- (0, elapsedTime_1.elapsedTime)()
97
+ (0, utils_1.elapsedTime)()
106
98
  ], JUnitReporter.prototype, "buildTestCases", null);
107
99
  __decorate([
108
- (0, elapsedTime_1.elapsedTime)('elapsedTime', core_1.LoggerLevel.TRACE)
100
+ (0, utils_1.elapsedTime)('elapsedTime', core_1.LoggerLevel.TRACE)
109
101
  ], JUnitReporter.prototype, "xmlEscape", null);
110
102
  //# sourceMappingURL=junitReporter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"junitReporter.js","sourceRoot":"","sources":["../../../src/reporters/junitReporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"junitReporter.js","sourceRoot":"","sources":["../../../src/reporters/junitReporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /// <reference types="node" />
2
+ import { Readable, ReadableOptions } from 'node:stream';
3
+ import { TestResult } from '../tests';
4
+ export interface TapResult {
5
+ description: string;
6
+ diagnostics: string[];
7
+ outcome: string;
8
+ testNumber: number;
9
+ }
10
+ export declare class TapFormatTransformer extends Readable {
11
+ private testResult;
12
+ private epilogue?;
13
+ constructor(testResult: TestResult, epilogue?: string[], options?: ReadableOptions);
14
+ _read(): void;
15
+ format(): void;
16
+ buildTapResults(): void;
17
+ private buildTapDiagnostics;
18
+ }
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.TapFormatTransformer = void 0;
10
+ /*
11
+ * Copyright (c) 2024, salesforce.com, inc.
12
+ * All rights reserved.
13
+ * Licensed under the BSD 3-Clause license.
14
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
15
+ */
16
+ const node_stream_1 = require("node:stream");
17
+ const utils_1 = require("../utils");
18
+ class TapFormatTransformer extends node_stream_1.Readable {
19
+ testResult;
20
+ epilogue;
21
+ constructor(testResult, epilogue, options) {
22
+ super(options);
23
+ this.testResult = testResult;
24
+ this.epilogue = epilogue;
25
+ }
26
+ _read() {
27
+ this.format();
28
+ this.push(null); // Signal the end of the stream
29
+ }
30
+ format() {
31
+ const testPointCount = this.testResult.tests.length;
32
+ this.push(`1..${testPointCount}\n`);
33
+ this.buildTapResults();
34
+ this.epilogue?.forEach((c) => {
35
+ this.push(`# ${c}\n`);
36
+ });
37
+ }
38
+ buildTapResults() {
39
+ this.testResult.tests.forEach((test, index) => {
40
+ const testNumber = index + 1;
41
+ const outcome = test.outcome === "Pass" /* ApexTestResultOutcome.Pass */ ? 'ok' : 'not ok';
42
+ this.push(`${outcome} ${testNumber} ${test.fullName}\n`);
43
+ this.buildTapDiagnostics(test).forEach((s) => {
44
+ this.push(`# ${s}\n`);
45
+ });
46
+ });
47
+ }
48
+ buildTapDiagnostics(testResult) {
49
+ const message = [];
50
+ if (testResult.outcome !== 'Pass') {
51
+ if (testResult.message) {
52
+ const startsWithNewlineRegex = new RegExp(/^[/\r\n|\r|\n]\w*/gim);
53
+ if (startsWithNewlineRegex.test(testResult.message)) {
54
+ testResult.message.split(/\r\n|\r|\n/g).forEach((msg) => {
55
+ if (msg && msg.length > 0) {
56
+ message.push(msg.trim());
57
+ }
58
+ });
59
+ }
60
+ else {
61
+ message.push(testResult.message);
62
+ }
63
+ }
64
+ else {
65
+ message.push('Unknown error');
66
+ }
67
+ if (testResult.stackTrace) {
68
+ testResult.stackTrace.split('\n').forEach((line) => {
69
+ message.push(line);
70
+ });
71
+ }
72
+ }
73
+ return message;
74
+ }
75
+ }
76
+ exports.TapFormatTransformer = TapFormatTransformer;
77
+ __decorate([
78
+ (0, utils_1.elapsedTime)()
79
+ ], TapFormatTransformer.prototype, "format", null);
80
+ __decorate([
81
+ (0, utils_1.elapsedTime)()
82
+ ], TapFormatTransformer.prototype, "buildTapResults", null);
83
+ __decorate([
84
+ (0, utils_1.elapsedTime)()
85
+ ], TapFormatTransformer.prototype, "buildTapDiagnostics", null);
86
+ //# sourceMappingURL=tapFormatTransform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tapFormatTransform.js","sourceRoot":"","sources":["../../../src/reporters/tapFormatTransform.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { TestResult } from '../tests/types';
1
+ import { TestResult } from '../tests';
2
2
  export interface TapResult {
3
3
  description: string;
4
4
  diagnostics: string[];
@@ -0,0 +1,12 @@
1
+ /// <reference types="node" />
2
+ import { Transform, TransformCallback } from 'stream';
3
+ import { PerClassCoverage } from '../tests';
4
+ import { TransformOptions } from 'node:stream';
5
+ export declare class CodeCoverageStringifyStream extends Transform {
6
+ private outerPushed;
7
+ private pushedInner;
8
+ constructor(options?: TransformOptions);
9
+ _transform(chunk: PerClassCoverage[], encoding: string, callback: TransformCallback): void;
10
+ _flush(callback: TransformCallback): void;
11
+ private transformCoverage;
12
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CodeCoverageStringifyStream = void 0;
10
+ /*
11
+ * Copyright (c) 2024, salesforce.com, inc.
12
+ * All rights reserved.
13
+ * Licensed under the BSD 3-Clause license.
14
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
15
+ */
16
+ const stream_1 = require("stream");
17
+ const utils_1 = require("./utils");
18
+ const utils_2 = require("../utils");
19
+ const core_1 = require("@salesforce/core"); // replace with your actual import
20
+ class CodeCoverageStringifyStream extends stream_1.Transform {
21
+ outerPushed = false;
22
+ pushedInner = false;
23
+ constructor(options) {
24
+ super({ ...options, objectMode: true });
25
+ }
26
+ _transform(chunk, encoding, callback) {
27
+ try {
28
+ // push '[' once to encapsulate the entire result as an array
29
+ if (!this.outerPushed) {
30
+ this.push('[');
31
+ this.outerPushed = true;
32
+ }
33
+ // push a comma between each chunk except for the first one.
34
+ if (this.pushedInner) {
35
+ this.push(',');
36
+ }
37
+ this.pushedInner = true;
38
+ this.push('[');
39
+ // Loop over each PerClassCoverage object in the array
40
+ chunk.forEach((coverage, index) => {
41
+ // Transform the PerClassCoverage object and push it to the readable side of the stream
42
+ this.transformCoverage(coverage);
43
+ if (index < chunk.length - 1) {
44
+ this.push(',');
45
+ }
46
+ });
47
+ this.push(']');
48
+ callback();
49
+ }
50
+ catch (error) {
51
+ callback(error);
52
+ }
53
+ }
54
+ _flush(callback) {
55
+ // push the closing ']' when the source stream is complete
56
+ if (this.outerPushed) {
57
+ this.push(']');
58
+ }
59
+ callback();
60
+ }
61
+ transformCoverage(perClassCoverage) {
62
+ // Manually construct the string representation of the PerClassCoverage object
63
+ const transformedData = '{';
64
+ const { coverage, ...theRest } = perClassCoverage;
65
+ // stringify all properties except coverage and strip off the closing '}'
66
+ this.push(JSON.stringify(theRest).slice(0, -1));
67
+ this.push(',"coverage": {');
68
+ this.push('"coveredLines": [');
69
+ (0, utils_1.pushArrayToStream)(coverage.coveredLines ?? [], this);
70
+ this.push('],"uncoveredLines": [');
71
+ (0, utils_1.pushArrayToStream)(coverage.uncoveredLines ?? [], this);
72
+ this.push(']}}');
73
+ return transformedData;
74
+ }
75
+ }
76
+ exports.CodeCoverageStringifyStream = CodeCoverageStringifyStream;
77
+ __decorate([
78
+ (0, utils_2.elapsedTime)('elapsedTime', core_1.LoggerLevel.TRACE)
79
+ ], CodeCoverageStringifyStream.prototype, "transformCoverage", null);
80
+ //# sourceMappingURL=codeCoverageStringifyStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeCoverageStringifyStream.js","sourceRoot":"","sources":["../../../src/streaming/codeCoverageStringifyStream.ts"],"names":[],"mappings":";;;;;;;;;AAAA;;;;;GAKG;AACH,mCAAsD;AAGtD,mCAA4C;AAC5C,oCAAuC;AACvC,2CAA+C,CAAC,kCAAkC;AAElF,MAAa,2BAA4B,SAAQ,kBAAS;IAChD,WAAW,GAAG,KAAK,CAAC;IACpB,WAAW,GAAG,KAAK,CAAC;IAC5B,YAAY,OAA0B;QACpC,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,UAAU,CACR,KAAyB,EACzB,QAAgB,EAChB,QAA2B;QAE3B,IAAI,CAAC;YACH,6DAA6D;YAC7D,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,CAAC;YACD,4DAA4D;YAC5D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;YACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,sDAAsD;YACtD,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBAChC,uFAAuF;gBACvF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBACjC,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,QAAQ,EAAE,CAAC;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,QAA2B;QAChC,0DAA0D;QAC1D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;QACD,QAAQ,EAAE,CAAC;IACb,CAAC;IAGO,iBAAiB,CAAC,gBAAkC;QAC1D,8EAA8E;QAC9E,MAAM,eAAe,GAAG,GAAG,CAAC;QAC5B,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,GAAG,gBAAgB,CAAC;QAClD,yEAAyE;QACzE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC/B,IAAA,yBAAiB,EAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACnC,IAAA,yBAAiB,EAAC,QAAQ,CAAC,cAAc,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjB,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AA/DD,kEA+DC;AAfS;IADP,IAAA,mBAAW,EAAC,aAAa,EAAE,kBAAW,CAAC,KAAK,CAAC;oEAe7C"}
@@ -1 +1,4 @@
1
1
  export { AsyncTestRun, StreamingClient } from './streamingClient';
2
+ export { JSONStringifyStream } from './jsonStringifyStream';
3
+ export { TestResultStringifyStream } from './testResultStringifyStream';
4
+ export { determineType, getArrayEntries, getPrimitiveEntries, getObjectEntries, pushArrayToStream } from './utils';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StreamingClient = void 0;
3
+ exports.pushArrayToStream = exports.getObjectEntries = exports.getPrimitiveEntries = exports.getArrayEntries = exports.determineType = exports.TestResultStringifyStream = exports.JSONStringifyStream = exports.StreamingClient = void 0;
4
4
  /*
5
5
  * Copyright (c) 2020, salesforce.com, inc.
6
6
  * All rights reserved.
@@ -9,4 +9,14 @@ exports.StreamingClient = void 0;
9
9
  */
10
10
  var streamingClient_1 = require("./streamingClient");
11
11
  Object.defineProperty(exports, "StreamingClient", { enumerable: true, get: function () { return streamingClient_1.StreamingClient; } });
12
+ var jsonStringifyStream_1 = require("./jsonStringifyStream");
13
+ Object.defineProperty(exports, "JSONStringifyStream", { enumerable: true, get: function () { return jsonStringifyStream_1.JSONStringifyStream; } });
14
+ var testResultStringifyStream_1 = require("./testResultStringifyStream");
15
+ Object.defineProperty(exports, "TestResultStringifyStream", { enumerable: true, get: function () { return testResultStringifyStream_1.TestResultStringifyStream; } });
16
+ var utils_1 = require("./utils");
17
+ Object.defineProperty(exports, "determineType", { enumerable: true, get: function () { return utils_1.determineType; } });
18
+ Object.defineProperty(exports, "getArrayEntries", { enumerable: true, get: function () { return utils_1.getArrayEntries; } });
19
+ Object.defineProperty(exports, "getPrimitiveEntries", { enumerable: true, get: function () { return utils_1.getPrimitiveEntries; } });
20
+ Object.defineProperty(exports, "getObjectEntries", { enumerable: true, get: function () { return utils_1.getObjectEntries; } });
21
+ Object.defineProperty(exports, "pushArrayToStream", { enumerable: true, get: function () { return utils_1.pushArrayToStream; } });
12
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/streaming/index.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,qDAAkE;AAA3C,kHAAA,eAAe,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/streaming/index.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,qDAAkE;AAA3C,kHAAA,eAAe,OAAA;AACtC,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAC5B,yEAAwE;AAA/D,sIAAA,yBAAyB,OAAA;AAClC,iCAMiB;AALf,sGAAA,aAAa,OAAA;AACb,wGAAA,eAAe,OAAA;AACf,4GAAA,mBAAmB,OAAA;AACnB,yGAAA,gBAAgB,OAAA;AAChB,0GAAA,iBAAiB,OAAA"}
@@ -0,0 +1,18 @@
1
+ /// <reference types="node" />
2
+ import { Readable, ReadableOptions } from 'stream';
3
+ interface JSONStringifyStreamOptions extends ReadableOptions {
4
+ object: unknown;
5
+ }
6
+ export declare class JSONStringifyStream extends Readable {
7
+ private sent;
8
+ private lastYielded;
9
+ private readonly object;
10
+ constructor(options: JSONStringifyStreamOptions);
11
+ private stringify;
12
+ private yieldWithTracking;
13
+ private handleObject;
14
+ private handleArray;
15
+ _read(): void;
16
+ static from(json: unknown): JSONStringifyStream;
17
+ }
18
+ export {};
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.JSONStringifyStream = void 0;
10
+ /*
11
+ * Copyright (c) 2021, salesforce.com, inc.
12
+ * All rights reserved.
13
+ * Licensed under the BSD 3-Clause license.
14
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
15
+ */
16
+ const stream_1 = require("stream");
17
+ const utils_1 = require("../utils");
18
+ const core_1 = require("@salesforce/core");
19
+ const narrowing_1 = require("../narrowing");
20
+ class JSONStringifyStream extends stream_1.Readable {
21
+ sent = false;
22
+ lastYielded;
23
+ object;
24
+ constructor(options) {
25
+ super({ ...options, objectMode: false });
26
+ this.object = options.object;
27
+ }
28
+ *stringify(obj) {
29
+ if ((0, narrowing_1.isObject)(obj)) {
30
+ yield* this.handleObject(obj, true);
31
+ }
32
+ else if ((0, narrowing_1.isArray)(obj)) {
33
+ yield* this.handleArray(obj, true);
34
+ }
35
+ else if ((0, narrowing_1.isPrimitive)(obj)) {
36
+ yield JSON.stringify(obj);
37
+ }
38
+ }
39
+ *yieldWithTracking(value) {
40
+ this.lastYielded = value;
41
+ yield value;
42
+ }
43
+ *handleObject(obj, isLast) {
44
+ yield* this.yieldWithTracking('{');
45
+ const entries = Object.entries(obj);
46
+ for (let index = 0; index < entries.length; index++) {
47
+ const [key, value] = entries[index];
48
+ yield* this.yieldWithTracking(`"${key}":`);
49
+ if ((0, narrowing_1.isObject)(value)) {
50
+ yield* this.handleObject(value, index === entries.length - 1);
51
+ }
52
+ else if ((0, narrowing_1.isArray)(value)) {
53
+ yield* this.handleArray(value, index === entries.length - 1);
54
+ }
55
+ else {
56
+ yield* this.yieldWithTracking(JSON.stringify(value));
57
+ }
58
+ if (index !== entries.length - 1 && this.lastYielded !== ',') {
59
+ yield* this.yieldWithTracking(',');
60
+ }
61
+ }
62
+ yield* this.yieldWithTracking('}');
63
+ if (!isLast && this.lastYielded !== ',') {
64
+ yield* this.yieldWithTracking(',');
65
+ }
66
+ }
67
+ *handleArray(unknownArray, isLast) {
68
+ yield* this.yieldWithTracking('[');
69
+ for (let index = 0; index < unknownArray.length; index++) {
70
+ const entry = unknownArray[index];
71
+ if ((0, narrowing_1.isObject)(entry)) {
72
+ yield* this.handleObject(entry, index === unknownArray.length - 1);
73
+ }
74
+ else if ((0, narrowing_1.isArray)(entry)) {
75
+ yield* this.handleArray(entry, index === unknownArray.length - 1);
76
+ }
77
+ else {
78
+ yield* this.yieldWithTracking(JSON.stringify(entry));
79
+ }
80
+ if (index !== unknownArray.length - 1 && this.lastYielded !== ',') {
81
+ yield* this.yieldWithTracking(',');
82
+ }
83
+ }
84
+ yield* this.yieldWithTracking(']');
85
+ if (!isLast && this.lastYielded !== ',') {
86
+ yield* this.yieldWithTracking(',');
87
+ }
88
+ }
89
+ _read() {
90
+ if (!this.sent) {
91
+ const generator = this.stringify(this.object);
92
+ for (const chunk of generator) {
93
+ this.push(chunk);
94
+ }
95
+ this.sent = true;
96
+ }
97
+ else {
98
+ this.push(null);
99
+ }
100
+ }
101
+ static from(json) {
102
+ return new JSONStringifyStream({ object: json });
103
+ }
104
+ }
105
+ exports.JSONStringifyStream = JSONStringifyStream;
106
+ __decorate([
107
+ (0, utils_1.elapsedTime)('elapsedTime', core_1.LoggerLevel.TRACE)
108
+ ], JSONStringifyStream.prototype, "stringify", null);
109
+ __decorate([
110
+ (0, utils_1.elapsedTime)('elapsedTime', core_1.LoggerLevel.TRACE)
111
+ ], JSONStringifyStream.prototype, "yieldWithTracking", null);
112
+ __decorate([
113
+ (0, utils_1.elapsedTime)('elapsedTime', core_1.LoggerLevel.TRACE)
114
+ ], JSONStringifyStream.prototype, "handleObject", null);
115
+ __decorate([
116
+ (0, utils_1.elapsedTime)('elapsedTime', core_1.LoggerLevel.TRACE)
117
+ ], JSONStringifyStream.prototype, "handleArray", null);
118
+ //# sourceMappingURL=jsonStringifyStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonStringifyStream.js","sourceRoot":"","sources":["../../../src/streaming/jsonStringifyStream.ts"],"names":[],"mappings":"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"}