@ts-common/source-map
Version:
98 lines • 4.59 kB
TypeScript
import { StringMap } from "@ts-common/string-map";
import * as sm from "@ts-common/string-map";
import * as propertySet from "@ts-common/property-set";
import * as json from '@ts-common/json';
export interface FilePosition {
readonly line: number;
readonly column: number;
/**
* This optional field can be used by parsers to set directives/pragmas.
*/
readonly directives?: StringMap<unknown>;
}
export interface BaseObjectInfo {
readonly position: FilePosition;
readonly primitiveProperties: StringMap<FilePosition>;
}
export interface RootObjectInfo extends BaseObjectInfo {
readonly isChild: false;
readonly url: string;
}
export declare const createRootObjectInfo: (position: FilePosition, url: string, primitiveProperties: StringMap<FilePosition>) => RootObjectInfo;
export interface ChildObjectInfo extends BaseObjectInfo {
readonly isChild: true;
readonly parent: TrackedBase;
readonly property: string | number;
}
export declare const createChildObjectInfo: (position: FilePosition, parent: TrackedBase, property: string | number, primitiveProperties: StringMap<FilePosition>) => ChildObjectInfo;
export declare type ObjectInfo = ChildObjectInfo | RootObjectInfo;
export declare const objectInfoSymbol: unique symbol;
export interface TrackedBaseInterface {
readonly [objectInfoSymbol]: InfoFunc;
}
export declare type TrackedBase = TrackedBaseInterface & json.JsonObject;
export declare type Tracked<T extends json.JsonRef> = T & TrackedBase;
export declare type InfoFunc = () => ObjectInfo;
export declare const setInfoFunc: <T extends json.JsonRef>(value: T, infoFunc: InfoFunc) => Tracked<T>;
export declare const setInfo: <T extends json.JsonRef>(value: T, info: ObjectInfo) => Tracked<T>;
export declare const getInfoFunc: (value: json.JsonRef | undefined) => InfoFunc | undefined;
export declare const getInfo: (value: json.JsonRef | undefined) => ObjectInfo | undefined;
export declare const copyInfo: <T extends json.JsonRef>(source: json.JsonRef, dest: T) => T;
export declare type Data = json.Json;
export declare const copyDataInfo: <T extends json.Json>(source: Data, dest: T) => T;
export declare type JsonArrayOf<T> = ReadonlyArray<T> & object;
export declare const arrayMap: <T extends json.Json, R extends json.Json>(source: JsonArrayOf<T> | undefined, f: (v: T, i: number) => R) => JsonArrayOf<R>;
/**
* Transform an object.
*
* @param source
* @param f
*/
export declare const stringMapMap: <T extends json.Json, R extends json.Json>(source: StringMap<T> | undefined, f: (v: T, k: string) => R) => StringMap<R>;
/**
* Merge objects
*
* @param array
*/
export declare const stringMapMerge: <T extends json.Json>(...array: readonly (StringMap<T> | undefined)[]) => StringMap<T>;
export declare const propertySetMap: <T extends sm.PartialStringMap<keyof T & string, json.Json>>(source: T, f: propertySet.PartialFactory<T>) => T;
export declare const getRootObjectInfo: (info: ObjectInfo) => RootObjectInfo;
export declare const getPath: (info: ObjectInfo) => readonly (string | number)[];
/**
* Returns a deep clone of `source` and set a source-map for each member.
*
* @param source an original object
* @param getInfoFunctOptional the function should return an object info of a provided member.
* If the function is not provided the algorithm extract information from the provided member.
*/
export declare const cloneDeep: <T extends json.Json>(source: T, getInfoFuncOptional?: ((member: Data | undefined) => InfoFunc | undefined) | undefined) => T;
/**
* Returns a deep clone of `source`. Each member of the returned object will contain the provided
* source-map information.
*
* @param source
* @param infoFunc
*/
export declare const cloneDeepWithInfo: <T extends json.Json>(source: T, infoFunc: InfoFunc | undefined) => T;
/**
* Get a file position
*
* @param value
*/
export declare const getFilePosition: (value: json.JsonRef) => FilePosition | undefined;
/**
* Get a position of a child.
*
* @param data
* @param index
*/
export declare const getChildFilePosition: (data: json.JsonRef | undefined, index: string | number | undefined) => FilePosition | undefined;
/**
* Get a file position of a descendant by path.
*
* @param object
* @param path
*/
export declare const getDescendantFilePosition: (object: json.JsonRef, path: Iterable<string | number> | undefined) => FilePosition | undefined;
export declare const getAllDirectives: (object: json.JsonRef, path: Iterable<string | number> | undefined) => StringMap<unknown>;
//# sourceMappingURL=index.d.ts.map