jeefo_core
Advanced tools
Comparing version 0.0.6 to 0.0.7
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. | ||
* File Name : index.js | ||
* Created at : 2017-04-29 | ||
* Updated at : 2017-05-03 | ||
* Updated at : 2017-05-07 | ||
* Author : jeefo | ||
@@ -53,3 +53,3 @@ * Purpose : | ||
var browser_source = `(function (jeefo, $window, $document) { "use strict";\n\n${ source }\n\n}(window.jeefo, window, document));`; | ||
var node_source = `${ header }\n"use strict";\n\nmodule.exports = function (jeefo) {\n\n${ source }\n\nreturn jeefo;\n\n};`; | ||
var node_source = `${ header }\n"use strict";\n\nmodule.exports = function (jeefo) {\n\n${ source }\n\nreturn jeefo\n\n};`; | ||
var output_source = `${ header }(function (jeefo) {\n\n${ source }\n\n}(jeefo));`; | ||
@@ -56,0 +56,0 @@ var node_min_source; |
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. | ||
* File Name : preprocessor.js | ||
* Created at : 2017-04-26 | ||
* Updated at : 2017-05-03 | ||
* Updated at : 2017-05-07 | ||
* Author : jeefo | ||
@@ -12,4 +12,6 @@ * Purpose : | ||
var jeefo = require("jeefo"); | ||
require("jeefo_javascript_beautifier")(jeefo); | ||
var jeefo = require("jeefo").create(); | ||
jeefo.use(require("jeefo_javascript_beautifier")); | ||
var pp = jeefo.module("jeefo.preprocessor", ["jeefo_javascript_beautifier"]); | ||
@@ -23,3 +25,6 @@ | ||
// Preprocessor {{{1 | ||
pp.namespace("javascript.Preprocessor", ["javascript.Beautifier"], function (JavascriptBeautifier) { | ||
pp.namespace("javascript.Preprocessor", [ | ||
"object.assign", | ||
"javascript.Beautifier", | ||
], function (assign, JavascriptBeautifier) { | ||
@@ -39,3 +44,3 @@ // Scope {{{2 | ||
p = Scope.prototype; | ||
p.assign = jeefo.assign; | ||
p.assign = assign; | ||
p.Constructor = Scope; | ||
@@ -53,15 +58,2 @@ | ||
}; | ||
p.is_replaceable = function () { | ||
/* Unoptimized code {{{3 | ||
if (this.remove_indices) { | ||
return false; | ||
} | ||
if (this.parent) { | ||
return this.parent.is_replaceable(); | ||
} | ||
return true; | ||
}}}3 */ | ||
return this.remove_indices ? false : this.parent ? this.parent.is_replaceable() : true; | ||
}; | ||
// }}}2 | ||
@@ -155,2 +147,3 @@ | ||
var i = 0; | ||
parent = parent; | ||
@@ -263,16 +256,28 @@ switch (token.type) { | ||
p.call_expression = function (expression, def, scope) { | ||
var i = 0, j = 0, args = [], statements = []; | ||
var args = new Array(expression["arguments"].length), | ||
i = args.length - 1, | ||
j = 0, | ||
statements = []; | ||
this.compiler.current_indent = ''; | ||
for (; i < expression["arguments"].length; ++i) { | ||
args.push(this.compiler.compile(expression["arguments"][i])); | ||
for (; i >= 0; --i) { | ||
switch (expression["arguments"][i].type) { | ||
case "Identifier" : | ||
if (scope.defs.hasOwnProperty(expression["arguments"][i].name)) { | ||
args[i] = scope.defs[expression["arguments"][i].name].compiled; | ||
} | ||
break; | ||
} | ||
if (! args[i]) { | ||
args[i] = this.compiler.compile(expression["arguments"][i]); | ||
} | ||
} | ||
for (i = 1; i < scope.level; ++i) { | ||
for (i = scope.level - 1; i >= 1; --i) { | ||
this.compiler.current_indent = this.compiler.current_indent + this.compiler.indentation; | ||
} | ||
for (i = 0; i < def.params.length; ++i) { | ||
for (j = 0; j < def.params[i].length; ++j) { | ||
for (i = def.params.length - 1; i >= 0; --i) { | ||
for (j = def.params[i].length - 1; j >= 0; --j) { | ||
def.params[i][j].compiled = args[i]; | ||
@@ -318,6 +323,8 @@ } | ||
// Expression {{{2 | ||
p.expression = function (expression, scope, t) { | ||
p.expression = function (expression, scope) { | ||
var i = 0; | ||
switch (expression.type) { | ||
case "Comment" : | ||
return; | ||
case "NumberLiteral" : | ||
@@ -328,3 +335,3 @@ case "StringLiteral" : | ||
case "Identifier" : | ||
if (scope.defs[expression.name] && scope.is_replaceable()) { | ||
if (scope.defs.hasOwnProperty(expression.name) && ! this.remove_indices) { | ||
this.register("replace", { | ||
@@ -342,29 +349,29 @@ start : expression.start.index, | ||
this.define(expression["arguments"], scope); | ||
} else { | ||
for (i = expression["arguments"].length - 1; i >= 0; --i) { | ||
this.expression(expression["arguments"][i], scope, expression); | ||
} | ||
this.expression(expression.callee, scope, expression); | ||
} else if (! this.remove_indices) { | ||
this.process_arguments(expression["arguments"], scope); | ||
this.expression(expression.callee, scope); | ||
} | ||
break; | ||
case "Identifier": | ||
if (scope.defs[expression.callee.name]) { | ||
if (scope.defs.hasOwnProperty(expression.callee.name)) { | ||
this.call_expression(expression, scope.defs[expression.callee.name], scope); | ||
} else { | ||
for (i = expression["arguments"].length - 1; i >= 0; --i) { | ||
this.expression(expression["arguments"][i], scope, expression); | ||
} | ||
this.expression(expression.callee, scope, expression); | ||
} else if (! this.remove_indices) { | ||
this.process_arguments(expression["arguments"], scope); | ||
this.expression(expression.callee, scope); | ||
} | ||
break; | ||
case "FunctionExpression": | ||
this.process_arguments(expression["arguments"], scope); | ||
this.expression(expression.callee, scope); | ||
break; | ||
} | ||
break; | ||
case "AssignmentExpression": | ||
this.expression(expression.left, scope, expression); | ||
this.expression(expression.right, scope, expression); | ||
this.expression(expression.left, scope); | ||
this.expression(expression.right, scope); | ||
break; | ||
case "BinaryExpression": | ||
case "LogicalExpression": | ||
this.expression(expression.left, scope, expression); | ||
this.expression(expression.right, scope, expression); | ||
this.expression(expression.left, scope); | ||
this.expression(expression.right, scope); | ||
break; | ||
@@ -375,21 +382,31 @@ case "FunctionExpression" : | ||
case "MemberExpression" : | ||
this.expression(expression.object, scope, expression); | ||
this.expression(expression.property, scope, expression); | ||
this.expression(expression.object, scope); | ||
this.expression(expression.property, scope); | ||
break; | ||
case "NewExpression" : | ||
this.expression(expression.callee, scope, expression); | ||
this.expression(expression.callee, scope); | ||
for (i = expression["arguments"].length - 1; i >= 0; --i) { | ||
this.expression(expression["arguments"][i], scope, expression); | ||
this.expression(expression["arguments"][i], scope); | ||
} | ||
break; | ||
case "UnaryExpression" : | ||
this.expression(expression.argument, scope); | ||
break; | ||
case "ArrayLiteral" : | ||
break; | ||
case "Property" : | ||
this.expression(expression.value, scope); | ||
break; | ||
case "ObjectLiteral" : | ||
case "UnaryExpression" : | ||
for (i = expression.properties.length - 1; i >= 0; --i) { | ||
this.expression(expression.properties[i], scope); | ||
} | ||
break; | ||
case "ConditionalExpression" : | ||
this.expression(expression.test, scope); | ||
if (expression.consequent) { | ||
this.expression(expression.consequent, scope, expression); | ||
this.expression(expression.consequent, scope); | ||
} | ||
if (expression.alternate) { | ||
this.expression(expression.alternate, scope, expression); | ||
this.expression(expression.alternate, scope); | ||
} | ||
@@ -399,3 +416,3 @@ break; | ||
for (i = expression.expressions.length - 1; i >= 0; --i) { | ||
this.expression(expression.expressions[i], scope, expression); | ||
this.expression(expression.expressions[i], scope); | ||
} | ||
@@ -407,7 +424,7 @@ break; | ||
case "TemplateLiteral" : | ||
if (! scope.is_replaceable()) { return; } | ||
if (this.remove_indices) { return; } | ||
for (i = expression.body.length - 1; i >= 0; --i) { | ||
if (expression.body[i].type === "TemplateLiteralExpression") { | ||
this.expression(expression.body[i].expression, scope, expression); | ||
this.expression(expression.body[i].expression, scope); | ||
} | ||
@@ -425,6 +442,13 @@ } | ||
default: | ||
console.log("UNIMPLEMENTED expression", expression.type, t); | ||
console.log("UNIMPLEMENTED expression", expression.type); | ||
} | ||
}; | ||
// Handler arguments {{{2 | ||
p.process_arguments = function (args, scope) { | ||
// jshint curly : false | ||
for (var i = args.length - 1; i >= 0; this.expression(args[i], scope), --i); | ||
// jshint curly : true | ||
}; | ||
// Variable declarations {{{2 | ||
@@ -452,2 +476,4 @@ p.variable_declaration = function (declarations, scope) { | ||
break; | ||
case "EmptyStatement" : | ||
break; | ||
default: | ||
@@ -469,14 +495,14 @@ console.log("UNIMPLEMENTED statement", statement.type); | ||
case "ignore:start": | ||
if (! scope.remove_indices) { | ||
scope.remove_indices = { | ||
if (! this.remove_indices) { | ||
this.remove_indices = { | ||
start : tokens[i].start.index, | ||
end : tokens[i].end.index, | ||
}; | ||
this.register("remove", scope.remove_indices); | ||
this.register("remove", this.remove_indices); | ||
} | ||
break SWITCH; | ||
case "ignore:end": | ||
if (scope.remove_indices) { | ||
scope.remove_indices.end = tokens[i].end.index; | ||
scope.remove_indices = null; | ||
if (this.remove_indices) { | ||
this.remove_indices.end = tokens[i].end.index; | ||
this.remove_indices = null; | ||
} else { | ||
@@ -490,11 +516,12 @@ console.warn("Unexpected ignore end."); | ||
case "ExpressionStatement" : | ||
this.expression(tokens[i].expression, scope, tokens[i]); | ||
this.expression(tokens[i].expression, scope); | ||
break; | ||
case "ThrowStatement" : | ||
case "ReturnStatement" : | ||
if (tokens[i].argument) { | ||
this.expression(tokens[i].argument, scope, tokens[i]); | ||
this.expression(tokens[i].argument, scope); | ||
} | ||
break; | ||
case "IfStatement" : | ||
this.expression(tokens[i].test, scope, tokens[i]); | ||
this.expression(tokens[i].test, scope); | ||
this.statement(tokens[i].statement, scope); | ||
@@ -511,9 +538,9 @@ if (tokens[i].alternate) { | ||
// TODO: implement var declare version | ||
this.expression(tokens[i].init, scope, tokens[i]); | ||
this.expression(tokens[i].init, scope); | ||
} | ||
if (tokens[i].test) { | ||
this.expression(tokens[i].test, scope, tokens[i]); | ||
this.expression(tokens[i].test, scope); | ||
} | ||
if (tokens[i].update) { | ||
this.expression(tokens[i].update, scope, tokens[i]); | ||
this.expression(tokens[i].update, scope); | ||
} | ||
@@ -534,3 +561,3 @@ this.statement(tokens[i].statement, scope); | ||
if (tokens[i].handler) { | ||
this.expression(tokens[i].handler.param, scope, tokens[i]); | ||
this.expression(tokens[i].handler.param, scope); | ||
this.statement(tokens[i].handler.body, scope); | ||
@@ -546,3 +573,3 @@ } | ||
if (tokens[i].label) { | ||
this.expression(tokens[i].label, scope, tokens[i]); | ||
this.expression(tokens[i].label, scope); | ||
} | ||
@@ -555,3 +582,9 @@ break; | ||
break; | ||
case "FunctionDeclaration" : | ||
this.process(tokens[i].body.body, scope.$new()); | ||
break; | ||
case "SwitchCase" : | ||
this.expression(tokens[i].test, scope); | ||
this.process(tokens[i].statements, scope.$new()); | ||
break; | ||
case "DefaultCase" : | ||
@@ -645,2 +678,9 @@ this.process(tokens[i].statements, scope.$new()); | ||
instance.define("IS_OBJECT" , function (x) { return x !== null && typeof x === "object"; } , true); | ||
instance.define("ARRAY_EXISTS" , function (arr, x) { return arr.indexOf(x) >= 0; } , true); | ||
instance.define("ARRAY_NOT_EXISTS" , function (arr, x) { return arr.indexOf(x) === -1; } , true); | ||
instance.define("IS_JEEFO_PROMISE" , function (x) { return x && x.type === "JEEFO_PROMISE"; } , true); | ||
return instance; | ||
@@ -647,0 +687,0 @@ }); |
/** | ||
* jeefo_core : v0.0.6 | ||
* jeefo_core : v0.0.7 | ||
* Author : je3f0o, <je3f0o@gmail.com> | ||
@@ -13,3 +13,3 @@ * Homepage : https://github.com/je3f0o/jeefo_core | ||
* Created at : 2017-04-08 | ||
* Updated at : 2017-05-03 | ||
* Updated at : 2017-05-07 | ||
* Author : jeefo | ||
@@ -20,81 +20,78 @@ * Purpose : | ||
var core_module = jeefo.module("jeefo_core", []); | ||
var core_module = jeefo.module("jeefo_core", []), | ||
var _transformer = { | ||
CAMEL_CASE_REGEXP : /[A-Z]/g, | ||
snake_replacer : function (letter, pos) { | ||
CAMEL_CASE_REGEXP = /[A-Z]/g, | ||
dash_case = function (str) { | ||
return str.replace(CAMEL_CASE_REGEXP, function (letter, pos) { | ||
return (pos ? '-' : '') + letter.toLowerCase(); | ||
}); | ||
}, | ||
snake_case = function (str) { | ||
return str.replace(CAMEL_CASE_REGEXP, function (letter, pos) { | ||
return (pos ? '_' : '') + letter.toLowerCase(); | ||
}, | ||
dash_replacer : function (letter, pos) { | ||
return (pos ? '-' : '') + letter.toLowerCase(); | ||
}, | ||
snake_case : function (str) { | ||
return str.replace(this.CAMEL_CASE_REGEXP, this.snake_replacer); | ||
}, | ||
dash_case : function (str) { | ||
return str.replace(this.CAMEL_CASE_REGEXP, this.dash_replacer); | ||
} | ||
}; | ||
}); | ||
}, | ||
// TODO: move it into jeefo.js | ||
core_module.extend("curry", ["$injector"], function ($injector) { | ||
to_string = Object.prototype.toString, | ||
function_to_string = Function.toString, | ||
var make_injectable = function (factory) { | ||
return function (name, dependencies, fn, resolve_once) { | ||
if (typeof dependencies === "function") { | ||
resolve_once = fn; | ||
fn = dependencies; | ||
dependencies = []; | ||
} else if (typeof dependencies === "string") { | ||
dependencies = [dependencies]; | ||
} | ||
IS_DIGITS_SIGNED_INT = /^\-?\d+$/, | ||
IS_DIGITS_UNSIGNED_INT = /^\d+$/, | ||
IS_DIGITS_SIGNED_NUMBER = /^\-?\d+(?:.\d+)?$/, | ||
IS_DIGITS_UNSIGNED_NUMNER = /^\d+(?:.\d+)?$/, | ||
if (resolve_once === void 0) { | ||
resolve_once = true; | ||
} | ||
// Used to detect host constructors (Safari > 4; really typed array specific) | ||
HOST_CONSTRUCTOR_REGEX = /^\[object .+?Constructor\]$/, | ||
/* | ||
// Compile a regexp using a common native method as a template. | ||
// We chose `Object#toString` because there's a good chance it is not being mucked with. | ||
new RegExp('^' + | ||
// Coerce `Object#toString` to a string | ||
String(to_string). | ||
// Escape any special regexp characters | ||
replace(/[.*+?^${}()|[\]\/\\]/g, "\\$&"). | ||
// Replace mentions of `toString` with `.*?` to keep the template generic. | ||
// Replace thing like `for ...` to support environments like Rhino which add extra info | ||
// such as method arity. | ||
replace(/toString|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + '$' | ||
) | ||
*/ | ||
NATIVE_REGEX = /^function.*?\(\) \{ \[native code\] \}$/, | ||
return factory.call(this, name, { | ||
fn : fn, | ||
dependencies : dependencies, | ||
resolve_once : resolve_once, | ||
}); | ||
}; | ||
}; | ||
is_date = function (value) { | ||
return to_string.call(value) === "[object Date]"; | ||
}, | ||
var t = _transformer; | ||
var curry_maker = make_injectable(function (name, injectable) { | ||
$injector.register(t.snake_case(name + "Curry"), injectable); | ||
}); | ||
is_regex = function (value) { | ||
return to_string.call(value) === "[object RegExp]"; | ||
}, | ||
curry_maker("makeInjectable", function () { | ||
return make_injectable; | ||
}); | ||
is_digits = function (value, is_unsigned) { | ||
return (is_unsigned ? IS_DIGITS_UNSIGNED_NUMNER : IS_DIGITS_SIGNED_NUMBER).test(value); | ||
}, | ||
return curry_maker; | ||
}); | ||
is_digits_int = function (value, is_unsigned) { | ||
return (is_unsigned ? IS_DIGITS_UNSIGNED_INT : IS_DIGITS_SIGNED_INT).test(value); | ||
}, | ||
core_module.extend("run", ["$injector"], function ($injector) { | ||
var LocalArray = Array; | ||
return function (dependencies, fn) { | ||
if (typeof dependencies === "function") { | ||
return dependencies.call(this); | ||
} else if (typeof dependencies === "string") { | ||
return fn.call(this, $injector.resolve_sync(dependencies)); | ||
} | ||
is_native = function (value) { | ||
var type = typeof value; | ||
return type === "function" ? | ||
// Use `Function#toString` to bypass the value's own `toString` method | ||
// and avoid being faked out. | ||
NATIVE_REGEX.test(function_to_string.call(value)) : | ||
// Fallback to a host object check because some environments will represent | ||
// things like typed arrays as DOM methods which may not conform to the | ||
// normal native pattern. | ||
(value && type === "object" && HOST_CONSTRUCTOR_REGEX.test(to_string.call(value))) || false; | ||
}, | ||
for (var args = new LocalArray(dependencies.length), i = args.length - 1; i >= 0; --i) { | ||
args[i] = $injector.resolve_sync(dependencies[i]); | ||
} | ||
json_parse = function (value) { | ||
try { | ||
return JSON.parse(value); | ||
} catch (e) {} | ||
}; | ||
return fn.apply(this, args); | ||
}; | ||
}); | ||
core_module.extend("namespace", ["$injector", "make_injectable_curry"], function (injector, make_injectable_curry) { | ||
var Empty = function () {}; | ||
var object_maker = function () { | ||
return new Empty(); | ||
}; | ||
var namespace_maker = make_injectable_curry(function (full_name, injectable) { | ||
core_module.extend("namespace", ["$injector", "make_injectable"], function (injector, make_injectable) { | ||
return function (full_name) { | ||
var namespaces = full_name.split('.'), | ||
@@ -115,5 +112,3 @@ name = namespaces.pop(), | ||
injector.register(namespace, { | ||
fn : object_maker, | ||
dependencies : [], | ||
resolve_once : true, | ||
fn : function () { return {}; } | ||
}); | ||
@@ -127,3 +122,3 @@ | ||
injector.register(full_name, injectable); | ||
injector.register(full_name, make_injectable.apply(null, arguments)); | ||
@@ -134,40 +129,101 @@ if (namespace) { | ||
} | ||
}); | ||
var local_transformer = _transformer; | ||
namespace_maker("transform.dash_case", function () { | ||
return function (str) { | ||
return local_transformer.dash_case(str); | ||
}; | ||
}); | ||
namespace_maker("transform.snake_case", function () { | ||
return function (str) { | ||
return local_transformer.snake_case(str); | ||
}; | ||
}); | ||
return this; | ||
}; | ||
}). | ||
return namespace_maker; | ||
}); | ||
namespace("transform.dash_case", function () { | ||
return dash_case; | ||
}). | ||
core_module.extend("factory", [ | ||
namespace("transform.snake_case", function () { | ||
return snake_case; | ||
}). | ||
extend("curry", [ | ||
"$injector", | ||
"make_injectable", | ||
"transform.snake_case", | ||
"make_injectable_curry", | ||
], function (injector, snake_case, make_injectable_curry) { | ||
return make_injectable_curry(function (name, injectable) { | ||
injector.register(snake_case(name + "Factory"), injectable); | ||
}); | ||
}); | ||
], function ($injector, make_injectable, snake_case) { | ||
return function (name) { | ||
$injector.register(snake_case(name + "Curry"), make_injectable.apply(null, arguments)); | ||
return this; | ||
}; | ||
}). | ||
core_module.extend("service", [ | ||
extend("run", ["$injector", "$q", "Array"], function ($injector, $q, Arr) { | ||
var instance = this; | ||
return function (dependencies, fn) { | ||
if (typeof dependencies === "function") { | ||
dependencies.call(this); | ||
} else if (typeof dependencies === "string") { | ||
$injector.resolve(dependencies).then(function (value) { | ||
fn.call(instance, value); | ||
}); | ||
} else { | ||
var args = new Arr(dependencies.length); | ||
$q.for_each_async(dependencies, function (dependency, index, next) { | ||
$injector.resolve(dependency).then(function (value) { | ||
args[index] = value; | ||
next(); | ||
}); | ||
}).then(function () { | ||
fn.apply(instance, args); | ||
}); | ||
} | ||
return this; | ||
}; | ||
}). | ||
extend("factory", [ | ||
"$injector", | ||
"make_injectable", | ||
"transform.snake_case", | ||
"make_injectable_curry", | ||
], function (injector, snake_case, make_injectable_curry) { | ||
return make_injectable_curry(function (name, injectable) { | ||
], function ($injector, make_injectable, snake_case) { | ||
return function (name) { | ||
$injector.register(snake_case(name + "Factory"), make_injectable.apply(null, arguments)); | ||
return this; | ||
}; | ||
}). | ||
extend("service", [ | ||
"$injector", | ||
"make_injectable", | ||
"transform.snake_case", | ||
], function ($injector, make_injectable, snake_case) { | ||
return function (name) { | ||
var injectable = make_injectable.apply(null, arguments); | ||
injectable.is_constructor = true; | ||
injector.register(snake_case(name + "Service"), injectable); | ||
$injector.register(snake_case(name + "Service"), injectable); | ||
return this; | ||
}; | ||
}). | ||
run("$injector", function ($injector) { | ||
$injector.register("is_date", { | ||
fn : function () { return is_date; } | ||
}). | ||
register("is_regex", { | ||
fn : function () { return is_regex; } | ||
}). | ||
register("is_digit", { | ||
fn : function () { return is_digits; } | ||
}). | ||
register("is_digit_int", { | ||
fn : function () { return is_digits_int; } | ||
}). | ||
register("is_native", { | ||
fn : function () { return is_native; } | ||
}). | ||
register("json_parse", { | ||
fn : function () { return json_parse; } | ||
}); | ||
}); | ||
}(jeefo)); |
/** | ||
* jeefo_core : v0.0.6 | ||
* jeefo_core : v0.0.7 | ||
* Author : je3f0o, <je3f0o@gmail.com> | ||
@@ -8,2 +8,2 @@ * Homepage : https://github.com/je3f0o/jeefo_core | ||
**/ | ||
!function(e,n,r){"use strict";var t=e.module("jeefo_core",[]),c={CAMEL_CASE_REGEXP:/[A-Z]/g,snake_replacer:function(e,n){return(n?"_":"")+e.toLowerCase()},dash_replacer:function(e,n){return(n?"-":"")+e.toLowerCase()},snake_case:function(e){return e.replace(this.CAMEL_CASE_REGEXP,this.snake_replacer)},dash_case:function(e){return e.replace(this.CAMEL_CASE_REGEXP,this.dash_replacer)}};t.extend("curry",["$injector"],function(e){var n=function(e){return function(n,r,t,c){return"function"===typeof r?(c=t,t=r,r=[]):"string"===typeof r&&(r=[r]),void 0===c&&(c=!0),e.call(this,n,{fn:t,dependencies:r,resolve_once:c})}},r=c,t=n(function(n,t){e.register(r.snake_case(n+"Curry"),t)});return t("makeInjectable",function(){return n}),t}),t.extend("run",["$injector"],function(e){var n=Array;return function(r,t){if("function"===typeof r)return r.call(this);if("string"===typeof r)return t.call(this,e.resolve_sync(r));for(var c=new n(r.length),o=c.length-1;o>=0;--o)c[o]=e.resolve_sync(r[o]);return t.apply(this,c)}}),t.extend("namespace",["$injector","make_injectable_curry"],function(e,n){var r=function(){},t=function(){return new r},o=n(function(n,r){for(var c,o,s=n.split("."),i=s.pop(),a=0,u="";a<s.length;++a)c=s[a],u&&(o=e.resolve_sync(u)),u=u?u+"."+c:c,e.has(u)||(e.register(u,{fn:t,dependencies:[],resolve_once:!0}),o&&(o[c]=e.resolve_sync(u)));e.register(n,r),u&&(o=e.resolve_sync(u),o[i]=e.resolve_sync(n))}),s=c;return o("transform.dash_case",function(){return function(e){return s.dash_case(e)}}),o("transform.snake_case",function(){return function(e){return s.snake_case(e)}}),o}),t.extend("factory",["$injector","transform.snake_case","make_injectable_curry"],function(e,n,r){return r(function(r,t){e.register(n(r+"Factory"),t)})}),t.extend("service",["$injector","transform.snake_case","make_injectable_curry"],function(e,n,r){return r(function(r,t){t.is_constructor=!0,e.register(n(r+"Service"),t)})})}(window.jeefo,window,document); | ||
!function(n,e,t){"use strict";var r=n.module("jeefo_core",[]),i=function(n){return n.replace(/[A-Z]/g,function(n,e){return(e?"-":"")+n.toLowerCase()})},c=function(n){return n.replace(/[A-Z]/g,function(n,e){return(e?"_":"")+n.toLowerCase()})},o=Object.prototype.toString,u=Function.toString,s=/^\[object .+?Constructor\]$/,a=/^function.*?\(\) \{ \[native code\] \}$/,f=function(n){return"[object Date]"===o.call(n)},l=function(n){return"[object RegExp]"===o.call(n)},p=function(n,e){return(e?/^\d+(?:.\d+)?$/:/^\-?\d+(?:.\d+)?$/).test(n)},_=function(n,e){return(e?/^\d+$/:/^\-?\d+$/).test(n)},g=function(n){var e=typeof n;return"function"===e?a.test(u.call(n)):n&&"object"===e&&s.test(o.call(n))||!1},d=function(n){try{return JSON.parse(n)}catch(n){}};r.extend("namespace",["$injector","make_injectable"],function(n,e){return function(t){for(var r,i,c=t.split("."),o=c.pop(),u=0,s="";u<c.length;++u)r=c[u],s&&(i=n.resolve_sync(s)),s=s?s+"."+r:r,n.has(s)||(n.register(s,{fn:function(){return{}}}),i&&(i[r]=n.resolve_sync(s)));return n.register(t,e.apply(null,arguments)),s&&(i=n.resolve_sync(s),i[o]=n.resolve_sync(t)),this}}).namespace("transform.dash_case",function(){return i}).namespace("transform.snake_case",function(){return c}).extend("curry",["$injector","make_injectable","transform.snake_case"],function(n,e,t){return function(r){return n.register(t(r+"Curry"),e.apply(null,arguments)),this}}).extend("run",["$injector","$q","Array"],function(n,e,t){var r=this;return function(i,c){if("function"===typeof i)i.call(this);else if("string"===typeof i)n.resolve(i).then(function(n){c.call(r,n)});else{var o=new t(i.length);e.for_each_async(i,function(e,t,r){n.resolve(e).then(function(n){o[t]=n,r()})}).then(function(){c.apply(r,o)})}return this}}).extend("factory",["$injector","make_injectable","transform.snake_case"],function(n,e,t){return function(r){return n.register(t(r+"Factory"),e.apply(null,arguments)),this}}).extend("service",["$injector","make_injectable","transform.snake_case"],function(n,e,t){return function(r){var i=e.apply(null,arguments);return i.is_constructor=!0,n.register(t(r+"Service"),i),this}}).run("$injector",function(n){n.register("is_date",{fn:function(){return f}}).register("is_regex",{fn:function(){return l}}).register("is_digit",{fn:function(){return p}}).register("is_digit_int",{fn:function(){return _}}).register("is_native",{fn:function(){return g}}).register("json_parse",{fn:function(){return d}})})}(window.jeefo,window,document); |
/** | ||
* jeefo_core : v0.0.6 | ||
* jeefo_core : v0.0.7 | ||
* Author : je3f0o, <je3f0o@gmail.com> | ||
@@ -16,3 +16,3 @@ * Homepage : https://github.com/je3f0o/jeefo_core | ||
* Created at : 2017-04-08 | ||
* Updated at : 2017-05-03 | ||
* Updated at : 2017-05-07 | ||
* Author : jeefo | ||
@@ -23,81 +23,78 @@ * Purpose : | ||
var core_module = jeefo.module("jeefo_core", []); | ||
var core_module = jeefo.module("jeefo_core", []), | ||
var _transformer = { | ||
CAMEL_CASE_REGEXP : /[A-Z]/g, | ||
snake_replacer : function (letter, pos) { | ||
CAMEL_CASE_REGEXP = /[A-Z]/g, | ||
dash_case = function (str) { | ||
return str.replace(CAMEL_CASE_REGEXP, function (letter, pos) { | ||
return (pos ? '-' : '') + letter.toLowerCase(); | ||
}); | ||
}, | ||
snake_case = function (str) { | ||
return str.replace(CAMEL_CASE_REGEXP, function (letter, pos) { | ||
return (pos ? '_' : '') + letter.toLowerCase(); | ||
}, | ||
dash_replacer : function (letter, pos) { | ||
return (pos ? '-' : '') + letter.toLowerCase(); | ||
}, | ||
snake_case : function (str) { | ||
return str.replace(this.CAMEL_CASE_REGEXP, this.snake_replacer); | ||
}, | ||
dash_case : function (str) { | ||
return str.replace(this.CAMEL_CASE_REGEXP, this.dash_replacer); | ||
} | ||
}; | ||
}); | ||
}, | ||
// TODO: move it into jeefo.js | ||
core_module.extend("curry", ["$injector"], function ($injector) { | ||
to_string = Object.prototype.toString, | ||
function_to_string = Function.toString, | ||
var make_injectable = function (factory) { | ||
return function (name, dependencies, fn, resolve_once) { | ||
if (typeof dependencies === "function") { | ||
resolve_once = fn; | ||
fn = dependencies; | ||
dependencies = []; | ||
} else if (typeof dependencies === "string") { | ||
dependencies = [dependencies]; | ||
} | ||
IS_DIGITS_SIGNED_INT = /^\-?\d+$/, | ||
IS_DIGITS_UNSIGNED_INT = /^\d+$/, | ||
IS_DIGITS_SIGNED_NUMBER = /^\-?\d+(?:.\d+)?$/, | ||
IS_DIGITS_UNSIGNED_NUMNER = /^\d+(?:.\d+)?$/, | ||
if (resolve_once === void 0) { | ||
resolve_once = true; | ||
} | ||
// Used to detect host constructors (Safari > 4; really typed array specific) | ||
HOST_CONSTRUCTOR_REGEX = /^\[object .+?Constructor\]$/, | ||
/* | ||
// Compile a regexp using a common native method as a template. | ||
// We chose `Object#toString` because there's a good chance it is not being mucked with. | ||
new RegExp('^' + | ||
// Coerce `Object#toString` to a string | ||
String(to_string). | ||
// Escape any special regexp characters | ||
replace(/[.*+?^${}()|[\]\/\\]/g, "\\$&"). | ||
// Replace mentions of `toString` with `.*?` to keep the template generic. | ||
// Replace thing like `for ...` to support environments like Rhino which add extra info | ||
// such as method arity. | ||
replace(/toString|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + '$' | ||
) | ||
*/ | ||
NATIVE_REGEX = /^function.*?\(\) \{ \[native code\] \}$/, | ||
return factory.call(this, name, { | ||
fn : fn, | ||
dependencies : dependencies, | ||
resolve_once : resolve_once, | ||
}); | ||
}; | ||
}; | ||
is_date = function (value) { | ||
return to_string.call(value) === "[object Date]"; | ||
}, | ||
var t = _transformer; | ||
var curry_maker = make_injectable(function (name, injectable) { | ||
$injector.register(t.snake_case(name + "Curry"), injectable); | ||
}); | ||
is_regex = function (value) { | ||
return to_string.call(value) === "[object RegExp]"; | ||
}, | ||
curry_maker("makeInjectable", function () { | ||
return make_injectable; | ||
}); | ||
is_digits = function (value, is_unsigned) { | ||
return (is_unsigned ? IS_DIGITS_UNSIGNED_NUMNER : IS_DIGITS_SIGNED_NUMBER).test(value); | ||
}, | ||
return curry_maker; | ||
}); | ||
is_digits_int = function (value, is_unsigned) { | ||
return (is_unsigned ? IS_DIGITS_UNSIGNED_INT : IS_DIGITS_SIGNED_INT).test(value); | ||
}, | ||
core_module.extend("run", ["$injector"], function ($injector) { | ||
var LocalArray = Array; | ||
return function (dependencies, fn) { | ||
if (typeof dependencies === "function") { | ||
return dependencies.call(this); | ||
} else if (typeof dependencies === "string") { | ||
return fn.call(this, $injector.resolve_sync(dependencies)); | ||
} | ||
is_native = function (value) { | ||
var type = typeof value; | ||
return type === "function" ? | ||
// Use `Function#toString` to bypass the value's own `toString` method | ||
// and avoid being faked out. | ||
NATIVE_REGEX.test(function_to_string.call(value)) : | ||
// Fallback to a host object check because some environments will represent | ||
// things like typed arrays as DOM methods which may not conform to the | ||
// normal native pattern. | ||
(value && type === "object" && HOST_CONSTRUCTOR_REGEX.test(to_string.call(value))) || false; | ||
}, | ||
for (var args = new LocalArray(dependencies.length), i = args.length - 1; i >= 0; --i) { | ||
args[i] = $injector.resolve_sync(dependencies[i]); | ||
} | ||
json_parse = function (value) { | ||
try { | ||
return JSON.parse(value); | ||
} catch (e) {} | ||
}; | ||
return fn.apply(this, args); | ||
}; | ||
}); | ||
core_module.extend("namespace", ["$injector", "make_injectable_curry"], function (injector, make_injectable_curry) { | ||
var Empty = function () {}; | ||
var object_maker = function () { | ||
return new Empty(); | ||
}; | ||
var namespace_maker = make_injectable_curry(function (full_name, injectable) { | ||
core_module.extend("namespace", ["$injector", "make_injectable"], function (injector, make_injectable) { | ||
return function (full_name) { | ||
var namespaces = full_name.split('.'), | ||
@@ -118,5 +115,3 @@ name = namespaces.pop(), | ||
injector.register(namespace, { | ||
fn : object_maker, | ||
dependencies : [], | ||
resolve_once : true, | ||
fn : function () { return {}; } | ||
}); | ||
@@ -130,3 +125,3 @@ | ||
injector.register(full_name, injectable); | ||
injector.register(full_name, make_injectable.apply(null, arguments)); | ||
@@ -137,42 +132,103 @@ if (namespace) { | ||
} | ||
}); | ||
var local_transformer = _transformer; | ||
namespace_maker("transform.dash_case", function () { | ||
return function (str) { | ||
return local_transformer.dash_case(str); | ||
}; | ||
}); | ||
namespace_maker("transform.snake_case", function () { | ||
return function (str) { | ||
return local_transformer.snake_case(str); | ||
}; | ||
}); | ||
return this; | ||
}; | ||
}). | ||
return namespace_maker; | ||
}); | ||
namespace("transform.dash_case", function () { | ||
return dash_case; | ||
}). | ||
core_module.extend("factory", [ | ||
namespace("transform.snake_case", function () { | ||
return snake_case; | ||
}). | ||
extend("curry", [ | ||
"$injector", | ||
"make_injectable", | ||
"transform.snake_case", | ||
"make_injectable_curry", | ||
], function (injector, snake_case, make_injectable_curry) { | ||
return make_injectable_curry(function (name, injectable) { | ||
injector.register(snake_case(name + "Factory"), injectable); | ||
}); | ||
}); | ||
], function ($injector, make_injectable, snake_case) { | ||
return function (name) { | ||
$injector.register(snake_case(name + "Curry"), make_injectable.apply(null, arguments)); | ||
return this; | ||
}; | ||
}). | ||
core_module.extend("service", [ | ||
extend("run", ["$injector", "$q", "Array"], function ($injector, $q, Arr) { | ||
var instance = this; | ||
return function (dependencies, fn) { | ||
if (typeof dependencies === "function") { | ||
dependencies.call(this); | ||
} else if (typeof dependencies === "string") { | ||
$injector.resolve(dependencies).then(function (value) { | ||
fn.call(instance, value); | ||
}); | ||
} else { | ||
var args = new Arr(dependencies.length); | ||
$q.for_each_async(dependencies, function (dependency, index, next) { | ||
$injector.resolve(dependency).then(function (value) { | ||
args[index] = value; | ||
next(); | ||
}); | ||
}).then(function () { | ||
fn.apply(instance, args); | ||
}); | ||
} | ||
return this; | ||
}; | ||
}). | ||
extend("factory", [ | ||
"$injector", | ||
"make_injectable", | ||
"transform.snake_case", | ||
"make_injectable_curry", | ||
], function (injector, snake_case, make_injectable_curry) { | ||
return make_injectable_curry(function (name, injectable) { | ||
], function ($injector, make_injectable, snake_case) { | ||
return function (name) { | ||
$injector.register(snake_case(name + "Factory"), make_injectable.apply(null, arguments)); | ||
return this; | ||
}; | ||
}). | ||
extend("service", [ | ||
"$injector", | ||
"make_injectable", | ||
"transform.snake_case", | ||
], function ($injector, make_injectable, snake_case) { | ||
return function (name) { | ||
var injectable = make_injectable.apply(null, arguments); | ||
injectable.is_constructor = true; | ||
injector.register(snake_case(name + "Service"), injectable); | ||
$injector.register(snake_case(name + "Service"), injectable); | ||
return this; | ||
}; | ||
}). | ||
run("$injector", function ($injector) { | ||
$injector.register("is_date", { | ||
fn : function () { return is_date; } | ||
}). | ||
register("is_regex", { | ||
fn : function () { return is_regex; } | ||
}). | ||
register("is_digit", { | ||
fn : function () { return is_digits; } | ||
}). | ||
register("is_digit_int", { | ||
fn : function () { return is_digits_int; } | ||
}). | ||
register("is_native", { | ||
fn : function () { return is_native; } | ||
}). | ||
register("json_parse", { | ||
fn : function () { return json_parse; } | ||
}); | ||
}); | ||
return jeefo; | ||
return jeefo | ||
}; |
/** | ||
* jeefo_core : v0.0.6 | ||
* jeefo_core : v0.0.7 | ||
* Author : je3f0o, <je3f0o@gmail.com> | ||
@@ -8,2 +8,2 @@ * Homepage : https://github.com/je3f0o/jeefo_core | ||
**/ | ||
"use strict";module.exports=function(e){var n=e.module("jeefo_core",[]),r={CAMEL_CASE_REGEXP:/[A-Z]/g,snake_replacer:function(e,n){return(n?"_":"")+e.toLowerCase()},dash_replacer:function(e,n){return(n?"-":"")+e.toLowerCase()},snake_case:function(e){return e.replace(this.CAMEL_CASE_REGEXP,this.snake_replacer)},dash_case:function(e){return e.replace(this.CAMEL_CASE_REGEXP,this.dash_replacer)}};return n.extend("curry",["$injector"],function(e){var n=function(e){return function(n,r,t,c){return"function"===typeof r?(c=t,t=r,r=[]):"string"===typeof r&&(r=[r]),void 0===c&&(c=!0),e.call(this,n,{fn:t,dependencies:r,resolve_once:c})}},t=r,c=n(function(n,r){e.register(t.snake_case(n+"Curry"),r)});return c("makeInjectable",function(){return n}),c}),n.extend("run",["$injector"],function(e){var n=Array;return function(r,t){if("function"===typeof r)return r.call(this);if("string"===typeof r)return t.call(this,e.resolve_sync(r));for(var c=new n(r.length),s=c.length-1;s>=0;--s)c[s]=e.resolve_sync(r[s]);return t.apply(this,c)}}),n.extend("namespace",["$injector","make_injectable_curry"],function(e,n){var t=function(){},c=function(){return new t},s=n(function(n,r){for(var t,s,o=n.split("."),i=o.pop(),a=0,u="";a<o.length;++a)t=o[a],u&&(s=e.resolve_sync(u)),u=u?u+"."+t:t,e.has(u)||(e.register(u,{fn:c,dependencies:[],resolve_once:!0}),s&&(s[t]=e.resolve_sync(u)));e.register(n,r),u&&(s=e.resolve_sync(u),s[i]=e.resolve_sync(n))}),o=r;return s("transform.dash_case",function(){return function(e){return o.dash_case(e)}}),s("transform.snake_case",function(){return function(e){return o.snake_case(e)}}),s}),n.extend("factory",["$injector","transform.snake_case","make_injectable_curry"],function(e,n,r){return r(function(r,t){e.register(n(r+"Factory"),t)})}),n.extend("service",["$injector","transform.snake_case","make_injectable_curry"],function(e,n,r){return r(function(r,t){t.is_constructor=!0,e.register(n(r+"Service"),t)})}),e}; | ||
"use strict";module.exports=function(n){var e=n.module("jeefo_core",[]),t=function(n){return n.replace(/[A-Z]/g,function(n,e){return(e?"-":"")+n.toLowerCase()})},r=function(n){return n.replace(/[A-Z]/g,function(n,e){return(e?"_":"")+n.toLowerCase()})},c=Object.prototype.toString,i=Function.toString,o=/^\[object .+?Constructor\]$/,u=/^function.*?\(\) \{ \[native code\] \}$/,s=function(n){return"[object Date]"===c.call(n)},a=function(n){return"[object RegExp]"===c.call(n)},f=function(n,e){return(e?/^\d+(?:.\d+)?$/:/^\-?\d+(?:.\d+)?$/).test(n)},l=function(n,e){return(e?/^\d+$/:/^\-?\d+$/).test(n)},p=function(n){var e=typeof n;return"function"===e?u.test(i.call(n)):n&&"object"===e&&o.test(c.call(n))||!1},_=function(n){try{return JSON.parse(n)}catch(n){}};return e.extend("namespace",["$injector","make_injectable"],function(n,e){return function(t){for(var r,c,i=t.split("."),o=i.pop(),u=0,s="";u<i.length;++u)r=i[u],s&&(c=n.resolve_sync(s)),s=s?s+"."+r:r,n.has(s)||(n.register(s,{fn:function(){return{}}}),c&&(c[r]=n.resolve_sync(s)));return n.register(t,e.apply(null,arguments)),s&&(c=n.resolve_sync(s),c[o]=n.resolve_sync(t)),this}}).namespace("transform.dash_case",function(){return t}).namespace("transform.snake_case",function(){return r}).extend("curry",["$injector","make_injectable","transform.snake_case"],function(n,e,t){return function(r){return n.register(t(r+"Curry"),e.apply(null,arguments)),this}}).extend("run",["$injector","$q","Array"],function(n,e,t){var r=this;return function(c,i){if("function"===typeof c)c.call(this);else if("string"===typeof c)n.resolve(c).then(function(n){i.call(r,n)});else{var o=new t(c.length);e.for_each_async(c,function(e,t,r){n.resolve(e).then(function(n){o[t]=n,r()})}).then(function(){i.apply(r,o)})}return this}}).extend("factory",["$injector","make_injectable","transform.snake_case"],function(n,e,t){return function(r){return n.register(t(r+"Factory"),e.apply(null,arguments)),this}}).extend("service",["$injector","make_injectable","transform.snake_case"],function(n,e,t){return function(r){var c=e.apply(null,arguments);return c.is_constructor=!0,n.register(t(r+"Service"),c),this}}).run("$injector",function(n){n.register("is_date",{fn:function(){return s}}).register("is_regex",{fn:function(){return a}}).register("is_digit",{fn:function(){return f}}).register("is_digit_int",{fn:function(){return l}}).register("is_native",{fn:function(){return p}}).register("json_parse",{fn:function(){return _}})}),n}; |
{ | ||
"name": "jeefo_core", | ||
"version": "0.0.6", | ||
"version": "0.0.7", | ||
"homepage": "https://github.com/je3f0o/jeefo_core", | ||
@@ -30,3 +30,3 @@ "description": "jeefo core", | ||
"dependencies": { | ||
"jeefo": "0.0.8" | ||
"jeefo": "^0.0.9" | ||
}, | ||
@@ -33,0 +33,0 @@ "uglify_config": { |
274
src/core.js
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. | ||
* File Name : core.js | ||
* Created at : 2017-04-08 | ||
* Updated at : 2017-05-03 | ||
* Updated at : 2017-05-07 | ||
* Author : jeefo | ||
@@ -12,88 +12,92 @@ * Purpose : | ||
var jeefo = require("jeefo"); | ||
/* globals IS_FUNCTION, IS_STRING, IS_UNDEFINED */ | ||
/* globals -IS_FUNCTION, -IS_STRING */ | ||
/* exported */ | ||
var IS_FUNCTION = function (x) { | ||
return typeof x === "function"; | ||
}; | ||
var IS_STRING = function (x) { | ||
return typeof x === "string"; | ||
}; | ||
module.exports = function (jeefo) { | ||
//ignore:end | ||
var core_module = jeefo.module("jeefo_core", []); | ||
var core_module = jeefo.module("jeefo_core", []), | ||
var _transformer = { | ||
CAMEL_CASE_REGEXP : /[A-Z]/g, | ||
snake_replacer : function (letter, pos) { | ||
CAMEL_CASE_REGEXP = /[A-Z]/g, | ||
dash_case = function (str) { | ||
return str.replace(CAMEL_CASE_REGEXP, function (letter, pos) { | ||
return (pos ? '-' : '') + letter.toLowerCase(); | ||
}); | ||
}, | ||
snake_case = function (str) { | ||
return str.replace(CAMEL_CASE_REGEXP, function (letter, pos) { | ||
return (pos ? '_' : '') + letter.toLowerCase(); | ||
}, | ||
dash_replacer : function (letter, pos) { | ||
return (pos ? '-' : '') + letter.toLowerCase(); | ||
}, | ||
snake_case : function (str) { | ||
return str.replace(this.CAMEL_CASE_REGEXP, this.snake_replacer); | ||
}, | ||
dash_case : function (str) { | ||
return str.replace(this.CAMEL_CASE_REGEXP, this.dash_replacer); | ||
} | ||
}; | ||
}); | ||
}, | ||
// TODO: move it into jeefo.js | ||
core_module.extend("curry", ["$injector"], function ($injector) { | ||
to_string = Object.prototype.toString, | ||
function_to_string = Function.toString, | ||
var make_injectable = function (factory) { | ||
return function (name, dependencies, fn, resolve_once) { | ||
if (IS_FUNCTION(dependencies)) { | ||
resolve_once = fn; | ||
fn = dependencies; | ||
dependencies = []; | ||
} else if (IS_STRING(dependencies)) { | ||
dependencies = [dependencies]; | ||
} | ||
IS_DIGITS_SIGNED_INT = /^\-?\d+$/, | ||
IS_DIGITS_UNSIGNED_INT = /^\d+$/, | ||
IS_DIGITS_SIGNED_NUMBER = /^\-?\d+(?:.\d+)?$/, | ||
IS_DIGITS_UNSIGNED_NUMNER = /^\d+(?:.\d+)?$/, | ||
if (IS_UNDEFINED(resolve_once)) { | ||
resolve_once = true; | ||
} | ||
// Used to detect host constructors (Safari > 4; really typed array specific) | ||
HOST_CONSTRUCTOR_REGEX = /^\[object .+?Constructor\]$/, | ||
/* | ||
// Compile a regexp using a common native method as a template. | ||
// We chose `Object#toString` because there's a good chance it is not being mucked with. | ||
new RegExp('^' + | ||
// Coerce `Object#toString` to a string | ||
String(to_string). | ||
// Escape any special regexp characters | ||
replace(/[.*+?^${}()|[\]\/\\]/g, "\\$&"). | ||
// Replace mentions of `toString` with `.*?` to keep the template generic. | ||
// Replace thing like `for ...` to support environments like Rhino which add extra info | ||
// such as method arity. | ||
replace(/toString|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + '$' | ||
) | ||
*/ | ||
NATIVE_REGEX = /^function.*?\(\) \{ \[native code\] \}$/, | ||
return factory.call(this, name, { | ||
fn : fn, | ||
dependencies : dependencies, | ||
resolve_once : resolve_once, | ||
}); | ||
}; | ||
}; | ||
is_date = function (value) { | ||
return to_string.call(value) === "[object Date]"; | ||
}, | ||
var t = _transformer; | ||
var curry_maker = make_injectable(function (name, injectable) { | ||
$injector.register(t.snake_case(`${ name }Curry`), injectable); | ||
}); | ||
is_regex = function (value) { | ||
return to_string.call(value) === "[object RegExp]"; | ||
}, | ||
curry_maker("makeInjectable", function () { | ||
return make_injectable; | ||
}); | ||
is_digits = function (value, is_unsigned) { | ||
return (is_unsigned ? IS_DIGITS_UNSIGNED_NUMNER : IS_DIGITS_SIGNED_NUMBER).test(value); | ||
}, | ||
return curry_maker; | ||
}); | ||
is_digits_int = function (value, is_unsigned) { | ||
return (is_unsigned ? IS_DIGITS_UNSIGNED_INT : IS_DIGITS_SIGNED_INT).test(value); | ||
}, | ||
core_module.extend("run", ["$injector"], function ($injector) { | ||
var LocalArray = Array; | ||
return function (dependencies, fn) { | ||
if (IS_FUNCTION(dependencies)) { | ||
return dependencies.call(this); | ||
} else if (IS_STRING(dependencies)) { | ||
return fn.call(this, $injector.resolve_sync(dependencies)); | ||
} | ||
is_native = function (value) { | ||
var type = typeof value; | ||
return type === "function" ? | ||
// Use `Function#toString` to bypass the value's own `toString` method | ||
// and avoid being faked out. | ||
NATIVE_REGEX.test(function_to_string.call(value)) : | ||
// Fallback to a host object check because some environments will represent | ||
// things like typed arrays as DOM methods which may not conform to the | ||
// normal native pattern. | ||
(value && type === "object" && HOST_CONSTRUCTOR_REGEX.test(to_string.call(value))) || false; | ||
}, | ||
for (var args = new LocalArray(dependencies.length), i = args.length - 1; i >= 0; --i) { | ||
args[i] = $injector.resolve_sync(dependencies[i]); | ||
} | ||
json_parse = function (value) { | ||
try { | ||
return JSON.parse(value); | ||
} catch (e) {} | ||
}; | ||
return fn.apply(this, args); | ||
}; | ||
}); | ||
core_module.extend("namespace", ["$injector", "make_injectable_curry"], function (injector, make_injectable_curry) { | ||
var Empty = function () {}; | ||
var object_maker = function () { | ||
return new Empty(); | ||
}; | ||
var namespace_maker = make_injectable_curry(function (full_name, injectable) { | ||
core_module.extend("namespace", ["$injector", "make_injectable"], function (injector, make_injectable) { | ||
return function (full_name) { | ||
var namespaces = full_name.split('.'), | ||
@@ -114,5 +118,3 @@ name = namespaces.pop(), | ||
injector.register(namespace, { | ||
fn : object_maker, | ||
dependencies : [], | ||
resolve_once : true, | ||
fn : function () { return {}; } | ||
}); | ||
@@ -126,3 +128,3 @@ | ||
injector.register(full_name, injectable); | ||
injector.register(full_name, make_injectable.apply(null, arguments)); | ||
@@ -133,38 +135,108 @@ if (namespace) { | ||
} | ||
}); | ||
var local_transformer = _transformer; | ||
namespace_maker("transform.dash_case", function () { | ||
return function (str) { | ||
return local_transformer.dash_case(str); | ||
}; | ||
}); | ||
namespace_maker("transform.snake_case", function () { | ||
return function (str) { | ||
return local_transformer.snake_case(str); | ||
}; | ||
}); | ||
return this; | ||
}; | ||
}). | ||
return namespace_maker; | ||
}); | ||
namespace("transform.dash_case", function () { | ||
return dash_case; | ||
}). | ||
core_module.extend("factory", [ | ||
namespace("transform.snake_case", function () { | ||
return snake_case; | ||
}). | ||
extend("curry", [ | ||
"$injector", | ||
"make_injectable", | ||
"transform.snake_case", | ||
"make_injectable_curry", | ||
], function (injector, snake_case, make_injectable_curry) { | ||
return make_injectable_curry(function (name, injectable) { | ||
injector.register(snake_case(`${ name }Factory`), injectable); | ||
}); | ||
}); | ||
], function ($injector, make_injectable, snake_case) { | ||
return function (name) { | ||
$injector.register(snake_case(`${ name }Curry`), make_injectable.apply(null, arguments)); | ||
return this; | ||
}; | ||
}). | ||
core_module.extend("service", [ | ||
extend("run", ["$injector", "$q", "Array"], function ($injector, $q, Arr) { | ||
var instance = this; | ||
return function (dependencies, fn) { | ||
if (IS_FUNCTION(dependencies)) { | ||
dependencies.call(this); | ||
} else if (IS_STRING(dependencies)) { | ||
$injector.resolve(dependencies).then(function (value) { | ||
fn.call(instance, value); | ||
}); | ||
} else { | ||
var args = new Arr(dependencies.length); | ||
$q.for_each_async(dependencies, function (dependency, index, next) { | ||
$injector.resolve(dependency).then(function (value) { | ||
args[index] = value; | ||
next(); | ||
}); | ||
}).then(function () { | ||
fn.apply(instance, args); | ||
}); | ||
} | ||
return this; | ||
}; | ||
}). | ||
extend("factory", [ | ||
"$injector", | ||
"make_injectable", | ||
"transform.snake_case", | ||
"make_injectable_curry", | ||
], function (injector, snake_case, make_injectable_curry) { | ||
return make_injectable_curry(function (name, injectable) { | ||
], function ($injector, make_injectable, snake_case) { | ||
return function (name) { | ||
$injector.register(snake_case(`${ name }Factory`), make_injectable.apply(null, arguments)); | ||
return this; | ||
}; | ||
}). | ||
extend("service", [ | ||
"$injector", | ||
"make_injectable", | ||
"transform.snake_case", | ||
], function ($injector, make_injectable, snake_case) { | ||
return function (name) { | ||
var injectable = make_injectable.apply(null, arguments); | ||
injectable.is_constructor = true; | ||
injector.register(snake_case(`${ name }Service`), injectable); | ||
$injector.register(snake_case(`${ name }Service`), injectable); | ||
return this; | ||
}; | ||
}). | ||
run("$injector", function ($injector) { | ||
$injector.register("is_date", { | ||
fn : function () { return is_date; } | ||
}). | ||
register("is_regex", { | ||
fn : function () { return is_regex; } | ||
}). | ||
register("is_digit", { | ||
fn : function () { return is_digits; } | ||
}). | ||
register("is_digit_int", { | ||
fn : function () { return is_digits_int; } | ||
}). | ||
register("is_native", { | ||
fn : function () { return is_native; } | ||
}). | ||
register("json_parse", { | ||
fn : function () { return json_parse; } | ||
}); | ||
}); | ||
// ignore:start | ||
}; | ||
var jeefo = require("jeefo").create(); | ||
jeefo.use(module.exports); | ||
// ignore:end |
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
65821
1348
0
+ Addedjeefo@0.0.9(transitive)
- Removedjeefo@0.0.8(transitive)
Updatedjeefo@^0.0.9