@api-client/core 0.3.5 → 0.3.8

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 (84) hide show
  1. package/build/browser.d.ts +5 -0
  2. package/build/browser.js +14 -0
  3. package/build/browser.js.map +1 -1
  4. package/build/index.d.ts +13 -1
  5. package/build/index.js +25 -1
  6. package/build/index.js.map +1 -1
  7. package/build/src/lib/calculators/DataCalculator.d.ts +27 -0
  8. package/build/src/lib/calculators/DataCalculator.js +88 -0
  9. package/build/src/lib/calculators/DataCalculator.js.map +1 -0
  10. package/build/src/lib/fs/Fs.d.ts +52 -0
  11. package/build/src/lib/fs/Fs.js +245 -0
  12. package/build/src/lib/fs/Fs.js.map +1 -0
  13. package/build/src/lib/parsers/UrlEncoder.d.ts +51 -0
  14. package/build/src/lib/parsers/UrlEncoder.js +74 -0
  15. package/build/src/lib/parsers/UrlEncoder.js.map +1 -0
  16. package/build/src/lib/parsers/UrlParser.d.ts +104 -0
  17. package/build/src/lib/parsers/UrlParser.js +189 -0
  18. package/build/src/lib/parsers/UrlParser.js.map +1 -0
  19. package/build/src/lib/parsers/UrlValueParser.d.ts +92 -0
  20. package/build/src/lib/parsers/UrlValueParser.js +172 -0
  21. package/build/src/lib/parsers/UrlValueParser.js.map +1 -0
  22. package/build/src/lib/timers/Timers.d.ts +5 -0
  23. package/build/src/lib/timers/Timers.js +10 -0
  24. package/build/src/lib/timers/Timers.js.map +1 -0
  25. package/build/src/mocking/ProjectMock.d.ts +13 -0
  26. package/build/src/mocking/ProjectMock.js +16 -0
  27. package/build/src/mocking/ProjectMock.js.map +1 -0
  28. package/build/src/mocking/lib/Request.d.ts +32 -0
  29. package/build/src/mocking/lib/Request.js +63 -0
  30. package/build/src/mocking/lib/Request.js.map +1 -0
  31. package/build/src/mocking/lib/Response.d.ts +33 -0
  32. package/build/src/mocking/lib/Response.js +79 -0
  33. package/build/src/mocking/lib/Response.js.map +1 -0
  34. package/build/src/runtime/node/BaseRunner.d.ts +21 -0
  35. package/build/src/runtime/node/BaseRunner.js +27 -0
  36. package/build/src/runtime/node/BaseRunner.js.map +1 -0
  37. package/build/src/runtime/node/ProjectParallelRunner.d.ts +81 -0
  38. package/build/src/runtime/node/ProjectParallelRunner.js +173 -0
  39. package/build/src/runtime/node/ProjectParallelRunner.js.map +1 -0
  40. package/build/src/runtime/node/ProjectRequestRunner.d.ts +125 -0
  41. package/build/src/runtime/node/ProjectRequestRunner.js +185 -0
  42. package/build/src/runtime/node/ProjectRequestRunner.js.map +1 -0
  43. package/build/src/runtime/node/ProjectRunner.d.ts +164 -62
  44. package/build/src/runtime/node/ProjectRunner.js +191 -146
  45. package/build/src/runtime/node/ProjectRunner.js.map +1 -1
  46. package/build/src/runtime/node/ProjectRunnerWorker.d.ts +1 -0
  47. package/build/src/runtime/node/ProjectRunnerWorker.js +58 -0
  48. package/build/src/runtime/node/ProjectRunnerWorker.js.map +1 -0
  49. package/build/src/runtime/node/ProjectSerialRunner.d.ts +11 -0
  50. package/build/src/runtime/node/ProjectSerialRunner.js +34 -0
  51. package/build/src/runtime/node/ProjectSerialRunner.js.map +1 -0
  52. package/build/src/runtime/reporters/ProjectRunCliReporter.d.ts +7 -0
  53. package/build/src/runtime/reporters/ProjectRunCliReporter.js +73 -0
  54. package/build/src/runtime/reporters/ProjectRunCliReporter.js.map +1 -0
  55. package/build/src/runtime/reporters/Reporter.d.ts +62 -0
  56. package/build/src/runtime/reporters/Reporter.js +98 -0
  57. package/build/src/runtime/reporters/Reporter.js.map +1 -0
  58. package/build/src/testing/TestCliHelper.d.ts +29 -0
  59. package/build/src/testing/TestCliHelper.js +80 -0
  60. package/build/src/testing/TestCliHelper.js.map +1 -0
  61. package/build/src/testing/getPort.d.ts +52 -0
  62. package/build/src/testing/getPort.js +169 -0
  63. package/build/src/testing/getPort.js.map +1 -0
  64. package/package.json +3 -2
  65. package/src/lib/calculators/DataCalculator.ts +91 -0
  66. package/src/lib/fs/Fs.ts +258 -0
  67. package/src/lib/parsers/UrlEncoder.ts +74 -0
  68. package/src/lib/parsers/UrlParser.ts +201 -0
  69. package/src/lib/parsers/UrlValueParser.ts +211 -0
  70. package/src/lib/timers/Timers.ts +9 -0
  71. package/src/mocking/LegacyInterfaces.ts +1 -1
  72. package/src/mocking/ProjectMock.ts +20 -0
  73. package/src/mocking/lib/Request.ts +85 -0
  74. package/src/mocking/lib/Response.ts +101 -0
  75. package/src/runtime/node/BaseRunner.ts +29 -0
  76. package/src/runtime/node/ProjectParallelRunner.ts +234 -0
  77. package/src/runtime/node/ProjectRequestRunner.ts +281 -0
  78. package/src/runtime/node/ProjectRunner.ts +279 -186
  79. package/src/runtime/node/ProjectRunnerWorker.ts +62 -0
  80. package/src/runtime/node/ProjectSerialRunner.ts +36 -0
  81. package/src/runtime/reporters/ProjectRunCliReporter.ts +79 -0
  82. package/src/runtime/reporters/Reporter.ts +142 -0
  83. package/src/testing/TestCliHelper.ts +87 -0
  84. package/src/testing/getPort.ts +212 -0
