1 |
|
2 |
|
3 | const 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 | */
|
15 | function 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 | */
|
37 | function 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 | */
|
60 | module.exports = { make: makeLocalsBackup, revert: revertBackupedLocals }
|