Socket
Socket
Sign inDemoInstall

protoblast

Package Overview
Dependencies
Maintainers
1
Versions
102
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

protoblast - npm Package Compare versions

Comparing version 0.7.0 to 0.7.1

lib/form_data.js

24

CHANGELOG.md

@@ -0,1 +1,25 @@

## 0.7.1 (2020-07-11)
* Automatically create the prototypal wrapper methods for the function inheritance
* `Function#setProperty` now accepts a single object to set multiple properties
* Add `Stream.Delayed()` class
* Add `Stream.Combined()` class
* Fix browser-side `Crypto.randomHex()` returning faulty data
* Supplying `@` as a namespace will put it in the root
* Add server-side `FormData` class
* When reporting `Pledge` progress, the duration of each interval is also logged
* Make the `reset_on_call` option of `Function.throttle` actually work
* Pledge subclasses will return a regular `Pledge` on `.then()`
* Add `Pledge.Timeout` class
* Add `String#splitCharacters()` for getting an array of the string's characters
* Add the `loopOverArgument()` decorator, which will loop over the given argument if it's an array
* Add the `empty` event to FunctionQueue
* Add the `RURL#extension` property to get/set the extension of the pathname
* `RURL#pathname` will now no longer be empty when the protocol requires a slash
* Add a custom `Error` class
* Add `Function.isNativeClass()` to detect functions made with native `class` syntax
* Added `Symbol.hasInstance` trap to the namespace functions
* Use `setImmediate` for rejecting Pledges to prevent uncaught warnings
* Fix `Blast.versions` entries not being set correctly
## 0.7.0 (2020-03-13)

@@ -2,0 +26,0 @@

15

lib/crypto.js

