summaryrefslogtreecommitdiff
path: root/node_modules/postcss/lib
diff options
context:
space:
mode:
authorPhilipp Tanlak <philipp.tanlak@gmail.com>2025-11-24 20:54:57 +0100
committerPhilipp Tanlak <philipp.tanlak@gmail.com>2025-11-24 20:57:48 +0100
commitb1e2c8fd5cb5dfa46bc440a12eafaf56cd844b1c (patch)
tree49d360fd6cbc6a2754efe93524ac47ff0fbe0f7d /node_modules/postcss/lib
Docs
Diffstat (limited to 'node_modules/postcss/lib')
-rw-r--r--node_modules/postcss/lib/at-rule.d.ts115
-rw-r--r--node_modules/postcss/lib/at-rule.js25
-rw-r--r--node_modules/postcss/lib/comment.d.ts67
-rw-r--r--node_modules/postcss/lib/comment.js13
-rw-r--r--node_modules/postcss/lib/container.d.ts452
-rw-r--r--node_modules/postcss/lib/container.js439
-rw-r--r--node_modules/postcss/lib/css-syntax-error.d.ts248
-rw-r--r--node_modules/postcss/lib/css-syntax-error.js100
-rw-r--r--node_modules/postcss/lib/declaration.d.ts148
-rw-r--r--node_modules/postcss/lib/declaration.js24
-rw-r--r--node_modules/postcss/lib/document.d.ts68
-rw-r--r--node_modules/postcss/lib/document.js33
-rw-r--r--node_modules/postcss/lib/fromJSON.d.ts9
-rw-r--r--node_modules/postcss/lib/fromJSON.js54
-rw-r--r--node_modules/postcss/lib/input.d.ts194
-rw-r--r--node_modules/postcss/lib/input.js248
-rw-r--r--node_modules/postcss/lib/lazy-result.d.ts190
-rw-r--r--node_modules/postcss/lib/lazy-result.js550
-rw-r--r--node_modules/postcss/lib/list.d.ts57
-rw-r--r--node_modules/postcss/lib/list.js58
-rw-r--r--node_modules/postcss/lib/map-generator.js359
-rw-r--r--node_modules/postcss/lib/no-work-result.d.ts46
-rw-r--r--node_modules/postcss/lib/no-work-result.js135
-rw-r--r--node_modules/postcss/lib/node.d.ts536
-rw-r--r--node_modules/postcss/lib/node.js381
-rw-r--r--node_modules/postcss/lib/parse.d.ts9
-rw-r--r--node_modules/postcss/lib/parse.js42
-rw-r--r--node_modules/postcss/lib/parser.js610
-rw-r--r--node_modules/postcss/lib/postcss.d.mts72
-rw-r--r--node_modules/postcss/lib/postcss.d.ts441
-rw-r--r--node_modules/postcss/lib/postcss.js101
-rw-r--r--node_modules/postcss/lib/postcss.mjs30
-rw-r--r--node_modules/postcss/lib/previous-map.d.ts81
-rw-r--r--node_modules/postcss/lib/previous-map.js142
-rw-r--r--node_modules/postcss/lib/processor.d.ts115
-rw-r--r--node_modules/postcss/lib/processor.js67
-rw-r--r--node_modules/postcss/lib/result.d.ts206
-rw-r--r--node_modules/postcss/lib/result.js42
-rw-r--r--node_modules/postcss/lib/root.d.ts86
-rw-r--r--node_modules/postcss/lib/root.js61
-rw-r--r--node_modules/postcss/lib/rule.d.ts113
-rw-r--r--node_modules/postcss/lib/rule.js27
-rw-r--r--node_modules/postcss/lib/stringifier.d.ts46
-rw-r--r--node_modules/postcss/lib/stringifier.js353
-rw-r--r--node_modules/postcss/lib/stringify.d.ts9
-rw-r--r--node_modules/postcss/lib/stringify.js11
-rw-r--r--node_modules/postcss/lib/symbols.js5
-rw-r--r--node_modules/postcss/lib/terminal-highlight.js70
-rw-r--r--node_modules/postcss/lib/tokenize.js266
-rw-r--r--node_modules/postcss/lib/warn-once.js13
-rw-r--r--node_modules/postcss/lib/warning.d.ts147
-rw-r--r--node_modules/postcss/lib/warning.js37
52 files changed, 7751 insertions, 0 deletions
diff --git a/node_modules/postcss/lib/at-rule.d.ts b/node_modules/postcss/lib/at-rule.d.ts
new file mode 100644
index 0000000..8eebc48
--- /dev/null
+++ b/node_modules/postcss/lib/at-rule.d.ts
@@ -0,0 +1,115 @@
+import Container, { ContainerProps } from './container.js'
+
+declare namespace AtRule {
+ export interface AtRuleRaws extends Record<string, unknown> {
+ /**
+ * The space symbols after the last child of the node to the end of the node.
+ */
+ after?: string
+
+ /**
+ * The space between the at-rule name and its parameters.
+ */
+ afterName?: string
+
+ /**
+ * The space symbols before the node. It also stores `*`
+ * and `_` symbols before the declaration (IE hack).
+ */
+ before?: string
+
+ /**
+ * The symbols between the last parameter and `{` for rules.
+ */
+ between?: string
+
+ /**
+ * The rule’s selector with comments.
+ */
+ params?: {
+ raw: string
+ value: string
+ }
+
+ /**
+ * Contains `true` if the last child has an (optional) semicolon.
+ */
+ semicolon?: boolean
+ }
+
+ export interface AtRuleProps extends ContainerProps {
+ /** Name of the at-rule. */
+ name: string
+ /** Parameters following the name of the at-rule. */
+ params?: number | string
+ /** Information used to generate byte-to-byte equal node string as it was in the origin input. */
+ raws?: AtRuleRaws
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ export { AtRule_ as default }
+}
+
+/**
+ * Represents an at-rule.
+ *
+ * ```js
+ * Once (root, { AtRule }) {
+ * let media = new AtRule({ name: 'media', params: 'print' })
+ * media.append(…)
+ * root.append(media)
+ * }
+ * ```
+ *
+ * If it’s followed in the CSS by a `{}` block, this node will have
+ * a nodes property representing its children.
+ *
+ * ```js
+ * const root = postcss.parse('@charset "UTF-8"; @media print {}')
+ *
+ * const charset = root.first
+ * charset.type //=> 'atrule'
+ * charset.nodes //=> undefined
+ *
+ * const media = root.last
+ * media.nodes //=> []
+ * ```
+ */
+declare class AtRule_ extends Container {
+ /**
+ * The at-rule’s name immediately follows the `@`.
+ *
+ * ```js
+ * const root = postcss.parse('@media print {}')
+ * media.name //=> 'media'
+ * const media = root.first
+ * ```
+ */
+ name: string
+ /**
+ * The at-rule’s parameters, the values that follow the at-rule’s name
+ * but precede any `{}` block.
+ *
+ * ```js
+ * const root = postcss.parse('@media print, screen {}')
+ * const media = root.first
+ * media.params //=> 'print, screen'
+ * ```
+ */
+ params: string
+ parent: Container | undefined
+
+ raws: AtRule.AtRuleRaws
+
+ type: 'atrule'
+
+ constructor(defaults?: AtRule.AtRuleProps)
+ assign(overrides: AtRule.AtRuleProps | object): this
+ clone(overrides?: Partial<AtRule.AtRuleProps>): AtRule
+ cloneAfter(overrides?: Partial<AtRule.AtRuleProps>): AtRule
+ cloneBefore(overrides?: Partial<AtRule.AtRuleProps>): AtRule
+}
+
+declare class AtRule extends AtRule_ {}
+
+export = AtRule
diff --git a/node_modules/postcss/lib/at-rule.js b/node_modules/postcss/lib/at-rule.js
new file mode 100644
index 0000000..9486447
--- /dev/null
+++ b/node_modules/postcss/lib/at-rule.js
@@ -0,0 +1,25 @@
+'use strict'
+
+let Container = require('./container')
+
+class AtRule extends Container {
+ constructor(defaults) {
+ super(defaults)
+ this.type = 'atrule'
+ }
+
+ append(...children) {
+ if (!this.proxyOf.nodes) this.nodes = []
+ return super.append(...children)
+ }
+
+ prepend(...children) {
+ if (!this.proxyOf.nodes) this.nodes = []
+ return super.prepend(...children)
+ }
+}
+
+module.exports = AtRule
+AtRule.default = AtRule
+
+Container.registerAtRule(AtRule)
diff --git a/node_modules/postcss/lib/comment.d.ts b/node_modules/postcss/lib/comment.d.ts
new file mode 100644
index 0000000..d244508
--- /dev/null
+++ b/node_modules/postcss/lib/comment.d.ts
@@ -0,0 +1,67 @@
+import Container from './container.js'
+import Node, { NodeProps } from './node.js'
+
+declare namespace Comment {
+ export interface CommentRaws extends Record<string, unknown> {
+ /**
+ * The space symbols before the node.
+ */
+ before?: string
+
+ /**
+ * The space symbols between `/*` and the comment’s text.
+ */
+ left?: string
+
+ /**
+ * The space symbols between the comment’s text.
+ */
+ right?: string
+ }
+
+ export interface CommentProps extends NodeProps {
+ /** Information used to generate byte-to-byte equal node string as it was in the origin input. */
+ raws?: CommentRaws
+ /** Content of the comment. */
+ text: string
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ export { Comment_ as default }
+}
+
+/**
+ * It represents a class that handles
+ * [CSS comments](https://developer.mozilla.org/en-US/docs/Web/CSS/Comments)
+ *
+ * ```js
+ * Once (root, { Comment }) {
+ * const note = new Comment({ text: 'Note: …' })
+ * root.append(note)
+ * }
+ * ```
+ *
+ * Remember that CSS comments inside selectors, at-rule parameters,
+ * or declaration values will be stored in the `raws` properties
+ * explained above.
+ */
+declare class Comment_ extends Node {
+ parent: Container | undefined
+ raws: Comment.CommentRaws
+ /**
+ * The comment's text.
+ */
+ text: string
+
+ type: 'comment'
+
+ constructor(defaults?: Comment.CommentProps)
+ assign(overrides: Comment.CommentProps | object): this
+ clone(overrides?: Partial<Comment.CommentProps>): Comment
+ cloneAfter(overrides?: Partial<Comment.CommentProps>): Comment
+ cloneBefore(overrides?: Partial<Comment.CommentProps>): Comment
+}
+
+declare class Comment extends Comment_ {}
+
+export = Comment
diff --git a/node_modules/postcss/lib/comment.js b/node_modules/postcss/lib/comment.js
new file mode 100644
index 0000000..c566506
--- /dev/null
+++ b/node_modules/postcss/lib/comment.js
@@ -0,0 +1,13 @@
+'use strict'
+
+let Node = require('./node')
+
+class Comment extends Node {
+ constructor(defaults) {
+ super(defaults)
+ this.type = 'comment'
+ }
+}
+
+module.exports = Comment
+Comment.default = Comment
diff --git a/node_modules/postcss/lib/container.d.ts b/node_modules/postcss/lib/container.d.ts
new file mode 100644
index 0000000..bd6b1ba
--- /dev/null
+++ b/node_modules/postcss/lib/container.d.ts
@@ -0,0 +1,452 @@
+import AtRule from './at-rule.js'
+import Comment from './comment.js'
+import Declaration from './declaration.js'
+import Node, { ChildNode, ChildProps, NodeProps } from './node.js'
+import Rule from './rule.js'
+
+declare namespace Container {
+ export interface ValueOptions {
+ /**
+ * String that’s used to narrow down values and speed up the regexp search.
+ */
+ fast?: string
+
+ /**
+ * An array of property names.
+ */
+ props?: string[]
+ }
+
+ export interface ContainerProps extends NodeProps {
+ nodes?: (ChildNode | ChildProps)[]
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ export { Container_ as default }
+}
+
+/**
+ * The `Root`, `AtRule`, and `Rule` container nodes
+ * inherit some common methods to help work with their children.
+ *
+ * Note that all containers can store any content. If you write a rule inside
+ * a rule, PostCSS will parse it.
+ */
+declare abstract class Container_<Child extends Node = ChildNode> extends Node {
+ /**
+ * An array containing the container’s children.
+ *
+ * ```js
+ * const root = postcss.parse('a { color: black }')
+ * root.nodes.length //=> 1
+ * root.nodes[0].selector //=> 'a'
+ * root.nodes[0].nodes[0].prop //=> 'color'
+ * ```
+ */
+ nodes: Child[]
+
+ /**
+ * Inserts new nodes to the end of the container.
+ *
+ * ```js
+ * const decl1 = new Declaration({ prop: 'color', value: 'black' })
+ * const decl2 = new Declaration({ prop: 'background-color', value: 'white' })
+ * rule.append(decl1, decl2)
+ *
+ * root.append({ name: 'charset', params: '"UTF-8"' }) // at-rule
+ * root.append({ selector: 'a' }) // rule
+ * rule.append({ prop: 'color', value: 'black' }) // declaration
+ * rule.append({ text: 'Comment' }) // comment
+ *
+ * root.append('a {}')
+ * root.first.append('color: black; z-index: 1')
+ * ```
+ *
+ * @param nodes New nodes.
+ * @return This node for methods chain.
+ */
+ append(
+ ...nodes: (ChildProps | ChildProps[] | Node | Node[] | string | string[])[]
+ ): this
+
+ assign(overrides: Container.ContainerProps | object): this
+ clone(overrides?: Partial<Container.ContainerProps>): Container<Child>
+ cloneAfter(overrides?: Partial<Container.ContainerProps>): Container<Child>
+ cloneBefore(overrides?: Partial<Container.ContainerProps>): Container<Child>
+
+ /**
+ * Iterates through the container’s immediate children,
+ * calling `callback` for each child.
+ *
+ * Returning `false` in the callback will break iteration.
+ *
+ * This method only iterates through the container’s immediate children.
+ * If you need to recursively iterate through all the container’s descendant
+ * nodes, use `Container#walk`.
+ *
+ * Unlike the for `{}`-cycle or `Array#forEach` this iterator is safe
+ * if you are mutating the array of child nodes during iteration.
+ * PostCSS will adjust the current index to match the mutations.
+ *
+ * ```js
+ * const root = postcss.parse('a { color: black; z-index: 1 }')
+ * const rule = root.first
+ *
+ * for (const decl of rule.nodes) {
+ * decl.cloneBefore({ prop: '-webkit-' + decl.prop })
+ * // Cycle will be infinite, because cloneBefore moves the current node
+ * // to the next index
+ * }
+ *
+ * rule.each(decl => {
+ * decl.cloneBefore({ prop: '-webkit-' + decl.prop })
+ * // Will be executed only for color and z-index
+ * })
+ * ```
+ *
+ * @param callback Iterator receives each node and index.
+ * @return Returns `false` if iteration was broke.
+ */
+ each(
+ callback: (node: Child, index: number) => false | void
+ ): false | undefined
+
+ /**
+ * Returns `true` if callback returns `true`
+ * for all of the container’s children.
+ *
+ * ```js
+ * const noPrefixes = rule.every(i => i.prop[0] !== '-')
+ * ```
+ *
+ * @param condition Iterator returns true or false.
+ * @return Is every child pass condition.
+ */
+ every(
+ condition: (node: Child, index: number, nodes: Child[]) => boolean
+ ): boolean
+ /**
+ * Returns a `child`’s index within the `Container#nodes` array.
+ *
+ * ```js
+ * rule.index( rule.nodes[2] ) //=> 2
+ * ```
+ *
+ * @param child Child of the current container.
+ * @return Child index.
+ */
+ index(child: Child | number): number
+
+ /**
+ * Insert new node after old node within the container.
+ *
+ * @param oldNode Child or child’s index.
+ * @param newNode New node.
+ * @return This node for methods chain.
+ */
+ insertAfter(
+ oldNode: Child | number,
+ newNode: Child | Child[] | ChildProps | ChildProps[] | string | string[]
+ ): this
+ /**
+ * Insert new node before old node within the container.
+ *
+ * ```js
+ * rule.insertBefore(decl, decl.clone({ prop: '-webkit-' + decl.prop }))
+ * ```
+ *
+ * @param oldNode Child or child’s index.
+ * @param newNode New node.
+ * @return This node for methods chain.
+ */
+ insertBefore(
+ oldNode: Child | number,
+ newNode: Child | Child[] | ChildProps | ChildProps[] | string | string[]
+ ): this
+
+ /**
+ * Traverses the container’s descendant nodes, calling callback
+ * for each comment node.
+ *
+ * Like `Container#each`, this method is safe
+ * to use if you are mutating arrays during iteration.
+ *
+ * ```js
+ * root.walkComments(comment => {
+ * comment.remove()
+ * })
+ * ```
+ *
+ * @param callback Iterator receives each node and index.
+ * @return Returns `false` if iteration was broke.
+ */
+
+ /**
+ * Inserts new nodes to the start of the container.
+ *
+ * ```js
+ * const decl1 = new Declaration({ prop: 'color', value: 'black' })
+ * const decl2 = new Declaration({ prop: 'background-color', value: 'white' })
+ * rule.prepend(decl1, decl2)
+ *
+ * root.append({ name: 'charset', params: '"UTF-8"' }) // at-rule
+ * root.append({ selector: 'a' }) // rule
+ * rule.append({ prop: 'color', value: 'black' }) // declaration
+ * rule.append({ text: 'Comment' }) // comment
+ *
+ * root.append('a {}')
+ * root.first.append('color: black; z-index: 1')
+ * ```
+ *
+ * @param nodes New nodes.
+ * @return This node for methods chain.
+ */
+ prepend(
+ ...nodes: (ChildProps | ChildProps[] | Node | Node[] | string | string[])[]
+ ): this
+ /**
+ * Add child to the end of the node.
+ *
+ * ```js
+ * rule.push(new Declaration({ prop: 'color', value: 'black' }))
+ * ```
+ *
+ * @param child New node.
+ * @return This node for methods chain.
+ */
+ push(child: Child): this
+
+ /**
+ * Removes all children from the container
+ * and cleans their parent properties.
+ *
+ * ```js
+ * rule.removeAll()
+ * rule.nodes.length //=> 0
+ * ```
+ *
+ * @return This node for methods chain.
+ */
+ removeAll(): this
+
+ /**
+ * Removes node from the container and cleans the parent properties
+ * from the node and its children.
+ *
+ * ```js
+ * rule.nodes.length //=> 5
+ * rule.removeChild(decl)
+ * rule.nodes.length //=> 4
+ * decl.parent //=> undefined
+ * ```
+ *
+ * @param child Child or child’s index.
+ * @return This node for methods chain.
+ */
+ removeChild(child: Child | number): this
+
+ replaceValues(
+ pattern: RegExp | string,
+ replaced: { (substring: string, ...args: any[]): string } | string
+ ): this
+
+ /**
+ * Passes all declaration values within the container that match pattern
+ * through callback, replacing those values with the returned result
+ * of callback.
+ *
+ * This method is useful if you are using a custom unit or function
+ * and need to iterate through all values.
+ *
+ * ```js
+ * root.replaceValues(/\d+rem/, { fast: 'rem' }, string => {
+ * return 15 * parseInt(string) + 'px'
+ * })
+ * ```
+ *
+ * @param pattern Replace pattern.
+ * @param {object} opts Options to speed up the search.
+ * @param callback String to replace pattern or callback
+ * that returns a new value. The callback
+ * will receive the same arguments
+ * as those passed to a function parameter
+ * of `String#replace`.
+ * @return This node for methods chain.
+ */
+ replaceValues(
+ pattern: RegExp | string,
+ options: Container.ValueOptions,
+ replaced: { (substring: string, ...args: any[]): string } | string
+ ): this
+
+ /**
+ * Returns `true` if callback returns `true` for (at least) one
+ * of the container’s children.
+ *
+ * ```js
+ * const hasPrefix = rule.some(i => i.prop[0] === '-')
+ * ```
+ *
+ * @param condition Iterator returns true or false.
+ * @return Is some child pass condition.
+ */
+ some(
+ condition: (node: Child, index: number, nodes: Child[]) => boolean
+ ): boolean
+
+ /**
+ * Traverses the container’s descendant nodes, calling callback
+ * for each node.
+ *
+ * Like container.each(), this method is safe to use
+ * if you are mutating arrays during iteration.
+ *
+ * If you only need to iterate through the container’s immediate children,
+ * use `Container#each`.
+ *
+ * ```js
+ * root.walk(node => {
+ * // Traverses all descendant nodes.
+ * })
+ * ```
+ *
+ * @param callback Iterator receives each node and index.
+ * @return Returns `false` if iteration was broke.
+ */
+ walk(
+ callback: (node: ChildNode, index: number) => false | void
+ ): false | undefined
+
+ /**
+ * Traverses the container’s descendant nodes, calling callback
+ * for each at-rule node.
+ *
+ * If you pass a filter, iteration will only happen over at-rules
+ * that have matching names.
+ *
+ * Like `Container#each`, this method is safe
+ * to use if you are mutating arrays during iteration.
+ *
+ * ```js
+ * root.walkAtRules(rule => {
+ * if (isOld(rule.name)) rule.remove()
+ * })
+ *
+ * let first = false
+ * root.walkAtRules('charset', rule => {
+ * if (!first) {
+ * first = true
+ * } else {
+ * rule.remove()
+ * }
+ * })
+ * ```
+ *
+ * @param name String or regular expression to filter at-rules by name.
+ * @param callback Iterator receives each node and index.
+ * @return Returns `false` if iteration was broke.
+ */
+ walkAtRules(
+ nameFilter: RegExp | string,
+ callback: (atRule: AtRule, index: number) => false | void
+ ): false | undefined
+
+ walkAtRules(
+ callback: (atRule: AtRule, index: number) => false | void
+ ): false | undefined
+ walkComments(
+ callback: (comment: Comment, indexed: number) => false | void
+ ): false | undefined
+
+ walkComments(
+ callback: (comment: Comment, indexed: number) => false | void
+ ): false | undefined
+
+ /**
+ * Traverses the container’s descendant nodes, calling callback
+ * for each declaration node.
+ *
+ * If you pass a filter, iteration will only happen over declarations
+ * with matching properties.
+ *
+ * ```js
+ * root.walkDecls(decl => {
+ * checkPropertySupport(decl.prop)
+ * })
+ *
+ * root.walkDecls('border-radius', decl => {
+ * decl.remove()
+ * })
+ *
+ * root.walkDecls(/^background/, decl => {
+ * decl.value = takeFirstColorFromGradient(decl.value)
+ * })
+ * ```
+ *
+ * Like `Container#each`, this method is safe
+ * to use if you are mutating arrays during iteration.
+ *
+ * @param prop String or regular expression to filter declarations
+ * by property name.
+ * @param callback Iterator receives each node and index.
+ * @return Returns `false` if iteration was broke.
+ */
+ walkDecls(
+ propFilter: RegExp | string,
+ callback: (decl: Declaration, index: number) => false | void
+ ): false | undefined
+
+ walkDecls(
+ callback: (decl: Declaration, index: number) => false | void
+ ): false | undefined
+
+ /**
+ * Traverses the container’s descendant nodes, calling callback
+ * for each rule node.
+ *
+ * If you pass a filter, iteration will only happen over rules
+ * with matching selectors.
+ *
+ * Like `Container#each`, this method is safe
+ * to use if you are mutating arrays during iteration.
+ *
+ * ```js
+ * const selectors = []
+ * root.walkRules(rule => {
+ * selectors.push(rule.selector)
+ * })
+ * console.log(`Your CSS uses ${ selectors.length } selectors`)
+ * ```
+ *
+ * @param selector String or regular expression to filter rules by selector.
+ * @param callback Iterator receives each node and index.
+ * @return Returns `false` if iteration was broke.
+ */
+ walkRules(
+ selectorFilter: RegExp | string,
+ callback: (rule: Rule, index: number) => false | void
+ ): false | undefined
+ walkRules(
+ callback: (rule: Rule, index: number) => false | void
+ ): false | undefined
+ /**
+ * The container’s first child.
+ *
+ * ```js
+ * rule.first === rules.nodes[0]
+ * ```
+ */
+ get first(): Child | undefined
+ /**
+ * The container’s last child.
+ *
+ * ```js
+ * rule.last === rule.nodes[rule.nodes.length - 1]
+ * ```
+ */
+ get last(): Child | undefined
+}
+
+declare class Container<Child extends Node = ChildNode> extends Container_<Child> {}
+
+export = Container
diff --git a/node_modules/postcss/lib/container.js b/node_modules/postcss/lib/container.js
new file mode 100644
index 0000000..914c053
--- /dev/null
+++ b/node_modules/postcss/lib/container.js
@@ -0,0 +1,439 @@
+'use strict'
+
+let { isClean, my } = require('./symbols')
+let Declaration = require('./declaration')
+let Comment = require('./comment')
+let Node = require('./node')
+
+let parse, Rule, AtRule, Root
+
+function cleanSource(nodes) {
+ return nodes.map(i => {
+ if (i.nodes) i.nodes = cleanSource(i.nodes)
+ delete i.source
+ return i
+ })
+}
+
+function markDirtyUp(node) {
+ node[isClean] = false
+ if (node.proxyOf.nodes) {
+ for (let i of node.proxyOf.nodes) {
+ markDirtyUp(i)
+ }
+ }
+}
+
+class Container extends Node {
+ append(...children) {
+ for (let child of children) {
+ let nodes = this.normalize(child, this.last)
+ for (let node of nodes) this.proxyOf.nodes.push(node)
+ }
+
+ this.markDirty()
+
+ return this
+ }
+
+ cleanRaws(keepBetween) {
+ super.cleanRaws(keepBetween)
+ if (this.nodes) {
+ for (let node of this.nodes) node.cleanRaws(keepBetween)
+ }
+ }
+
+ each(callback) {
+ if (!this.proxyOf.nodes) return undefined
+ let iterator = this.getIterator()
+
+ let index, result
+ while (this.indexes[iterator] < this.proxyOf.nodes.length) {
+ index = this.indexes[iterator]
+ result = callback(this.proxyOf.nodes[index], index)
+ if (result === false) break
+
+ this.indexes[iterator] += 1
+ }
+
+ delete this.indexes[iterator]
+ return result
+ }
+
+ every(condition) {
+ return this.nodes.every(condition)
+ }
+
+ getIterator() {
+ if (!this.lastEach) this.lastEach = 0
+ if (!this.indexes) this.indexes = {}
+
+ this.lastEach += 1
+ let iterator = this.lastEach
+ this.indexes[iterator] = 0
+
+ return iterator
+ }
+
+ getProxyProcessor() {
+ return {
+ get(node, prop) {
+ if (prop === 'proxyOf') {
+ return node
+ } else if (!node[prop]) {
+ return node[prop]
+ } else if (
+ prop === 'each' ||
+ (typeof prop === 'string' && prop.startsWith('walk'))
+ ) {
+ return (...args) => {
+ return node[prop](
+ ...args.map(i => {
+ if (typeof i === 'function') {
+ return (child, index) => i(child.toProxy(), index)
+ } else {
+ return i
+ }
+ })
+ )
+ }
+ } else if (prop === 'every' || prop === 'some') {
+ return cb => {
+ return node[prop]((child, ...other) =>
+ cb(child.toProxy(), ...other)
+ )
+ }
+ } else if (prop === 'root') {
+ return () => node.root().toProxy()
+ } else if (prop === 'nodes') {
+ return node.nodes.map(i => i.toProxy())
+ } else if (prop === 'first' || prop === 'last') {
+ return node[prop].toProxy()
+ } else {
+ return node[prop]
+ }
+ },
+
+ set(node, prop, value) {
+ if (node[prop] === value) return true
+ node[prop] = value
+ if (prop === 'name' || prop === 'params' || prop === 'selector') {
+ node.markDirty()
+ }
+ return true
+ }
+ }
+ }
+
+ index(child) {
+ if (typeof child === 'number') return child
+ if (child.proxyOf) child = child.proxyOf
+ return this.proxyOf.nodes.indexOf(child)
+ }
+
+ insertAfter(exist, add) {
+ let existIndex = this.index(exist)
+ let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse()
+ existIndex = this.index(exist)
+ for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node)
+
+ let index
+ for (let id in this.indexes) {
+ index = this.indexes[id]
+ if (existIndex < index) {
+ this.indexes[id] = index + nodes.length
+ }
+ }
+
+ this.markDirty()
+
+ return this
+ }
+
+ insertBefore(exist, add) {
+ let existIndex = this.index(exist)
+ let type = existIndex === 0 ? 'prepend' : false
+ let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse()
+ existIndex = this.index(exist)
+ for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node)
+
+ let index
+ for (let id in this.indexes) {
+ index = this.indexes[id]
+ if (existIndex <= index) {
+ this.indexes[id] = index + nodes.length
+ }
+ }
+
+ this.markDirty()
+
+ return this
+ }
+
+ normalize(nodes, sample) {
+ if (typeof nodes === 'string') {
+ nodes = cleanSource(parse(nodes).nodes)
+ } else if (Array.isArray(nodes)) {
+ nodes = nodes.slice(0)
+ for (let i of nodes) {
+ if (i.parent) i.parent.removeChild(i, 'ignore')
+ }
+ } else if (nodes.type === 'root' && this.type !== 'document') {
+ nodes = nodes.nodes.slice(0)
+ for (let i of nodes) {
+ if (i.parent) i.parent.removeChild(i, 'ignore')
+ }
+ } else if (nodes.type) {
+ nodes = [nodes]
+ } else if (nodes.prop) {
+ if (typeof nodes.value === 'undefined') {
+ throw new Error('Value field is missed in node creation')
+ } else if (typeof nodes.value !== 'string') {
+ nodes.value = String(nodes.value)
+ }
+ nodes = [new Declaration(nodes)]
+ } else if (nodes.selector) {
+ nodes = [new Rule(nodes)]
+ } else if (nodes.name) {
+ nodes = [new AtRule(nodes)]
+ } else if (nodes.text) {
+ nodes = [new Comment(nodes)]
+ } else {
+ throw new Error('Unknown node type in node creation')
+ }
+
+ let processed = nodes.map(i => {
+ /* c8 ignore next */
+ if (!i[my]) Container.rebuild(i)
+ i = i.proxyOf
+ if (i.parent) i.parent.removeChild(i)
+ if (i[isClean]) markDirtyUp(i)
+ if (typeof i.raws.before === 'undefined') {
+ if (sample && typeof sample.raws.before !== 'undefined') {
+ i.raws.before = sample.raws.before.replace(/\S/g, '')
+ }
+ }
+ i.parent = this.proxyOf
+ return i
+ })
+
+ return processed
+ }
+
+ prepend(...children) {
+ children = children.reverse()
+ for (let child of children) {
+ let nodes = this.normalize(child, this.first, 'prepend').reverse()
+ for (let node of nodes) this.proxyOf.nodes.unshift(node)
+ for (let id in this.indexes) {
+ this.indexes[id] = this.indexes[id] + nodes.length
+ }
+ }
+
+ this.markDirty()
+
+ return this
+ }
+
+ push(child) {
+ child.parent = this
+ this.proxyOf.nodes.push(child)
+ return this
+ }
+
+ removeAll() {
+ for (let node of this.proxyOf.nodes) node.parent = undefined
+ this.proxyOf.nodes = []
+
+ this.markDirty()
+
+ return this
+ }
+
+ removeChild(child) {
+ child = this.index(child)
+ this.proxyOf.nodes[child].parent = undefined
+ this.proxyOf.nodes.splice(child, 1)
+
+ let index
+ for (let id in this.indexes) {
+ index = this.indexes[id]
+ if (index >= child) {
+ this.indexes[id] = index - 1
+ }
+ }
+
+ this.markDirty()
+
+ return this
+ }
+
+ replaceValues(pattern, opts, callback) {
+ if (!callback) {
+ callback = opts
+ opts = {}
+ }
+
+ this.walkDecls(decl => {
+ if (opts.props && !opts.props.includes(decl.prop)) return
+ if (opts.fast && !decl.value.includes(opts.fast)) return
+
+ decl.value = decl.value.replace(pattern, callback)
+ })
+
+ this.markDirty()
+
+ return this
+ }
+
+ some(condition) {
+ return this.nodes.some(condition)
+ }
+
+ walk(callback) {
+ return this.each((child, i) => {
+ let result
+ try {
+ result = callback(child, i)
+ } catch (e) {
+ throw child.addToError(e)
+ }
+ if (result !== false && child.walk) {
+ result = child.walk(callback)
+ }
+
+ return result
+ })
+ }
+
+ walkAtRules(name, callback) {
+ if (!callback) {
+ callback = name
+ return this.walk((child, i) => {
+ if (child.type === 'atrule') {
+ return callback(child, i)
+ }
+ })
+ }
+ if (name instanceof RegExp) {
+ return this.walk((child, i) => {
+ if (child.type === 'atrule' && name.test(child.name)) {
+ return callback(child, i)
+ }
+ })
+ }
+ return this.walk((child, i) => {
+ if (child.type === 'atrule' && child.name === name) {
+ return callback(child, i)
+ }
+ })
+ }
+
+ walkComments(callback) {
+ return this.walk((child, i) => {
+ if (child.type === 'comment') {
+ return callback(child, i)
+ }
+ })
+ }
+
+ walkDecls(prop, callback) {
+ if (!callback) {
+ callback = prop
+ return this.walk((child, i) => {
+ if (child.type === 'decl') {
+ return callback(child, i)
+ }
+ })
+ }
+ if (prop instanceof RegExp) {
+ return this.walk((child, i) => {
+ if (child.type === 'decl' && prop.test(child.prop)) {
+ return callback(child, i)
+ }
+ })
+ }
+ return this.walk((child, i) => {
+ if (child.type === 'decl' && child.prop === prop) {
+ return callback(child, i)
+ }
+ })
+ }
+
+ walkRules(selector, callback) {
+ if (!callback) {
+ callback = selector
+
+ return this.walk((child, i) => {
+ if (child.type === 'rule') {
+ return callback(child, i)
+ }
+ })
+ }
+ if (selector instanceof RegExp) {
+ return this.walk((child, i) => {
+ if (child.type === 'rule' && selector.test(child.selector)) {
+ return callback(child, i)
+ }
+ })
+ }
+ return this.walk((child, i) => {
+ if (child.type === 'rule' && child.selector === selector) {
+ return callback(child, i)
+ }
+ })
+ }
+
+ get first() {
+ if (!this.proxyOf.nodes) return undefined
+ return this.proxyOf.nodes[0]
+ }
+
+ get last() {
+ if (!this.proxyOf.nodes) return undefined
+ return this.proxyOf.nodes[this.proxyOf.nodes.length - 1]
+ }
+}
+
+Container.registerParse = dependant => {
+ parse = dependant
+}
+
+Container.registerRule = dependant => {
+ Rule = dependant
+}
+
+Container.registerAtRule = dependant => {
+ AtRule = dependant
+}
+
+Container.registerRoot = dependant => {
+ Root = dependant
+}
+
+module.exports = Container
+Container.default = Container
+
+/* c8 ignore start */
+Container.rebuild = node => {
+ if (node.type === 'atrule') {
+ Object.setPrototypeOf(node, AtRule.prototype)
+ } else if (node.type === 'rule') {
+ Object.setPrototypeOf(node, Rule.prototype)
+ } else if (node.type === 'decl') {
+ Object.setPrototypeOf(node, Declaration.prototype)
+ } else if (node.type === 'comment') {
+ Object.setPrototypeOf(node, Comment.prototype)
+ } else if (node.type === 'root') {
+ Object.setPrototypeOf(node, Root.prototype)
+ }
+
+ node[my] = true
+
+ if (node.nodes) {
+ node.nodes.forEach(child => {
+ Container.rebuild(child)
+ })
+ }
+}
+/* c8 ignore stop */
diff --git a/node_modules/postcss/lib/css-syntax-error.d.ts b/node_modules/postcss/lib/css-syntax-error.d.ts
new file mode 100644
index 0000000..d2d11bf
--- /dev/null
+++ b/node_modules/postcss/lib/css-syntax-error.d.ts
@@ -0,0 +1,248 @@
+import { FilePosition } from './input.js'
+
+declare namespace CssSyntaxError {
+ /**
+ * A position that is part of a range.
+ */
+ export interface RangePosition {
+ /**
+ * The column number in the input.
+ */
+ column: number
+
+ /**
+ * The line number in the input.
+ */
+ line: number
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ export { CssSyntaxError_ as default }
+}
+
+/**
+ * The CSS parser throws this error for broken CSS.
+ *
+ * Custom parsers can throw this error for broken custom syntax using
+ * the `Node#error` method.
+ *
+ * PostCSS will use the input source map to detect the original error location.
+ * If you wrote a Sass file, compiled it to CSS and then parsed it with PostCSS,
+ * PostCSS will show the original position in the Sass file.
+ *
+ * If you need the position in the PostCSS input
+ * (e.g., to debug the previous compiler), use `error.input.file`.
+ *
+ * ```js
+ * // Raising error from plugin
+ * throw node.error('Unknown variable', { plugin: 'postcss-vars' })
+ * ```
+ *
+ * ```js
+ * // Catching and checking syntax error
+ * try {
+ * postcss.parse('a{')
+ * } catch (error) {
+ * if (error.name === 'CssSyntaxError') {
+ * error //=> CssSyntaxError
+ * }
+ * }
+ * ```
+ */
+declare class CssSyntaxError_ {
+ /**
+ * Source column of the error.
+ *
+ * ```js
+ * error.column //=> 1
+ * error.input.column //=> 4
+ * ```
+ *
+ * PostCSS will use the input source map to detect the original location.
+ * If you need the position in the PostCSS input, use `error.input.column`.
+ */
+ column?: number
+
+ /**
+ * Source column of the error's end, exclusive. Provided if the error pertains
+ * to a range.
+ *
+ * ```js
+ * error.endColumn //=> 1
+ * error.input.endColumn //=> 4
+ * ```
+ *
+ * PostCSS will use the input source map to detect the original location.
+ * If you need the position in the PostCSS input, use `error.input.endColumn`.
+ */
+ endColumn?: number
+
+ /**
+ * Source line of the error's end, exclusive. Provided if the error pertains
+ * to a range.
+ *
+ * ```js
+ * error.endLine //=> 3
+ * error.input.endLine //=> 4
+ * ```
+ *
+ * PostCSS will use the input source map to detect the original location.
+ * If you need the position in the PostCSS input, use `error.input.endLine`.
+ */
+ endLine?: number
+
+ /**
+ * Absolute path to the broken file.
+ *
+ * ```js
+ * error.file //=> 'a.sass'
+ * error.input.file //=> 'a.css'
+ * ```
+ *
+ * PostCSS will use the input source map to detect the original location.
+ * If you need the position in the PostCSS input, use `error.input.file`.
+ */
+ file?: string
+
+ /**
+ * Input object with PostCSS internal information
+ * about input file. If input has source map
+ * from previous tool, PostCSS will use origin
+ * (for example, Sass) source. You can use this
+ * object to get PostCSS input source.
+ *
+ * ```js
+ * error.input.file //=> 'a.css'
+ * error.file //=> 'a.sass'
+ * ```
+ */
+ input?: FilePosition
+
+ /**
+ * Source line of the error.
+ *
+ * ```js
+ * error.line //=> 2
+ * error.input.line //=> 4
+ * ```
+ *
+ * PostCSS will use the input source map to detect the original location.
+ * If you need the position in the PostCSS input, use `error.input.line`.
+ */
+ line?: number
+
+ /**
+ * Full error text in the GNU error format
+ * with plugin, file, line and column.
+ *
+ * ```js
+ * error.message //=> 'a.css:1:1: Unclosed block'
+ * ```
+ */
+ message: string
+
+ /**
+ * Always equal to `'CssSyntaxError'`. You should always check error type
+ * by `error.name === 'CssSyntaxError'`
+ * instead of `error instanceof CssSyntaxError`,
+ * because npm could have several PostCSS versions.
+ *
+ * ```js
+ * if (error.name === 'CssSyntaxError') {
+ * error //=> CssSyntaxError
+ * }
+ * ```
+ */
+ name: 'CssSyntaxError'
+
+ /**
+ * Plugin name, if error came from plugin.
+ *
+ * ```js
+ * error.plugin //=> 'postcss-vars'
+ * ```
+ */
+ plugin?: string
+
+ /**
+ * Error message.
+ *
+ * ```js
+ * error.message //=> 'Unclosed block'
+ * ```
+ */
+ reason: string
+
+ /**
+ * Source code of the broken file.
+ *
+ * ```js
+ * error.source //=> 'a { b {} }'
+ * error.input.source //=> 'a b { }'
+ * ```
+ */
+ source?: string
+
+ stack: string
+
+ /**
+ * Instantiates a CSS syntax error. Can be instantiated for a single position
+ * or for a range.
+ * @param message Error message.
+ * @param lineOrStartPos If for a single position, the line number, or if for
+ * a range, the inclusive start position of the error.
+ * @param columnOrEndPos If for a single position, the column number, or if for
+ * a range, the exclusive end position of the error.
+ * @param source Source code of the broken file.
+ * @param file Absolute path to the broken file.
+ * @param plugin PostCSS plugin name, if error came from plugin.
+ */
+ constructor(
+ message: string,
+ lineOrStartPos?: CssSyntaxError.RangePosition | number,
+ columnOrEndPos?: CssSyntaxError.RangePosition | number,
+ source?: string,
+ file?: string,
+ plugin?: string
+ )
+
+ /**
+ * Returns a few lines of CSS source that caused the error.
+ *
+ * If the CSS has an input source map without `sourceContent`,
+ * this method will return an empty string.
+ *
+ * ```js
+ * error.showSourceCode() //=> " 4 | }
+ * // 5 | a {
+ * // > 6 | bad
+ * // | ^
+ * // 7 | }
+ * // 8 | b {"
+ * ```
+ *
+ * @param color Whether arrow will be colored red by terminal
+ * color codes. By default, PostCSS will detect
+ * color support by `process.stdout.isTTY`
+ * and `process.env.NODE_DISABLE_COLORS`.
+ * @return Few lines of CSS source that caused the error.
+ */
+ showSourceCode(color?: boolean): string
+
+ /**
+ * Returns error position, message and source code of the broken part.
+ *
+ * ```js
+ * error.toString() //=> "CssSyntaxError: app.css:1:1: Unclosed block
+ * // > 1 | a {
+ * // | ^"
+ * ```
+ *
+ * @return Error position, message and source code.
+ */
+ toString(): string
+}
+
+declare class CssSyntaxError extends CssSyntaxError_ {}
+
+export = CssSyntaxError
diff --git a/node_modules/postcss/lib/css-syntax-error.js b/node_modules/postcss/lib/css-syntax-error.js
new file mode 100644
index 0000000..1693033
--- /dev/null
+++ b/node_modules/postcss/lib/css-syntax-error.js
@@ -0,0 +1,100 @@
+'use strict'
+
+let pico = require('picocolors')
+
+let terminalHighlight = require('./terminal-highlight')
+
+class CssSyntaxError extends Error {
+ constructor(message, line, column, source, file, plugin) {
+ super(message)
+ this.name = 'CssSyntaxError'
+ this.reason = message
+
+ if (file) {
+ this.file = file
+ }
+ if (source) {
+ this.source = source
+ }
+ if (plugin) {
+ this.plugin = plugin
+ }
+ if (typeof line !== 'undefined' && typeof column !== 'undefined') {
+ if (typeof line === 'number') {
+ this.line = line
+ this.column = column
+ } else {
+ this.line = line.line
+ this.column = line.column
+ this.endLine = column.line
+ this.endColumn = column.column
+ }
+ }
+
+ this.setMessage()
+
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, CssSyntaxError)
+ }
+ }
+
+ setMessage() {
+ this.message = this.plugin ? this.plugin + ': ' : ''
+ this.message += this.file ? this.file : '<css input>'
+ if (typeof this.line !== 'undefined') {
+ this.message += ':' + this.line + ':' + this.column
+ }
+ this.message += ': ' + this.reason
+ }
+
+ showSourceCode(color) {
+ if (!this.source) return ''
+
+ let css = this.source
+ if (color == null) color = pico.isColorSupported
+ if (terminalHighlight) {
+ if (color) css = terminalHighlight(css)
+ }
+
+ let lines = css.split(/\r?\n/)
+ let start = Math.max(this.line - 3, 0)
+ let end = Math.min(this.line + 2, lines.length)
+
+ let maxWidth = String(end).length
+
+ let mark, aside
+ if (color) {
+ let { bold, gray, red } = pico.createColors(true)
+ mark = text => bold(red(text))
+ aside = text => gray(text)
+ } else {
+ mark = aside = str => str
+ }
+
+ return lines
+ .slice(start, end)
+ .map((line, index) => {
+ let number = start + 1 + index
+ let gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | '
+ if (number === this.line) {
+ let spacing =
+ aside(gutter.replace(/\d/g, ' ')) +
+ line.slice(0, this.column - 1).replace(/[^\t]/g, ' ')
+ return mark('>') + aside(gutter) + line + '\n ' + spacing + mark('^')
+ }
+ return ' ' + aside(gutter) + line
+ })
+ .join('\n')
+ }
+
+ toString() {
+ let code = this.showSourceCode()
+ if (code) {
+ code = '\n\n' + code + '\n'
+ }
+ return this.name + ': ' + this.message + code
+ }
+}
+
+module.exports = CssSyntaxError
+CssSyntaxError.default = CssSyntaxError
diff --git a/node_modules/postcss/lib/declaration.d.ts b/node_modules/postcss/lib/declaration.d.ts
new file mode 100644
index 0000000..655deea
--- /dev/null
+++ b/node_modules/postcss/lib/declaration.d.ts
@@ -0,0 +1,148 @@
+import Container from './container.js'
+import Node from './node.js'
+
+declare namespace Declaration {
+ export interface DeclarationRaws extends Record<string, unknown> {
+ /**
+ * The space symbols before the node. It also stores `*`
+ * and `_` symbols before the declaration (IE hack).
+ */
+ before?: string
+
+ /**
+ * The symbols between the property and value for declarations.
+ */
+ between?: string
+
+ /**
+ * The content of the important statement, if it is not just `!important`.
+ */
+ important?: string
+
+ /**
+ * Declaration value with comments.
+ */
+ value?: {
+ raw: string
+ value: string
+ }
+ }
+
+ export interface DeclarationProps {
+ /** Whether the declaration has an `!important` annotation. */
+ important?: boolean
+ /** Name of the declaration. */
+ prop: string
+ /** Information used to generate byte-to-byte equal node string as it was in the origin input. */
+ raws?: DeclarationRaws
+ /** Value of the declaration. */
+ value: string
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ export { Declaration_ as default }
+}
+
+/**
+ * It represents a class that handles
+ * [CSS declarations](https://developer.mozilla.org/en-US/docs/Web/CSS/Syntax#css_declarations)
+ *
+ * ```js
+ * Once (root, { Declaration }) {
+ * const color = new Declaration({ prop: 'color', value: 'black' })
+ * root.append(color)
+ * }
+ * ```
+ *
+ * ```js
+ * const root = postcss.parse('a { color: black }')
+ * const decl = root.first?.first
+ *
+ * decl.type //=> 'decl'
+ * decl.toString() //=> ' color: black'
+ * ```
+ */
+declare class Declaration_ extends Node {
+ /**
+ * It represents a specificity of the declaration.
+ *
+ * If true, the CSS declaration will have an
+ * [important](https://developer.mozilla.org/en-US/docs/Web/CSS/important)
+ * specifier.
+ *
+ * ```js
+ * const root = postcss.parse('a { color: black !important; color: red }')
+ *
+ * root.first.first.important //=> true
+ * root.first.last.important //=> undefined
+ * ```
+ */
+ important: boolean
+
+ parent: Container | undefined
+
+ /**
+ * The property name for a CSS declaration.
+ *
+ * ```js
+ * const root = postcss.parse('a { color: black }')
+ * const decl = root.first.first
+ *
+ * decl.prop //=> 'color'
+ * ```
+ */
+ prop: string
+
+ raws: Declaration.DeclarationRaws
+
+ type: 'decl'
+
+ /**
+ * The property value for a CSS declaration.
+ *
+ * Any CSS comments inside the value string will be filtered out.
+ * CSS comments present in the source value will be available in
+ * the `raws` property.
+ *
+ * Assigning new `value` would ignore the comments in `raws`
+ * property while compiling node to string.
+ *
+ * ```js
+ * const root = postcss.parse('a { color: black }')
+ * const decl = root.first.first
+ *
+ * decl.value //=> 'black'
+ * ```
+ */
+ value: string
+
+ /**
+ * It represents a getter that returns `true` if a declaration starts with
+ * `--` or `$`, which are used to declare variables in CSS and SASS/SCSS.
+ *
+ * ```js
+ * const root = postcss.parse(':root { --one: 1 }')
+ * const one = root.first.first
+ *
+ * one.variable //=> true
+ * ```
+ *
+ * ```js
+ * const root = postcss.parse('$one: 1')
+ * const one = root.first
+ *
+ * one.variable //=> true
+ * ```
+ */
+ variable: boolean
+
+ constructor(defaults?: Declaration.DeclarationProps)
+ assign(overrides: Declaration.DeclarationProps | object): this
+ clone(overrides?: Partial<Declaration.DeclarationProps>): Declaration
+ cloneAfter(overrides?: Partial<Declaration.DeclarationProps>): Declaration
+ cloneBefore(overrides?: Partial<Declaration.DeclarationProps>): Declaration
+}
+
+declare class Declaration extends Declaration_ {}
+
+export = Declaration
diff --git a/node_modules/postcss/lib/declaration.js b/node_modules/postcss/lib/declaration.js
new file mode 100644
index 0000000..a04bdec
--- /dev/null
+++ b/node_modules/postcss/lib/declaration.js
@@ -0,0 +1,24 @@
+'use strict'
+
+let Node = require('./node')
+
+class Declaration extends Node {
+ constructor(defaults) {
+ if (
+ defaults &&
+ typeof defaults.value !== 'undefined' &&
+ typeof defaults.value !== 'string'
+ ) {
+ defaults = { ...defaults, value: String(defaults.value) }
+ }
+ super(defaults)
+ this.type = 'decl'
+ }
+
+ get variable() {
+ return this.prop.startsWith('--') || this.prop[0] === '$'
+ }
+}
+
+module.exports = Declaration
+Declaration.default = Declaration
diff --git a/node_modules/postcss/lib/document.d.ts b/node_modules/postcss/lib/document.d.ts
new file mode 100644
index 0000000..f018f6e
--- /dev/null
+++ b/node_modules/postcss/lib/document.d.ts
@@ -0,0 +1,68 @@
+import Container, { ContainerProps } from './container.js'
+import { ProcessOptions } from './postcss.js'
+import Result from './result.js'
+import Root from './root.js'
+
+declare namespace Document {
+ export interface DocumentProps extends ContainerProps {
+ nodes?: Root[]
+
+ /**
+ * Information to generate byte-to-byte equal node string as it was
+ * in the origin input.
+ *
+ * Every parser saves its own properties.
+ */
+ raws?: Record<string, any>
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ export { Document_ as default }
+}
+
+/**
+ * Represents a file and contains all its parsed nodes.
+ *
+ * **Experimental:** some aspects of this node could change within minor
+ * or patch version releases.
+ *
+ * ```js
+ * const document = htmlParser(
+ * '<html><style>a{color:black}</style><style>b{z-index:2}</style>'
+ * )
+ * document.type //=> 'document'
+ * document.nodes.length //=> 2
+ * ```
+ */
+declare class Document_ extends Container<Root> {
+ parent: undefined
+ type: 'document'
+
+ constructor(defaults?: Document.DocumentProps)
+
+ assign(overrides: Document.DocumentProps | object): this
+ clone(overrides?: Partial<Document.DocumentProps>): Document
+ cloneAfter(overrides?: Partial<Document.DocumentProps>): Document
+ cloneBefore(overrides?: Partial<Document.DocumentProps>): Document
+
+ /**
+ * Returns a `Result` instance representing the document’s CSS roots.
+ *
+ * ```js
+ * const root1 = postcss.parse(css1, { from: 'a.css' })
+ * const root2 = postcss.parse(css2, { from: 'b.css' })
+ * const document = postcss.document()
+ * document.append(root1)
+ * document.append(root2)
+ * const result = document.toResult({ to: 'all.css', map: true })
+ * ```
+ *
+ * @param opts Options.
+ * @return Result with current document’s CSS.
+ */
+ toResult(options?: ProcessOptions): Result
+}
+
+declare class Document extends Document_ {}
+
+export = Document
diff --git a/node_modules/postcss/lib/document.js b/node_modules/postcss/lib/document.js
new file mode 100644
index 0000000..4468991
--- /dev/null
+++ b/node_modules/postcss/lib/document.js
@@ -0,0 +1,33 @@
+'use strict'
+
+let Container = require('./container')
+
+let LazyResult, Processor
+
+class Document extends Container {
+ constructor(defaults) {
+ // type needs to be passed to super, otherwise child roots won't be normalized correctly
+ super({ type: 'document', ...defaults })
+
+ if (!this.nodes) {
+ this.nodes = []
+ }
+ }
+
+ toResult(opts = {}) {
+ let lazy = new LazyResult(new Processor(), this, opts)
+
+ return lazy.stringify()
+ }
+}
+
+Document.registerLazyResult = dependant => {
+ LazyResult = dependant
+}
+
+Document.registerProcessor = dependant => {
+ Processor = dependant
+}
+
+module.exports = Document
+Document.default = Document
diff --git a/node_modules/postcss/lib/fromJSON.d.ts b/node_modules/postcss/lib/fromJSON.d.ts
new file mode 100644
index 0000000..e1deedb
--- /dev/null
+++ b/node_modules/postcss/lib/fromJSON.d.ts
@@ -0,0 +1,9 @@
+import { JSONHydrator } from './postcss.js'
+
+interface FromJSON extends JSONHydrator {
+ default: FromJSON
+}
+
+declare const fromJSON: FromJSON
+
+export = fromJSON
diff --git a/node_modules/postcss/lib/fromJSON.js b/node_modules/postcss/lib/fromJSON.js
new file mode 100644
index 0000000..09f2b89
--- /dev/null
+++ b/node_modules/postcss/lib/fromJSON.js
@@ -0,0 +1,54 @@
+'use strict'
+
+let Declaration = require('./declaration')
+let PreviousMap = require('./previous-map')
+let Comment = require('./comment')
+let AtRule = require('./at-rule')
+let Input = require('./input')
+let Root = require('./root')
+let Rule = require('./rule')
+
+function fromJSON(json, inputs) {
+ if (Array.isArray(json)) return json.map(n => fromJSON(n))
+
+ let { inputs: ownInputs, ...defaults } = json
+ if (ownInputs) {
+ inputs = []
+ for (let input of ownInputs) {
+ let inputHydrated = { ...input, __proto__: Input.prototype }
+ if (inputHydrated.map) {
+ inputHydrated.map = {
+ ...inputHydrated.map,
+ __proto__: PreviousMap.prototype
+ }
+ }
+ inputs.push(inputHydrated)
+ }
+ }
+ if (defaults.nodes) {
+ defaults.nodes = json.nodes.map(n => fromJSON(n, inputs))
+ }
+ if (defaults.source) {
+ let { inputId, ...source } = defaults.source
+ defaults.source = source
+ if (inputId != null) {
+ defaults.source.input = inputs[inputId]
+ }
+ }
+ if (defaults.type === 'root') {
+ return new Root(defaults)
+ } else if (defaults.type === 'decl') {
+ return new Declaration(defaults)
+ } else if (defaults.type === 'rule') {
+ return new Rule(defaults)
+ } else if (defaults.type === 'comment') {
+ return new Comment(defaults)
+ } else if (defaults.type === 'atrule') {
+ return new AtRule(defaults)
+ } else {
+ throw new Error('Unknown node type: ' + json.type)
+ }
+}
+
+module.exports = fromJSON
+fromJSON.default = fromJSON
diff --git a/node_modules/postcss/lib/input.d.ts b/node_modules/postcss/lib/input.d.ts
new file mode 100644
index 0000000..c718bd1
--- /dev/null
+++ b/node_modules/postcss/lib/input.d.ts
@@ -0,0 +1,194 @@
+import { CssSyntaxError, ProcessOptions } from './postcss.js'
+import PreviousMap from './previous-map.js'
+
+declare namespace Input {
+ export interface FilePosition {
+ /**
+ * Column of inclusive start position in source file.
+ */
+ column: number
+
+ /**
+ * Column of exclusive end position in source file.
+ */
+ endColumn?: number
+
+ /**
+ * Line of exclusive end position in source file.
+ */
+ endLine?: number
+
+ /**
+ * Absolute path to the source file.
+ */
+ file?: string
+
+ /**
+ * Line of inclusive start position in source file.
+ */
+ line: number
+
+ /**
+ * Source code.
+ */
+ source?: string
+
+ /**
+ * URL for the source file.
+ */
+ url: string
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ export { Input_ as default }
+}
+
+/**
+ * Represents the source CSS.
+ *
+ * ```js
+ * const root = postcss.parse(css, { from: file })
+ * const input = root.source.input
+ * ```
+ */
+declare class Input_ {
+ /**
+ * Input CSS source.
+ *
+ * ```js
+ * const input = postcss.parse('a{}', { from: file }).input
+ * input.css //=> "a{}"
+ * ```
+ */
+ css: string
+
+ /**
+ * The absolute path to the CSS source file defined
+ * with the `from` option.
+ *
+ * ```js
+ * const root = postcss.parse(css, { from: 'a.css' })
+ * root.source.input.file //=> '/home/ai/a.css'
+ * ```
+ */
+ file?: string
+
+ /**
+ * The flag to indicate whether or not the source code has Unicode BOM.
+ */
+ hasBOM: boolean
+
+ /**
+ * The unique ID of the CSS source. It will be created if `from` option
+ * is not provided (because PostCSS does not know the file path).
+ *
+ * ```js
+ * const root = postcss.parse(css)
+ * root.source.input.file //=> undefined
+ * root.source.input.id //=> "<input css 8LZeVF>"
+ * ```
+ */
+ id?: string
+
+ /**
+ * The input source map passed from a compilation step before PostCSS
+ * (for example, from Sass compiler).
+ *
+ * ```js
+ * root.source.input.map.consumer().sources //=> ['a.sass']
+ * ```
+ */
+ map: PreviousMap
+
+ /**
+ * @param css Input CSS source.
+ * @param opts Process options.
+ */
+ constructor(css: string, opts?: ProcessOptions)
+
+ error(
+ message: string,
+ start:
+ | {
+ column: number
+ line: number
+ }
+ | {
+ offset: number
+ },
+ end:
+ | {
+ column: number
+ line: number
+ }
+ | {
+ offset: number
+ },
+ opts?: { plugin?: CssSyntaxError['plugin'] }
+ ): CssSyntaxError
+
+ /**
+ * Returns `CssSyntaxError` with information about the error and its position.
+ */
+ error(
+ message: string,
+ line: number,
+ column: number,
+ opts?: { plugin?: CssSyntaxError['plugin'] }
+ ): CssSyntaxError
+
+ error(
+ message: string,
+ offset: number,
+ opts?: { plugin?: CssSyntaxError['plugin'] }
+ ): CssSyntaxError
+
+ /**
+ * Converts source offset to line and column.
+ *
+ * @param offset Source offset.
+ */
+ fromOffset(offset: number): { col: number; line: number } | null
+ /**
+ * Reads the input source map and returns a symbol position
+ * in the input source (e.g., in a Sass file that was compiled
+ * to CSS before being passed to PostCSS). Optionally takes an
+ * end position, exclusive.
+ *
+ * ```js
+ * root.source.input.origin(1, 1) //=> { file: 'a.css', line: 3, column: 1 }
+ * root.source.input.origin(1, 1, 1, 4)
+ * //=> { file: 'a.css', line: 3, column: 1, endLine: 3, endColumn: 4 }
+ * ```
+ *
+ * @param line Line for inclusive start position in input CSS.
+ * @param column Column for inclusive start position in input CSS.
+ * @param endLine Line for exclusive end position in input CSS.
+ * @param endColumn Column for exclusive end position in input CSS.
+ *
+ * @return Position in input source.
+ */
+ origin(
+ line: number,
+ column: number,
+ endLine?: number,
+ endColumn?: number
+ ): false | Input.FilePosition
+ /**
+ * The CSS source identifier. Contains `Input#file` if the user
+ * set the `from` option, or `Input#id` if they did not.
+ *
+ * ```js
+ * const root = postcss.parse(css, { from: 'a.css' })
+ * root.source.input.from //=> "/home/ai/a.css"
+ *
+ * const root = postcss.parse(css)
+ * root.source.input.from //=> "<input css 1>"
+ * ```
+ */
+ get from(): string
+}
+
+declare class Input extends Input_ {}
+
+export = Input
diff --git a/node_modules/postcss/lib/input.js b/node_modules/postcss/lib/input.js
new file mode 100644
index 0000000..4b5ee5e
--- /dev/null
+++ b/node_modules/postcss/lib/input.js
@@ -0,0 +1,248 @@
+'use strict'
+
+let { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')
+let { fileURLToPath, pathToFileURL } = require('url')
+let { isAbsolute, resolve } = require('path')
+let { nanoid } = require('nanoid/non-secure')
+
+let terminalHighlight = require('./terminal-highlight')
+let CssSyntaxError = require('./css-syntax-error')
+let PreviousMap = require('./previous-map')
+
+let fromOffsetCache = Symbol('fromOffsetCache')
+
+let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)
+let pathAvailable = Boolean(resolve && isAbsolute)
+
+class Input {
+ constructor(css, opts = {}) {
+ if (
+ css === null ||
+ typeof css === 'undefined' ||
+ (typeof css === 'object' && !css.toString)
+ ) {
+ throw new Error(`PostCSS received ${css} instead of CSS string`)
+ }
+
+ this.css = css.toString()
+
+ if (this.css[0] === '\uFEFF' || this.css[0] === '\uFFFE') {
+ this.hasBOM = true
+ this.css = this.css.slice(1)
+ } else {
+ this.hasBOM = false
+ }
+
+ if (opts.from) {
+ if (
+ !pathAvailable ||
+ /^\w+:\/\//.test(opts.from) ||
+ isAbsolute(opts.from)
+ ) {
+ this.file = opts.from
+ } else {
+ this.file = resolve(opts.from)
+ }
+ }
+
+ if (pathAvailable && sourceMapAvailable) {
+ let map = new PreviousMap(this.css, opts)
+ if (map.text) {
+ this.map = map
+ let file = map.consumer().file
+ if (!this.file && file) this.file = this.mapResolve(file)
+ }
+ }
+
+ if (!this.file) {
+ this.id = '<input css ' + nanoid(6) + '>'
+ }
+ if (this.map) this.map.file = this.from
+ }
+
+ error(message, line, column, opts = {}) {
+ let result, endLine, endColumn
+
+ if (line && typeof line === 'object') {
+ let start = line
+ let end = column
+ if (typeof start.offset === 'number') {
+ let pos = this.fromOffset(start.offset)
+ line = pos.line
+ column = pos.col
+ } else {
+ line = start.line
+ column = start.column
+ }
+ if (typeof end.offset === 'number') {
+ let pos = this.fromOffset(end.offset)
+ endLine = pos.line
+ endColumn = pos.col
+ } else {
+ endLine = end.line
+ endColumn = end.column
+ }
+ } else if (!column) {
+ let pos = this.fromOffset(line)
+ line = pos.line
+ column = pos.col
+ }
+
+ let origin = this.origin(line, column, endLine, endColumn)
+ if (origin) {
+ result = new CssSyntaxError(
+ message,
+ origin.endLine === undefined
+ ? origin.line
+ : { column: origin.column, line: origin.line },
+ origin.endLine === undefined
+ ? origin.column
+ : { column: origin.endColumn, line: origin.endLine },
+ origin.source,
+ origin.file,
+ opts.plugin
+ )
+ } else {
+ result = new CssSyntaxError(
+ message,
+ endLine === undefined ? line : { column, line },
+ endLine === undefined ? column : { column: endColumn, line: endLine },
+ this.css,
+ this.file,
+ opts.plugin
+ )
+ }
+
+ result.input = { column, endColumn, endLine, line, source: this.css }
+ if (this.file) {
+ if (pathToFileURL) {
+ result.input.url = pathToFileURL(this.file).toString()
+ }
+ result.input.file = this.file
+ }
+
+ return result
+ }
+
+ fromOffset(offset) {
+ let lastLine, lineToIndex
+ if (!this[fromOffsetCache]) {
+ let lines = this.css.split('\n')
+ lineToIndex = new Array(lines.length)
+ let prevIndex = 0
+
+ for (let i = 0, l = lines.length; i < l; i++) {
+ lineToIndex[i] = prevIndex
+ prevIndex += lines[i].length + 1
+ }
+
+ this[fromOffsetCache] = lineToIndex
+ } else {
+ lineToIndex = this[fromOffsetCache]
+ }
+ lastLine = lineToIndex[lineToIndex.length - 1]
+
+ let min = 0
+ if (offset >= lastLine) {
+ min = lineToIndex.length - 1
+ } else {
+ let max = lineToIndex.length - 2
+ let mid
+ while (min < max) {
+ mid = min + ((max - min) >> 1)
+ if (offset < lineToIndex[mid]) {
+ max = mid - 1
+ } else if (offset >= lineToIndex[mid + 1]) {
+ min = mid + 1
+ } else {
+ min = mid
+ break
+ }
+ }
+ }
+ return {
+ col: offset - lineToIndex[min] + 1,
+ line: min + 1
+ }
+ }
+
+ mapResolve(file) {
+ if (/^\w+:\/\//.test(file)) {
+ return file
+ }
+ return resolve(this.map.consumer().sourceRoot || this.map.root || '.', file)
+ }
+
+ origin(line, column, endLine, endColumn) {
+ if (!this.map) return false
+ let consumer = this.map.consumer()
+
+ let from = consumer.originalPositionFor({ column, line })
+ if (!from.source) return false
+
+ let to
+ if (typeof endLine === 'number') {
+ to = consumer.originalPositionFor({ column: endColumn, line: endLine })
+ }
+
+ let fromUrl
+
+ if (isAbsolute(from.source)) {
+ fromUrl = pathToFileURL(from.source)
+ } else {
+ fromUrl = new URL(
+ from.source,
+ this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile)
+ )
+ }
+
+ let result = {
+ column: from.column,
+ endColumn: to && to.column,
+ endLine: to && to.line,
+ line: from.line,
+ url: fromUrl.toString()
+ }
+
+ if (fromUrl.protocol === 'file:') {
+ if (fileURLToPath) {
+ result.file = fileURLToPath(fromUrl)
+ } else {
+ /* c8 ignore next 2 */
+ throw new Error(`file: protocol is not available in this PostCSS build`)
+ }
+ }
+
+ let source = consumer.sourceContentFor(from.source)
+ if (source) result.source = source
+
+ return result
+ }
+
+ toJSON() {
+ let json = {}
+ for (let name of ['hasBOM', 'css', 'file', 'id']) {
+ if (this[name] != null) {
+ json[name] = this[name]
+ }
+ }
+ if (this.map) {
+ json.map = { ...this.map }
+ if (json.map.consumerCache) {
+ json.map.consumerCache = undefined
+ }
+ }
+ return json
+ }
+
+ get from() {
+ return this.file || this.id
+ }
+}
+
+module.exports = Input
+Input.default = Input
+
+if (terminalHighlight && terminalHighlight.registerInput) {
+ terminalHighlight.registerInput(Input)
+}
diff --git a/node_modules/postcss/lib/lazy-result.d.ts b/node_modules/postcss/lib/lazy-result.d.ts
new file mode 100644
index 0000000..dd291aa
--- /dev/null
+++ b/node_modules/postcss/lib/lazy-result.d.ts
@@ -0,0 +1,190 @@
+import Document from './document.js'
+import { SourceMap } from './postcss.js'
+import Processor from './processor.js'
+import Result, { Message, ResultOptions } from './result.js'
+import Root from './root.js'
+import Warning from './warning.js'
+
+declare namespace LazyResult {
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ export { LazyResult_ as default }
+}
+
+/**
+ * A Promise proxy for the result of PostCSS transformations.
+ *
+ * A `LazyResult` instance is returned by `Processor#process`.
+ *
+ * ```js
+ * const lazy = postcss([autoprefixer]).process(css)
+ * ```
+ */
+declare class LazyResult_<RootNode = Document | Root>
+ implements PromiseLike<Result<RootNode>>
+{
+ /**
+ * Processes input CSS through synchronous and asynchronous plugins
+ * and calls onRejected for each error thrown in any plugin.
+ *
+ * It implements standard Promise API.
+ *
+ * ```js
+ * postcss([autoprefixer]).process(css).then(result => {
+ * console.log(result.css)
+ * }).catch(error => {
+ * console.error(error)
+ * })
+ * ```
+ */
+ catch: Promise<Result<RootNode>>['catch']
+
+ /**
+ * Processes input CSS through synchronous and asynchronous plugins
+ * and calls onFinally on any error or when all plugins will finish work.
+ *
+ * It implements standard Promise API.
+ *
+ * ```js
+ * postcss([autoprefixer]).process(css).finally(() => {
+ * console.log('processing ended')
+ * })
+ * ```
+ */
+ finally: Promise<Result<RootNode>>['finally']
+
+ /**
+ * Processes input CSS through synchronous and asynchronous plugins
+ * and calls `onFulfilled` with a Result instance. If a plugin throws
+ * an error, the `onRejected` callback will be executed.
+ *
+ * It implements standard Promise API.
+ *
+ * ```js
+ * postcss([autoprefixer]).process(css, { from: cssPath }).then(result => {
+ * console.log(result.css)
+ * })
+ * ```
+ */
+ then: Promise<Result<RootNode>>['then']
+
+ /**
+ * @param processor Processor used for this transformation.
+ * @param css CSS to parse and transform.
+ * @param opts Options from the `Processor#process` or `Root#toResult`.
+ */
+ constructor(processor: Processor, css: string, opts: ResultOptions)
+
+ /**
+ * Run plugin in async way and return `Result`.
+ *
+ * @return Result with output content.
+ */
+ async(): Promise<Result<RootNode>>
+
+ /**
+ * Run plugin in sync way and return `Result`.
+ *
+ * @return Result with output content.
+ */
+ sync(): Result<RootNode>
+
+ /**
+ * Alias for the `LazyResult#css` property.
+ *
+ * ```js
+ * lazy + '' === lazy.css
+ * ```
+ *
+ * @return Output CSS.
+ */
+ toString(): string
+
+ /**
+ * Processes input CSS through synchronous plugins
+ * and calls `Result#warnings`.
+ *
+ * @return Warnings from plugins.
+ */
+ warnings(): Warning[]
+
+ /**
+ * An alias for the `css` property. Use it with syntaxes
+ * that generate non-CSS output.
+ *
+ * This property will only work with synchronous plugins.
+ * If the processor contains any asynchronous plugins
+ * it will throw an error.
+ *
+ * PostCSS runners should always use `LazyResult#then`.
+ */
+ get content(): string
+
+ /**
+ * Processes input CSS through synchronous plugins, converts `Root`
+ * to a CSS string and returns `Result#css`.
+ *
+ * This property will only work with synchronous plugins.
+ * If the processor contains any asynchronous plugins
+ * it will throw an error.
+ *
+ * PostCSS runners should always use `LazyResult#then`.
+ */
+ get css(): string
+
+ /**
+ * Processes input CSS through synchronous plugins
+ * and returns `Result#map`.
+ *
+ * This property will only work with synchronous plugins.
+ * If the processor contains any asynchronous plugins
+ * it will throw an error.
+ *
+ * PostCSS runners should always use `LazyResult#then`.
+ */
+ get map(): SourceMap
+
+ /**
+ * Processes input CSS through synchronous plugins
+ * and returns `Result#messages`.
+ *
+ * This property will only work with synchronous plugins. If the processor
+ * contains any asynchronous plugins it will throw an error.
+ *
+ * PostCSS runners should always use `LazyResult#then`.
+ */
+ get messages(): Message[]
+
+ /**
+ * Options from the `Processor#process` call.
+ */
+ get opts(): ResultOptions
+
+ /**
+ * Returns a `Processor` instance, which will be used
+ * for CSS transformations.
+ */
+ get processor(): Processor
+
+ /**
+ * Processes input CSS through synchronous plugins
+ * and returns `Result#root`.
+ *
+ * This property will only work with synchronous plugins. If the processor
+ * contains any asynchronous plugins it will throw an error.
+ *
+ * PostCSS runners should always use `LazyResult#then`.
+ */
+ get root(): RootNode
+
+ /**
+ * Returns the default string description of an object.
+ * Required to implement the Promise interface.
+ */
+ get [Symbol.toStringTag](): string
+}
+
+declare class LazyResult<
+ RootNode = Document | Root
+> extends LazyResult_<RootNode> {}
+
+export = LazyResult
diff --git a/node_modules/postcss/lib/lazy-result.js b/node_modules/postcss/lib/lazy-result.js
new file mode 100644
index 0000000..126f40c
--- /dev/null
+++ b/node_modules/postcss/lib/lazy-result.js
@@ -0,0 +1,550 @@
+'use strict'
+
+let { isClean, my } = require('./symbols')
+let MapGenerator = require('./map-generator')
+let stringify = require('./stringify')
+let Container = require('./container')
+let Document = require('./document')
+let warnOnce = require('./warn-once')
+let Result = require('./result')
+let parse = require('./parse')
+let Root = require('./root')
+
+const TYPE_TO_CLASS_NAME = {
+ atrule: 'AtRule',
+ comment: 'Comment',
+ decl: 'Declaration',
+ document: 'Document',
+ root: 'Root',
+ rule: 'Rule'
+}
+
+const PLUGIN_PROPS = {
+ AtRule: true,
+ AtRuleExit: true,
+ Comment: true,
+ CommentExit: true,
+ Declaration: true,
+ DeclarationExit: true,
+ Document: true,
+ DocumentExit: true,
+ Once: true,
+ OnceExit: true,
+ postcssPlugin: true,
+ prepare: true,
+ Root: true,
+ RootExit: true,
+ Rule: true,
+ RuleExit: true
+}
+
+const NOT_VISITORS = {
+ Once: true,
+ postcssPlugin: true,
+ prepare: true
+}
+
+const CHILDREN = 0
+
+function isPromise(obj) {
+ return typeof obj === 'object' && typeof obj.then === 'function'
+}
+
+function getEvents(node) {
+ let key = false
+ let type = TYPE_TO_CLASS_NAME[node.type]
+ if (node.type === 'decl') {
+ key = node.prop.toLowerCase()
+ } else if (node.type === 'atrule') {
+ key = node.name.toLowerCase()
+ }
+
+ if (key && node.append) {
+ return [
+ type,
+ type + '-' + key,
+ CHILDREN,
+ type + 'Exit',
+ type + 'Exit-' + key
+ ]
+ } else if (key) {
+ return [type, type + '-' + key, type + 'Exit', type + 'Exit-' + key]
+ } else if (node.append) {
+ return [type, CHILDREN, type + 'Exit']
+ } else {
+ return [type, type + 'Exit']
+ }
+}
+
+function toStack(node) {
+ let events
+ if (node.type === 'document') {
+ events = ['Document', CHILDREN, 'DocumentExit']
+ } else if (node.type === 'root') {
+ events = ['Root', CHILDREN, 'RootExit']
+ } else {
+ events = getEvents(node)
+ }
+
+ return {
+ eventIndex: 0,
+ events,
+ iterator: 0,
+ node,
+ visitorIndex: 0,
+ visitors: []
+ }
+}
+
+function cleanMarks(node) {
+ node[isClean] = false
+ if (node.nodes) node.nodes.forEach(i => cleanMarks(i))
+ return node
+}
+
+let postcss = {}
+
+class LazyResult {
+ constructor(processor, css, opts) {
+ this.stringified = false
+ this.processed = false
+
+ let root
+ if (
+ typeof css === 'object' &&
+ css !== null &&
+ (css.type === 'root' || css.type === 'document')
+ ) {
+ root = cleanMarks(css)
+ } else if (css instanceof LazyResult || css instanceof Result) {
+ root = cleanMarks(css.root)
+ if (css.map) {
+ if (typeof opts.map === 'undefined') opts.map = {}
+ if (!opts.map.inline) opts.map.inline = false
+ opts.map.prev = css.map
+ }
+ } else {
+ let parser = parse
+ if (opts.syntax) parser = opts.syntax.parse
+ if (opts.parser) parser = opts.parser
+ if (parser.parse) parser = parser.parse
+
+ try {
+ root = parser(css, opts)
+ } catch (error) {
+ this.processed = true
+ this.error = error
+ }
+
+ if (root && !root[my]) {
+ /* c8 ignore next 2 */
+ Container.rebuild(root)
+ }
+ }
+
+ this.result = new Result(processor, root, opts)
+ this.helpers = { ...postcss, postcss, result: this.result }
+ this.plugins = this.processor.plugins.map(plugin => {
+ if (typeof plugin === 'object' && plugin.prepare) {
+ return { ...plugin, ...plugin.prepare(this.result) }
+ } else {
+ return plugin
+ }
+ })
+ }
+
+ async() {
+ if (this.error) return Promise.reject(this.error)
+ if (this.processed) return Promise.resolve(this.result)
+ if (!this.processing) {
+ this.processing = this.runAsync()
+ }
+ return this.processing
+ }
+
+ catch(onRejected) {
+ return this.async().catch(onRejected)
+ }
+
+ finally(onFinally) {
+ return this.async().then(onFinally, onFinally)
+ }
+
+ getAsyncError() {
+ throw new Error('Use process(css).then(cb) to work with async plugins')
+ }
+
+ handleError(error, node) {
+ let plugin = this.result.lastPlugin
+ try {
+ if (node) node.addToError(error)
+ this.error = error
+ if (error.name === 'CssSyntaxError' && !error.plugin) {
+ error.plugin = plugin.postcssPlugin
+ error.setMessage()
+ } else if (plugin.postcssVersion) {
+ if (process.env.NODE_ENV !== 'production') {
+ let pluginName = plugin.postcssPlugin
+ let pluginVer = plugin.postcssVersion
+ let runtimeVer = this.result.processor.version
+ let a = pluginVer.split('.')
+ let b = runtimeVer.split('.')
+
+ if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {
+ // eslint-disable-next-line no-console
+ console.error(
+ 'Unknown error from PostCSS plugin. Your current PostCSS ' +
+ 'version is ' +
+ runtimeVer +
+ ', but ' +
+ pluginName +
+ ' uses ' +
+ pluginVer +
+ '. Perhaps this is the source of the error below.'
+ )
+ }
+ }
+ }
+ } catch (err) {
+ /* c8 ignore next 3 */
+ // eslint-disable-next-line no-console
+ if (console && console.error) console.error(err)
+ }
+ return error
+ }
+
+ prepareVisitors() {
+ this.listeners = {}
+ let add = (plugin, type, cb) => {
+ if (!this.listeners[type]) this.listeners[type] = []
+ this.listeners[type].push([plugin, cb])
+ }
+ for (let plugin of this.plugins) {
+ if (typeof plugin === 'object') {
+ for (let event in plugin) {
+ if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {
+ throw new Error(
+ `Unknown event ${event} in ${plugin.postcssPlugin}. ` +
+ `Try to update PostCSS (${this.processor.version} now).`
+ )
+ }
+ if (!NOT_VISITORS[event]) {
+ if (typeof plugin[event] === 'object') {
+ for (let filter in plugin[event]) {
+ if (filter === '*') {
+ add(plugin, event, plugin[event][filter])
+ } else {
+ add(
+ plugin,
+ event + '-' + filter.toLowerCase(),
+ plugin[event][filter]
+ )
+ }
+ }
+ } else if (typeof plugin[event] === 'function') {
+ add(plugin, event, plugin[event])
+ }
+ }
+ }
+ }
+ }
+ this.hasListener = Object.keys(this.listeners).length > 0
+ }
+
+ async runAsync() {
+ this.plugin = 0
+ for (let i = 0; i < this.plugins.length; i++) {
+ let plugin = this.plugins[i]
+ let promise = this.runOnRoot(plugin)
+ if (isPromise(promise)) {
+ try {
+ await promise
+ } catch (error) {
+ throw this.handleError(error)
+ }
+ }
+ }
+
+ this.prepareVisitors()
+ if (this.hasListener) {
+ let root = this.result.root
+ while (!root[isClean]) {
+ root[isClean] = true
+ let stack = [toStack(root)]
+ while (stack.length > 0) {
+ let promise = this.visitTick(stack)
+ if (isPromise(promise)) {
+ try {
+ await promise
+ } catch (e) {
+ let node = stack[stack.length - 1].node
+ throw this.handleError(e, node)
+ }
+ }
+ }
+ }
+
+ if (this.listeners.OnceExit) {
+ for (let [plugin, visitor] of this.listeners.OnceExit) {
+ this.result.lastPlugin = plugin
+ try {
+ if (root.type === 'document') {
+ let roots = root.nodes.map(subRoot =>
+ visitor(subRoot, this.helpers)
+ )
+
+ await Promise.all(roots)
+ } else {
+ await visitor(root, this.helpers)
+ }
+ } catch (e) {
+ throw this.handleError(e)
+ }
+ }
+ }
+ }
+
+ this.processed = true
+ return this.stringify()
+ }
+
+ runOnRoot(plugin) {
+ this.result.lastPlugin = plugin
+ try {
+ if (typeof plugin === 'object' && plugin.Once) {
+ if (this.result.root.type === 'document') {
+ let roots = this.result.root.nodes.map(root =>
+ plugin.Once(root, this.helpers)
+ )
+
+ if (isPromise(roots[0])) {
+ return Promise.all(roots)
+ }
+
+ return roots
+ }
+
+ return plugin.Once(this.result.root, this.helpers)
+ } else if (typeof plugin === 'function') {
+ return plugin(this.result.root, this.result)
+ }
+ } catch (error) {
+ throw this.handleError(error)
+ }
+ }
+
+ stringify() {
+ if (this.error) throw this.error
+ if (this.stringified) return this.result
+ this.stringified = true
+
+ this.sync()
+
+ let opts = this.result.opts
+ let str = stringify
+ if (opts.syntax) str = opts.syntax.stringify
+ if (opts.stringifier) str = opts.stringifier
+ if (str.stringify) str = str.stringify
+
+ let map = new MapGenerator(str, this.result.root, this.result.opts)
+ let data = map.generate()
+ this.result.css = data[0]
+ this.result.map = data[1]
+
+ return this.result
+ }
+
+ sync() {
+ if (this.error) throw this.error
+ if (this.processed) return this.result
+ this.processed = true
+
+ if (this.processing) {
+ throw this.getAsyncError()
+ }
+
+ for (let plugin of this.plugins) {
+ let promise = this.runOnRoot(plugin)
+ if (isPromise(promise)) {
+ throw this.getAsyncError()
+ }
+ }
+
+ this.prepareVisitors()
+ if (this.hasListener) {
+ let root = this.result.root
+ while (!root[isClean]) {
+ root[isClean] = true
+ this.walkSync(root)
+ }
+ if (this.listeners.OnceExit) {
+ if (root.type === 'document') {
+ for (let subRoot of root.nodes) {
+ this.visitSync(this.listeners.OnceExit, subRoot)
+ }
+ } else {
+ this.visitSync(this.listeners.OnceExit, root)
+ }
+ }
+ }
+
+ return this.result
+ }
+
+ then(onFulfilled, onRejected) {
+ if (process.env.NODE_ENV !== 'production') {
+ if (!('from' in this.opts)) {
+ warnOnce(
+ 'Without `from` option PostCSS could generate wrong source map ' +
+ 'and will not find Browserslist config. Set it to CSS file path ' +
+ 'or to `undefined` to prevent this warning.'
+ )
+ }
+ }
+ return this.async().then(onFulfilled, onRejected)
+ }
+
+ toString() {
+ return this.css
+ }
+
+ visitSync(visitors, node) {
+ for (let [plugin, visitor] of visitors) {
+ this.result.lastPlugin = plugin
+ let promise
+ try {
+ promise = visitor(node, this.helpers)
+ } catch (e) {
+ throw this.handleError(e, node.proxyOf)
+ }
+ if (node.type !== 'root' && node.type !== 'document' && !node.parent) {
+ return true
+ }
+ if (isPromise(promise)) {
+ throw this.getAsyncError()
+ }
+ }
+ }
+
+ visitTick(stack) {
+ let visit = stack[stack.length - 1]
+ let { node, visitors } = visit
+
+ if (node.type !== 'root' && node.type !== 'document' && !node.parent) {
+ stack.pop()
+ return
+ }
+
+ if (visitors.length > 0 && visit.visitorIndex < visitors.length) {
+ let [plugin, visitor] = visitors[visit.visitorIndex]
+ visit.visitorIndex += 1
+ if (visit.visitorIndex === visitors.length) {
+ visit.visitors = []
+ visit.visitorIndex = 0
+ }
+ this.result.lastPlugin = plugin
+ try {
+ return visitor(node.toProxy(), this.helpers)
+ } catch (e) {
+ throw this.handleError(e, node)
+ }
+ }
+
+ if (visit.iterator !== 0) {
+ let iterator = visit.iterator
+ let child
+ while ((child = node.nodes[node.indexes[iterator]])) {
+ node.indexes[iterator] += 1
+ if (!child[isClean]) {
+ child[isClean] = true
+ stack.push(toStack(child))
+ return
+ }
+ }
+ visit.iterator = 0
+ delete node.indexes[iterator]
+ }
+
+ let events = visit.events
+ while (visit.eventIndex < events.length) {
+ let event = events[visit.eventIndex]
+ visit.eventIndex += 1
+ if (event === CHILDREN) {
+ if (node.nodes && node.nodes.length) {
+ node[isClean] = true
+ visit.iterator = node.getIterator()
+ }
+ return
+ } else if (this.listeners[event]) {
+ visit.visitors = this.listeners[event]
+ return
+ }
+ }
+ stack.pop()
+ }
+
+ walkSync(node) {
+ node[isClean] = true
+ let events = getEvents(node)
+ for (let event of events) {
+ if (event === CHILDREN) {
+ if (node.nodes) {
+ node.each(child => {
+ if (!child[isClean]) this.walkSync(child)
+ })
+ }
+ } else {
+ let visitors = this.listeners[event]
+ if (visitors) {
+ if (this.visitSync(visitors, node.toProxy())) return
+ }
+ }
+ }
+ }
+
+ warnings() {
+ return this.sync().warnings()
+ }
+
+ get content() {
+ return this.stringify().content
+ }
+
+ get css() {
+ return this.stringify().css
+ }
+
+ get map() {
+ return this.stringify().map
+ }
+
+ get messages() {
+ return this.sync().messages
+ }
+
+ get opts() {
+ return this.result.opts
+ }
+
+ get processor() {
+ return this.result.processor
+ }
+
+ get root() {
+ return this.sync().root
+ }
+
+ get [Symbol.toStringTag]() {
+ return 'LazyResult'
+ }
+}
+
+LazyResult.registerPostcss = dependant => {
+ postcss = dependant
+}
+
+module.exports = LazyResult
+LazyResult.default = LazyResult
+
+Root.registerLazyResult(LazyResult)
+Document.registerLazyResult(LazyResult)
diff --git a/node_modules/postcss/lib/list.d.ts b/node_modules/postcss/lib/list.d.ts
new file mode 100644
index 0000000..1a74d74
--- /dev/null
+++ b/node_modules/postcss/lib/list.d.ts
@@ -0,0 +1,57 @@
+declare namespace list {
+ type List = {
+ /**
+ * Safely splits comma-separated values (such as those for `transition-*`
+ * and `background` properties).
+ *
+ * ```js
+ * Once (root, { list }) {
+ * list.comma('black, linear-gradient(white, black)')
+ * //=> ['black', 'linear-gradient(white, black)']
+ * }
+ * ```
+ *
+ * @param str Comma-separated values.
+ * @return Split values.
+ */
+ comma(str: string): string[]
+
+ default: List
+
+ /**
+ * Safely splits space-separated values (such as those for `background`,
+ * `border-radius`, and other shorthand properties).
+ *
+ * ```js
+ * Once (root, { list }) {
+ * list.space('1px calc(10% + 1px)') //=> ['1px', 'calc(10% + 1px)']
+ * }
+ * ```
+ *
+ * @param str Space-separated values.
+ * @return Split values.
+ */
+ space(str: string): string[]
+
+ /**
+ * Safely splits values.
+ *
+ * ```js
+ * Once (root, { list }) {
+ * list.split('1px calc(10% + 1px)', [' ', '\n', '\t']) //=> ['1px', 'calc(10% + 1px)']
+ * }
+ * ```
+ *
+ * @param string separated values.
+ * @param separators array of separators.
+ * @param last boolean indicator.
+ * @return Split values.
+ */
+ split(string: string, separators: string[], last: boolean): string[]
+ }
+}
+
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+declare const list: list.List
+
+export = list
diff --git a/node_modules/postcss/lib/list.js b/node_modules/postcss/lib/list.js
new file mode 100644
index 0000000..1b31f98
--- /dev/null
+++ b/node_modules/postcss/lib/list.js
@@ -0,0 +1,58 @@
+'use strict'
+
+let list = {
+ comma(string) {
+ return list.split(string, [','], true)
+ },
+
+ space(string) {
+ let spaces = [' ', '\n', '\t']
+ return list.split(string, spaces)
+ },
+
+ split(string, separators, last) {
+ let array = []
+ let current = ''
+ let split = false
+
+ let func = 0
+ let inQuote = false
+ let prevQuote = ''
+ let escape = false
+
+ for (let letter of string) {
+ if (escape) {
+ escape = false
+ } else if (letter === '\\') {
+ escape = true
+ } else if (inQuote) {
+ if (letter === prevQuote) {
+ inQuote = false
+ }
+ } else if (letter === '"' || letter === "'") {
+ inQuote = true
+ prevQuote = letter
+ } else if (letter === '(') {
+ func += 1
+ } else if (letter === ')') {
+ if (func > 0) func -= 1
+ } else if (func === 0) {
+ if (separators.includes(letter)) split = true
+ }
+
+ if (split) {
+ if (current !== '') array.push(current.trim())
+ current = ''
+ split = false
+ } else {
+ current += letter
+ }
+ }
+
+ if (last || current !== '') array.push(current.trim())
+ return array
+ }
+}
+
+module.exports = list
+list.default = list
diff --git a/node_modules/postcss/lib/map-generator.js b/node_modules/postcss/lib/map-generator.js
new file mode 100644
index 0000000..523b463
--- /dev/null
+++ b/node_modules/postcss/lib/map-generator.js
@@ -0,0 +1,359 @@
+'use strict'
+
+let { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')
+let { dirname, relative, resolve, sep } = require('path')
+let { pathToFileURL } = require('url')
+
+let Input = require('./input')
+
+let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)
+let pathAvailable = Boolean(dirname && resolve && relative && sep)
+
+class MapGenerator {
+ constructor(stringify, root, opts, cssString) {
+ this.stringify = stringify
+ this.mapOpts = opts.map || {}
+ this.root = root
+ this.opts = opts
+ this.css = cssString
+ this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute
+
+ this.memoizedFileURLs = new Map()
+ this.memoizedPaths = new Map()
+ this.memoizedURLs = new Map()
+ }
+
+ addAnnotation() {
+ let content
+
+ if (this.isInline()) {
+ content =
+ 'data:application/json;base64,' + this.toBase64(this.map.toString())
+ } else if (typeof this.mapOpts.annotation === 'string') {
+ content = this.mapOpts.annotation
+ } else if (typeof this.mapOpts.annotation === 'function') {
+ content = this.mapOpts.annotation(this.opts.to, this.root)
+ } else {
+ content = this.outputFile() + '.map'
+ }
+ let eol = '\n'
+ if (this.css.includes('\r\n')) eol = '\r\n'
+
+ this.css += eol + '/*# sourceMappingURL=' + content + ' */'
+ }
+
+ applyPrevMaps() {
+ for (let prev of this.previous()) {
+ let from = this.toUrl(this.path(prev.file))
+ let root = prev.root || dirname(prev.file)
+ let map
+
+ if (this.mapOpts.sourcesContent === false) {
+ map = new SourceMapConsumer(prev.text)
+ if (map.sourcesContent) {
+ map.sourcesContent = map.sourcesContent.map(() => null)
+ }
+ } else {
+ map = prev.consumer()
+ }
+
+ this.map.applySourceMap(map, from, this.toUrl(this.path(root)))
+ }
+ }
+
+ clearAnnotation() {
+ if (this.mapOpts.annotation === false) return
+
+ if (this.root) {
+ let node
+ for (let i = this.root.nodes.length - 1; i >= 0; i--) {
+ node = this.root.nodes[i]
+ if (node.type !== 'comment') continue
+ if (node.text.indexOf('# sourceMappingURL=') === 0) {
+ this.root.removeChild(i)
+ }
+ }
+ } else if (this.css) {
+ this.css = this.css.replace(/(\n)?\/\*#[\S\s]*?\*\/$/gm, '')
+ }
+ }
+
+ generate() {
+ this.clearAnnotation()
+ if (pathAvailable && sourceMapAvailable && this.isMap()) {
+ return this.generateMap()
+ } else {
+ let result = ''
+ this.stringify(this.root, i => {
+ result += i
+ })
+ return [result]
+ }
+ }
+
+ generateMap() {
+ if (this.root) {
+ this.generateString()
+ } else if (this.previous().length === 1) {
+ let prev = this.previous()[0].consumer()
+ prev.file = this.outputFile()
+ this.map = SourceMapGenerator.fromSourceMap(prev)
+ } else {
+ this.map = new SourceMapGenerator({ file: this.outputFile() })
+ this.map.addMapping({
+ generated: { column: 0, line: 1 },
+ original: { column: 0, line: 1 },
+ source: this.opts.from
+ ? this.toUrl(this.path(this.opts.from))
+ : '<no source>'
+ })
+ }
+
+ if (this.isSourcesContent()) this.setSourcesContent()
+ if (this.root && this.previous().length > 0) this.applyPrevMaps()
+ if (this.isAnnotation()) this.addAnnotation()
+
+ if (this.isInline()) {
+ return [this.css]
+ } else {
+ return [this.css, this.map]
+ }
+ }
+
+ generateString() {
+ this.css = ''
+ this.map = new SourceMapGenerator({ file: this.outputFile() })
+
+ let line = 1
+ let column = 1
+
+ let noSource = '<no source>'
+ let mapping = {
+ generated: { column: 0, line: 0 },
+ original: { column: 0, line: 0 },
+ source: ''
+ }
+
+ let lines, last
+ this.stringify(this.root, (str, node, type) => {
+ this.css += str
+
+ if (node && type !== 'end') {
+ mapping.generated.line = line
+ mapping.generated.column = column - 1
+ if (node.source && node.source.start) {
+ mapping.source = this.sourcePath(node)
+ mapping.original.line = node.source.start.line
+ mapping.original.column = node.source.start.column - 1
+ this.map.addMapping(mapping)
+ } else {
+ mapping.source = noSource
+ mapping.original.line = 1
+ mapping.original.column = 0
+ this.map.addMapping(mapping)
+ }
+ }
+
+ lines = str.match(/\n/g)
+ if (lines) {
+ line += lines.length
+ last = str.lastIndexOf('\n')
+ column = str.length - last
+ } else {
+ column += str.length
+ }
+
+ if (node && type !== 'start') {
+ let p = node.parent || { raws: {} }
+ let childless =
+ node.type === 'decl' || (node.type === 'atrule' && !node.nodes)
+ if (!childless || node !== p.last || p.raws.semicolon) {
+ if (node.source && node.source.end) {
+ mapping.source = this.sourcePath(node)
+ mapping.original.line = node.source.end.line
+ mapping.original.column = node.source.end.column - 1
+ mapping.generated.line = line
+ mapping.generated.column = column - 2
+ this.map.addMapping(mapping)
+ } else {
+ mapping.source = noSource
+ mapping.original.line = 1
+ mapping.original.column = 0
+ mapping.generated.line = line
+ mapping.generated.column = column - 1
+ this.map.addMapping(mapping)
+ }
+ }
+ }
+ })
+ }
+
+ isAnnotation() {
+ if (this.isInline()) {
+ return true
+ }
+ if (typeof this.mapOpts.annotation !== 'undefined') {
+ return this.mapOpts.annotation
+ }
+ if (this.previous().length) {
+ return this.previous().some(i => i.annotation)
+ }
+ return true
+ }
+
+ isInline() {
+ if (typeof this.mapOpts.inline !== 'undefined') {
+ return this.mapOpts.inline
+ }
+
+ let annotation = this.mapOpts.annotation
+ if (typeof annotation !== 'undefined' && annotation !== true) {
+ return false
+ }
+
+ if (this.previous().length) {
+ return this.previous().some(i => i.inline)
+ }
+ return true
+ }
+
+ isMap() {
+ if (typeof this.opts.map !== 'undefined') {
+ return !!this.opts.map
+ }
+ return this.previous().length > 0
+ }
+
+ isSourcesContent() {
+ if (typeof this.mapOpts.sourcesContent !== 'undefined') {
+ return this.mapOpts.sourcesContent
+ }
+ if (this.previous().length) {
+ return this.previous().some(i => i.withContent())
+ }
+ return true
+ }
+
+ outputFile() {
+ if (this.opts.to) {
+ return this.path(this.opts.to)
+ } else if (this.opts.from) {
+ return this.path(this.opts.from)
+ } else {
+ return 'to.css'
+ }
+ }
+
+ path(file) {
+ if (this.mapOpts.absolute) return file
+ if (file.charCodeAt(0) === 60 /* `<` */) return file
+ if (/^\w+:\/\//.test(file)) return file
+ let cached = this.memoizedPaths.get(file)
+ if (cached) return cached
+
+ let from = this.opts.to ? dirname(this.opts.to) : '.'
+
+ if (typeof this.mapOpts.annotation === 'string') {
+ from = dirname(resolve(from, this.mapOpts.annotation))
+ }
+
+ let path = relative(from, file)
+ this.memoizedPaths.set(file, path)
+
+ return path
+ }
+
+ previous() {
+ if (!this.previousMaps) {
+ this.previousMaps = []
+ if (this.root) {
+ this.root.walk(node => {
+ if (node.source && node.source.input.map) {
+ let map = node.source.input.map
+ if (!this.previousMaps.includes(map)) {
+ this.previousMaps.push(map)
+ }
+ }
+ })
+ } else {
+ let input = new Input(this.css, this.opts)
+ if (input.map) this.previousMaps.push(input.map)
+ }
+ }
+
+ return this.previousMaps
+ }
+
+ setSourcesContent() {
+ let already = {}
+ if (this.root) {
+ this.root.walk(node => {
+ if (node.source) {
+ let from = node.source.input.from
+ if (from && !already[from]) {
+ already[from] = true
+ let fromUrl = this.usesFileUrls
+ ? this.toFileUrl(from)
+ : this.toUrl(this.path(from))
+ this.map.setSourceContent(fromUrl, node.source.input.css)
+ }
+ }
+ })
+ } else if (this.css) {
+ let from = this.opts.from
+ ? this.toUrl(this.path(this.opts.from))
+ : '<no source>'
+ this.map.setSourceContent(from, this.css)
+ }
+ }
+
+ sourcePath(node) {
+ if (this.mapOpts.from) {
+ return this.toUrl(this.mapOpts.from)
+ } else if (this.usesFileUrls) {
+ return this.toFileUrl(node.source.input.from)
+ } else {
+ return this.toUrl(this.path(node.source.input.from))
+ }
+ }
+
+ toBase64(str) {
+ if (Buffer) {
+ return Buffer.from(str).toString('base64')
+ } else {
+ return window.btoa(unescape(encodeURIComponent(str)))
+ }
+ }
+
+ toFileUrl(path) {
+ let cached = this.memoizedFileURLs.get(path)
+ if (cached) return cached
+
+ if (pathToFileURL) {
+ let fileURL = pathToFileURL(path).toString()
+ this.memoizedFileURLs.set(path, fileURL)
+
+ return fileURL
+ } else {
+ throw new Error(
+ '`map.absolute` option is not available in this PostCSS build'
+ )
+ }
+ }
+
+ toUrl(path) {
+ let cached = this.memoizedURLs.get(path)
+ if (cached) return cached
+
+ if (sep === '\\') {
+ path = path.replace(/\\/g, '/')
+ }
+
+ let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent)
+ this.memoizedURLs.set(path, url)
+
+ return url
+ }
+}
+
+module.exports = MapGenerator
diff --git a/node_modules/postcss/lib/no-work-result.d.ts b/node_modules/postcss/lib/no-work-result.d.ts
new file mode 100644
index 0000000..8039076
--- /dev/null
+++ b/node_modules/postcss/lib/no-work-result.d.ts
@@ -0,0 +1,46 @@
+import LazyResult from './lazy-result.js'
+import { SourceMap } from './postcss.js'
+import Processor from './processor.js'
+import Result, { Message, ResultOptions } from './result.js'
+import Root from './root.js'
+import Warning from './warning.js'
+
+declare namespace NoWorkResult {
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ export { NoWorkResult_ as default }
+}
+
+/**
+ * A Promise proxy for the result of PostCSS transformations.
+ * This lazy result instance doesn't parse css unless `NoWorkResult#root` or `Result#root`
+ * are accessed. See the example below for details.
+ * A `NoWork` instance is returned by `Processor#process` ONLY when no plugins defined.
+ *
+ * ```js
+ * const noWorkResult = postcss().process(css) // No plugins are defined.
+ * // CSS is not parsed
+ * let root = noWorkResult.root // now css is parsed because we accessed the root
+ * ```
+ */
+declare class NoWorkResult_ implements LazyResult<Root> {
+ catch: Promise<Result<Root>>['catch']
+ finally: Promise<Result<Root>>['finally']
+ then: Promise<Result<Root>>['then']
+ constructor(processor: Processor, css: string, opts: ResultOptions)
+ async(): Promise<Result<Root>>
+ sync(): Result<Root>
+ toString(): string
+ warnings(): Warning[]
+ get content(): string
+ get css(): string
+ get map(): SourceMap
+ get messages(): Message[]
+ get opts(): ResultOptions
+ get processor(): Processor
+ get root(): Root
+ get [Symbol.toStringTag](): string
+}
+
+declare class NoWorkResult extends NoWorkResult_ {}
+
+export = NoWorkResult
diff --git a/node_modules/postcss/lib/no-work-result.js b/node_modules/postcss/lib/no-work-result.js
new file mode 100644
index 0000000..a0609f7
--- /dev/null
+++ b/node_modules/postcss/lib/no-work-result.js
@@ -0,0 +1,135 @@
+'use strict'
+
+let MapGenerator = require('./map-generator')
+let stringify = require('./stringify')
+let warnOnce = require('./warn-once')
+let parse = require('./parse')
+const Result = require('./result')
+
+class NoWorkResult {
+ constructor(processor, css, opts) {
+ css = css.toString()
+ this.stringified = false
+
+ this._processor = processor
+ this._css = css
+ this._opts = opts
+ this._map = undefined
+ let root
+
+ let str = stringify
+ this.result = new Result(this._processor, root, this._opts)
+ this.result.css = css
+
+ let self = this
+ Object.defineProperty(this.result, 'root', {
+ get() {
+ return self.root
+ }
+ })
+
+ let map = new MapGenerator(str, root, this._opts, css)
+ if (map.isMap()) {
+ let [generatedCSS, generatedMap] = map.generate()
+ if (generatedCSS) {
+ this.result.css = generatedCSS
+ }
+ if (generatedMap) {
+ this.result.map = generatedMap
+ }
+ }
+ }
+
+ async() {
+ if (this.error) return Promise.reject(this.error)
+ return Promise.resolve(this.result)
+ }
+
+ catch(onRejected) {
+ return this.async().catch(onRejected)
+ }
+
+ finally(onFinally) {
+ return this.async().then(onFinally, onFinally)
+ }
+
+ sync() {
+ if (this.error) throw this.error
+ return this.result
+ }
+
+ then(onFulfilled, onRejected) {
+ if (process.env.NODE_ENV !== 'production') {
+ if (!('from' in this._opts)) {
+ warnOnce(
+ 'Without `from` option PostCSS could generate wrong source map ' +
+ 'and will not find Browserslist config. Set it to CSS file path ' +
+ 'or to `undefined` to prevent this warning.'
+ )
+ }
+ }
+
+ return this.async().then(onFulfilled, onRejected)
+ }
+
+ toString() {
+ return this._css
+ }
+
+ warnings() {
+ return []
+ }
+
+ get content() {
+ return this.result.css
+ }
+
+ get css() {
+ return this.result.css
+ }
+
+ get map() {
+ return this.result.map
+ }
+
+ get messages() {
+ return []
+ }
+
+ get opts() {
+ return this.result.opts
+ }
+
+ get processor() {
+ return this.result.processor
+ }
+
+ get root() {
+ if (this._root) {
+ return this._root
+ }
+
+ let root
+ let parser = parse
+
+ try {
+ root = parser(this._css, this._opts)
+ } catch (error) {
+ this.error = error
+ }
+
+ if (this.error) {
+ throw this.error
+ } else {
+ this._root = root
+ return root
+ }
+ }
+
+ get [Symbol.toStringTag]() {
+ return 'NoWorkResult'
+ }
+}
+
+module.exports = NoWorkResult
+NoWorkResult.default = NoWorkResult
diff --git a/node_modules/postcss/lib/node.d.ts b/node_modules/postcss/lib/node.d.ts
new file mode 100644
index 0000000..71b3015
--- /dev/null
+++ b/node_modules/postcss/lib/node.d.ts
@@ -0,0 +1,536 @@
+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>*&#47;</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): 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): 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
diff --git a/node_modules/postcss/lib/node.js b/node_modules/postcss/lib/node.js
new file mode 100644
index 0000000..d79dd56
--- /dev/null
+++ b/node_modules/postcss/lib/node.js
@@ -0,0 +1,381 @@
+'use strict'
+
+let { isClean, my } = require('./symbols')
+let CssSyntaxError = require('./css-syntax-error')
+let Stringifier = require('./stringifier')
+let stringify = require('./stringify')
+
+function cloneNode(obj, parent) {
+ let cloned = new obj.constructor()
+
+ for (let i in obj) {
+ if (!Object.prototype.hasOwnProperty.call(obj, i)) {
+ /* c8 ignore next 2 */
+ continue
+ }
+ if (i === 'proxyCache') continue
+ let value = obj[i]
+ let type = typeof value
+
+ if (i === 'parent' && type === 'object') {
+ if (parent) cloned[i] = parent
+ } else if (i === 'source') {
+ cloned[i] = value
+ } else if (Array.isArray(value)) {
+ cloned[i] = value.map(j => cloneNode(j, cloned))
+ } else {
+ if (type === 'object' && value !== null) value = cloneNode(value)
+ cloned[i] = value
+ }
+ }
+
+ return cloned
+}
+
+class Node {
+ constructor(defaults = {}) {
+ this.raws = {}
+ this[isClean] = false
+ this[my] = true
+
+ for (let name in defaults) {
+ if (name === 'nodes') {
+ this.nodes = []
+ for (let node of defaults[name]) {
+ if (typeof node.clone === 'function') {
+ this.append(node.clone())
+ } else {
+ this.append(node)
+ }
+ }
+ } else {
+ this[name] = defaults[name]
+ }
+ }
+ }
+
+ addToError(error) {
+ error.postcssNode = this
+ if (error.stack && this.source && /\n\s{4}at /.test(error.stack)) {
+ let s = this.source
+ error.stack = error.stack.replace(
+ /\n\s{4}at /,
+ `$&${s.input.from}:${s.start.line}:${s.start.column}$&`
+ )
+ }
+ return error
+ }
+
+ after(add) {
+ this.parent.insertAfter(this, add)
+ return this
+ }
+
+ assign(overrides = {}) {
+ for (let name in overrides) {
+ this[name] = overrides[name]
+ }
+ return this
+ }
+
+ before(add) {
+ this.parent.insertBefore(this, add)
+ return this
+ }
+
+ cleanRaws(keepBetween) {
+ delete this.raws.before
+ delete this.raws.after
+ if (!keepBetween) delete this.raws.between
+ }
+
+ clone(overrides = {}) {
+ let cloned = cloneNode(this)
+ for (let name in overrides) {
+ cloned[name] = overrides[name]
+ }
+ return cloned
+ }
+
+ cloneAfter(overrides = {}) {
+ let cloned = this.clone(overrides)
+ this.parent.insertAfter(this, cloned)
+ return cloned
+ }
+
+ cloneBefore(overrides = {}) {
+ let cloned = this.clone(overrides)
+ this.parent.insertBefore(this, cloned)
+ return cloned
+ }
+
+ error(message, opts = {}) {
+ if (this.source) {
+ let { end, start } = this.rangeBy(opts)
+ return this.source.input.error(
+ message,
+ { column: start.column, line: start.line },
+ { column: end.column, line: end.line },
+ opts
+ )
+ }
+ return new CssSyntaxError(message)
+ }
+
+ getProxyProcessor() {
+ return {
+ get(node, prop) {
+ if (prop === 'proxyOf') {
+ return node
+ } else if (prop === 'root') {
+ return () => node.root().toProxy()
+ } else {
+ return node[prop]
+ }
+ },
+
+ set(node, prop, value) {
+ if (node[prop] === value) return true
+ node[prop] = value
+ if (
+ prop === 'prop' ||
+ prop === 'value' ||
+ prop === 'name' ||
+ prop === 'params' ||
+ prop === 'important' ||
+ /* c8 ignore next */
+ prop === 'text'
+ ) {
+ node.markDirty()
+ }
+ return true
+ }
+ }
+ }
+
+ markDirty() {
+ if (this[isClean]) {
+ this[isClean] = false
+ let next = this
+ while ((next = next.parent)) {
+ next[isClean] = false
+ }
+ }
+ }
+
+ next() {
+ if (!this.parent) return undefined
+ let index = this.parent.index(this)
+ return this.parent.nodes[index + 1]
+ }
+
+ positionBy(opts, stringRepresentation) {
+ let pos = this.source.start
+ if (opts.index) {
+ pos = this.positionInside(opts.index, stringRepresentation)
+ } else if (opts.word) {
+ stringRepresentation = this.toString()
+ let index = stringRepresentation.indexOf(opts.word)
+ if (index !== -1) pos = this.positionInside(index, stringRepresentation)
+ }
+ return pos
+ }
+
+ positionInside(index, stringRepresentation) {
+ let string = stringRepresentation || this.toString()
+ let column = this.source.start.column
+ let line = this.source.start.line
+
+ for (let i = 0; i < index; i++) {
+ if (string[i] === '\n') {
+ column = 1
+ line += 1
+ } else {
+ column += 1
+ }
+ }
+
+ return { column, line }
+ }
+
+ prev() {
+ if (!this.parent) return undefined
+ let index = this.parent.index(this)
+ return this.parent.nodes[index - 1]
+ }
+
+ rangeBy(opts) {
+ let start = {
+ column: this.source.start.column,
+ line: this.source.start.line
+ }
+ let end = this.source.end
+ ? {
+ column: this.source.end.column + 1,
+ line: this.source.end.line
+ }
+ : {
+ column: start.column + 1,
+ line: start.line
+ }
+
+ if (opts.word) {
+ let stringRepresentation = this.toString()
+ let index = stringRepresentation.indexOf(opts.word)
+ if (index !== -1) {
+ start = this.positionInside(index, stringRepresentation)
+ end = this.positionInside(index + opts.word.length, stringRepresentation)
+ }
+ } else {
+ if (opts.start) {
+ start = {
+ column: opts.start.column,
+ line: opts.start.line
+ }
+ } else if (opts.index) {
+ start = this.positionInside(opts.index)
+ }
+
+ if (opts.end) {
+ end = {
+ column: opts.end.column,
+ line: opts.end.line
+ }
+ } else if (opts.endIndex) {
+ end = this.positionInside(opts.endIndex)
+ } else if (opts.index) {
+ end = this.positionInside(opts.index + 1)
+ }
+ }
+
+ if (
+ end.line < start.line ||
+ (end.line === start.line && end.column <= start.column)
+ ) {
+ end = { column: start.column + 1, line: start.line }
+ }
+
+ return { end, start }
+ }
+
+ raw(prop, defaultType) {
+ let str = new Stringifier()
+ return str.raw(this, prop, defaultType)
+ }
+
+ remove() {
+ if (this.parent) {
+ this.parent.removeChild(this)
+ }
+ this.parent = undefined
+ return this
+ }
+
+ replaceWith(...nodes) {
+ if (this.parent) {
+ let bookmark = this
+ let foundSelf = false
+ for (let node of nodes) {
+ if (node === this) {
+ foundSelf = true
+ } else if (foundSelf) {
+ this.parent.insertAfter(bookmark, node)
+ bookmark = node
+ } else {
+ this.parent.insertBefore(bookmark, node)
+ }
+ }
+
+ if (!foundSelf) {
+ this.remove()
+ }
+ }
+
+ return this
+ }
+
+ root() {
+ let result = this
+ while (result.parent && result.parent.type !== 'document') {
+ result = result.parent
+ }
+ return result
+ }
+
+ toJSON(_, inputs) {
+ let fixed = {}
+ let emitInputs = inputs == null
+ inputs = inputs || new Map()
+ let inputsNextIndex = 0
+
+ for (let name in this) {
+ if (!Object.prototype.hasOwnProperty.call(this, name)) {
+ /* c8 ignore next 2 */
+ continue
+ }
+ if (name === 'parent' || name === 'proxyCache') continue
+ let value = this[name]
+
+ if (Array.isArray(value)) {
+ fixed[name] = value.map(i => {
+ if (typeof i === 'object' && i.toJSON) {
+ return i.toJSON(null, inputs)
+ } else {
+ return i
+ }
+ })
+ } else if (typeof value === 'object' && value.toJSON) {
+ fixed[name] = value.toJSON(null, inputs)
+ } else if (name === 'source') {
+ let inputId = inputs.get(value.input)
+ if (inputId == null) {
+ inputId = inputsNextIndex
+ inputs.set(value.input, inputsNextIndex)
+ inputsNextIndex++
+ }
+ fixed[name] = {
+ end: value.end,
+ inputId,
+ start: value.start
+ }
+ } else {
+ fixed[name] = value
+ }
+ }
+
+ if (emitInputs) {
+ fixed.inputs = [...inputs.keys()].map(input => input.toJSON())
+ }
+
+ return fixed
+ }
+
+ toProxy() {
+ if (!this.proxyCache) {
+ this.proxyCache = new Proxy(this, this.getProxyProcessor())
+ }
+ return this.proxyCache
+ }
+
+ toString(stringifier = stringify) {
+ if (stringifier.stringify) stringifier = stringifier.stringify
+ let result = ''
+ stringifier(this, i => {
+ result += i
+ })
+ return result
+ }
+
+ warn(result, text, opts) {
+ let data = { node: this }
+ for (let i in opts) data[i] = opts[i]
+ return result.warn(text, data)
+ }
+
+ get proxyOf() {
+ return this
+ }
+}
+
+module.exports = Node
+Node.default = Node
diff --git a/node_modules/postcss/lib/parse.d.ts b/node_modules/postcss/lib/parse.d.ts
new file mode 100644
index 0000000..4c943a4
--- /dev/null
+++ b/node_modules/postcss/lib/parse.d.ts
@@ -0,0 +1,9 @@
+import { Parser } from './postcss.js'
+
+interface Parse extends Parser {
+ default: Parse
+}
+
+declare const parse: Parse
+
+export = parse
diff --git a/node_modules/postcss/lib/parse.js b/node_modules/postcss/lib/parse.js
new file mode 100644
index 0000000..971431f
--- /dev/null
+++ b/node_modules/postcss/lib/parse.js
@@ -0,0 +1,42 @@
+'use strict'
+
+let Container = require('./container')
+let Parser = require('./parser')
+let Input = require('./input')
+
+function parse(css, opts) {
+ let input = new Input(css, opts)
+ let parser = new Parser(input)
+ try {
+ parser.parse()
+ } catch (e) {
+ if (process.env.NODE_ENV !== 'production') {
+ if (e.name === 'CssSyntaxError' && opts && opts.from) {
+ if (/\.scss$/i.test(opts.from)) {
+ e.message +=
+ '\nYou tried to parse SCSS with ' +
+ 'the standard CSS parser; ' +
+ 'try again with the postcss-scss parser'
+ } else if (/\.sass/i.test(opts.from)) {
+ e.message +=
+ '\nYou tried to parse Sass with ' +
+ 'the standard CSS parser; ' +
+ 'try again with the postcss-sass parser'
+ } else if (/\.less$/i.test(opts.from)) {
+ e.message +=
+ '\nYou tried to parse Less with ' +
+ 'the standard CSS parser; ' +
+ 'try again with the postcss-less parser'
+ }
+ }
+ }
+ throw e
+ }
+
+ return parser.root
+}
+
+module.exports = parse
+parse.default = parse
+
+Container.registerParse(parse)
diff --git a/node_modules/postcss/lib/parser.js b/node_modules/postcss/lib/parser.js
new file mode 100644
index 0000000..e1e2e19
--- /dev/null
+++ b/node_modules/postcss/lib/parser.js
@@ -0,0 +1,610 @@
+'use strict'
+
+let Declaration = require('./declaration')
+let tokenizer = require('./tokenize')
+let Comment = require('./comment')
+let AtRule = require('./at-rule')
+let Root = require('./root')
+let Rule = require('./rule')
+
+const SAFE_COMMENT_NEIGHBOR = {
+ empty: true,
+ space: true
+}
+
+function findLastWithPosition(tokens) {
+ for (let i = tokens.length - 1; i >= 0; i--) {
+ let token = tokens[i]
+ let pos = token[3] || token[2]
+ if (pos) return pos
+ }
+}
+
+class Parser {
+ constructor(input) {
+ this.input = input
+
+ this.root = new Root()
+ this.current = this.root
+ this.spaces = ''
+ this.semicolon = false
+ this.customProperty = false
+
+ this.createTokenizer()
+ this.root.source = { input, start: { column: 1, line: 1, offset: 0 } }
+ }
+
+ atrule(token) {
+ let node = new AtRule()
+ node.name = token[1].slice(1)
+ if (node.name === '') {
+ this.unnamedAtrule(node, token)
+ }
+ this.init(node, token[2])
+
+ let type
+ let prev
+ let shift
+ let last = false
+ let open = false
+ let params = []
+ let brackets = []
+
+ while (!this.tokenizer.endOfFile()) {
+ token = this.tokenizer.nextToken()
+ type = token[0]
+
+ if (type === '(' || type === '[') {
+ brackets.push(type === '(' ? ')' : ']')
+ } else if (type === '{' && brackets.length > 0) {
+ brackets.push('}')
+ } else if (type === brackets[brackets.length - 1]) {
+ brackets.pop()
+ }
+
+ if (brackets.length === 0) {
+ if (type === ';') {
+ node.source.end = this.getPosition(token[2])
+ node.source.end.offset++
+ this.semicolon = true
+ break
+ } else if (type === '{') {
+ open = true
+ break
+ } else if (type === '}') {
+ if (params.length > 0) {
+ shift = params.length - 1
+ prev = params[shift]
+ while (prev && prev[0] === 'space') {
+ prev = params[--shift]
+ }
+ if (prev) {
+ node.source.end = this.getPosition(prev[3] || prev[2])
+ node.source.end.offset++
+ }
+ }
+ this.end(token)
+ break
+ } else {
+ params.push(token)
+ }
+ } else {
+ params.push(token)
+ }
+
+ if (this.tokenizer.endOfFile()) {
+ last = true
+ break
+ }
+ }
+
+ node.raws.between = this.spacesAndCommentsFromEnd(params)
+ if (params.length) {
+ node.raws.afterName = this.spacesAndCommentsFromStart(params)
+ this.raw(node, 'params', params)
+ if (last) {
+ token = params[params.length - 1]
+ node.source.end = this.getPosition(token[3] || token[2])
+ node.source.end.offset++
+ this.spaces = node.raws.between
+ node.raws.between = ''
+ }
+ } else {
+ node.raws.afterName = ''
+ node.params = ''
+ }
+
+ if (open) {
+ node.nodes = []
+ this.current = node
+ }
+ }
+
+ checkMissedSemicolon(tokens) {
+ let colon = this.colon(tokens)
+ if (colon === false) return
+
+ let founded = 0
+ let token
+ for (let j = colon - 1; j >= 0; j--) {
+ token = tokens[j]
+ if (token[0] !== 'space') {
+ founded += 1
+ if (founded === 2) break
+ }
+ }
+ // If the token is a word, e.g. `!important`, `red` or any other valid property's value.
+ // Then we need to return the colon after that word token. [3] is the "end" colon of that word.
+ // And because we need it after that one we do +1 to get the next one.
+ throw this.input.error(
+ 'Missed semicolon',
+ token[0] === 'word' ? token[3] + 1 : token[2]
+ )
+ }
+
+ colon(tokens) {
+ let brackets = 0
+ let token, type, prev
+ for (let [i, element] of tokens.entries()) {
+ token = element
+ type = token[0]
+
+ if (type === '(') {
+ brackets += 1
+ }
+ if (type === ')') {
+ brackets -= 1
+ }
+ if (brackets === 0 && type === ':') {
+ if (!prev) {
+ this.doubleColon(token)
+ } else if (prev[0] === 'word' && prev[1] === 'progid') {
+ continue
+ } else {
+ return i
+ }
+ }
+
+ prev = token
+ }
+ return false
+ }
+
+ comment(token) {
+ let node = new Comment()
+ this.init(node, token[2])
+ node.source.end = this.getPosition(token[3] || token[2])
+ node.source.end.offset++
+
+ let text = token[1].slice(2, -2)
+ if (/^\s*$/.test(text)) {
+ node.text = ''
+ node.raws.left = text
+ node.raws.right = ''
+ } else {
+ let match = text.match(/^(\s*)([^]*\S)(\s*)$/)
+ node.text = match[2]
+ node.raws.left = match[1]
+ node.raws.right = match[3]
+ }
+ }
+
+ createTokenizer() {
+ this.tokenizer = tokenizer(this.input)
+ }
+
+ decl(tokens, customProperty) {
+ let node = new Declaration()
+ this.init(node, tokens[0][2])
+
+ let last = tokens[tokens.length - 1]
+ if (last[0] === ';') {
+ this.semicolon = true
+ tokens.pop()
+ }
+
+ node.source.end = this.getPosition(
+ last[3] || last[2] || findLastWithPosition(tokens)
+ )
+ node.source.end.offset++
+
+ while (tokens[0][0] !== 'word') {
+ if (tokens.length === 1) this.unknownWord(tokens)
+ node.raws.before += tokens.shift()[1]
+ }
+ node.source.start = this.getPosition(tokens[0][2])
+
+ node.prop = ''
+ while (tokens.length) {
+ let type = tokens[0][0]
+ if (type === ':' || type === 'space' || type === 'comment') {
+ break
+ }
+ node.prop += tokens.shift()[1]
+ }
+
+ node.raws.between = ''
+
+ let token
+ while (tokens.length) {
+ token = tokens.shift()
+
+ if (token[0] === ':') {
+ node.raws.between += token[1]
+ break
+ } else {
+ if (token[0] === 'word' && /\w/.test(token[1])) {
+ this.unknownWord([token])
+ }
+ node.raws.between += token[1]
+ }
+ }
+
+ if (node.prop[0] === '_' || node.prop[0] === '*') {
+ node.raws.before += node.prop[0]
+ node.prop = node.prop.slice(1)
+ }
+
+ let firstSpaces = []
+ let next
+ while (tokens.length) {
+ next = tokens[0][0]
+ if (next !== 'space' && next !== 'comment') break
+ firstSpaces.push(tokens.shift())
+ }
+
+ this.precheckMissedSemicolon(tokens)
+
+ for (let i = tokens.length - 1; i >= 0; i--) {
+ token = tokens[i]
+ if (token[1].toLowerCase() === '!important') {
+ node.important = true
+ let string = this.stringFrom(tokens, i)
+ string = this.spacesFromEnd(tokens) + string
+ if (string !== ' !important') node.raws.important = string
+ break
+ } else if (token[1].toLowerCase() === 'important') {
+ let cache = tokens.slice(0)
+ let str = ''
+ for (let j = i; j > 0; j--) {
+ let type = cache[j][0]
+ if (str.trim().indexOf('!') === 0 && type !== 'space') {
+ break
+ }
+ str = cache.pop()[1] + str
+ }
+ if (str.trim().indexOf('!') === 0) {
+ node.important = true
+ node.raws.important = str
+ tokens = cache
+ }
+ }
+
+ if (token[0] !== 'space' && token[0] !== 'comment') {
+ break
+ }
+ }
+
+ let hasWord = tokens.some(i => i[0] !== 'space' && i[0] !== 'comment')
+
+ if (hasWord) {
+ node.raws.between += firstSpaces.map(i => i[1]).join('')
+ firstSpaces = []
+ }
+ this.raw(node, 'value', firstSpaces.concat(tokens), customProperty)
+
+ if (node.value.includes(':') && !customProperty) {
+ this.checkMissedSemicolon(tokens)
+ }
+ }
+
+ doubleColon(token) {
+ throw this.input.error(
+ 'Double colon',
+ { offset: token[2] },
+ { offset: token[2] + token[1].length }
+ )
+ }
+
+ emptyRule(token) {
+ let node = new Rule()
+ this.init(node, token[2])
+ node.selector = ''
+ node.raws.between = ''
+ this.current = node
+ }
+
+ end(token) {
+ if (this.current.nodes && this.current.nodes.length) {
+ this.current.raws.semicolon = this.semicolon
+ }
+ this.semicolon = false
+
+ this.current.raws.after = (this.current.raws.after || '') + this.spaces
+ this.spaces = ''
+
+ if (this.current.parent) {
+ this.current.source.end = this.getPosition(token[2])
+ this.current.source.end.offset++
+ this.current = this.current.parent
+ } else {
+ this.unexpectedClose(token)
+ }
+ }
+
+ endFile() {
+ if (this.current.parent) this.unclosedBlock()
+ if (this.current.nodes && this.current.nodes.length) {
+ this.current.raws.semicolon = this.semicolon
+ }
+ this.current.raws.after = (this.current.raws.after || '') + this.spaces
+ this.root.source.end = this.getPosition(this.tokenizer.position())
+ }
+
+ freeSemicolon(token) {
+ this.spaces += token[1]
+ if (this.current.nodes) {
+ let prev = this.current.nodes[this.current.nodes.length - 1]
+ if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) {
+ prev.raws.ownSemicolon = this.spaces
+ this.spaces = ''
+ }
+ }
+ }
+
+ // Helpers
+
+ getPosition(offset) {
+ let pos = this.input.fromOffset(offset)
+ return {
+ column: pos.col,
+ line: pos.line,
+ offset
+ }
+ }
+
+ init(node, offset) {
+ this.current.push(node)
+ node.source = {
+ input: this.input,
+ start: this.getPosition(offset)
+ }
+ node.raws.before = this.spaces
+ this.spaces = ''
+ if (node.type !== 'comment') this.semicolon = false
+ }
+
+ other(start) {
+ let end = false
+ let type = null
+ let colon = false
+ let bracket = null
+ let brackets = []
+ let customProperty = start[1].startsWith('--')
+
+ let tokens = []
+ let token = start
+ while (token) {
+ type = token[0]
+ tokens.push(token)
+
+ if (type === '(' || type === '[') {
+ if (!bracket) bracket = token
+ brackets.push(type === '(' ? ')' : ']')
+ } else if (customProperty && colon && type === '{') {
+ if (!bracket) bracket = token
+ brackets.push('}')
+ } else if (brackets.length === 0) {
+ if (type === ';') {
+ if (colon) {
+ this.decl(tokens, customProperty)
+ return
+ } else {
+ break
+ }
+ } else if (type === '{') {
+ this.rule(tokens)
+ return
+ } else if (type === '}') {
+ this.tokenizer.back(tokens.pop())
+ end = true
+ break
+ } else if (type === ':') {
+ colon = true
+ }
+ } else if (type === brackets[brackets.length - 1]) {
+ brackets.pop()
+ if (brackets.length === 0) bracket = null
+ }
+
+ token = this.tokenizer.nextToken()
+ }
+
+ if (this.tokenizer.endOfFile()) end = true
+ if (brackets.length > 0) this.unclosedBracket(bracket)
+
+ if (end && colon) {
+ if (!customProperty) {
+ while (tokens.length) {
+ token = tokens[tokens.length - 1][0]
+ if (token !== 'space' && token !== 'comment') break
+ this.tokenizer.back(tokens.pop())
+ }
+ }
+ this.decl(tokens, customProperty)
+ } else {
+ this.unknownWord(tokens)
+ }
+ }
+
+ parse() {
+ let token
+ while (!this.tokenizer.endOfFile()) {
+ token = this.tokenizer.nextToken()
+
+ switch (token[0]) {
+ case 'space':
+ this.spaces += token[1]
+ break
+
+ case ';':
+ this.freeSemicolon(token)
+ break
+
+ case '}':
+ this.end(token)
+ break
+
+ case 'comment':
+ this.comment(token)
+ break
+
+ case 'at-word':
+ this.atrule(token)
+ break
+
+ case '{':
+ this.emptyRule(token)
+ break
+
+ default:
+ this.other(token)
+ break
+ }
+ }
+ this.endFile()
+ }
+
+ precheckMissedSemicolon(/* tokens */) {
+ // Hook for Safe Parser
+ }
+
+ raw(node, prop, tokens, customProperty) {
+ let token, type
+ let length = tokens.length
+ let value = ''
+ let clean = true
+ let next, prev
+
+ for (let i = 0; i < length; i += 1) {
+ token = tokens[i]
+ type = token[0]
+ if (type === 'space' && i === length - 1 && !customProperty) {
+ clean = false
+ } else if (type === 'comment') {
+ prev = tokens[i - 1] ? tokens[i - 1][0] : 'empty'
+ next = tokens[i + 1] ? tokens[i + 1][0] : 'empty'
+ if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {
+ if (value.slice(-1) === ',') {
+ clean = false
+ } else {
+ value += token[1]
+ }
+ } else {
+ clean = false
+ }
+ } else {
+ value += token[1]
+ }
+ }
+ if (!clean) {
+ let raw = tokens.reduce((all, i) => all + i[1], '')
+ node.raws[prop] = { raw, value }
+ }
+ node[prop] = value
+ }
+
+ rule(tokens) {
+ tokens.pop()
+
+ let node = new Rule()
+ this.init(node, tokens[0][2])
+
+ node.raws.between = this.spacesAndCommentsFromEnd(tokens)
+ this.raw(node, 'selector', tokens)
+ this.current = node
+ }
+
+ spacesAndCommentsFromEnd(tokens) {
+ let lastTokenType
+ let spaces = ''
+ while (tokens.length) {
+ lastTokenType = tokens[tokens.length - 1][0]
+ if (lastTokenType !== 'space' && lastTokenType !== 'comment') break
+ spaces = tokens.pop()[1] + spaces
+ }
+ return spaces
+ }
+
+ // Errors
+
+ spacesAndCommentsFromStart(tokens) {
+ let next
+ let spaces = ''
+ while (tokens.length) {
+ next = tokens[0][0]
+ if (next !== 'space' && next !== 'comment') break
+ spaces += tokens.shift()[1]
+ }
+ return spaces
+ }
+
+ spacesFromEnd(tokens) {
+ let lastTokenType
+ let spaces = ''
+ while (tokens.length) {
+ lastTokenType = tokens[tokens.length - 1][0]
+ if (lastTokenType !== 'space') break
+ spaces = tokens.pop()[1] + spaces
+ }
+ return spaces
+ }
+
+ stringFrom(tokens, from) {
+ let result = ''
+ for (let i = from; i < tokens.length; i++) {
+ result += tokens[i][1]
+ }
+ tokens.splice(from, tokens.length - from)
+ return result
+ }
+
+ unclosedBlock() {
+ let pos = this.current.source.start
+ throw this.input.error('Unclosed block', pos.line, pos.column)
+ }
+
+ unclosedBracket(bracket) {
+ throw this.input.error(
+ 'Unclosed bracket',
+ { offset: bracket[2] },
+ { offset: bracket[2] + 1 }
+ )
+ }
+
+ unexpectedClose(token) {
+ throw this.input.error(
+ 'Unexpected }',
+ { offset: token[2] },
+ { offset: token[2] + 1 }
+ )
+ }
+
+ unknownWord(tokens) {
+ throw this.input.error(
+ 'Unknown word',
+ { offset: tokens[0][2] },
+ { offset: tokens[0][2] + tokens[0][1].length }
+ )
+ }
+
+ unnamedAtrule(node, token) {
+ throw this.input.error(
+ 'At-rule without name',
+ { offset: token[2] },
+ { offset: token[2] + token[1].length }
+ )
+ }
+}
+
+module.exports = Parser
diff --git a/node_modules/postcss/lib/postcss.d.mts b/node_modules/postcss/lib/postcss.d.mts
new file mode 100644
index 0000000..a8ca8c7
--- /dev/null
+++ b/node_modules/postcss/lib/postcss.d.mts
@@ -0,0 +1,72 @@
+export {
+ // postcss function / namespace
+ default,
+
+ // Value exports from postcss.mjs
+ stringify,
+ fromJSON,
+ // @ts-expect-error This value exists, but it’s untyped.
+ plugin,
+ parse,
+ list,
+
+ document,
+ comment,
+ atRule,
+ rule,
+ decl,
+ root,
+
+ CssSyntaxError,
+ Declaration,
+ Container,
+ Processor,
+ Document,
+ Comment,
+ Warning,
+ AtRule,
+ Result,
+ Input,
+ Rule,
+ Root,
+ Node,
+
+ // Type-only exports
+ AcceptedPlugin,
+ AnyNode,
+ AtRuleProps,
+ Builder,
+ ChildNode,
+ ChildProps,
+ CommentProps,
+ ContainerProps,
+ DeclarationProps,
+ DocumentProps,
+ FilePosition,
+ Helpers,
+ JSONHydrator,
+ Message,
+ NodeErrorOptions,
+ NodeProps,
+ OldPlugin,
+ Parser,
+ Plugin,
+ PluginCreator,
+ Position,
+ Postcss,
+ ProcessOptions,
+ RootProps,
+ RuleProps,
+ Source,
+ SourceMap,
+ SourceMapOptions,
+ Stringifier,
+ Syntax,
+ TransformCallback,
+ Transformer,
+ WarningOptions,
+
+ // This is a class, but it’s not re-exported. That’s why it’s exported as type-only here.
+ type LazyResult,
+
+} from './postcss.js'
diff --git a/node_modules/postcss/lib/postcss.d.ts b/node_modules/postcss/lib/postcss.d.ts
new file mode 100644
index 0000000..70d7589
--- /dev/null
+++ b/node_modules/postcss/lib/postcss.d.ts
@@ -0,0 +1,441 @@
+import { RawSourceMap, SourceMapGenerator } from 'source-map-js'
+
+import AtRule, { AtRuleProps } from './at-rule.js'
+import Comment, { CommentProps } from './comment.js'
+import Container, { ContainerProps } from './container.js'
+import CssSyntaxError from './css-syntax-error.js'
+import Declaration, { DeclarationProps } from './declaration.js'
+import Document, { DocumentProps } from './document.js'
+import Input, { FilePosition } from './input.js'
+import LazyResult from './lazy-result.js'
+import list from './list.js'
+import Node, {
+ AnyNode,
+ ChildNode,
+ ChildProps,
+ NodeErrorOptions,
+ NodeProps,
+ Position,
+ Source
+} from './node.js'
+import Processor from './processor.js'
+import Result, { Message } from './result.js'
+import Root, { RootProps } from './root.js'
+import Rule, { RuleProps } from './rule.js'
+import Warning, { WarningOptions } from './warning.js'
+
+type DocumentProcessor = (
+ document: Document,
+ helper: postcss.Helpers
+) => Promise<void> | void
+type RootProcessor = (root: Root, helper: postcss.Helpers) => Promise<void> | void
+type DeclarationProcessor = (
+ decl: Declaration,
+ helper: postcss.Helpers
+) => Promise<void> | void
+type RuleProcessor = (rule: Rule, helper: postcss.Helpers) => Promise<void> | void
+type AtRuleProcessor = (atRule: AtRule, helper: postcss.Helpers) => Promise<void> | void
+type CommentProcessor = (
+ comment: Comment,
+ helper: postcss.Helpers
+) => Promise<void> | void
+
+interface Processors {
+ /**
+ * Will be called on all`AtRule` nodes.
+ *
+ * Will be called again on node or children changes.
+ */
+ AtRule?: { [name: string]: AtRuleProcessor } | AtRuleProcessor
+
+ /**
+ * Will be called on all `AtRule` nodes, when all children will be processed.
+ *
+ * Will be called again on node or children changes.
+ */
+ AtRuleExit?: { [name: string]: AtRuleProcessor } | AtRuleProcessor
+
+ /**
+ * Will be called on all `Comment` nodes.
+ *
+ * Will be called again on node or children changes.
+ */
+ Comment?: CommentProcessor
+
+ /**
+ * Will be called on all `Comment` nodes after listeners
+ * for `Comment` event.
+ *
+ * Will be called again on node or children changes.
+ */
+ CommentExit?: CommentProcessor
+
+ /**
+ * Will be called on all `Declaration` nodes after listeners
+ * for `Declaration` event.
+ *
+ * Will be called again on node or children changes.
+ */
+ Declaration?: { [prop: string]: DeclarationProcessor } | DeclarationProcessor
+
+ /**
+ * Will be called on all `Declaration` nodes.
+ *
+ * Will be called again on node or children changes.
+ */
+ DeclarationExit?:
+ | { [prop: string]: DeclarationProcessor }
+ | DeclarationProcessor
+
+ /**
+ * Will be called on `Document` node.
+ *
+ * Will be called again on children changes.
+ */
+ Document?: DocumentProcessor
+
+ /**
+ * Will be called on `Document` node, when all children will be processed.
+ *
+ * Will be called again on children changes.
+ */
+ DocumentExit?: DocumentProcessor
+
+ /**
+ * Will be called on `Root` node once.
+ */
+ Once?: RootProcessor
+
+ /**
+ * Will be called on `Root` node once, when all children will be processed.
+ */
+ OnceExit?: RootProcessor
+
+ /**
+ * Will be called on `Root` node.
+ *
+ * Will be called again on children changes.
+ */
+ Root?: RootProcessor
+
+ /**
+ * Will be called on `Root` node, when all children will be processed.
+ *
+ * Will be called again on children changes.
+ */
+ RootExit?: RootProcessor
+
+ /**
+ * Will be called on all `Rule` nodes.
+ *
+ * Will be called again on node or children changes.
+ */
+ Rule?: RuleProcessor
+
+ /**
+ * Will be called on all `Rule` nodes, when all children will be processed.
+ *
+ * Will be called again on node or children changes.
+ */
+ RuleExit?: RuleProcessor
+}
+
+declare namespace postcss {
+ export {
+ AnyNode,
+ AtRule,
+ AtRuleProps,
+ ChildNode,
+ ChildProps,
+ Comment,
+ CommentProps,
+ Container,
+ ContainerProps,
+ CssSyntaxError,
+ Declaration,
+ DeclarationProps,
+ Document,
+ DocumentProps,
+ FilePosition,
+ Input,
+ LazyResult,
+ list,
+ Message,
+ Node,
+ NodeErrorOptions,
+ NodeProps,
+ Position,
+ Processor,
+ Result,
+ Root,
+ RootProps,
+ Rule,
+ RuleProps,
+ Source,
+ Warning,
+ WarningOptions
+ }
+
+ export type SourceMap = SourceMapGenerator & {
+ toJSON(): RawSourceMap
+ }
+
+ export type Helpers = { postcss: Postcss; result: Result } & Postcss
+
+ export interface Plugin extends Processors {
+ postcssPlugin: string
+ prepare?: (result: Result) => Processors
+ }
+
+ export interface PluginCreator<PluginOptions> {
+ (opts?: PluginOptions): Plugin | Processor
+ postcss: true
+ }
+
+ export interface Transformer extends TransformCallback {
+ postcssPlugin: string
+ postcssVersion: string
+ }
+
+ export interface TransformCallback {
+ (root: Root, result: Result): Promise<void> | void
+ }
+
+ export interface OldPlugin<T> extends Transformer {
+ (opts?: T): Transformer
+ postcss: Transformer
+ }
+
+ export type AcceptedPlugin =
+ | {
+ postcss: Processor | TransformCallback
+ }
+ | OldPlugin<any>
+ | Plugin
+ | PluginCreator<any>
+ | Processor
+ | TransformCallback
+
+ export interface Parser<RootNode = Document | Root> {
+ (
+ css: { toString(): string } | string,
+ opts?: Pick<ProcessOptions, 'from' | 'map'>
+ ): RootNode
+ }
+
+ export interface Builder {
+ (part: string, node?: AnyNode, type?: 'end' | 'start'): void
+ }
+
+ export interface Stringifier {
+ (node: AnyNode, builder: Builder): void
+ }
+
+ export interface JSONHydrator {
+ (data: object): Node
+ (data: object[]): Node[]
+ }
+
+ export interface Syntax<RootNode = Document | Root> {
+ /**
+ * Function to generate AST by string.
+ */
+ parse?: Parser<RootNode>
+
+ /**
+ * Class to generate string by AST.
+ */
+ stringify?: Stringifier
+ }
+
+ export interface SourceMapOptions {
+ /**
+ * Use absolute path in generated source map.
+ */
+ absolute?: boolean
+
+ /**
+ * Indicates that PostCSS should add annotation comments to the CSS.
+ * By default, PostCSS will always add a comment with a path
+ * to the source map. PostCSS will not add annotations to CSS files
+ * that do not contain any comments.
+ *
+ * By default, PostCSS presumes that you want to save the source map as
+ * `opts.to + '.map'` and will use this path in the annotation comment.
+ * A different path can be set by providing a string value for annotation.
+ *
+ * If you have set `inline: true`, annotation cannot be disabled.
+ */
+ annotation?: ((file: string, root: Root) => string) | boolean | string
+
+ /**
+ * Override `from` in map’s sources.
+ */
+ from?: string
+
+ /**
+ * Indicates that the source map should be embedded in the output CSS
+ * as a Base64-encoded comment. By default, it is `true`.
+ * But if all previous maps are external, not inline, PostCSS will not embed
+ * the map even if you do not set this option.
+ *
+ * If you have an inline source map, the result.map property will be empty,
+ * as the source map will be contained within the text of `result.css`.
+ */
+ inline?: boolean
+
+ /**
+ * Source map content from a previous processing step (e.g., Sass).
+ *
+ * PostCSS will try to read the previous source map
+ * automatically (based on comments within the source CSS), but you can use
+ * this option to identify it manually.
+ *
+ * If desired, you can omit the previous map with prev: `false`.
+ */
+ prev?: ((file: string) => string) | boolean | object | string
+
+ /**
+ * Indicates that PostCSS should set the origin content (e.g., Sass source)
+ * of the source map. By default, it is true. But if all previous maps do not
+ * contain sources content, PostCSS will also leave it out even if you
+ * do not set this option.
+ */
+ sourcesContent?: boolean
+ }
+
+ export interface ProcessOptions<RootNode = Document | Root> {
+ /**
+ * The path of the CSS source file. You should always set `from`,
+ * because it is used in source map generation and syntax error messages.
+ */
+ from?: string
+
+ /**
+ * Source map options
+ */
+ map?: boolean | SourceMapOptions
+
+ /**
+ * Function to generate AST by string.
+ */
+ parser?: Parser<RootNode> | Syntax<RootNode>
+
+ /**
+ * Class to generate string by AST.
+ */
+ stringifier?: Stringifier | Syntax<RootNode>
+
+ /**
+ * Object with parse and stringify.
+ */
+ syntax?: Syntax<RootNode>
+
+ /**
+ * The path where you'll put the output CSS file. You should always set `to`
+ * to generate correct source maps.
+ */
+ to?: string
+ }
+
+ export type Postcss = typeof postcss
+
+ /**
+ * Default function to convert a node tree into a CSS string.
+ */
+ export let stringify: Stringifier
+
+ /**
+ * Parses source css and returns a new `Root` or `Document` node,
+ * which contains the source CSS nodes.
+ *
+ * ```js
+ * // Simple CSS concatenation with source map support
+ * const root1 = postcss.parse(css1, { from: file1 })
+ * const root2 = postcss.parse(css2, { from: file2 })
+ * root1.append(root2).toResult().css
+ * ```
+ */
+ export let parse: Parser<Root>
+
+ /**
+ * Rehydrate a JSON AST (from `Node#toJSON`) back into the AST classes.
+ *
+ * ```js
+ * const json = root.toJSON()
+ * // save to file, send by network, etc
+ * const root2 = postcss.fromJSON(json)
+ * ```
+ */
+ export let fromJSON: JSONHydrator
+
+ /**
+ * Creates a new `Comment` node.
+ *
+ * @param defaults Properties for the new node.
+ * @return New comment node
+ */
+ export function comment(defaults?: CommentProps): Comment
+
+ /**
+ * Creates a new `AtRule` node.
+ *
+ * @param defaults Properties for the new node.
+ * @return New at-rule node.
+ */
+ export function atRule(defaults?: AtRuleProps): AtRule
+
+ /**
+ * Creates a new `Declaration` node.
+ *
+ * @param defaults Properties for the new node.
+ * @return New declaration node.
+ */
+ export function decl(defaults?: DeclarationProps): Declaration
+
+ /**
+ * Creates a new `Rule` node.
+ *
+ * @param default Properties for the new node.
+ * @return New rule node.
+ */
+ export function rule(defaults?: RuleProps): Rule
+
+ /**
+ * Creates a new `Root` node.
+ *
+ * @param defaults Properties for the new node.
+ * @return New root node.
+ */
+ export function root(defaults?: RootProps): Root
+
+ /**
+ * Creates a new `Document` node.
+ *
+ * @param defaults Properties for the new node.
+ * @return New document node.
+ */
+ export function document(defaults?: DocumentProps): Document
+
+ export { postcss as default }
+}
+
+/**
+ * Create a new `Processor` instance that will apply `plugins`
+ * as CSS processors.
+ *
+ * ```js
+ * let postcss = require('postcss')
+ *
+ * postcss(plugins).process(css, { from, to }).then(result => {
+ * console.log(result.css)
+ * })
+ * ```
+ *
+ * @param plugins PostCSS plugins.
+ * @return Processor to process multiple CSS.
+ */
+declare function postcss(plugins?: postcss.AcceptedPlugin[]): Processor
+declare function postcss(...plugins: postcss.AcceptedPlugin[]): Processor
+
+export = postcss
diff --git a/node_modules/postcss/lib/postcss.js b/node_modules/postcss/lib/postcss.js
new file mode 100644
index 0000000..080ee83
--- /dev/null
+++ b/node_modules/postcss/lib/postcss.js
@@ -0,0 +1,101 @@
+'use strict'
+
+let CssSyntaxError = require('./css-syntax-error')
+let Declaration = require('./declaration')
+let LazyResult = require('./lazy-result')
+let Container = require('./container')
+let Processor = require('./processor')
+let stringify = require('./stringify')
+let fromJSON = require('./fromJSON')
+let Document = require('./document')
+let Warning = require('./warning')
+let Comment = require('./comment')
+let AtRule = require('./at-rule')
+let Result = require('./result.js')
+let Input = require('./input')
+let parse = require('./parse')
+let list = require('./list')
+let Rule = require('./rule')
+let Root = require('./root')
+let Node = require('./node')
+
+function postcss(...plugins) {
+ if (plugins.length === 1 && Array.isArray(plugins[0])) {
+ plugins = plugins[0]
+ }
+ return new Processor(plugins)
+}
+
+postcss.plugin = function plugin(name, initializer) {
+ let warningPrinted = false
+ function creator(...args) {
+ // eslint-disable-next-line no-console
+ if (console && console.warn && !warningPrinted) {
+ warningPrinted = true
+ // eslint-disable-next-line no-console
+ console.warn(
+ name +
+ ': postcss.plugin was deprecated. Migration guide:\n' +
+ 'https://evilmartians.com/chronicles/postcss-8-plugin-migration'
+ )
+ if (process.env.LANG && process.env.LANG.startsWith('cn')) {
+ /* c8 ignore next 7 */
+ // eslint-disable-next-line no-console
+ console.warn(
+ name +
+ ': 里面 postcss.plugin 被弃用. 迁移指南:\n' +
+ 'https://www.w3ctech.com/topic/2226'
+ )
+ }
+ }
+ let transformer = initializer(...args)
+ transformer.postcssPlugin = name
+ transformer.postcssVersion = new Processor().version
+ return transformer
+ }
+
+ let cache
+ Object.defineProperty(creator, 'postcss', {
+ get() {
+ if (!cache) cache = creator()
+ return cache
+ }
+ })
+
+ creator.process = function (css, processOpts, pluginOpts) {
+ return postcss([creator(pluginOpts)]).process(css, processOpts)
+ }
+
+ return creator
+}
+
+postcss.stringify = stringify
+postcss.parse = parse
+postcss.fromJSON = fromJSON
+postcss.list = list
+
+postcss.comment = defaults => new Comment(defaults)
+postcss.atRule = defaults => new AtRule(defaults)
+postcss.decl = defaults => new Declaration(defaults)
+postcss.rule = defaults => new Rule(defaults)
+postcss.root = defaults => new Root(defaults)
+postcss.document = defaults => new Document(defaults)
+
+postcss.CssSyntaxError = CssSyntaxError
+postcss.Declaration = Declaration
+postcss.Container = Container
+postcss.Processor = Processor
+postcss.Document = Document
+postcss.Comment = Comment
+postcss.Warning = Warning
+postcss.AtRule = AtRule
+postcss.Result = Result
+postcss.Input = Input
+postcss.Rule = Rule
+postcss.Root = Root
+postcss.Node = Node
+
+LazyResult.registerPostcss(postcss)
+
+module.exports = postcss
+postcss.default = postcss
diff --git a/node_modules/postcss/lib/postcss.mjs b/node_modules/postcss/lib/postcss.mjs
new file mode 100644
index 0000000..3507598
--- /dev/null
+++ b/node_modules/postcss/lib/postcss.mjs
@@ -0,0 +1,30 @@
+import postcss from './postcss.js'
+
+export default postcss
+
+export const stringify = postcss.stringify
+export const fromJSON = postcss.fromJSON
+export const plugin = postcss.plugin
+export const parse = postcss.parse
+export const list = postcss.list
+
+export const document = postcss.document
+export const comment = postcss.comment
+export const atRule = postcss.atRule
+export const rule = postcss.rule
+export const decl = postcss.decl
+export const root = postcss.root
+
+export const CssSyntaxError = postcss.CssSyntaxError
+export const Declaration = postcss.Declaration
+export const Container = postcss.Container
+export const Processor = postcss.Processor
+export const Document = postcss.Document
+export const Comment = postcss.Comment
+export const Warning = postcss.Warning
+export const AtRule = postcss.AtRule
+export const Result = postcss.Result
+export const Input = postcss.Input
+export const Rule = postcss.Rule
+export const Root = postcss.Root
+export const Node = postcss.Node
diff --git a/node_modules/postcss/lib/previous-map.d.ts b/node_modules/postcss/lib/previous-map.d.ts
new file mode 100644
index 0000000..23edeb5
--- /dev/null
+++ b/node_modules/postcss/lib/previous-map.d.ts
@@ -0,0 +1,81 @@
+import { SourceMapConsumer } from 'source-map-js'
+
+import { ProcessOptions } from './postcss.js'
+
+declare namespace PreviousMap {
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ export { PreviousMap_ as default }
+}
+
+/**
+ * Source map information from input CSS.
+ * For example, source map after Sass compiler.
+ *
+ * This class will automatically find source map in input CSS or in file system
+ * near input file (according `from` option).
+ *
+ * ```js
+ * const root = parse(css, { from: 'a.sass.css' })
+ * root.input.map //=> PreviousMap
+ * ```
+ */
+declare class PreviousMap_ {
+ /**
+ * `sourceMappingURL` content.
+ */
+ annotation?: string
+
+ /**
+ * The CSS source identifier. Contains `Input#file` if the user
+ * set the `from` option, or `Input#id` if they did not.
+ */
+ file?: string
+
+ /**
+ * Was source map inlined by data-uri to input CSS.
+ */
+ inline: boolean
+
+ /**
+ * Path to source map file.
+ */
+ mapFile?: string
+
+ /**
+ * The directory with source map file, if source map is in separated file.
+ */
+ root?: string
+
+ /**
+ * Source map file content.
+ */
+ text?: string
+
+ /**
+ * @param css Input CSS source.
+ * @param opts Process options.
+ */
+ constructor(css: string, opts?: ProcessOptions)
+
+ /**
+ * Create a instance of `SourceMapGenerator` class
+ * from the `source-map` library to work with source map information.
+ *
+ * It is lazy method, so it will create object only on first call
+ * and then it will use cache.
+ *
+ * @return Object with source map information.
+ */
+ consumer(): SourceMapConsumer
+
+ /**
+ * Does source map contains `sourcesContent` with input source text.
+ *
+ * @return Is `sourcesContent` present.
+ */
+ withContent(): boolean
+}
+
+declare class PreviousMap extends PreviousMap_ {}
+
+export = PreviousMap
diff --git a/node_modules/postcss/lib/previous-map.js b/node_modules/postcss/lib/previous-map.js
new file mode 100644
index 0000000..f3093df
--- /dev/null
+++ b/node_modules/postcss/lib/previous-map.js
@@ -0,0 +1,142 @@
+'use strict'
+
+let { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')
+let { existsSync, readFileSync } = require('fs')
+let { dirname, join } = require('path')
+
+function fromBase64(str) {
+ if (Buffer) {
+ return Buffer.from(str, 'base64').toString()
+ } else {
+ /* c8 ignore next 2 */
+ return window.atob(str)
+ }
+}
+
+class PreviousMap {
+ constructor(css, opts) {
+ if (opts.map === false) return
+ this.loadAnnotation(css)
+ this.inline = this.startWith(this.annotation, 'data:')
+
+ let prev = opts.map ? opts.map.prev : undefined
+ let text = this.loadMap(opts.from, prev)
+ if (!this.mapFile && opts.from) {
+ this.mapFile = opts.from
+ }
+ if (this.mapFile) this.root = dirname(this.mapFile)
+ if (text) this.text = text
+ }
+
+ consumer() {
+ if (!this.consumerCache) {
+ this.consumerCache = new SourceMapConsumer(this.text)
+ }
+ return this.consumerCache
+ }
+
+ decodeInline(text) {
+ let baseCharsetUri = /^data:application\/json;charset=utf-?8;base64,/
+ let baseUri = /^data:application\/json;base64,/
+ let charsetUri = /^data:application\/json;charset=utf-?8,/
+ let uri = /^data:application\/json,/
+
+ if (charsetUri.test(text) || uri.test(text)) {
+ return decodeURIComponent(text.substr(RegExp.lastMatch.length))
+ }
+
+ if (baseCharsetUri.test(text) || baseUri.test(text)) {
+ return fromBase64(text.substr(RegExp.lastMatch.length))
+ }
+
+ let encoding = text.match(/data:application\/json;([^,]+),/)[1]
+ throw new Error('Unsupported source map encoding ' + encoding)
+ }
+
+ getAnnotationURL(sourceMapString) {
+ return sourceMapString.replace(/^\/\*\s*# sourceMappingURL=/, '').trim()
+ }
+
+ isMap(map) {
+ if (typeof map !== 'object') return false
+ return (
+ typeof map.mappings === 'string' ||
+ typeof map._mappings === 'string' ||
+ Array.isArray(map.sections)
+ )
+ }
+
+ loadAnnotation(css) {
+ let comments = css.match(/\/\*\s*# sourceMappingURL=/gm)
+ if (!comments) return
+
+ // sourceMappingURLs from comments, strings, etc.
+ let start = css.lastIndexOf(comments.pop())
+ let end = css.indexOf('*/', start)
+
+ if (start > -1 && end > -1) {
+ // Locate the last sourceMappingURL to avoid pickin
+ this.annotation = this.getAnnotationURL(css.substring(start, end))
+ }
+ }
+
+ loadFile(path) {
+ this.root = dirname(path)
+ if (existsSync(path)) {
+ this.mapFile = path
+ return readFileSync(path, 'utf-8').toString().trim()
+ }
+ }
+
+ loadMap(file, prev) {
+ if (prev === false) return false
+
+ if (prev) {
+ if (typeof prev === 'string') {
+ return prev
+ } else if (typeof prev === 'function') {
+ let prevPath = prev(file)
+ if (prevPath) {
+ let map = this.loadFile(prevPath)
+ if (!map) {
+ throw new Error(
+ 'Unable to load previous source map: ' + prevPath.toString()
+ )
+ }
+ return map
+ }
+ } else if (prev instanceof SourceMapConsumer) {
+ return SourceMapGenerator.fromSourceMap(prev).toString()
+ } else if (prev instanceof SourceMapGenerator) {
+ return prev.toString()
+ } else if (this.isMap(prev)) {
+ return JSON.stringify(prev)
+ } else {
+ throw new Error(
+ 'Unsupported previous source map format: ' + prev.toString()
+ )
+ }
+ } else if (this.inline) {
+ return this.decodeInline(this.annotation)
+ } else if (this.annotation) {
+ let map = this.annotation
+ if (file) map = join(dirname(file), map)
+ return this.loadFile(map)
+ }
+ }
+
+ startWith(string, start) {
+ if (!string) return false
+ return string.substr(0, start.length) === start
+ }
+
+ withContent() {
+ return !!(
+ this.consumer().sourcesContent &&
+ this.consumer().sourcesContent.length > 0
+ )
+ }
+}
+
+module.exports = PreviousMap
+PreviousMap.default = PreviousMap
diff --git a/node_modules/postcss/lib/processor.d.ts b/node_modules/postcss/lib/processor.d.ts
new file mode 100644
index 0000000..50c9a07
--- /dev/null
+++ b/node_modules/postcss/lib/processor.d.ts
@@ -0,0 +1,115 @@
+import Document from './document.js'
+import LazyResult from './lazy-result.js'
+import NoWorkResult from './no-work-result.js'
+import {
+ AcceptedPlugin,
+ Plugin,
+ ProcessOptions,
+ TransformCallback,
+ Transformer
+} from './postcss.js'
+import Result from './result.js'
+import Root from './root.js'
+
+declare namespace Processor {
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ export { Processor_ as default }
+}
+
+/**
+ * Contains plugins to process CSS. Create one `Processor` instance,
+ * initialize its plugins, and then use that instance on numerous CSS files.
+ *
+ * ```js
+ * const processor = postcss([autoprefixer, postcssNested])
+ * processor.process(css1).then(result => console.log(result.css))
+ * processor.process(css2).then(result => console.log(result.css))
+ * ```
+ */
+declare class Processor_ {
+ /**
+ * Plugins added to this processor.
+ *
+ * ```js
+ * const processor = postcss([autoprefixer, postcssNested])
+ * processor.plugins.length //=> 2
+ * ```
+ */
+ plugins: (Plugin | TransformCallback | Transformer)[]
+
+ /**
+ * Current PostCSS version.
+ *
+ * ```js
+ * if (result.processor.version.split('.')[0] !== '6') {
+ * throw new Error('This plugin works only with PostCSS 6')
+ * }
+ * ```
+ */
+ version: string
+
+ /**
+ * @param plugins PostCSS plugins
+ */
+ constructor(plugins?: AcceptedPlugin[])
+
+ /**
+ * Parses source CSS and returns a `LazyResult` Promise proxy.
+ * Because some plugins can be asynchronous it doesn’t make
+ * any transformations. Transformations will be applied
+ * in the `LazyResult` methods.
+ *
+ * ```js
+ * processor.process(css, { from: 'a.css', to: 'a.out.css' })
+ * .then(result => {
+ * console.log(result.css)
+ * })
+ * ```
+ *
+ * @param css String with input CSS or any object with a `toString()` method,
+ * like a Buffer. Optionally, send a `Result` instance
+ * and the processor will take the `Root` from it.
+ * @param opts Options.
+ * @return Promise proxy.
+ */
+ process(
+ css: { toString(): string } | LazyResult | Result | Root | string
+ ): LazyResult | NoWorkResult
+ process<RootNode extends Document | Root = Root>(
+ css: { toString(): string } | LazyResult | Result | Root | string,
+ options: ProcessOptions<RootNode>
+ ): LazyResult<RootNode>
+
+ /**
+ * Adds a plugin to be used as a CSS processor.
+ *
+ * PostCSS plugin can be in 4 formats:
+ * * A plugin in `Plugin` format.
+ * * A plugin creator function with `pluginCreator.postcss = true`.
+ * PostCSS will call this function without argument to get plugin.
+ * * A function. PostCSS will pass the function a {@link Root}
+ * as the first argument and current `Result` instance
+ * as the second.
+ * * Another `Processor` instance. PostCSS will copy plugins
+ * from that instance into this one.
+ *
+ * Plugins can also be added by passing them as arguments when creating
+ * a `postcss` instance (see [`postcss(plugins)`]).
+ *
+ * Asynchronous plugins should return a `Promise` instance.
+ *
+ * ```js
+ * const processor = postcss()
+ * .use(autoprefixer)
+ * .use(postcssNested)
+ * ```
+ *
+ * @param plugin PostCSS plugin or `Processor` with plugins.
+ * @return Current processor to make methods chain.
+ */
+ use(plugin: AcceptedPlugin): this
+}
+
+declare class Processor extends Processor_ {}
+
+export = Processor
diff --git a/node_modules/postcss/lib/processor.js b/node_modules/postcss/lib/processor.js
new file mode 100644
index 0000000..92842b6
--- /dev/null
+++ b/node_modules/postcss/lib/processor.js
@@ -0,0 +1,67 @@
+'use strict'
+
+let NoWorkResult = require('./no-work-result')
+let LazyResult = require('./lazy-result')
+let Document = require('./document')
+let Root = require('./root')
+
+class Processor {
+ constructor(plugins = []) {
+ this.version = '8.4.31'
+ this.plugins = this.normalize(plugins)
+ }
+
+ normalize(plugins) {
+ let normalized = []
+ for (let i of plugins) {
+ if (i.postcss === true) {
+ i = i()
+ } else if (i.postcss) {
+ i = i.postcss
+ }
+
+ if (typeof i === 'object' && Array.isArray(i.plugins)) {
+ normalized = normalized.concat(i.plugins)
+ } else if (typeof i === 'object' && i.postcssPlugin) {
+ normalized.push(i)
+ } else if (typeof i === 'function') {
+ normalized.push(i)
+ } else if (typeof i === 'object' && (i.parse || i.stringify)) {
+ if (process.env.NODE_ENV !== 'production') {
+ throw new Error(
+ 'PostCSS syntaxes cannot be used as plugins. Instead, please use ' +
+ 'one of the syntax/parser/stringifier options as outlined ' +
+ 'in your PostCSS runner documentation.'
+ )
+ }
+ } else {
+ throw new Error(i + ' is not a PostCSS plugin')
+ }
+ }
+ return normalized
+ }
+
+ process(css, opts = {}) {
+ if (
+ this.plugins.length === 0 &&
+ typeof opts.parser === 'undefined' &&
+ typeof opts.stringifier === 'undefined' &&
+ typeof opts.syntax === 'undefined'
+ ) {
+ return new NoWorkResult(this, css, opts)
+ } else {
+ return new LazyResult(this, css, opts)
+ }
+ }
+
+ use(plugin) {
+ this.plugins = this.plugins.concat(this.normalize([plugin]))
+ return this
+ }
+}
+
+module.exports = Processor
+Processor.default = Processor
+
+Root.registerProcessor(Processor)
+Document.registerProcessor(Processor)
diff --git a/node_modules/postcss/lib/result.d.ts b/node_modules/postcss/lib/result.d.ts
new file mode 100644
index 0000000..c3dcbda
--- /dev/null
+++ b/node_modules/postcss/lib/result.d.ts
@@ -0,0 +1,206 @@
+import {
+ Document,
+ Node,
+ Plugin,
+ ProcessOptions,
+ Root,
+ SourceMap,
+ TransformCallback,
+ Warning,
+ WarningOptions
+} from './postcss.js'
+import Processor from './processor.js'
+
+declare namespace Result {
+ export interface Message {
+ [others: string]: any
+
+ /**
+ * Source PostCSS plugin name.
+ */
+ plugin?: string
+
+ /**
+ * Message type.
+ */
+ type: string
+ }
+
+ export interface ResultOptions extends ProcessOptions {
+ /**
+ * The CSS node that was the source of the warning.
+ */
+ node?: Node
+
+ /**
+ * Name of plugin that created this warning. `Result#warn` will fill it
+ * automatically with `Plugin#postcssPlugin` value.
+ */
+ plugin?: string
+ }
+
+
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ export { Result_ as default }
+}
+
+/**
+ * Provides the result of the PostCSS transformations.
+ *
+ * A Result instance is returned by `LazyResult#then`
+ * or `Root#toResult` methods.
+ *
+ * ```js
+ * postcss([autoprefixer]).process(css).then(result => {
+ * console.log(result.css)
+ * })
+ * ```
+ *
+ * ```js
+ * const result2 = postcss.parse(css).toResult()
+ * ```
+ */
+declare class Result_<RootNode = Document | Root> {
+ /**
+ * A CSS string representing of `Result#root`.
+ *
+ * ```js
+ * postcss.parse('a{}').toResult().css //=> "a{}"
+ * ```
+ */
+ css: string
+
+ /**
+ * Last runned PostCSS plugin.
+ */
+ lastPlugin: Plugin | TransformCallback
+
+ /**
+ * An instance of `SourceMapGenerator` class from the `source-map` library,
+ * representing changes to the `Result#root` instance.
+ *
+ * ```js
+ * result.map.toJSON() //=> { version: 3, file: 'a.css', … }
+ * ```
+ *
+ * ```js
+ * if (result.map) {
+ * fs.writeFileSync(result.opts.to + '.map', result.map.toString())
+ * }
+ * ```
+ */
+ map: SourceMap
+
+ /**
+ * Contains messages from plugins (e.g., warnings or custom messages).
+ * Each message should have type and plugin properties.
+ *
+ * ```js
+ * AtRule: {
+ * import: (atRule, { result }) {
+ * const importedFile = parseImport(atRule)
+ * result.messages.push({
+ * type: 'dependency',
+ * plugin: 'postcss-import',
+ * file: importedFile,
+ * parent: result.opts.from
+ * })
+ * }
+ * }
+ * ```
+ */
+ messages: Result.Message[]
+
+ /**
+ * Options from the `Processor#process` or `Root#toResult` call
+ * that produced this Result instance.]
+ *
+ * ```js
+ * root.toResult(opts).opts === opts
+ * ```
+ */
+ opts: Result.ResultOptions
+
+ /**
+ * The Processor instance used for this transformation.
+ *
+ * ```js
+ * for (const plugin of result.processor.plugins) {
+ * if (plugin.postcssPlugin === 'postcss-bad') {
+ * throw 'postcss-good is incompatible with postcss-bad'
+ * }
+ * })
+ * ```
+ */
+ processor: Processor
+
+ /**
+ * Root node after all transformations.
+ *
+ * ```js
+ * root.toResult().root === root
+ * ```
+ */
+ root: RootNode
+
+ /**
+ * @param processor Processor used for this transformation.
+ * @param root Root node after all transformations.
+ * @param opts Options from the `Processor#process` or `Root#toResult`.
+ */
+ constructor(processor: Processor, root: RootNode, opts: Result.ResultOptions)
+
+ /**
+ * Returns for `Result#css` content.
+ *
+ * ```js
+ * result + '' === result.css
+ * ```
+ *
+ * @return String representing of `Result#root`.
+ */
+ toString(): string
+
+ /**
+ * Creates an instance of `Warning` and adds it to `Result#messages`.
+ *
+ * ```js
+ * if (decl.important) {
+ * result.warn('Avoid !important', { node: decl, word: '!important' })
+ * }
+ * ```
+ *
+ * @param text Warning message.
+ * @param opts Warning options.
+ * @return Created warning.
+ */
+ warn(message: string, options?: WarningOptions): Warning
+
+ /**
+ * Returns warnings from plugins. Filters `Warning` instances
+ * from `Result#messages`.
+ *
+ * ```js
+ * result.warnings().forEach(warn => {
+ * console.warn(warn.toString())
+ * })
+ * ```
+ *
+ * @return Warnings from plugins.
+ */
+ warnings(): Warning[]
+
+ /**
+ * An alias for the `Result#css` property.
+ * Use it with syntaxes that generate non-CSS output.
+ *
+ * ```js
+ * result.css === result.content
+ * ```
+ */
+ get content(): string
+}
+
+declare class Result<RootNode = Document | Root> extends Result_<RootNode> {}
+
+export = Result
diff --git a/node_modules/postcss/lib/result.js b/node_modules/postcss/lib/result.js
new file mode 100644
index 0000000..a39751d
--- /dev/null
+++ b/node_modules/postcss/lib/result.js
@@ -0,0 +1,42 @@
+'use strict'
+
+let Warning = require('./warning')
+
+class Result {
+ constructor(processor, root, opts) {
+ this.processor = processor
+ this.messages = []
+ this.root = root
+ this.opts = opts
+ this.css = undefined
+ this.map = undefined
+ }
+
+ toString() {
+ return this.css
+ }
+
+ warn(text, opts = {}) {
+ if (!opts.plugin) {
+ if (this.lastPlugin && this.lastPlugin.postcssPlugin) {
+ opts.plugin = this.lastPlugin.postcssPlugin
+ }
+ }
+
+ let warning = new Warning(text, opts)
+ this.messages.push(warning)
+
+ return warning
+ }
+
+ warnings() {
+ return this.messages.filter(i => i.type === 'warning')
+ }
+
+ get content() {
+ return this.css
+ }
+}
+
+module.exports = Result
+Result.default = Result
diff --git a/node_modules/postcss/lib/root.d.ts b/node_modules/postcss/lib/root.d.ts
new file mode 100644
index 0000000..98fb4bc
--- /dev/null
+++ b/node_modules/postcss/lib/root.d.ts
@@ -0,0 +1,86 @@
+import Container, { ContainerProps } from './container.js'
+import Document from './document.js'
+import { ProcessOptions } from './postcss.js'
+import Result from './result.js'
+
+declare namespace Root {
+ export interface RootRaws extends Record<string, any> {
+ /**
+ * The space symbols after the last child to the end of file.
+ */
+ after?: string
+
+ /**
+ * Non-CSS code after `Root`, when `Root` is inside `Document`.
+ *
+ * **Experimental:** some aspects of this node could change within minor
+ * or patch version releases.
+ */
+ codeAfter?: string
+
+ /**
+ * Non-CSS code before `Root`, when `Root` is inside `Document`.
+ *
+ * **Experimental:** some aspects of this node could change within minor
+ * or patch version releases.
+ */
+ codeBefore?: string
+
+ /**
+ * Is the last child has an (optional) semicolon.
+ */
+ semicolon?: boolean
+ }
+
+ export interface RootProps extends ContainerProps {
+ /**
+ * Information used to generate byte-to-byte equal node string
+ * as it was in the origin input.
+ * */
+ raws?: RootRaws
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ export { Root_ as default }
+}
+
+/**
+ * Represents a CSS file and contains all its parsed nodes.
+ *
+ * ```js
+ * const root = postcss.parse('a{color:black} b{z-index:2}')
+ * root.type //=> 'root'
+ * root.nodes.length //=> 2
+ * ```
+ */
+declare class Root_ extends Container {
+ parent: Document | undefined
+ raws: Root.RootRaws
+ type: 'root'
+
+ constructor(defaults?: Root.RootProps)
+
+ assign(overrides: object | Root.RootProps): this
+ clone(overrides?: Partial<Root.RootProps>): Root
+ cloneAfter(overrides?: Partial<Root.RootProps>): Root
+ cloneBefore(overrides?: Partial<Root.RootProps>): Root
+
+ /**
+ * Returns a `Result` instance representing the root’s CSS.
+ *
+ * ```js
+ * const root1 = postcss.parse(css1, { from: 'a.css' })
+ * const root2 = postcss.parse(css2, { from: 'b.css' })
+ * root1.append(root2)
+ * const result = root1.toResult({ to: 'all.css', map: true })
+ * ```
+ *
+ * @param opts Options.
+ * @return Result with current root’s CSS.
+ */
+ toResult(options?: ProcessOptions): Result
+}
+
+declare class Root extends Root_ {}
+
+export = Root
diff --git a/node_modules/postcss/lib/root.js b/node_modules/postcss/lib/root.js
new file mode 100644
index 0000000..ea574ed
--- /dev/null
+++ b/node_modules/postcss/lib/root.js
@@ -0,0 +1,61 @@
+'use strict'
+
+let Container = require('./container')
+
+let LazyResult, Processor
+
+class Root extends Container {
+ constructor(defaults) {
+ super(defaults)
+ this.type = 'root'
+ if (!this.nodes) this.nodes = []
+ }
+
+ normalize(child, sample, type) {
+ let nodes = super.normalize(child)
+
+ if (sample) {
+ if (type === 'prepend') {
+ if (this.nodes.length > 1) {
+ sample.raws.before = this.nodes[1].raws.before
+ } else {
+ delete sample.raws.before
+ }
+ } else if (this.first !== sample) {
+ for (let node of nodes) {
+ node.raws.before = sample.raws.before
+ }
+ }
+ }
+
+ return nodes
+ }
+
+ removeChild(child, ignore) {
+ let index = this.index(child)
+
+ if (!ignore && index === 0 && this.nodes.length > 1) {
+ this.nodes[1].raws.before = this.nodes[index].raws.before
+ }
+
+ return super.removeChild(child)
+ }
+
+ toResult(opts = {}) {
+ let lazy = new LazyResult(new Processor(), this, opts)
+ return lazy.stringify()
+ }
+}
+
+Root.registerLazyResult = dependant => {
+ LazyResult = dependant
+}
+
+Root.registerProcessor = dependant => {
+ Processor = dependant
+}
+
+module.exports = Root
+Root.default = Root
+
+Container.registerRoot(Root)
diff --git a/node_modules/postcss/lib/rule.d.ts b/node_modules/postcss/lib/rule.d.ts
new file mode 100644
index 0000000..04be5d6
--- /dev/null
+++ b/node_modules/postcss/lib/rule.d.ts
@@ -0,0 +1,113 @@
+import Container, { ContainerProps } from './container.js'
+
+declare namespace Rule {
+ export interface RuleRaws extends Record<string, unknown> {
+ /**
+ * The space symbols after the last child of the node to the end of the node.
+ */
+ after?: string
+
+ /**
+ * The space symbols before the node. It also stores `*`
+ * and `_` symbols before the declaration (IE hack).
+ */
+ before?: string
+
+ /**
+ * The symbols between the selector and `{` for rules.
+ */
+ between?: string
+
+ /**
+ * Contains `true` if there is semicolon after rule.
+ */
+ ownSemicolon?: string
+
+ /**
+ * The rule’s selector with comments.
+ */
+ selector?: {
+ raw: string
+ value: string
+ }
+
+ /**
+ * Contains `true` if the last child has an (optional) semicolon.
+ */
+ semicolon?: boolean
+ }
+
+ export interface RuleProps extends ContainerProps {
+ /** Information used to generate byte-to-byte equal node string as it was in the origin input. */
+ raws?: RuleRaws
+ /** Selector or selectors of the rule. */
+ selector?: string
+ /** Selectors of the rule represented as an array of strings. */
+ selectors?: string[]
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ export { Rule_ as default }
+}
+
+/**
+ * Represents a CSS rule: a selector followed by a declaration block.
+ *
+ * ```js
+ * Once (root, { Rule }) {
+ * let a = new Rule({ selector: 'a' })
+ * a.append(…)
+ * root.append(a)
+ * }
+ * ```
+ *
+ * ```js
+ * const root = postcss.parse('a{}')
+ * const rule = root.first
+ * rule.type //=> 'rule'
+ * rule.toString() //=> 'a{}'
+ * ```
+ */
+declare class Rule_ extends Container {
+ parent: Container | undefined
+ raws: Rule.RuleRaws
+ /**
+ * The rule’s full selector represented as a string.
+ *
+ * ```js
+ * const root = postcss.parse('a, b { }')
+ * const rule = root.first
+ * rule.selector //=> 'a, b'
+ * ```
+ */
+ selector: string
+
+ /**
+ * An array containing the rule’s individual selectors.
+ * Groups of selectors are split at commas.
+ *
+ * ```js
+ * const root = postcss.parse('a, b { }')
+ * const rule = root.first
+ *
+ * rule.selector //=> 'a, b'
+ * rule.selectors //=> ['a', 'b']
+ *
+ * rule.selectors = ['a', 'strong']
+ * rule.selector //=> 'a, strong'
+ * ```
+ */
+ selectors: string[]
+
+ type: 'rule'
+
+ constructor(defaults?: Rule.RuleProps)
+ assign(overrides: object | Rule.RuleProps): this
+ clone(overrides?: Partial<Rule.RuleProps>): Rule
+ cloneAfter(overrides?: Partial<Rule.RuleProps>): Rule
+ cloneBefore(overrides?: Partial<Rule.RuleProps>): Rule
+}
+
+declare class Rule extends Rule_ {}
+
+export = Rule
diff --git a/node_modules/postcss/lib/rule.js b/node_modules/postcss/lib/rule.js
new file mode 100644
index 0000000..a93ab25
--- /dev/null
+++ b/node_modules/postcss/lib/rule.js
@@ -0,0 +1,27 @@
+'use strict'
+
+let Container = require('./container')
+let list = require('./list')
+
+class Rule extends Container {
+ constructor(defaults) {
+ super(defaults)
+ this.type = 'rule'
+ if (!this.nodes) this.nodes = []
+ }
+
+ get selectors() {
+ return list.comma(this.selector)
+ }
+
+ set selectors(values) {
+ let match = this.selector ? this.selector.match(/,\s*/) : null
+ let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen')
+ this.selector = values.join(sep)
+ }
+}
+
+module.exports = Rule
+Rule.default = Rule
+
+Container.registerRule(Rule)
diff --git a/node_modules/postcss/lib/stringifier.d.ts b/node_modules/postcss/lib/stringifier.d.ts
new file mode 100644
index 0000000..f707a6a
--- /dev/null
+++ b/node_modules/postcss/lib/stringifier.d.ts
@@ -0,0 +1,46 @@
+import {
+ AnyNode,
+ AtRule,
+ Builder,
+ Comment,
+ Container,
+ Declaration,
+ Document,
+ Root,
+ Rule
+} from './postcss.js'
+
+declare namespace Stringifier {
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ export { Stringifier_ as default }
+}
+
+declare class Stringifier_ {
+ builder: Builder
+ constructor(builder: Builder)
+ atrule(node: AtRule, semicolon?: boolean): void
+ beforeAfter(node: AnyNode, detect: 'after' | 'before'): string
+ block(node: AnyNode, start: string): void
+ body(node: Container): void
+ comment(node: Comment): void
+ decl(node: Declaration, semicolon?: boolean): void
+ document(node: Document): void
+ raw(node: AnyNode, own: null | string, detect?: string): string
+ rawBeforeClose(root: Root): string | undefined
+ rawBeforeComment(root: Root, node: Comment): string | undefined
+ rawBeforeDecl(root: Root, node: Declaration): string | undefined
+ rawBeforeOpen(root: Root): string | undefined
+ rawBeforeRule(root: Root): string | undefined
+ rawColon(root: Root): string | undefined
+ rawEmptyBody(root: Root): string | undefined
+ rawIndent(root: Root): string | undefined
+ rawSemicolon(root: Root): boolean | undefined
+ rawValue(node: AnyNode, prop: string): string
+ root(node: Root): void
+ rule(node: Rule): void
+ stringify(node: AnyNode, semicolon?: boolean): void
+}
+
+declare class Stringifier extends Stringifier_ {}
+
+export = Stringifier
diff --git a/node_modules/postcss/lib/stringifier.js b/node_modules/postcss/lib/stringifier.js
new file mode 100644
index 0000000..e07ad12
--- /dev/null
+++ b/node_modules/postcss/lib/stringifier.js
@@ -0,0 +1,353 @@
+'use strict'
+
+const DEFAULT_RAW = {
+ after: '\n',
+ beforeClose: '\n',
+ beforeComment: '\n',
+ beforeDecl: '\n',
+ beforeOpen: ' ',
+ beforeRule: '\n',
+ colon: ': ',
+ commentLeft: ' ',
+ commentRight: ' ',
+ emptyBody: '',
+ indent: ' ',
+ semicolon: false
+}
+
+function capitalize(str) {
+ return str[0].toUpperCase() + str.slice(1)
+}
+
+class Stringifier {
+ constructor(builder) {
+ this.builder = builder
+ }
+
+ atrule(node, semicolon) {
+ let name = '@' + node.name
+ let params = node.params ? this.rawValue(node, 'params') : ''
+
+ if (typeof node.raws.afterName !== 'undefined') {
+ name += node.raws.afterName
+ } else if (params) {
+ name += ' '
+ }
+
+ if (node.nodes) {
+ this.block(node, name + params)
+ } else {
+ let end = (node.raws.between || '') + (semicolon ? ';' : '')
+ this.builder(name + params + end, node)
+ }
+ }
+
+ beforeAfter(node, detect) {
+ let value
+ if (node.type === 'decl') {
+ value = this.raw(node, null, 'beforeDecl')
+ } else if (node.type === 'comment') {
+ value = this.raw(node, null, 'beforeComment')
+ } else if (detect === 'before') {
+ value = this.raw(node, null, 'beforeRule')
+ } else {
+ value = this.raw(node, null, 'beforeClose')
+ }
+
+ let buf = node.parent
+ let depth = 0
+ while (buf && buf.type !== 'root') {
+ depth += 1
+ buf = buf.parent
+ }
+
+ if (value.includes('\n')) {
+ let indent = this.raw(node, null, 'indent')
+ if (indent.length) {
+ for (let step = 0; step < depth; step++) value += indent
+ }
+ }
+
+ return value
+ }
+
+ block(node, start) {
+ let between = this.raw(node, 'between', 'beforeOpen')
+ this.builder(start + between + '{', node, 'start')
+
+ let after
+ if (node.nodes && node.nodes.length) {
+ this.body(node)
+ after = this.raw(node, 'after')
+ } else {
+ after = this.raw(node, 'after', 'emptyBody')
+ }
+
+ if (after) this.builder(after)
+ this.builder('}', node, 'end')
+ }
+
+ body(node) {
+ let last = node.nodes.length - 1
+ while (last > 0) {
+ if (node.nodes[last].type !== 'comment') break
+ last -= 1
+ }
+
+ let semicolon = this.raw(node, 'semicolon')
+ for (let i = 0; i < node.nodes.length; i++) {
+ let child = node.nodes[i]
+ let before = this.raw(child, 'before')
+ if (before) this.builder(before)
+ this.stringify(child, last !== i || semicolon)
+ }
+ }
+
+ comment(node) {
+ let left = this.raw(node, 'left', 'commentLeft')
+ let right = this.raw(node, 'right', 'commentRight')
+ this.builder('/*' + left + node.text + right + '*/', node)
+ }
+
+ decl(node, semicolon) {
+ let between = this.raw(node, 'between', 'colon')
+ let string = node.prop + between + this.rawValue(node, 'value')
+
+ if (node.important) {
+ string += node.raws.important || ' !important'
+ }
+
+ if (semicolon) string += ';'
+ this.builder(string, node)
+ }
+
+ document(node) {
+ this.body(node)
+ }
+
+ raw(node, own, detect) {
+ let value
+ if (!detect) detect = own
+
+ // Already had
+ if (own) {
+ value = node.raws[own]
+ if (typeof value !== 'undefined') return value
+ }
+
+ let parent = node.parent
+
+ if (detect === 'before') {
+ // Hack for first rule in CSS
+ if (!parent || (parent.type === 'root' && parent.first === node)) {
+ return ''
+ }
+
+ // `root` nodes in `document` should use only their own raws
+ if (parent && parent.type === 'document') {
+ return ''
+ }
+ }
+
+ // Floating child without parent
+ if (!parent) return DEFAULT_RAW[detect]
+
+ // Detect style by other nodes
+ let root = node.root()
+ if (!root.rawCache) root.rawCache = {}
+ if (typeof root.rawCache[detect] !== 'undefined') {
+ return root.rawCache[detect]
+ }
+
+ if (detect === 'before' || detect === 'after') {
+ return this.beforeAfter(node, detect)
+ } else {
+ let method = 'raw' + capitalize(detect)
+ if (this[method]) {
+ value = this[method](root, node)
+ } else {
+ root.walk(i => {
+ value = i.raws[own]
+ if (typeof value !== 'undefined') return false
+ })
+ }
+ }
+
+ if (typeof value === 'undefined') value = DEFAULT_RAW[detect]
+
+ root.rawCache[detect] = value
+ return value
+ }
+
+ rawBeforeClose(root) {
+ let value
+ root.walk(i => {
+ if (i.nodes && i.nodes.length > 0) {
+ if (typeof i.raws.after !== 'undefined') {
+ value = i.raws.after
+ if (value.includes('\n')) {
+ value = value.replace(/[^\n]+$/, '')
+ }
+ return false
+ }
+ }
+ })
+ if (value) value = value.replace(/\S/g, '')
+ return value
+ }
+
+ rawBeforeComment(root, node) {
+ let value
+ root.walkComments(i => {
+ if (typeof i.raws.before !== 'undefined') {
+ value = i.raws.before
+ if (value.includes('\n')) {
+ value = value.replace(/[^\n]+$/, '')
+ }
+ return false
+ }
+ })
+ if (typeof value === 'undefined') {
+ value = this.raw(node, null, 'beforeDecl')
+ } else if (value) {
+ value = value.replace(/\S/g, '')
+ }
+ return value
+ }
+
+ rawBeforeDecl(root, node) {
+ let value
+ root.walkDecls(i => {
+ if (typeof i.raws.before !== 'undefined') {
+ value = i.raws.before
+ if (value.includes('\n')) {
+ value = value.replace(/[^\n]+$/, '')
+ }
+ return false
+ }
+ })
+ if (typeof value === 'undefined') {
+ value = this.raw(node, null, 'beforeRule')
+ } else if (value) {
+ value = value.replace(/\S/g, '')
+ }
+ return value
+ }
+
+ rawBeforeOpen(root) {
+ let value
+ root.walk(i => {
+ if (i.type !== 'decl') {
+ value = i.raws.between
+ if (typeof value !== 'undefined') return false
+ }
+ })
+ return value
+ }
+
+ rawBeforeRule(root) {
+ let value
+ root.walk(i => {
+ if (i.nodes && (i.parent !== root || root.first !== i)) {
+ if (typeof i.raws.before !== 'undefined') {
+ value = i.raws.before
+ if (value.includes('\n')) {
+ value = value.replace(/[^\n]+$/, '')
+ }
+ return false
+ }
+ }
+ })
+ if (value) value = value.replace(/\S/g, '')
+ return value
+ }
+
+ rawColon(root) {
+ let value
+ root.walkDecls(i => {
+ if (typeof i.raws.between !== 'undefined') {
+ value = i.raws.between.replace(/[^\s:]/g, '')
+ return false
+ }
+ })
+ return value
+ }
+
+ rawEmptyBody(root) {
+ let value
+ root.walk(i => {
+ if (i.nodes && i.nodes.length === 0) {
+ value = i.raws.after
+ if (typeof value !== 'undefined') return false
+ }
+ })
+ return value
+ }
+
+ rawIndent(root) {
+ if (root.raws.indent) return root.raws.indent
+ let value
+ root.walk(i => {
+ let p = i.parent
+ if (p && p !== root && p.parent && p.parent === root) {
+ if (typeof i.raws.before !== 'undefined') {
+ let parts = i.raws.before.split('\n')
+ value = parts[parts.length - 1]
+ value = value.replace(/\S/g, '')
+ return false
+ }
+ }
+ })
+ return value
+ }
+
+ rawSemicolon(root) {
+ let value
+ root.walk(i => {
+ if (i.nodes && i.nodes.length && i.last.type === 'decl') {
+ value = i.raws.semicolon
+ if (typeof value !== 'undefined') return false
+ }
+ })
+ return value
+ }
+
+ rawValue(node, prop) {
+ let value = node[prop]
+ let raw = node.raws[prop]
+ if (raw && raw.value === value) {
+ return raw.raw
+ }
+
+ return value
+ }
+
+ root(node) {
+ this.body(node)
+ if (node.raws.after) this.builder(node.raws.after)
+ }
+
+ rule(node) {
+ this.block(node, this.rawValue(node, 'selector'))
+ if (node.raws.ownSemicolon) {
+ this.builder(node.raws.ownSemicolon, node, 'end')
+ }
+ }
+
+ stringify(node, semicolon) {
+ /* c8 ignore start */
+ if (!this[node.type]) {
+ throw new Error(
+ 'Unknown AST node type ' +
+ node.type +
+ '. ' +
+ 'Maybe you need to change PostCSS stringifier.'
+ )
+ }
+ /* c8 ignore stop */
+ this[node.type](node, semicolon)
+ }
+}
+
+module.exports = Stringifier
+Stringifier.default = Stringifier
diff --git a/node_modules/postcss/lib/stringify.d.ts b/node_modules/postcss/lib/stringify.d.ts
new file mode 100644
index 0000000..06ad0b4
--- /dev/null
+++ b/node_modules/postcss/lib/stringify.d.ts
@@ -0,0 +1,9 @@
+import { Stringifier } from './postcss.js'
+
+interface Stringify extends Stringifier {
+ default: Stringify
+}
+
+declare const stringify: Stringify
+
+export = stringify
diff --git a/node_modules/postcss/lib/stringify.js b/node_modules/postcss/lib/stringify.js
new file mode 100644
index 0000000..77bd017
--- /dev/null
+++ b/node_modules/postcss/lib/stringify.js
@@ -0,0 +1,11 @@
+'use strict'
+
+let Stringifier = require('./stringifier')
+
+function stringify(node, builder) {
+ let str = new Stringifier(builder)
+ str.stringify(node)
+}
+
+module.exports = stringify
+stringify.default = stringify
diff --git a/node_modules/postcss/lib/symbols.js b/node_modules/postcss/lib/symbols.js
new file mode 100644
index 0000000..a142c26
--- /dev/null
+++ b/node_modules/postcss/lib/symbols.js
@@ -0,0 +1,5 @@
+'use strict'
+
+module.exports.isClean = Symbol('isClean')
+
+module.exports.my = Symbol('my')
diff --git a/node_modules/postcss/lib/terminal-highlight.js b/node_modules/postcss/lib/terminal-highlight.js
new file mode 100644
index 0000000..6196c9d
--- /dev/null
+++ b/node_modules/postcss/lib/terminal-highlight.js
@@ -0,0 +1,70 @@
+'use strict'
+
+let pico = require('picocolors')
+
+let tokenizer = require('./tokenize')
+
+let Input
+
+function registerInput(dependant) {
+ Input = dependant
+}
+
+const HIGHLIGHT_THEME = {
+ ';': pico.yellow,
+ ':': pico.yellow,
+ '(': pico.cyan,
+ ')': pico.cyan,
+ '[': pico.yellow,
+ ']': pico.yellow,
+ '{': pico.yellow,
+ '}': pico.yellow,
+ 'at-word': pico.cyan,
+ 'brackets': pico.cyan,
+ 'call': pico.cyan,
+ 'class': pico.yellow,
+ 'comment': pico.gray,
+ 'hash': pico.magenta,
+ 'string': pico.green
+}
+
+function getTokenType([type, value], processor) {
+ if (type === 'word') {
+ if (value[0] === '.') {
+ return 'class'
+ }
+ if (value[0] === '#') {
+ return 'hash'
+ }
+ }
+
+ if (!processor.endOfFile()) {
+ let next = processor.nextToken()
+ processor.back(next)
+ if (next[0] === 'brackets' || next[0] === '(') return 'call'
+ }
+
+ return type
+}
+
+function terminalHighlight(css) {
+ let processor = tokenizer(new Input(css), { ignoreErrors: true })
+ let result = ''
+ while (!processor.endOfFile()) {
+ let token = processor.nextToken()
+ let color = HIGHLIGHT_THEME[getTokenType(token, processor)]
+ if (color) {
+ result += token[1]
+ .split(/\r?\n/)
+ .map(i => color(i))
+ .join('\n')
+ } else {
+ result += token[1]
+ }
+ }
+ return result
+}
+
+terminalHighlight.registerInput = registerInput
+
+module.exports = terminalHighlight
diff --git a/node_modules/postcss/lib/tokenize.js b/node_modules/postcss/lib/tokenize.js
new file mode 100644
index 0000000..39a20a3
--- /dev/null
+++ b/node_modules/postcss/lib/tokenize.js
@@ -0,0 +1,266 @@
+'use strict'
+
+const SINGLE_QUOTE = "'".charCodeAt(0)
+const DOUBLE_QUOTE = '"'.charCodeAt(0)
+const BACKSLASH = '\\'.charCodeAt(0)
+const SLASH = '/'.charCodeAt(0)
+const NEWLINE = '\n'.charCodeAt(0)
+const SPACE = ' '.charCodeAt(0)
+const FEED = '\f'.charCodeAt(0)
+const TAB = '\t'.charCodeAt(0)
+const CR = '\r'.charCodeAt(0)
+const OPEN_SQUARE = '['.charCodeAt(0)
+const CLOSE_SQUARE = ']'.charCodeAt(0)
+const OPEN_PARENTHESES = '('.charCodeAt(0)
+const CLOSE_PARENTHESES = ')'.charCodeAt(0)
+const OPEN_CURLY = '{'.charCodeAt(0)
+const CLOSE_CURLY = '}'.charCodeAt(0)
+const SEMICOLON = ';'.charCodeAt(0)
+const ASTERISK = '*'.charCodeAt(0)
+const COLON = ':'.charCodeAt(0)
+const AT = '@'.charCodeAt(0)
+
+const RE_AT_END = /[\t\n\f\r "#'()/;[\\\]{}]/g
+const RE_WORD_END = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g
+const RE_BAD_BRACKET = /.[\r\n"'(/\\]/
+const RE_HEX_ESCAPE = /[\da-f]/i
+
+module.exports = function tokenizer(input, options = {}) {
+ let css = input.css.valueOf()
+ let ignore = options.ignoreErrors
+
+ let code, next, quote, content, escape
+ let escaped, escapePos, prev, n, currentToken
+
+ let length = css.length
+ let pos = 0
+ let buffer = []
+ let returned = []
+
+ function position() {
+ return pos
+ }
+
+ function unclosed(what) {
+ throw input.error('Unclosed ' + what, pos)
+ }
+
+ function endOfFile() {
+ return returned.length === 0 && pos >= length
+ }
+
+ function nextToken(opts) {
+ if (returned.length) return returned.pop()
+ if (pos >= length) return
+
+ let ignoreUnclosed = opts ? opts.ignoreUnclosed : false
+
+ code = css.charCodeAt(pos)
+
+ switch (code) {
+ case NEWLINE:
+ case SPACE:
+ case TAB:
+ case CR:
+ case FEED: {
+ next = pos
+ do {
+ next += 1
+ code = css.charCodeAt(next)
+ } while (
+ code === SPACE ||
+ code === NEWLINE ||
+ code === TAB ||
+ code === CR ||
+ code === FEED
+ )
+
+ currentToken = ['space', css.slice(pos, next)]
+ pos = next - 1
+ break
+ }
+
+ case OPEN_SQUARE:
+ case CLOSE_SQUARE:
+ case OPEN_CURLY:
+ case CLOSE_CURLY:
+ case COLON:
+ case SEMICOLON:
+ case CLOSE_PARENTHESES: {
+ let controlChar = String.fromCharCode(code)
+ currentToken = [controlChar, controlChar, pos]
+ break
+ }
+
+ case OPEN_PARENTHESES: {
+ prev = buffer.length ? buffer.pop()[1] : ''
+ n = css.charCodeAt(pos + 1)
+ if (
+ prev === 'url' &&
+ n !== SINGLE_QUOTE &&
+ n !== DOUBLE_QUOTE &&
+ n !== SPACE &&
+ n !== NEWLINE &&
+ n !== TAB &&
+ n !== FEED &&
+ n !== CR
+ ) {
+ next = pos
+ do {
+ escaped = false
+ next = css.indexOf(')', next + 1)
+ if (next === -1) {
+ if (ignore || ignoreUnclosed) {
+ next = pos
+ break
+ } else {
+ unclosed('bracket')
+ }
+ }
+ escapePos = next
+ while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
+ escapePos -= 1
+ escaped = !escaped
+ }
+ } while (escaped)
+
+ currentToken = ['brackets', css.slice(pos, next + 1), pos, next]
+
+ pos = next
+ } else {
+ next = css.indexOf(')', pos + 1)
+ content = css.slice(pos, next + 1)
+
+ if (next === -1 || RE_BAD_BRACKET.test(content)) {
+ currentToken = ['(', '(', pos]
+ } else {
+ currentToken = ['brackets', content, pos, next]
+ pos = next
+ }
+ }
+
+ break
+ }
+
+ case SINGLE_QUOTE:
+ case DOUBLE_QUOTE: {
+ quote = code === SINGLE_QUOTE ? "'" : '"'
+ next = pos
+ do {
+ escaped = false
+ next = css.indexOf(quote, next + 1)
+ if (next === -1) {
+ if (ignore || ignoreUnclosed) {
+ next = pos + 1
+ break
+ } else {
+ unclosed('string')
+ }
+ }
+ escapePos = next
+ while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
+ escapePos -= 1
+ escaped = !escaped
+ }
+ } while (escaped)
+
+ currentToken = ['string', css.slice(pos, next + 1), pos, next]
+ pos = next
+ break
+ }
+
+ case AT: {
+ RE_AT_END.lastIndex = pos + 1
+ RE_AT_END.test(css)
+ if (RE_AT_END.lastIndex === 0) {
+ next = css.length - 1
+ } else {
+ next = RE_AT_END.lastIndex - 2
+ }
+
+ currentToken = ['at-word', css.slice(pos, next + 1), pos, next]
+
+ pos = next
+ break
+ }
+
+ case BACKSLASH: {
+ next = pos
+ escape = true
+ while (css.charCodeAt(next + 1) === BACKSLASH) {
+ next += 1
+ escape = !escape
+ }
+ code = css.charCodeAt(next + 1)
+ if (
+ escape &&
+ code !== SLASH &&
+ code !== SPACE &&
+ code !== NEWLINE &&
+ code !== TAB &&
+ code !== CR &&
+ code !== FEED
+ ) {
+ next += 1
+ if (RE_HEX_ESCAPE.test(css.charAt(next))) {
+ while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {
+ next += 1
+ }
+ if (css.charCodeAt(next + 1) === SPACE) {
+ next += 1
+ }
+ }
+ }
+
+ currentToken = ['word', css.slice(pos, next + 1), pos, next]
+
+ pos = next
+ break
+ }
+
+ default: {
+ if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {
+ next = css.indexOf('*/', pos + 2) + 1
+ if (next === 0) {
+ if (ignore || ignoreUnclosed) {
+ next = css.length
+ } else {
+ unclosed('comment')
+ }
+ }
+
+ currentToken = ['comment', css.slice(pos, next + 1), pos, next]
+ pos = next
+ } else {
+ RE_WORD_END.lastIndex = pos + 1
+ RE_WORD_END.test(css)
+ if (RE_WORD_END.lastIndex === 0) {
+ next = css.length - 1
+ } else {
+ next = RE_WORD_END.lastIndex - 2
+ }
+
+ currentToken = ['word', css.slice(pos, next + 1), pos, next]
+ buffer.push(currentToken)
+ pos = next
+ }
+
+ break
+ }
+ }
+
+ pos++
+ return currentToken
+ }
+
+ function back(token) {
+ returned.push(token)
+ }
+
+ return {
+ back,
+ endOfFile,
+ nextToken,
+ position
+ }
+}
diff --git a/node_modules/postcss/lib/warn-once.js b/node_modules/postcss/lib/warn-once.js
new file mode 100644
index 0000000..316e1cf
--- /dev/null
+++ b/node_modules/postcss/lib/warn-once.js
@@ -0,0 +1,13 @@
+/* eslint-disable no-console */
+'use strict'
+
+let printed = {}
+
+module.exports = function warnOnce(message) {
+ if (printed[message]) return
+ printed[message] = true
+
+ if (typeof console !== 'undefined' && console.warn) {
+ console.warn(message)
+ }
+}
diff --git a/node_modules/postcss/lib/warning.d.ts b/node_modules/postcss/lib/warning.d.ts
new file mode 100644
index 0000000..b25bba8
--- /dev/null
+++ b/node_modules/postcss/lib/warning.d.ts
@@ -0,0 +1,147 @@
+import { RangePosition } from './css-syntax-error.js'
+import Node from './node.js'
+
+declare namespace Warning {
+ export interface WarningOptions {
+ /**
+ * End position, exclusive, in CSS node string that caused the warning.
+ */
+ end?: RangePosition
+
+ /**
+ * End index, exclusive, in CSS node string that caused the warning.
+ */
+ endIndex?: number
+
+ /**
+ * Start index, inclusive, in CSS node string that caused the warning.
+ */
+ index?: number
+
+ /**
+ * CSS node that caused the warning.
+ */
+ node?: Node
+
+ /**
+ * Name of the plugin that created this warning. `Result#warn` fills
+ * this property automatically.
+ */
+ plugin?: string
+
+ /**
+ * Start position, inclusive, in CSS node string that caused the warning.
+ */
+ start?: RangePosition
+
+ /**
+ * Word in CSS source that caused the warning.
+ */
+ word?: string
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
+ export { Warning_ as default }
+}
+
+/**
+ * Represents a plugin’s warning. It can be created using `Node#warn`.
+ *
+ * ```js
+ * if (decl.important) {
+ * decl.warn(result, 'Avoid !important', { word: '!important' })
+ * }
+ * ```
+ */
+declare class Warning_ {
+ /**
+ * Column for inclusive start position in the input file with this warning’s source.
+ *
+ * ```js
+ * warning.column //=> 6
+ * ```
+ */
+ column: number
+
+ /**
+ * Column for exclusive end position in the input file with this warning’s source.
+ *
+ * ```js
+ * warning.endColumn //=> 4
+ * ```
+ */
+ endColumn?: number
+
+ /**
+ * Line for exclusive end position in the input file with this warning’s source.
+ *
+ * ```js
+ * warning.endLine //=> 6
+ * ```
+ */
+ endLine?: number
+
+ /**
+ * Line for inclusive start position in the input file with this warning’s source.
+ *
+ * ```js
+ * warning.line //=> 5
+ * ```
+ */
+ line: number
+
+ /**
+ * Contains the CSS node that caused the warning.
+ *
+ * ```js
+ * warning.node.toString() //=> 'color: white !important'
+ * ```
+ */
+ node: Node
+
+ /**
+ * The name of the plugin that created this warning.
+ * When you call `Node#warn` it will fill this property automatically.
+ *
+ * ```js
+ * warning.plugin //=> 'postcss-important'
+ * ```
+ */
+ plugin: string
+
+ /**
+ * The warning message.
+ *
+ * ```js
+ * warning.text //=> 'Try to avoid !important'
+ * ```
+ */
+ text: string
+
+ /**
+ * Type to filter warnings from `Result#messages`.
+ * Always equal to `"warning"`.
+ */
+ type: 'warning'
+
+ /**
+ * @param text Warning message.
+ * @param opts Warning options.
+ */
+ constructor(text: string, opts?: Warning.WarningOptions)
+
+ /**
+ * Returns a warning position and message.
+ *
+ * ```js
+ * warning.toString() //=> 'postcss-lint:a.css:10:14: Avoid !important'
+ * ```
+ *
+ * @return Warning position and message.
+ */
+ toString(): string
+}
+
+declare class Warning extends Warning_ {}
+
+export = Warning
diff --git a/node_modules/postcss/lib/warning.js b/node_modules/postcss/lib/warning.js
new file mode 100644
index 0000000..3a3d79c
--- /dev/null
+++ b/node_modules/postcss/lib/warning.js
@@ -0,0 +1,37 @@
+'use strict'
+
+class Warning {
+ constructor(text, opts = {}) {
+ this.type = 'warning'
+ this.text = text
+
+ if (opts.node && opts.node.source) {
+ let range = opts.node.rangeBy(opts)
+ this.line = range.start.line
+ this.column = range.start.column
+ this.endLine = range.end.line
+ this.endColumn = range.end.column
+ }
+
+ for (let opt in opts) this[opt] = opts[opt]
+ }
+
+ toString() {
+ if (this.node) {
+ return this.node.error(this.text, {
+ index: this.index,
+ plugin: this.plugin,
+ word: this.word
+ }).message
+ }
+
+ if (this.plugin) {
+ return this.plugin + ': ' + this.text
+ }
+
+ return this.text
+ }
+}
+
+module.exports = Warning
+Warning.default = Warning