"use strict" ;
const Promise = require ( "bluebird" ) ;
const chalk = require ( "chalk" ) ;
const util = require ( "util" ) ;
function logCall ( methodName , args ) {
console . log ( ` ${ chalk . bold . yellow . bgBlack ( ` ${ methodName } (simulated): ` ) } ${ util . inspect ( args , { colors : true , depth : null } )} ` ) ;
}
// TODO: Make this do an actual database query and then rollback; that way the behaviour is the same as when really modifying the DB, in that earlier operations can affect what later operations see (eg. a createItem followed by a mergeItem involving that new item).
module . exports = function ( state ) {
const queries = require ( "../queries" ) ( state ) ;
return function createSimulationMutationAPI ( { tx , item , taskVersion } ) {
return {
createItem : function ( options ) {
logCall ( "createItem" , {
... options ,
update : ( options . update != null )
? options . update ( item . data )
: undefined
} ) ;
} ,
renameItem : function ( options ) {
logCall ( "renameItem" , {
... options
} ) ;
} ,
mergeItem : function ( options ) {
// FIXME: Visualize merges
logCall ( "createItem" , {
... options
} ) ;
} ,
deleteItem : function ( options ) {
logCall ( "deleteItem" , {
... options
} ) ;
} ,
createAlias : function ( options ) {
logCall ( "createAlias" , {
... options
} ) ;
} ,
deleteAlias : function ( from ) {
logCall ( "deleteAlias" , {
from : from
} ) ;
} ,
updateData : function ( options ) {
logCall ( "updateData" , {
... options ,
update : ( options . update != null )
? options . update ( item . data )
: undefined
} ) ;
} ,
updateMetadata : function ( options ) {
return Promise . try ( ( ) => {
return queries . getItem ( tx , id ) ;
} ) . then ( ( item ) => {
// FIXME: Visualize metadata update, actually merge with the correct thing
// MARKER: Expose taskResults as an object mapping instead of an array, somehow
logCall ( "updateMetadata" , {
... options ,
update : ( options . update != null )
? options . update ( item . data )
: undefined
} ) ;
} ) ;
} ,
expire : function ( options ) {
return queries . expire ( tx , options ) ;
}
} ;
} ;
} ;