aboutsummaryrefslogtreecommitdiff
path: root/src/server/session/utilities/utilities.ts
diff options
context:
space:
mode:
authorSam Wilkins <samwilkins333@gmail.com>2020-01-10 06:35:30 -0500
committerSam Wilkins <samwilkins333@gmail.com>2020-01-10 06:35:30 -0500
commita1760ecbb780dc17a7675bd60fb50aa1103fa961 (patch)
tree8cdaae6f81ea00d27183d03f9373fde26ae3ec7d /src/server/session/utilities/utilities.ts
parentcf3e869023d3027ae42c828ba3670b77d838ac50 (diff)
added hierarchical structure to session
Diffstat (limited to 'src/server/session/utilities/utilities.ts')
-rw-r--r--src/server/session/utilities/utilities.ts31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/server/session/utilities/utilities.ts b/src/server/session/utilities/utilities.ts
new file mode 100644
index 000000000..ac8a6590a
--- /dev/null
+++ b/src/server/session/utilities/utilities.ts
@@ -0,0 +1,31 @@
+export namespace Utilities {
+
+ /**
+ * 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