@@ -233,3 +233,3 @@ module.exports = function BlastCrypto(Blast, Collection) {

* @since 0.1.4
* @version 0.4.1
* @version 0.7.1
*

@@ -243,4 +243,5 @@ * @param {Number} bytesize

var result = 1,
var result = '',
arr,
nr,
i;

@@ -254,7 +255,11 @@

for (i = 0; i < arr.length; i++) {
result *= arr[i];
nr = (Math.abs(arr[i]) + 125).toString(16);
if (nr.length == 1) {
nr = '0' + nr;
}
result += nr;
}
result = Math.abs(result).toString(16);
if (callback == null) {

@@ -261,0 +266,0 @@ return result;

@@ -38,4 +38,4 @@ /**

'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec',
'jan', 'feb', 'mrt', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec',
'janv', 'févr', 'mars', 'avr', 'mai', 'juin', 'juil', 'août', 'sept', 'oct', 'nov', 'déc'
'jan.', 'feb.', 'mrt.', 'apr.','mei', 'jun.', 'jul.', 'aug.', 'sep.', 'okt.','nov.','dec.',
'janv.','févr.','mars.','avr.','mai', 'juin', 'juil.','août', 'sept.','oct.','nov.','déc.'
];

@@ -52,3 +52,3 @@

'ma', 'di', 'wo', 'do', 'vr', 'za', 'zo',
'lun', 'mar', 'mer', 'jeu', 'ven', 'sam', 'dim'
'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.', 'dim.'
];

@@ -71,3 +71,3 @@

if (Blast.isNode) {
test = new Intl.DateTimeFormat('es',{month:'long'}).format(new Date(9E8));
test = new Intl.DateTimeFormat('es', {month:'long'}).format(new Date(9E8));

@@ -74,0 +74,0 @@ if (test == 'enero') {

@@ -623,3 +623,20 @@ module.exports = function BlastDeck(Blast, Collection) {

/**
* Iterator method
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*/
Deck.setMethod(Symbol.iterator, function* iterate() {
var values = this.getSorted(false),
i;
for (i = 0; i < values.length; i++) {
yield values[i];
}
});
Blast.defineClass('Deck', Deck);
};

@@ -1,40 +0,223 @@

module.exports = function BlastError(Blast, Collection) {
const ERROR = Symbol('error');
/**
* Revive a JSON-died error
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.1.4
*
* @return {Object}
*/
Blast.defineStatic('Error', function unDry(obj) {
/**
* The custom Error class
*
* @author Jelle De Loecker <jelle@elevenways.be>
* @since 0.7.1
* @version 0.7.1
*
* @param {String} str
*/
var CustomError = Collection.Function.inherits(Error, 'Develry', function Error(message) {
this[ERROR] = createDummyError(1 + this.constructor.inheritance_level);
this.message = message;
});
var result = new Error(obj.message);
/**
* Prepend a string
*
* @author Jelle De Loecker <jelle@elevenways.be>
* @since 0.7.1
* @version 0.7.1
*
* @param {Number} level
* @param {String} message
*
* @return {Error}
*/
function createDummyError(level, message) {
result.stack = obj.stack;
let original_stack_limit = Error.stackTraceLimit;
return result;
});
// Increase the stack
Error.stackTraceLimit += level;
/**
* Return an object for json-drying this error
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.1.4
*
* @return {Object}
*/
Blast.definePrototype('Error', function toDry() {
return {
value: {
message: this.message,
stack: this.stack
},
path: 'Error'
};
});
let result = new Error(message || '');
result.trace_depth = level;
};
Error.stackTraceLimit = original_stack_limit;
return result;
}
/**
* Create a stack trace string
*
* @author Jelle De Loecker <jelle@elevenways.be>
* @since 0.7.1
* @version 0.7.1
*
* @param {Number} level
* @param {Error} error
*
* @return {String}
*/
CustomError.setStatic(function createStackTrace(level, error) {
let original_stack_limit = Error.stackTraceLimit,
header,
frames,
stack;
if (level == null) {
level = 1;
}
if (!error) {
error = createDummyError(level);
}
stack = error.stack;
if (Blast.userAgent && Blast.userAgent.family == 'firefox') {
header = '';
frames = stack.split('\n');
frames = frames.slice(level).join('\n');
} else {
let index = stack.indexOf(' at');
header = stack.slice(0, index - 1);
frames = stack.slice(index).split('\n');
frames = frames.slice(level).join('\n');
}
stack = frames;
return stack;
});
/**
* Set the correct inheritance level
*
* @author Jelle De Loecker <jelle@elevenways.be>
* @since 0.7.1
* @version 0.7.1
*
* @param {Number} level
*/
CustomError.setStaticProperty(function inheritance_level() {
let current = this,
result = 0;
while (current.super) {
result += 1;
current = current.super;
}
return result;
});
/**
* Get the stack property
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*
* @type {String}
*/
CustomError.enforceProperty(function stack(new_value) {
if (new_value === undefined && this.capture_stack !== false) {
let skip_levels = this[ERROR].trace_depth || 1 + this.constructor.inheritance_level;
if (this[Symbol.for('extra_skip_levels')]) {
skip_levels += this[Symbol.for('extra_skip_levels')];
}
new_value = CustomError.createStackTrace(skip_levels, this[ERROR]);
if (!Blast.userAgent || Blast.userAgent.family != 'firefox') {
new_value = this.toString() + '\n' + new_value;
}
}
// If the given value was null, turn it back into undefined
// This will re-get the stack on next get
if (new_value == null) {
return undefined;
}
return new_value;
});
/**
* Get the name of this error
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*
* @type {String}
*/
CustomError.setProperty(function name() {
return this.constructor.name;
});
/**
* Capture a new stacktrace
*
* @author Jelle De Loecker <jelle@elevenways.be>
* @since 0.7.1
* @version 0.7.1
*/
CustomError.setMethod(function captureStackTrace() {
this[ERROR] = createDummyError(1);
this.capture_stack = true;
this.stack = null;
});
/**
* Set extra skip level
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*
* @param {Number} amount
*/
CustomError.setMethod(function skipTraceLines(amount) {
this[Symbol.for('extra_skip_levels')] = amount || 0;
});
/**
* Revive a JSON-dried error
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.7.1
*
* @param {Object} obj
*
* @return {Error}
*/
Fn.setStatic(Error, function unDry(obj) {
return Object.assign(new this, obj);
});
/**
* Return an object for json-drying this error
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.7.1
*
* @return {Object}
*/
Blast.definePrototype('Error', function toDry() {
let properties = this.properties_to_serialize || ['message', 'stack'],
values = {},
i;
for (i = 0; i < properties.length; i++) {
values[properties[i]] = this[properties[i]];
}
return {
value : values
};
});

@@ -169,2 +169,44 @@ module.exports = function BlastDecorators(Blast, Collection) {

/**
* Call method multiple times if the argument is an array
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*
* @param {Object} config
*/
Blast.Decorators.loopOverArgument = function loopOverArgument(config) {
return function loopOverArgument(options) {
var fnc = options.descriptor.value;
options.descriptor.value = function loopOverArgument(arg) {
if (Array.isArray(arg)) {
let new_arguments = [],
result = [],
rest = [],
i;
for (i = 0; i < arguments.length; i++) {
rest.push(arguments[i]);
}
for (i = 0; i < arg.length; i++) {
new_arguments = [arg[i]].concat(rest);
result.push(fnc.apply(this, new_arguments));
}
return result;
}
return fnc.apply(this, arguments);
}
return options;
};
};
};

@@ -1150,3 +1150,3 @@ module.exports = function BlastFunctionFlow(Blast, Collection, Bound) {

* @since 0.1.9
* @version 0.7.0
* @version 0.7.1
*

@@ -1210,3 +1210,3 @@ * @param {Function} fnc Function to throttle

// set the last and prev timestamps to NOW
if (!context[last_exec_time] && !config.immediate) {
if (reset_on_call || (!context[last_exec_time] && !config.immediate)) {
context[last_exec_time] = now;

@@ -1213,0 +1213,0 @@ prev_exec_time = now;

@@ -6,3 +6,4 @@ module.exports = function BlastInheritance(Blast, Collection) {

waiting_children = new WeakMap(),
has_constituted = new WeakMap();
has_constituted = new WeakMap(),
proto_defs = [];

@@ -128,3 +129,3 @@ /**

* @since 0.2.1
* @version 0.7.0
* @version 0.7.1
*

@@ -143,4 +144,4 @@ * @param {String} namespace

// Try getting the namespace
if (!namespace) {
result = Blast.Classes;
if (!namespace || namespace == '@') {
return Blast.Classes;
} else {

@@ -188,2 +189,7 @@ result = Obj.path(Blast.Classes, namespace);

// Add an instanceof trap
Object.defineProperty(result, Symbol.hasInstance, {value: function hasInstance(instance) {
return !!result[name] && instance instanceof result[name];
}});
// Create the namespace object

@@ -399,3 +405,3 @@ Obj.setPath(Blast.Classes, namespace, result);

Blast.defineValue(newConstructor, 'namespace', namespace);
Blast.defineValue(newConstructor, 'namespace', namespace == '@' ? '' : namespace);
}

@@ -634,3 +640,3 @@

if (namespace) {
if (namespace && namespace != '@') {
// Ensure the namespace exists

@@ -754,2 +760,82 @@ getNamespace(namespace);

/**
* Define a static function method
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*
* @param {Function} fnc
*/
function defStat(fnc) {
return Blast.defineStatic('Function', fnc);
}
/**
* Basic unsafe method to get argument names
* (Unsafe because it does not check for default values or comments)
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*
* @param {Function} fnc
*
* @return {Array}
*/
function getArgNames(fnc) {
// Get the source code
let source = fnc + '';
// Only keep the text inside the argument parens
source = source.slice(source.indexOf('(') + 1, source.indexOf(')'));
// Strip all the whitespace
source = source.replace(/\s+/g, '');
return source.split(',');
}
/**
* Define a static function method and also add it to the prototype
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*
* @param {Function} fnc
*/
function defClassMethod(fnc, target) {
var protoMethod,
args = getArgNames(fnc).join(', ');
// Define on the Function class first
defStat(fnc);
if (!target) {
target = 'this';
}
eval('protoMethod = function ' + fnc.name + '(' + args + ') {return fnc(' + target + ', ' + args +');}');
proto_defs.push(protoMethod);
Blast.definePrototype('Function', protoMethod);
}
/**
* Define a static function method and also add it to the prototype
* This will use the prototype as the target
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*
* @param {Function} fnc
*/
function defClassMethodForProto(fnc) {
return defClassMethod(fnc, 'this.prototype');
}
/**
* Do things to the class constructor once it's ready,

@@ -765,3 +851,3 @@ * and inherit to children

*/
Blast.defineStatic('Function', function constitute(constructor, task) {
defClassMethod(function constitute(constructor, task) {

@@ -811,3 +897,3 @@ var tasks = constructor.constitutors;

*/
Blast.defineStatic('Function', function staticCompose(target, key, constructor, traits) {
defClassMethod(function staticCompose(target, key, constructor, traits) {

@@ -843,3 +929,3 @@ var data;

*/
Blast.defineStatic('Function', function compose(target, key, compositor, traits) {
defClassMethodForProto(function compose(target, key, compositor, traits) {

@@ -952,3 +1038,3 @@ var methodDefiner,

*/
Blast.defineStatic('Function', function setStatic(target, _key, _value, _inherit) {
defClassMethod(function setStatic(target, _key, _value, _inherit) {

@@ -1007,3 +1093,3 @@ var enumerable,

*/
Blast.defineStatic('Function', function setStaticProperty(target, _key, _getter, _setter, _inherit) {
defClassMethod(function setStaticProperty(target, _key, _getter, _setter, _inherit) {

@@ -1082,3 +1168,3 @@ var enumerable,

*/
Blast.defineStatic('Function', function setMethod(constructor, _key, _method) {
defClassMethod(function setMethod(constructor, _key, _method) {

@@ -1159,3 +1245,3 @@ var existing,

*/
Blast.defineStatic('Function', function decorateMethod(constructor, decorator, key, method) {
defClassMethod(function decorateMethod(constructor, decorator, key, method) {

@@ -1209,3 +1295,3 @@ var options

* @since 0.1.4
* @version 0.5.8
* @version 0.7.1
*

@@ -1217,3 +1303,3 @@ * @param {Function} constructor Constructor to modify prototype of

*/
Blast.defineStatic('Function', function setProperty(constructor, _key, _getter, _setter) {
defClassMethod(function setProperty(constructor, _key, _getter, _setter) {

@@ -1246,3 +1332,15 @@ var enumerable,

getter = _getter;
keys = Collection.Array.cast(_key);
if (typeof _key == 'object') {
if (Array.isArray(_key)) {
keys = _key;
} else {
for (keys in _key) {
setProperty(constructor, keys, _key[keys]);
}
return;
}
} else {
keys = Collection.Array.cast(_key);
}
}

@@ -1312,3 +1410,3 @@

*/
Blast.defineStatic('Function', function prepareProperty(target, _key, _getter, _enumerable) {
defClassMethodForProto(function prepareProperty(target, _key, _getter, _enumerable) {

@@ -1421,3 +1519,3 @@ var enumerable,

* @since 0.6.6
* @version 0.7.0
* @version 0.7.1
*

@@ -1428,3 +1526,3 @@ * @param {Function} target Target object or function

*/
Blast.defineStatic('Function', function enforceProperty(target, key, setter, enumerable) {
defClassMethod(function enforceProperty(target, key, setter, enumerable) {

@@ -1472,5 +1570,3 @@ var setting_symbol,

let val = this[symbol];
if (!this[setting_symbol] && val == null && typeof val == 'undefined') {
if (this[symbol] === undefined && !this[setting_symbol]) {
_setter.call(this);

@@ -1492,3 +1588,3 @@ }

*/
Blast.defineStatic('Function', function getChildren(constructor) {
defClassMethod(function getChildren(constructor) {

@@ -1531,107 +1627,2 @@ var result = [];

/**
* Set a static method/property
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.2.0
*
* @param {String} key Name to use (defaults to method name)
* @param {Function} value The value to set
* @param {Boolean} inherit Let children inherit this (true)
*/
var protoSetStatic = function setStatic(key, value, inherit) {
return Fn.setStatic(this, key, value, inherit);
};
/**
* Set a static getter property
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.1.4
*
* @param {String} key Name to use (defaults to method name)
* @param {Function} getter Function that returns a value OR value
* @param {Function} setter Function that sets the value
* @param {Boolean} inherit Let children inherit this (true)
*/
var protoSetStaticProperty = function setStaticProperty(key, getter, setter, inherit) {
return Fn.setStaticProperty(this, key, getter, setter, inherit);
};
/**
* Set a prototype method
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.3
* @version 0.1.3
*
* @param {String} key
* @param {Function} method
*/
var protoSetMethod = function setMethod(key, method) {
return Fn.setMethod(this, key, method);
};
/**
* Set a decorated prototype method
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.6.0
* @version 0.6.0
*
* @param {Function} decorator
* @param {String} key
* @param {Function} method
*/
var protoDecorateMethod = function decorateMethod(decorator, key, method) {
return Fn.decorateMethod(this, decorator, key, method);
};
/**
* Set a prototype property
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.1.4
*
* @param {String} key
* @param {Function} getter
* @param {Function} setter
*/
var protoSetProperty = function setProperty(key, getter, setter) {
return Fn.setProperty(this, key, getter, setter);
};
/**
* Prepare a property:
* the getter will supply the value on first get
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.1.4
*
* @param {String} key Name to use (defaults to method name)
* @param {Function} getter Function that returns a value
*/
var protoPrepareProperty = function prepareProperty(key, getter) {
return Fn.prepareProperty(this.prototype, key, getter);
};
/**
* Enforce a property:
* Like `prepareProperty`, but with a setter
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.6.6
* @version 0.6.6
*
* @param {String} key Name to use (defaults to method name)
* @param {Function} setter Function that returns a value
*/
var protoEnforceProperty = function enforceProperty(key, getter) {
return Fn.enforceProperty(this, key, getter);
};
/**
* Prepare a static property:

@@ -1652,60 +1643,2 @@ * the getter will supply the value on first get

/**
* Compose a class as a property
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.1.4
*
* @param {String} key Name to use
* @param {Function} compositor
* @param {Object} traits
*/
var protoCompose = function compose(key, compositor, traits) {
return Fn.compose(this.prototype, key, compositor, traits);
};
/**
* Compose a class as a static property
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.1.4
*
* @param {String} key Name to use
* @param {Function} compositor
* @param {Object} traits
*/
var protoStaticCompose = function staticCompose(key, compositor, traits) {
return Fn.staticCompose(this, key, compositor, traits);
};
/**
* Do things to the class constructor once it's ready,
* and inherit to children
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.1.4
*
* @param {Function} constructor
* @param {Function} task
*/
var protoConstitute = function constitute(task) {
return Fn.constitute(this, task);
};
/**
* Get all the children of a certain class
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.11
* @version 0.1.11
*
* @return {Array}
*/
var protoGetChildren = function getChildren() {
return Fn.getChildren(this);
};
/**
* Ensure a constructor has the required static methods

@@ -1722,14 +1655,10 @@ *

if (typeof newConstructor.setMethod !== 'function') {
let i;
for (i = 0; i < proto_defs.length; i++) {
Blast.defineValue(newConstructor, proto_defs[i]);
}
Blast.defineValue(newConstructor, protoPrepareStaticProperty);
Blast.defineValue(newConstructor, protoSetStaticProperty);
Blast.defineValue(newConstructor, protoPrepareProperty);
Blast.defineValue(newConstructor, protoEnforceProperty);
Blast.defineValue(newConstructor, protoDecorateMethod);
Blast.defineValue(newConstructor, protoStaticCompose);
Blast.defineValue(newConstructor, protoGetChildren);
Blast.defineValue(newConstructor, protoSetProperty);
Blast.defineValue(newConstructor, protoConstitute);
Blast.defineValue(newConstructor, protoSetStatic);
Blast.defineValue(newConstructor, protoSetMethod);
Blast.defineValue(newConstructor, protoCompose);

@@ -1743,15 +1672,4 @@ if (newConstructor.extend == null) {

Blast.definePrototype('Function', protoPrepareStaticProperty);
Blast.definePrototype('Function', protoSetStaticProperty);
Blast.definePrototype('Function', protoPrepareProperty);
Blast.definePrototype('Function', protoEnforceProperty);
Blast.definePrototype('Function', protoDecorateMethod);
Blast.definePrototype('Function', protoStaticCompose);
Blast.definePrototype('Function', protoGetChildren);
Blast.definePrototype('Function', protoSetProperty);
Blast.definePrototype('Function', protoConstitute);
Blast.definePrototype('Function', protoSetStatic);
Blast.definePrototype('Function', protoSetMethod);
Blast.definePrototype('Function', protoCompose);
var Fn = Blast.Collection.Function;
};

@@ -49,2 +49,3 @@ module.exports = function BlastFunction(Blast, Collection) {

'||' : 'or',
'|>' : 'pipeline',
'&&' : 'and',

@@ -736,2 +737,36 @@ '|' : 'bitwise_or',

});
/**
* Is the given variable a Class syntax function?
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*
* @param {Function} fnc
*
* @return {Boolean}
*/
Blast.defineStatic('Function', function isNativeClass(fnc) {
// Native classes will always be functions, duh
if (typeof fnc != 'function') {
return false;
}
let descriptor = Object.getOwnPropertyDescriptor(fnc, 'prototype');
// Native classes have a non-writable prototype property
// (meaning: can't be overwritten)
// If that's not the case, it definitely is not a class
if (!descriptor || descriptor.writable != false) {
return false;
}
// Unfortunately, at this point we can only make sure
// by checking the source string
let source = '' + fnc;
return source.indexOf('class ') === 0;
});
};

@@ -129,3 +129,3 @@ module.exports = function BlastFnQueue(Blast, Collection) {

* @since 0.1.8
* @version 0.3.10
* @version 0.7.1
*

@@ -139,2 +139,3 @@ * @param {Function} fnc The function to queue

var that = this,
called_done = false,
config,

@@ -148,2 +149,6 @@ done,

if (this.hasBeenSeen('empty')) {
this.unsee('empty');
}
if (!options || typeof options !== 'object') {

@@ -169,2 +174,9 @@ options = {};

done = function doneFueryFunction() {
if (called_done) {
return;
}
called_done = true;
that.running--;

@@ -244,3 +256,3 @@ that.endCount++;

* @since 0.1.8
* @version 0.3.10
* @version 0.7.1
*

@@ -276,2 +288,5 @@ * @param {Boolean} set_end Set `lastEnd` to current timestamp

if (!this._queue.length) {
if (!this.running) {
this.emitOnce('empty');
}
return;

@@ -278,0 +293,0 @@ }

@@ -22,7 +22,16 @@ module.exports = function BlastInformer(Blast, Collection) {

Informer.setProperty('_simpleListeners', null);
Informer.setProperty('_filterListeners', null);
Informer.setProperty('_listenTypes', null);
Informer.setProperty('_simpleSeen', null);
Informer.setProperty('_filterSeen', null);
/**
* Add several properties to the prototype
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.0
* @version 0.7.1
*/
Informer.setProperty({
_simpleListeners : null,
_filterListeners : null,
_listenTypes : null,
_simpleSeen : null,
_filterSeen : null
});

@@ -29,0 +38,0 @@ // Functions that only listen to the type (string)

@@ -335,4 +335,4 @@ module.exports = function BlastInitLoader(modifyPrototype) {

// The other version has a lower patch
if (ctx.__Protoblast.loaded_versions[Blast.version]) {
return ctx.__Protoblast.loaded_versions[Blast.version];
if (ctx.__Protoblast.loaded_versions[Blast.version_string]) {
return ctx.__Protoblast.loaded_versions[Blast.version_string];
} else {

@@ -358,3 +358,3 @@ Blast.Classes = Object.create(ctx.__Protoblast.Classes);

Blast.loaded_versions[Blast.version] = Blast;
Blast.loaded_versions[Blast.version_string] = Blast;
}

@@ -1065,3 +1065,3 @@

} else {
data += 'Blast, Collection, Bound, Obj';
data += 'Blast, Collection, Bound, Obj, Fn';
}

@@ -1443,3 +1443,3 @@

} else {
head += 'Blast, Collection, Bound, Obj';
head += 'Blast, Collection, Bound, Obj, Fn';
}

@@ -1616,3 +1616,3 @@

} else {
args = [Blast, Collection, Blast.Bound, Blast.Bound.Object];
args = [Blast, Collection, Blast.Bound, Blast.Bound.Object, Collection.Function];
}

@@ -1719,2 +1719,6 @@

Blast.require('request_browser');
} else {
Blast.require('stream_delayed', {client: false});
Blast.require('stream_combined', {client: false});
Blast.require('form_data', {client: false});
}

@@ -1721,0 +1725,0 @@

@@ -32,34 +32,36 @@ module.exports = function BlastIterator(Blast, Collection) {

/**
* The initial index is always 0
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.1.4
*
* @type {Number}
*/
Iterator.setProperty('_iterNextIndex', 0);
Iterator.setProperty({
/**
* The initial index is always 0
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.1.4
*
* @type {Number}
*/
_iterNextIndex: 0,
/**
* By default the *source* of the subject is expected to be an array
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.1.4
*
* @type {Boolean}
*/
Iterator.setProperty('_iterSubjectIsArray', true);
/**
* By default the *source* of the subject is expected to be an array
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.1.4
*
* @type {Boolean}
*/
_iterSubjectIsArray: true,
/**
* If no valid subject is given, this empty array is used
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.1.4
*
* @type {Array}
*/
Iterator.setProperty('_iterSubject', []);
/**
* If no valid subject is given, this empty array is used
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.1.4
* @version 0.1.4
*
* @type {Array}
*/
_iterSubject: []
});

@@ -66,0 +68,0 @@ /**

@@ -1,2 +0,2 @@

module.exports = function BlastNumber(Blast, Collection) {
module.exports = function BlastNumber(Blast, Collection, Bound) {

@@ -109,3 +109,3 @@ var binUnits,

if (Array.isArray(scale)) {
scale = Blast.Bound.Number.calculateNormalizeFactors(input, scale);
scale = Bound.Number.calculateNormalizeFactors(input, scale);
}

@@ -179,3 +179,3 @@

var str = this.toString(radix || 10);
return Blast.Bound.String.multiply('0', length - str.length) + str;
return Bound.String.multiply('0', length - str.length) + str;
});

@@ -182,0 +182,0 @@

@@ -36,128 +36,152 @@ module.exports = function BlastPledge(Blast, Collection) {

/**
* The initial state is 0 (pending)
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.4.0
* @version 0.4.0
*
* @type {Number}
*/
Pledge.setProperty('state', PENDING);
Pledge.setProperty({
/**
* The initial state is 0 (pending)
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.4.0
* @version 0.4.0
*
* @type {Number}
*/
state: PENDING,
/**
* When the pledge was created
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.0
* @version 0.7.0
*
* @type {Number}
*/
Pledge.setProperty('_created', 0);
/**
* When the pledge was created
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.0
* @version 0.7.0
*
* @type {Number}
*/
_created: 0,
/**
* Do not report progress by default, it's very expensive
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.0
* @version 0.7.0
*
* @type {Boolean}
*/
Pledge.setProperty('report_progress', false);
/**
* Do not report progress by default, it's very expensive
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.0
* @version 0.7.0
*
* @type {Boolean}
*/
report_progress: false,
/**
* The initial progress is 0
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.4.0
* @version 0.4.0
*
* @type {Number}
*/
Pledge.setProperty('progress', 0);
/**
* The initial progress is 0
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.4.0
* @version 0.4.0
*
* @type {Number}
*/
progress: 0,
/**
* Progress parts can be used instead of manually adding percentages
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.5.2
* @version 0.5.2
*
* @type {Number}
*/
Pledge.setProperty('progress_parts', 0);
/**
* Progress parts can be used instead of manually adding percentages
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.5.2
* @version 0.5.2
*
* @type {Number}
*/
progress_parts: 0,
/**
* The finished number of progress parts
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.5.2
* @version 0.5.2
*
* @type {Number}
*/
Pledge.setProperty('progress_parts_finished', 0);
/**
* The finished number of progress parts
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.5.2
* @version 0.5.2
*
* @type {Number}
*/
progress_parts_finished: 0,
/**
* The pledge count
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.4.0
* @version 0.4.0
*
* @type {Number}
*/
Pledge.setProperty('sub_pledges', 0);
/**
* The pledge count
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.4.0
* @version 0.4.0
*
* @type {Number}
*/
sub_pledges: 0,
/**
* An array with pledges waiting for this pledge's fulfillment go here
* The initial _on_fulfilled property is null
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.4.0
* @version 0.4.0
*/
Pledge.setProperty('_on_fulfilled', null);
/**
* An array with pledges waiting for this pledge's fulfillment go here
* The initial _on_fulfilled property is null
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.4.0
* @version 0.4.0
*/
_on_fulfilled: null,
/**
* An array with pledges waiting for this pledge's rejection go here
* The initial _on_rejected property is null
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.4.0
* @version 0.4.0
*/
Pledge.setProperty('_on_rejected', null);
/**
* An array with pledges waiting for this pledge's rejection go here
* The initial _on_rejected property is null
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.4.0
* @version 0.4.0
*/
_on_rejected: null,
/**
* The eventual resolved value
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.0
* @version 0.7.0
*/
Pledge.setProperty('_resolved_value', null);
/**
* The eventual resolved value
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.0
* @version 0.7.0
*/
_resolved_value: null,
/**
* When this pledge has ended
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.0
* @version 0.7.0
*/
Pledge.setProperty('_ended', null);
/**
* When this pledge has ended
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.0
* @version 0.7.0
*/
_ended: null,
/**
* Property that could be a function to cancel the pledge
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.0
* @version 0.7.0
*
* @type {Function}
*/
Pledge.setProperty('cancel', null);
/**
* Last update to this pledge
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*
* @type {Number}
*/
_updated: null,
/**
* Debug durations
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*
* @type {Object}
*/
_durations: null,
/**
* Property that could be a function to cancel the pledge
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.0
* @version 0.7.0
*
* @type {Function}
*/
cancel: null
});
/**

@@ -509,3 +533,3 @@ * Calculate the duration

* @since 0.5.2
* @version 0.5.2
* @version 0.7.1
*

@@ -524,2 +548,17 @@ * @param {Number} parts

// Get the current timestamp
let now = Date.now();
// Get the previous update timestamp
let last_update = this._updated || this._created || now;
// Set the new updated time
this._updated = now;
if (!this._durations) {
this._durations = {};
}
this._durations[this.progress_parts_finished] = now - last_update;
this.progress_parts_finished += parts;

@@ -656,3 +695,3 @@ this.calculateProgressParts();

* @since 0.4.0
* @version 0.6.4
* @version 0.7.1
*

@@ -670,3 +709,3 @@ * @param {Error} reason

Blast.nextTick(function rejectOnNextTick() {
Blast.setImmediate(function doRejection() {
result = that._doReject(reason, false);

@@ -735,3 +774,3 @@

* @since 0.4.0
* @version 0.5.6
* @version 0.7.1
*

@@ -743,3 +782,3 @@ * @return {Pledge}

var that = this,
then_pledge = new this.constructor();
then_pledge = new Pledge();

@@ -939,4 +978,47 @@ // Create the arrays only when listeners are added

/**
* The Timeout Pledge Class
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*
* @param {Function} executor
* @param {Number} timeout
* @param {String} message
*/
var Timeout = Collection.Function.inherits('Pledge', function TimeoutPledge(executor, timeout, message) {
const that = this;
if (typeof executor == 'number') {
message = timeout;
timeout = executor;
executor = null;
}
this.executor = executor;
setTimeout(function checkTimeout() {
if (that.state != PENDING) {
return;
}
if (!message) {
message = 'Timeout of ' + timeout + 'ms was reached';
}
let error = new Error(message);
that.reject(error);
}, timeout);
});
Blast.defineClass('Pledge', Pledge);
Blast.defineClass('LazyPledge', Lazy);
Pledge.Lazy = Lazy;
Pledge.Timeout = Timeout;
};

@@ -238,2 +238,5 @@ module.exports = function BlastRequestBrowser(Blast, Collection) {

xhr.timeout = this.timeout;
} else if (this.timeout != 0) {
// If no timeout is given, use a timeout of 60s
xhr.timeout = 60000;
}

@@ -240,0 +243,0 @@

@@ -23,3 +23,3 @@ module.exports = function BlastRequestServer(Blast, Collection) {

* @since 0.2.0
* @version 0.7.0
* @version 0.7.1
*/

@@ -32,2 +32,3 @@ Request.setMethod(function _make_request(options) {

finished,
is_form,
origin,

@@ -68,4 +69,8 @@ config,

if (typeof body == 'object') {
body = JSON.stringify(body);
this.setHeader('content-type', 'application/json');
if (body.constructor && body.constructor.name == 'FormData') {
is_form = true;
} else {
body = JSON.stringify(body);
this.setHeader('content-type', 'application/json');
}
} else {

@@ -75,3 +80,5 @@ body = String(body);

this.setHeader('content-length', Buffer.byteLength(body, 'utf8'));
if (!is_form) {
this.setHeader('content-length', Buffer.byteLength(body, 'utf8'));
}
} else {

@@ -81,3 +88,5 @@ body = undefined;

this.serialized_body = body;
if (!is_form) {
this.serialized_body = body;
}

@@ -175,7 +184,13 @@ // Create the request

if (body != null) {
req.write(body);
if (is_form) {
handleFormData(body, req);
} else {
req.write(body);
}
}
// Initiate the request
req.end();
if (!is_form) {
req.end();
}

@@ -201,2 +216,29 @@ function done(err, response) {

/**
* Handle server-side form data submission
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*
* @return {Buffer}
*/
function handleFormData(body, req, done) {
let boundary = body.boundary || body.getBoundary();
req.setHeader('content-type', 'multipart/form-data; boundary=' + boundary);
body.getLength(function gotLength(err, length) {
if (err) {
// Done is only called here on an error
return done(err);
}
req.setHeader('Content-Length', length);
body.pipe(req);
});
}
};

@@ -376,3 +376,3 @@ module.exports = function BlastRequest(Blast, Collection) {

* @since 0.2.0
* @version 0.6.4
* @version 0.7.1
*

@@ -389,2 +389,9 @@ * @param {Object} options

if (callback && typeof callback == 'object') {
let url = options;
options = callback;
callback = null;
options.url = url;
}
// Set the url

@@ -391,0 +398,0 @@ req.setOptions(options);

@@ -697,3 +697,3 @@ module.exports = function BlastURL(Blast, Collection, Bound, Obj) {

* @since 0.5.7
* @version 0.5.7
* @version 0.7.1
*

@@ -703,3 +703,11 @@ * @type {String}

RURL.setProperty(function pathname() {
return this._data.pathname || '';
let result = this._data.pathname || '';
if (!result && this.slashes) {
result = '/';
}
return result;
}, function setPathname(pathname) {

@@ -722,2 +730,5 @@

// Unset the segments
this._data.segments = null;
return this._data.pathname = pathname;

@@ -727,2 +738,42 @@ });

/**
* Extension getter
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*
* @type {String}
*/
RURL.setProperty(function extension() {
// Get the last segment
let last_segment = this.segment(-1);
return Bound.String.afterLast(last_segment, '.');
}, function setExtension(extension) {
// Get the last segment
let last_segment = this.segment(-1);
let name;
if (last_segment.indexOf('.') > -1) {
name = Bound.String.beforeLast(last_segment, '.');
} else {
name = last_segment;
}
if (extension[0] == '.') {
extension = extension.slice(1);
}
if (extension) {
name = name + '.' + extension;
}
this.segment(-1, name);
});
/**
* Path getter:

@@ -1422,3 +1473,3 @@ * Following the WHATWG standard, the path is the pathname + the search

* @since 0.5.7
* @version 0.5.7
* @version 0.7.1
*

@@ -1425,0 +1476,0 @@ * @param {String} address

@@ -40,35 +40,37 @@ module.exports = function BlastSeededRandom(Blast, Collection) {

/**
* The multiplier
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.3.7
* @version 0.3.7
*
* @type {Number}
*/
Seeded.setProperty('multiplier', 1664525);
Seeded.setProperty({
/**
* The multiplier
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.3.7
* @version 0.3.7
*
* @type {Number}
*/
multiplier: 1664525,
/**
* The increment
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.3.7
* @version 0.3.7
*
* @type {Number}
*/
Seeded.setProperty('increment', 1013904223);
/**
* The increment
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.3.7
* @version 0.3.7
*
* @type {Number}
*/
increment: 1013904223,
/**
* The modulo.
* The sequence will never be longer than this, and possibly shorter.
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.3.7
* @version 0.3.7
*
* @type {Number}
*/
Seeded.setProperty('modulo', 4294967296);
/**
* The modulo.
* The sequence will never be longer than this, and possibly shorter.
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.3.7
* @version 0.3.7
*
* @type {Number}
*/
modulo: 4294967296
});

@@ -75,0 +77,0 @@ /**

@@ -1356,3 +1356,3 @@ module.exports = function BlastString(Blast, Collection, Bound, Obj) {

e_len,
len = Blast.Bound.String.countCharacters(this);
len = Bound.String.countCharacters(this);

@@ -1369,6 +1369,6 @@ if (len <= length) {

e_len = Blast.Bound.String.countCharacters(ellipsis);
e_len = Bound.String.countCharacters(ellipsis);
// Get the simple cut
simpleCut = Blast.Bound.String.substrCharacters(this, 0, length - e_len);
simpleCut = Bound.String.substrCharacters(this, 0, length - e_len);

@@ -2547,3 +2547,3 @@ if (typeof word === 'undefined' || word) {

var str_len = Blast.Bound.String.countCharacters(this),
var str_len = Bound.String.countCharacters(this),
match,

@@ -2608,2 +2608,16 @@ end;

});
/**
* Split this string into an array of its individual characters,
* without breaking up astral symbols
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*
* @return {Array}
*/
Blast.definePrototype('String', function splitCharacters() {
return this.match(astral_rx) || [];
});
};
module.exports = function BlastSymbol(Blast, Collection, Bound, Obj) {
var HiddenSymbol,
NewSymbol,
postfix;
if (typeof Symbol != 'undefined') {

@@ -25,3 +21,4 @@

postfix = Date.now();
let postfix = Date.now(),
registry = new Map();

@@ -37,3 +34,3 @@ /**

*/
NewSymbol = Blast.defineClass('Symbol', function Symbol(description) {
const NewSymbol = Blast.defineClass('Symbol', function Symbol(description) {

@@ -92,2 +89,25 @@ var symbol;

/**
* Create/get a shared symbol
*
* @author Jelle De Loecker <jelle@develry.be>
* @since 0.7.1
* @version 0.7.1
*
* @param {String} key
*
* @return {Symbol}
*/
Blast.defineStatic(NewSymbol, 'for', function _for(key) {
let symbol = registry.get(key);
if (!symbol) {
symbol = new Symbol(key);
registry.set(key, symbol);
}
return symbol;
});
/**
* Unexposed constructor, used to foil `instanceof` calls

@@ -101,3 +121,3 @@ *

*/
HiddenSymbol = function Symbol(description) {
const HiddenSymbol = function Symbol(description) {
if (this instanceof HiddenSymbol) {

@@ -104,0 +124,0 @@ throw new TypeError('Symbol is not a constructor');

{
"name": "protoblast",
"description": "Native object expansion library",
"version": "0.7.0",
"author": "Jelle De Loecker <jelle@develry.be>",
"version": "0.7.1",
"author": "Jelle De Loecker <jelle@elevenways.be>",
"keywords": [

@@ -15,5 +15,5 @@ "prototype",

"dependencies": {
"json-dry" : "~1.0.10"
"json-dry" : "~1.0.12"
},
"repository": "skerit/protoblast",
"repository": "11ways/protoblast",
"homepage": "https://protoblast.develry.be/",

@@ -29,3 +29,3 @@ "license": "MIT",

"browserify" : "5.11.0",
"codecov" : "~3.0.0",
"codecov" : "~3.7.0",
"git-rev" : "0.2.1",

@@ -32,0 +32,0 @@ "istanbul" : "^0.4.5",

@@ -7,4 +7,4 @@ <h1 align="center">

<!-- CI - TravisCI -->
<a href="https://travis-ci.org/skerit/protoblast">
<img src="https://travis-ci.org/skerit/protoblast.svg?branch=master" alt="Mac/Linux Build Status" />
<a href="https://travis-ci.org/11ways/protoblast">
<img src="https://travis-ci.org/11ways/protoblast.svg?branch=master" alt="Mac/Linux Build Status" />
</a>

@@ -18,14 +18,14 @@

<!-- Coverage - Codecov -->
<a href="https://codecov.io/gh/skerit/protoblast">
<img src="https://img.shields.io/codecov/c/github/skerit/protoblast/master.svg" alt="Codecov Coverage report" />
<a href="https://codecov.io/gh/11ways/protoblast">
<img src="https://img.shields.io/codecov/c/github/11ways/protoblast/master.svg" alt="Codecov Coverage report" />
</a>
<!-- DM - Snyk -->
<a href="https://snyk.io/test/github/skerit/protoblast?targetFile=package.json">
<img src="https://snyk.io/test/github/skerit/protoblast/badge.svg?targetFile=package.json" alt="Known Vulnerabilities" />
<a href="https://snyk.io/test/github/11ways/protoblast?targetFile=package.json">
<img src="https://snyk.io/test/github/11ways/protoblast/badge.svg?targetFile=package.json" alt="Known Vulnerabilities" />
</a>
<!-- DM - David -->
<a href="https://david-dm.org/skerit/protoblast">
<img src="https://david-dm.org/skerit/protoblast/status.svg" alt="Dependency Status" />
<a href="https://david-dm.org/11ways/protoblast">
<img src="https://david-dm.org/11ways/protoblast/status.svg" alt="Dependency Status" />
</a>

@@ -41,4 +41,4 @@ </div>

<!-- License - MIT -->
<a href="https://github.com/skerit/protoblast#license">
<img src="https://img.shields.io/github/license/skerit/protoblast.svg" alt="Project license" />
<a href="https://github.com/11ways/protoblast#license">
<img src="https://img.shields.io/github/license/11ways/protoblast.svg" alt="Project license" />
</a>

@@ -52,3 +52,3 @@ </div>

<sub>
Coded with ❤️ by <a href="#authors">Jelle De Loecker</a>.
Coded with ❤️ by <a href="#authors">Eleven Ways</a>.
</sub>

@@ -103,1 +103,5 @@ </div>

```
## Authors
Protoblast is developed at [Eleven Ways](https://www.elevenways.be/), a team of [IAAP Certified Accessibility Specialists](https://www.accessibilityassociation.org/).
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