@@ -1,185 +1,230 @@
1
- import { EventEmitter } from 'events';
2
- import { RequestLog } from '../../models/RequestLog.js';
3
- import { Kind as ProjectFolderKind } from '../../models/ProjectFolder.js';
4
- import { SentRequest } from '../..//models/SentRequest.js';
5
- import { ErrorResponse } from '../../models/ErrorResponse.js';
6
- import { VariablesStore } from './VariablesStore.js';
7
- import { VariablesProcessor } from '../variables/VariablesProcessor.js';
8
- import { RequestFactory } from './RequestFactory.js';
9
- import { EventTypes } from '../../events/EventTypes.js';
1
+ import { SerializableError } from '../../models/SerializableError.js';
2
+ import { Environment } from '../../models/Environment.js';
3
+ import { DummyLogger } from '../../lib/logging/DummyLogger.js';
4
+ import { ProjectRequestRunner } from './ProjectRequestRunner.js';
5
+ import { pathExists, readJson } from '../../lib/fs/Fs.js';
6
+ import { BaseRunner } from './BaseRunner.js';
10
7
  /**
11
- * Runs requests in a project.
12
- * Developers can run the entire project with the `recursive` flag set. They can also
13
- * set the starting point with the `parent` options.
8
+ * A class to be extended to run an entire API Project for the given configuration options.
14
9
  *
15
- * Requests are executed in order defined in the folder.
10
+ * The main purpose of this class (and its children) is to iterate over requests
11
+ * in the project and execute them one-by-one.
12
+ *
13
+ * Implementations allow to execute the requests in a serial model or in parallel mode, where
14
+ * a separate workers are created to run the same HTTP requests in each worker.
15
+ *
16
+ * This class generates a run report which other programs can use to build all kinds of UIs
17
+ * around the data collected during the run.
16
18
  */
