mirror of
https://github.com/flynx/diff.js.git
synced 2025-10-29 11:00:12 +00:00
lots of fixes and tweaks...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
9e400a7b8c
commit
a4a525b84a
43
diff.js
43
diff.js
@ -297,20 +297,37 @@ var LogicTypePrototype = {
|
|||||||
|
|
||||||
__cmp__: function(obj, cmp, context){
|
__cmp__: function(obj, cmp, context){
|
||||||
return false },
|
return false },
|
||||||
|
//
|
||||||
|
// Deep compare this to obj (use Diff.cmp(..))...
|
||||||
|
// .cmp(obj)
|
||||||
|
// -> bool
|
||||||
|
//
|
||||||
|
// Deep compare this to obj in context (use Diff.cmp(..))...
|
||||||
|
// .cmp(obj, context)
|
||||||
|
// -> bool
|
||||||
|
//
|
||||||
|
// Compare this to obj using comparator cmp and an optional context context...
|
||||||
|
// .cmp(obj, cmp)
|
||||||
|
// .cmp(obj, cmp, context)
|
||||||
|
// -> bool
|
||||||
|
//
|
||||||
// XXX need to track loops...
|
// XXX need to track loops...
|
||||||
|
// XXX HACK???: this uses Diff.cmp(..) in simple cases...
|
||||||
cmp: function(obj, cmp, context){
|
cmp: function(obj, cmp, context){
|
||||||
// XXX HACK???
|
// XXX HACK???
|
||||||
if(arguments.length < 3){
|
if(arguments.length < 3 || !(cmp instanceof Function)){
|
||||||
return Diff.cmp(
|
return Diff.cmp(
|
||||||
cmp instanceof Function ? this : this.context(cmp),
|
cmp instanceof Function ? this : this.context(cmp),
|
||||||
obj)
|
obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
cmp = cmp || function(a, b){
|
cmp = cmp || function(a, b){
|
||||||
return a === b
|
return a === b
|
||||||
//|| a == b
|
//|| a == b
|
||||||
|| (a.__cmp__ && a.__cmp__(b, cmp, context))
|
|| (a.__cmp__ && a.__cmp__(b, cmp, context))
|
||||||
|| (b.__cmp__ && b.__cmp__(a, cmp, context)) }
|
|| (b.__cmp__ && b.__cmp__(a, cmp, context)) }
|
||||||
|
//*/
|
||||||
context = context || this.context().__context__
|
context = context || this.context().__context__
|
||||||
|
|
||||||
// cache...
|
// cache...
|
||||||
@ -365,6 +382,22 @@ module.ANY =
|
|||||||
function(){ return true })()
|
function(){ return true })()
|
||||||
|
|
||||||
|
|
||||||
|
// Null type pattern...
|
||||||
|
//
|
||||||
|
// NULL
|
||||||
|
// -> pattern
|
||||||
|
//
|
||||||
|
// This matches null and undefined.
|
||||||
|
//
|
||||||
|
// NOTE: this will not match NaN (XXX revise)
|
||||||
|
var NULL =
|
||||||
|
module.NULL =
|
||||||
|
makeCIPattern('NULL',
|
||||||
|
function(obj){
|
||||||
|
return obj === null
|
||||||
|
|| obj === undefined })()
|
||||||
|
|
||||||
|
|
||||||
// Bool pattern...
|
// Bool pattern...
|
||||||
//
|
//
|
||||||
// BOOL
|
// BOOL
|
||||||
@ -547,6 +580,7 @@ object.makeConstructor('AND', Object.assign(new LogicType(), {
|
|||||||
},
|
},
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// XXX BUG:
|
// XXX BUG:
|
||||||
// CONTEXT([ANY, ANY, ANY]).cmp([1, 2, 3])
|
// CONTEXT([ANY, ANY, ANY]).cmp([1, 2, 3])
|
||||||
@ -602,6 +636,7 @@ object.makeConstructor('LIKE', Object.assign(new VAR(), {
|
|||||||
obj) },
|
obj) },
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// TEST(func) == L iff func(L) is true.
|
// TEST(func) == L iff func(L) is true.
|
||||||
var TEST =
|
var TEST =
|
||||||
@ -614,6 +649,7 @@ object.makeConstructor('TEST', Object.assign(new VAR(), {
|
|||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
// IN(A) == L iff A in L
|
// IN(A) == L iff A in L
|
||||||
//
|
//
|
||||||
@ -1266,8 +1302,9 @@ module.Types = {
|
|||||||
// basic compare...
|
// basic compare...
|
||||||
// XXX do we need to differentiate things like: new Number(123) vs. 123???
|
// XXX do we need to differentiate things like: new Number(123) vs. 123???
|
||||||
var bcmp = function(a, b, cmp){
|
var bcmp = function(a, b, cmp){
|
||||||
|
// NOTE: we can't use a == b directly because of things like
|
||||||
|
// [2] == 2 -> true...
|
||||||
return a === b
|
return a === b
|
||||||
//|| a == b
|
|
||||||
// basic patters...
|
// basic patters...
|
||||||
|| a === that.ANY
|
|| a === that.ANY
|
||||||
|| b === that.ANY
|
|| b === that.ANY
|
||||||
@ -1677,7 +1714,7 @@ Types.set('Basic', {
|
|||||||
no_attributes: true,
|
no_attributes: true,
|
||||||
|
|
||||||
compatible: function(obj, options){
|
compatible: function(obj, options){
|
||||||
return typeof(obj) != 'object' },
|
return obj === null || typeof(obj) != 'object' },
|
||||||
handle: function(obj, diff, A, B, options){
|
handle: function(obj, diff, A, B, options){
|
||||||
;(!options.keep_none && A === NONE)
|
;(!options.keep_none && A === NONE)
|
||||||
|| (obj.A = A)
|
|| (obj.A = A)
|
||||||
|
|||||||
18
format.js
18
format.js
@ -13,7 +13,7 @@
|
|||||||
var diff = require('./diff')
|
var diff = require('./diff')
|
||||||
var {
|
var {
|
||||||
ANY,
|
ANY,
|
||||||
BOOL, NUMBER, STRING, ARRAY, FUNCTION,
|
NULL, BOOL, NUMBER, STRING, ARRAY, FUNCTION,
|
||||||
OR, AND, NOT,
|
OR, AND, NOT,
|
||||||
AT, OF, IN,
|
AT, OF, IN,
|
||||||
VAR, LIKE, TEST,
|
VAR, LIKE, TEST,
|
||||||
@ -144,14 +144,14 @@ module.DIFF_OBJECT = AND(
|
|||||||
|
|
||||||
// instance metadata...
|
// instance metadata...
|
||||||
AT('options', AND(
|
AT('options', AND(
|
||||||
AT('tree_diff', OR(BOOL, null)),
|
AT('tree_diff', OR(BOOL, NULL)),
|
||||||
AT('keep_none', OR(BOOL, null)),
|
AT('keep_none', OR(BOOL, NULL)),
|
||||||
AT('min_text_length', OR(NUMBER, null)),
|
AT('min_text_length', OR(NUMBER, NULL)),
|
||||||
AT('no_attributes', OR(BOOL, null)),
|
AT('no_attributes', OR(BOOL, NULL)),
|
||||||
AT('NONE', OR(ANY, null)),
|
AT('NONE', OR(ANY, NULL)),
|
||||||
AT('EMPTY', OR(ANY, null)),
|
AT('EMPTY', OR(ANY, NULL)),
|
||||||
AT('no_length', OR(BOOL, null)),
|
AT('no_length', OR(BOOL, NULL)),
|
||||||
AT('cmp', OR(FUNCTION, null)) )),
|
AT('cmp', OR(FUNCTION, NULL)) )),
|
||||||
AT('placeholders', AND(
|
AT('placeholders', AND(
|
||||||
// XXX would be nice to store these and to use them to test
|
// XXX would be nice to store these and to use them to test
|
||||||
// deeper stuff (i.e. VALUE)...
|
// deeper stuff (i.e. VALUE)...
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user