@remotion/renderer 3.0.30 → 3.0.31
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/abort.d.ts +7 -0
- package/dist/abort.js +20 -0
- package/dist/assets/download-and-map-assets-to-file.js +6 -3
- package/dist/browser/{page.d.ts → Page.d.ts} +0 -0
- package/dist/browser/{page.js → Page.js} +0 -0
- package/dist/browser/ws.d.ts +287 -0
- package/dist/browser/ws.js +21 -0
- package/dist/cancel.d.ts +7 -0
- package/dist/cancel.js +25 -0
- package/dist/codec-supports-media.d.ts +7 -0
- package/dist/codec-supports-media.js +49 -0
- package/dist/ensure-faststart.d.ts +1 -0
- package/dist/ensure-faststart.js +14 -0
- package/dist/faststart/atom.d.ts +35 -0
- package/dist/faststart/atom.js +138 -0
- package/dist/faststart/index.d.ts +0 -0
- package/dist/faststart/index.js +1 -0
- package/dist/faststart/options.d.ts +6 -0
- package/dist/faststart/options.js +2 -0
- package/dist/faststart/qt-faststart.d.ts +18 -0
- package/dist/faststart/qt-faststart.js +66 -0
- package/dist/faststart/update-chunk-offsets.d.ts +10 -0
- package/dist/faststart/update-chunk-offsets.js +114 -0
- package/dist/faststart/util.d.ts +9 -0
- package/dist/faststart/util.js +34 -0
- package/dist/guess-extension-for-media.d.ts +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/offthread/index.d.ts +0 -0
- package/dist/offthread/index.js +1 -0
- package/dist/render-gif.d.ts +2 -0
- package/dist/render-gif.js +242 -0
- package/dist/render-media.d.ts +1 -0
- package/dist/should-use-vp9-decoder.d.ts +0 -0
- package/dist/should-use-vp9-decoder.js +1 -0
- package/dist/stitch-frames-to-gif.d.ts +8 -0
- package/dist/stitch-frames-to-gif.js +128 -0
- package/dist/validate-offthreadvideo-image-format.d.ts +1 -0
- package/dist/validate-offthreadvideo-image-format.js +15 -0
- package/dist/ws/buffer-util.d.ts +10 -0
- package/dist/ws/buffer-util.js +123 -0
- package/dist/ws/constants.d.ts +10 -0
- package/dist/ws/constants.js +13 -0
- package/dist/ws/event-target.d.ts +155 -0
- package/dist/ws/event-target.js +203 -0
- package/dist/ws/extension.d.ts +16 -0
- package/dist/ws/extension.js +232 -0
- package/dist/ws/limiter.d.ts +34 -0
- package/dist/ws/limiter.js +41 -0
- package/dist/ws/permessage_deflate.d.ts +152 -0
- package/dist/ws/permessage_deflate.js +409 -0
- package/package.json +3 -3
- package/dist/assets/calculate-asset-positions.d.ts.map +0 -1
- package/dist/assets/calculate-asset-positions.js.map +0 -1
- package/dist/assets/calculate-atempo.d.ts.map +0 -1
- package/dist/assets/calculate-atempo.js.map +0 -1
- package/dist/assets/convert-assets-to-file-urls.d.ts.map +0 -1
- package/dist/assets/convert-assets-to-file-urls.js.map +0 -1
- package/dist/assets/download-and-map-assets-to-file.d.ts.map +0 -1
- package/dist/assets/download-and-map-assets-to-file.js.map +0 -1
- package/dist/assets/download-file.d.ts.map +0 -1
- package/dist/assets/download-file.js.map +0 -1
- package/dist/assets/ffmpeg-volume-expression.d.ts.map +0 -1
- package/dist/assets/ffmpeg-volume-expression.js.map +0 -1
- package/dist/assets/flatten-volume-array.d.ts.map +0 -1
- package/dist/assets/flatten-volume-array.js.map +0 -1
- package/dist/assets/get-audio-channels.d.ts.map +0 -1
- package/dist/assets/get-audio-channels.js.map +0 -1
- package/dist/assets/read-file.d.ts.map +0 -1
- package/dist/assets/read-file.js.map +0 -1
- package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts.map +0 -1
- package/dist/assets/round-volume-to-avoid-stack-overflow.js.map +0 -1
- package/dist/assets/sanitize-filename.d.ts.map +0 -1
- package/dist/assets/sanitize-filename.js.map +0 -1
- package/dist/assets/sanitize-filepath.d.ts.map +0 -1
- package/dist/assets/sanitize-filepath.js.map +0 -1
- package/dist/assets/truncate-utf8-bytes.d.ts.map +0 -1
- package/dist/assets/truncate-utf8-bytes.js.map +0 -1
- package/dist/assets/types.d.ts.map +0 -1
- package/dist/assets/types.js.map +0 -1
- package/dist/browser/Accessibility.d.ts +0 -175
- package/dist/browser/Accessibility.js +0 -423
- package/dist/browser/AriaQueryHandler.d.ts +0 -20
- package/dist/browser/AriaQueryHandler.js +0 -108
- package/dist/browser/Coverage.d.ts +0 -180
- package/dist/browser/Coverage.js +0 -371
- package/dist/browser/Debug.d.ts +0 -19
- package/dist/browser/Debug.js +0 -42
- package/dist/browser/DeviceDescriptors.d.ts +0 -40
- package/dist/browser/DeviceDescriptors.js +0 -1407
- package/dist/browser/FileChooser.d.ts +0 -56
- package/dist/browser/FileChooser.js +0 -86
- package/dist/browser/Input.d.ts +0 -355
- package/dist/browser/Input.js +0 -592
- package/dist/browser/NetworkConditions.d.ts +0 -26
- package/dist/browser/NetworkConditions.js +0 -33
- package/dist/browser/PDFOptions.d.ts +0 -165
- package/dist/browser/PDFOptions.js +0 -34
- package/dist/browser/PipeTransport.d.ts +0 -10
- package/dist/browser/PipeTransport.js +0 -86
- package/dist/browser/Puppeteer.d.ts +0 -35
- package/dist/browser/Puppeteer.js +0 -17
- package/dist/browser/QueryHandler.d.ts +0 -64
- package/dist/browser/QueryHandler.js +0 -183
- package/dist/browser/SecurityDetails.d.ts +0 -55
- package/dist/browser/SecurityDetails.js +0 -95
- package/dist/browser/Tracing.d.ts +0 -45
- package/dist/browser/Tracing.js +0 -136
- package/dist/browser/USKeyboardLayout.d.ts +0 -39
- package/dist/browser/USKeyboardLayout.js +0 -406
- package/dist/browser/WebWorker.d.ts +0 -96
- package/dist/browser/WebWorker.js +0 -122
- package/dist/browser/dialog.d.ts +0 -70
- package/dist/browser/dialog.js +0 -114
- package/dist/browser/fetch.d.ts +0 -16
- package/dist/browser/fetch.js +0 -46
- package/dist/browser/find-up.d.ts +0 -4
- package/dist/browser/find-up.js +0 -85
- package/dist/browser/pkg-dir.d.ts +0 -3
- package/dist/browser/pkg-dir.js +0 -13
- package/dist/browser-log.d.ts.map +0 -1
- package/dist/browser-log.js.map +0 -1
- package/dist/calculate-ffmpeg-filters.d.ts.map +0 -1
- package/dist/calculate-ffmpeg-filters.js.map +0 -1
- package/dist/can-use-parallel-encoding.d.ts.map +0 -1
- package/dist/can-use-parallel-encoding.js.map +0 -1
- package/dist/chunk.d.ts.map +0 -1
- package/dist/chunk.js.map +0 -1
- package/dist/combine-videos.d.ts.map +0 -1
- package/dist/combine-videos.js.map +0 -1
- package/dist/convert-to-pcm.d.ts.map +0 -1
- package/dist/convert-to-pcm.js.map +0 -1
- package/dist/create-ffmpeg-complex-filter.d.ts.map +0 -1
- package/dist/create-ffmpeg-complex-filter.js.map +0 -1
- package/dist/create-ffmpeg-merge-filter.d.ts.map +0 -1
- package/dist/create-ffmpeg-merge-filter.js.map +0 -1
- package/dist/create-silent-audio.d.ts.map +0 -1
- package/dist/create-silent-audio.js.map +0 -1
- package/dist/cycle-browser-tabs.d.ts.map +0 -1
- package/dist/cycle-browser-tabs.js.map +0 -1
- package/dist/delay-render-embedded-stack.d.ts.map +0 -1
- package/dist/delay-render-embedded-stack.js.map +0 -1
- package/dist/delete-directory.d.ts.map +0 -1
- package/dist/delete-directory.js.map +0 -1
- package/dist/ensure-frames-in-order.d.ts.map +0 -1
- package/dist/ensure-frames-in-order.js.map +0 -1
- package/dist/ensure-output-directory.d.ts.map +0 -1
- package/dist/ensure-output-directory.js.map +0 -1
- package/dist/error-handling/handle-javascript-exception.d.ts.map +0 -1
- package/dist/error-handling/handle-javascript-exception.js.map +0 -1
- package/dist/error-handling/symbolicate-error.d.ts.map +0 -1
- package/dist/error-handling/symbolicate-error.js.map +0 -1
- package/dist/error-handling/symbolicateable-error.d.ts.map +0 -1
- package/dist/error-handling/symbolicateable-error.js.map +0 -1
- package/dist/ffmpeg-filter-file.d.ts.map +0 -1
- package/dist/ffmpeg-filter-file.js.map +0 -1
- package/dist/ffmpeg-flags.d.ts.map +0 -1
- package/dist/ffmpeg-flags.js.map +0 -1
- package/dist/get-audio-codec-name.d.ts.map +0 -1
- package/dist/get-audio-codec-name.js.map +0 -1
- package/dist/get-browser-instance.d.ts.map +0 -1
- package/dist/get-browser-instance.js.map +0 -1
- package/dist/get-codec-name.d.ts.map +0 -1
- package/dist/get-codec-name.js.map +0 -1
- package/dist/get-compositions.d.ts.map +0 -1
- package/dist/get-compositions.js.map +0 -1
- package/dist/get-concurrency.d.ts.map +0 -1
- package/dist/get-concurrency.js.map +0 -1
- package/dist/get-duration-from-frame-range.d.ts.map +0 -1
- package/dist/get-duration-from-frame-range.js.map +0 -1
- package/dist/get-extension-from-codec.d.ts.map +0 -1
- package/dist/get-extension-from-codec.js.map +0 -1
- package/dist/get-format-for-codec.d.ts +0 -2
- package/dist/get-format-for-codec.js +0 -34
- package/dist/get-frame-to-render.d.ts.map +0 -1
- package/dist/get-frame-to-render.js.map +0 -1
- package/dist/get-local-browser-executable.d.ts.map +0 -1
- package/dist/get-local-browser-executable.js.map +0 -1
- package/dist/get-port.d.ts.map +0 -1
- package/dist/get-port.js.map +0 -1
- package/dist/get-prores-profile-name.d.ts.map +0 -1
- package/dist/get-prores-profile-name.js.map +0 -1
- package/dist/image-format.d.ts.map +0 -1
- package/dist/image-format.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/is-serve-url.d.ts.map +0 -1
- package/dist/is-serve-url.js.map +0 -1
- package/dist/legacy-webpack-config.d.ts.map +0 -1
- package/dist/legacy-webpack-config.js.map +0 -1
- package/dist/make-assets-download-dir.d.ts.map +0 -1
- package/dist/make-assets-download-dir.js.map +0 -1
- package/dist/merge-audio-track.d.ts.map +0 -1
- package/dist/merge-audio-track.js.map +0 -1
- package/dist/normalize-serve-url.d.ts.map +0 -1
- package/dist/normalize-serve-url.js.map +0 -1
- package/dist/open-browser.d.ts.map +0 -1
- package/dist/open-browser.js.map +0 -1
- package/dist/p-limit.d.ts.map +0 -1
- package/dist/p-limit.js.map +0 -1
- package/dist/parse-browser-error-stack.d.ts.map +0 -1
- package/dist/parse-browser-error-stack.js.map +0 -1
- package/dist/parse-ffmpeg-progress.d.ts.map +0 -1
- package/dist/parse-ffmpeg-progress.js.map +0 -1
- package/dist/pool.d.ts.map +0 -1
- package/dist/pool.js.map +0 -1
- package/dist/prepare-server.d.ts.map +0 -1
- package/dist/prepare-server.js.map +0 -1
- package/dist/preprocess-audio-track.d.ts.map +0 -1
- package/dist/preprocess-audio-track.js.map +0 -1
- package/dist/prespawn-ffmpeg.d.ts.map +0 -1
- package/dist/prespawn-ffmpeg.js.map +0 -1
- package/dist/provide-screenshot.d.ts.map +0 -1
- package/dist/provide-screenshot.js.map +0 -1
- package/dist/puppeteer-evaluate.d.ts.map +0 -1
- package/dist/puppeteer-evaluate.js.map +0 -1
- package/dist/puppeteer-screenshot.d.ts.map +0 -1
- package/dist/puppeteer-screenshot.js.map +0 -1
- package/dist/render-frames.d.ts.map +0 -1
- package/dist/render-frames.js.map +0 -1
- package/dist/render-media.d.ts.map +0 -1
- package/dist/render-media.js.map +0 -1
- package/dist/render-still.d.ts.map +0 -1
- package/dist/render-still.js.map +0 -1
- package/dist/resolve-asset-src.d.ts.map +0 -1
- package/dist/resolve-asset-src.js.map +0 -1
- package/dist/sample-rate.d.ts.map +0 -1
- package/dist/sample-rate.js.map +0 -1
- package/dist/screenshot-dom-element.d.ts.map +0 -1
- package/dist/screenshot-dom-element.js.map +0 -1
- package/dist/screenshot-task.d.ts.map +0 -1
- package/dist/screenshot-task.js.map +0 -1
- package/dist/seek-to-frame.d.ts.map +0 -1
- package/dist/seek-to-frame.js.map +0 -1
- package/dist/serve-static.d.ts.map +0 -1
- package/dist/serve-static.js.map +0 -1
- package/dist/set-props-and-env.d.ts.map +0 -1
- package/dist/set-props-and-env.js.map +0 -1
- package/dist/stitch-frames-to-video.d.ts.map +0 -1
- package/dist/stitch-frames-to-video.js.map +0 -1
- package/dist/stringify-ffmpeg-filter.d.ts.map +0 -1
- package/dist/stringify-ffmpeg-filter.js.map +0 -1
- package/dist/symbolicate-stacktrace.d.ts.map +0 -1
- package/dist/symbolicate-stacktrace.js.map +0 -1
- package/dist/tmp-dir.d.ts.map +0 -1
- package/dist/tmp-dir.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/validate-even-dimensions-with-codec.d.ts.map +0 -1
- package/dist/validate-even-dimensions-with-codec.js.map +0 -1
- package/dist/validate-ffmpeg.d.ts.map +0 -1
- package/dist/validate-ffmpeg.js.map +0 -1
- package/dist/validate-puppeteer-timeout.d.ts.map +0 -1
- package/dist/validate-puppeteer-timeout.js.map +0 -1
- package/dist/validate-scale.d.ts.map +0 -1
- package/dist/validate-scale.js.map +0 -1
|
@@ -0,0 +1,128 @@
|
|
|
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.stitchFramesToGif = exports.spawnFfmpeg = void 0;
|
|
7
|
+
const execa_1 = __importDefault(require("execa"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const remotion_1 = require("remotion");
|
|
11
|
+
const get_codec_name_1 = require("./get-codec-name");
|
|
12
|
+
const get_prores_profile_name_1 = require("./get-prores-profile-name");
|
|
13
|
+
const parse_ffmpeg_progress_1 = require("./parse-ffmpeg-progress");
|
|
14
|
+
const validate_even_dimensions_with_codec_1 = require("./validate-even-dimensions-with-codec");
|
|
15
|
+
const validate_ffmpeg_1 = require("./validate-ffmpeg");
|
|
16
|
+
const packageJsonPath = path_1.default.join(__dirname, '..', 'package.json');
|
|
17
|
+
const packageJson = fs_1.default.existsSync(packageJsonPath)
|
|
18
|
+
? JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf-8'))
|
|
19
|
+
: null;
|
|
20
|
+
const spawnFfmpeg = async (options) => {
|
|
21
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
22
|
+
remotion_1.Internals.validateDimension(options.height, 'height', 'passed to `stitchFramesToVideo()`');
|
|
23
|
+
remotion_1.Internals.validateDimension(options.width, 'width', 'passed to `stitchFramesToVideo()`');
|
|
24
|
+
remotion_1.Internals.validateFps(options.fps, 'passed to `stitchFramesToVideo()`');
|
|
25
|
+
const codec = (_a = options.codec) !== null && _a !== void 0 ? _a : remotion_1.Internals.DEFAULT_CODEC;
|
|
26
|
+
(0, validate_even_dimensions_with_codec_1.validateEvenDimensionsWithCodec)({
|
|
27
|
+
width: options.width,
|
|
28
|
+
height: options.height,
|
|
29
|
+
codec,
|
|
30
|
+
scale: 1,
|
|
31
|
+
});
|
|
32
|
+
const crf = (_b = options.crf) !== null && _b !== void 0 ? _b : remotion_1.Internals.getDefaultCrfForCodec(codec);
|
|
33
|
+
const pixelFormat = (_c = options.pixelFormat) !== null && _c !== void 0 ? _c : remotion_1.Internals.DEFAULT_PIXEL_FORMAT;
|
|
34
|
+
await (0, validate_ffmpeg_1.validateFfmpeg)((_d = options.ffmpegExecutable) !== null && _d !== void 0 ? _d : null);
|
|
35
|
+
const encoderName = (0, get_codec_name_1.getCodecName)(codec);
|
|
36
|
+
const proResProfileName = (0, get_prores_profile_name_1.getProResProfileName)(codec, options.proResProfile);
|
|
37
|
+
const supportsCrf = encoderName && codec !== 'prores';
|
|
38
|
+
if (options.verbose) {
|
|
39
|
+
console.log('[verbose] ffmpeg', (_e = options.ffmpegExecutable) !== null && _e !== void 0 ? _e : 'ffmpeg in PATH');
|
|
40
|
+
console.log('[verbose] encoder', encoderName);
|
|
41
|
+
console.log('[verbose] pixelFormat', pixelFormat);
|
|
42
|
+
if (supportsCrf) {
|
|
43
|
+
console.log('[verbose] crf', crf);
|
|
44
|
+
}
|
|
45
|
+
console.log('[verbose] codec', codec);
|
|
46
|
+
console.log('[verbose] proResProfileName', proResProfileName);
|
|
47
|
+
}
|
|
48
|
+
remotion_1.Internals.validateSelectedCrfAndCodecCombination(crf, codec);
|
|
49
|
+
remotion_1.Internals.validateSelectedPixelFormatAndCodecCombination(pixelFormat, codec);
|
|
50
|
+
const expectedFrames = options.assetsInfo.assets.length;
|
|
51
|
+
const updateProgress = (preStitchProgress, muxProgress) => {
|
|
52
|
+
var _a;
|
|
53
|
+
const totalFrameProgress = 0.5 * preStitchProgress * expectedFrames + muxProgress * 0.5;
|
|
54
|
+
(_a = options.onProgress) === null || _a === void 0 ? void 0 : _a.call(options, Math.round(totalFrameProgress));
|
|
55
|
+
};
|
|
56
|
+
const ffmpegArgs = [
|
|
57
|
+
['-r', String(options.fps)],
|
|
58
|
+
...(((_f = options.internalOptions) === null || _f === void 0 ? void 0 : _f.preEncodedFileLocation)
|
|
59
|
+
? [['-i', (_g = options.internalOptions) === null || _g === void 0 ? void 0 : _g.preEncodedFileLocation]]
|
|
60
|
+
: [
|
|
61
|
+
['-f', 'image2'],
|
|
62
|
+
['-s', `${options.width}x${options.height}`],
|
|
63
|
+
['-start_number', String(options.assetsInfo.firstFrameIndex)],
|
|
64
|
+
['-i', options.assetsInfo.imageSequenceName],
|
|
65
|
+
]),
|
|
66
|
+
// -c:v is the same as -vcodec as -codec:video
|
|
67
|
+
// and specified the video codec.
|
|
68
|
+
options.loop === null
|
|
69
|
+
? null
|
|
70
|
+
: ['-loop', typeof options.loop === 'number' ? options.loop : '-1'],
|
|
71
|
+
// Ignore metadata that may come from remote media
|
|
72
|
+
['-map_metadata', '-1'],
|
|
73
|
+
[
|
|
74
|
+
'-metadata',
|
|
75
|
+
`comment=` +
|
|
76
|
+
[`Made with Remotion`, packageJson ? packageJson.version : null].join(' '),
|
|
77
|
+
],
|
|
78
|
+
options.force ? '-y' : null,
|
|
79
|
+
options.outputLocation,
|
|
80
|
+
];
|
|
81
|
+
if (options.verbose) {
|
|
82
|
+
console.log('Generated FFMPEG command:');
|
|
83
|
+
console.log(ffmpegArgs);
|
|
84
|
+
}
|
|
85
|
+
const ffmpegString = ffmpegArgs.flat(2).filter(Boolean);
|
|
86
|
+
const task = (0, execa_1.default)((_h = options.ffmpegExecutable) !== null && _h !== void 0 ? _h : 'ffmpeg', ffmpegString, {
|
|
87
|
+
cwd: options.dir,
|
|
88
|
+
});
|
|
89
|
+
(_j = options.cancelSignal) === null || _j === void 0 ? void 0 : _j.call(options, () => {
|
|
90
|
+
task.kill();
|
|
91
|
+
});
|
|
92
|
+
let ffmpegOutput = '';
|
|
93
|
+
let isFinished = false;
|
|
94
|
+
(_k = task.stderr) === null || _k === void 0 ? void 0 : _k.on('data', (data) => {
|
|
95
|
+
var _a;
|
|
96
|
+
const str = data.toString();
|
|
97
|
+
ffmpegOutput += str;
|
|
98
|
+
if (options.onProgress) {
|
|
99
|
+
const parsed = (0, parse_ffmpeg_progress_1.parseFfmpegProgress)(str);
|
|
100
|
+
// FFMPEG bug: In some cases, FFMPEG does hang after it is finished with it's job
|
|
101
|
+
// Example repo: https://github.com/JonnyBurger/ffmpeg-repro (access can be given upon request)
|
|
102
|
+
if (parsed !== undefined) {
|
|
103
|
+
// If two times in a row the finishing frame is logged, we quit the render
|
|
104
|
+
if (parsed === expectedFrames) {
|
|
105
|
+
if (isFinished) {
|
|
106
|
+
(_a = task.stdin) === null || _a === void 0 ? void 0 : _a.write('q');
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
isFinished = true;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
updateProgress(1, parsed);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
return { task, getLogs: () => ffmpegOutput };
|
|
117
|
+
};
|
|
118
|
+
exports.spawnFfmpeg = spawnFfmpeg;
|
|
119
|
+
const stitchFramesToGif = async (options) => {
|
|
120
|
+
const { task, getLogs } = await (0, exports.spawnFfmpeg)(options);
|
|
121
|
+
try {
|
|
122
|
+
await task;
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
throw new Error(getLogs());
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
exports.stitchFramesToGif = stitchFramesToGif;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const validateOffthreadVideoImageFormat: (input: unknown) => void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateOffthreadVideoImageFormat = void 0;
|
|
4
|
+
const validateOffthreadVideoImageFormat = (input) => {
|
|
5
|
+
if (typeof input === 'undefined') {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
if (typeof input !== 'string') {
|
|
9
|
+
throw new TypeError(`<OffthreadVideo imageFormat=""> must be a string, but got ${JSON.stringify(input)} instead.`);
|
|
10
|
+
}
|
|
11
|
+
if (input !== 'png' && input !== 'jpeg') {
|
|
12
|
+
throw new TypeError(`<OffthreadVideo imageFormat=""> must be either "png" or "jpeg", but got ${input}`);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
exports.validateOffthreadVideoImageFormat = validateOffthreadVideoImageFormat;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/**
|
|
3
|
+
* Merges an array of buffers into a new buffer.
|
|
4
|
+
*
|
|
5
|
+
* @param {Buffer[]} list The array of buffers to concat
|
|
6
|
+
* @param {Number} totalLength The total length of buffers in the list
|
|
7
|
+
* @return {Buffer} The resulting buffer
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export declare function concat(list: Buffer[], totalLength: number): Buffer;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.concat = void 0;
|
|
4
|
+
const constants_1 = require("./constants");
|
|
5
|
+
/**
|
|
6
|
+
* Merges an array of buffers into a new buffer.
|
|
7
|
+
*
|
|
8
|
+
* @param {Buffer[]} list The array of buffers to concat
|
|
9
|
+
* @param {Number} totalLength The total length of buffers in the list
|
|
10
|
+
* @return {Buffer} The resulting buffer
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
function concat(list, totalLength) {
|
|
14
|
+
if (list.length === 0)
|
|
15
|
+
return constants_1.constants.EMPTY_BUFFER;
|
|
16
|
+
if (list.length === 1)
|
|
17
|
+
return list[0];
|
|
18
|
+
const target = Buffer.allocUnsafe(totalLength);
|
|
19
|
+
let offset = 0;
|
|
20
|
+
for (let i = 0; i < list.length; i++) {
|
|
21
|
+
const buf = list[i];
|
|
22
|
+
target.set(buf, offset);
|
|
23
|
+
offset += buf.length;
|
|
24
|
+
}
|
|
25
|
+
if (offset < totalLength)
|
|
26
|
+
return target.slice(0, offset);
|
|
27
|
+
return target;
|
|
28
|
+
}
|
|
29
|
+
exports.concat = concat;
|
|
30
|
+
/**
|
|
31
|
+
* Masks a buffer using the given mask.
|
|
32
|
+
*
|
|
33
|
+
* @param {Buffer} source The buffer to mask
|
|
34
|
+
* @param {Buffer} mask The mask to use
|
|
35
|
+
* @param {Buffer} output The buffer where to store the result
|
|
36
|
+
* @param {Number} offset The offset at which to start writing
|
|
37
|
+
* @param {Number} length The number of bytes to mask.
|
|
38
|
+
* @public
|
|
39
|
+
*/
|
|
40
|
+
function _mask(source, mask, output, offset, length) {
|
|
41
|
+
for (let i = 0; i < length; i++) {
|
|
42
|
+
// eslint-disable-next-line no-bitwise
|
|
43
|
+
output[offset + i] = source[i] ^ mask[i & 3];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Unmasks a buffer using the given mask.
|
|
48
|
+
*
|
|
49
|
+
* @param {Buffer} buffer The buffer to unmask
|
|
50
|
+
* @param {Buffer} mask The mask to use
|
|
51
|
+
* @public
|
|
52
|
+
*/
|
|
53
|
+
function _unmask(buffer, mask) {
|
|
54
|
+
for (let i = 0; i < buffer.length; i++) {
|
|
55
|
+
// eslint-disable-next-line no-bitwise
|
|
56
|
+
buffer[i] ^= mask[i & 3];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Converts a buffer to an `ArrayBuffer`.
|
|
61
|
+
*
|
|
62
|
+
* @param {Buffer} buf The buffer to convert
|
|
63
|
+
* @return {ArrayBuffer} Converted buffer
|
|
64
|
+
* @public
|
|
65
|
+
*/
|
|
66
|
+
function toArrayBuffer(buf) {
|
|
67
|
+
if (buf.byteLength === buf.buffer.byteLength) {
|
|
68
|
+
return buf.buffer;
|
|
69
|
+
}
|
|
70
|
+
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Converts `data` to a `Buffer`.
|
|
74
|
+
*
|
|
75
|
+
* @param {*} data The data to convert
|
|
76
|
+
* @return {Buffer} The buffer
|
|
77
|
+
* @throws {TypeError}
|
|
78
|
+
* @public
|
|
79
|
+
*/
|
|
80
|
+
function toBuffer(data) {
|
|
81
|
+
toBuffer.readOnly = true;
|
|
82
|
+
if (Buffer.isBuffer(data))
|
|
83
|
+
return data;
|
|
84
|
+
let buf;
|
|
85
|
+
if (data instanceof ArrayBuffer) {
|
|
86
|
+
buf = Buffer.from(data);
|
|
87
|
+
}
|
|
88
|
+
else if (ArrayBuffer.isView(data)) {
|
|
89
|
+
buf = Buffer.from(data.buffer, data.byteOffset, data.byteLength);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
buf = Buffer.from(data);
|
|
93
|
+
toBuffer.readOnly = false;
|
|
94
|
+
}
|
|
95
|
+
return buf;
|
|
96
|
+
}
|
|
97
|
+
module.exports = {
|
|
98
|
+
mask: _mask,
|
|
99
|
+
toArrayBuffer,
|
|
100
|
+
toBuffer,
|
|
101
|
+
unmask: _unmask,
|
|
102
|
+
};
|
|
103
|
+
/* istanbul ignore else */
|
|
104
|
+
if (!process.env.WS_NO_BUFFER_UTIL) {
|
|
105
|
+
try {
|
|
106
|
+
const bufferUtil = require('bufferutil');
|
|
107
|
+
module.exports.mask = function (source, mask, output, offset, length) {
|
|
108
|
+
if (length < 48)
|
|
109
|
+
_mask(source, mask, output, offset, length);
|
|
110
|
+
else
|
|
111
|
+
bufferUtil.mask(source, mask, output, offset, length);
|
|
112
|
+
};
|
|
113
|
+
module.exports.unmask = function (buffer, mask) {
|
|
114
|
+
if (buffer.length < 32)
|
|
115
|
+
_unmask(buffer, mask);
|
|
116
|
+
else
|
|
117
|
+
bufferUtil.unmask(buffer, mask);
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
// Continue regardless of the error.
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.constants = void 0;
|
|
4
|
+
exports.constants = {
|
|
5
|
+
BINARY_TYPES: ['nodebuffer', 'arraybuffer', 'fragments'],
|
|
6
|
+
EMPTY_BUFFER: Buffer.alloc(0),
|
|
7
|
+
GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',
|
|
8
|
+
kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),
|
|
9
|
+
kListener: Symbol('kListener'),
|
|
10
|
+
kStatusCode: Symbol('status-code'),
|
|
11
|
+
kWebSocket: Symbol('websocket'),
|
|
12
|
+
NOOP: () => undefined,
|
|
13
|
+
};
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
declare const kCode: unique symbol;
|
|
2
|
+
declare const kData: unique symbol;
|
|
3
|
+
declare const kError: unique symbol;
|
|
4
|
+
declare const kMessage: unique symbol;
|
|
5
|
+
declare const kReason: unique symbol;
|
|
6
|
+
declare const kTarget: unique symbol;
|
|
7
|
+
declare const kType: unique symbol;
|
|
8
|
+
declare const kWasClean: unique symbol;
|
|
9
|
+
/**
|
|
10
|
+
* Class representing an event.
|
|
11
|
+
*/
|
|
12
|
+
export declare class Event {
|
|
13
|
+
/**
|
|
14
|
+
* Create a new `Event`.
|
|
15
|
+
*
|
|
16
|
+
* @param {String} type The name of the event
|
|
17
|
+
* @throws {TypeError} If the `type` argument is not specified
|
|
18
|
+
*/
|
|
19
|
+
[kTarget]: null;
|
|
20
|
+
[kType]: string;
|
|
21
|
+
constructor(type: string);
|
|
22
|
+
/**
|
|
23
|
+
* @type {*}
|
|
24
|
+
*/
|
|
25
|
+
get target(): null;
|
|
26
|
+
/**
|
|
27
|
+
* @type {String}
|
|
28
|
+
*/
|
|
29
|
+
get type(): string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Class representing a close event.
|
|
33
|
+
*
|
|
34
|
+
* @extends Event
|
|
35
|
+
*/
|
|
36
|
+
export declare class CloseEvent extends Event {
|
|
37
|
+
/**
|
|
38
|
+
* Create a new `CloseEvent`.
|
|
39
|
+
*
|
|
40
|
+
* @param {String} type The name of the event
|
|
41
|
+
* @param {Object} [options] A dictionary object that allows for setting
|
|
42
|
+
* attributes via object members of the same name
|
|
43
|
+
* @param {Number} [options.code=0] The status code explaining why the
|
|
44
|
+
* connection was closed
|
|
45
|
+
* @param {String} [options.reason=''] A human-readable string explaining why
|
|
46
|
+
* the connection was closed
|
|
47
|
+
* @param {Boolean} [options.wasClean=false] Indicates whether or not the
|
|
48
|
+
* connection was cleanly closed
|
|
49
|
+
*/
|
|
50
|
+
[kCode]: number;
|
|
51
|
+
[kReason]: string;
|
|
52
|
+
[kWasClean]: boolean;
|
|
53
|
+
constructor(type: string, options?: {
|
|
54
|
+
code?: number;
|
|
55
|
+
reason?: string;
|
|
56
|
+
wasClean?: boolean;
|
|
57
|
+
});
|
|
58
|
+
/**
|
|
59
|
+
* @type {Number}
|
|
60
|
+
*/
|
|
61
|
+
get code(): number;
|
|
62
|
+
/**
|
|
63
|
+
* @type {String}
|
|
64
|
+
*/
|
|
65
|
+
get reason(): string;
|
|
66
|
+
/**
|
|
67
|
+
* @type {Boolean}
|
|
68
|
+
*/
|
|
69
|
+
get wasClean(): boolean;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Class representing an error event.
|
|
73
|
+
*
|
|
74
|
+
* @extends Event
|
|
75
|
+
*/
|
|
76
|
+
export declare class ErrorEvent extends Event {
|
|
77
|
+
/**
|
|
78
|
+
* Create a new `ErrorEvent`.
|
|
79
|
+
*
|
|
80
|
+
* @param {String} type The name of the event
|
|
81
|
+
* @param {Object} [options] A dictionary object that allows for setting
|
|
82
|
+
* attributes via object members of the same name
|
|
83
|
+
* @param {*} [options.error=null] The error that generated this event
|
|
84
|
+
* @param {String} [options.message=''] The error message
|
|
85
|
+
*/
|
|
86
|
+
[kError]: Error | null;
|
|
87
|
+
[kMessage]: string;
|
|
88
|
+
constructor(type: string, options?: {
|
|
89
|
+
error?: Error;
|
|
90
|
+
message?: string;
|
|
91
|
+
});
|
|
92
|
+
/**
|
|
93
|
+
* @type {*}
|
|
94
|
+
*/
|
|
95
|
+
get error(): Error | null;
|
|
96
|
+
/**
|
|
97
|
+
* @type {String}
|
|
98
|
+
*/
|
|
99
|
+
get message(): string;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Class representing a message event.
|
|
103
|
+
*
|
|
104
|
+
* @extends Event
|
|
105
|
+
*/
|
|
106
|
+
export declare class MessageEvent extends Event {
|
|
107
|
+
/**
|
|
108
|
+
* Create a new `MessageEvent`.
|
|
109
|
+
*
|
|
110
|
+
* @param {String} type The name of the event
|
|
111
|
+
* @param {Object} [options] A dictionary object that allows for setting
|
|
112
|
+
* attributes via object members of the same name
|
|
113
|
+
* @param {*} [options.data=null] The message content
|
|
114
|
+
*/
|
|
115
|
+
[kData]: unknown;
|
|
116
|
+
constructor(type: string, options?: {
|
|
117
|
+
data?: unknown;
|
|
118
|
+
});
|
|
119
|
+
/**
|
|
120
|
+
* @type {*}
|
|
121
|
+
*/
|
|
122
|
+
get data(): unknown;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* This provides methods for emulating the `EventTarget` interface. It's not
|
|
126
|
+
* meant to be used directly.
|
|
127
|
+
*
|
|
128
|
+
* @mixin
|
|
129
|
+
*/
|
|
130
|
+
export declare const EventTarget: {
|
|
131
|
+
/**
|
|
132
|
+
* Register an event listener.
|
|
133
|
+
*
|
|
134
|
+
* @param {String} type A string representing the event type to listen for
|
|
135
|
+
* @param {Function} listener The listener to add
|
|
136
|
+
* @param {Object} [options] An options object specifies characteristics about
|
|
137
|
+
* the event listener
|
|
138
|
+
* @param {Boolean} [options.once=false] A `Boolean` indicating that the
|
|
139
|
+
* listener should be invoked at most once after being added. If `true`,
|
|
140
|
+
* the listener would be automatically removed when invoked.
|
|
141
|
+
* @public
|
|
142
|
+
*/
|
|
143
|
+
addEventListener(type: 'message' | 'close' | 'error' | 'open', listener: (event: MessageEvent | CloseEvent | ErrorEvent | Event) => void, options?: {
|
|
144
|
+
once?: boolean;
|
|
145
|
+
}): void;
|
|
146
|
+
/**
|
|
147
|
+
* Remove an event listener.
|
|
148
|
+
*
|
|
149
|
+
* @param {String} type A string representing the event type to remove
|
|
150
|
+
* @param {Function} handler The listener to remove
|
|
151
|
+
* @public
|
|
152
|
+
*/
|
|
153
|
+
removeEventListener(type: string, handler: () => undefined): void;
|
|
154
|
+
};
|
|
155
|
+
export {};
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventTarget = exports.MessageEvent = exports.ErrorEvent = exports.CloseEvent = exports.Event = void 0;
|
|
4
|
+
const { kForOnEventAttribute, kListener } = require('./constants');
|
|
5
|
+
const kCode = Symbol('kCode');
|
|
6
|
+
const kData = Symbol('kData');
|
|
7
|
+
const kError = Symbol('kError');
|
|
8
|
+
const kMessage = Symbol('kMessage');
|
|
9
|
+
const kReason = Symbol('kReason');
|
|
10
|
+
const kTarget = Symbol('kTarget');
|
|
11
|
+
const kType = Symbol('kType');
|
|
12
|
+
const kWasClean = Symbol('kWasClean');
|
|
13
|
+
/**
|
|
14
|
+
* Class representing an event.
|
|
15
|
+
*/
|
|
16
|
+
class Event {
|
|
17
|
+
constructor(type) {
|
|
18
|
+
this[kTarget] = null;
|
|
19
|
+
this[kType] = type;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @type {*}
|
|
23
|
+
*/
|
|
24
|
+
get target() {
|
|
25
|
+
return this[kTarget];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* @type {String}
|
|
29
|
+
*/
|
|
30
|
+
get type() {
|
|
31
|
+
return this[kType];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.Event = Event;
|
|
35
|
+
Object.defineProperty(Event.prototype, 'target', { enumerable: true });
|
|
36
|
+
Object.defineProperty(Event.prototype, 'type', { enumerable: true });
|
|
37
|
+
/**
|
|
38
|
+
* Class representing a close event.
|
|
39
|
+
*
|
|
40
|
+
* @extends Event
|
|
41
|
+
*/
|
|
42
|
+
class CloseEvent extends Event {
|
|
43
|
+
constructor(type, options = {}) {
|
|
44
|
+
super(type);
|
|
45
|
+
this[kCode] = options.code === undefined ? 0 : options.code;
|
|
46
|
+
this[kReason] = options.reason === undefined ? '' : options.reason;
|
|
47
|
+
this[kWasClean] = options.wasClean === undefined ? false : options.wasClean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* @type {Number}
|
|
51
|
+
*/
|
|
52
|
+
get code() {
|
|
53
|
+
return this[kCode];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* @type {String}
|
|
57
|
+
*/
|
|
58
|
+
get reason() {
|
|
59
|
+
return this[kReason];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @type {Boolean}
|
|
63
|
+
*/
|
|
64
|
+
get wasClean() {
|
|
65
|
+
return this[kWasClean];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.CloseEvent = CloseEvent;
|
|
69
|
+
Object.defineProperty(CloseEvent.prototype, 'code', { enumerable: true });
|
|
70
|
+
Object.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true });
|
|
71
|
+
Object.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true });
|
|
72
|
+
/**
|
|
73
|
+
* Class representing an error event.
|
|
74
|
+
*
|
|
75
|
+
* @extends Event
|
|
76
|
+
*/
|
|
77
|
+
class ErrorEvent extends Event {
|
|
78
|
+
constructor(type, options = {}) {
|
|
79
|
+
super(type);
|
|
80
|
+
this[kError] = options.error === undefined ? null : options.error;
|
|
81
|
+
this[kMessage] = options.message === undefined ? '' : options.message;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* @type {*}
|
|
85
|
+
*/
|
|
86
|
+
get error() {
|
|
87
|
+
return this[kError];
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* @type {String}
|
|
91
|
+
*/
|
|
92
|
+
get message() {
|
|
93
|
+
return this[kMessage];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
exports.ErrorEvent = ErrorEvent;
|
|
97
|
+
Object.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true });
|
|
98
|
+
Object.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true });
|
|
99
|
+
/**
|
|
100
|
+
* Class representing a message event.
|
|
101
|
+
*
|
|
102
|
+
* @extends Event
|
|
103
|
+
*/
|
|
104
|
+
class MessageEvent extends Event {
|
|
105
|
+
constructor(type, options = {}) {
|
|
106
|
+
super(type);
|
|
107
|
+
this[kData] = options.data === undefined ? null : options.data;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* @type {*}
|
|
111
|
+
*/
|
|
112
|
+
get data() {
|
|
113
|
+
return this[kData];
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.MessageEvent = MessageEvent;
|
|
117
|
+
Object.defineProperty(MessageEvent.prototype, 'data', { enumerable: true });
|
|
118
|
+
/**
|
|
119
|
+
* This provides methods for emulating the `EventTarget` interface. It's not
|
|
120
|
+
* meant to be used directly.
|
|
121
|
+
*
|
|
122
|
+
* @mixin
|
|
123
|
+
*/
|
|
124
|
+
exports.EventTarget = {
|
|
125
|
+
/**
|
|
126
|
+
* Register an event listener.
|
|
127
|
+
*
|
|
128
|
+
* @param {String} type A string representing the event type to listen for
|
|
129
|
+
* @param {Function} listener The listener to add
|
|
130
|
+
* @param {Object} [options] An options object specifies characteristics about
|
|
131
|
+
* the event listener
|
|
132
|
+
* @param {Boolean} [options.once=false] A `Boolean` indicating that the
|
|
133
|
+
* listener should be invoked at most once after being added. If `true`,
|
|
134
|
+
* the listener would be automatically removed when invoked.
|
|
135
|
+
* @public
|
|
136
|
+
*/
|
|
137
|
+
addEventListener(type, listener, options = {}) {
|
|
138
|
+
let wrapper;
|
|
139
|
+
if (type === 'message') {
|
|
140
|
+
wrapper = function (data, isBinary) {
|
|
141
|
+
const event = new MessageEvent('message', {
|
|
142
|
+
data: isBinary ? data : data.toString(),
|
|
143
|
+
});
|
|
144
|
+
event[kTarget] = this;
|
|
145
|
+
listener.call(this, event);
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
else if (type === 'close') {
|
|
149
|
+
wrapper = function (code, message) {
|
|
150
|
+
const event = new CloseEvent('close', {
|
|
151
|
+
code,
|
|
152
|
+
reason: message.toString(),
|
|
153
|
+
wasClean: this._closeFrameReceived && this._closeFrameSent,
|
|
154
|
+
});
|
|
155
|
+
event[kTarget] = this;
|
|
156
|
+
listener.call(this, event);
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
else if (type === 'error') {
|
|
160
|
+
wrapper = function (error) {
|
|
161
|
+
const event = new ErrorEvent('error', {
|
|
162
|
+
error,
|
|
163
|
+
message: error.message,
|
|
164
|
+
});
|
|
165
|
+
event[kTarget] = this;
|
|
166
|
+
listener.call(this, event);
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
else if (type === 'open') {
|
|
170
|
+
wrapper = function () {
|
|
171
|
+
const event = new Event('open');
|
|
172
|
+
event[kTarget] = this;
|
|
173
|
+
listener.call(this, event);
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
wrapper[kForOnEventAttribute] = Boolean(options[kForOnEventAttribute]);
|
|
180
|
+
wrapper[kListener] = listener;
|
|
181
|
+
if (options.once) {
|
|
182
|
+
this.once(type, wrapper);
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
this.on(type, wrapper);
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
/**
|
|
189
|
+
* Remove an event listener.
|
|
190
|
+
*
|
|
191
|
+
* @param {String} type A string representing the event type to remove
|
|
192
|
+
* @param {Function} handler The listener to remove
|
|
193
|
+
* @public
|
|
194
|
+
*/
|
|
195
|
+
removeEventListener(type, handler) {
|
|
196
|
+
for (const listener of this.listeners(type)) {
|
|
197
|
+
if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {
|
|
198
|
+
this.removeListener(type, listener);
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses the `Sec-WebSocket-Extensions` header into an object.
|
|
3
|
+
*
|
|
4
|
+
* @param {String} header The field value of the header
|
|
5
|
+
* @return {Object} The parsed object
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export declare function parse(header: string): any;
|
|
9
|
+
/**
|
|
10
|
+
* Builds the `Sec-WebSocket-Extensions` header field value.
|
|
11
|
+
*
|
|
12
|
+
* @param {Object} extensions The map of extensions and parameters to format
|
|
13
|
+
* @return {String} A string representing the given object
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
export declare function format(extensions: Record<string, Record<string, any>>): string;
|