123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.getWriteSyncArgs = exports.getWriteArgs = exports.bufToUint8 = void 0;
- exports.promisify = promisify;
- exports.validateCallback = validateCallback;
- exports.modeToNumber = modeToNumber;
- exports.nullCheck = nullCheck;
- exports.pathToFilename = pathToFilename;
- exports.createError = createError;
- exports.genRndStr6 = genRndStr6;
- exports.flagsToNumber = flagsToNumber;
- exports.streamToBuffer = streamToBuffer;
- exports.bufferToEncoding = bufferToEncoding;
- exports.isReadableStream = isReadableStream;
- const constants_1 = require("./constants");
- const errors = require("../internal/errors");
- const buffer_1 = require("../internal/buffer");
- const buffer_2 = require("../internal/buffer");
- const queueMicrotask_1 = require("../queueMicrotask");
- const util_1 = require("../core/util");
- function promisify(fs, fn, getResult = input => input) {
- return (...args) => new Promise((resolve, reject) => {
- fs[fn].bind(fs)(...args, (error, result) => {
- if (error)
- return reject(error);
- return resolve(getResult(result));
- });
- });
- }
- function validateCallback(callback) {
- if (typeof callback !== 'function')
- throw TypeError(constants_1.ERRSTR.CB);
- return callback;
- }
- function _modeToNumber(mode, def) {
- if (typeof mode === 'number')
- return mode;
- if (typeof mode === 'string')
- return parseInt(mode, 8);
- if (def)
- return modeToNumber(def);
- return undefined;
- }
- function modeToNumber(mode, def) {
- const result = _modeToNumber(mode, def);
- if (typeof result !== 'number' || isNaN(result))
- throw new TypeError(constants_1.ERRSTR.MODE_INT);
- return result;
- }
- function nullCheck(path, callback) {
- if (('' + path).indexOf('\u0000') !== -1) {
- const er = new Error('Path must be a string without null bytes');
- er.code = 'ENOENT';
- if (typeof callback !== 'function')
- throw er;
- (0, queueMicrotask_1.default)(() => {
- callback(er);
- });
- return false;
- }
- return true;
- }
- function getPathFromURLPosix(url) {
- if (url.hostname !== '') {
- throw new errors.TypeError('ERR_INVALID_FILE_URL_HOST', process.platform);
- }
- const pathname = url.pathname;
- for (let n = 0; n < pathname.length; n++) {
- if (pathname[n] === '%') {
- const third = pathname.codePointAt(n + 2) | 0x20;
- if (pathname[n + 1] === '2' && third === 102) {
- throw new errors.TypeError('ERR_INVALID_FILE_URL_PATH', 'must not include encoded / characters');
- }
- }
- }
- return decodeURIComponent(pathname);
- }
- function pathToFilename(path) {
- if (path instanceof Uint8Array) {
- path = (0, buffer_2.bufferFrom)(path);
- }
- if (typeof path !== 'string' && !buffer_1.Buffer.isBuffer(path)) {
- try {
- if (!(path instanceof require('url').URL))
- throw new TypeError(constants_1.ERRSTR.PATH_STR);
- }
- catch (err) {
- throw new TypeError(constants_1.ERRSTR.PATH_STR);
- }
- path = getPathFromURLPosix(path);
- }
- const pathString = String(path);
- nullCheck(pathString);
- // return slash(pathString);
- return pathString;
- }
- const ENOENT = 'ENOENT';
- const EBADF = 'EBADF';
- const EINVAL = 'EINVAL';
- const EPERM = 'EPERM';
- const EPROTO = 'EPROTO';
- const EEXIST = 'EEXIST';
- const ENOTDIR = 'ENOTDIR';
- const EMFILE = 'EMFILE';
- const EACCES = 'EACCES';
- const EISDIR = 'EISDIR';
- const ENOTEMPTY = 'ENOTEMPTY';
- const ENOSYS = 'ENOSYS';
- const ERR_FS_EISDIR = 'ERR_FS_EISDIR';
- const ERR_OUT_OF_RANGE = 'ERR_OUT_OF_RANGE';
- function formatError(errorCode, func = '', path = '', path2 = '') {
- let pathFormatted = '';
- if (path)
- pathFormatted = ` '${path}'`;
- if (path2)
- pathFormatted += ` -> '${path2}'`;
- switch (errorCode) {
- case ENOENT:
- return `ENOENT: no such file or directory, ${func}${pathFormatted}`;
- case EBADF:
- return `EBADF: bad file descriptor, ${func}${pathFormatted}`;
- case EINVAL:
- return `EINVAL: invalid argument, ${func}${pathFormatted}`;
- case EPERM:
- return `EPERM: operation not permitted, ${func}${pathFormatted}`;
- case EPROTO:
- return `EPROTO: protocol error, ${func}${pathFormatted}`;
- case EEXIST:
- return `EEXIST: file already exists, ${func}${pathFormatted}`;
- case ENOTDIR:
- return `ENOTDIR: not a directory, ${func}${pathFormatted}`;
- case EISDIR:
- return `EISDIR: illegal operation on a directory, ${func}${pathFormatted}`;
- case EACCES:
- return `EACCES: permission denied, ${func}${pathFormatted}`;
- case ENOTEMPTY:
- return `ENOTEMPTY: directory not empty, ${func}${pathFormatted}`;
- case EMFILE:
- return `EMFILE: too many open files, ${func}${pathFormatted}`;
- case ENOSYS:
- return `ENOSYS: function not implemented, ${func}${pathFormatted}`;
- case ERR_FS_EISDIR:
- return `[ERR_FS_EISDIR]: Path is a directory: ${func} returned EISDIR (is a directory) ${path}`;
- case ERR_OUT_OF_RANGE:
- return `[ERR_OUT_OF_RANGE]: value out of range, ${func}${pathFormatted}`;
- default:
- return `${errorCode}: error occurred, ${func}${pathFormatted}`;
- }
- }
- function createError(errorCode, func = '', path = '', path2 = '', Constructor = Error) {
- const error = new Constructor(formatError(errorCode, func, path, path2));
- error.code = errorCode;
- if (path) {
- error.path = path;
- }
- return error;
- }
- function genRndStr6() {
- return Math.random().toString(36).slice(2, 8).padEnd(6, '0');
- }
- function flagsToNumber(flags) {
- if (typeof flags === 'number')
- return flags;
- if (typeof flags === 'string') {
- const flagsNum = constants_1.FLAGS[flags];
- if (typeof flagsNum !== 'undefined')
- return flagsNum;
- }
- // throw new TypeError(formatError(ERRSTR_FLAG(flags)));
- throw new errors.TypeError('ERR_INVALID_OPT_VALUE', 'flags', flags);
- }
- function streamToBuffer(stream) {
- const chunks = [];
- return new Promise((resolve, reject) => {
- stream.on('data', chunk => chunks.push(chunk));
- stream.on('end', () => resolve(buffer_1.Buffer.concat(chunks)));
- stream.on('error', reject);
- });
- }
- const bufToUint8 = (buf) => new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
- exports.bufToUint8 = bufToUint8;
- const getWriteArgs = (fd, a, b, c, d, e) => {
- (0, util_1.validateFd)(fd);
- let offset = 0;
- let length;
- let position = null;
- let encoding;
- let callback;
- const tipa = typeof a;
- const tipb = typeof b;
- const tipc = typeof c;
- const tipd = typeof d;
- if (tipa !== 'string') {
- if (tipb === 'function') {
- callback = b;
- }
- else if (tipc === 'function') {
- offset = b | 0;
- callback = c;
- }
- else if (tipd === 'function') {
- offset = b | 0;
- length = c;
- callback = d;
- }
- else {
- offset = b | 0;
- length = c;
- position = d;
- callback = e;
- }
- }
- else {
- if (tipb === 'function') {
- callback = b;
- }
- else if (tipc === 'function') {
- position = b;
- callback = c;
- }
- else if (tipd === 'function') {
- position = b;
- encoding = c;
- callback = d;
- }
- }
- const buf = (0, util_1.dataToBuffer)(a, encoding);
- if (tipa !== 'string') {
- if (typeof length === 'undefined')
- length = buf.length;
- }
- else {
- offset = 0;
- length = buf.length;
- }
- const cb = validateCallback(callback);
- return [fd, tipa === 'string', buf, offset, length, position, cb];
- };
- exports.getWriteArgs = getWriteArgs;
- const getWriteSyncArgs = (fd, a, b, c, d) => {
- (0, util_1.validateFd)(fd);
- let encoding;
- let offset;
- let length;
- let position;
- const isBuffer = typeof a !== 'string';
- if (isBuffer) {
- offset = (b || 0) | 0;
- length = c;
- position = d;
- }
- else {
- position = b;
- encoding = c;
- }
- const buf = (0, util_1.dataToBuffer)(a, encoding);
- if (isBuffer) {
- if (typeof length === 'undefined') {
- length = buf.length;
- }
- }
- else {
- offset = 0;
- length = buf.length;
- }
- return [fd, buf, offset || 0, length, position];
- };
- exports.getWriteSyncArgs = getWriteSyncArgs;
- function bufferToEncoding(buffer, encoding) {
- if (!encoding || encoding === 'buffer')
- return buffer;
- else
- return buffer.toString(encoding);
- }
- function isReadableStream(stream) {
- return (stream !== null &&
- typeof stream === 'object' &&
- typeof stream.pipe === 'function' &&
- typeof stream.on === 'function' &&
- stream.readable === true);
- }
- //# sourceMappingURL=util.js.map
|