diff --git a/dot-object/dot-object-tests.ts b/dot-object/dot-object-tests.ts
new file mode 100644
index 0000000000..ca7aa3f676
--- /dev/null
+++ b/dot-object/dot-object-tests.ts
@@ -0,0 +1,67 @@
+///
+
+var obj = {
+ 'first_name': 'John',
+ 'last_name': 'Doe'
+};
+
+dot.move('first_name', 'contact.firstname', obj);
+dot.move('last_name', 'contact.lastname', obj);
+
+var src = {
+ name: 'John',
+ stuff: {
+ phone: {
+ brand: 'iphone',
+ version: 6
+ }
+ }
+};
+
+var tgt = {name: 'Brandon'};
+
+dot.copy('stuff.phone', 'wanna.haves.phone', src, tgt, [(arg: any) => {
+ return arg;
+}]);
+
+dot.transfer('stuff.phone', 'wanna.haves.phone', src, tgt);
+
+var row = {
+ 'id': 2,
+ 'contact.name.first': 'John',
+ 'contact.name.last': 'Doe',
+ 'contact.email': 'example@gmail.com',
+ 'contact.info.about.me': 'classified',
+ 'devices[0]': 'mobile',
+ 'devices[1]': 'laptop',
+ 'some.other.things.0': 'this',
+ 'some.other.things.1': 'that'
+};
+
+dot.object(row, (arg: any) => {
+ return arg;
+});
+
+dot.str('this.is.my.string', 'value', tgt);
+
+var newObj = {
+ some: {
+ nested: {
+ value: 'Hi there!'
+ }
+ }
+};
+
+var val = dot.pick('some.nested.value', newObj);
+console.log(val);
+
+// Pick & Remove the value
+val = dot.pick('some.nested.value', newObj, true);
+
+// shorthand
+val = dot.remove('some.nested.value', newObj);
+
+// or use the alias `del`
+val = dot.del('some.nested.value', newObj);
+
+var dotWithArrow = new dot('=>');
\ No newline at end of file
diff --git a/dot-object/dot-object.d.ts b/dot-object/dot-object.d.ts
new file mode 100644
index 0000000000..953291c631
--- /dev/null
+++ b/dot-object/dot-object.d.ts
@@ -0,0 +1,169 @@
+// Type definitions for Dot-Object v1.4.1
+// Project: https://github.com/rhalff/dot-object
+// Definitions by: Niko Kovačič
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+
+declare namespace DotObject {
+ interface DotConstructor extends Dot {
+ new(separator: string): Dot;
+ }
+
+ interface ModifierFunctionWrapper {
+ (arg: any): any;
+ }
+
+ interface Dot {
+ /**
+ *
+ * Copy a property from one object to another object.
+ *
+ * If the source path does not exist (undefined)
+ * the property on the other object will not be set.
+ *
+ * @param {String} source
+ * @param {String} target
+ * @param {Object} obj1
+ * @param {Object} obj2
+ * @param {Function|Array} mods
+ * @param {Boolean} merge
+ */
+ copy(source: string, target: string, obj1: any, obj2: any, mods?: ModifierFunctionWrapper | Array, merge?: boolean): void;
+ /**
+ *
+ * Convert object to dotted-key/value pair
+ *
+ * Usage:
+ *
+ * var tgt = dot.dot(obj)
+ *
+ * or
+ *
+ * var tgt = {}
+ * dot.dot(obj, tgt)
+ *
+ * @param {Object} obj source object
+ * @param {Object} tgt target object
+ */
+ dot(obj: any, tgt: any): void
+ /**
+ *
+ * Remove value from an object using dot notation.
+ *
+ * @param {String} path
+ * @param {Object} obj
+ * @return {Mixed} The removed value
+ */
+ del(path: string, obj: any): any;
+ /**
+ *
+ * Move a property from one place to the other.
+ *
+ * If the source path does not exist (undefined)
+ * the target property will not be set.
+ *
+ * @param {String} source
+ * @param {String} target
+ * @param {Object} obj
+ * @param {Function|Array} mods
+ * @param {Boolean} merge
+ */
+ move(source: string, target: string, obj: any, mods?: ModifierFunctionWrapper | Array, merge?: boolean): void;
+ /**
+ *
+ * Converts an object with dotted-key/value pairs to it's expanded version
+ *
+ * Optionally transformed by a set of modifiers.
+ *
+ * Usage:
+ *
+ * var row = {
+ * 'nr': 200,
+ * 'doc.name': ' My Document '
+ * }
+ *
+ * var mods = {
+ * 'doc.name': [_s.trim, _s.underscored]
+ * }
+ *
+ * dot.object(row, mods)
+ *
+ * @param {Object} obj
+ * @param {Object} mods
+ */
+ object(obj: any, mods?: ModifierFunctionWrapper | Array): void;
+ /**
+ *
+ * Pick a value from an object using dot notation.
+ *
+ * Optionally remove the value
+ *
+ * @param {String} path
+ * @param {Object} obj
+ * @param {Boolean} remove
+ */
+ pick(path: string, obj: any, remove?: boolean): void;
+ /**
+ *
+ * Remove value from an object using dot notation.
+ *
+ * @param {String} path
+ * @param {Object} obj
+ * @return {Mixed} The removed value
+ */
+ remove(path: string, obj: any): any;
+ /**
+ * @param {String} path dotted path
+ * @param {String} v value to be set
+ * @param {Object} obj object to be modified
+ * @param {Function|Array} mods optional modifier
+ */
+ str(path: string, v: any, obj: Object, mods?: ModifierFunctionWrapper | Array): void;
+ /**
+ *
+ * Transfer a property from one object to another object.
+ *
+ * If the source path does not exist (undefined)
+ * the property on the other object will not be set.
+ *
+ * @param {String} source
+ * @param {String} target
+ * @param {Object} obj1
+ * @param {Object} obj2
+ * @param {Function|Array} mods
+ * @param {Boolean} merge
+ */
+ transfer(source: string, target: string, obj1: any, obj2: any, mods?: ModifierFunctionWrapper | Array, merge?: boolean): void;
+ /**
+ *
+ * Transform an object
+ *
+ * Usage:
+ *
+ * var obj = {
+ * "id": 1,
+ * "some": {
+ * "thing": "else"
+ * }
+ * }
+ *
+ * var transform = {
+ * "id": "nr",
+ * "some.thing": "name"
+ * }
+ *
+ * var tgt = dot.transform(transform, obj)
+ *
+ * @param {Object} recipe Transform recipe
+ * @param {Object} obj Object to be transformed
+ * @param {Array} mods modifiers for the target
+ */
+ transform(recipe: any, obj: any, mods?: ModifierFunctionWrapper | Array): void;
+ }
+}
+
+declare var dot: DotObject.DotConstructor;
+
+declare module 'dot-object' {
+ export = dot;
+}
\ No newline at end of file