UNPKG

1.3 kBJavaScriptView Raw
1'use strict'
2
3const cloneDeep = require('fclone')
4
5/**
6 * @description Creates a backup of keys values
7 *
8 * @method makeLocalsBackup
9 *
10 * @param {Object} keys Keys
11 * @param {Object} locals Locals
12 *
13 * @return {Object} backup Backup Locals
14 */
15function makeLocalsBackup (keys, locals) {
16 const backup = {}
17
18 for (let i = 0; i < keys.length; i++) {
19 const key = keys[i]
20 if (Object.prototype.hasOwnProperty.call(locals, key)) backup[key] = cloneDeep(locals[key])
21 }
22
23 return backup
24}
25
26/**
27 * @description Returns the original keys values
28 *
29 * @method revertBackupedLocals
30 *
31 * @param {Object} keys Keys
32 * @param {Object} locals Locals
33 * @param {Object} backup Backup
34 *
35 * @return {Object} locals Reverted Locals
36 */
37function revertBackupedLocals (keys, locals, backup) {
38 for (let i = 0; i < keys.length; i++) {
39 const key = keys[i]
40 // remove key from locals
41 delete locals[key]
42
43 // revert copied key value
44 if (Object.prototype.hasOwnProperty.call(backup, key)) locals[key] = backup[key]
45 }
46
47 return locals
48}
49
50/**
51 * @module backup
52 *
53 * @requires fclone
54 *
55 * @type {Object}
56 *
57 * @prop {Function} make Make Locals backup
58 * @prop {Function} revert Revert backuped Locals
59 */
60module.exports = { make: makeLocalsBackup, revert: revertBackupedLocals }