Socket
Socket
Sign inDemoInstall

atomically

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

atomically - npm Package Compare versions

Comparing version 1.3.2 to 1.4.0

dist/utils/retryify_queue.d.ts

3

dist/consts.d.ts

@@ -11,3 +11,4 @@ declare const DEFAULT_ENCODING = "utf8";

declare const LIMIT_BASENAME_LENGTH = 128;
declare const LIMIT_FILES_DESCRIPTORS = 950;
declare const NOOP: () => void;
export { DEFAULT_ENCODING, DEFAULT_FILE_MODE, DEFAULT_FOLDER_MODE, DEFAULT_READ_OPTIONS, DEFAULT_WRITE_OPTIONS, DEFAULT_TIMEOUT_ASYNC, DEFAULT_TIMEOUT_SYNC, IS_POSIX, IS_USER_ROOT, LIMIT_BASENAME_LENGTH, NOOP };
export { DEFAULT_ENCODING, DEFAULT_FILE_MODE, DEFAULT_FOLDER_MODE, DEFAULT_READ_OPTIONS, DEFAULT_WRITE_OPTIONS, DEFAULT_TIMEOUT_ASYNC, DEFAULT_TIMEOUT_SYNC, IS_POSIX, IS_USER_ROOT, LIMIT_BASENAME_LENGTH, LIMIT_FILES_DESCRIPTORS, NOOP };
"use strict";
/* CONSTS */
Object.defineProperty(exports, "__esModule", { value: true });
exports.NOOP = exports.LIMIT_BASENAME_LENGTH = exports.IS_USER_ROOT = exports.IS_POSIX = exports.DEFAULT_TIMEOUT_SYNC = exports.DEFAULT_TIMEOUT_ASYNC = exports.DEFAULT_WRITE_OPTIONS = exports.DEFAULT_READ_OPTIONS = exports.DEFAULT_FOLDER_MODE = exports.DEFAULT_FILE_MODE = exports.DEFAULT_ENCODING = void 0;
exports.NOOP = exports.LIMIT_FILES_DESCRIPTORS = exports.LIMIT_BASENAME_LENGTH = exports.IS_USER_ROOT = exports.IS_POSIX = exports.DEFAULT_TIMEOUT_SYNC = exports.DEFAULT_TIMEOUT_ASYNC = exports.DEFAULT_WRITE_OPTIONS = exports.DEFAULT_READ_OPTIONS = exports.DEFAULT_FOLDER_MODE = exports.DEFAULT_FILE_MODE = exports.DEFAULT_ENCODING = void 0;
const DEFAULT_ENCODING = 'utf8';

@@ -25,3 +25,5 @@ exports.DEFAULT_ENCODING = DEFAULT_ENCODING;

exports.LIMIT_BASENAME_LENGTH = LIMIT_BASENAME_LENGTH;
const LIMIT_FILES_DESCRIPTORS = 950; //TODO: fetch the real limit from the filesystem
exports.LIMIT_FILES_DESCRIPTORS = LIMIT_FILES_DESCRIPTORS;
const NOOP = () => { };
exports.NOOP = NOOP;

@@ -5,14 +5,21 @@ "use strict";

exports.retryifySync = exports.retryifyAsync = void 0;
const retryify_queue_1 = require("./retryify_queue");
/* RETRYIFY */
//TODO: Maybe publish this as a standalone package
//TODO: Implement a more sophisticaed, less intensive, retry strategy
const retryifyAsync = (fn, isRetriableError) => {
return function (timestamp) {
return function attempt() {
return fn.apply(undefined, arguments).catch(error => {
if (Date.now() > timestamp)
return retryify_queue_1.default.schedule(attempt).then(cleanup => {
return fn.apply(undefined, arguments).then(result => {
cleanup();
return result;
}, error => {
cleanup();
if (Date.now() >= timestamp)
throw error;
if (isRetriableError(error)) {
const delay = Math.round(100 + (400 * Math.random())), delayPromise = new Promise(resolve => setTimeout(resolve, delay));
return delayPromise.then(() => attempt.apply(undefined, arguments));
}
throw error;
if (isRetriableError(error))
return attempt.apply(undefined, arguments);
throw error;
});
});

@@ -19,0 +26,0 @@ };

{
"name": "atomically",
"description": "Read and write files atomically and reliably.",
"version": "1.3.2",
"version": "1.4.0",
"main": "dist/index.js",

@@ -6,0 +6,0 @@ "types": "dist/index.d.ts",

@@ -24,2 +24,4 @@

const LIMIT_FILES_DESCRIPTORS = 950; //TODO: fetch the real limit from the filesystem
const NOOP = () => {};

@@ -29,2 +31,2 @@

export {DEFAULT_ENCODING, DEFAULT_FILE_MODE, DEFAULT_FOLDER_MODE, DEFAULT_READ_OPTIONS, DEFAULT_WRITE_OPTIONS, DEFAULT_TIMEOUT_ASYNC, DEFAULT_TIMEOUT_SYNC, IS_POSIX, IS_USER_ROOT, LIMIT_BASENAME_LENGTH, NOOP};
export {DEFAULT_ENCODING, DEFAULT_FILE_MODE, DEFAULT_FOLDER_MODE, DEFAULT_READ_OPTIONS, DEFAULT_WRITE_OPTIONS, DEFAULT_TIMEOUT_ASYNC, DEFAULT_TIMEOUT_SYNC, IS_POSIX, IS_USER_ROOT, LIMIT_BASENAME_LENGTH, LIMIT_FILES_DESCRIPTORS, NOOP};

@@ -5,8 +5,6 @@

import {Exception, FN} from '../types';
import RetryfyQueue from './retryify_queue';
/* RETRYIFY */
//TODO: Maybe publish this as a standalone package
//TODO: Implement a more sophisticaed, less intensive, retry strategy
const retryifyAsync = <T extends FN> ( fn: T, isRetriableError: FN<[Exception], boolean | void> ): FN<[number], T> => {

@@ -18,10 +16,29 @@

return fn.apply ( undefined, arguments ).catch ( error => {
return RetryfyQueue.schedule ( attempt ).then ( cleanup => {
if ( Date.now () > timestamp ) throw error;
return fn.apply ( undefined, arguments ).then ( result => {
if ( isRetriableError ( error ) ) return attempt.apply ( undefined, arguments );
cleanup ();
throw error;
return result;
}, error => {
cleanup ();
if ( Date.now () >= timestamp ) throw error;
if ( isRetriableError ( error ) ) {
const delay = Math.round ( 100 + ( 400 * Math.random () ) ),
delayPromise = new Promise ( resolve => setTimeout ( resolve, delay ) );
return delayPromise.then ( () => attempt.apply ( undefined, arguments ) );
}
throw error;
});
});

@@ -28,0 +45,0 @@

@@ -119,3 +119,3 @@ 'use strict'

return function () {
if ( Math.random () <= .9 ) {
if ( Math.random () <= .75 ) {
const code = _.shuffle ([ 'EMFILE', 'ENFILE', 'EAGAIN', 'EBUSY', 'EACCESS', 'EPERM' ])[0];

@@ -130,3 +130,3 @@ throw createErr ( code );

return function () {
if ( Math.random () <= .9 ) {
if ( Math.random () <= .75 ) {
const code = _.shuffle ([ 'EMFILE', 'ENFILE', 'EAGAIN', 'EBUSY', 'EACCESS', 'EPERM' ])[0];

@@ -133,0 +133,0 @@ throw createErr ( code );

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc