| import AtRule = require('./at-rule.js') | |
| import { AtRuleProps } from './at-rule.js' | |
| import Comment, { CommentProps } from './comment.js' | |
| import Container from './container.js' | |
| import CssSyntaxError from './css-syntax-error.js' | |
| import Declaration, { DeclarationProps } from './declaration.js' | |
| import Document from './document.js' | |
| import Input from './input.js' | |
| import { Stringifier, Syntax } from './postcss.js' | |
| import Result from './result.js' | |
| import Root from './root.js' | |
| import Rule, { RuleProps } from './rule.js' | |
| import Warning, { WarningOptions } from './warning.js' | |
| declare namespace Node { | |
| export type ChildNode = AtRule.default | Comment | Declaration | Rule | |
| export type AnyNode = | |
| | AtRule.default | |
| | Comment | |
| | Declaration | |
| | Document | |
| | Root | |
| | Rule | |
| export type ChildProps = | |
| | AtRuleProps | |
| | CommentProps | |
| | DeclarationProps | |
| | RuleProps | |
| export interface Position { | |
| /** | |
| * Source line in file. In contrast to `offset` it starts from 1. | |
| */ | |
| column: number | |
| /** | |
| * Source column in file. | |
| */ | |
| line: number | |
| /** | |
| * Source offset in file. It starts from 0. | |
| */ | |
| offset: number | |
| } | |
| export interface Range { | |
| /** | |
| * End position, exclusive. | |
| */ | |
| end: Position | |
| /** | |
| * Start position, inclusive. | |
| */ | |
| start: Position | |
| } | |
| /** | |
| * Source represents an interface for the {@link Node.source} property. | |
| */ | |
| export interface Source { | |
| /** | |
| * The inclusive ending position for the source | |
| * code of a node. | |
| */ | |
| end?: Position | |
| /** | |
| * The source file from where a node has originated. | |
| */ | |
| input: Input | |
| /** | |
| * The inclusive starting position for the source | |
| * code of a node. | |
| */ | |
| start?: Position | |
| } | |
| /** | |
| * Interface represents an interface for an object received | |
| * as parameter by Node class constructor. | |
| */ | |
| export interface NodeProps { | |
| source?: Source | |
| } | |
| export interface NodeErrorOptions { | |
| /** | |
| * An ending index inside a node's string that should be highlighted as | |
| * source of error. | |
| */ | |
| endIndex?: number | |
| /** | |
| * An index inside a node's string that should be highlighted as source | |
| * of error. | |
| */ | |
| index?: number | |
| /** | |
| * Plugin name that created this error. PostCSS will set it automatically. | |
| */ | |
| plugin?: string | |
| /** | |
| * A word inside a node's string, that should be highlighted as source | |
| * of error. | |
| */ | |
| word?: string | |
| } | |
| // eslint-disable-next-line @typescript-eslint/no-shadow | |
| class Node extends Node_ {} | |
| export { Node as default } | |
| } | |
| /** | |
| * It represents an abstract class that handles common | |
| * methods for other CSS abstract syntax tree nodes. | |
| * | |
| * Any node that represents CSS selector or value should | |
| * not extend the `Node` class. | |
| */ | |
| declare abstract class Node_ { | |
| /** | |
| * It represents parent of the current node. | |
| * | |
| * ```js | |
| * root.nodes[0].parent === root //=> true | |
| * ``` | |
| */ | |
| parent: Container | Document | undefined | |
| /** | |
| * It represents unnecessary whitespace and characters present | |
| * in the css source code. | |
| * | |
| * Information to generate byte-to-byte equal node string as it was | |
| * in the origin input. | |
| * | |
| * The properties of the raws object are decided by parser, | |
| * the default parser uses the following properties: | |
| * | |
| * * `before`: the space symbols before the node. It also stores `*` | |
| * and `_` symbols before the declaration (IE hack). | |
| * * `after`: the space symbols after the last child of the node | |
| * to the end of the node. | |
| * * `between`: the symbols between the property and value | |
| * for declarations, selector and `{` for rules, or last parameter | |
| * and `{` for at-rules. | |
| * * `semicolon`: contains true if the last child has | |
| * an (optional) semicolon. | |
| * * `afterName`: the space between the at-rule name and its parameters. | |
| * * `left`: the space symbols between `/*` and the comment’s text. | |
| * * `right`: the space symbols between the comment’s text | |
| * and <code>*/</code>. | |
| * - `important`: the content of the important statement, | |
| * if it is not just `!important`. | |
| * | |
| * PostCSS filters out the comments inside selectors, declaration values | |
| * and at-rule parameters but it stores the origin content in raws. | |
| * | |
| * ```js | |
| * const root = postcss.parse('a {\n color:black\n}') | |
| * root.first.first.raws //=> { before: '\n ', between: ':' } | |
| * ``` | |
| */ | |
| raws: any | |
| /** | |
| * It represents information related to origin of a node and is required | |
| * for generating source maps. | |
| * | |
| * The nodes that are created manually using the public APIs | |
| * provided by PostCSS will have `source` undefined and | |
| * will be absent in the source map. | |
| * | |
| * For this reason, the plugin developer should consider | |
| * duplicating nodes as the duplicate node will have the | |
| * same source as the original node by default or assign | |
| * source to a node created manually. | |
| * | |
| * ```js | |
| * decl.source.input.from //=> '/home/ai/source.css' | |
| * decl.source.start //=> { line: 10, column: 2 } | |
| * decl.source.end //=> { line: 10, column: 12 } | |
| * ``` | |
| * | |
| * ```js | |
| * // Incorrect method, source not specified! | |
| * const prefixed = postcss.decl({ | |
| * prop: '-moz-' + decl.prop, | |
| * value: decl.value | |
| * }) | |
| * | |
| * // Correct method, source is inherited when duplicating. | |
| * const prefixed = decl.clone({ | |
| * prop: '-moz-' + decl.prop | |
| * }) | |
| * ``` | |
| * | |
| * ```js | |
| * if (atrule.name === 'add-link') { | |
| * const rule = postcss.rule({ | |
| * selector: 'a', | |
| * source: atrule.source | |
| * }) | |
| * | |
| * atrule.parent.insertBefore(atrule, rule) | |
| * } | |
| * ``` | |
| */ | |
| source?: Node.Source | |
| /** | |
| * It represents type of a node in | |
| * an abstract syntax tree. | |
| * | |
| * A type of node helps in identification of a node | |
| * and perform operation based on it's type. | |
| * | |
| * ```js | |
| * const declaration = new Declaration({ | |
| * prop: 'color', | |
| * value: 'black' | |
| * }) | |
| * | |
| * declaration.type //=> 'decl' | |
| * ``` | |
| */ | |
| type: string | |
| constructor(defaults?: object) | |
| /** | |
| * Insert new node after current node to current node’s parent. | |
| * | |
| * Just alias for `node.parent.insertAfter(node, add)`. | |
| * | |
| * ```js | |
| * decl.after('color: black') | |
| * ``` | |
| * | |
| * @param newNode New node. | |
| * @return This node for methods chain. | |
| */ | |
| after(newNode: Node | Node.ChildProps | Node[] | string | undefined): this | |
| /** | |
| * It assigns properties to an existing node instance. | |
| * | |
| * ```js | |
| * decl.assign({ prop: 'word-wrap', value: 'break-word' }) | |
| * ``` | |
| * | |
| * @param overrides New properties to override the node. | |
| * | |
| * @return `this` for method chaining. | |
| */ | |
| assign(overrides: object): this | |
| /** | |
| * Insert new node before current node to current node’s parent. | |
| * | |
| * Just alias for `node.parent.insertBefore(node, add)`. | |
| * | |
| * ```js | |
| * decl.before('content: ""') | |
| * ``` | |
| * | |
| * @param newNode New node. | |
| * @return This node for methods chain. | |
| */ | |
| before(newNode: Node | Node.ChildProps | Node[] | string | undefined): this | |
| /** | |
| * Clear the code style properties for the node and its children. | |
| * | |
| * ```js | |
| * node.raws.before //=> ' ' | |
| * node.cleanRaws() | |
| * node.raws.before //=> undefined | |
| * ``` | |
| * | |
| * @param keepBetween Keep the `raws.between` symbols. | |
| */ | |
| cleanRaws(keepBetween?: boolean): void | |
| /** | |
| * It creates clone of an existing node, which includes all the properties | |
| * and their values, that includes `raws` but not `type`. | |
| * | |
| * ```js | |
| * decl.raws.before //=> "\n " | |
| * const cloned = decl.clone({ prop: '-moz-' + decl.prop }) | |
| * cloned.raws.before //=> "\n " | |
| * cloned.toString() //=> -moz-transform: scale(0) | |
| * ``` | |
| * | |
| * @param overrides New properties to override in the clone. | |
| * | |
| * @return Duplicate of the node instance. | |
| */ | |
| clone(overrides?: object): Node | |
| /** | |
| * Shortcut to clone the node and insert the resulting cloned node | |
| * after the current node. | |
| * | |
| * @param overrides New properties to override in the clone. | |
| * @return New node. | |
| */ | |
| cloneAfter(overrides?: object): Node | |
| /** | |
| * Shortcut to clone the node and insert the resulting cloned node | |
| * before the current node. | |
| * | |
| * ```js | |
| * decl.cloneBefore({ prop: '-moz-' + decl.prop }) | |
| * ``` | |
| * | |
| * @param overrides Mew properties to override in the clone. | |
| * | |
| * @return New node | |
| */ | |
| cloneBefore(overrides?: object): Node | |
| /** | |
| * It creates an instance of the class `CssSyntaxError` and parameters passed | |
| * to this method are assigned to the error instance. | |
| * | |
| * The error instance will have description for the | |
| * error, original position of the node in the | |
| * source, showing line and column number. | |
| * | |
| * If any previous map is present, it would be used | |
| * to get original position of the source. | |
| * | |
| * The Previous Map here is referred to the source map | |
| * generated by previous compilation, example: Less, | |
| * Stylus and Sass. | |
| * | |
| * This method returns the error instance instead of | |
| * throwing it. | |
| * | |
| * ```js | |
| * if (!variables[name]) { | |
| * throw decl.error(`Unknown variable ${name}`, { word: name }) | |
| * // CssSyntaxError: postcss-vars:a.sass:4:3: Unknown variable $black | |
| * // color: $black | |
| * // a | |
| * // ^ | |
| * // background: white | |
| * } | |
| * ``` | |
| * | |
| * @param message Description for the error instance. | |
| * @param options Options for the error instance. | |
| * | |
| * @return Error instance is returned. | |
| */ | |
| error(message: string, options?: Node.NodeErrorOptions): CssSyntaxError | |
| /** | |
| * Returns the next child of the node’s parent. | |
| * Returns `undefined` if the current node is the last child. | |
| * | |
| * ```js | |
| * if (comment.text === 'delete next') { | |
| * const next = comment.next() | |
| * if (next) { | |
| * next.remove() | |
| * } | |
| * } | |
| * ``` | |
| * | |
| * @return Next node. | |
| */ | |
| next(): Node.ChildNode | undefined | |
| /** | |
| * Get the position for a word or an index inside the node. | |
| * | |
| * @param opts Options. | |
| * @return Position. | |
| */ | |
| positionBy(opts?: Pick<WarningOptions, 'index' | 'word'>): Node.Position | |
| /** | |
| * Convert string index to line/column. | |
| * | |
| * @param index The symbol number in the node’s string. | |
| * @return Symbol position in file. | |
| */ | |
| positionInside(index: number): Node.Position | |
| /** | |
| * Returns the previous child of the node’s parent. | |
| * Returns `undefined` if the current node is the first child. | |
| * | |
| * ```js | |
| * const annotation = decl.prev() | |
| * if (annotation.type === 'comment') { | |
| * readAnnotation(annotation.text) | |
| * } | |
| * ``` | |
| * | |
| * @return Previous node. | |
| */ | |
| prev(): Node.ChildNode | undefined | |
| /** | |
| * Get the range for a word or start and end index inside the node. | |
| * The start index is inclusive; the end index is exclusive. | |
| * | |
| * @param opts Options. | |
| * @return Range. | |
| */ | |
| rangeBy( | |
| opts?: Pick<WarningOptions, 'endIndex' | 'index' | 'word'> | |
| ): Node.Range | |
| /** | |
| * Returns a `raws` value. If the node is missing | |
| * the code style property (because the node was manually built or cloned), | |
| * PostCSS will try to autodetect the code style property by looking | |
| * at other nodes in the tree. | |
| * | |
| * ```js | |
| * const root = postcss.parse('a { background: white }') | |
| * root.nodes[0].append({ prop: 'color', value: 'black' }) | |
| * root.nodes[0].nodes[1].raws.before //=> undefined | |
| * root.nodes[0].nodes[1].raw('before') //=> ' ' | |
| * ``` | |
| * | |
| * @param prop Name of code style property. | |
| * @param defaultType Name of default value, it can be missed | |
| * if the value is the same as prop. | |
| * @return {string} Code style value. | |
| */ | |
| raw(prop: string, defaultType?: string): string | |
| /** | |
| * It removes the node from its parent and deletes its parent property. | |
| * | |
| * ```js | |
| * if (decl.prop.match(/^-webkit-/)) { | |
| * decl.remove() | |
| * } | |
| * ``` | |
| * | |
| * @return `this` for method chaining. | |
| */ | |
| remove(): this | |
| /** | |
| * Inserts node(s) before the current node and removes the current node. | |
| * | |
| * ```js | |
| * AtRule: { | |
| * mixin: atrule => { | |
| * atrule.replaceWith(mixinRules[atrule.params]) | |
| * } | |
| * } | |
| * ``` | |
| * | |
| * @param nodes Mode(s) to replace current one. | |
| * @return Current node to methods chain. | |
| */ | |
| replaceWith( | |
| ...nodes: ( | |
| | Node.ChildNode | |
| | Node.ChildNode[] | |
| | Node.ChildProps | |
| | Node.ChildProps[] | |
| )[] | |
| ): this | |
| /** | |
| * Finds the Root instance of the node’s tree. | |
| * | |
| * ```js | |
| * root.nodes[0].nodes[0].root() === root | |
| * ``` | |
| * | |
| * @return Root parent. | |
| */ | |
| root(): Root | |
| /** | |
| * Fix circular links on `JSON.stringify()`. | |
| * | |
| * @return Cleaned object. | |
| */ | |
| toJSON(): object | |
| /** | |
| * It compiles the node to browser readable cascading style sheets string | |
| * depending on it's type. | |
| * | |
| * ```js | |
| * new Rule({ selector: 'a' }).toString() //=> "a {}" | |
| * ``` | |
| * | |
| * @param stringifier A syntax to use in string generation. | |
| * @return CSS string of this node. | |
| */ | |
| toString(stringifier?: Stringifier | Syntax): string | |
| /** | |
| * It is a wrapper for {@link Result#warn}, providing convenient | |
| * way of generating warnings. | |
| * | |
| * ```js | |
| * Declaration: { | |
| * bad: (decl, { result }) => { | |
| * decl.warn(result, 'Deprecated property: bad') | |
| * } | |
| * } | |
| * ``` | |
| * | |
| * @param result The `Result` instance that will receive the warning. | |
| * @param message Description for the warning. | |
| * @param options Options for the warning. | |
| * | |
| * @return `Warning` instance is returned | |
| */ | |
| warn(result: Result, message: string, options?: WarningOptions): Warning | |
| } | |
| declare class Node extends Node_ {} | |
| export = Node | |