|  | @@ -156,7 +156,7 @@ module.exports = {
 | 
	
		
			
				|  |  |  						// Cache to disk
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  						if(options.cache) {
 | 
	
		
			
				|  |  | -							let cacheData = BSON.serialize(pageData, false, false, false);
 | 
	
		
			
				|  |  | +							let cacheData = BSON.serialize(_.pick(pageData, ['html', 'meta', 'tree', 'parent']), false, false, false);
 | 
	
		
			
				|  |  |  							return fs.writeFileAsync(cpath, cacheData).catch((err) => {
 | 
	
		
			
				|  |  |  								winston.error('Unable to write to cache! Performance may be affected.');
 | 
	
		
			
				|  |  |  								return true;
 | 
	
	
		
			
				|  | @@ -177,34 +177,6 @@ module.exports = {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	},
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	/**
 | 
	
		
			
				|  |  | -	 * Fetches a text version of a Markdown-formatted document
 | 
	
		
			
				|  |  | -	 *
 | 
	
		
			
				|  |  | -	 * @param      {String}  entryPath  The entry path
 | 
	
		
			
				|  |  | -	 * @return     {String}  Text-only version
 | 
	
		
			
				|  |  | -	 */
 | 
	
		
			
				|  |  | -	fetchIndexableVersion(entryPath) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		let self = this;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		return self.fetchOriginal(entryPath, {
 | 
	
		
			
				|  |  | -			parseMarkdown: false,
 | 
	
		
			
				|  |  | -			parseMeta: true,
 | 
	
		
			
				|  |  | -			parseTree: false,
 | 
	
		
			
				|  |  | -			includeMarkdown: true,
 | 
	
		
			
				|  |  | -			includeParentInfo: true,
 | 
	
		
			
				|  |  | -			cache: false
 | 
	
		
			
				|  |  | -		}).then((pageData) => {
 | 
	
		
			
				|  |  | -			return {
 | 
	
		
			
				|  |  | -				entryPath,
 | 
	
		
			
				|  |  | -				meta: pageData.meta,
 | 
	
		
			
				|  |  | -				parent: pageData.parent || {},
 | 
	
		
			
				|  |  | -				text: mark.removeMarkdown(pageData.markdown)
 | 
	
		
			
				|  |  | -			};
 | 
	
		
			
				|  |  | -		});
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	},
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  	/**
 | 
	
		
			
				|  |  |  	 * Parse raw url path and make it safe
 | 
	
		
			
				|  |  |  	 *
 | 
	
	
		
			
				|  | @@ -314,13 +286,48 @@ module.exports = {
 | 
	
		
			
				|  |  |  		return fs.statAsync(fpath).then((st) => {
 | 
	
		
			
				|  |  |  			if(st.isFile()) {
 | 
	
		
			
				|  |  |  				return self.makePersistent(entryPath, contents).then(() => {
 | 
	
		
			
				|  |  | -					return self.fetchOriginal(entryPath, {});
 | 
	
		
			
				|  |  | +					return self.updateCache(entryPath);
 | 
	
		
			
				|  |  |  				});
 | 
	
		
			
				|  |  |  			} else {
 | 
	
		
			
				|  |  |  				return Promise.reject(new Error('Entry does not exist!'));
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}).catch((err) => {
 | 
	
		
			
				|  |  | -			return Promise.reject(new Error('Entry does not exist!'));
 | 
	
		
			
				|  |  | +			winston.error(err);
 | 
	
		
			
				|  |  | +			return Promise.reject(new Error('Failed to save document.'));
 | 
	
		
			
				|  |  | +		});
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * Update local cache and search index
 | 
	
		
			
				|  |  | +	 *
 | 
	
		
			
				|  |  | +	 * @param      {String}   entryPath  The entry path
 | 
	
		
			
				|  |  | +	 * @return     {Promise}  Promise of the operation
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	updateCache(entryPath) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		let self = this;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		return self.fetchOriginal(entryPath, {
 | 
	
		
			
				|  |  | +			parseMarkdown: true,
 | 
	
		
			
				|  |  | +			parseMeta: true,
 | 
	
		
			
				|  |  | +			parseTree: true,
 | 
	
		
			
				|  |  | +			includeMarkdown: true,
 | 
	
		
			
				|  |  | +			includeParentInfo: true,
 | 
	
		
			
				|  |  | +			cache: true
 | 
	
		
			
				|  |  | +		}).then((pageData) => {
 | 
	
		
			
				|  |  | +			return {
 | 
	
		
			
				|  |  | +				entryPath,
 | 
	
		
			
				|  |  | +				meta: pageData.meta,
 | 
	
		
			
				|  |  | +				parent: pageData.parent || {},
 | 
	
		
			
				|  |  | +				text: mark.removeMarkdown(pageData.markdown)
 | 
	
		
			
				|  |  | +			};
 | 
	
		
			
				|  |  | +		}).then((content) => {
 | 
	
		
			
				|  |  | +			ws.emit('searchAdd', {
 | 
	
		
			
				|  |  | +				auth: WSInternalKey,
 | 
	
		
			
				|  |  | +				content
 | 
	
		
			
				|  |  | +			});
 | 
	
		
			
				|  |  | +			return true;
 | 
	
		
			
				|  |  |  		});
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	},
 | 
	
	
		
			
				|  | @@ -339,7 +346,7 @@ module.exports = {
 | 
	
		
			
				|  |  |  		return self.exists(entryPath).then((docExists) => {
 | 
	
		
			
				|  |  |  			if(!docExists) {
 | 
	
		
			
				|  |  |  				return self.makePersistent(entryPath, contents).then(() => {
 | 
	
		
			
				|  |  | -					return self.fetchOriginal(entryPath, {});
 | 
	
		
			
				|  |  | +					return self.updateCache(entryPath);
 | 
	
		
			
				|  |  |  				});
 | 
	
		
			
				|  |  |  			} else {
 | 
	
		
			
				|  |  |  				return Promise.reject(new Error('Entry already exists!'));
 |