cspell-config-lib
Version:
78 lines • 3.64 kB
TypeScript
declare const commentCollectionNode: unique symbol;
export interface NodeComments {
comment?: Comment | undefined;
commentBefore?: Comment | undefined;
}
export interface CommentedBaseNode extends NodeComments {
[commentCollectionNode]?: CommentedCollectionNode | undefined;
}
export interface CommentedScalar<T> extends CommentedBaseNode {
readonly value: T;
set(value: T): void;
}
export type ScalarNumber = CommentedScalar<number>;
export type ScalarString = CommentedScalar<string>;
export type ScalarBoolean = CommentedScalar<boolean>;
export type ScalarUndefined = CommentedScalar<undefined>;
export type ScalarNull = CommentedScalar<null>;
export interface Comment {
comment: string;
block?: boolean | undefined;
}
export type CommentedNode<T> = T extends number | string | boolean | null | undefined ? CommentedScalar<T> : T extends [] ? CommentedArrayNode<T[number]> : T extends object ? CommentedRecordNode<T> : never;
export interface CommentedCollectionNode extends CommentedBaseNode {
/**
* Check if a node exists in the collection.
* @param n - node to check for.
* @returns true if the node is in the collection.
*/
has(n: CommentedBaseNode): boolean;
/**
* Remove a node from the collection.
* @param n - node to remove
* @returns true if the node was removed
*/
remove(n: CommentedBaseNode): boolean;
/**
* The number of items in the collection.
*/
readonly size: number;
}
type ChildNode<T> = CommentedNode<T>;
export interface CommentedArrayNode<T> extends CommentedCollectionNode, Iterable<CommentedNode<T>> {
readonly value: T[];
readonly items: ChildNode<T>[];
get(index: number): ChildNode<T> | undefined;
set(index: number, value: T | CommentedNode<T>): void;
add(value: T | CommentedNode<T>): void;
}
export interface CommentedRecordNode<T> extends CommentedCollectionNode, Iterable<[keyof T, CommentedNode<T[keyof T]>]> {
readonly value: T;
readonly items: [keyof T, ChildNode<T[keyof T]>][];
get<K extends keyof T>(key: K): ChildNode<T[K]> | undefined;
set<K extends keyof T>(key: K, value: T[K] | CommentedNode<T[K]>): void;
}
export declare function createCommentedScalar(value: number, comments?: NodeComments): ScalarNode<number>;
export declare function createCommentedScalar(value: string, comments?: NodeComments): ScalarNode<string>;
export declare function createCommentedScalar(value: boolean, comments?: NodeComments): ScalarNode<boolean>;
export declare function createCommentedScalar(value: null, comments?: NodeComments): ScalarNode<null>;
export declare function createCommentedScalar(value: undefined, comments?: NodeComments): ScalarNode<undefined>;
export declare function createCommentedScalar<T>(value: T, comments?: NodeComments): ScalarNode<T>;
export declare function isCommentedBaseNode(node: unknown): node is CommentedBaseNode;
export declare function isCommentedScalar(node: unknown): node is CommentedScalar<unknown>;
export declare function isCommentedNode<T>(value: T | CommentedNode<T>): value is CommentedNode<T>;
declare class BaseNode {
parent?: CommentedCollectionNode | undefined;
comment?: Comment | undefined;
commentBefore?: Comment | undefined;
constructor(comments?: NodeComments);
}
declare class ScalarNode<T> extends BaseNode implements CommentedScalar<T> {
value: T;
constructor(value: T, comments?: NodeComments);
set(value: T): void;
toJSON(): T;
}
export declare function createCommentedNode<T>(value: T, comments?: NodeComments): CommentedNode<T>;
export {};
//# sourceMappingURL=Commented.d.ts.map