E.W.O. Next / All files / src/engine/Commands/tasks saveDatabase.ts

94.74% Statements 18/19
100% Branches 6/6
75% Functions 3/4
100% Lines 18/18

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47          4x   4x       4x   4x 1x     4x   4x   4x   4x 3x 1x   2x       4x         4x     4x   2x   4x   2x  
/**
 * @module Engine.Commands.Tasks
 * Save a database file
 */
 
import * as fs from 'fs';
import { List, Map } from 'immutable';
import * as path from 'path';
 
declare var __basedir: string;
 
const saveDatabase = (databaseName: string, values: Map<string, any> | List<any>, format: string, serializer?: (source) => any): void => {
 
  if (!fs.existsSync(path.join(__basedir, process.env.SERVER_DATA))) {
    fs.mkdirSync(path.join(__basedir, process.env.SERVER_DATA));
  }
 
  const database = path.join(__basedir, process.env.SERVER_DATA, `${databaseName}.json`);
 
  console.log(`saving database ${database}`);
 
  let serializedValues = values;
 
  if (serializer) {
    if (format === 'array') {
      serializedValues = (values as List<any>).map(serializer);
    } else {
      serializedValues = (values as Map<string, any>).map(value => serializer(value));
    }
  }
 
  const data = {
    format,
    data: serializedValues.toJSON(),
  };
 
  fs.writeFileSync(database, JSON.stringify(data, null, 2));
};
 
export const saveDatabaseMap =
  <V>(databaseName: string, values: Map<string, V>, serializer?: (source) => any) =>
    saveDatabase(databaseName, values, 'keyvalue', serializer);
 
export const saveDatabaseList =
  <V>(databaseName: string, values: List<V>, serializer?: (source) => any) =>
    saveDatabase(databaseName, values, 'array', serializer);