17
- export class ProjectRunner extends EventEmitter {
18
- eventTarget;
19
- logger;
19
+ export class ProjectRunner extends BaseRunner {
20
+ /**
21
+ * The HTTP project to run requests from.
22
+ */
20
23
  project;
21
- masterEnvironment;
22
- extraVariables;
23
24
  /**
24
- * The variables processor instance.
25
+ * The execution options for the project.
26
+ */
27
+ options;
28
+ /**
29
+ * The root object (project or a folder) where the program starts iterating over the requests.
30
+ */
31
+ root;
32
+ /**
33
+ * The selected environment to apply to the requests.
25
34
  */
26
- variablesProcessor = new VariablesProcessor();
27
- constructor(project, opts = {}) {
35
+ environment;
36
+ /**
37
+ * The events target instance for events dispatched by the request factory.
38
+ */
39
+ target = new EventTarget();
40
+ /**
41
+ * This is used with `--iterations`. The index of the current iteration.
42
+ */
43
+ index = 0;
44
+ /**
45
+ * The currently executed iteration loop.
46
+ */
47
+ currentIteration;
48
+ /**
49
+ * The number of remaining iterations to run.
50
+ */
51
+ remaining = 1;
52
+ /**
53
+ * Whether the configuration allows iterations (the parallel mode).
54
+ */
55
+ hasIterations = false;
56
+ /**
57
+ * When set it won't amit any event.
58
+ * This can be used in a background worker when events are never handled.
59
+ */
60
+ noEmit = false;
61
+ constructor() {
28
62
  super();
29
- this.project = project;
30
- this.logger = opts.logger;
31
- this.eventTarget = opts.eventTarget || new EventTarget();
32
- this.masterEnvironment = opts.environment;
33
- this.extraVariables = opts.variables;
63
+ this._requestHandler = this._requestHandler.bind(this);
64
+ this._responseHandler = this._responseHandler.bind(this);
65
+ this._errorHandler = this._errorHandler.bind(this);
34
66
  }
35
67
  /**
36
- * Runs the request from the project root or a specified folder.
37
- * @param options Run options.
38
- * @returns A promise with the run result.
39
- */
40
- async run(options) {
41
- const { project } = this;
42
- const executed = [];
43
- for (const request of project.requestIterator(options)) {
44
- const parent = request.getParent() || project;
45
- let variables;
46
- if (VariablesStore.has(parent)) {
47
- variables = VariablesStore.get(parent);
48
- }
49
- else {
50
- variables = await this.getVariables(parent);
51
- VariablesStore.set(parent, variables);
52
- }
53
- const info = await this.execute(request, variables);
54
- executed.push(info);
68
+ * A required step before running the project.
69
+ * It configures the execution context. It may throw an error when configuration is not valid.
70
+ */
71
+ async configure(project, opts = {}) {
72
+ this.project = project;
73
+ this.options = opts || {};
74
+ if (typeof this.options.iterations === 'number' && this.options.iterations >= 0) {
75
+ this.remaining = this.options.iterations;
76
+ }
77
+ this.hasIterations = this.remaining > 1;
78
+ const root = opts.parent ? project.findFolder(opts.parent) : project;
79
+ if (!root) {
80
+ throw new Error(`Unable to locate the folder: ${opts.parent}`);
55
81
  }
56
- return executed;
82
+ this.root = root;
83
+ this.environment = await this.getEnvironment();
57
84
  }
58
- async execute(request, variables) {
59
- const config = request.getConfig();
60
- const factory = new RequestFactory(this.eventTarget);
61
- factory.variables = variables;
62
- if (request.authorization) {
63
- factory.authorization = request.authorization.map(i => i.toJSON());
85
+ /**
86
+ * Creates the report of the execution.
87
+ */
88
+ async createReport() {
89
+ const log = {
90
+ started: this.startTime,
91
+ ended: this.endTime,
92
+ iterations: this.executed,
93
+ };
94
+ return log;
95
+ }
96
+ /**
97
+ * Reads the environment data to use with the execution.
98
+ * If the configured environment is a location of a file
99
+ * it is read as API Client's environment and used in the execution.
100
+ * Otherwise it searches for the environment in the list of the defined
101
+ * environments by the name of the key.
102
+ *
103
+ * It throws when the environment cannot be found or when the file contents is invalid.
104
+ */
105
+ async getEnvironment() {
106
+ const { options } = this;
107
+ if (!options) {
108
+ throw new Error(`Run configure() first.`);
64
109
  }
65
- if (request.actions) {
66
- factory.actions = request.actions.toJSON();
110
+ if (!options.environment) {
111
+ return;
67
112
  }
68
- if (request.clientCertificate) {
69
- factory.certificates = [request.clientCertificate];
113
+ const fileExists = await pathExists(options.environment);
114
+ if (fileExists) {
115
+ const contents = await readJson(options.environment);
116
+ return new Environment(contents);
70
117
  }
71
- if (config.enabled !== false) {
72
- factory.config = config.toJSON();
118
+ const root = this.root;
119
+ const envs = root.getEnvironments();
120
+ const env = envs.find(i => i.key === options.environment || i.info.name === options.environment);
121
+ if (!env) {
122
+ throw new SerializableError(`The environment cannot be found: ${options.environment}.`, 'EENVNOTFOUND');
73
123
  }
74
- if (this.logger) {
75
- factory.logger = this.logger;
124
+ return env;
125
+ }
126
+ /**
127
+ * Runs the requests from the project as configured.
128
+ */
129
+ async executeIteration() {
130
+ const { environment, project, options, hasIterations, index, noEmit } = this;
131
+ if (!options || !project) {
132
+ throw new Error(`Run configure() first.`);
76
133
  }
77
- const info = {
78
- key: request.key,
79
- };
80
- const requestData = request.expects.toJSON();
81
- requestData.url = this.prepareRequestUrl(requestData.url, variables);
82
- function variableHandler(e) {
83
- if (e.defaultPrevented) {
84
- return;
85
- }
86
- const { name, value } = e.detail;
87
- variables[name] = value;
88
- e.preventDefault();
89
- e.detail.result = Promise.resolve();
134
+ if (!noEmit) {
135
+ this.emit('before-iteration', index, hasIterations);
90
136
  }
91
- this.eventTarget.addEventListener(EventTypes.Environment.set, variableHandler);
137
+ const runner = new ProjectRequestRunner(project, {
138
+ environment,
139
+ logger: options.logger ? options.logger : new DummyLogger(),
140
+ eventTarget: this.target,
141
+ variables: this.getSystemVariables(),
142
+ });
143
+ runner.on('request', this._requestHandler);
144
+ runner.on('response', this._responseHandler);
145
+ runner.on('error', this._errorHandler);
146
+ this.currentIteration = {
147
+ index: this.index,
148
+ executed: [],
149
+ };
92
150
  try {
93
- // Below replaces the single call to the `run()` function of the factory to
94
- // report via the events a request object that has evaluated with the Jexl library.
95
- const requestCopy = await factory.processRequestVariables(requestData);
96
- this.emit('request', request.key, { ...requestCopy });
97
- await factory.processRequestLogic(requestCopy);
98
- const result = await factory.executeRequest(requestCopy);
99
- await factory.processResponse(result);
100
- request.setLog(result);
101
- info.log = result;
102
- this.emit('response', request.key, { ...result });
151
+ await runner.run({
152
+ parent: options.parent,
153
+ requests: options.request,
154
+ ignore: options.ignore,
155
+ recursive: options.recursive
156
+ });
103
157
  }
104
158
  catch (e) {
105
159
  const cause = e;
106
- info.error = true;
107
- info.errorMessage = cause.message;
108
- const sent = new SentRequest({ ...requestData, startTime: 0, endTime: 0, });
109
- const response = ErrorResponse.fromError(info.errorMessage);
110
- const log = RequestLog.fromRequestResponse(sent.toJSON(), response.toJSON()).toJSON();
111
- this.emit('error', request.key, log, info.errorMessage);
112
- }
113
- this.eventTarget.removeEventListener(EventTypes.Environment.set, variableHandler);
114
- return info;
115
- }
116
- async getVariables(parent) {
117
- if (this.masterEnvironment) {
118
- return this.applyVariables([this.masterEnvironment]);
160
+ console.error(e);
161
+ this.currentIteration.error = cause.message || 'Unknown error ocurred';
162
+ // ...
163
+ }
164
+ this.executed.push(this.currentIteration);
165
+ if (!noEmit) {
166
+ this.emit('after-iteration', index, hasIterations);
119
167
  }
120
- return this.createEnvironment(parent);
121
168
  }
122
- async createEnvironment(parent) {
123
- const envs = await this.readEnvironments(parent);
124
- return this.applyVariables(envs);
169
+ /**
170
+ * Retargets the "request" event from the factory.
171
+ */
172
+ _requestHandler(key, request) {
173
+ if (!this.noEmit) {
174
+ this.emit('request', key, request);
175
+ }
125
176
  }
126
177
  /**
127
- * Reads the list of the environments to apply to this runtime.
178
+ * Retargets the "response" event from the factory.
128
179
  */
129
- async readEnvironments(parent) {
130
- const folderKey = parent.kind === ProjectFolderKind ? parent.key : undefined;
131
- return this.project.readEnvironments({ folderKey });
180
+ _responseHandler(key, log) {
181
+ this.currentIteration?.executed.push(log);
182
+ if (!this.noEmit) {
183
+ this.emit('response', key, log);
184
+ }
132
185
  }
133
186
  /**
134
- * Reads the variables and the base URI from the passed environments.
187
+ * Retargets the "error" event from the factory.
135
188
  */
136
- async applyVariables(environments) {
137
- let baseUri = '';
138
- const variables = [];
139
- environments.forEach((environment) => {
140
- const { server, variables: envVariables } = environment;
141
- if (server) {
142
- baseUri = server.readUri();
143
- }
144
- if (envVariables.length) {
145
- envVariables.forEach((item) => {
146
- const defined = variables.findIndex(i => i.name === item.name);
147
- if (defined >= 0) {
148
- variables[defined] = item;
149
- }
150
- else {
151
- variables.push(item);
152
- }
153
- });
154
- }
155
- });
156
- const { extraVariables } = this;
157
- const ctx = VariablesProcessor.createContextFromProperties(variables);
158
- if (extraVariables) {
159
- Object.keys(extraVariables).forEach((key) => {
160
- ctx[key] = extraVariables[key];
161
- });
189
+ _errorHandler(key, log, message) {
190
+ this.currentIteration?.executed.push(log);
191
+ if (!this.noEmit) {
192
+ this.emit('error', key, log, message);
162
193
  }
163
- // the `baseUri` is reserved and always set to the environment's `baseUri`.
164
- ctx.baseUri = baseUri || '';
165
- return this.variablesProcessor.buildContext(ctx);
166
194
  }
167
195
  /**
168
- * When defined it applies the serve's base URI to relative URLs.
169
- * @param currentUrl The URL to process.
196
+ * @returns Reads the system variables based on the library configuration.
170
197
  */
171
- prepareRequestUrl(currentUrl, variables) {
172
- const { baseUri } = variables;
173
- if (!baseUri) {
174
- return currentUrl;
198
+ getSystemVariables() {
199
+ const result = {};
200
+ const { options } = this;
201
+ if (!options) {
202
+ return result;
203
+ }
204
+ const { variables } = options;
205
+ if (typeof variables === 'undefined') {
206
+ return result;
175
207
  }
176
- if (currentUrl.startsWith('http:') || currentUrl.startsWith('https:')) {
177
- return currentUrl;
208
+ if (typeof variables === 'boolean') {
209
+ return variables ? this._readSystemVariables() : result;
178
210
  }
179
- if (currentUrl.startsWith('/')) {
180
- return `${baseUri}${currentUrl}`;
211
+ if (Array.isArray(variables)) {
212
+ return this._readSystemVariables(variables);
181
213
  }
182
- return `${baseUri}/${currentUrl}`;
214
+ return variables;
215
+ }
216
+ _readSystemVariables(names) {
217
+ const result = {};
218
+ Object.keys(process.env).forEach((key) => {
219
+ if (names && !names.includes(key)) {
220
+ return;
221
+ }
222
+ const value = process.env[key];
223
+ if (value) {
224
+ result[key] = value;
225
+ }
226
+ });
227
+ return result;
183
228
  }
184
229
  }
185
230
  //# sourceMappingURL=ProjectRunner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectRunner.js","sourceRoot":"","sources":["../../../../src/runtime/node/ProjectRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProjectRunner.js","sourceRoot":"","sources":["../../../../src/runtime/node/ProjectRunner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,58 @@
1
+ /* eslint-disable no-unused-vars */
2
+ import process from 'process';
3
+ import cluster from 'cluster';
4
+ import { HttpProject } from '../../models/HttpProject.js';
5
+ import { sleep } from '../../lib/timers/Timers.js';
6
+ import { ProjectRunner } from './ProjectRunner.js';
7
+ class ProjectExeWorker extends ProjectRunner {
8
+ initialize() {
9
+ if (cluster.isPrimary) {
10
+ throw new Error(`This file should not be called directly.`);
11
+ }
12
+ process.send({ cmd: 'online' });
13
+ process.on('message', this.messageHandler.bind(this));
14
+ }
15
+ messageHandler(message) {
16
+ switch (message.cmd) {
17
+ case 'run':
18
+ this.run(message.data);
19
+ break;
20
+ }
21
+ }
22
+ async run(options) {
23
+ try {
24
+ await this.configure(new HttpProject(options.project), options);
25
+ await this.execute();
26
+ }
27
+ catch (e) {
28
+ const cause = e;
29
+ process.send({ cmd: 'error', data: cause.message });
30
+ }
31
+ }
32
+ async execute() {
33
+ const { root } = this;
34
+ if (!root) {
35
+ throw new Error(`The project runner is not configured.`);
36
+ }
37
+ function unhandledRejection() { }
38
+ process.on('unhandledRejection', unhandledRejection);
39
+ this.startTime = Date.now();
40
+ while (this.remaining > 0) {
41
+ this.remaining--;
42
+ await this.executeIteration();
43
+ this.index++;
44
+ if (this.remaining && this.options?.iterationDelay) {
45
+ await sleep(this.options.iterationDelay);
46
+ }
47
+ }
48
+ process.off('unhandledRejection', unhandledRejection);
49
+ this.endTime = Date.now();
50
+ const log = await this.createReport();
51
+ process.send({ cmd: 'result', data: log.iterations });
52
+ return log;
53
+ }
54
+ }
55
+ const instance = new ProjectExeWorker();
56
+ instance.noEmit = true;
57
+ instance.initialize();
58
+ //# sourceMappingURL=ProjectRunnerWorker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectRunnerWorker.js","sourceRoot":"","sources":["../../../../src/runtime/node/ProjectRunnerWorker.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,gBAAiB,SAAQ,aAAa;IAC1C,UAAU;QACR,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;SAC7D;QACD,OAAO,CAAC,IAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,cAAc,CAAC,OAAuB;QACpC,QAAQ,OAAO,CAAC,GAAG,EAAE;YACnB,KAAK,KAAK;gBAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAqC,CAAC,CAAC;gBAAC,MAAM;SAC5E;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAsC;QAC9C,IAAI;YACF,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;SACtB;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,KAAK,GAAG,CAAU,CAAC;YACzB,OAAO,CAAC,IAAK,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;SACtD;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC1D;QACD,SAAS,kBAAkB,KAAU,CAAC;QACtC,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE;YACzB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE;gBAClD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;aAC1C;SACF;QACD,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE1B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,OAAO,CAAC,IAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACvD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAED,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;AACxC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;AACvB,QAAQ,CAAC,UAAU,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { ProjectRunner } from './ProjectRunner.js';
2
+ import { IProjectExecutionLog } from '../reporters/Reporter.js';
3
+ /**
4
+ * Project runner that runs the requests in the project one-by-one.
5
+ */
6
+ export declare class ProjectSerialRunner extends ProjectRunner {
7
+ /**
8
+ * Executes the requests in the project.
9
+ */
10
+ execute(): Promise<IProjectExecutionLog>;
11
+ }
@@ -0,0 +1,34 @@
1
+ import { SerializableError } from '../../models/SerializableError.js';
2
+ import { sleep } from '../../lib/timers/Timers.js';
3
+ import { ProjectRunner } from './ProjectRunner.js';
4
+ /**
5
+ * Project runner that runs the requests in the project one-by-one.
6
+ */
7
+ export class ProjectSerialRunner extends ProjectRunner {
8
+ /**
9
+ * Executes the requests in the project.
10
+ */
11
+ async execute() {
12
+ const { root } = this;
13
+ if (!root) {
14
+ throw new SerializableError(`The project runner is not configured.`, 'ECONFIGURE');
15
+ }
16
+ this.startTime = Date.now();
17
+ while (this.remaining > 0) {
18
+ this.remaining--;
19
+ await this.executeIteration();
20
+ this.index++;
21
+ if (this.remaining && this.options?.iterationDelay) {
22
+ this.emit('before-sleep');
23
+ await sleep(this.options.iterationDelay);
24
+ this.emit('after-sleep');
25
+ }
26
+ else {
27
+ await sleep(0);
28
+ }
29
+ }
30
+ this.endTime = Date.now();
31
+ return this.createReport();
32
+ }
33
+ }
34
+ //# sourceMappingURL=ProjectSerialRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectSerialRunner.js","sourceRoot":"","sources":["../../../../src/runtime/node/ProjectSerialRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IACpD;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,iBAAiB,CAAC,uCAAuC,EAAE,YAAY,CAAC,CAAC;SACpF;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE;YACzB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE;gBAClD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC1B,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aAC1B;iBAAM;gBACL,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;aAChB;SACF;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import { Reporter } from './Reporter.js';
2
+ /**
3
+ * HTTP project execution reporter for a terminal output.
4
+ */
5
+ export declare class ProjectRunCliReporter extends Reporter {
6
+ generate(): Promise<void>;
7
+ }
@@ -0,0 +1,73 @@
1
+ import { Table } from 'console-table-printer';
2
+ import chalk from 'chalk';
3
+ import { ErrorResponse } from '../../models/ErrorResponse.js';
4
+ import { Reporter } from './Reporter.js';
5
+ /**
6
+ * HTTP project execution reporter for a terminal output.
7
+ */
8
+ export class ProjectRunCliReporter extends Reporter {
9
+ async generate() {
10
+ const { info } = this;
11
+ const table = new Table({
12
+ title: 'Project execution summary',
13
+ columns: [
14
+ { name: 'position', title: ' ', alignment: 'left', },
15
+ { name: 'succeeded', title: 'Succeeded', alignment: 'right', },
16
+ { name: 'failed', title: 'Failed', alignment: 'right', },
17
+ { name: 'total', title: 'Total', alignment: 'right', },
18
+ ],
19
+ });
20
+ table.addRow({
21
+ position: 'Iterations',
22
+ succeeded: info.iterations.length,
23
+ failed: 0,
24
+ total: info.iterations.length,
25
+ });
26
+ const failed = this.computeFailed();
27
+ const succeeded = this.computeSucceeded();
28
+ table.addRow({
29
+ position: 'Requests',
30
+ succeeded,
31
+ failed: failed > 0 ? chalk.redBright(failed) : failed,
32
+ total: failed + succeeded,
33
+ });
34
+ table.printTable();
35
+ process.stdout.write('\n');
36
+ info.iterations.forEach((run, index) => {
37
+ const itNumber = index + 1;
38
+ if (run.error) {
39
+ process.stdout.write(`Iteration ${itNumber} failed: ${run.error}\n\n`);
40
+ return;
41
+ }
42
+ const failed = run.executed.filter(log => this.isFailedLog(log));
43
+ if (!failed.length) {
44
+ return;
45
+ }
46
+ process.stdout.write(`Iteration ${itNumber} Errors\n`);
47
+ failed.forEach((log) => {
48
+ let url = 'Unknown request URL.';
49
+ if (log.request) {
50
+ url = log.request.url;
51
+ }
52
+ const prefix = chalk.dim(`[${url}] `);
53
+ if (log.response && ErrorResponse.isErrorResponse(log.response)) {
54
+ const response = log.response;
55
+ let message = response.error.message ? response.error.message : response.error;
56
+ if (typeof message !== 'string') {
57
+ message = 'Unknown error.';
58
+ }
59
+ process.stdout.write(`${prefix}${message}\n`);
60
+ return;
61
+ }
62
+ if (!log.request) {
63
+ process.stdout.write('Request not executed.\n');
64
+ return;
65
+ }
66
+ const response = log.response;
67
+ process.stdout.write(`${prefix} Status code is: ${response.status}\n`);
68
+ });
69
+ process.stdout.write('\n\n');
70
+ });
71
+ }
72
+ }
73
+ //# sourceMappingURL=ProjectRunCliReporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectRunCliReporter.js","sourceRoot":"","sources":["../../../../src/runtime/reporters/ProjectRunCliReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAkB,MAAM,+BAA+B,CAAC;AAG9E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IACjD,KAAK,CAAC,QAAQ;QACZ,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QAEtB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;YACtB,KAAK,EAAE,2BAA2B;YAClC,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAI;gBACrD,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,GAAG;gBAC9D,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,GAAG;gBACxD,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG;aACvD;SACF,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,CAAC;YACX,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YACjC,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;SAC9B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1C,KAAK,CAAC,MAAM,CAAC;YACX,QAAQ,EAAE,UAAU;YACpB,SAAS;YACT,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;YACrD,KAAK,EAAE,MAAM,GAAG,SAAS;SAC1B,CAAC,CAAC;QACH,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACrC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;YAC3B,IAAI,GAAG,CAAC,KAAK,EAAE;gBACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,QAAQ,YAAY,GAAG,CAAC,KAAK,MAAM,CAAC,CAAC;gBACvE,OAAO;aACR;YACD,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACjE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAClB,OAAO;aACR;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,QAAQ,WAAW,CAAC,CAAC;YACvD,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBACrB,IAAI,GAAG,GAAG,sBAAsB,CAAC;gBACjC,IAAI,GAAG,CAAC,OAAO,EAAE;oBACf,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;iBACvB;gBACD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;gBACtC,IAAI,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;oBAC/D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAA0B,CAAC;oBAChD,IAAI,OAAO,GAAI,QAAQ,CAAC,KAA0B,CAAC,OAAO,CAAC,CAAC,CAAE,QAAQ,CAAC,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAChH,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;wBAC/B,OAAO,GAAG,gBAAgB,CAAC;qBAC5B;oBACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,OAAO,IAAI,CAAC,CAAC;oBAC9C,OAAO;iBACR;gBACD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;oBAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;oBAChD,OAAO;iBACR;gBACD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAwB,CAAC;gBAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,oBAAoB,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}