@smartlyio/oats-nock-adapter 7.0.0 → 7.0.1-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/dist/src/nock.d.ts +0 -24
- package/dist/src/nock.js +0 -229
- package/dist/src/nock.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smartlyio/oats-nock-adapter",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.1-alpha.1+8403ccf",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "nock server adapter for smartlyio/oats s",
|
|
6
6
|
"private": false,
|
|
@@ -37,9 +37,9 @@
|
|
|
37
37
|
"client"
|
|
38
38
|
],
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@smartlyio/oats": "^7.0.
|
|
41
|
-
"@smartlyio/oats-axios-adapter": "^7.0.
|
|
42
|
-
"@smartlyio/oats-runtime": "^7.0.
|
|
40
|
+
"@smartlyio/oats": "^7.0.1-alpha.1+8403ccf",
|
|
41
|
+
"@smartlyio/oats-axios-adapter": "^7.0.1-alpha.1+8403ccf",
|
|
42
|
+
"@smartlyio/oats-runtime": "^7.0.1-alpha.1+8403ccf",
|
|
43
43
|
"@types/jest": "29.5.1",
|
|
44
44
|
"@types/lodash": "4.14.194",
|
|
45
45
|
"@types/node": "18.16.5",
|
|
@@ -72,5 +72,5 @@
|
|
|
72
72
|
"preset": "ts-jest",
|
|
73
73
|
"testMatch": null
|
|
74
74
|
},
|
|
75
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "8403ccf5b922e15d8b5cdbeacf8dde28a8503fed"
|
|
76
76
|
}
|
package/dist/src/nock.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import * as nock from 'nock';
|
|
2
|
-
import * as runtime from '@smartlyio/oats-runtime';
|
|
3
|
-
export declare class Server<Spec> {
|
|
4
|
-
private readonly handler;
|
|
5
|
-
private readonly scopes;
|
|
6
|
-
private routes;
|
|
7
|
-
private handlers;
|
|
8
|
-
private readonly mocks;
|
|
9
|
-
constructor(handler: runtime.server.HandlerFactory<Spec>);
|
|
10
|
-
addHandler(method: string, path: string, handler: runtime.server.SafeEndpoint): void;
|
|
11
|
-
private getKey;
|
|
12
|
-
private getMockKey;
|
|
13
|
-
isMocked(server: string, method: string, path: string): boolean;
|
|
14
|
-
setMocked(server: string, method: string, path: string): void;
|
|
15
|
-
getNock(server: string, method: string, path: string): runtime.server.SafeEndpoint;
|
|
16
|
-
mock(spec: Spec): this;
|
|
17
|
-
addNock(scope: nock.Scope): void;
|
|
18
|
-
private adapter;
|
|
19
|
-
private adapterForServer;
|
|
20
|
-
}
|
|
21
|
-
export declare class Next extends Error {
|
|
22
|
-
constructor();
|
|
23
|
-
}
|
|
24
|
-
export declare function bind<Spec>(handler: runtime.server.HandlerFactory<Spec>, spec?: Spec): Server<Spec>;
|
package/dist/src/nock.js
DELETED
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.bind = exports.Next = exports.Server = void 0;
|
|
4
|
-
const nock = require("nock");
|
|
5
|
-
const runtime = require("@smartlyio/oats-runtime");
|
|
6
|
-
const assert = require("assert");
|
|
7
|
-
function parseContentDisposition(contentDispositionValue) {
|
|
8
|
-
return contentDispositionValue
|
|
9
|
-
.split(';')
|
|
10
|
-
.map(part => part.trim())
|
|
11
|
-
.map(part => {
|
|
12
|
-
const [key, ...values] = part.split('=');
|
|
13
|
-
return [key, values.join('=').replace(/^"/g, '').replace(/"$/, '')];
|
|
14
|
-
})
|
|
15
|
-
.reduce((memo, [key, value]) => ({ ...memo, [key]: value }), {});
|
|
16
|
-
}
|
|
17
|
-
function parseFormItem(item) {
|
|
18
|
-
const headers = {};
|
|
19
|
-
const lines = item.split('\r\n');
|
|
20
|
-
let data;
|
|
21
|
-
for (let i = 0; i < lines.length; i++) {
|
|
22
|
-
if (lines[i] === '') {
|
|
23
|
-
data = lines.slice(i + 1).join('\n');
|
|
24
|
-
break;
|
|
25
|
-
}
|
|
26
|
-
const [header, ...headerValues] = lines[i].split(':');
|
|
27
|
-
headers[header.toLowerCase()] = headerValues.join(':').trim();
|
|
28
|
-
}
|
|
29
|
-
if (headers['content-disposition']) {
|
|
30
|
-
const contentDisposition = parseContentDisposition(headers['content-disposition']);
|
|
31
|
-
if (contentDisposition.filename) {
|
|
32
|
-
return {
|
|
33
|
-
key: contentDisposition.name,
|
|
34
|
-
value: new runtime.make.FormBinary(Buffer.from(data || ''), contentDisposition.filename)
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
return {
|
|
38
|
-
key: contentDisposition.name,
|
|
39
|
-
value: data
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
function parseFormData(boundary, value) {
|
|
44
|
-
if (typeof value !== 'string') {
|
|
45
|
-
return assert.fail('form-data value is not a string');
|
|
46
|
-
}
|
|
47
|
-
return value.split(boundary).reduce((memo, item) => {
|
|
48
|
-
if (item === '') {
|
|
49
|
-
return memo;
|
|
50
|
-
}
|
|
51
|
-
const parsed = parseFormItem(item);
|
|
52
|
-
if (!parsed) {
|
|
53
|
-
return memo;
|
|
54
|
-
}
|
|
55
|
-
return { ...memo, [parsed.key]: parsed.value };
|
|
56
|
-
}, {});
|
|
57
|
-
}
|
|
58
|
-
function getBody(contentType, value) {
|
|
59
|
-
if (!contentType) {
|
|
60
|
-
return value;
|
|
61
|
-
}
|
|
62
|
-
if (/application\/json/.test(contentType)) {
|
|
63
|
-
return { contentType: 'application/json', value };
|
|
64
|
-
}
|
|
65
|
-
const formData = contentType.match(/^multipart\/form-data.*; boundary=([^;]+)/);
|
|
66
|
-
if (formData) {
|
|
67
|
-
const boundary = new RegExp('(?:\r\n)?[^\r\n]*' + formData[1] + '[^\r\n]*(?:\r\n)?');
|
|
68
|
-
return { contentType: 'multipart/form-data', value: parseFormData(boundary, value) };
|
|
69
|
-
}
|
|
70
|
-
const multipartRelatedData = contentType.match(/^multipart\/related.*; boundary=([^;]+)/);
|
|
71
|
-
if (multipartRelatedData) {
|
|
72
|
-
return { contentType: 'multipart/related', value: value };
|
|
73
|
-
}
|
|
74
|
-
return value;
|
|
75
|
-
}
|
|
76
|
-
function getQuery(url) {
|
|
77
|
-
const query = {};
|
|
78
|
-
url.searchParams.forEach((value, key) => {
|
|
79
|
-
query[key] = value;
|
|
80
|
-
});
|
|
81
|
-
return Object.keys(query).length > 0 ? query : undefined;
|
|
82
|
-
}
|
|
83
|
-
function getParams(pathTemplate, actualPath) {
|
|
84
|
-
const pathRegex = getPathRegex(pathTemplate);
|
|
85
|
-
const match = actualPath.match(pathRegex);
|
|
86
|
-
if (!match) {
|
|
87
|
-
return assert.fail('path regex did not match given path: ' + actualPath);
|
|
88
|
-
}
|
|
89
|
-
const params = {};
|
|
90
|
-
getPathParamNames(pathTemplate).forEach((key, index) => {
|
|
91
|
-
params[stripCurlies(key)] = match[index + 1];
|
|
92
|
-
});
|
|
93
|
-
return Object.keys(params).length > 0 ? params : undefined;
|
|
94
|
-
}
|
|
95
|
-
function stripCurlies(param) {
|
|
96
|
-
return param.replace(/}|{/g, '');
|
|
97
|
-
}
|
|
98
|
-
function getPathParamNames(pathTemplate) {
|
|
99
|
-
return pathTemplate.match(/{([^}]+)}/g) || [];
|
|
100
|
-
}
|
|
101
|
-
function getPathRegex(pathTemplate) {
|
|
102
|
-
const pathWithParams = pathTemplate.replace(/{([^}]+)}/g, (m, param) => ' ' + param + ' ');
|
|
103
|
-
const escapedPath = pathWithParams.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
104
|
-
return new RegExp(escapedPath.replace(/ ([^ ]+) /g, '([^?/]+)'));
|
|
105
|
-
}
|
|
106
|
-
function normalizeHeaderValue(value) {
|
|
107
|
-
if (Array.isArray(value)) {
|
|
108
|
-
assert(value.length === 1, 'unexpected length of header array');
|
|
109
|
-
value = value[0];
|
|
110
|
-
}
|
|
111
|
-
if (typeof value === 'string') {
|
|
112
|
-
return value;
|
|
113
|
-
}
|
|
114
|
-
if (typeof value === 'number') {
|
|
115
|
-
return `${value}`;
|
|
116
|
-
}
|
|
117
|
-
assert.fail(`Unknown header value ${value}`);
|
|
118
|
-
}
|
|
119
|
-
function normalizeHeaders(headers) {
|
|
120
|
-
headers = headers || {};
|
|
121
|
-
return Object.entries(headers).reduce((memo, [key, value]) => {
|
|
122
|
-
return {
|
|
123
|
-
...memo,
|
|
124
|
-
[key]: normalizeHeaderValue(value)
|
|
125
|
-
};
|
|
126
|
-
}, {});
|
|
127
|
-
}
|
|
128
|
-
class Server {
|
|
129
|
-
handler;
|
|
130
|
-
scopes = [];
|
|
131
|
-
routes = {};
|
|
132
|
-
handlers = {};
|
|
133
|
-
mocks = {};
|
|
134
|
-
constructor(handler) {
|
|
135
|
-
this.handler = handler;
|
|
136
|
-
}
|
|
137
|
-
addHandler(method, path, handler) {
|
|
138
|
-
const key = this.getKey(method, path);
|
|
139
|
-
if (!this.handlers[key]) {
|
|
140
|
-
this.handlers[key] = [handler];
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
this.handlers[key].unshift(handler);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
getKey(method, path) {
|
|
147
|
-
return method + ' ' + path;
|
|
148
|
-
}
|
|
149
|
-
getMockKey(server, method, path) {
|
|
150
|
-
return [server, method, path].join(' ');
|
|
151
|
-
}
|
|
152
|
-
isMocked(server, method, path) {
|
|
153
|
-
return this.mocks[this.getMockKey(server, method, path)];
|
|
154
|
-
}
|
|
155
|
-
setMocked(server, method, path) {
|
|
156
|
-
this.mocks[this.getMockKey(server, method, path)] = true;
|
|
157
|
-
}
|
|
158
|
-
getNock(server, method, path) {
|
|
159
|
-
this.setMocked(server, method, path);
|
|
160
|
-
return async (ctx) => {
|
|
161
|
-
for (const handler of this.handlers[this.getKey(ctx.method, ctx.path)]) {
|
|
162
|
-
try {
|
|
163
|
-
return await handler(ctx);
|
|
164
|
-
}
|
|
165
|
-
catch (e) {
|
|
166
|
-
if (!(e instanceof Next)) {
|
|
167
|
-
throw e;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
throw new Error('no nock handler matched');
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
mock(spec) {
|
|
175
|
-
this.handler(this.adapter)(spec);
|
|
176
|
-
return this;
|
|
177
|
-
}
|
|
178
|
-
addNock(scope) {
|
|
179
|
-
this.scopes.push(scope);
|
|
180
|
-
}
|
|
181
|
-
adapter = (path, op, method, handler, servers) => {
|
|
182
|
-
servers.map(server => this.adapterForServer(path, op, method, handler, server));
|
|
183
|
-
};
|
|
184
|
-
adapterForServer(path, op, method, handler, server) {
|
|
185
|
-
this.addHandler(method, path, handler);
|
|
186
|
-
if (this.isMocked(server, method, path)) {
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
const nocked = this.getNock(server, method, path);
|
|
190
|
-
nock(server)[method](getPathRegex(path))
|
|
191
|
-
.reply(async function (uri, requestBody, cb) {
|
|
192
|
-
const headers = normalizeHeaders(this.req.headers);
|
|
193
|
-
const body = getBody(headers['content-type'], requestBody);
|
|
194
|
-
const url = new URL('http://host-for-nock' + uri);
|
|
195
|
-
try {
|
|
196
|
-
const result = await nocked({
|
|
197
|
-
path,
|
|
198
|
-
method,
|
|
199
|
-
servers: [server],
|
|
200
|
-
op,
|
|
201
|
-
headers,
|
|
202
|
-
params: getParams(path, uri),
|
|
203
|
-
query: getQuery(url),
|
|
204
|
-
body,
|
|
205
|
-
requestContext: null
|
|
206
|
-
});
|
|
207
|
-
const status = result.status;
|
|
208
|
-
const responseBody = result.value.value;
|
|
209
|
-
cb(null, [status, responseBody]);
|
|
210
|
-
}
|
|
211
|
-
catch (e) {
|
|
212
|
-
cb(e, [400, e.message]);
|
|
213
|
-
}
|
|
214
|
-
})
|
|
215
|
-
.persist(true);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
exports.Server = Server;
|
|
219
|
-
class Next extends Error {
|
|
220
|
-
constructor() {
|
|
221
|
-
super('Next nock handler requested');
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
exports.Next = Next;
|
|
225
|
-
function bind(handler, spec) {
|
|
226
|
-
return new Server(handler).mock(spec || {});
|
|
227
|
-
}
|
|
228
|
-
exports.bind = bind;
|
|
229
|
-
//# sourceMappingURL=nock.js.map
|
package/dist/src/nock.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nock.js","sourceRoot":"","sources":["../../src/nock.ts"],"names":[],"mappings":"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"}
|