@loadmill/core 0.3.139 → 0.3.141

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 (232) hide show
  1. package/dist/assertions/index.d.ts +32 -0
  2. package/dist/assertions/index.js +52 -0
  3. package/dist/assertions/index.js.map +1 -0
  4. package/dist/code-step/index.d.ts +23 -0
  5. package/dist/code-step/index.js +97 -0
  6. package/dist/code-step/index.js.map +1 -0
  7. package/dist/conf/defaults.d.ts +1 -0
  8. package/dist/conf/defaults.js +11 -0
  9. package/dist/conf/defaults.js.map +1 -0
  10. package/dist/conf/extrema.d.ts +7 -0
  11. package/dist/conf/extrema.js +12 -0
  12. package/dist/conf/extrema.js.map +1 -0
  13. package/dist/conf/index.d.ts +15 -0
  14. package/dist/conf/index.js +80 -0
  15. package/dist/conf/index.js.map +1 -0
  16. package/dist/conf/notifications.d.ts +2 -0
  17. package/dist/conf/notifications.js +19 -0
  18. package/dist/conf/notifications.js.map +1 -0
  19. package/dist/conf/types.d.ts +122 -0
  20. package/dist/conf/types.js +38 -0
  21. package/dist/conf/types.js.map +1 -0
  22. package/dist/conf/validate.d.ts +69 -0
  23. package/dist/conf/validate.js +509 -0
  24. package/dist/conf/validate.js.map +1 -0
  25. package/dist/distributed-logger-reporter.d.ts +3 -0
  26. package/dist/distributed-logger-reporter.js +74 -0
  27. package/dist/distributed-logger-reporter.js.map +1 -0
  28. package/dist/echo/firehose.d.ts +7 -0
  29. package/dist/echo/firehose.js +130 -0
  30. package/dist/echo/firehose.js.map +1 -0
  31. package/dist/echo/index.d.ts +3 -0
  32. package/dist/echo/index.js +8 -0
  33. package/dist/echo/index.js.map +1 -0
  34. package/dist/echo/stats.d.ts +8 -0
  35. package/dist/echo/stats.js +152 -0
  36. package/dist/echo/stats.js.map +1 -0
  37. package/dist/extract-and-assert-step/index.d.ts +29 -0
  38. package/dist/extract-and-assert-step/index.js +108 -0
  39. package/dist/extract-and-assert-step/index.js.map +1 -0
  40. package/dist/extractions/index.d.ts +36 -0
  41. package/dist/extractions/index.js +49 -0
  42. package/dist/extractions/index.js.map +1 -0
  43. package/dist/har/index.d.ts +71 -0
  44. package/dist/har/index.js +61 -0
  45. package/dist/har/index.js.map +1 -0
  46. package/dist/labels/constants.d.ts +1 -0
  47. package/dist/labels/constants.js +5 -0
  48. package/dist/labels/constants.js.map +1 -0
  49. package/dist/multipart-form-data/files.d.ts +2 -0
  50. package/dist/multipart-form-data/files.js +63 -0
  51. package/dist/multipart-form-data/files.js.map +1 -0
  52. package/dist/multipart-form-data/form-data-utils.d.ts +19 -0
  53. package/dist/multipart-form-data/form-data-utils.js +118 -0
  54. package/dist/multipart-form-data/form-data-utils.js.map +1 -0
  55. package/dist/multipart-form-data/is-binary-file.d.ts +2 -0
  56. package/dist/multipart-form-data/is-binary-file.js +215 -0
  57. package/dist/multipart-form-data/is-binary-file.js.map +1 -0
  58. package/dist/multipart-form-data/multipart-text-to-post-form-data.d.ts +3 -0
  59. package/dist/multipart-form-data/multipart-text-to-post-form-data.js +93 -0
  60. package/dist/multipart-form-data/multipart-text-to-post-form-data.js.map +1 -0
  61. package/dist/parameters/extractions.d.ts +27 -0
  62. package/dist/parameters/extractions.js +51 -0
  63. package/dist/parameters/extractions.js.map +1 -0
  64. package/dist/parameters/extractors/cheerio-extractor.d.ts +11 -0
  65. package/dist/parameters/extractors/cheerio-extractor.js +84 -0
  66. package/dist/parameters/extractors/cheerio-extractor.js.map +1 -0
  67. package/dist/parameters/extractors/expression-extractor.d.ts +6 -0
  68. package/dist/parameters/extractors/expression-extractor.js +38 -0
  69. package/dist/parameters/extractors/expression-extractor.js.map +1 -0
  70. package/dist/parameters/extractors/extractor.d.ts +3 -0
  71. package/dist/parameters/extractors/extractor.js +3 -0
  72. package/dist/parameters/extractors/extractor.js.map +1 -0
  73. package/dist/parameters/extractors/header-extractor.d.ts +7 -0
  74. package/dist/parameters/extractors/header-extractor.js +51 -0
  75. package/dist/parameters/extractors/header-extractor.js.map +1 -0
  76. package/dist/parameters/extractors/index.d.ts +10 -0
  77. package/dist/parameters/extractors/index.js +20 -0
  78. package/dist/parameters/extractors/index.js.map +1 -0
  79. package/dist/parameters/extractors/json-path-extractor.d.ts +11 -0
  80. package/dist/parameters/extractors/json-path-extractor.js +127 -0
  81. package/dist/parameters/extractors/json-path-extractor.js.map +1 -0
  82. package/dist/parameters/extractors/parametrized-extractor.d.ts +10 -0
  83. package/dist/parameters/extractors/parametrized-extractor.js +34 -0
  84. package/dist/parameters/extractors/parametrized-extractor.js.map +1 -0
  85. package/dist/parameters/extractors/regex-extractor.d.ts +7 -0
  86. package/dist/parameters/extractors/regex-extractor.js +46 -0
  87. package/dist/parameters/extractors/regex-extractor.js.map +1 -0
  88. package/dist/parameters/extractors/regex-matcher.d.ts +1 -0
  89. package/dist/parameters/extractors/regex-matcher.js +22 -0
  90. package/dist/parameters/extractors/regex-matcher.js.map +1 -0
  91. package/dist/parameters/extractors/ws-extractor.d.ts +33 -0
  92. package/dist/parameters/extractors/ws-extractor.js +215 -0
  93. package/dist/parameters/extractors/ws-extractor.js.map +1 -0
  94. package/dist/parameters/extractors/x-path-extractor.d.ts +9 -0
  95. package/dist/parameters/extractors/x-path-extractor.js +77 -0
  96. package/dist/parameters/extractors/x-path-extractor.js.map +1 -0
  97. package/dist/parameters/generate-random.d.ts +13 -0
  98. package/dist/parameters/generate-random.js +108 -0
  99. package/dist/parameters/generate-random.js.map +1 -0
  100. package/dist/parameters/html-utils.d.ts +1 -0
  101. package/dist/parameters/html-utils.js +18 -0
  102. package/dist/parameters/html-utils.js.map +1 -0
  103. package/dist/parameters/index.d.ts +94 -0
  104. package/dist/parameters/index.js +619 -0
  105. package/dist/parameters/index.js.map +1 -0
  106. package/dist/parameters/json-path-utils.d.ts +1 -0
  107. package/dist/parameters/json-path-utils.js +16 -0
  108. package/dist/parameters/json-path-utils.js.map +1 -0
  109. package/dist/parameters/operators/binary-operator.d.ts +13 -0
  110. package/dist/parameters/operators/binary-operator.js +39 -0
  111. package/dist/parameters/operators/binary-operator.js.map +1 -0
  112. package/dist/parameters/operators/index.d.ts +5 -0
  113. package/dist/parameters/operators/index.js +21 -0
  114. package/dist/parameters/operators/index.js.map +1 -0
  115. package/dist/parameters/parameter-functions/aws-cognito.d.ts +3 -0
  116. package/dist/parameters/parameter-functions/aws-cognito.js +119 -0
  117. package/dist/parameters/parameter-functions/aws-cognito.js.map +1 -0
  118. package/dist/parameters/parameter-functions/boolean-parameter-functions.d.ts +12 -0
  119. package/dist/parameters/parameter-functions/boolean-parameter-functions.js +47 -0
  120. package/dist/parameters/parameter-functions/boolean-parameter-functions.js.map +1 -0
  121. package/dist/parameters/parameter-functions/crypto.d.ts +11 -0
  122. package/dist/parameters/parameter-functions/crypto.js +71 -0
  123. package/dist/parameters/parameter-functions/crypto.js.map +1 -0
  124. package/dist/parameters/parameter-functions/json-schema.d.ts +1 -0
  125. package/dist/parameters/parameter-functions/json-schema.js +33 -0
  126. package/dist/parameters/parameter-functions/json-schema.js.map +1 -0
  127. package/dist/parameters/parameter-functions/numeric-input-parameter-functions.d.ts +11 -0
  128. package/dist/parameters/parameter-functions/numeric-input-parameter-functions.js +34 -0
  129. package/dist/parameters/parameter-functions/numeric-input-parameter-functions.js.map +1 -0
  130. package/dist/parameters/parameter-functions/numeric-parameter-functions.d.ts +15 -0
  131. package/dist/parameters/parameter-functions/numeric-parameter-functions.js +56 -0
  132. package/dist/parameters/parameter-functions/numeric-parameter-functions.js.map +1 -0
  133. package/dist/parameters/parameter-functions/parameter-function-utils.d.ts +5 -0
  134. package/dist/parameters/parameter-functions/parameter-function-utils.js +82 -0
  135. package/dist/parameters/parameter-functions/parameter-function-utils.js.map +1 -0
  136. package/dist/parameters/parameter-functions/parameter-function.d.ts +6 -0
  137. package/dist/parameters/parameter-functions/parameter-function.js +28 -0
  138. package/dist/parameters/parameter-functions/parameter-function.js.map +1 -0
  139. package/dist/parameters/parameter-functions/parameter-functions.d.ts +7 -0
  140. package/dist/parameters/parameter-functions/parameter-functions.js +53 -0
  141. package/dist/parameters/parameter-functions/parameter-functions.js.map +1 -0
  142. package/dist/parameters/parameter-functions/random-parameter-functions.d.ts +1 -0
  143. package/dist/parameters/parameter-functions/random-parameter-functions.js +43 -0
  144. package/dist/parameters/parameter-functions/random-parameter-functions.js.map +1 -0
  145. package/dist/parameters/parameter-functions/textual-parameter-functions.d.ts +72 -0
  146. package/dist/parameters/parameter-functions/textual-parameter-functions.js +389 -0
  147. package/dist/parameters/parameter-functions/textual-parameter-functions.js.map +1 -0
  148. package/dist/parameters/parameter-name-utils.d.ts +6 -0
  149. package/dist/parameters/parameter-name-utils.js +124 -0
  150. package/dist/parameters/parameter-name-utils.js.map +1 -0
  151. package/dist/parameters/parameter-regex-providers.d.ts +24 -0
  152. package/dist/parameters/parameter-regex-providers.js +70 -0
  153. package/dist/parameters/parameter-regex-providers.js.map +1 -0
  154. package/dist/parameters/resolvers/random-parameters-resolver.d.ts +1 -0
  155. package/dist/parameters/resolvers/random-parameters-resolver.js +12 -0
  156. package/dist/parameters/resolvers/random-parameters-resolver.js.map +1 -0
  157. package/dist/parameters/type.d.ts +10 -0
  158. package/dist/parameters/type.js +9 -0
  159. package/dist/parameters/type.js.map +1 -0
  160. package/dist/parameters/value-utils.d.ts +5 -0
  161. package/dist/parameters/value-utils.js +44 -0
  162. package/dist/parameters/value-utils.js.map +1 -0
  163. package/dist/request/index.d.ts +174 -0
  164. package/dist/request/index.js +356 -0
  165. package/dist/request/index.js.map +1 -0
  166. package/dist/schema/json-schema-generator.d.ts +20 -0
  167. package/dist/schema/json-schema-generator.js +135 -0
  168. package/dist/schema/json-schema-generator.js.map +1 -0
  169. package/dist/signals.d.ts +4 -0
  170. package/dist/signals.js +9 -0
  171. package/dist/signals.js.map +1 -0
  172. package/dist/socket-events/index.d.ts +13 -0
  173. package/dist/socket-events/index.js +17 -0
  174. package/dist/socket-events/index.js.map +1 -0
  175. package/dist/step/assertable.d.ts +4 -0
  176. package/dist/step/assertable.js +3 -0
  177. package/dist/step/assertable.js.map +1 -0
  178. package/dist/step/codeable.d.ts +3 -0
  179. package/dist/step/codeable.js +3 -0
  180. package/dist/step/codeable.js.map +1 -0
  181. package/dist/step/extractable.d.ts +4 -0
  182. package/dist/step/extractable.js +3 -0
  183. package/dist/step/extractable.js.map +1 -0
  184. package/dist/step/index.d.ts +72 -0
  185. package/dist/step/index.js +71 -0
  186. package/dist/step/index.js.map +1 -0
  187. package/dist/step/step-type.d.ts +4 -0
  188. package/dist/step/step-type.js +3 -0
  189. package/dist/step/step-type.js.map +1 -0
  190. package/dist/step/type-guards.d.ts +7 -0
  191. package/dist/step/type-guards.js +18 -0
  192. package/dist/step/type-guards.js.map +1 -0
  193. package/dist/subset/index.d.ts +3 -0
  194. package/dist/subset/index.js +8 -0
  195. package/dist/subset/index.js.map +1 -0
  196. package/dist/subset/is-subset.d.ts +2 -0
  197. package/dist/subset/is-subset.js +29 -0
  198. package/dist/subset/is-subset.js.map +1 -0
  199. package/dist/subset/json-contains.d.ts +1 -0
  200. package/dist/subset/json-contains.js +24 -0
  201. package/dist/subset/json-contains.js.map +1 -0
  202. package/dist/team-options/constants.d.ts +3 -0
  203. package/dist/team-options/constants.js +7 -0
  204. package/dist/team-options/constants.js.map +1 -0
  205. package/dist/xml/decode.d.ts +2 -0
  206. package/dist/xml/decode.js +91 -0
  207. package/dist/xml/decode.js.map +1 -0
  208. package/dist/xml/encode.d.ts +1 -0
  209. package/dist/xml/encode.js +14 -0
  210. package/dist/xml/encode.js.map +1 -0
  211. package/dist/xml/escape-reserved-chars.d.ts +6 -0
  212. package/dist/xml/escape-reserved-chars.js +57 -0
  213. package/dist/xml/escape-reserved-chars.js.map +1 -0
  214. package/dist/xml/is-xml.d.ts +1 -0
  215. package/dist/xml/is-xml.js +9 -0
  216. package/dist/xml/is-xml.js.map +1 -0
  217. package/dist/xml/json-to-xml.d.ts +2 -0
  218. package/dist/xml/json-to-xml.js +11 -0
  219. package/dist/xml/json-to-xml.js.map +1 -0
  220. package/dist/xml/namespaces.d.ts +7 -0
  221. package/dist/xml/namespaces.js +16 -0
  222. package/dist/xml/namespaces.js.map +1 -0
  223. package/dist/xml/remove-invisible-chars.d.ts +2 -0
  224. package/dist/xml/remove-invisible-chars.js +13 -0
  225. package/dist/xml/remove-invisible-chars.js.map +1 -0
  226. package/dist/xml/replace-s-tags.d.ts +4 -0
  227. package/dist/xml/replace-s-tags.js +21 -0
  228. package/dist/xml/replace-s-tags.js.map +1 -0
  229. package/dist/xml/xml-to-json.d.ts +7 -0
  230. package/dist/xml/xml-to-json.js +21 -0
  231. package/dist/xml/xml-to-json.js.map +1 -0
  232. package/package.json +3 -2
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isReservedHeader = exports.filterRecordedHeader = exports.isCacheHeader = exports.isWSEntry = exports.isHar = void 0;
4
+ var http_headers_validation_1 = require("http-headers-validation");
5
+ var isHar = function (obj) {
6
+ var _a, _b, _c;
7
+ return Boolean(obj.log) &&
8
+ typeof ((_a = obj.log) === null || _a === void 0 ? void 0 : _a.version) === 'string' &&
9
+ ((_b = obj.log) === null || _b === void 0 ? void 0 : _b.version.startsWith('1.')) &&
10
+ Array.isArray((_c = obj.log) === null || _c === void 0 ? void 0 : _c.entries);
11
+ };
12
+ exports.isHar = isHar;
13
+ var isWSEntry = function (entry) { var _a; return entry._resourceType === 'websocket' || ((_a = entry._webSocketMessages) === null || _a === void 0 ? void 0 : _a.length); };
14
+ exports.isWSEntry = isWSEntry;
15
+ function isCacheHeader(lowerName) {
16
+ return (lowerName === 'if-match' ||
17
+ lowerName === 'if-modified-since' ||
18
+ lowerName === 'if-none-match' ||
19
+ lowerName === 'cache-control' ||
20
+ lowerName === 'pragma' ||
21
+ lowerName === 'expires' ||
22
+ lowerName === 'if-unmodifed-since');
23
+ }
24
+ exports.isCacheHeader = isCacheHeader;
25
+ function filterRecordedHeader(name) {
26
+ var lowerName = name.toLowerCase();
27
+ // Remove invalid headers from HAR file (Chrome adds some weird one starting with ':')
28
+ return (http_headers_validation_1.validateHeaderName(name) &&
29
+ // Don't take cache related stuff from HAR file:
30
+ !isCacheHeader(lowerName) &&
31
+ // Browser reserved headers are not allowed:
32
+ !isReservedHeader(lowerName) &&
33
+ // cookie, origin and user-agent headers are special since they are not reserved (user can set in conf) but we want to filter them:
34
+ lowerName !== 'cookie' &&
35
+ lowerName !== 'origin' &&
36
+ lowerName !== 'user-agent' &&
37
+ // host is sort of reserved but we want to filter it from imports
38
+ lowerName !== 'host' &&
39
+ // This is browser specific:
40
+ lowerName !== 'upgrade-insecure-requests');
41
+ }
42
+ exports.filterRecordedHeader = filterRecordedHeader;
43
+ function isReservedHeader(lowerName) {
44
+ return (lowerName.startsWith('proxy-') ||
45
+ (lowerName.startsWith('sec-') && !lowerName.startsWith('sec-websocket')) ||
46
+ lowerName === 'accept-charset' ||
47
+ lowerName === 'access-control-request-headers' ||
48
+ lowerName === 'access-control-request-method' ||
49
+ lowerName === 'connection' ||
50
+ lowerName === 'content-length' ||
51
+ lowerName === 'cookie2' ||
52
+ lowerName === 'date' ||
53
+ lowerName === 'dnt' ||
54
+ lowerName === 'expect' ||
55
+ lowerName === 'keep-alive' ||
56
+ lowerName === 'trailer' ||
57
+ lowerName === 'transfer-encoding' ||
58
+ lowerName === 'upgrade');
59
+ }
60
+ exports.isReservedHeader = isReservedHeader;
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/har/index.ts"],"names":[],"mappings":";;;AAAA,mEAA6D;AA+EtD,IAAM,KAAK,GAAG,UAAC,GAAQ;;IAAK,OAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QACjD,OAAO,CAAA,MAAA,GAAG,CAAC,GAAG,0CAAE,OAAO,CAAA,KAAK,QAAQ;SACpC,MAAA,GAAG,CAAC,GAAG,0CAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACjC,KAAK,CAAC,OAAO,CAAC,MAAA,GAAG,CAAC,GAAG,0CAAE,OAAO,CAAC,CAAA;CAAA,CAAC;AAHrB,QAAA,KAAK,SAGgB;AAE3B,IAAM,SAAS,GAAG,UAAC,KAAe,YAAK,OAAA,KAAK,CAAC,aAAa,KAAK,WAAW,KAAI,MAAA,KAAK,CAAC,kBAAkB,0CAAE,MAAM,CAAA,CAAA,EAAA,CAAC;AAAzG,QAAA,SAAS,aAAgG;AAEtH,SAAgB,aAAa,CAAC,SAAiB;IAC7C,OAAO,CACL,SAAS,KAAK,UAAU;QACxB,SAAS,KAAK,mBAAmB;QACjC,SAAS,KAAK,eAAe;QAC7B,SAAS,KAAK,eAAe;QAC7B,SAAS,KAAK,QAAQ;QACtB,SAAS,KAAK,SAAS;QACvB,SAAS,KAAK,oBAAoB,CACnC,CAAC;AACJ,CAAC;AAVD,sCAUC;AAED,SAAgB,oBAAoB,CAAC,IAAY;IAC/C,IAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAErC,sFAAsF;IACtF,OAAO,CACL,4CAAkB,CAAC,IAAI,CAAC;QACxB,gDAAgD;QAChD,CAAC,aAAa,CAAC,SAAS,CAAC;QACzB,4CAA4C;QAC5C,CAAC,gBAAgB,CAAC,SAAS,CAAC;QAC5B,mIAAmI;QACnI,SAAS,KAAK,QAAQ;QACtB,SAAS,KAAK,QAAQ;QACtB,SAAS,KAAK,YAAY;QAC1B,iEAAiE;QACjE,SAAS,KAAK,MAAM;QACpB,4BAA4B;QAC5B,SAAS,KAAK,2BAA2B,CAC1C,CAAC;AACJ,CAAC;AAnBD,oDAmBC;AAED,SAAgB,gBAAgB,CAAC,SAAiB;IAChD,OAAO,CACL,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC9B,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QACxE,SAAS,KAAK,gBAAgB;QAC9B,SAAS,KAAK,gCAAgC;QAC9C,SAAS,KAAK,+BAA+B;QAC7C,SAAS,KAAK,YAAY;QAC1B,SAAS,KAAK,gBAAgB;QAC9B,SAAS,KAAK,SAAS;QACvB,SAAS,KAAK,MAAM;QACpB,SAAS,KAAK,KAAK;QACnB,SAAS,KAAK,QAAQ;QACtB,SAAS,KAAK,YAAY;QAC1B,SAAS,KAAK,SAAS;QACvB,SAAS,KAAK,mBAAmB;QACjC,SAAS,KAAK,SAAS,CACxB,CAAC;AACJ,CAAC;AAlBD,4CAkBC"}
@@ -0,0 +1 @@
1
+ export declare const AND_OR_NOT_BRACKET_REGEXP: RegExp;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AND_OR_NOT_BRACKET_REGEXP = void 0;
4
+ exports.AND_OR_NOT_BRACKET_REGEXP = /[!|&)(]/gm;
5
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/labels/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,yBAAyB,GAAG,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { HarParam } from '../har';
2
+ export declare const getBinaryOrTextValue: (fields: Omit<HarParam, 'name'>) => string;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBinaryOrTextValue = void 0;
4
+ var mime_types_1 = require("mime-types");
5
+ var validator_1 = require("validator");
6
+ var is_binary_file_1 = require("./is-binary-file");
7
+ var getBinaryOrTextValue = function (fields) {
8
+ var _a = fields.value, value = _a === void 0 ? '' : _a, fileName = fields.fileName;
9
+ if (fileName) {
10
+ return myAtob(fields);
11
+ }
12
+ return value;
13
+ };
14
+ exports.getBinaryOrTextValue = getBinaryOrTextValue;
15
+ var myAtob = function (fields) {
16
+ var _a = fields.value, value = _a === void 0 ? '' : _a;
17
+ return Buffer.from(value, getEncodingFrom(value))
18
+ .toString(getEncodingTo(fields));
19
+ };
20
+ var getEncodingFrom = function (value) {
21
+ if (value === void 0) { value = ''; }
22
+ if (validator_1.isBase64(value)) {
23
+ return 'base64';
24
+ }
25
+ };
26
+ var getEncodingTo = function (fields) {
27
+ if (isToBinary(fields)) {
28
+ return 'binary';
29
+ }
30
+ };
31
+ var isToBinary = function (fields) {
32
+ var _a = fields.value, value = _a === void 0 ? '' : _a, fileName = fields.fileName, contentType = fields.contentType;
33
+ if (isAlreadyBinary(value)) {
34
+ return false;
35
+ }
36
+ if (fileName) {
37
+ var ext = getExtension(fileName);
38
+ if (ext) {
39
+ return isBinaryFileExtension(ext);
40
+ }
41
+ }
42
+ if (contentType) {
43
+ return isBinaryContentType(contentType);
44
+ }
45
+ return false;
46
+ };
47
+ var isAlreadyBinary = function (target) {
48
+ if (target === void 0) { target = ''; }
49
+ var bytes = Buffer.from(target);
50
+ var size = target.length;
51
+ return is_binary_file_1.isBinaryFile(bytes, size);
52
+ };
53
+ var getExtension = function (fileName) {
54
+ return fileName.split('.').pop();
55
+ };
56
+ var isBinaryFileExtension = function (ext) {
57
+ return ['docx', 'pdf', 'doc', 'jpg', 'jpeg', 'png', 'xlsx', 'sdata'].includes(ext);
58
+ };
59
+ var isBinaryContentType = function (contentType) {
60
+ return contentType.includes('octet-stream') ||
61
+ ['docx', 'pdf', 'bin'].includes(mime_types_1.extension(contentType) || '');
62
+ };
63
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/multipart-form-data/files.ts"],"names":[],"mappings":";;;AAAA,yCAAuC;AACvC,uCAAqC;AAGrC,mDAAgD;AAGzC,IAAM,oBAAoB,GAAG,UAAC,MAA8B;IACzD,IAAA,KAAyB,MAAM,MAArB,EAAV,KAAK,mBAAG,EAAE,KAAA,EAAE,QAAQ,GAAK,MAAM,SAAX,CAAY;IACxC,IAAI,QAAQ,EAAE;QACZ,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;KACvB;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AANW,QAAA,oBAAoB,wBAM/B;AAEF,IAAM,MAAM,GAAG,UAAC,MAA8B;IACpC,IAAA,KAAe,MAAM,MAAX,EAAV,KAAK,mBAAG,EAAE,KAAA,CAAY;IAC9B,OAAO,MAAM,CAAC,IAAI,CAChB,KAAK,EACL,eAAe,CAAC,KAAK,CAAC,CACvB;SACE,QAAQ,CACP,aAAa,CAAC,MAAM,CAAC,CACtB,CAAC;AACN,CAAC,CAAC;AAEF,IAAM,eAAe,GAAG,UAAC,KAAkB;IAAlB,sBAAA,EAAA,UAAkB;IACzC,IAAI,oBAAQ,CAAC,KAAK,CAAC,EAAE;QACnB,OAAO,QAAQ,CAAC;KACjB;AACH,CAAC,CAAC;AAEF,IAAM,aAAa,GAAG,UAAC,MAA8B;IACnD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE;QACtB,OAAO,QAAQ,CAAC;KACjB;AACH,CAAC,CAAC;AAEF,IAAM,UAAU,GAAG,UAAC,MAA8B;IACxC,IAAA,KAAsC,MAAM,MAAlC,EAAV,KAAK,mBAAG,EAAE,KAAA,EAAE,QAAQ,GAAkB,MAAM,SAAxB,EAAE,WAAW,GAAK,MAAM,YAAX,CAAY;IACrD,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE;QAC1B,OAAO,KAAK,CAAC;KACd;IACD,IAAI,QAAQ,EAAE;QACZ,IAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,GAAG,EAAE;YACP,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC;SACnC;KACF;IACD,IAAI,WAAW,EAAE;QACf,OAAO,mBAAmB,CAAC,WAAW,CAAC,CAAC;KACzC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,IAAM,eAAe,GAAG,UAAC,MAAW;IAAX,uBAAA,EAAA,WAAW;IAClC,IAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,IAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3B,OAAO,6BAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,IAAM,YAAY,GAAG,UAAC,QAAgB;IACpC,OAAA,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;AAAzB,CAAyB,CAAC;AAE5B,IAAM,qBAAqB,GAAG,UAAC,GAAW;IACxC,OAAA,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;AAA3E,CAA2E,CAAC;AAE9E,IAAM,mBAAmB,GAAG,UAAC,WAAmB;IAC9C,OAAA,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC;QACpC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,sBAAS,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AAD7D,CAC6D,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { HarParam } from '../har';
2
+ import { multipartFormDataTextToPostFormData } from './multipart-text-to-post-form-data';
3
+ export declare class Form {
4
+ entries: HarParam[];
5
+ boundary: string;
6
+ constructor(entries?: HarParam[], boundary?: string);
7
+ generateBoundary: () => string;
8
+ append: (name: string, value: string, fileName?: string | undefined) => void;
9
+ toString: () => string;
10
+ private addFileName;
11
+ private addContentType;
12
+ }
13
+ export declare type FormEntry = {
14
+ name: string;
15
+ value: string;
16
+ [other: string]: string;
17
+ };
18
+ export declare function mapToMultipartFormData(request: any): void;
19
+ export { multipartFormDataTextToPostFormData };
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.multipartFormDataTextToPostFormData = exports.mapToMultipartFormData = exports.Form = void 0;
4
+ var files_1 = require("./files");
5
+ var multipart_text_to_post_form_data_1 = require("./multipart-text-to-post-form-data");
6
+ Object.defineProperty(exports, "multipartFormDataTextToPostFormData", { enumerable: true, get: function () { return multipart_text_to_post_form_data_1.multipartFormDataTextToPostFormData; } });
7
+ var Form = /** @class */ (function () {
8
+ function Form(entries, boundary) {
9
+ var _this = this;
10
+ Object.defineProperty(this, "entries", {
11
+ enumerable: true,
12
+ configurable: true,
13
+ writable: true,
14
+ value: void 0
15
+ });
16
+ Object.defineProperty(this, "boundary", {
17
+ enumerable: true,
18
+ configurable: true,
19
+ writable: true,
20
+ value: void 0
21
+ });
22
+ Object.defineProperty(this, "generateBoundary", {
23
+ enumerable: true,
24
+ configurable: true,
25
+ writable: true,
26
+ value: function () {
27
+ var boundary = '-'.repeat(26);
28
+ for (var i = 0; i < 24; i++) {
29
+ boundary += Math.floor(Math.random() * 10).toString(16);
30
+ }
31
+ return boundary;
32
+ }
33
+ });
34
+ Object.defineProperty(this, "append", {
35
+ enumerable: true,
36
+ configurable: true,
37
+ writable: true,
38
+ value: function (name, value, fileName) {
39
+ var entry = { name: name, value: value };
40
+ if (fileName != null) {
41
+ entry.fileName = fileName;
42
+ }
43
+ _this.entries.push(entry);
44
+ }
45
+ });
46
+ Object.defineProperty(this, "toString", {
47
+ enumerable: true,
48
+ configurable: true,
49
+ writable: true,
50
+ value: function () {
51
+ var result = '';
52
+ for (var _i = 0, _a = _this.entries; _i < _a.length; _i++) {
53
+ var _b = _a[_i], name_1 = _b.name, value = _b.value, fileName = _b.fileName, contentType = _b.contentType;
54
+ result += '--' + _this.boundary + '\r\n';
55
+ result += "Content-Disposition: form-data; name=\"" + name_1 + "\"" + _this.addFileName(fileName) + _this.addContentType(contentType) + "\r\n\r\n" + (value || '') + "\r\n";
56
+ }
57
+ result += '--' + _this.boundary + '--\r\n';
58
+ return result;
59
+ }
60
+ });
61
+ Object.defineProperty(this, "addContentType", {
62
+ enumerable: true,
63
+ configurable: true,
64
+ writable: true,
65
+ value: function (contentType) {
66
+ if (contentType === void 0) { contentType = ''; }
67
+ var formattedContentType = '';
68
+ if (contentType) {
69
+ formattedContentType = "\r\ncontent-type: " + contentType;
70
+ }
71
+ return formattedContentType;
72
+ }
73
+ });
74
+ this.entries = entries || [];
75
+ this.boundary = boundary || this.generateBoundary();
76
+ }
77
+ Object.defineProperty(Form.prototype, "addFileName", {
78
+ enumerable: false,
79
+ configurable: true,
80
+ writable: true,
81
+ value: function (fileName) {
82
+ var formattedFileName = '';
83
+ if (fileName != null) {
84
+ formattedFileName = "; filename=\"" + fileName + "\"";
85
+ }
86
+ return formattedFileName;
87
+ }
88
+ });
89
+ return Form;
90
+ }());
91
+ exports.Form = Form;
92
+ function mapToMultipartFormData(request) {
93
+ var _a = request.postData, params = _a.params, text = _a.text;
94
+ if (text) {
95
+ request.postFormData = multipart_text_to_post_form_data_1.multipartFormDataTextToPostFormData(text);
96
+ }
97
+ else if (params) {
98
+ request.postFormData = multipartParamsToPostFormData(params);
99
+ }
100
+ delete request.postData;
101
+ }
102
+ exports.mapToMultipartFormData = mapToMultipartFormData;
103
+ var multipartParamsToPostFormData = function (params) {
104
+ if (params === void 0) { params = []; }
105
+ var postFormData = [];
106
+ for (var _i = 0, params_1 = params; _i < params_1.length; _i++) {
107
+ var p = params_1[_i];
108
+ var name_2 = p.name, _a = p.value, value = _a === void 0 ? '' : _a, fileName = p.fileName;
109
+ var entry = { name: name_2, value: value };
110
+ if (fileName != null) {
111
+ entry.fileName = multipart_text_to_post_form_data_1.getFileName(fileName);
112
+ entry.value = files_1.getBinaryOrTextValue(p);
113
+ }
114
+ postFormData.push(entry);
115
+ }
116
+ return postFormData;
117
+ };
118
+ //# sourceMappingURL=form-data-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-data-utils.js","sourceRoot":"","sources":["../../src/multipart-form-data/form-data-utils.ts"],"names":[],"mappings":";;;AAEA,iCAA+C;AAC/C,uFAAsG;AAgF7F,oHAhFa,sEAAmC,OAgFb;AA9E5C;IAGE,cAAY,OAAoB,EAAE,QAAiB;QAAnD,iBAGC;QALD;;;;;WAAoB;QACpB;;;;;WAAiB;QAMjB;;;;mBAAmB;gBACjB,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;oBAC3B,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;iBACzD;gBACD,OAAO,QAAQ,CAAC;YAClB,CAAC;WAAC;QAEF;;;;mBAAS,UAAC,IAAY,EAAE,KAAa,EAAE,QAAiB;gBACtD,IAAM,KAAK,GAAa,EAAE,IAAI,MAAA,EAAE,KAAK,OAAA,EAAE,CAAC;gBACxC,IAAI,QAAQ,IAAI,IAAI,EAAE;oBACpB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;iBAC3B;gBACD,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;WAAC;QAEF;;;;mBAAW;gBACT,IAAI,MAAM,GAAG,EAAE,CAAC;gBAChB,KAAqD,UAAY,EAAZ,KAAA,KAAI,CAAC,OAAO,EAAZ,cAAY,EAAZ,IAAY,EAAE;oBAAxD,IAAA,WAAsC,EAApC,MAAI,UAAA,EAAE,KAAK,WAAA,EAAE,QAAQ,cAAA,EAAE,WAAW,iBAAA;oBAC7C,MAAM,IAAI,IAAI,GAAG,KAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;oBACxC,MAAM,IAAI,4CAAyC,MAAI,UAAI,KAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,KAAI,CAAC,cAAc,CAAC,WAAW,CAAC,iBAAW,KAAK,IAAI,EAAE,UAAM,CAAC;iBACtJ;gBACD,MAAM,IAAI,IAAI,GAAG,KAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAE1C,OAAO,MAAM,CAAC;YAChB,CAAC;WAAC;QAUF;;;;mBAAyB,UAAC,WAAwB;gBAAxB,4BAAA,EAAA,gBAAwB;gBAChD,IAAI,oBAAoB,GAAG,EAAE,CAAC;gBAC9B,IAAI,WAAW,EAAE;oBACf,oBAAoB,GAAG,uBAAqB,WAAa,CAAC;iBAC3D;gBACD,OAAO,oBAAoB,CAAC;YAC9B,CAAC;WAAC;QA7CA,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACtD,CAAC;;;;;eA6BD,UAAoB,QAAiB;YACnC,IAAI,iBAAiB,GAAG,EAAE,CAAC;YAC3B,IAAI,QAAQ,IAAI,IAAI,EAAE;gBACpB,iBAAiB,GAAG,kBAAe,QAAQ,OAAG,CAAC;aAChD;YACD,OAAO,iBAAiB,CAAC;QAC3B,CAAC;;IASH,WAAC;AAAD,CAAC,AAlDD,IAkDC;AAlDY,oBAAI;AAsDjB,SAAgB,sBAAsB,CAAC,OAAO;IACpC,IAAA,KAA+B,OAAO,SAAZ,EAAd,MAAM,YAAA,EAAE,IAAI,UAAE,CAAa;IAC/C,IAAI,IAAI,EAAE;QACR,OAAO,CAAC,YAAY,GAAG,sEAAmC,CAAC,IAAI,CAAC,CAAC;KAClE;SAAM,IAAI,MAAM,EAAE;QACjB,OAAO,CAAC,YAAY,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;KAC9D;IACD,OAAO,OAAO,CAAC,QAAQ,CAAC;AAC1B,CAAC;AARD,wDAQC;AAED,IAAM,6BAA6B,GAAG,UAAC,MAAuB;IAAvB,uBAAA,EAAA,WAAuB;IAC5D,IAAM,YAAY,GAAiB,EAAE,CAAC;IACtC,KAAgB,UAAM,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,EAAE;QAAnB,IAAM,CAAC,eAAA;QACF,IAAA,MAAI,GAA2B,CAAC,KAA5B,EAAE,KAAyB,CAAC,MAAhB,EAAV,KAAK,mBAAG,EAAE,KAAA,EAAE,QAAQ,GAAK,CAAC,SAAN,CAAO;QACzC,IAAM,KAAK,GAAsB,EAAE,IAAI,QAAA,EAAE,KAAK,OAAA,EAAE,CAAC;QACjD,IAAI,QAAQ,IAAI,IAAI,EAAE;YACpB,KAAK,CAAC,QAAQ,GAAG,8CAAW,CAAC,QAAQ,CAAC,CAAC;YACvC,KAAK,CAAC,KAAK,GAAG,4BAAoB,CAAC,CAAC,CAAC,CAAC;SACvC;QACD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC1B;IACD,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ /// <reference types="node" />
2
+ export declare function isBinaryFile(file: Buffer, size?: number): boolean;
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isBinaryFile = void 0;
4
+ var MAX_BYTES = 512;
5
+ // A very basic non-exception raising reader. Read bytes and
6
+ // at the end use hasError() to check whether this worked.
7
+ var Reader = /** @class */ (function () {
8
+ function Reader(fileBuffer, size) {
9
+ Object.defineProperty(this, "fileBuffer", {
10
+ enumerable: true,
11
+ configurable: true,
12
+ writable: true,
13
+ value: void 0
14
+ });
15
+ Object.defineProperty(this, "size", {
16
+ enumerable: true,
17
+ configurable: true,
18
+ writable: true,
19
+ value: void 0
20
+ });
21
+ Object.defineProperty(this, "offset", {
22
+ enumerable: true,
23
+ configurable: true,
24
+ writable: true,
25
+ value: void 0
26
+ });
27
+ Object.defineProperty(this, "error", {
28
+ enumerable: true,
29
+ configurable: true,
30
+ writable: true,
31
+ value: void 0
32
+ });
33
+ this.fileBuffer = fileBuffer;
34
+ this.size = size;
35
+ this.offset = 0;
36
+ this.error = false;
37
+ }
38
+ Object.defineProperty(Reader.prototype, "hasError", {
39
+ enumerable: false,
40
+ configurable: true,
41
+ writable: true,
42
+ value: function () {
43
+ return this.error;
44
+ }
45
+ });
46
+ Object.defineProperty(Reader.prototype, "nextByte", {
47
+ enumerable: false,
48
+ configurable: true,
49
+ writable: true,
50
+ value: function () {
51
+ if (this.offset === this.size || this.hasError()) {
52
+ this.error = true;
53
+ return 0xff;
54
+ }
55
+ return this.fileBuffer[this.offset++];
56
+ }
57
+ });
58
+ Object.defineProperty(Reader.prototype, "next", {
59
+ enumerable: false,
60
+ configurable: true,
61
+ writable: true,
62
+ value: function (len) {
63
+ var n = new Array();
64
+ for (var i = 0; i < len; i++) {
65
+ n[i] = this.nextByte();
66
+ }
67
+ return n;
68
+ }
69
+ });
70
+ return Reader;
71
+ }());
72
+ // Read a Google Protobuf var(iable)int from the buffer.
73
+ function readProtoVarInt(reader) {
74
+ var idx = 0;
75
+ var varInt = 0;
76
+ while (!reader.hasError()) {
77
+ var b = reader.nextByte();
78
+ varInt = varInt | ((b & 0x7f) << (7 * idx));
79
+ if ((b & 0x80) === 0) {
80
+ break;
81
+ }
82
+ idx++;
83
+ }
84
+ return varInt;
85
+ }
86
+ // Attempt to taste a full Google Protobuf message.
87
+ function readProtoMessage(reader) {
88
+ var varInt = readProtoVarInt(reader);
89
+ var wireType = varInt & 0x7;
90
+ switch (wireType) {
91
+ case 0:
92
+ readProtoVarInt(reader);
93
+ return true;
94
+ case 1:
95
+ reader.next(8);
96
+ return true;
97
+ case 2: {
98
+ var len = readProtoVarInt(reader);
99
+ reader.next(len);
100
+ return true;
101
+ }
102
+ case 5:
103
+ reader.next(4);
104
+ return true;
105
+ }
106
+ return false;
107
+ }
108
+ // Check whether this seems to be a valid protobuf file.
109
+ function isBinaryProto(fileBuffer, totalBytes) {
110
+ var reader = new Reader(fileBuffer, totalBytes);
111
+ var numMessages = 0;
112
+ // eslint-disable-next-line no-constant-condition
113
+ while (true) {
114
+ // Definitely not a valid protobuf
115
+ if (!readProtoMessage(reader) && !reader.hasError()) {
116
+ return false;
117
+ }
118
+ // Short read?
119
+ if (reader.hasError()) {
120
+ break;
121
+ }
122
+ numMessages++;
123
+ }
124
+ return numMessages > 0;
125
+ }
126
+ function isBinaryFile(file, size) {
127
+ if (size === undefined) {
128
+ size = file.length;
129
+ }
130
+ return isBinaryCheck(file, size);
131
+ }
132
+ exports.isBinaryFile = isBinaryFile;
133
+ function isBinaryCheck(fileBuffer, bytesRead) {
134
+ // empty file. no clue what it is.
135
+ if (bytesRead === 0) {
136
+ return false;
137
+ }
138
+ var suspiciousBytes = 0;
139
+ var totalBytes = Math.min(bytesRead, MAX_BYTES);
140
+ // UTF-8 BOM
141
+ if (bytesRead >= 3 && fileBuffer[0] === 0xef && fileBuffer[1] === 0xbb && fileBuffer[2] === 0xbf) {
142
+ return false;
143
+ }
144
+ // UTF-32 BOM
145
+ if (bytesRead >= 4 &&
146
+ fileBuffer[0] === 0x00 &&
147
+ fileBuffer[1] === 0x00 &&
148
+ fileBuffer[2] === 0xfe &&
149
+ fileBuffer[3] === 0xff) {
150
+ return false;
151
+ }
152
+ // UTF-32 LE BOM
153
+ if (bytesRead >= 4 &&
154
+ fileBuffer[0] === 0xff &&
155
+ fileBuffer[1] === 0xfe &&
156
+ fileBuffer[2] === 0x00 &&
157
+ fileBuffer[3] === 0x00) {
158
+ return false;
159
+ }
160
+ // GB BOM
161
+ if (bytesRead >= 4 &&
162
+ fileBuffer[0] === 0x84 &&
163
+ fileBuffer[1] === 0x31 &&
164
+ fileBuffer[2] === 0x95 &&
165
+ fileBuffer[3] === 0x33) {
166
+ return false;
167
+ }
168
+ if (totalBytes >= 5 && fileBuffer.slice(0, 5).toString() === '%PDF-') {
169
+ /* PDF. This is binary. */
170
+ return true;
171
+ }
172
+ // UTF-16 BE BOM
173
+ if (bytesRead >= 2 && fileBuffer[0] === 0xfe && fileBuffer[1] === 0xff) {
174
+ return false;
175
+ }
176
+ // UTF-16 LE BOM
177
+ if (bytesRead >= 2 && fileBuffer[0] === 0xff && fileBuffer[1] === 0xfe) {
178
+ return false;
179
+ }
180
+ for (var i = 0; i < totalBytes; i++) {
181
+ if (fileBuffer[i] === 0) {
182
+ // NULL byte--it's binary!
183
+ return true;
184
+ }
185
+ else if ((fileBuffer[i] < 7 || fileBuffer[i] > 14) && (fileBuffer[i] < 32 || fileBuffer[i] > 127)) {
186
+ // UTF-8 detection
187
+ if (fileBuffer[i] > 193 && fileBuffer[i] < 224 && i + 1 < totalBytes) {
188
+ i++;
189
+ if (fileBuffer[i] > 127 && fileBuffer[i] < 192) {
190
+ continue;
191
+ }
192
+ }
193
+ else if (fileBuffer[i] > 223 && fileBuffer[i] < 240 && i + 2 < totalBytes) {
194
+ i++;
195
+ if (fileBuffer[i] > 127 && fileBuffer[i] < 192 && fileBuffer[i + 1] > 127 && fileBuffer[i + 1] < 192) {
196
+ i++;
197
+ continue;
198
+ }
199
+ }
200
+ suspiciousBytes++;
201
+ // Read at least 32 fileBuffer before making a decision
202
+ if (i >= 32 && (suspiciousBytes * 100) / totalBytes > 10) {
203
+ return true;
204
+ }
205
+ }
206
+ }
207
+ if ((suspiciousBytes * 100) / totalBytes > 10) {
208
+ return true;
209
+ }
210
+ if (suspiciousBytes > 1 && isBinaryProto(fileBuffer, totalBytes)) {
211
+ return true;
212
+ }
213
+ return false;
214
+ }
215
+ //# sourceMappingURL=is-binary-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-binary-file.js","sourceRoot":"","sources":["../../src/multipart-form-data/is-binary-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { PostFormData } from '../request';
2
+ export declare const getFileName: (fileName: string) => string;
3
+ export declare const multipartFormDataTextToPostFormData: (multipartFormDataText?: string) => PostFormData;
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.multipartFormDataTextToPostFormData = exports.getFileName = void 0;
4
+ var files_1 = require("./files");
5
+ var EMPTY_FILE_NAME_PLACEHOLDER = 'loadmill-filename-placeholder';
6
+ var getFileName = function (fileName) {
7
+ return fileName ? fileName : EMPTY_FILE_NAME_PLACEHOLDER;
8
+ };
9
+ exports.getFileName = getFileName;
10
+ var multipartFormDataTextToPostFormData = function (multipartFormDataText) {
11
+ if (multipartFormDataText === void 0) { multipartFormDataText = ''; }
12
+ return getLines(multipartFormDataText)
13
+ .map(function (line) { return extractPostFormDataEntry(line); });
14
+ };
15
+ exports.multipartFormDataTextToPostFormData = multipartFormDataTextToPostFormData;
16
+ var getLines = function (multipartFormDataText) {
17
+ if (multipartFormDataText === void 0) { multipartFormDataText = ''; }
18
+ return removeEmptyLines(multipartFormDataText.split(splitByBoundaryRegex(getBoundary(multipartFormDataText))));
19
+ };
20
+ var getBoundary = function (multipartFormDataText) {
21
+ return multipartFormDataText.substring(0, multipartFormDataText.indexOf('\r\n'));
22
+ };
23
+ var splitByBoundaryRegex = function (boundary) {
24
+ var normalBoundary = boundary + '\r\n';
25
+ var lastBoundary = boundary + '--\r\n';
26
+ return new RegExp(normalBoundary + "|" + lastBoundary);
27
+ };
28
+ var removeEmptyLines = function (lines) {
29
+ if (lines === void 0) { lines = []; }
30
+ return lines.filter(Boolean);
31
+ };
32
+ var extractPostFormDataEntry = function (line) {
33
+ var indexOfFirst2Newlines = line.indexOf('\r\n\r\n');
34
+ var fields = extractFields(line, indexOfFirst2Newlines);
35
+ var value = calculateValue(fields, line, indexOfFirst2Newlines);
36
+ var postFormDataEntry = { name: fields.name, value: value };
37
+ if (fields.fileName != null) {
38
+ postFormDataEntry.fileName = exports.getFileName(fields.fileName);
39
+ }
40
+ fields.contentType && (postFormDataEntry.contentType = fields.contentType);
41
+ return postFormDataEntry;
42
+ };
43
+ var extractFields = function (line, indexOfFirst2Newlines) {
44
+ var rawFields = extractRawFields(line, indexOfFirst2Newlines);
45
+ var res = { name: '' };
46
+ var fieldsLines = rawFields.split('\r\n');
47
+ addNameFields(fieldsLines[0], res);
48
+ fieldsLines.length > 1 && addContentType(fieldsLines[1], res);
49
+ return res;
50
+ };
51
+ var extractRawFields = function (line, indexOfFieldsValueSeperator) {
52
+ return line.substring(0, indexOfFieldsValueSeperator);
53
+ };
54
+ var removeDoubleQuotes = function (v) {
55
+ return v.replace(/"/g, '');
56
+ };
57
+ var calculateValue = function (_a, line, indexOfFirst2Newlines) {
58
+ var fileName = _a.fileName, contentType = _a.contentType;
59
+ var value = extractValue(line, indexOfFirst2Newlines);
60
+ return files_1.getBinaryOrTextValue({ value: value, fileName: fileName, contentType: contentType });
61
+ };
62
+ var extractValue = function (line, indexOfFieldsValueSeperator) {
63
+ return removeEndingNewline(line.substring(indexOfFieldsValueSeperator + 4));
64
+ };
65
+ var removeEndingNewline = function (s) {
66
+ return s.endsWith('\r\n') ? removeLast2Chars(s) : s;
67
+ };
68
+ var removeLast2Chars = function (s) {
69
+ return s.substring(0, s.length - 2);
70
+ };
71
+ var addNameFields = function (nameFieldsLine, res) {
72
+ var tokens = extractTokens(nameFieldsLine);
73
+ for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {
74
+ var token = tokens_1[_i];
75
+ var _a = token.split('='), k = _a[0], v = _a[1];
76
+ if (k === 'name') {
77
+ res.name = removeDoubleQuotes(v);
78
+ }
79
+ else if (k === 'filename') {
80
+ res.fileName = removeDoubleQuotes(v);
81
+ }
82
+ }
83
+ };
84
+ var extractTokens = function (nameFieldsLine) {
85
+ return nameFieldsLine.split(';').map(function (t) { return t.trim(); });
86
+ };
87
+ var addContentType = function (contentTypeLine, res) {
88
+ var _a = contentTypeLine.split(': '), k = _a[0], v = _a[1];
89
+ if (k === 'content-type') {
90
+ res.contentType = v;
91
+ }
92
+ };
93
+ //# sourceMappingURL=multipart-text-to-post-form-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multipart-text-to-post-form-data.js","sourceRoot":"","sources":["../../src/multipart-form-data/multipart-text-to-post-form-data.ts"],"names":[],"mappings":"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"}