UNPKG

@ts-common/source-map

Version:
98 lines 4.59 kB
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