synctos
Version:
The Syncmaker. A tool to build comprehensive sync functions for Couchbase Sync Gateway.
146 lines (143 loc) • 3.36 kB
JavaScript
function() {
function customTypeFilter(doc, oldDoc, docType) {
return doc._id === docType;
}
function isRequired(doc, oldDoc, value, oldValue) {
return oldDoc ? oldDoc.dynamicPropsRequired : doc.dynamicPropsRequired;
}
return {
staticDoc: {
typeFilter: customTypeFilter,
channels: { write: 'write' },
propertyValidators: {
stringProp: {
type: 'string',
required: true
},
integerProp: {
type: 'integer',
required: true
},
floatProp: {
type: 'float',
required: true
},
booleanProp: {
type: 'boolean',
required: true
},
datetimeProp: {
type: 'datetime',
required: true
},
dateProp: {
type: 'date',
required: true
},
enumProp: {
type: 'enum',
required: true,
predefinedValues: [ 0, 1, 2 ]
},
attachmentReferenceProp: {
type: 'attachmentReference',
required: true
},
arrayProp: {
type: 'array',
required: true,
arrayElementsValidator: {
type: 'string',
required: true
}
},
objectProp: {
type: 'object',
required: true,
propertyValidators: {
subProp: {
type: 'integer',
required: true
}
}
},
hashtableProp: {
type: 'hashtable',
required: true,
hashtableValuesValidator: {
type: 'float',
required: true
}
}
}
},
dynamicDoc: {
typeFilter: customTypeFilter,
channels: { write: 'write' },
propertyValidators: {
dynamicPropsRequired: {
type: 'boolean'
},
stringProp: {
type: 'string',
required: isRequired
},
integerProp: {
type: 'integer',
required: isRequired
},
floatProp: {
type: 'float',
required: isRequired
},
booleanProp: {
type: 'boolean',
required: isRequired
},
datetimeProp: {
type: 'datetime',
required: isRequired
},
dateProp: {
type: 'date',
required: isRequired
},
enumProp: {
type: 'enum',
required: isRequired,
predefinedValues: [ 0, 1, 2 ]
},
attachmentReferenceProp: {
type: 'attachmentReference',
required: isRequired
},
arrayProp: {
type: 'array',
required: isRequired,
arrayElementsValidator: {
type: 'string',
required: isRequired
}
},
objectProp: {
type: 'object',
required: isRequired,
propertyValidators: {
subProp: {
type: 'integer',
required: isRequired
}
}
},
hashtableProp: {
type: 'hashtable',
required: isRequired,
hashtableValuesValidator: {
type: 'float',
required: isRequired
}
}
}
}
};
}