| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | // Unique symbol cannot be declared in a namespace directly, so we declare it top-level// See: https://github.com/sindresorhus/map-obj/pull/38#discussion_r702396878declare const skipSymbol: unique symbol;declare namespace mapObject {	type Mapper<		SourceObjectType extends {[key: string]: any},		MappedObjectKeyType extends string,		MappedObjectValueType	> = (		sourceKey: keyof SourceObjectType,		sourceValue: SourceObjectType[keyof SourceObjectType],		source: SourceObjectType	) => [		targetKey: MappedObjectKeyType,		targetValue: MappedObjectValueType,		mapperOptions?: mapObject.MapperOptions	] | typeof mapObject.mapObjectSkip;	interface Options {		/**		Recurse nested objects and objects in arrays.		@default false		*/		deep?: boolean;		/**		Target object to map properties on to.		@default {}		*/		target?: {[key: string]: any};	}	interface DeepOptions extends Options {		deep: true;	}	interface TargetOptions<TargetObjectType extends {[key: string]: any}> extends Options {		target: TargetObjectType;	}	interface MapperOptions {		/**		Whether `targetValue` should be recursed.		Requires `deep: true`.		@default true		*/		readonly shouldRecurse?: boolean;	}	/**	Return this value from a `mapper` function to remove a key from an object.	@example	```	const mapObject = require('map-obj');	const object = {one: 1, two: 2}	const mapper = (key, value) => value === 1 ? [key, value] : mapObject.mapObjectSkip	const result = mapObject(object, mapper);	console.log(result);	//=> {one: 1}	```	*/	const mapObjectSkip: typeof skipSymbol}/**Map object keys and values into a new object.@param source - Source object to copy properties from.@param mapper - Mapping function.@example```import mapObject = require('map-obj');const newObject = mapObject({foo: 'bar'}, (key, value) => [value, key]);//=> {bar: 'foo'}const newObject = mapObject({FOO: true, bAr: {bAz: true}}, (key, value) => [key.toLowerCase(), value]);//=> {foo: true, bar: {bAz: true}}const newObject = mapObject({FOO: true, bAr: {bAz: true}}, (key, value) => [key.toLowerCase(), value], {deep: true});//=> {foo: true, bar: {baz: true}}const newObject = mapObject({one: 1, two: 2}, (key, value) => value === 1 ? [key, value] : mapObject.mapObjectSkip);//=> {one: 1}```*/declare function mapObject<	SourceObjectType extends object,	TargetObjectType extends {[key: string]: any},	MappedObjectKeyType extends string,	MappedObjectValueType>(	source: SourceObjectType,	mapper: mapObject.Mapper<		SourceObjectType,		MappedObjectKeyType,		MappedObjectValueType	>,	options: mapObject.DeepOptions & mapObject.TargetOptions<TargetObjectType>): TargetObjectType & {[key: string]: unknown};declare function mapObject<	SourceObjectType extends object,	MappedObjectKeyType extends string,	MappedObjectValueType>(	source: SourceObjectType,	mapper: mapObject.Mapper<		SourceObjectType,		MappedObjectKeyType,		MappedObjectValueType	>,	options: mapObject.DeepOptions): {[key: string]: unknown};declare function mapObject<	SourceObjectType extends {[key: string]: any},	TargetObjectType extends {[key: string]: any},	MappedObjectKeyType extends string,	MappedObjectValueType>(	source: SourceObjectType,	mapper: mapObject.Mapper<		SourceObjectType,		MappedObjectKeyType,		MappedObjectValueType	>,	options: mapObject.TargetOptions<TargetObjectType>): TargetObjectType & {[K in MappedObjectKeyType]: MappedObjectValueType};declare function mapObject<	SourceObjectType extends {[key: string]: any},	MappedObjectKeyType extends string,	MappedObjectValueType>(	source: SourceObjectType,	mapper: mapObject.Mapper<		SourceObjectType,		MappedObjectKeyType,		MappedObjectValueType	>,	options?: mapObject.Options): {[K in MappedObjectKeyType]: MappedObjectValueType};export = mapObject;
 |