1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.prepareFilesForUpload = prepareFilesForUpload;
- var _fs = _interopRequireDefault(require("fs"));
- var _path = _interopRequireDefault(require("path"));
- var _utils = require("../utils");
- var _utilsBundle = require("../utilsBundle");
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /**
- * Copyright (c) Microsoft Corporation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- async function filesExceedUploadLimit(files) {
- const sizes = await Promise.all(files.map(async file => (await _fs.default.promises.stat(file)).size));
- return sizes.reduce((total, size) => total + size, 0) >= _utils.fileUploadSizeLimit;
- }
- async function prepareFilesForUpload(frame, params) {
- var _fileBuffers;
- const {
- payloads,
- streams
- } = params;
- let {
- localPaths
- } = params;
- if ([payloads, localPaths, streams].filter(Boolean).length !== 1) throw new Error('Exactly one of payloads, localPaths and streams must be provided');
- if (streams) localPaths = streams.map(c => c.path());
- if (localPaths) {
- for (const p of localPaths) (0, _utils.assert)(_path.default.isAbsolute(p) && _path.default.resolve(p) === p, 'Paths provided to localPaths must be absolute and fully resolved.');
- }
- let fileBuffers = payloads;
- if (!frame._page._browserContext._browser._isCollocatedWithServer) {
- // If the browser is on a different machine read files into buffers.
- if (localPaths) {
- if (await filesExceedUploadLimit(localPaths)) throw new Error('Cannot transfer files larger than 50Mb to a browser not co-located with the server');
- fileBuffers = await Promise.all(localPaths.map(async item => {
- return {
- name: _path.default.basename(item),
- buffer: await _fs.default.promises.readFile(item),
- lastModifiedMs: (await _fs.default.promises.stat(item)).mtimeMs
- };
- }));
- localPaths = undefined;
- }
- }
- const filePayloads = (_fileBuffers = fileBuffers) === null || _fileBuffers === void 0 ? void 0 : _fileBuffers.map(payload => ({
- name: payload.name,
- mimeType: payload.mimeType || _utilsBundle.mime.getType(payload.name) || 'application/octet-stream',
- buffer: payload.buffer.toString('base64'),
- lastModifiedMs: payload.lastModifiedMs
- }));
- return {
- localPaths,
- filePayloads
- };
- }
|