diff options
| author | yipstanley <stanley_yip@brown.edu> | 2020-02-29 14:18:43 -0500 | 
|---|---|---|
| committer | yipstanley <stanley_yip@brown.edu> | 2020-02-29 14:18:43 -0500 | 
| commit | 2f6e27c67d1790d4350eede3003f0b614460f4d1 (patch) | |
| tree | ef5e70925b8cdeb8229af849e33e6f3a4cceae7f /src/server/DashSession/Session/utilities/utilities.ts | |
| parent | f1fcbeea5fb103b7623e795e72aacd4dfacc6c70 (diff) | |
| parent | 640f14da28d97600fb32d09023fc932e3a4052c4 (diff) | |
Merge branch 'master' of https://github.com/browngraphicslab/Dash-Web into pen
Diffstat (limited to 'src/server/DashSession/Session/utilities/utilities.ts')
| -rw-r--r-- | src/server/DashSession/Session/utilities/utilities.ts | 37 | 
1 files changed, 37 insertions, 0 deletions
diff --git a/src/server/DashSession/Session/utilities/utilities.ts b/src/server/DashSession/Session/utilities/utilities.ts new file mode 100644 index 000000000..eb8de9d7e --- /dev/null +++ b/src/server/DashSession/Session/utilities/utilities.ts @@ -0,0 +1,37 @@ +import { v4 } from "uuid"; + +export namespace Utilities { + +    export function guid() { +        return v4(); +    } + +    /** +         * At any arbitrary layer of nesting within the configuration objects, any single value that +         * is not specified by the configuration is given the default counterpart. If, within an object, +         * one peer is given by configuration and two are not, the one is preserved while the two are given +         * the default value. +         * @returns the composition of all of the assigned objects, much like Object.assign(), but with more +         * granularity in the overwriting of nested objects +         */ +    export function preciseAssign(target: any, ...sources: any[]): any { +        for (const source of sources) { +            preciseAssignHelper(target, source); +        } +        return target; +    } + +    export function preciseAssignHelper(target: any, source: any) { +        Array.from(new Set([...Object.keys(target), ...Object.keys(source)])).map(property => { +            let targetValue: any, sourceValue: any; +            if (sourceValue = source[property]) { +                if (typeof sourceValue === "object" && typeof (targetValue = target[property]) === "object") { +                    preciseAssignHelper(targetValue, sourceValue); +                } else { +                    target[property] = sourceValue; +                } +            } +        }); +    } + +}
\ No newline at end of file  | 
