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