@readme/httpsnippet 11.0.0 → 11.1.0
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/{chunk-Y7NI4MMY.js → chunk-6B3J3CUI.js} +2 -2
- package/dist/chunk-6B3J3CUI.js.map +1 -0
- package/dist/{chunk-452Q5GGQ.js → chunk-EFUQ6POB.js} +26 -24
- package/dist/chunk-EFUQ6POB.js.map +1 -0
- package/dist/{chunk-KT7MO6Z4.js → chunk-LCVMSGCB.js} +2 -2
- package/dist/chunk-LCVMSGCB.js.map +1 -0
- package/dist/helpers/code-builder.cjs.map +1 -1
- package/dist/helpers/code-builder.js +1 -1
- package/dist/helpers/reducer.cjs.map +1 -1
- package/dist/helpers/reducer.js +1 -1
- package/dist/index.cjs +51 -34
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +27 -12
- package/dist/index.js.map +1 -1
- package/dist/targets/index.cjs +23 -21
- package/dist/targets/index.cjs.map +1 -1
- package/dist/targets/index.d.cts +160 -6
- package/dist/targets/index.d.ts +160 -6
- package/dist/targets/index.js +2 -2
- package/package.json +14 -14
- package/dist/chunk-452Q5GGQ.js.map +0 -1
- package/dist/chunk-KT7MO6Z4.js.map +0 -1
- package/dist/chunk-Y7NI4MMY.js.map +0 -1
- package/dist/index-Bi-oJSCB.d.ts +0 -164
- package/dist/index-CM3ebXTM.d.cts +0 -164
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import 'har-format';
|
|
2
|
-
import './helpers/reducer.cjs';
|
|
3
|
-
export { n as HTTPSnippet, m as HTTPSnippetOptions, H as HarRequest, l as Request, R as RequestExtras, j as addClientPlugin, g as addTarget, k as addTargetClient, o as availableTargets, p as extname } from './index-CM3ebXTM.cjs';
|
|
4
1
|
import 'node:url';
|
|
5
|
-
import '
|
|
2
|
+
import 'har-format';
|
|
6
3
|
import 'type-fest';
|
|
4
|
+
import './helpers/code-builder.cjs';
|
|
5
|
+
import './helpers/reducer.cjs';
|
|
6
|
+
export { Client, c as HTTPSnippet, b as HTTPSnippetOptions, H as HarRequest, O as Options, a as Request, R as RequestExtras, addClientPlugin, addTarget, addTargetClient, d as availableTargets, e as extname } from './targets/index.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import 'har-format';
|
|
2
|
-
import './helpers/reducer.js';
|
|
3
|
-
export { n as HTTPSnippet, m as HTTPSnippetOptions, H as HarRequest, l as Request, R as RequestExtras, j as addClientPlugin, g as addTarget, k as addTargetClient, o as availableTargets, p as extname } from './index-Bi-oJSCB.js';
|
|
4
1
|
import 'node:url';
|
|
5
|
-
import '
|
|
2
|
+
import 'har-format';
|
|
6
3
|
import 'type-fest';
|
|
4
|
+
import './helpers/code-builder.js';
|
|
5
|
+
import './helpers/reducer.js';
|
|
6
|
+
export { Client, c as HTTPSnippet, b as HTTPSnippetOptions, H as HarRequest, O as Options, a as Request, R as RequestExtras, addClientPlugin, addTarget, addTargetClient, d as availableTargets, e as extname } from './targets/index.js';
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { reducer } from './chunk-
|
|
2
|
-
import { targets, getHeaderName } from './chunk-
|
|
3
|
-
export { addClientPlugin, addTarget, addTargetClient } from './chunk-
|
|
4
|
-
import './chunk-
|
|
1
|
+
import { reducer } from './chunk-LCVMSGCB.js';
|
|
2
|
+
import { targets, getHeaderName } from './chunk-EFUQ6POB.js';
|
|
3
|
+
export { addClientPlugin, addTarget, addTargetClient } from './chunk-EFUQ6POB.js';
|
|
4
|
+
import './chunk-6B3J3CUI.js';
|
|
5
5
|
import { parse, format } from 'url';
|
|
6
6
|
import { stringify } from 'qs';
|
|
7
7
|
|
|
@@ -75,10 +75,10 @@ var HTTPSnippet = class {
|
|
|
75
75
|
cookiesObj: {},
|
|
76
76
|
allHeaders: {}
|
|
77
77
|
};
|
|
78
|
-
if (request
|
|
78
|
+
if (request?.queryString.length) {
|
|
79
79
|
request.queryObj = request.queryString.reduce(reducer, {});
|
|
80
80
|
}
|
|
81
|
-
if (request
|
|
81
|
+
if (request?.headers.length) {
|
|
82
82
|
const http2VersionRegex = /^HTTP\/2/;
|
|
83
83
|
request.headersObj = request.headers.reduce((accumulator, { name, value }) => {
|
|
84
84
|
const headerName = http2VersionRegex.exec(request.httpVersion) ? name.toLocaleLowerCase() : name;
|
|
@@ -88,7 +88,7 @@ var HTTPSnippet = class {
|
|
|
88
88
|
};
|
|
89
89
|
}, {});
|
|
90
90
|
}
|
|
91
|
-
if (request
|
|
91
|
+
if (request?.cookies.length) {
|
|
92
92
|
request.cookiesObj = request.cookies.reduceRight(
|
|
93
93
|
(accumulator, { name, value }) => ({
|
|
94
94
|
...accumulator,
|
|
@@ -117,7 +117,7 @@ var HTTPSnippet = class {
|
|
|
117
117
|
const boundary = "---011000010111000001101001";
|
|
118
118
|
const carriage = `${boundary}--`;
|
|
119
119
|
const rn = "\r\n";
|
|
120
|
-
const
|
|
120
|
+
const escapeStr = (str) => str.replace(/\n/g, "%0A").replace(/\r/g, "%0D").replace(/"/g, "%22");
|
|
121
121
|
const normalizeLinefeeds = (value) => value.replace(/\r?\n|\r/g, "\r\n");
|
|
122
122
|
const payload = [`--${boundary}`];
|
|
123
123
|
request.postData?.params.forEach((param, i) => {
|
|
@@ -127,7 +127,7 @@ var HTTPSnippet = class {
|
|
|
127
127
|
const contentType = param.contentType || "application/octet-stream";
|
|
128
128
|
if (filename) {
|
|
129
129
|
payload.push(
|
|
130
|
-
`Content-Disposition: form-data; name="${
|
|
130
|
+
`Content-Disposition: form-data; name="${escapeStr(normalizeLinefeeds(name))}"; filename="${filename}"`
|
|
131
131
|
);
|
|
132
132
|
payload.push(`Content-Type: ${contentType}`);
|
|
133
133
|
} else {
|
|
@@ -162,7 +162,7 @@ var HTTPSnippet = class {
|
|
|
162
162
|
if (request.postData.text) {
|
|
163
163
|
try {
|
|
164
164
|
request.postData.jsonObj = JSON.parse(request.postData.text);
|
|
165
|
-
} catch
|
|
165
|
+
} catch {
|
|
166
166
|
request.postData.mimeType = "text/plain";
|
|
167
167
|
}
|
|
168
168
|
}
|
|
@@ -216,16 +216,31 @@ var HTTPSnippet = class {
|
|
|
216
216
|
this.init();
|
|
217
217
|
}
|
|
218
218
|
if (!options && clientId) {
|
|
219
|
-
options = clientId;
|
|
219
|
+
options = { clientId };
|
|
220
220
|
}
|
|
221
221
|
const target = targets[targetId];
|
|
222
222
|
if (!target) {
|
|
223
|
-
return false;
|
|
223
|
+
return [false];
|
|
224
224
|
}
|
|
225
225
|
const { convert } = target.clientsById[clientId || target.info.default];
|
|
226
226
|
const results = this.requests.map((request) => convert(request, options));
|
|
227
227
|
return results;
|
|
228
228
|
}
|
|
229
|
+
installation(targetId, clientId, options) {
|
|
230
|
+
if (!this.initCalled) {
|
|
231
|
+
this.init();
|
|
232
|
+
}
|
|
233
|
+
if (!options && clientId) {
|
|
234
|
+
options = { clientId };
|
|
235
|
+
}
|
|
236
|
+
const target = targets[targetId];
|
|
237
|
+
if (!target) {
|
|
238
|
+
return [false];
|
|
239
|
+
}
|
|
240
|
+
const { info } = target.clientsById[clientId || target.info.default];
|
|
241
|
+
const results = this.requests.map((request) => info?.installation ? info.installation(request, options) : false);
|
|
242
|
+
return results;
|
|
243
|
+
}
|
|
229
244
|
};
|
|
230
245
|
/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */
|
|
231
246
|
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/helpers/utils.ts","../src/index.ts"],"names":["queryStringify","urlParse","urlFormat"],"mappings":";;;;;;;;AAQO,IAAM,mBAAmB,MAC9B,MAAA,CAAO,KAAK,OAAO,CAAA,CAAE,IAAqB,CAAa,QAAA,MAAA;AAAA,EACrD,GAAG,OAAQ,CAAA,QAAoB,CAAE,CAAA,IAAA;AAAA,EACjC,SAAS,MAAO,CAAA,IAAA,CAAK,QAAQ,QAAoB,CAAA,CAAE,WAAW,CAAE,CAAA,GAAA;AAAA,IAC9D,cAAY,OAAQ,CAAA,QAAoB,CAAE,CAAA,WAAA,CAAY,QAAQ,CAAE,CAAA,IAAA;AAAA,GAClE;AACF,CAAE,CAAA,EAAA;AAES,IAAA,OAAA,GAAU,CAAC,QAAA,EAAoB,QAAuB,KAAA;AACjE,EAAM,MAAA,MAAA,GAAS,QAAQ,QAAQ,CAAA,CAAA;AAC/B,EAAA,IAAI,CAAC,MAAQ,EAAA;AACX,IAAO,OAAA,EAAA,CAAA;AAAA,GACT;AAEA,EAAA,OAAO,MAAO,CAAA,WAAA,CAAY,QAAQ,CAAA,EAAG,KAAK,OAAW,IAAA,EAAA,CAAA;AACvD,EAAA;;;ACyCA,IAAM,aAAa,CAAC,KAAA,KAClB,OAAO,KAAU,KAAA,QAAA,IACjB,SAAS,KACT,IAAA,OAAO,MAAM,GAAQ,KAAA,QAAA,IACrB,aAAa,KAAM,CAAA,GAAA,IACnB,MAAM,OAAQ,CAAA,KAAA,CAAM,IAAI,OAAO,CAAA,CAAA;AAE1B,IAAM,cAAN,MAAkB;AAAA,EASvB,WAAY,CAAA,KAAA,EAA8B,IAA2B,GAAA,EAAI,EAAA;AARzE,IAAa,IAAA,CAAA,UAAA,GAAA,KAAA,CAAA;AAEb,IAAA,IAAA,CAAA,OAAA,GAAmB,EAAC,CAAA;AAEpB,IAAA,IAAA,CAAA,QAAA,GAAsB,EAAC,CAAA;AAEvB,IAAA,IAAA,CAAA,OAAA,GAA8B,EAAC,CAAA;AAG7B,IAAA,IAAA,CAAK,OAAU,GAAA;AAAA,MACb,mBAAqB,EAAA,KAAA;AAAA,MACrB,GAAG,IAAA;AAAA,KACL,CAAA;AAGA,IAAA,IAAA,CAAK,WAAW,EAAC,CAAA;AAGjB,IAAI,IAAA,UAAA,CAAW,KAAK,CAAG,EAAA;AACrB,MAAK,IAAA,CAAA,OAAA,GAAU,MAAM,GAAI,CAAA,OAAA,CAAA;AAAA,KACpB,MAAA;AACL,MAAA,IAAA,CAAK,OAAU,GAAA;AAAA,QACb;AAAA,UACE,OAAS,EAAA,KAAA;AAAA,SACX;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF;AAAA,EAEA,IAAO,GAAA;AACL,IAAA,IAAA,CAAK,UAAa,GAAA,IAAA,CAAA;AAElB,IAAA,IAAA,CAAK,WAAW,IAAK,CAAA,OAAA,CAAQ,IAAI,CAAC,EAAE,SAAc,KAAA;AAEhD,MAAA,MAAM,GAAM,GAAA;AAAA,QACV,QAAU,EAAA,CAAA;AAAA,QACV,WAAa,EAAA,CAAA;AAAA,QACb,SAAS,EAAC;AAAA,QACV,SAAS,EAAC;AAAA,QACV,WAAa,EAAA,UAAA;AAAA,QACb,aAAa,EAAC;AAAA,QACd,QAAU,EAAA;AAAA,UACR,QAAA,EAAU,OAAQ,CAAA,QAAA,EAAU,QAAY,IAAA,0BAAA;AAAA,SAC1C;AAAA,QACA,GAAG,OAAA;AAAA,OACL,CAAA;AAGA,MAAA,IAAI,GAAI,CAAA,QAAA,IAAY,CAAC,GAAA,CAAI,SAAS,QAAU,EAAA;AAC1C,QAAA,GAAA,CAAI,SAAS,QAAW,GAAA,0BAAA,CAAA;AAAA,OAC1B;AAEA,MAAA,OAAO,IAAK,CAAA,OAAA,CAAQ,GAAmB,EAAA,IAAA,CAAK,OAAO,CAAA,CAAA;AAAA,KACpD,CAAA,CAAA;AAED,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEA,OAAA,CAAQ,YAAwB,OAA6B,EAAA;AAC3D,IAAA,MAAM,OAAmB,GAAA;AAAA,MACvB,GAAG,UAAA;AAAA,MACH,OAAS,EAAA,EAAA;AAAA,MACT,QAAQ,EAAC;AAAA,MACT,UAAU,EAAC;AAAA,MACX,YAAY,EAAC;AAAA,MACb,YAAY,EAAC;AAAA,MACb,YAAY,EAAC;AAAA,KACf,CAAA;AAGA,IAAA,IAAI,OAAQ,CAAA,WAAA,IAAe,OAAQ,CAAA,WAAA,CAAY,MAAQ,EAAA;AACrD,MAAA,OAAA,CAAQ,WAAW,OAAQ,CAAA,WAAA,CAAY,MAAO,CAAA,OAAA,EAAS,EAAE,CAAA,CAAA;AAAA,KAC3D;AAGA,IAAA,IAAI,OAAQ,CAAA,OAAA,IAAW,OAAQ,CAAA,OAAA,CAAQ,MAAQ,EAAA;AAC7C,MAAA,MAAM,iBAAoB,GAAA,UAAA,CAAA;AAC1B,MAAQ,OAAA,CAAA,UAAA,GAAa,QAAQ,OAAQ,CAAA,MAAA,CAAO,CAAC,WAAa,EAAA,EAAE,IAAM,EAAA,KAAA,EAAY,KAAA;AAC5E,QAAM,MAAA,UAAA,GAAa,kBAAkB,IAAK,CAAA,OAAA,CAAQ,WAAW,CAAI,GAAA,IAAA,CAAK,mBAAsB,GAAA,IAAA,CAAA;AAC5F,QAAO,OAAA;AAAA,UACL,GAAG,WAAA;AAAA,UACH,CAAC,UAAU,GAAG,KAAA;AAAA,SAChB,CAAA;AAAA,OACF,EAAG,EAAE,CAAA,CAAA;AAAA,KACP;AAGA,IAAA,IAAI,OAAQ,CAAA,OAAA,IAAW,OAAQ,CAAA,OAAA,CAAQ,MAAQ,EAAA;AAC7C,MAAQ,OAAA,CAAA,UAAA,GAAa,QAAQ,OAAQ,CAAA,WAAA;AAAA,QACnC,CAAC,WAAA,EAAa,EAAE,IAAA,EAAM,OAAa,MAAA;AAAA,UACjC,GAAG,WAAA;AAAA,UACH,CAAC,IAAI,GAAG,KAAA;AAAA,SACV,CAAA;AAAA,QACA,EAAC;AAAA,OACH,CAAA;AAAA,KACF;AAGA,IAAM,MAAA,OAAA,GAAU,QAAQ,OAAS,EAAA,GAAA,CAAI,CAAC,EAAE,IAAA,EAAM,OAAY,KAAA;AACxD,MAAA,IAAI,QAAQ,mBAAqB,EAAA;AAC/B,QAAO,OAAA,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAA;AAAA,OACzB;AAEA,MAAA,OAAO,GAAG,kBAAmB,CAAA,IAAI,CAAC,CAAI,CAAA,EAAA,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA,CAAA;AAAA,KAChE,CAAA,CAAA;AAED,IAAA,IAAI,SAAS,MAAQ,EAAA;AACnB,MAAA,OAAA,CAAQ,UAAW,CAAA,MAAA,GAAS,OAAQ,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,KAC/C;AAEA,IAAQ,QAAA,OAAA,CAAQ,SAAS,QAAU;AAAA,MACjC,KAAK,iBAAA,CAAA;AAAA,MACL,KAAK,mBAAA,CAAA;AAAA,MACL,KAAK,qBAAA,CAAA;AAAA,MACL,KAAK,uBAAA;AAEH,QAAA,OAAA,CAAQ,SAAS,IAAO,GAAA,EAAA,CAAA;AACxB,QAAA,OAAA,CAAQ,SAAS,QAAW,GAAA,qBAAA,CAAA;AAE5B,QAAI,IAAA,OAAA,CAAQ,UAAU,MAAQ,EAAA;AAC5B,UAAA,MAAM,QAAW,GAAA,6BAAA,CAAA;AACjB,UAAM,MAAA,QAAA,GAAW,GAAG,QAAQ,CAAA,EAAA,CAAA,CAAA;AAC5B,UAAA,MAAM,EAAK,GAAA,MAAA,CAAA;AAGX,UAAA,MAAM,MAAS,GAAA,CAAC,GAAgB,KAAA,GAAA,CAAI,QAAQ,KAAO,EAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,KAAO,EAAA,KAAK,CAAE,CAAA,OAAA,CAAQ,MAAM,KAAK,CAAA,CAAA;AACnG,UAAA,MAAM,qBAAqB,CAAC,KAAA,KAAkB,KAAM,CAAA,OAAA,CAAQ,aAAa,MAAM,CAAA,CAAA;AAE/E,UAAA,MAAM,OAAU,GAAA,CAAC,CAAK,EAAA,EAAA,QAAQ,CAAE,CAAA,CAAA,CAAA;AAChC,UAAA,OAAA,CAAQ,QAAU,EAAA,MAAA,CAAO,OAAQ,CAAA,CAAC,OAAO,CAAM,KAAA;AAC7C,YAAA,MAAM,OAAO,KAAM,CAAA,IAAA,CAAA;AACnB,YAAM,MAAA,KAAA,GAAQ,MAAM,KAAS,IAAA,EAAA,CAAA;AAC7B,YAAM,MAAA,QAAA,GAAW,MAAM,QAAY,IAAA,IAAA,CAAA;AACnC,YAAM,MAAA,WAAA,GAAc,MAAM,WAAe,IAAA,0BAAA,CAAA;AAEzC,YAAA,IAAI,QAAU,EAAA;AACZ,cAAQ,OAAA,CAAA,IAAA;AAAA,gBACN,yCAAyC,MAAO,CAAA,kBAAA,CAAmB,IAAI,CAAC,CAAC,gBAAgB,QAAQ,CAAA,CAAA,CAAA;AAAA,eACnG,CAAA;AACA,cAAQ,OAAA,CAAA,IAAA,CAAK,CAAiB,cAAA,EAAA,WAAW,CAAE,CAAA,CAAA,CAAA;AAAA,aACtC,MAAA;AACL,cAAA,OAAA,CAAQ,KAAK,CAAyC,sCAAA,EAAA,MAAA,CAAO,mBAAmB,IAAI,CAAC,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,aAC3F;AAEA,YAAA,OAAA,CAAQ,KAAK,EAAE,CAAA,CAAA;AACf,YAAQ,OAAA,CAAA,IAAA,CAAK,kBAAmB,CAAA,KAAK,CAAC,CAAA,CAAA;AAEtC,YAAA,IAAI,CAAO,KAAA,OAAA,CAAQ,QAAS,CAAA,MAAA,CAAmB,SAAS,CAAG,EAAA;AACzD,cAAQ,OAAA,CAAA,IAAA,CAAK,CAAK,EAAA,EAAA,QAAQ,CAAE,CAAA,CAAA,CAAA;AAAA,aAC9B;AAAA,WACD,CAAA,CAAA;AAED,UAAQ,OAAA,CAAA,IAAA,CAAK,CAAK,EAAA,EAAA,QAAQ,CAAE,CAAA,CAAA,CAAA;AAE5B,UAAA,OAAA,CAAQ,SAAS,QAAW,GAAA,QAAA,CAAA;AAC5B,UAAA,OAAA,CAAQ,QAAS,CAAA,IAAA,GAAO,OAAQ,CAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AAGvC,UAAA,MAAM,iBAAoB,GAAA,aAAA,CAAc,OAAQ,CAAA,UAAA,EAAY,cAAc,CAAK,IAAA,cAAA,CAAA;AAE/E,UAAA,OAAA,CAAQ,UAAW,CAAA,iBAAiB,CAAI,GAAA,CAAA,8BAAA,EAAiC,QAAQ,CAAA,CAAA,CAAA;AAAA,SACnF;AACA,QAAA,MAAA;AAAA,MAEF,KAAK,mCAAA;AACH,QAAI,IAAA,CAAC,OAAQ,CAAA,QAAA,CAAS,MAAQ,EAAA;AAC5B,UAAA,OAAA,CAAQ,SAAS,IAAO,GAAA,EAAA,CAAA;AAAA,SACnB,MAAA;AAEL,UAAQ,OAAA,CAAA,QAAA,CAAS,YAAY,OAAQ,CAAA,QAAA,CAAS,OAAO,MAAO,CAAA,OAAA,EAAS,EAAE,CAAA,CAAA;AAGvE,UAAA,OAAA,CAAQ,QAAS,CAAA,IAAA,GAAOA,SAAe,CAAA,OAAA,CAAQ,SAAS,SAAS,CAAA,CAAA;AAAA,SACnE;AACA,QAAA,MAAA;AAAA,MAEF,KAAK,WAAA,CAAA;AAAA,MACL,KAAK,aAAA,CAAA;AAAA,MACL,KAAK,kBAAA,CAAA;AAAA,MACL,KAAK,oBAAA;AACH,QAAA,OAAA,CAAQ,SAAS,QAAW,GAAA,kBAAA,CAAA;AAE5B,QAAI,IAAA,OAAA,CAAQ,SAAS,IAAM,EAAA;AACzB,UAAI,IAAA;AACF,YAAA,OAAA,CAAQ,SAAS,OAAU,GAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,SAAS,IAAI,CAAA,CAAA;AAAA,mBACpD,CAAG,EAAA;AAEV,YAAA,OAAA,CAAQ,SAAS,QAAW,GAAA,YAAA,CAAA;AAAA,WAC9B;AAAA,SACF;AACA,QAAA,MAAA;AAAA,KACJ;AAGA,IAAA,MAAM,UAAa,GAAA;AAAA,MACjB,GAAG,OAAQ,CAAA,UAAA;AAAA,MACX,GAAG,OAAQ,CAAA,UAAA;AAAA,KACb,CAAA;AAEA,IAAA,MAAM,kBAAqB,GAAAC,KAAA,CAAS,OAAQ,CAAA,GAAA,EAAK,MAAM,IAAI,CAAA,CAAA;AAG3D,IAAA,OAAA,CAAQ,QAAW,GAAA;AAAA,MACjB,GAAG,OAAQ,CAAA,QAAA;AAAA,MACX,GAAI,kBAAmB,CAAA,KAAA;AAAA,KACzB,CAAA;AAGA,IAAI,IAAA,MAAA,CAAA;AACJ,IAAA,IAAI,QAAQ,mBAAqB,EAAA;AAC/B,MAAS,MAAA,GAAAD,SAAA,CAAe,QAAQ,QAAU,EAAA;AAAA,QACxC,MAAQ,EAAA,KAAA;AAAA,QACR,OAAS,EAAA,KAAA;AAAA,OACV,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAS,MAAA,GAAAA,SAAA,CAAe,QAAQ,QAAU,EAAA;AAAA,QACxC,OAAS,EAAA,KAAA;AAAA,OACV,CAAA,CAAA;AAAA,KACH;AAEA,IAAA,MAAM,MAAS,GAAA;AAAA,MACb,GAAG,kBAAA;AAAA,MACH,OAAO,OAAQ,CAAA,QAAA;AAAA,MACf,MAAA;AAAA,MACA,IAAA,EAAM,SAAS,CAAG,EAAA,kBAAA,CAAmB,QAAQ,CAAI,CAAA,EAAA,MAAM,KAAK,kBAAmB,CAAA,QAAA;AAAA,KACjF,CAAA;AAGA,IAAA,MAAM,MAAME,MAAU,CAAA;AAAA,MACpB,GAAG,kBAAA;AAAA,MACH,KAAO,EAAA,IAAA;AAAA,MACP,MAAQ,EAAA,IAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,MAAM,UAAUA,MAAU,CAAA;AAAA,MACxB,GAAG,kBAAA;AAAA,MACH,GAAG,MAAA;AAAA,KACJ,CAAA,CAAA;AAED,IAAO,OAAA;AAAA,MACL,GAAG,OAAA;AAAA,MACH,UAAA;AAAA,MACA,OAAA;AAAA,MACA,GAAA;AAAA,MACA,MAAA;AAAA,KACF,CAAA;AAAA,GACF;AAAA,EAEA,OAAA,CAAQ,QAAoB,EAAA,QAAA,EAAqB,OAAe,EAAA;AAC9D,IAAI,IAAA,CAAC,KAAK,UAAY,EAAA;AACpB,MAAA,IAAA,CAAK,IAAK,EAAA,CAAA;AAAA,KACZ;AAEA,IAAI,IAAA,CAAC,WAAW,QAAU,EAAA;AACxB,MAAU,OAAA,GAAA,QAAA,CAAA;AAAA,KACZ;AAEA,IAAM,MAAA,MAAA,GAAS,QAAQ,QAAQ,CAAA,CAAA;AAC/B,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAEA,IAAM,MAAA,EAAE,SAAY,GAAA,MAAA,CAAO,YAAY,QAAY,IAAA,MAAA,CAAO,KAAK,OAAO,CAAA,CAAA;AACtE,IAAM,MAAA,OAAA,GAAU,KAAK,QAAS,CAAA,GAAA,CAAI,aAAW,OAAQ,CAAA,OAAA,EAAS,OAAO,CAAC,CAAA,CAAA;AACtE,IAAO,OAAA,OAAA,CAAA;AAAA,GACT;AACF,EAAA","file":"index.js","sourcesContent":["import type { ClientId, ClientInfo, TargetId, TargetInfo } from '../targets/index.js';\n\nimport { targets } from '../targets/index.js';\n\nexport interface AvailableTarget extends TargetInfo {\n clients: ClientInfo[];\n}\n\nexport const availableTargets = () =>\n Object.keys(targets).map<AvailableTarget>(targetId => ({\n ...targets[targetId as TargetId].info,\n clients: Object.keys(targets[targetId as TargetId].clientsById).map(\n clientId => targets[targetId as TargetId].clientsById[clientId].info,\n ),\n }));\n\nexport const extname = (targetId: TargetId, clientId: ClientId) => {\n const target = targets[targetId];\n if (!target) {\n return '';\n }\n\n return target.clientsById[clientId]?.info.extname || '';\n};\n","import type { ReducedHelperObject } from './helpers/reducer.js';\nimport type { ClientId, TargetId } from './targets/index.js';\nimport type { Param, PostDataCommon, Request as NpmHarRequest } from 'har-format';\nimport type { UrlWithParsedQuery } from 'node:url';\n\nimport { format as urlFormat, parse as urlParse } from 'node:url';\n\nimport { stringify as queryStringify } from 'qs';\n\nimport { getHeaderName } from './helpers/headers.js';\nimport { reducer } from './helpers/reducer.js';\nimport { targets } from './targets/index.js';\n\nexport { availableTargets, extname } from './helpers/utils.js';\nexport { addTarget, addTargetClient, addClientPlugin } from './targets/index.js';\n\n/** is this wrong? yes. according to the spec (http://www.softwareishard.com/blog/har-12-spec/#postData) it's technically wrong since `params` and `text` are (by the spec) mutually exclusive. However, in practice, this is not what is often the case.\n *\n * In general, this library takes a _descriptive_ rather than _perscriptive_ approach (see https://amyrey.web.unc.edu/classes/ling-101-online/tutorials/understanding-prescriptive-vs-descriptive-grammar/).\n *\n * Then, in addition to that, it really adds to complexity with TypeScript (TypeScript takes this constraint very very seriously) in a way that's not actually super useful. So, we treat this object as though it could have both or either of `params` and/or `text`.\n */\ntype PostDataBase = PostDataCommon & {\n params?: Param[];\n text?: string;\n};\n\nexport type HarRequest = Omit<NpmHarRequest, 'postData'> & { postData: PostDataBase };\n\nexport interface RequestExtras {\n allHeaders: ReducedHelperObject;\n cookiesObj: ReducedHelperObject;\n fullUrl: string;\n headersObj: ReducedHelperObject;\n postData: PostDataBase & {\n boundary?: string;\n jsonObj?: ReducedHelperObject;\n paramsObj?: ReducedHelperObject;\n };\n queryObj: ReducedHelperObject;\n uriObj: UrlWithParsedQuery;\n}\n\nexport type Request = HarRequest & RequestExtras;\n\ninterface Entry {\n request: Partial<HarRequest>;\n}\n\ninterface HarEntry {\n log: {\n creator: {\n name: string;\n version: string;\n };\n entries: Entry[];\n version: string;\n };\n}\n\nexport interface HTTPSnippetOptions {\n harIsAlreadyEncoded?: boolean;\n}\n\nconst isHarEntry = (value: any): value is HarEntry =>\n typeof value === 'object' &&\n 'log' in value &&\n typeof value.log === 'object' &&\n 'entries' in value.log &&\n Array.isArray(value.log.entries);\n\nexport class HTTPSnippet {\n initCalled = false;\n\n entries: Entry[] = [];\n\n requests: Request[] = [];\n\n options: HTTPSnippetOptions = {};\n\n constructor(input: HarEntry | HarRequest, opts: HTTPSnippetOptions = {}) {\n this.options = {\n harIsAlreadyEncoded: false,\n ...opts,\n };\n\n // prep the main container\n this.requests = [];\n\n // is it har?\n if (isHarEntry(input)) {\n this.entries = input.log.entries;\n } else {\n this.entries = [\n {\n request: input,\n },\n ];\n }\n }\n\n init() {\n this.initCalled = true;\n\n this.requests = this.entries.map(({ request }) => {\n // add optional properties to make validation successful\n const req = {\n bodySize: 0,\n headersSize: 0,\n headers: [],\n cookies: [],\n httpVersion: 'HTTP/1.1',\n queryString: [],\n postData: {\n mimeType: request.postData?.mimeType || 'application/octet-stream',\n },\n ...request,\n };\n\n // Per the HAR spec `mimeType` needs to always be present if we have a `postData` object.\n if (req.postData && !req.postData.mimeType) {\n req.postData.mimeType = 'application/octet-stream';\n }\n\n return this.prepare(req as HarRequest, this.options);\n });\n\n return this;\n }\n\n prepare(harRequest: HarRequest, options: HTTPSnippetOptions) {\n const request: Request = {\n ...harRequest,\n fullUrl: '',\n uriObj: {} as UrlWithParsedQuery,\n queryObj: {},\n headersObj: {},\n cookiesObj: {},\n allHeaders: {},\n };\n\n // construct query objects\n if (request.queryString && request.queryString.length) {\n request.queryObj = request.queryString.reduce(reducer, {});\n }\n\n // construct headers objects\n if (request.headers && request.headers.length) {\n const http2VersionRegex = /^HTTP\\/2/;\n request.headersObj = request.headers.reduce((accumulator, { name, value }) => {\n const headerName = http2VersionRegex.exec(request.httpVersion) ? name.toLocaleLowerCase() : name;\n return {\n ...accumulator,\n [headerName]: value,\n };\n }, {});\n }\n\n // construct headers objects\n if (request.cookies && request.cookies.length) {\n request.cookiesObj = request.cookies.reduceRight(\n (accumulator, { name, value }) => ({\n ...accumulator,\n [name]: value,\n }),\n {},\n );\n }\n\n // construct Cookie header\n const cookies = request.cookies?.map(({ name, value }) => {\n if (options.harIsAlreadyEncoded) {\n return `${name}=${value}`;\n }\n\n return `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n });\n\n if (cookies?.length) {\n request.allHeaders.cookie = cookies.join('; ');\n }\n\n switch (request.postData.mimeType) {\n case 'multipart/mixed':\n case 'multipart/related':\n case 'multipart/form-data':\n case 'multipart/alternative':\n // reset values\n request.postData.text = '';\n request.postData.mimeType = 'multipart/form-data';\n\n if (request.postData?.params) {\n const boundary = '---011000010111000001101001'; // this is binary for \"api\" (easter egg)\n const carriage = `${boundary}--`;\n const rn = '\\r\\n';\n\n /*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */\n const escape = (str: string) => str.replace(/\\n/g, '%0A').replace(/\\r/g, '%0D').replace(/\"/g, '%22');\n const normalizeLinefeeds = (value: string) => value.replace(/\\r?\\n|\\r/g, '\\r\\n');\n\n const payload = [`--${boundary}`];\n request.postData?.params.forEach((param, i) => {\n const name = param.name;\n const value = param.value || '';\n const filename = param.fileName || null;\n const contentType = param.contentType || 'application/octet-stream';\n\n if (filename) {\n payload.push(\n `Content-Disposition: form-data; name=\"${escape(normalizeLinefeeds(name))}\"; filename=\"${filename}\"`,\n );\n payload.push(`Content-Type: ${contentType}`);\n } else {\n payload.push(`Content-Disposition: form-data; name=\"${escape(normalizeLinefeeds(name))}\"`);\n }\n\n payload.push('');\n payload.push(normalizeLinefeeds(value));\n\n if (i !== (request.postData.params as Param[]).length - 1) {\n payload.push(`--${boundary}`);\n }\n });\n\n payload.push(`--${carriage}`);\n\n request.postData.boundary = boundary;\n request.postData.text = payload.join(rn);\n\n // Since headers are case-sensitive we need to see if there's an existing `Content-Type` header that we can override.\n const contentTypeHeader = getHeaderName(request.headersObj, 'content-type') || 'content-type';\n\n request.headersObj[contentTypeHeader] = `multipart/form-data; boundary=${boundary}`;\n }\n break;\n\n case 'application/x-www-form-urlencoded':\n if (!request.postData.params) {\n request.postData.text = '';\n } else {\n // @ts-expect-error the `har-format` types make this challenging\n request.postData.paramsObj = request.postData.params.reduce(reducer, {});\n\n // always overwrite\n request.postData.text = queryStringify(request.postData.paramsObj);\n }\n break;\n\n case 'text/json':\n case 'text/x-json':\n case 'application/json':\n case 'application/x-json':\n request.postData.mimeType = 'application/json';\n\n if (request.postData.text) {\n try {\n request.postData.jsonObj = JSON.parse(request.postData.text);\n } catch (e) {\n // force back to `text/plain` if headers have proper content-type value, then this should also work\n request.postData.mimeType = 'text/plain';\n }\n }\n break;\n }\n\n // create allHeaders object\n const allHeaders = {\n ...request.allHeaders,\n ...request.headersObj,\n };\n\n const urlWithParsedQuery = urlParse(request.url, true, true); //?\n\n // query string key/value pairs in with literal querystrings containd within the url\n request.queryObj = {\n ...request.queryObj,\n ...(urlWithParsedQuery.query as ReducedHelperObject),\n }; //?\n\n // reset uriObj values for a clean url\n let search;\n if (options.harIsAlreadyEncoded) {\n search = queryStringify(request.queryObj, {\n encode: false,\n indices: false,\n });\n } else {\n search = queryStringify(request.queryObj, {\n indices: false,\n });\n }\n\n const uriObj = {\n ...urlWithParsedQuery,\n query: request.queryObj,\n search,\n path: search ? `${urlWithParsedQuery.pathname}?${search}` : urlWithParsedQuery.pathname,\n };\n\n // keep the base url clean of queryString\n const url = urlFormat({\n ...urlWithParsedQuery,\n query: null,\n search: null,\n }); //?\n\n const fullUrl = urlFormat({\n ...urlWithParsedQuery,\n ...uriObj,\n }); //?\n\n return {\n ...request,\n allHeaders,\n fullUrl,\n url,\n uriObj,\n };\n }\n\n convert(targetId: TargetId, clientId?: ClientId, options?: any) {\n if (!this.initCalled) {\n this.init();\n }\n\n if (!options && clientId) {\n options = clientId;\n }\n\n const target = targets[targetId];\n if (!target) {\n return false;\n }\n\n const { convert } = target.clientsById[clientId || target.info.default];\n const results = this.requests.map(request => convert(request, options));\n return results;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/helpers/utils.ts","../src/index.ts"],"names":["queryStringify","urlParse","urlFormat"],"mappings":"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","file":"index.js","sourcesContent":["import type { ClientId, ClientInfo, TargetId, TargetInfo } from '../targets/index.js';\n\nimport { targets } from '../targets/index.js';\n\nexport interface AvailableTarget extends TargetInfo {\n clients: ClientInfo[];\n}\n\nexport const availableTargets = (): AvailableTarget[] =>\n Object.keys(targets).map<AvailableTarget>(targetId => ({\n ...targets[targetId as TargetId].info,\n clients: Object.keys(targets[targetId as TargetId].clientsById).map(\n clientId => targets[targetId as TargetId].clientsById[clientId].info,\n ),\n }));\n\nexport const extname = (targetId: TargetId, clientId: ClientId): '' | `.${string}` => {\n const target = targets[targetId];\n if (!target) {\n return '';\n }\n\n return target.clientsById[clientId]?.info.extname || '';\n};\n","/** biome-ignore-all lint/performance/noBarrelFile: This doesn't really have the aspects of being a barrel file. */\nimport type { UrlWithParsedQuery } from 'node:url';\nimport type { Request as NpmHarRequest, Param, PostDataCommon } from 'har-format';\nimport type { Merge } from 'type-fest';\nimport type { CodeBuilderOptions } from './helpers/code-builder.js';\nimport type { ReducedHelperObject } from './helpers/reducer.js';\nimport type { ClientId, TargetId } from './targets/index.js';\n\nimport { format as urlFormat, parse as urlParse } from 'node:url';\n\nimport { stringify as queryStringify } from 'qs';\n\nimport { getHeaderName } from './helpers/headers.js';\nimport { reducer } from './helpers/reducer.js';\nimport { targets } from './targets/index.js';\n\nexport { availableTargets, extname } from './helpers/utils.js';\nexport { addClientPlugin, addTarget, addTargetClient } from './targets/index.js';\n\n/** is this wrong? yes. according to the spec (http://www.softwareishard.com/blog/har-12-spec/#postData) it's technically wrong since `params` and `text` are (by the spec) mutually exclusive. However, in practice, this is not what is often the case.\n *\n * In general, this library takes a _descriptive_ rather than _perscriptive_ approach (see https://amyrey.web.unc.edu/classes/ling-101-online/tutorials/understanding-prescriptive-vs-descriptive-grammar/).\n *\n * Then, in addition to that, it really adds to complexity with TypeScript (TypeScript takes this constraint very very seriously) in a way that's not actually super useful. So, we treat this object as though it could have both or either of `params` and/or `text`.\n */\ntype PostDataBase = PostDataCommon & {\n params?: Param[];\n text?: string;\n};\n\nexport type { Client } from './targets/index.js';\n\nexport type HarRequest = Omit<NpmHarRequest, 'postData'> & { postData: PostDataBase };\n\nexport interface RequestExtras {\n allHeaders: ReducedHelperObject;\n cookiesObj: ReducedHelperObject;\n fullUrl: string;\n headersObj: ReducedHelperObject;\n postData: PostDataBase & {\n boundary?: string;\n jsonObj?: ReducedHelperObject;\n paramsObj?: ReducedHelperObject;\n };\n queryObj: ReducedHelperObject;\n uriObj: UrlWithParsedQuery;\n}\n\nexport type Request = HarRequest & RequestExtras;\n\ninterface Entry {\n request: Partial<HarRequest>;\n}\n\ninterface HarEntry {\n log: {\n creator: {\n name: string;\n version: string;\n };\n entries: Entry[];\n version: string;\n };\n}\n\nexport type Options = Merge<CodeBuilderOptions, Record<string, any>>;\n\nexport interface HTTPSnippetOptions {\n harIsAlreadyEncoded?: boolean;\n}\n\nconst isHarEntry = (value: any): value is HarEntry =>\n typeof value === 'object' &&\n 'log' in value &&\n typeof value.log === 'object' &&\n 'entries' in value.log &&\n Array.isArray(value.log.entries);\n\nexport class HTTPSnippet {\n initCalled = false;\n\n entries: Entry[] = [];\n\n requests: Request[] = [];\n\n options: HTTPSnippetOptions = {};\n\n constructor(input: HarEntry | HarRequest, opts: HTTPSnippetOptions = {}) {\n this.options = {\n harIsAlreadyEncoded: false,\n ...opts,\n };\n\n // prep the main container\n this.requests = [];\n\n // is it har?\n if (isHarEntry(input)) {\n this.entries = input.log.entries;\n } else {\n this.entries = [\n {\n request: input,\n },\n ];\n }\n }\n\n init(): HTTPSnippet {\n this.initCalled = true;\n\n this.requests = this.entries.map(({ request }) => {\n // add optional properties to make validation successful\n const req = {\n bodySize: 0,\n headersSize: 0,\n headers: [],\n cookies: [],\n httpVersion: 'HTTP/1.1',\n queryString: [],\n postData: {\n mimeType: request.postData?.mimeType || 'application/octet-stream',\n },\n ...request,\n };\n\n // Per the HAR spec `mimeType` needs to always be present if we have a `postData` object.\n if (req.postData && !req.postData.mimeType) {\n req.postData.mimeType = 'application/octet-stream';\n }\n\n return this.prepare(req as HarRequest, this.options);\n });\n\n return this;\n }\n\n prepare(\n harRequest: HarRequest,\n options: HTTPSnippetOptions,\n ): Request & {\n allHeaders: Record<string, string[] | string>;\n fullUrl: string;\n url: string;\n uriObj: {\n query: ReducedHelperObject;\n search: string;\n path: string | null;\n auth: string | null;\n hash: string | null;\n host: string | null;\n hostname: string | null;\n href: string;\n pathname: string | null;\n protocol: string | null;\n slashes: boolean | null;\n port: string | null;\n };\n } {\n const request: Request = {\n ...harRequest,\n fullUrl: '',\n uriObj: {} as UrlWithParsedQuery,\n queryObj: {},\n headersObj: {},\n cookiesObj: {},\n allHeaders: {},\n };\n\n // construct query objects\n if (request?.queryString.length) {\n request.queryObj = request.queryString.reduce(reducer, {});\n }\n\n // construct headers objects\n if (request?.headers.length) {\n const http2VersionRegex = /^HTTP\\/2/;\n request.headersObj = request.headers.reduce((accumulator, { name, value }) => {\n const headerName = http2VersionRegex.exec(request.httpVersion) ? name.toLocaleLowerCase() : name;\n return {\n ...accumulator,\n [headerName]: value,\n };\n }, {});\n }\n\n // construct headers objects\n if (request?.cookies.length) {\n request.cookiesObj = request.cookies.reduceRight(\n (accumulator, { name, value }) => ({\n ...accumulator,\n [name]: value,\n }),\n {},\n );\n }\n\n // construct Cookie header\n const cookies = request.cookies?.map(({ name, value }) => {\n if (options.harIsAlreadyEncoded) {\n return `${name}=${value}`;\n }\n\n return `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n });\n\n if (cookies?.length) {\n request.allHeaders.cookie = cookies.join('; ');\n }\n\n switch (request.postData.mimeType) {\n case 'multipart/mixed':\n case 'multipart/related':\n case 'multipart/form-data':\n case 'multipart/alternative':\n // reset values\n request.postData.text = '';\n request.postData.mimeType = 'multipart/form-data';\n\n if (request.postData?.params) {\n const boundary = '---011000010111000001101001'; // this is binary for \"api\" (easter egg)\n const carriage = `${boundary}--`;\n const rn = '\\r\\n';\n\n /*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */\n const escapeStr = (str: string) => str.replace(/\\n/g, '%0A').replace(/\\r/g, '%0D').replace(/\"/g, '%22');\n const normalizeLinefeeds = (value: string) => value.replace(/\\r?\\n|\\r/g, '\\r\\n');\n\n const payload = [`--${boundary}`];\n request.postData?.params.forEach((param, i) => {\n const name = param.name;\n const value = param.value || '';\n const filename = param.fileName || null;\n const contentType = param.contentType || 'application/octet-stream';\n\n if (filename) {\n payload.push(\n `Content-Disposition: form-data; name=\"${escapeStr(normalizeLinefeeds(name))}\"; filename=\"${filename}\"`,\n );\n payload.push(`Content-Type: ${contentType}`);\n } else {\n payload.push(`Content-Disposition: form-data; name=\"${escape(normalizeLinefeeds(name))}\"`);\n }\n\n payload.push('');\n payload.push(normalizeLinefeeds(value));\n\n if (i !== (request.postData.params as Param[]).length - 1) {\n payload.push(`--${boundary}`);\n }\n });\n\n payload.push(`--${carriage}`);\n\n request.postData.boundary = boundary;\n request.postData.text = payload.join(rn);\n\n // Since headers are case-sensitive we need to see if there's an existing `Content-Type` header that we can override.\n const contentTypeHeader = getHeaderName(request.headersObj, 'content-type') || 'content-type';\n\n request.headersObj[contentTypeHeader] = `multipart/form-data; boundary=${boundary}`;\n }\n break;\n\n case 'application/x-www-form-urlencoded':\n if (!request.postData.params) {\n request.postData.text = '';\n } else {\n // @ts-expect-error the `har-format` types make this challenging\n request.postData.paramsObj = request.postData.params.reduce(reducer, {});\n\n // always overwrite\n request.postData.text = queryStringify(request.postData.paramsObj);\n }\n break;\n\n case 'text/json':\n case 'text/x-json':\n case 'application/json':\n case 'application/x-json':\n request.postData.mimeType = 'application/json';\n\n if (request.postData.text) {\n try {\n request.postData.jsonObj = JSON.parse(request.postData.text);\n } catch {\n // force back to `text/plain` if headers have proper content-type value, then this should also work\n request.postData.mimeType = 'text/plain';\n }\n }\n break;\n }\n\n // create allHeaders object\n const allHeaders = {\n ...request.allHeaders,\n ...request.headersObj,\n };\n\n const urlWithParsedQuery = urlParse(request.url, true, true); //?\n\n // query string key/value pairs in with literal querystrings containd within the url\n request.queryObj = {\n ...request.queryObj,\n ...(urlWithParsedQuery.query as ReducedHelperObject),\n }; //?\n\n // reset uriObj values for a clean url\n let search: string;\n if (options.harIsAlreadyEncoded) {\n search = queryStringify(request.queryObj, {\n encode: false,\n indices: false,\n });\n } else {\n search = queryStringify(request.queryObj, {\n indices: false,\n });\n }\n\n const uriObj = {\n ...urlWithParsedQuery,\n query: request.queryObj,\n search,\n path: search ? `${urlWithParsedQuery.pathname}?${search}` : urlWithParsedQuery.pathname,\n };\n\n // keep the base url clean of queryString\n const url = urlFormat({\n ...urlWithParsedQuery,\n query: null,\n search: null,\n });\n\n const fullUrl = urlFormat({\n ...urlWithParsedQuery,\n ...uriObj,\n });\n\n return {\n ...request,\n allHeaders,\n fullUrl,\n url,\n uriObj,\n };\n }\n\n convert(targetId: TargetId, clientId?: ClientId, options?: Options): (string | false)[] {\n if (!this.initCalled) {\n this.init();\n }\n\n if (!options && clientId) {\n options = { clientId };\n }\n\n const target = targets[targetId];\n if (!target) {\n return [false];\n }\n\n const { convert } = target.clientsById[clientId || target.info.default];\n const results = this.requests.map(request => convert(request, options));\n return results;\n }\n\n installation(targetId: TargetId, clientId?: ClientId, options?: Options): (string | false)[] {\n if (!this.initCalled) {\n this.init();\n }\n\n if (!options && clientId) {\n options = { clientId };\n }\n\n const target = targets[targetId];\n if (!target) {\n return [false];\n }\n\n const { info } = target.clientsById[clientId || target.info.default];\n const results = this.requests.map(request => (info?.installation ? info.installation(request, options) : false));\n return results;\n }\n}\n"]}
|
package/dist/targets/index.cjs
CHANGED
|
@@ -497,7 +497,7 @@ var restsharp = {
|
|
|
497
497
|
link: "http://restsharp.org/",
|
|
498
498
|
description: "Simple REST and HTTP API Client for .NET",
|
|
499
499
|
extname: ".cs",
|
|
500
|
-
installation: "dotnet add package RestSharp"
|
|
500
|
+
installation: () => "dotnet add package RestSharp"
|
|
501
501
|
},
|
|
502
502
|
convert: ({ method, fullUrl, headersObj, cookies, postData, uriObj }) => {
|
|
503
503
|
const { push, join } = new CodeBuilder();
|
|
@@ -906,7 +906,7 @@ var axios = {
|
|
|
906
906
|
link: "https://github.com/axios/axios",
|
|
907
907
|
description: "Promise based HTTP client for the browser and node.js",
|
|
908
908
|
extname: ".js",
|
|
909
|
-
installation: "npm install axios --save"
|
|
909
|
+
installation: () => "npm install axios --save"
|
|
910
910
|
},
|
|
911
911
|
convert: ({ allHeaders, method, url, queryObj, postData }, options) => {
|
|
912
912
|
const opts = {
|
|
@@ -1005,7 +1005,7 @@ var fetch = {
|
|
|
1005
1005
|
options.body = postData.jsonObj;
|
|
1006
1006
|
}
|
|
1007
1007
|
break;
|
|
1008
|
-
case "multipart/form-data":
|
|
1008
|
+
case "multipart/form-data": {
|
|
1009
1009
|
if (!postData.params) {
|
|
1010
1010
|
break;
|
|
1011
1011
|
}
|
|
@@ -1019,6 +1019,7 @@ var fetch = {
|
|
|
1019
1019
|
});
|
|
1020
1020
|
blank();
|
|
1021
1021
|
break;
|
|
1022
|
+
}
|
|
1022
1023
|
default:
|
|
1023
1024
|
if (postData.text) {
|
|
1024
1025
|
options.body = postData.text;
|
|
@@ -1229,7 +1230,7 @@ var native2 = {
|
|
|
1229
1230
|
payload = postData.jsonObj;
|
|
1230
1231
|
}
|
|
1231
1232
|
break;
|
|
1232
|
-
case "multipart/form-data":
|
|
1233
|
+
case "multipart/form-data": {
|
|
1233
1234
|
if (!postData.params) {
|
|
1234
1235
|
break;
|
|
1235
1236
|
}
|
|
@@ -1239,6 +1240,7 @@ var native2 = {
|
|
|
1239
1240
|
});
|
|
1240
1241
|
payload = multipartPayload;
|
|
1241
1242
|
break;
|
|
1243
|
+
}
|
|
1242
1244
|
default:
|
|
1243
1245
|
if (postData.text) {
|
|
1244
1246
|
payload = postData.text;
|
|
@@ -1335,7 +1337,7 @@ var axios2 = {
|
|
|
1335
1337
|
link: "https://github.com/axios/axios",
|
|
1336
1338
|
description: "Promise based HTTP client for the browser and node.js",
|
|
1337
1339
|
extname: ".js",
|
|
1338
|
-
installation: "npm install axios --save"
|
|
1340
|
+
installation: () => "npm install axios --save"
|
|
1339
1341
|
},
|
|
1340
1342
|
convert: ({ method, fullUrl, allHeaders, postData }, options) => {
|
|
1341
1343
|
const opts = {
|
|
@@ -1420,7 +1422,7 @@ var fetch2 = {
|
|
|
1420
1422
|
reqOpts.body = postData.jsonObj;
|
|
1421
1423
|
}
|
|
1422
1424
|
break;
|
|
1423
|
-
case "multipart/form-data":
|
|
1425
|
+
case "multipart/form-data": {
|
|
1424
1426
|
if (!postData.params) {
|
|
1425
1427
|
break;
|
|
1426
1428
|
}
|
|
@@ -1444,6 +1446,7 @@ var fetch2 = {
|
|
|
1444
1446
|
reqOpts.body = "formData";
|
|
1445
1447
|
blank();
|
|
1446
1448
|
break;
|
|
1449
|
+
}
|
|
1447
1450
|
default:
|
|
1448
1451
|
if (postData.text) {
|
|
1449
1452
|
reqOpts.body = postData.text;
|
|
@@ -1741,7 +1744,7 @@ var cohttp = {
|
|
|
1741
1744
|
link: "https://github.com/mirage/ocaml-cohttp",
|
|
1742
1745
|
description: "Cohttp is a very lightweight HTTP server using Lwt or Async for OCaml",
|
|
1743
1746
|
extname: ".ml",
|
|
1744
|
-
installation: "opam install cohttp-lwt-unix cohttp-async"
|
|
1747
|
+
installation: () => "opam install cohttp-lwt-unix cohttp-async"
|
|
1745
1748
|
},
|
|
1746
1749
|
convert: ({ fullUrl, allHeaders, postData, method }, options) => {
|
|
1747
1750
|
const opts = {
|
|
@@ -1988,7 +1991,7 @@ var guzzle = {
|
|
|
1988
1991
|
link: "http://docs.guzzlephp.org/en/stable/",
|
|
1989
1992
|
description: "PHP with Guzzle",
|
|
1990
1993
|
extname: ".php",
|
|
1991
|
-
installation: "composer require guzzlehttp/guzzle"
|
|
1994
|
+
installation: () => "composer require guzzlehttp/guzzle"
|
|
1992
1995
|
},
|
|
1993
1996
|
convert: ({ postData, fullUrl, method, cookies, headersObj }, options) => {
|
|
1994
1997
|
const opts = {
|
|
@@ -2049,9 +2052,7 @@ var guzzle = {
|
|
|
2049
2052
|
requestPush(`'body' => ${convertType(postData.text)},`, 1);
|
|
2050
2053
|
}
|
|
2051
2054
|
}
|
|
2052
|
-
const headers = Object.keys(headersObj).sort().map(
|
|
2053
|
-
return `${opts.indent}${opts.indent}'${key}' => '${escapeForSingleQuotes(headersObj[key])}',`;
|
|
2054
|
-
});
|
|
2055
|
+
const headers = Object.keys(headersObj).sort().map((key) => `${opts.indent}${opts.indent}'${key}' => '${escapeForSingleQuotes(headersObj[key])}',`);
|
|
2055
2056
|
const cookieString = cookies.map((cookie) => `${encodeURIComponent(cookie.name)}=${encodeURIComponent(cookie.value)}`).join("; ");
|
|
2056
2057
|
if (cookieString.length) {
|
|
2057
2058
|
headers.push(`${opts.indent}${opts.indent}'cookie' => '${escapeForSingleQuotes(cookieString)}',`);
|
|
@@ -2414,7 +2415,7 @@ var requests = {
|
|
|
2414
2415
|
link: "http://docs.python-requests.org/en/latest/api/#requests.request",
|
|
2415
2416
|
description: "Requests HTTP library",
|
|
2416
2417
|
extname: ".py",
|
|
2417
|
-
installation: "python -m pip install requests"
|
|
2418
|
+
installation: () => "python -m pip install requests"
|
|
2418
2419
|
},
|
|
2419
2420
|
convert: ({ fullUrl, postData, allHeaders, method }, options) => {
|
|
2420
2421
|
const opts = {
|
|
@@ -2818,18 +2819,16 @@ ${indent}` : " "
|
|
|
2818
2819
|
case "application/x-www-form-urlencoded":
|
|
2819
2820
|
if (postData.params) {
|
|
2820
2821
|
postData.params.forEach((param) => {
|
|
2821
|
-
const unencoded = param.name;
|
|
2822
2822
|
const encoded = encodeURIComponent(param.name);
|
|
2823
|
-
const
|
|
2824
|
-
const
|
|
2825
|
-
const flag = binary ? "--data-binary" : needsEncoding ? "--data-urlencode" : arg("data");
|
|
2823
|
+
const name = encoded !== param.name ? encoded : param.name;
|
|
2824
|
+
const flag = binary ? "--data-binary" : "--data-urlencode";
|
|
2826
2825
|
push(`${flag} ${quote(`${name}=${param.value}`)}`);
|
|
2827
2826
|
});
|
|
2828
2827
|
} else {
|
|
2829
2828
|
push(`${binary ? "--data-binary" : arg("data")} ${quote(postData.text)}`);
|
|
2830
2829
|
}
|
|
2831
2830
|
break;
|
|
2832
|
-
default:
|
|
2831
|
+
default: {
|
|
2833
2832
|
if (!postData.text) {
|
|
2834
2833
|
break;
|
|
2835
2834
|
}
|
|
@@ -2856,13 +2855,14 @@ ${JSON.stringify(jsonPayload, null, indentJSON)}
|
|
|
2856
2855
|
'`
|
|
2857
2856
|
);
|
|
2858
2857
|
}
|
|
2859
|
-
} catch
|
|
2858
|
+
} catch {
|
|
2860
2859
|
}
|
|
2861
2860
|
}
|
|
2862
2861
|
}
|
|
2863
2862
|
if (!builtPayload) {
|
|
2864
2863
|
push(`${binary ? "--data-binary" : arg("data")} ${quote(postData.text)}`);
|
|
2865
2864
|
}
|
|
2865
|
+
}
|
|
2866
2866
|
}
|
|
2867
2867
|
return join();
|
|
2868
2868
|
}
|
|
@@ -2876,7 +2876,7 @@ var httpie = {
|
|
|
2876
2876
|
link: "http://httpie.org/",
|
|
2877
2877
|
description: "a CLI, cURL-like tool for humans",
|
|
2878
2878
|
extname: ".sh",
|
|
2879
|
-
installation: "brew install httpie"
|
|
2879
|
+
installation: () => "brew install httpie"
|
|
2880
2880
|
},
|
|
2881
2881
|
convert: ({ allHeaders, postData, queryObj, fullUrl, method, url }, options) => {
|
|
2882
2882
|
const opts = {
|
|
@@ -2945,7 +2945,7 @@ ${opts.indent}` : " "
|
|
|
2945
2945
|
push(`${key}:${quote(allHeaders[key])}`);
|
|
2946
2946
|
});
|
|
2947
2947
|
if (postData.mimeType === "application/x-www-form-urlencoded") {
|
|
2948
|
-
if (postData.params
|
|
2948
|
+
if (postData.params?.length) {
|
|
2949
2949
|
flags.push(opts.short ? "-f" : "--form");
|
|
2950
2950
|
postData.params.forEach((param) => {
|
|
2951
2951
|
push(`${param.name}=${quote(param.value)}`);
|
|
@@ -3101,7 +3101,9 @@ var urlsession = {
|
|
|
3101
3101
|
const parameters = postData.params.map((p) => `"${p.name}": "${p.value}"`);
|
|
3102
3102
|
if (opts.pretty) {
|
|
3103
3103
|
push("let parameters = [");
|
|
3104
|
-
parameters.forEach((param) =>
|
|
3104
|
+
parameters.forEach((param) => {
|
|
3105
|
+
push(`${param},`, 1);
|
|
3106
|
+
});
|
|
3105
3107
|
push("]");
|
|
3106
3108
|
} else {
|
|
3107
3109
|
push(`let parameters = [${parameters.join(", ")}]`);
|