@remotion/renderer 3.0.31 → 3.1.2

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 (289) hide show
  1. package/dist/assets/calculate-asset-positions.d.ts.map +1 -0
  2. package/dist/assets/calculate-asset-positions.js.map +1 -0
  3. package/dist/assets/calculate-atempo.d.ts.map +1 -0
  4. package/dist/assets/calculate-atempo.js.map +1 -0
  5. package/dist/assets/convert-assets-to-file-urls.d.ts.map +1 -0
  6. package/dist/assets/convert-assets-to-file-urls.js.map +1 -0
  7. package/dist/assets/download-and-map-assets-to-file.d.ts.map +1 -0
  8. package/dist/assets/download-and-map-assets-to-file.js.map +1 -0
  9. package/dist/assets/download-file.d.ts.map +1 -0
  10. package/dist/assets/download-file.js.map +1 -0
  11. package/dist/assets/ffmpeg-volume-expression.d.ts.map +1 -0
  12. package/dist/assets/ffmpeg-volume-expression.js.map +1 -0
  13. package/dist/assets/flatten-volume-array.d.ts.map +1 -0
  14. package/dist/assets/flatten-volume-array.js.map +1 -0
  15. package/dist/assets/get-audio-channels.d.ts.map +1 -0
  16. package/dist/assets/get-audio-channels.js.map +1 -0
  17. package/dist/assets/read-file.d.ts.map +1 -0
  18. package/dist/assets/read-file.js.map +1 -0
  19. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts.map +1 -0
  20. package/dist/assets/round-volume-to-avoid-stack-overflow.js.map +1 -0
  21. package/dist/assets/sanitize-filename.d.ts.map +1 -0
  22. package/dist/assets/sanitize-filename.js.map +1 -0
  23. package/dist/assets/sanitize-filepath.d.ts.map +1 -0
  24. package/dist/assets/sanitize-filepath.js.map +1 -0
  25. package/dist/assets/truncate-utf8-bytes.d.ts.map +1 -0
  26. package/dist/assets/truncate-utf8-bytes.js.map +1 -0
  27. package/dist/assets/types.d.ts.map +1 -0
  28. package/dist/assets/types.js.map +1 -0
  29. package/dist/browser/Accessibility.d.ts +175 -0
  30. package/dist/browser/Accessibility.js +423 -0
  31. package/dist/browser/AriaQueryHandler.d.ts +20 -0
  32. package/dist/browser/AriaQueryHandler.js +108 -0
  33. package/dist/browser/Coverage.d.ts +180 -0
  34. package/dist/browser/Coverage.js +371 -0
  35. package/dist/browser/Debug.d.ts +19 -0
  36. package/dist/browser/Debug.js +42 -0
  37. package/dist/browser/DeviceDescriptors.d.ts +40 -0
  38. package/dist/browser/DeviceDescriptors.js +1407 -0
  39. package/dist/browser/FileChooser.d.ts +56 -0
  40. package/dist/browser/FileChooser.js +86 -0
  41. package/dist/browser/Input.d.ts +355 -0
  42. package/dist/browser/Input.js +592 -0
  43. package/dist/browser/NetworkConditions.d.ts +26 -0
  44. package/dist/browser/NetworkConditions.js +33 -0
  45. package/dist/browser/NetworkManager.js +1 -5
  46. package/dist/browser/PDFOptions.d.ts +165 -0
  47. package/dist/browser/PDFOptions.js +34 -0
  48. package/dist/browser/PipeTransport.d.ts +10 -0
  49. package/dist/browser/PipeTransport.js +86 -0
  50. package/dist/browser/Puppeteer.d.ts +35 -0
  51. package/dist/browser/Puppeteer.js +17 -0
  52. package/dist/browser/QueryHandler.d.ts +64 -0
  53. package/dist/browser/QueryHandler.js +183 -0
  54. package/dist/browser/SecurityDetails.d.ts +55 -0
  55. package/dist/browser/SecurityDetails.js +95 -0
  56. package/dist/browser/Tracing.d.ts +45 -0
  57. package/dist/browser/Tracing.js +136 -0
  58. package/dist/browser/USKeyboardLayout.d.ts +39 -0
  59. package/dist/browser/USKeyboardLayout.js +406 -0
  60. package/dist/browser/WebWorker.d.ts +96 -0
  61. package/dist/browser/WebWorker.js +122 -0
  62. package/dist/browser/dialog.d.ts +70 -0
  63. package/dist/browser/dialog.js +114 -0
  64. package/dist/browser/fetch.d.ts +16 -0
  65. package/dist/browser/fetch.js +46 -0
  66. package/dist/browser/find-up.d.ts +4 -0
  67. package/dist/browser/find-up.js +85 -0
  68. package/dist/browser/{Page.d.ts → page.d.ts} +0 -0
  69. package/dist/browser/{Page.js → page.js} +0 -0
  70. package/dist/browser/pkg-dir.d.ts +3 -0
  71. package/dist/browser/pkg-dir.js +13 -0
  72. package/dist/browser-log.d.ts.map +1 -0
  73. package/dist/browser-log.js.map +1 -0
  74. package/dist/calculate-ffmpeg-filters.d.ts.map +1 -0
  75. package/dist/calculate-ffmpeg-filters.js.map +1 -0
  76. package/dist/can-use-parallel-encoding.d.ts.map +1 -0
  77. package/dist/can-use-parallel-encoding.js.map +1 -0
  78. package/dist/chunk.d.ts.map +1 -0
  79. package/dist/chunk.js.map +1 -0
  80. package/dist/combine-videos.d.ts +2 -1
  81. package/dist/combine-videos.d.ts.map +1 -0
  82. package/dist/combine-videos.js +8 -2
  83. package/dist/combine-videos.js.map +1 -0
  84. package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +1 -0
  85. package/dist/convert-number-of-gif-loops-to-ffmpeg.js +17 -0
  86. package/dist/convert-to-pcm.d.ts.map +1 -0
  87. package/dist/convert-to-pcm.js.map +1 -0
  88. package/dist/create-ffmpeg-complex-filter.d.ts +4 -1
  89. package/dist/create-ffmpeg-complex-filter.d.ts.map +1 -0
  90. package/dist/create-ffmpeg-complex-filter.js.map +1 -0
  91. package/dist/create-ffmpeg-merge-filter.d.ts.map +1 -0
  92. package/dist/create-ffmpeg-merge-filter.js.map +1 -0
  93. package/dist/create-silent-audio.d.ts.map +1 -0
  94. package/dist/create-silent-audio.js.map +1 -0
  95. package/dist/cycle-browser-tabs.d.ts.map +1 -0
  96. package/dist/cycle-browser-tabs.js.map +1 -0
  97. package/dist/delay-render-embedded-stack.d.ts.map +1 -0
  98. package/dist/delay-render-embedded-stack.js.map +1 -0
  99. package/dist/delete-directory.d.ts.map +1 -0
  100. package/dist/delete-directory.js.map +1 -0
  101. package/dist/ensure-frames-in-order.d.ts +1 -1
  102. package/dist/ensure-frames-in-order.d.ts.map +1 -0
  103. package/dist/ensure-frames-in-order.js +3 -2
  104. package/dist/ensure-frames-in-order.js.map +1 -0
  105. package/dist/ensure-output-directory.d.ts.map +1 -0
  106. package/dist/ensure-output-directory.js.map +1 -0
  107. package/dist/ensure-presentation-timestamp.d.ts +1 -1
  108. package/dist/ensure-presentation-timestamp.js +9 -10
  109. package/dist/error-handling/handle-javascript-exception.d.ts.map +1 -0
  110. package/dist/error-handling/handle-javascript-exception.js.map +1 -0
  111. package/dist/error-handling/symbolicate-error.d.ts.map +1 -0
  112. package/dist/error-handling/symbolicate-error.js.map +1 -0
  113. package/dist/error-handling/symbolicateable-error.d.ts.map +1 -0
  114. package/dist/error-handling/symbolicateable-error.js.map +1 -0
  115. package/dist/extract-frame-from-video.d.ts +0 -1
  116. package/dist/extract-frame-from-video.js +4 -2
  117. package/dist/ffmpeg-filter-file.d.ts.map +1 -0
  118. package/dist/ffmpeg-filter-file.js.map +1 -0
  119. package/dist/ffmpeg-flags.d.ts.map +1 -0
  120. package/dist/ffmpeg-flags.js.map +1 -0
  121. package/dist/get-audio-codec-name.d.ts.map +1 -0
  122. package/dist/get-audio-codec-name.js.map +1 -0
  123. package/dist/get-browser-instance.d.ts.map +1 -0
  124. package/dist/get-browser-instance.js.map +1 -0
  125. package/dist/get-codec-name.d.ts.map +1 -0
  126. package/dist/get-codec-name.js +3 -0
  127. package/dist/get-codec-name.js.map +1 -0
  128. package/dist/get-compositions.d.ts.map +1 -0
  129. package/dist/get-compositions.js.map +1 -0
  130. package/dist/get-concurrency.d.ts.map +1 -0
  131. package/dist/get-concurrency.js.map +1 -0
  132. package/dist/get-duration-from-frame-range.d.ts +1 -2
  133. package/dist/get-duration-from-frame-range.d.ts.map +1 -0
  134. package/dist/get-duration-from-frame-range.js +13 -9
  135. package/dist/get-duration-from-frame-range.js.map +1 -0
  136. package/dist/get-extension-from-codec.d.ts +1 -1
  137. package/dist/get-extension-from-codec.d.ts.map +1 -0
  138. package/dist/get-extension-from-codec.js +5 -0
  139. package/dist/get-extension-from-codec.js.map +1 -0
  140. package/dist/get-format-for-codec.d.ts +2 -0
  141. package/dist/get-format-for-codec.js +34 -0
  142. package/dist/get-frame-padded-index.d.ts +14 -0
  143. package/dist/get-frame-padded-index.js +33 -0
  144. package/dist/get-frame-to-render.d.ts.map +1 -0
  145. package/dist/get-frame-to-render.js.map +1 -0
  146. package/dist/get-local-browser-executable.d.ts.map +1 -0
  147. package/dist/get-local-browser-executable.js.map +1 -0
  148. package/dist/get-port.d.ts.map +1 -0
  149. package/dist/get-port.js.map +1 -0
  150. package/dist/get-prores-profile-name.d.ts.map +1 -0
  151. package/dist/get-prores-profile-name.js.map +1 -0
  152. package/dist/guess-extension-for-media.d.ts +1 -1
  153. package/dist/image-format.d.ts.map +1 -0
  154. package/dist/image-format.js.map +1 -0
  155. package/dist/index.d.ts +4 -4
  156. package/dist/index.d.ts.map +1 -0
  157. package/dist/index.js +3 -1
  158. package/dist/index.js.map +1 -0
  159. package/dist/is-serve-url.d.ts.map +1 -0
  160. package/dist/is-serve-url.js.map +1 -0
  161. package/dist/last-frame-from-video-cache.d.ts +0 -1
  162. package/dist/legacy-webpack-config.d.ts.map +1 -0
  163. package/dist/legacy-webpack-config.js.map +1 -0
  164. package/dist/make-assets-download-dir.d.ts.map +1 -0
  165. package/dist/make-assets-download-dir.js.map +1 -0
  166. package/dist/merge-audio-track.d.ts.map +1 -0
  167. package/dist/merge-audio-track.js.map +1 -0
  168. package/dist/mime-types.d.ts +1 -1
  169. package/dist/mime-types.js +2 -2
  170. package/dist/normalize-serve-url.d.ts.map +1 -0
  171. package/dist/normalize-serve-url.js.map +1 -0
  172. package/dist/open-browser.d.ts.map +1 -0
  173. package/dist/open-browser.js.map +1 -0
  174. package/dist/p-limit.d.ts.map +1 -0
  175. package/dist/p-limit.js.map +1 -0
  176. package/dist/parse-browser-error-stack.d.ts.map +1 -0
  177. package/dist/parse-browser-error-stack.js.map +1 -0
  178. package/dist/parse-ffmpeg-progress.d.ts.map +1 -0
  179. package/dist/parse-ffmpeg-progress.js.map +1 -0
  180. package/dist/pool.d.ts.map +1 -0
  181. package/dist/pool.js.map +1 -0
  182. package/dist/prepare-server.d.ts.map +1 -0
  183. package/dist/prepare-server.js.map +1 -0
  184. package/dist/preprocess-audio-track.d.ts.map +1 -0
  185. package/dist/preprocess-audio-track.js.map +1 -0
  186. package/dist/prespawn-ffmpeg.d.ts.map +1 -0
  187. package/dist/prespawn-ffmpeg.js +2 -2
  188. package/dist/prespawn-ffmpeg.js.map +1 -0
  189. package/dist/provide-screenshot.d.ts +0 -1
  190. package/dist/provide-screenshot.d.ts.map +1 -0
  191. package/dist/provide-screenshot.js.map +1 -0
  192. package/dist/puppeteer-evaluate.d.ts.map +1 -0
  193. package/dist/puppeteer-evaluate.js.map +1 -0
  194. package/dist/puppeteer-screenshot.d.ts +0 -1
  195. package/dist/puppeteer-screenshot.d.ts.map +1 -0
  196. package/dist/puppeteer-screenshot.js.map +1 -0
  197. package/dist/render-frames.d.ts +1 -0
  198. package/dist/render-frames.d.ts.map +1 -0
  199. package/dist/render-frames.js +29 -25
  200. package/dist/render-frames.js.map +1 -0
  201. package/dist/render-media.d.ts +2 -1
  202. package/dist/render-media.d.ts.map +1 -0
  203. package/dist/render-media.js +11 -4
  204. package/dist/render-media.js.map +1 -0
  205. package/dist/render-still.d.ts.map +1 -0
  206. package/dist/render-still.js +1 -1
  207. package/dist/render-still.js.map +1 -0
  208. package/dist/resolve-asset-src.d.ts.map +1 -0
  209. package/dist/resolve-asset-src.js.map +1 -0
  210. package/dist/sample-rate.d.ts.map +1 -0
  211. package/dist/sample-rate.js.map +1 -0
  212. package/dist/screenshot-dom-element.d.ts +0 -1
  213. package/dist/screenshot-dom-element.d.ts.map +1 -0
  214. package/dist/screenshot-dom-element.js.map +1 -0
  215. package/dist/screenshot-task.d.ts +0 -1
  216. package/dist/screenshot-task.d.ts.map +1 -0
  217. package/dist/screenshot-task.js.map +1 -0
  218. package/dist/seek-to-frame.d.ts.map +1 -0
  219. package/dist/seek-to-frame.js.map +1 -0
  220. package/dist/serve-static.d.ts.map +1 -0
  221. package/dist/serve-static.js.map +1 -0
  222. package/dist/set-props-and-env.d.ts.map +1 -0
  223. package/dist/set-props-and-env.js.map +1 -0
  224. package/dist/stitch-frames-to-video.d.ts +1 -0
  225. package/dist/stitch-frames-to-video.d.ts.map +1 -0
  226. package/dist/stitch-frames-to-video.js +32 -22
  227. package/dist/stitch-frames-to-video.js.map +1 -0
  228. package/dist/stringify-ffmpeg-filter.d.ts.map +1 -0
  229. package/dist/stringify-ffmpeg-filter.js.map +1 -0
  230. package/dist/symbolicate-stacktrace.d.ts.map +1 -0
  231. package/dist/symbolicate-stacktrace.js.map +1 -0
  232. package/dist/tmp-dir.d.ts.map +1 -0
  233. package/dist/tmp-dir.js.map +1 -0
  234. package/dist/types.d.ts.map +1 -0
  235. package/dist/types.js.map +1 -0
  236. package/dist/validate-even-dimensions-with-codec.d.ts.map +1 -0
  237. package/dist/validate-even-dimensions-with-codec.js.map +1 -0
  238. package/dist/validate-ffmpeg.d.ts.map +1 -0
  239. package/dist/validate-ffmpeg.js.map +1 -0
  240. package/dist/validate-output-filename.js +5 -0
  241. package/dist/validate-puppeteer-timeout.d.ts.map +1 -0
  242. package/dist/validate-puppeteer-timeout.js.map +1 -0
  243. package/dist/validate-scale.d.ts.map +1 -0
  244. package/dist/validate-scale.js.map +1 -0
  245. package/package.json +8 -10
  246. package/tsconfig.json +2 -1
  247. package/vitest.config.ts +8 -0
  248. package/dist/abort.d.ts +0 -7
  249. package/dist/abort.js +0 -20
  250. package/dist/browser/ws.d.ts +0 -287
  251. package/dist/browser/ws.js +0 -21
  252. package/dist/cancel.d.ts +0 -7
  253. package/dist/cancel.js +0 -25
  254. package/dist/ensure-faststart.d.ts +0 -1
  255. package/dist/ensure-faststart.js +0 -14
  256. package/dist/faststart/atom.d.ts +0 -35
  257. package/dist/faststart/atom.js +0 -138
  258. package/dist/faststart/index.d.ts +0 -0
  259. package/dist/faststart/index.js +0 -1
  260. package/dist/faststart/options.d.ts +0 -6
  261. package/dist/faststart/options.js +0 -2
  262. package/dist/faststart/qt-faststart.d.ts +0 -18
  263. package/dist/faststart/qt-faststart.js +0 -66
  264. package/dist/faststart/update-chunk-offsets.d.ts +0 -10
  265. package/dist/faststart/update-chunk-offsets.js +0 -114
  266. package/dist/faststart/util.d.ts +0 -9
  267. package/dist/faststart/util.js +0 -34
  268. package/dist/offthread/index.d.ts +0 -0
  269. package/dist/offthread/index.js +0 -1
  270. package/dist/render-gif.d.ts +0 -2
  271. package/dist/render-gif.js +0 -242
  272. package/dist/should-use-vp9-decoder.d.ts +0 -0
  273. package/dist/should-use-vp9-decoder.js +0 -1
  274. package/dist/stitch-frames-to-gif.d.ts +0 -8
  275. package/dist/stitch-frames-to-gif.js +0 -128
  276. package/dist/validate-offthreadvideo-image-format.d.ts +0 -1
  277. package/dist/validate-offthreadvideo-image-format.js +0 -15
  278. package/dist/ws/buffer-util.d.ts +0 -10
  279. package/dist/ws/buffer-util.js +0 -123
  280. package/dist/ws/constants.d.ts +0 -10
  281. package/dist/ws/constants.js +0 -13
  282. package/dist/ws/event-target.d.ts +0 -155
  283. package/dist/ws/event-target.js +0 -203
  284. package/dist/ws/extension.d.ts +0 -16
  285. package/dist/ws/extension.js +0 -232
  286. package/dist/ws/limiter.d.ts +0 -34
  287. package/dist/ws/limiter.js +0 -41
  288. package/dist/ws/permessage_deflate.d.ts +0 -152
  289. package/dist/ws/permessage_deflate.js +0 -409
