// https://github.com/prettier/prettier/blob/next/src/document/public.js export namespace builders { type DocCommand = | Align | BreakParent | Cursor | Fill | Group | IfBreak | Indent | IndentIfBreak | Label | Line | LineSuffix | LineSuffixBoundary | Trim; type Doc = string | Doc[] | DocCommand; interface Align { type: "align"; contents: Doc; n: number | string | { type: "root" }; } interface BreakParent { type: "break-parent"; } interface Cursor { type: "cursor"; placeholder: symbol; } interface Fill { type: "fill"; parts: Doc[]; } interface Group { type: "group"; id?: symbol; contents: Doc; break: boolean; expandedStates: Doc[]; } interface HardlineWithoutBreakParent extends Line { hard: true; } interface IfBreak { type: "if-break"; breakContents: Doc; flatContents: Doc; } interface Indent { type: "indent"; contents: Doc; } interface IndentIfBreak { type: "indent-if-break"; } interface Label { type: "label"; label: any; contents: Doc; } interface Line { type: "line"; soft?: boolean | undefined; hard?: boolean | undefined; literal?: boolean | undefined; } interface LineSuffix { type: "line-suffix"; contents: Doc; } interface LineSuffixBoundary { type: "line-suffix-boundary"; } interface LiterallineWithoutBreakParent extends Line { hard: true; literal: true; } type LiteralLine = [LiterallineWithoutBreakParent, BreakParent]; interface Softline extends Line { soft: true; } type Hardline = [HardlineWithoutBreakParent, BreakParent]; interface Trim { type: "trim"; } interface GroupOptions { shouldBreak?: boolean | undefined; id?: symbol | undefined; } function addAlignmentToDoc(doc: Doc, size: number, tabWidth: number): Doc; /** @see [align](https://github.com/prettier/prettier/blob/main/commands.md#align) */ function align(widthOrString: Align["n"], doc: Doc): Align; /** @see [breakParent](https://github.com/prettier/prettier/blob/main/commands.md#breakparent) */ const breakParent: BreakParent; /** @see [conditionalGroup](https://github.com/prettier/prettier/blob/main/commands.md#conditionalgroup) */ function conditionalGroup(alternatives: Doc[], options?: GroupOptions): Group; /** @see [dedent](https://github.com/prettier/prettier/blob/main/commands.md#dedent) */ function dedent(doc: Doc): Align; /** @see [dedentToRoot](https://github.com/prettier/prettier/blob/main/commands.md#dedenttoroot) */ function dedentToRoot(doc: Doc): Align; /** @see [fill](https://github.com/prettier/prettier/blob/main/commands.md#fill) */ function fill(docs: Doc[]): Fill; /** @see [group](https://github.com/prettier/prettier/blob/main/commands.md#group) */ function group(doc: Doc, opts?: GroupOptions): Group; /** @see [hardline](https://github.com/prettier/prettier/blob/main/commands.md#hardline) */ const hardline: Hardline; /** @see [hardlineWithoutBreakParent](https://github.com/prettier/prettier/blob/main/commands.md#hardlinewithoutbreakparent-and-literallinewithoutbreakparent) */ const hardlineWithoutBreakParent: HardlineWithoutBreakParent; /** @see [ifBreak](https://github.com/prettier/prettier/blob/main/commands.md#ifbreak) */ function ifBreak( ifBreak: Doc, noBreak?: Doc, options?: { groupId?: symbol | undefined }, ): IfBreak; /** @see [indent](https://github.com/prettier/prettier/blob/main/commands.md#indent) */ function indent(doc: Doc): Indent; /** @see [indentIfBreak](https://github.com/prettier/prettier/blob/main/commands.md#indentifbreak) */ function indentIfBreak( doc: Doc, opts: { groupId: symbol; negate?: boolean | undefined }, ): IndentIfBreak; /** @see [join](https://github.com/prettier/prettier/blob/main/commands.md#join) */ function join(sep: Doc, docs: Doc[]): Doc[]; /** @see [label](https://github.com/prettier/prettier/blob/main/commands.md#label) */ function label(label: any | undefined, contents: Doc): Doc; /** @see [line](https://github.com/prettier/prettier/blob/main/commands.md#line) */ const line: Line; /** @see [lineSuffix](https://github.com/prettier/prettier/blob/main/commands.md#linesuffix) */ function lineSuffix(suffix: Doc): LineSuffix; /** @see [lineSuffixBoundary](https://github.com/prettier/prettier/blob/main/commands.md#linesuffixboundary) */ const lineSuffixBoundary: LineSuffixBoundary; /** @see [literalline](https://github.com/prettier/prettier/blob/main/commands.md#literalline) */ const literalline: LiteralLine; /** @see [literallineWithoutBreakParent](https://github.com/prettier/prettier/blob/main/commands.md#hardlinewithoutbreakparent-and-literallinewithoutbreakparent) */ const literallineWithoutBreakParent: LiterallineWithoutBreakParent; /** @see [markAsRoot](https://github.com/prettier/prettier/blob/main/commands.md#markasroot) */ function markAsRoot(doc: Doc): Align; /** @see [softline](https://github.com/prettier/prettier/blob/main/commands.md#softline) */ const softline: Softline; /** @see [trim](https://github.com/prettier/prettier/blob/main/commands.md#trim) */ const trim: Trim; /** @see [cursor](https://github.com/prettier/prettier/blob/main/commands.md#cursor) */ const cursor: Cursor; } export namespace printer { function printDocToString( doc: builders.Doc, options: Options, ): { formatted: string; /** * This property is a misnomer, and has been since the changes in * https://github.com/prettier/prettier/pull/15709. * The region of the document indicated by `cursorNodeStart` and `cursorNodeText` will * sometimes actually be what lies BETWEEN a pair of leaf nodes in the AST, rather than a node. */ cursorNodeStart?: number | undefined; /** * Note that, like cursorNodeStart, this is a misnomer and may actually be the text between two * leaf nodes in the AST instead of the text of a node. */ cursorNodeText?: string | undefined; }; interface Options { /** * Specify the line length that the printer will wrap on. * @default 80 */ printWidth: number; /** * Specify the number of spaces per indentation-level. * @default 2 */ tabWidth: number; /** * Indent lines with tabs instead of spaces * @default false */ useTabs?: boolean; parentParser?: string | undefined; __embeddedInHtml?: boolean | undefined; } } export namespace utils { function willBreak(doc: builders.Doc): boolean; function traverseDoc( doc: builders.Doc, onEnter?: (doc: builders.Doc) => void | boolean, onExit?: (doc: builders.Doc) => void, shouldTraverseConditionalGroups?: boolean, ): void; function findInDoc( doc: builders.Doc, callback: (doc: builders.Doc) => T, defaultValue: T, ): T; function mapDoc( doc: builders.Doc, callback: (doc: builders.Doc) => T, ): T; function removeLines(doc: builders.Doc): builders.Doc; function stripTrailingHardline(doc: builders.Doc): builders.Doc; function replaceEndOfLine( doc: builders.Doc, replacement?: builders.Doc, ): builders.Doc; function canBreak(doc: builders.Doc): boolean; }