fixed ff issue...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2018-09-03 02:47:52 +03:00
parent 2f066a8e8e
commit b42b94fa19

346
format.js
View File

@ -1,173 +1,173 @@
/********************************************************************** /**********************************************************************
* *
* This module describes the diff format and provides basic verification. * This module describes the diff format and provides basic verification.
* *
* XXX EXPERIMENTAL... * XXX EXPERIMENTAL...
* *
* *
**********************************************************************/ **********************************************************************/
((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define) ((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define)
(function(require){ var module={} // make module AMD/node compatible... (function(require){ var module={} // make module AMD/node compatible...
/*********************************************************************/ /*********************************************************************/
var diff = require('./diff') var diff = require('./diff')
var { var {
ANY, ANY,
BOOL, NUMBER, STRING, ARRAY, FUNCTION, BOOL, NUMBER, STRING, ARRAY, FUNCTION,
OR, AND, NOT, OR, AND, NOT,
AT, OF, IN, AT, OF, IN,
EMPTY, NONE, EMPTY, NONE,
} = diff } = diff
/*********************************************************************/ /*********************************************************************/
// //
// XXX need better mismatch checking -- ideally stating the exact spot // XXX need better mismatch checking -- ideally stating the exact spot
// where we did not match and the path of fails it created... // where we did not match and the path of fails it created...
// XXX idea: would be nice to be able to use patterns to extract values // XXX idea: would be nice to be able to use patterns to extract values
// from structures (parsing)... // from structures (parsing)...
// //
//--------------------------------------------------------------------- //---------------------------------------------------------------------
// Flat diff... // Flat diff...
var VALUE = var VALUE =
module.VALUE = OR( module.VALUE = OR(
// XXX use these taken from .placeholders... // XXX use these taken from .placeholders...
EMPTY, EMPTY,
NONE, NONE,
ANY) ANY)
var SIDE_VALUES = var SIDE_VALUES =
module.SIDE_VALUES = OR( module.SIDE_VALUES = OR(
// A and B... // A and B...
AND( AND(
AT('A', VALUE), AT('A', VALUE),
AT('B', VALUE)), AT('B', VALUE)),
// only A... // only A...
AT('A', VALUE), AT('A', VALUE),
// only B... // only B...
AT('B', VALUE)) AT('B', VALUE))
var CHANGE = var CHANGE =
module.CHANGE = AND( module.CHANGE = AND(
AT('path', ARRAY), AT('path', ARRAY),
// XXX optional... // XXX optional...
// ...see DIFF_OBJECT's options for description... // ...see DIFF_OBJECT's options for description...
AT('type', OR(STRING, undefined)), AT('type', OR(STRING, undefined)),
SIDE_VALUES) SIDE_VALUES)
var DIFF_FLAT = var DIFF_FLAT =
module.DIFF_FLAT = OR( module.DIFF_FLAT = OR(
ARRAY(CHANGE), ARRAY(CHANGE),
null) null)
//--------------------------------------------------------------------- //---------------------------------------------------------------------
// Tree diff... // Tree diff...
var BASIC_CHANGE = var BASIC_CHANGE =
module.BASIC_CHANGE = AND( module.BASIC_CHANGE = AND(
AT('type', 'Basic'), AT('type', 'Basic'),
SIDE_VALUES) SIDE_VALUES)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
var OBJECT_ITEM = var OBJECT_ITEM =
module.OBJECT_ITEM = OR( module.OBJECT_ITEM = OR(
[STRING, DIFF_TREE], [STRING, DIFF_TREE],
[STRING, STRING, DIFF_TREE]) [STRING, STRING, DIFF_TREE])
var OBJECT_CHANGE = var OBJECT_CHANGE =
module.OBJECT_CHANGE = AND( module.OBJECT_CHANGE = AND(
AT('type', 'Object'), AT('type', 'Object'),
AT('items', ARRAY(OBJECT_ITEM)), AT('items', ARRAY(OBJECT_ITEM)),
// XXX // XXX
AT('item_order', undefined)) AT('item_order', undefined))
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
var ARRAY_ITEM = var ARRAY_ITEM =
module.ARRAY_ITEM = OR( module.ARRAY_ITEM = OR(
[ANY, ANY, DIFF_TREE], [ANY, ANY, DIFF_TREE],
[[ANY, NUMBER], [ANY, NUMBER], DIFF_TREE]) [[ANY, NUMBER], [ANY, NUMBER], DIFF_TREE])
var ARRAY_ITEMS = var ARRAY_ITEMS =
module.ARRAY_ITEMS = AND( module.ARRAY_ITEMS = AND(
AT('length', OR( AT('length', OR(
[NUMBER, NUMBER], [NUMBER, NUMBER],
undefined)), undefined)),
AT('items', ARRAY( AT('items', ARRAY(
OR( OR(
ARRAY_ITEM, ARRAY_ITEM,
OBJECT_ITEM))), OBJECT_ITEM))),
// XXX // XXX
AT('item_order', undefined)) AT('item_order', undefined))
var ARRAY_CHANGE = var ARRAY_CHANGE =
module.ARRAY_CHANGE = AND( module.ARRAY_CHANGE = AND(
AT('type', 'Array'), AT('type', 'Array'),
ARRAY_ITEMS) ARRAY_ITEMS)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
var TEXT_CHANGE = var TEXT_CHANGE =
module.TEXT_CHANGE = AND( module.TEXT_CHANGE = AND(
AT('type', 'Text'), AT('type', 'Text'),
ARRAY_ITEMS) ARRAY_ITEMS)
// XXX it makes sense to make this a recursive pattern... // XXX it makes sense to make this a recursive pattern...
// ...need to check if we stop on a recursive pattern... // ...need to check if we stop on a recursive pattern...
// XXX TEST!!! // XXX TEST!!!
var DIFF_TREE = var DIFF_TREE =
module.DIFF_TREE = OR( module.DIFF_TREE = OR(
BASIC_CHANGE, BASIC_CHANGE,
OBJECT_CHANGE, OBJECT_CHANGE,
ARRAY_CHANGE, ARRAY_CHANGE,
TEXT_CHANGE, TEXT_CHANGE,
null) null)
//--------------------------------------------------------------------- //---------------------------------------------------------------------
// Diff... // Diff...
var DIFF_OBJECT = var DIFF_OBJECT =
module.DIFF_OBJECT = AND( module.DIFF_OBJECT = AND(
// format metadata... // format metadata...
AT('format', diff.FORMAT_NAME), AT('format', diff.FORMAT_NAME),
//AT('version', STRING(/\d+\.\d+\.\d+/)), //AT('version', STRING(/\d+\.\d+\.\d+/)),
AT('version', diff.FORMAT_VERSION), AT('version', diff.FORMAT_VERSION),
// 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)...
AT('NONE', ANY), AT('NONE', ANY),
AT('EMPTY', ANY))), AT('EMPTY', ANY))),
AT('timestamp', NUMBER), AT('timestamp', NUMBER),
// diff... // diff...
OR( OR(
AND( AND(
AT('structure', 'flat'), AT('structure', 'flat'),
AT('diff', DIFF_FLAT)), AT('diff', DIFF_FLAT)),
AND( AND(
AT('structure', 'tree'), AT('structure', 'tree'),
AT('diff', DIFF_TREE)))) AT('diff', DIFF_TREE))))
/********************************************************************** /**********************************************************************
* vim:set ts=4 sw=4 : */ return module }) * vim:set ts=4 sw=4 : */ return module })