@@ -1,409 +0,0 @@
1
- 'use strict';
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.PerMessageDeflate = void 0;
7
- const zlib_1 = __importDefault(require("zlib"));
8
- const constants_1 = require("./constants");
9
- const limiter_1 = require("./limiter");
10
- const buffer_util_1 = require("./buffer-util");
11
- const TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);
12
- const kPerMessageDeflate = Symbol('permessage-deflate');
13
- const kTotalLength = Symbol('total-length');
14
- const kCallback = Symbol('callback');
15
- const kBuffers = Symbol('buffers');
16
- const kError = Symbol('error');
17
- //
18
- // We limit zlib concurrency, which prevents severe memory fragmentation
19
- // as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913
20
- // and https://github.com/websockets/ws/issues/1202
21
- //
22
- // Intentionally global; it's the global thread pool that's an issue.
23
- //
24
- let zlibLimiter;
25
- /**
26
- * permessage-deflate implementation.
27
- */
28
- class PerMessageDeflate {
29
- constructor(options, isServer, maxPayload) {
30
- // eslint-disable-next-line no-bitwise
31
- this._maxPayload = maxPayload | 0;
32
- this._options = options || {};
33
- this._threshold =
34
- // eslint-disable-next-line no-negated-condition
35
- this._options.threshold !== undefined ? this._options.threshold : 1024;
36
- this._isServer = Boolean(isServer);
37
- this._deflate = null;
38
- this._inflate = null;
39
- this.params = null;
40
- if (!zlibLimiter) {
41
- const concurrency =
42
- // eslint-disable-next-line no-negated-condition
43
- this._options.concurrencyLimit !== undefined
44
- ? this._options.concurrencyLimit
45
- : 10;
46
- zlibLimiter = new limiter_1.Limiter(concurrency);
47
- }
48
- }
49
- /**
50
- * @type {String}
51
- */
52
- static get extensionName() {
53
- return 'permessage-deflate';
54
- }
55
- /**
56
- * Create an extension negotiation offer.
57
- *
58
- * @return {Object} Extension parameters
59
- * @public
60
- */
61
- offer() {
62
- const params = {};
63
- if (this._options.serverNoContextTakeover) {
64
- params.server_no_context_takeover = true;
65
- }
66
- if (this._options.clientNoContextTakeover) {
67
- params.client_no_context_takeover = true;
68
- }
69
- if (this._options.serverMaxWindowBits) {
70
- params.server_max_window_bits = this._options.serverMaxWindowBits;
71
- }
72
- if (this._options.clientMaxWindowBits) {
73
- params.client_max_window_bits = this._options.clientMaxWindowBits;
74
- // eslint-disable-next-line no-eq-null, eqeqeq
75
- }
76
- else if (this._options.clientMaxWindowBits == null) {
77
- params.client_max_window_bits = true;
78
- }
79
- return params;
80
- }
81
- /**
82
- * Accept an extension negotiation offer/response.
83
- *
84
- * @param {Array} configurations The extension negotiation offers/reponse
85
- * @return {Object} Accepted configuration
86
- * @public
87
- */
88
- accept(configurations) {
89
- configurations = this.normalizeParams(configurations);
90
- this.params = this._isServer
91
- ? this.acceptAsServer(configurations)
92
- : this.acceptAsClient(configurations);
93
- return this.params;
94
- }
95
- /**
96
- * Releases all resources used by the extension.
97
- *
98
- * @public
99
- */
100
- cleanup() {
101
- if (this._inflate) {
102
- this._inflate.close();
103
- this._inflate = null;
104
- }
105
- if (this._deflate) {
106
- const callback = this._deflate[kCallback];
107
- this._deflate.close();
108
- this._deflate = null;
109
- if (callback) {
110
- callback(new Error('The deflate stream was closed while data was being processed'));
111
- }
112
- }
113
- }
114
- /**
115
- * Accept an extension negotiation offer.
116
- *
117
- * @param {Array} offers The extension negotiation offers
118
- * @return {Object} Accepted configuration
119
- * @private
120
- */
121
- acceptAsServer(offers) {
122
- const opts = this._options;
123
- const accepted = offers.find((params) => {
124
- if ((opts.serverNoContextTakeover === false &&
125
- params.server_no_context_takeover) ||
126
- (params.server_max_window_bits &&
127
- (opts.serverMaxWindowBits === false ||
128
- (typeof opts.serverMaxWindowBits === 'number' &&
129
- opts.serverMaxWindowBits > params.server_max_window_bits))) ||
130
- (typeof opts.clientMaxWindowBits === 'number' &&
131
- !params.client_max_window_bits)) {
132
- return false;
133
- }
134
- return true;
135
- });
136
- if (!accepted) {
137
- throw new Error('None of the extension offers can be accepted');
138
- }
139
- if (opts.serverNoContextTakeover) {
140
- accepted.server_no_context_takeover = true;
141
- }
142
- if (opts.clientNoContextTakeover) {
143
- accepted.client_no_context_takeover = true;
144
- }
145
- if (typeof opts.serverMaxWindowBits === 'number') {
146
- accepted.server_max_window_bits = opts.serverMaxWindowBits;
147
- }
148
- if (typeof opts.clientMaxWindowBits === 'number') {
149
- accepted.client_max_window_bits = opts.clientMaxWindowBits;
150
- }
151
- else if (accepted.client_max_window_bits === true ||
152
- opts.clientMaxWindowBits === false) {
153
- delete accepted.client_max_window_bits;
154
- }
155
- return accepted;
156
- }
157
- /**
158
- * Accept the extension negotiation response.
159
- *
160
- * @param {Array} response The extension negotiation response
161
- * @return {Object} Accepted configuration
162
- * @private
163
- */
164
- acceptAsClient(response) {
165
- const params = response[0];
166
- if (this._options.clientNoContextTakeover === false &&
167
- params.client_no_context_takeover) {
168
- throw new Error('Unexpected parameter "client_no_context_takeover"');
169
- }
170
- if (!params.client_max_window_bits) {
171
- if (typeof this._options.clientMaxWindowBits === 'number') {
172
- params.client_max_window_bits = this._options.clientMaxWindowBits;
173
- }
174
- }
175
- else if (this._options.clientMaxWindowBits === false ||
176
- (typeof this._options.clientMaxWindowBits === 'number' &&
177
- params.client_max_window_bits > this._options.clientMaxWindowBits)) {
178
- throw new Error('Unexpected or invalid parameter "client_max_window_bits"');
179
- }
180
- return params;
181
- }
182
- /**
183
- * Normalize parameters.
184
- *
185
- * @param {Array} configurations The extension negotiation offers/reponse
186
- * @return {Array} The offers/response with normalized parameters
187
- * @private
188
- */
189
- normalizeParams(configurations) {
190
- configurations.forEach((params) => {
191
- Object.keys(params).forEach((key) => {
192
- let value = params[key];
193
- if (value.length > 1) {
194
- throw new Error(`Parameter "${key}" must have only a single value`);
195
- }
196
- value = value[0];
197
- if (key === 'client_max_window_bits') {
198
- if (value !== true) {
199
- const num = Number(value);
200
- if (!Number.isInteger(num) || num < 8 || num > 15) {
201
- throw new TypeError(`Invalid value for parameter "${key}": ${value}`);
202
- }
203
- value = num;
204
- }
205
- else if (!this._isServer) {
206
- throw new TypeError(`Invalid value for parameter "${key}": ${value}`);
207
- }
208
- }
209
- else if (key === 'server_max_window_bits') {
210
- const num = Number(value);
211
- if (!Number.isInteger(num) || num < 8 || num > 15) {
212
- throw new TypeError(`Invalid value for parameter "${key}": ${value}`);
213
- }
214
- value = num;
215
- }
216
- else if (key === 'client_no_context_takeover' ||
217
- key === 'server_no_context_takeover') {
218
- if (value !== true) {
219
- throw new TypeError(`Invalid value for parameter "${key}": ${value}`);
220
- }
221
- }
222
- else {
223
- throw new Error(`Unknown parameter "${key}"`);
224
- }
225
- params[key] = value;
226
- });
227
- });
228
- return configurations;
229
- }
230
- /**
231
- * Decompress data. Concurrency limited.
232
- *
233
- * @param {Buffer} data Compressed data
234
- * @param {Boolean} fin Specifies whether or not this is the last fragment
235
- * @param {Function} callback Callback
236
- * @public
237
- */
238
- decompress(data, fin, callback) {
239
- zlibLimiter.add((done) => {
240
- this._decompress(data, fin, (err, result) => {
241
- done();
242
- callback(err, result);
243
- });
244
- });
245
- }
246
- /**
247
- * Compress data. Concurrency limited.
248
- *
249
- * @param {(Buffer|String)} data Data to compress
250
- * @param {Boolean} fin Specifies whether or not this is the last fragment
251
- * @param {Function} callback Callback
252
- * @public
253
- */
254
- compress(data, fin, callback) {
255
- zlibLimiter.add((done) => {
256
- this._compress(data, fin, (err, result) => {
257
- done();
258
- callback(err, result);
259
- });
260
- });
261
- }
262
- /**
263
- * Decompress data.
264
- *
265
- * @param {Buffer} data Compressed data
266
- * @param {Boolean} fin Specifies whether or not this is the last fragment
267
- * @param {Function} callback Callback
268
- * @private
269
- */
270
- _decompress(data, fin, callback) {
271
- const endpoint = this._isServer ? 'client' : 'server';
272
- if (!this._inflate) {
273
- const key = `${endpoint}_max_window_bits`;
274
- const windowBits =
275
- // eslint-disable-next-line no-negated-condition
276
- typeof this.params[key] !== 'number'
277
- ? zlib_1.default.Z_DEFAULT_WINDOWBITS
278
- : this.params[key];
279
- this._inflate = zlib_1.default.createInflateRaw({
280
- ...this._options.zlibInflateOptions,
281
- windowBits,
282
- });
283
- this._inflate[kPerMessageDeflate] = this;
284
- this._inflate[kTotalLength] = 0;
285
- this._inflate[kBuffers] = [];
286
- this._inflate.on('error', inflateOnError);
287
- this._inflate.on('data', inflateOnData);
288
- }
289
- this._inflate[kCallback] = callback;
290
- this._inflate.write(data);
291
- if (fin)
292
- this._inflate.write(TRAILER);
293
- this._inflate.flush(() => {
294
- const err = this._inflate[kError];
295
- if (err) {
296
- this._inflate.close();
297
- this._inflate = null;
298
- callback(err);
299
- return;
300
- }
301
- const data = (0, buffer_util_1.concat)(this._inflate[kBuffers], this._inflate[kTotalLength]);
302
- if (this._inflate._readableState.endEmitted) {
303
- this._inflate.close();
304
- this._inflate = null;
305
- }
306
- else {
307
- this._inflate[kTotalLength] = 0;
308
- this._inflate[kBuffers] = [];
309
- if (fin && this.params[`${endpoint}_no_context_takeover`]) {
310
- this._inflate.reset();
311
- }
312
- }
313
- callback(null, data);
314
- });
315
- }
316
- /**
317
- * Compress data.
318
- *
319
- * @param {(Buffer|String)} data Data to compress
320
- * @param {Boolean} fin Specifies whether or not this is the last fragment
321
- * @param {Function} callback Callback
322
- * @private
323
- */
324
- _compress(data, fin, callback) {
325
- const endpoint = this._isServer ? 'server' : 'client';
326
- if (!this._deflate) {
327
- const key = `${endpoint}_max_window_bits`;
328
- const windowBits = typeof this.params[key] !== 'number'
329
- ? zlib_1.default.Z_DEFAULT_WINDOWBITS
330
- : this.params[key];
331
- this._deflate = zlib_1.default.createDeflateRaw({
332
- ...this._options.zlibDeflateOptions,
333
- windowBits,
334
- });
335
- this._deflate[kTotalLength] = 0;
336
- this._deflate[kBuffers] = [];
337
- this._deflate.on('data', deflateOnData);
338
- }
339
- this._deflate[kCallback] = callback;
340
- this._deflate.write(data);
341
- this._deflate.flush(zlib_1.default.Z_SYNC_FLUSH, () => {
342
- if (!this._deflate) {
343
- //
344
- // The deflate stream was closed while data was being processed.
345
- //
346
- return;
347
- }
348
- let _data = (0, buffer_util_1.concat)(this._deflate[kBuffers], this._deflate[kTotalLength]);
349
- if (fin)
350
- _data = _data.slice(0, _data.length - 4);
351
- //
352
- // Ensure that the callback will not be called again in
353
- // `PerMessageDeflate#cleanup()`.
354
- //
355
- this._deflate[kCallback] = null;
356
- this._deflate[kTotalLength] = 0;
357
- this._deflate[kBuffers] = [];
358
- if (fin && this.params[`${endpoint}_no_context_takeover`]) {
359
- this._deflate.reset();
360
- }
361
- callback(null, _data);
362
- });
363
- }
364
- }
365
- exports.PerMessageDeflate = PerMessageDeflate;
366
- /**
367
- * The listener of the `zlib.DeflateRaw` stream `'data'` event.
368
- *
369
- * @param {Buffer} chunk A chunk of data
370
- * @private
371
- */
372
- function deflateOnData(chunk) {
373
- this[kBuffers].push(chunk);
374
- this[kTotalLength] += chunk.length;
375
- }
376
- /**
377
- * The listener of the `zlib.InflateRaw` stream `'data'` event.
378
- *
379
- * @param {Buffer} chunk A chunk of data
380
- * @private
381
- */
382
- function inflateOnData(chunk) {
383
- this[kTotalLength] += chunk.length;
384
- if (this[kPerMessageDeflate]._maxPayload < 1 ||
385
- this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload) {
386
- this[kBuffers].push(chunk);
387
- return;
388
- }
389
- this[kError] = new RangeError('Max payload size exceeded');
390
- this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';
391
- this[kError][constants_1.constants.kStatusCode] = 1009;
392
- this.removeListener('data', inflateOnData);
393
- this.reset();
394
- }
395
- /**
396
- * The listener of the `zlib.InflateRaw` stream `'error'` event.
397
- *
398
- * @param {Error} err The emitted error
399
- * @private
400
- */
401
- function inflateOnError(err) {
402
- //
403
- // There is no need to call `Zlib#close()` as the handle is automatically
404
- // closed when an error is emitted.
405
- //
406
- this[kPerMessageDeflate]._inflate = null;
407
- err[constants_1.constants.kStatusCode] = 1007;
408
- this[kCallback](err);
409
- }