import { StringMap } from "./string-map"; import * as sm from "./string-map"; import * as propertySet from "./property-set"; import * as json from './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; } export interface BaseObjectInfo { readonly position: FilePosition; readonly primitiveProperties: StringMap; } export interface RootObjectInfo extends BaseObjectInfo { readonly isChild: false; readonly url: string; } export declare const createRootObjectInfo: (position: FilePosition, url: string, primitiveProperties: StringMap) => 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) => 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 & TrackedBase; export declare type InfoFunc = () => ObjectInfo; export declare const setInfoFunc: (value: T, infoFunc: InfoFunc) => Tracked; export declare const setInfo: (value: T, info: ObjectInfo) => Tracked; export declare const getInfoFunc: (value: json.JsonRef | undefined) => InfoFunc | undefined; export declare const getInfo: (value: json.JsonRef | undefined) => ObjectInfo | undefined; export declare const copyInfo: (source: json.JsonRef, dest: T) => T; export declare type Data = json.Json; export declare const copyDataInfo: (source: Data, dest: T) => T; export declare type JsonArrayOf = ReadonlyArray & object; export declare const arrayMap: (source: JsonArrayOf | undefined, f: (v: T, i: number) => R) => JsonArrayOf; /** * Transform an object. * * @param source * @param f */ export declare const stringMapMap: (source: StringMap | undefined, f: (v: T, k: string) => R) => StringMap; /** * Merge objects * * @param array */ export declare const stringMapMerge: (...array: readonly (StringMap | undefined)[]) => StringMap; export declare const propertySetMap: >(source: T, f: propertySet.PartialFactory) => 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: (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: (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 | undefined) => FilePosition | undefined; export declare const getAllDirectives: (object: json.JsonRef, path: Iterable | undefined) => StringMap; //# sourceMappingURL=source-map.d.ts.map