summaryrefslogtreecommitdiff
path: root/node_modules/@csstools/css-parser-algorithms
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@csstools/css-parser-algorithms')
-rw-r--r--node_modules/@csstools/css-parser-algorithms/CHANGELOG.md65
-rw-r--r--node_modules/@csstools/css-parser-algorithms/LICENSE.md20
-rw-r--r--node_modules/@csstools/css-parser-algorithms/README.md115
-rw-r--r--node_modules/@csstools/css-parser-algorithms/dist/consume/consume-component-block-function.d.ts118
-rw-r--r--node_modules/@csstools/css-parser-algorithms/dist/index.cjs1
-rw-r--r--node_modules/@csstools/css-parser-algorithms/dist/index.d.ts10
-rw-r--r--node_modules/@csstools/css-parser-algorithms/dist/index.mjs1
-rw-r--r--node_modules/@csstools/css-parser-algorithms/dist/interfaces/context.d.ts4
-rw-r--r--node_modules/@csstools/css-parser-algorithms/dist/parse/parse-comma-separated-list-of-component-values.d.ts5
-rw-r--r--node_modules/@csstools/css-parser-algorithms/dist/parse/parse-component-value.d.ts4
-rw-r--r--node_modules/@csstools/css-parser-algorithms/dist/parse/parse-list-of-component-values.d.ts5
-rw-r--r--node_modules/@csstools/css-parser-algorithms/dist/util/component-value-type.d.ts7
-rw-r--r--node_modules/@csstools/css-parser-algorithms/dist/util/node-ancestry.d.ts7
-rw-r--r--node_modules/@csstools/css-parser-algorithms/dist/util/replace-component-values.d.ts2
-rw-r--r--node_modules/@csstools/css-parser-algorithms/dist/util/source-indices.d.ts9
-rw-r--r--node_modules/@csstools/css-parser-algorithms/dist/util/stringify.d.ts2
-rw-r--r--node_modules/@csstools/css-parser-algorithms/dist/util/type-predicates.d.ts6
-rw-r--r--node_modules/@csstools/css-parser-algorithms/package.json72
18 files changed, 453 insertions, 0 deletions
diff --git a/node_modules/@csstools/css-parser-algorithms/CHANGELOG.md b/node_modules/@csstools/css-parser-algorithms/CHANGELOG.md
new file mode 100644
index 00000000..8d6ae2ff
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/CHANGELOG.md
@@ -0,0 +1,65 @@
+# Changes to CSS Parser Algorithms
+
+### 2.3.2
+
+_September 24, 2023_
+
+- Updated [`@csstools/css-tokenizer`](https://github.com/csstools/postcss-plugins/tree/main/packages/css-tokenizer) to [`2.2.1`](https://github.com/csstools/postcss-plugins/tree/main/packages/css-tokenizer/CHANGELOG.md#221) (patch)
+
+### 2.3.1
+
+_July 24, 2023_
+
+- Updated [`@csstools/css-tokenizer`](https://github.com/csstools/postcss-plugins/tree/main/packages/css-tokenizer) to [`2.2.0`](https://github.com/csstools/postcss-plugins/tree/main/packages/css-tokenizer/CHANGELOG.md#220) (minor)
+
+### 2.3.0
+
+_July 3, 2023_
+
+- Add `sourceIndices` helper function.
+
+This makes it easier to get the start and end indices of a node in the source string.
+This function accepts any node that can be converted into an array of tokens.
+
+### 2.2.0
+
+_June 1, 2023_
+
+- Add `state` to `walk` methods.
+
+This makes it possible pass down information from a parent structure to children.
+e.g. you can set `entry.state.isInCalcExpression = true` for `calc((10 + 5) / 2)` when walking the `FunctionNode` for `calc`.
+
+### 2.1.1
+
+_April 10, 2023_
+
+- Updated `@csstools/css-tokenizer` to `2.1.1` (patch)
+
+### 2.1.0
+
+_March 25, 2023_
+
+- Add `replaceComponentValues` utility function.
+- Add `stringify` utility function.
+
+### 2.0.1
+
+_January 28, 2023_
+
+- Improve `types` declaration in `package.json`
+
+### 2.0.0
+
+_January 19, 2023_
+
+- Fix: Removes `UnclosedFunctionNode` and `UnclosedSimpleBlockNode`. (breaking)
+- Change the `ParseError` interface, this is now a subclass of `Error` (breaking)
+- Change `nameTokenValue` in `FunctionNode` to `getName` (breaking)
+- Fix: Do not discard empty items in comma separated lists.
+
+### 1.0.0
+
+_November 14, 2022_
+
+- Initial version
diff --git a/node_modules/@csstools/css-parser-algorithms/LICENSE.md b/node_modules/@csstools/css-parser-algorithms/LICENSE.md
new file mode 100644
index 00000000..af5411fa
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/LICENSE.md
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright 2022 Romain Menke, Antonio Laguna <antonio@laguna.es>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/@csstools/css-parser-algorithms/README.md b/node_modules/@csstools/css-parser-algorithms/README.md
new file mode 100644
index 00000000..b63c2ce3
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/README.md
@@ -0,0 +1,115 @@
+# CSS Parser Algorithms
+
+[<img alt="npm version" src="https://img.shields.io/npm/v/@csstools/css-parser-algorithms.svg" height="20">][npm-url]
+[<img alt="Build Status" src="https://github.com/csstools/postcss-plugins/workflows/test/badge.svg" height="20">][cli-url]
+[<img alt="Discord" src="https://shields.io/badge/Discord-5865F2?logo=discord&logoColor=white">][discord]
+
+Implemented from : https://www.w3.org/TR/2021/CRD-css-syntax-3-20211224/
+
+## Usage
+
+Add [CSS Parser Algorithms] to your project:
+
+```bash
+npm install @csstools/css-parser-algorithms @csstools/css-tokenizer --save-dev
+```
+
+[CSS Parser Algorithms] only accepts tokenized CSS.
+It must be used together with `@csstools/css-tokenizer`.
+
+
+```js
+import { tokenizer, TokenType } from '@csstools/css-tokenizer';
+import { parseComponentValue } from '@csstools/css-parser-algorithms';
+
+const myCSS = `@media only screen and (min-width: 768rem) {
+ .foo {
+ content: 'Some content!' !important;
+ }
+}
+`;
+
+const t = tokenizer({
+ css: myCSS,
+});
+
+const tokens = [];
+
+{
+ while (!t.endOfFile()) {
+ tokens.push(t.nextToken());
+ }
+
+ tokens.push(t.nextToken()); // EOF-token
+}
+
+const options = {
+ onParseError: ((err) => {
+ throw err;
+ }),
+};
+
+const result = parseComponentValue(tokens, options);
+
+console.log(result);
+```
+
+### Available functions
+
+- [`parseComponentValue`](https://www.w3.org/TR/css-syntax-3/#parse-component-value)
+- [`parseListOfComponentValues`](https://www.w3.org/TR/css-syntax-3/#parse-list-of-component-values)
+- [`parseCommaSeparatedListOfComponentValues`](https://www.w3.org/TR/css-syntax-3/#parse-comma-separated-list-of-component-values)
+
+### Utilities
+
+#### `gatherNodeAncestry`
+
+The AST does not expose the entire ancestry of each node.
+The walker methods do provide access to the current parent, but also not the entire ancestry.
+
+To gather the entire ancestry for a a given sub tree of the AST you can use `gatherNodeAncestry`.
+The result is a `Map` with the child nodes as keys and the parents as values.
+This allows you to lookup any ancestor of any node.
+
+```css
+import { parseComponentValue } from '@csstools/css-parser-algorithms';
+
+const result = parseComponentValue(tokens, options);
+const ancestry = gatherNodeAncestry(result);
+```
+
+### Options
+
+```ts
+{
+ onParseError?: (error: ParseError) => void
+}
+```
+
+#### `onParseError`
+
+The parser algorithms are forgiving and won't stop when a parse error is encountered.
+Parse errors also aren't tokens.
+
+To receive parsing error information you can set a callback.
+
+Parser errors will try to inform you about the point in the parsing logic the error happened.
+This tells you the kind of error.
+
+## Goals and non-goals
+
+Things this package aims to be:
+- specification compliant CSS parser
+- a reliable low level package to be used in CSS sub-grammars
+
+What it is not:
+- opinionated
+- fast
+- small
+- a replacement for PostCSS (PostCSS is fast and also an ecosystem)
+
+[cli-url]: https://github.com/csstools/postcss-plugins/actions/workflows/test.yml?query=workflow/test
+[discord]: https://discord.gg/bUadyRwkJS
+[npm-url]: https://www.npmjs.com/package/@csstools/css-parser-algorithms
+
+[CSS Parser Algorithms]: https://github.com/csstools/postcss-plugins/tree/main/packages/css-parser-algorithms
diff --git a/node_modules/@csstools/css-parser-algorithms/dist/consume/consume-component-block-function.d.ts b/node_modules/@csstools/css-parser-algorithms/dist/consume/consume-component-block-function.d.ts
new file mode 100644
index 00000000..59cdf944
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/dist/consume/consume-component-block-function.d.ts
@@ -0,0 +1,118 @@
+import { CSSToken, TokenFunction } from '@csstools/css-tokenizer';
+import { Context } from '../interfaces/context';
+import { ComponentValueType } from '../util/component-value-type';
+export type ContainerNode = FunctionNode | SimpleBlockNode;
+export type ComponentValue = FunctionNode | SimpleBlockNode | WhitespaceNode | CommentNode | TokenNode;
+export declare function consumeComponentValue(ctx: Context, tokens: Array<CSSToken>): {
+ advance: number;
+ node: ComponentValue;
+};
+export declare class FunctionNode {
+ type: ComponentValueType;
+ name: TokenFunction;
+ endToken: CSSToken;
+ value: Array<ComponentValue>;
+ constructor(name: TokenFunction, endToken: CSSToken, value: Array<ComponentValue>);
+ getName(): string;
+ /**
+ * Normalize the current Function:
+ * - if the "endToken" is EOF, replace with a ")-token"
+ */
+ normalize(): void;
+ tokens(): Array<CSSToken>;
+ toString(): string;
+ indexOf(item: ComponentValue): number | string;
+ at(index: number | string): ComponentValue | undefined;
+ walk<T extends Record<string, unknown>>(cb: (entry: {
+ node: ComponentValue;
+ parent: ContainerNode;
+ state?: T;
+ }, index: number | string) => boolean | void, state?: T): false | undefined;
+ toJSON(): unknown;
+ isFunctionNode(): this is FunctionNode;
+ static isFunctionNode(x: unknown): x is FunctionNode;
+}
+export declare function consumeFunction(ctx: Context, tokens: Array<CSSToken>): {
+ advance: number;
+ node: FunctionNode;
+};
+export declare class SimpleBlockNode {
+ type: ComponentValueType;
+ startToken: CSSToken;
+ endToken: CSSToken;
+ value: Array<ComponentValue>;
+ constructor(startToken: CSSToken, endToken: CSSToken, value: Array<ComponentValue>);
+ /**
+ * Normalize the current Simple Block:
+ * - if the "endToken" is EOF, replace with the mirror token of the "startToken"
+ */
+ normalize(): void;
+ tokens(): Array<CSSToken>;
+ toString(): string;
+ indexOf(item: ComponentValue): number | string;
+ at(index: number | string): ComponentValue | undefined;
+ walk<T extends Record<string, unknown>>(cb: (entry: {
+ node: ComponentValue;
+ parent: ContainerNode;
+ state?: T;
+ }, index: number | string) => boolean | void, state?: T): false | undefined;
+ toJSON(): unknown;
+ isSimpleBlockNode(): this is SimpleBlockNode;
+ static isSimpleBlockNode(x: unknown): x is SimpleBlockNode;
+}
+/** https://www.w3.org/TR/css-syntax-3/#consume-simple-block */
+export declare function consumeSimpleBlock(ctx: Context, tokens: Array<CSSToken>): {
+ advance: number;
+ node: SimpleBlockNode;
+};
+export declare class WhitespaceNode {
+ type: ComponentValueType;
+ value: Array<CSSToken>;
+ constructor(value: Array<CSSToken>);
+ tokens(): Array<CSSToken>;
+ toString(): string;
+ toJSON(): {
+ type: ComponentValueType;
+ tokens: CSSToken[];
+ };
+ isWhitespaceNode(): this is WhitespaceNode;
+ static isWhitespaceNode(x: unknown): x is WhitespaceNode;
+}
+export declare function consumeWhitespace(ctx: Context, tokens: Array<CSSToken>): {
+ advance: number;
+ node: WhitespaceNode;
+};
+export declare class CommentNode {
+ type: ComponentValueType;
+ value: CSSToken;
+ constructor(value: CSSToken);
+ tokens(): Array<CSSToken>;
+ toString(): string;
+ toJSON(): {
+ type: ComponentValueType;
+ tokens: CSSToken[];
+ };
+ isCommentNode(): this is CommentNode;
+ static isCommentNode(x: unknown): x is CommentNode;
+}
+export declare function consumeComment(ctx: Context, tokens: Array<CSSToken>): {
+ advance: number;
+ node: CommentNode;
+};
+export declare function consumeAllCommentsAndWhitespace(ctx: Context, tokens: Array<CSSToken>): {
+ advance: number;
+ nodes: Array<WhitespaceNode | CommentNode>;
+};
+export declare class TokenNode {
+ type: ComponentValueType;
+ value: CSSToken;
+ constructor(value: CSSToken);
+ tokens(): Array<CSSToken>;
+ toString(): string;
+ toJSON(): {
+ type: ComponentValueType;
+ tokens: CSSToken[];
+ };
+ isTokenNode(): this is TokenNode;
+ static isTokenNode(x: unknown): x is TokenNode;
+}
diff --git a/node_modules/@csstools/css-parser-algorithms/dist/index.cjs b/node_modules/@csstools/css-parser-algorithms/dist/index.cjs
new file mode 100644
index 00000000..4405dce4
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/dist/index.cjs
@@ -0,0 +1 @@
+"use strict";var e,n=require("@csstools/css-tokenizer");function consumeComponentValue(e,o){const t=o[0];if(t[0]===n.TokenType.OpenParen||t[0]===n.TokenType.OpenCurly||t[0]===n.TokenType.OpenSquare){const n=consumeSimpleBlock(e,o);return{advance:n.advance,node:n.node}}if(t[0]===n.TokenType.Function){const n=consumeFunction(e,o);return{advance:n.advance,node:n.node}}if(t[0]===n.TokenType.Whitespace){const n=consumeWhitespace(e,o);return{advance:n.advance,node:n.node}}if(t[0]===n.TokenType.Comment){const n=consumeComment(e,o);return{advance:n.advance,node:n.node}}return{advance:1,node:new TokenNode(t)}}exports.ComponentValueType=void 0,(e=exports.ComponentValueType||(exports.ComponentValueType={})).Function="function",e.SimpleBlock="simple-block",e.Whitespace="whitespace",e.Comment="comment",e.Token="token";class FunctionNode{type=exports.ComponentValueType.Function;name;endToken;value;constructor(e,n,o){this.name=e,this.endToken=n,this.value=o}getName(){return this.name[4].value}normalize(){this.endToken[0]===n.TokenType.EOF&&(this.endToken=[n.TokenType.CloseParen,")",-1,-1,void 0])}tokens(){return this.endToken[0]===n.TokenType.EOF?[this.name,...this.value.flatMap((e=>e.tokens()))]:[this.name,...this.value.flatMap((e=>e.tokens())),this.endToken]}toString(){const e=this.value.map((e=>n.isToken(e)?n.stringify(e):e.toString())).join("");return n.stringify(this.name)+e+n.stringify(this.endToken)}indexOf(e){return this.value.indexOf(e)}at(e){if("number"==typeof e)return e<0&&(e=this.value.length+e),this.value[e]}walk(e,n){let o=!1;if(this.value.forEach(((t,s)=>{if(o)return;let i;n&&(i={...n}),!1!==e({node:t,parent:this,state:i},s)?"walk"in t&&!1===t.walk(e,i)&&(o=!0):o=!0})),o)return!1}toJSON(){return{type:this.type,name:this.getName(),tokens:this.tokens(),value:this.value.map((e=>e.toJSON()))}}isFunctionNode(){return FunctionNode.isFunctionNode(this)}static isFunctionNode(e){return!!e&&(e instanceof FunctionNode&&e.type===exports.ComponentValueType.Function)}}function consumeFunction(e,o){const t=[];let s=1;for(;;){const i=o[s];if(!i||i[0]===n.TokenType.EOF)return e.onParseError(new n.ParseError("Unexpected EOF while consuming a function.",o[0][2],o[o.length-1][3],["5.4.9. Consume a function","Unexpected EOF"])),{advance:o.length,node:new FunctionNode(o[0],i,t)};if(i[0]===n.TokenType.CloseParen)return{advance:s+1,node:new FunctionNode(o[0],i,t)};if(i[0]===n.TokenType.Comment||i[0]===n.TokenType.Whitespace){const n=consumeAllCommentsAndWhitespace(e,o.slice(s));s+=n.advance,t.push(...n.nodes);continue}const r=consumeComponentValue(e,o.slice(s));s+=r.advance,t.push(r.node)}}class SimpleBlockNode{type=exports.ComponentValueType.SimpleBlock;startToken;endToken;value;constructor(e,n,o){this.startToken=e,this.endToken=n,this.value=o}normalize(){if(this.endToken[0]===n.TokenType.EOF){const e=n.mirrorVariant(this.startToken);e&&(this.endToken=e)}}tokens(){return this.endToken[0]===n.TokenType.EOF?[this.startToken,...this.value.flatMap((e=>e.tokens()))]:[this.startToken,...this.value.flatMap((e=>e.tokens())),this.endToken]}toString(){const e=this.value.map((e=>n.isToken(e)?n.stringify(e):e.toString())).join("");return n.stringify(this.startToken)+e+n.stringify(this.endToken)}indexOf(e){return this.value.indexOf(e)}at(e){if("number"==typeof e)return e<0&&(e=this.value.length+e),this.value[e]}walk(e,n){let o=!1;if(this.value.forEach(((t,s)=>{if(o)return;let i;n&&(i={...n}),!1!==e({node:t,parent:this,state:i},s)?"walk"in t&&!1===t.walk(e,i)&&(o=!0):o=!0})),o)return!1}toJSON(){return{type:this.type,startToken:this.startToken,tokens:this.tokens(),value:this.value.map((e=>e.toJSON()))}}isSimpleBlockNode(){return SimpleBlockNode.isSimpleBlockNode(this)}static isSimpleBlockNode(e){return!!e&&(e instanceof SimpleBlockNode&&e.type===exports.ComponentValueType.SimpleBlock)}}function consumeSimpleBlock(e,o){const t=n.mirrorVariantType(o[0][0]);if(!t)throw new Error("Failed to parse, a mirror variant must exist for all block open tokens.");const s=[];let i=1;for(;;){const r=o[i];if(!r||r[0]===n.TokenType.EOF)return e.onParseError(new n.ParseError("Unexpected EOF while consuming a simple block.",o[0][2],o[o.length-1][3],["5.4.8. Consume a simple block","Unexpected EOF"])),{advance:o.length,node:new SimpleBlockNode(o[0],r,s)};if(r[0]===t)return{advance:i+1,node:new SimpleBlockNode(o[0],r,s)};if(r[0]===n.TokenType.Comment||r[0]===n.TokenType.Whitespace){const n=consumeAllCommentsAndWhitespace(e,o.slice(i));i+=n.advance,s.push(...n.nodes);continue}const a=consumeComponentValue(e,o.slice(i));i+=a.advance,s.push(a.node)}}class WhitespaceNode{type=exports.ComponentValueType.Whitespace;value;constructor(e){this.value=e}tokens(){return this.value}toString(){return n.stringify(...this.value)}toJSON(){return{type:this.type,tokens:this.tokens()}}isWhitespaceNode(){return WhitespaceNode.isWhitespaceNode(this)}static isWhitespaceNode(e){return!!e&&(e instanceof WhitespaceNode&&e.type===exports.ComponentValueType.Whitespace)}}function consumeWhitespace(e,o){let t=0;for(;;){if(o[t][0]!==n.TokenType.Whitespace)return{advance:t,node:new WhitespaceNode(o.slice(0,t))};t++}}class CommentNode{type=exports.ComponentValueType.Comment;value;constructor(e){this.value=e}tokens(){return[this.value]}toString(){return n.stringify(this.value)}toJSON(){return{type:this.type,tokens:this.tokens()}}isCommentNode(){return CommentNode.isCommentNode(this)}static isCommentNode(e){return!!e&&(e instanceof CommentNode&&e.type===exports.ComponentValueType.Comment)}}function consumeComment(e,n){return{advance:1,node:new CommentNode(n[0])}}function consumeAllCommentsAndWhitespace(e,o){const t=[];let s=0;for(;;)if(o[s][0]!==n.TokenType.Whitespace){if(o[s][0]!==n.TokenType.Comment)return{advance:s,nodes:t};t.push(new CommentNode(o[s])),s++}else{const e=consumeWhitespace(0,o.slice(s));s+=e.advance,t.push(e.node)}}class TokenNode{type=exports.ComponentValueType.Token;value;constructor(e){this.value=e}tokens(){return[this.value]}toString(){return n.stringify(this.value)}toJSON(){return{type:this.type,tokens:this.tokens()}}isTokenNode(){return TokenNode.isTokenNode(this)}static isTokenNode(e){return!!e&&(e instanceof TokenNode&&e.type===exports.ComponentValueType.Token)}}function isSimpleBlockNode(e){return SimpleBlockNode.isSimpleBlockNode(e)}function isFunctionNode(e){return FunctionNode.isFunctionNode(e)}exports.CommentNode=CommentNode,exports.FunctionNode=FunctionNode,exports.SimpleBlockNode=SimpleBlockNode,exports.TokenNode=TokenNode,exports.WhitespaceNode=WhitespaceNode,exports.consumeAllCommentsAndWhitespace=consumeAllCommentsAndWhitespace,exports.consumeComment=consumeComment,exports.consumeComponentValue=consumeComponentValue,exports.consumeFunction=consumeFunction,exports.consumeSimpleBlock=consumeSimpleBlock,exports.consumeWhitespace=consumeWhitespace,exports.gatherNodeAncestry=function gatherNodeAncestry(e){const n=new Map;return e.walk((e=>{Array.isArray(e.node)?e.node.forEach((o=>{n.set(o,e.parent)})):n.set(e.node,e.parent)})),n},exports.isCommentNode=function isCommentNode(e){return CommentNode.isCommentNode(e)},exports.isFunctionNode=isFunctionNode,exports.isSimpleBlockNode=isSimpleBlockNode,exports.isTokenNode=function isTokenNode(e){return TokenNode.isTokenNode(e)},exports.isWhitespaceNode=function isWhitespaceNode(e){return WhitespaceNode.isWhitespaceNode(e)},exports.parseCommaSeparatedListOfComponentValues=function parseCommaSeparatedListOfComponentValues(e,o){const t={onParseError:(null==o?void 0:o.onParseError)??(()=>{})},s=[...e];if(0===e.length)return[];s[s.length-1][0]!==n.TokenType.EOF&&s.push([n.TokenType.EOF,"",s[s.length-1][2],s[s.length-1][3],void 0]);const i=[];let r=[],a=0;for(;;){if(!s[a]||s[a][0]===n.TokenType.EOF)return r.length&&i.push(r),i;if(s[a][0]===n.TokenType.Comma){i.push(r),r=[],a++;continue}const o=consumeComponentValue(t,e.slice(a));r.push(o.node),a+=o.advance}},exports.parseComponentValue=function parseComponentValue(e,o){const t={onParseError:(null==o?void 0:o.onParseError)??(()=>{})},s=[...e];s[s.length-1][0]!==n.TokenType.EOF&&s.push([n.TokenType.EOF,"",s[s.length-1][2],s[s.length-1][3],void 0]);const i=consumeComponentValue(t,s);if(s[Math.min(i.advance,s.length-1)][0]===n.TokenType.EOF)return i.node;t.onParseError(new n.ParseError("Expected EOF after parsing a component value.",e[0][2],e[e.length-1][3],["5.3.9. Parse a component value","Expected EOF"]))},exports.parseListOfComponentValues=function parseListOfComponentValues(e,o){const t={onParseError:(null==o?void 0:o.onParseError)??(()=>{})},s=[...e];s[s.length-1][0]!==n.TokenType.EOF&&s.push([n.TokenType.EOF,"",s[s.length-1][2],s[s.length-1][3],void 0]);const i=[];let r=0;for(;;){if(!s[r]||s[r][0]===n.TokenType.EOF)return i;const e=consumeComponentValue(t,s.slice(r));i.push(e.node),r+=e.advance}},exports.replaceComponentValues=function replaceComponentValues(e,n){for(let o=0;o<e.length;o++){const t=e[o];for(let e=0;e<t.length;e++){const o=t[e];{const s=n(o);if(s){t.splice(e,1,s);continue}}(isSimpleBlockNode(o)||isFunctionNode(o))&&o.walk(((e,o)=>{if("number"!=typeof o)return;const t=e.node,s=n(t);s&&e.parent.value.splice(o,1,s)}))}}return e},exports.sourceIndices=function sourceIndices(e){if(Array.isArray(e)){const n=e[0];if(!n)return[0,0];const o=e[e.length-1]||n;return[sourceIndices(n)[0],sourceIndices(o)[1]]}const n=e.tokens(),o=n[0],t=n[n.length-1];return o&&t?[o[2],t[3]]:[0,0]},exports.stringify=function stringify(e){return e.map((e=>e.map((e=>n.stringify(...e.tokens()))).join(""))).join(",")};
diff --git a/node_modules/@csstools/css-parser-algorithms/dist/index.d.ts b/node_modules/@csstools/css-parser-algorithms/dist/index.d.ts
new file mode 100644
index 00000000..47c3cec9
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/dist/index.d.ts
@@ -0,0 +1,10 @@
+export * from './consume/consume-component-block-function';
+export { parseComponentValue } from './parse/parse-component-value';
+export { parseListOfComponentValues } from './parse/parse-list-of-component-values';
+export { parseCommaSeparatedListOfComponentValues } from './parse/parse-comma-separated-list-of-component-values';
+export { gatherNodeAncestry } from './util/node-ancestry';
+export { replaceComponentValues } from './util/replace-component-values';
+export { stringify } from './util/stringify';
+export { ComponentValueType } from './util/component-value-type';
+export { isCommentNode, isFunctionNode, isSimpleBlockNode, isTokenNode, isWhitespaceNode, } from './util/type-predicates';
+export { sourceIndices } from './util/source-indices';
diff --git a/node_modules/@csstools/css-parser-algorithms/dist/index.mjs b/node_modules/@csstools/css-parser-algorithms/dist/index.mjs
new file mode 100644
index 00000000..cc63349e
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/dist/index.mjs
@@ -0,0 +1 @@
+import{TokenType as e,isToken as n,stringify as t,ParseError as o,mirrorVariant as s,mirrorVariantType as i}from"@csstools/css-tokenizer";var r;function consumeComponentValue(n,t){const o=t[0];if(o[0]===e.OpenParen||o[0]===e.OpenCurly||o[0]===e.OpenSquare){const e=consumeSimpleBlock(n,t);return{advance:e.advance,node:e.node}}if(o[0]===e.Function){const e=consumeFunction(n,t);return{advance:e.advance,node:e.node}}if(o[0]===e.Whitespace){const e=consumeWhitespace(n,t);return{advance:e.advance,node:e.node}}if(o[0]===e.Comment){const e=consumeComment(n,t);return{advance:e.advance,node:e.node}}return{advance:1,node:new TokenNode(o)}}!function(e){e.Function="function",e.SimpleBlock="simple-block",e.Whitespace="whitespace",e.Comment="comment",e.Token="token"}(r||(r={}));class FunctionNode{type=r.Function;name;endToken;value;constructor(e,n,t){this.name=e,this.endToken=n,this.value=t}getName(){return this.name[4].value}normalize(){this.endToken[0]===e.EOF&&(this.endToken=[e.CloseParen,")",-1,-1,void 0])}tokens(){return this.endToken[0]===e.EOF?[this.name,...this.value.flatMap((e=>e.tokens()))]:[this.name,...this.value.flatMap((e=>e.tokens())),this.endToken]}toString(){const e=this.value.map((e=>n(e)?t(e):e.toString())).join("");return t(this.name)+e+t(this.endToken)}indexOf(e){return this.value.indexOf(e)}at(e){if("number"==typeof e)return e<0&&(e=this.value.length+e),this.value[e]}walk(e,n){let t=!1;if(this.value.forEach(((o,s)=>{if(t)return;let i;n&&(i={...n}),!1!==e({node:o,parent:this,state:i},s)?"walk"in o&&!1===o.walk(e,i)&&(t=!0):t=!0})),t)return!1}toJSON(){return{type:this.type,name:this.getName(),tokens:this.tokens(),value:this.value.map((e=>e.toJSON()))}}isFunctionNode(){return FunctionNode.isFunctionNode(this)}static isFunctionNode(e){return!!e&&(e instanceof FunctionNode&&e.type===r.Function)}}function consumeFunction(n,t){const s=[];let i=1;for(;;){const r=t[i];if(!r||r[0]===e.EOF)return n.onParseError(new o("Unexpected EOF while consuming a function.",t[0][2],t[t.length-1][3],["5.4.9. Consume a function","Unexpected EOF"])),{advance:t.length,node:new FunctionNode(t[0],r,s)};if(r[0]===e.CloseParen)return{advance:i+1,node:new FunctionNode(t[0],r,s)};if(r[0]===e.Comment||r[0]===e.Whitespace){const e=consumeAllCommentsAndWhitespace(n,t.slice(i));i+=e.advance,s.push(...e.nodes);continue}const a=consumeComponentValue(n,t.slice(i));i+=a.advance,s.push(a.node)}}class SimpleBlockNode{type=r.SimpleBlock;startToken;endToken;value;constructor(e,n,t){this.startToken=e,this.endToken=n,this.value=t}normalize(){if(this.endToken[0]===e.EOF){const e=s(this.startToken);e&&(this.endToken=e)}}tokens(){return this.endToken[0]===e.EOF?[this.startToken,...this.value.flatMap((e=>e.tokens()))]:[this.startToken,...this.value.flatMap((e=>e.tokens())),this.endToken]}toString(){const e=this.value.map((e=>n(e)?t(e):e.toString())).join("");return t(this.startToken)+e+t(this.endToken)}indexOf(e){return this.value.indexOf(e)}at(e){if("number"==typeof e)return e<0&&(e=this.value.length+e),this.value[e]}walk(e,n){let t=!1;if(this.value.forEach(((o,s)=>{if(t)return;let i;n&&(i={...n}),!1!==e({node:o,parent:this,state:i},s)?"walk"in o&&!1===o.walk(e,i)&&(t=!0):t=!0})),t)return!1}toJSON(){return{type:this.type,startToken:this.startToken,tokens:this.tokens(),value:this.value.map((e=>e.toJSON()))}}isSimpleBlockNode(){return SimpleBlockNode.isSimpleBlockNode(this)}static isSimpleBlockNode(e){return!!e&&(e instanceof SimpleBlockNode&&e.type===r.SimpleBlock)}}function consumeSimpleBlock(n,t){const s=i(t[0][0]);if(!s)throw new Error("Failed to parse, a mirror variant must exist for all block open tokens.");const r=[];let a=1;for(;;){const i=t[a];if(!i||i[0]===e.EOF)return n.onParseError(new o("Unexpected EOF while consuming a simple block.",t[0][2],t[t.length-1][3],["5.4.8. Consume a simple block","Unexpected EOF"])),{advance:t.length,node:new SimpleBlockNode(t[0],i,r)};if(i[0]===s)return{advance:a+1,node:new SimpleBlockNode(t[0],i,r)};if(i[0]===e.Comment||i[0]===e.Whitespace){const e=consumeAllCommentsAndWhitespace(n,t.slice(a));a+=e.advance,r.push(...e.nodes);continue}const c=consumeComponentValue(n,t.slice(a));a+=c.advance,r.push(c.node)}}class WhitespaceNode{type=r.Whitespace;value;constructor(e){this.value=e}tokens(){return this.value}toString(){return t(...this.value)}toJSON(){return{type:this.type,tokens:this.tokens()}}isWhitespaceNode(){return WhitespaceNode.isWhitespaceNode(this)}static isWhitespaceNode(e){return!!e&&(e instanceof WhitespaceNode&&e.type===r.Whitespace)}}function consumeWhitespace(n,t){let o=0;for(;;){if(t[o][0]!==e.Whitespace)return{advance:o,node:new WhitespaceNode(t.slice(0,o))};o++}}class CommentNode{type=r.Comment;value;constructor(e){this.value=e}tokens(){return[this.value]}toString(){return t(this.value)}toJSON(){return{type:this.type,tokens:this.tokens()}}isCommentNode(){return CommentNode.isCommentNode(this)}static isCommentNode(e){return!!e&&(e instanceof CommentNode&&e.type===r.Comment)}}function consumeComment(e,n){return{advance:1,node:new CommentNode(n[0])}}function consumeAllCommentsAndWhitespace(n,t){const o=[];let s=0;for(;;)if(t[s][0]!==e.Whitespace){if(t[s][0]!==e.Comment)return{advance:s,nodes:o};o.push(new CommentNode(t[s])),s++}else{const e=consumeWhitespace(0,t.slice(s));s+=e.advance,o.push(e.node)}}class TokenNode{type=r.Token;value;constructor(e){this.value=e}tokens(){return[this.value]}toString(){return t(this.value)}toJSON(){return{type:this.type,tokens:this.tokens()}}isTokenNode(){return TokenNode.isTokenNode(this)}static isTokenNode(e){return!!e&&(e instanceof TokenNode&&e.type===r.Token)}}function parseComponentValue(n,t){const s={onParseError:(null==t?void 0:t.onParseError)??(()=>{})},i=[...n];i[i.length-1][0]!==e.EOF&&i.push([e.EOF,"",i[i.length-1][2],i[i.length-1][3],void 0]);const r=consumeComponentValue(s,i);if(i[Math.min(r.advance,i.length-1)][0]===e.EOF)return r.node;s.onParseError(new o("Expected EOF after parsing a component value.",n[0][2],n[n.length-1][3],["5.3.9. Parse a component value","Expected EOF"]))}function parseListOfComponentValues(n,t){const o={onParseError:(null==t?void 0:t.onParseError)??(()=>{})},s=[...n];s[s.length-1][0]!==e.EOF&&s.push([e.EOF,"",s[s.length-1][2],s[s.length-1][3],void 0]);const i=[];let r=0;for(;;){if(!s[r]||s[r][0]===e.EOF)return i;const n=consumeComponentValue(o,s.slice(r));i.push(n.node),r+=n.advance}}function parseCommaSeparatedListOfComponentValues(n,t){const o={onParseError:(null==t?void 0:t.onParseError)??(()=>{})},s=[...n];if(0===n.length)return[];s[s.length-1][0]!==e.EOF&&s.push([e.EOF,"",s[s.length-1][2],s[s.length-1][3],void 0]);const i=[];let r=[],a=0;for(;;){if(!s[a]||s[a][0]===e.EOF)return r.length&&i.push(r),i;if(s[a][0]===e.Comma){i.push(r),r=[],a++;continue}const t=consumeComponentValue(o,n.slice(a));r.push(t.node),a+=t.advance}}function gatherNodeAncestry(e){const n=new Map;return e.walk((e=>{Array.isArray(e.node)?e.node.forEach((t=>{n.set(t,e.parent)})):n.set(e.node,e.parent)})),n}function isSimpleBlockNode(e){return SimpleBlockNode.isSimpleBlockNode(e)}function isFunctionNode(e){return FunctionNode.isFunctionNode(e)}function isWhitespaceNode(e){return WhitespaceNode.isWhitespaceNode(e)}function isCommentNode(e){return CommentNode.isCommentNode(e)}function isTokenNode(e){return TokenNode.isTokenNode(e)}function replaceComponentValues(e,n){for(let t=0;t<e.length;t++){const o=e[t];for(let e=0;e<o.length;e++){const t=o[e];{const s=n(t);if(s){o.splice(e,1,s);continue}}(isSimpleBlockNode(t)||isFunctionNode(t))&&t.walk(((e,t)=>{if("number"!=typeof t)return;const o=e.node,s=n(o);s&&e.parent.value.splice(t,1,s)}))}}return e}function stringify(e){return e.map((e=>e.map((e=>t(...e.tokens()))).join(""))).join(",")}function sourceIndices(e){if(Array.isArray(e)){const n=e[0];if(!n)return[0,0];const t=e[e.length-1]||n;return[sourceIndices(n)[0],sourceIndices(t)[1]]}const n=e.tokens(),t=n[0],o=n[n.length-1];return t&&o?[t[2],o[3]]:[0,0]}export{CommentNode,r as ComponentValueType,FunctionNode,SimpleBlockNode,TokenNode,WhitespaceNode,consumeAllCommentsAndWhitespace,consumeComment,consumeComponentValue,consumeFunction,consumeSimpleBlock,consumeWhitespace,gatherNodeAncestry,isCommentNode,isFunctionNode,isSimpleBlockNode,isTokenNode,isWhitespaceNode,parseCommaSeparatedListOfComponentValues,parseComponentValue,parseListOfComponentValues,replaceComponentValues,sourceIndices,stringify};
diff --git a/node_modules/@csstools/css-parser-algorithms/dist/interfaces/context.d.ts b/node_modules/@csstools/css-parser-algorithms/dist/interfaces/context.d.ts
new file mode 100644
index 00000000..dc246e00
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/dist/interfaces/context.d.ts
@@ -0,0 +1,4 @@
+import { ParseError } from '@csstools/css-tokenizer';
+export type Context = {
+ onParseError: (error: ParseError) => void;
+};
diff --git a/node_modules/@csstools/css-parser-algorithms/dist/parse/parse-comma-separated-list-of-component-values.d.ts b/node_modules/@csstools/css-parser-algorithms/dist/parse/parse-comma-separated-list-of-component-values.d.ts
new file mode 100644
index 00000000..67dff1d0
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/dist/parse/parse-comma-separated-list-of-component-values.d.ts
@@ -0,0 +1,5 @@
+import { CSSToken, ParseError } from '@csstools/css-tokenizer';
+import { ComponentValue } from '../consume/consume-component-block-function';
+export declare function parseCommaSeparatedListOfComponentValues(tokens: Array<CSSToken>, options?: {
+ onParseError?: (error: ParseError) => void;
+}): ComponentValue[][];
diff --git a/node_modules/@csstools/css-parser-algorithms/dist/parse/parse-component-value.d.ts b/node_modules/@csstools/css-parser-algorithms/dist/parse/parse-component-value.d.ts
new file mode 100644
index 00000000..2961290f
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/dist/parse/parse-component-value.d.ts
@@ -0,0 +1,4 @@
+import { CSSToken, ParseError } from '@csstools/css-tokenizer';
+export declare function parseComponentValue(tokens: Array<CSSToken>, options?: {
+ onParseError?: (error: ParseError) => void;
+}): import("../consume/consume-component-block-function").ComponentValue | undefined;
diff --git a/node_modules/@csstools/css-parser-algorithms/dist/parse/parse-list-of-component-values.d.ts b/node_modules/@csstools/css-parser-algorithms/dist/parse/parse-list-of-component-values.d.ts
new file mode 100644
index 00000000..737f554d
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/dist/parse/parse-list-of-component-values.d.ts
@@ -0,0 +1,5 @@
+import { CSSToken, ParseError } from '@csstools/css-tokenizer';
+import { ComponentValue } from '../consume/consume-component-block-function';
+export declare function parseListOfComponentValues(tokens: Array<CSSToken>, options?: {
+ onParseError?: (error: ParseError) => void;
+}): ComponentValue[];
diff --git a/node_modules/@csstools/css-parser-algorithms/dist/util/component-value-type.d.ts b/node_modules/@csstools/css-parser-algorithms/dist/util/component-value-type.d.ts
new file mode 100644
index 00000000..eda7ee93
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/dist/util/component-value-type.d.ts
@@ -0,0 +1,7 @@
+export declare enum ComponentValueType {
+ Function = "function",
+ SimpleBlock = "simple-block",
+ Whitespace = "whitespace",
+ Comment = "comment",
+ Token = "token"
+}
diff --git a/node_modules/@csstools/css-parser-algorithms/dist/util/node-ancestry.d.ts b/node_modules/@csstools/css-parser-algorithms/dist/util/node-ancestry.d.ts
new file mode 100644
index 00000000..219ea619
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/dist/util/node-ancestry.d.ts
@@ -0,0 +1,7 @@
+export interface walkable {
+ walk(cb: (entry: {
+ node: Array<unknown> | unknown;
+ parent: unknown;
+ }, index: number | string) => boolean | void): false | undefined;
+}
+export declare function gatherNodeAncestry(node: walkable): Map<unknown, unknown>;
diff --git a/node_modules/@csstools/css-parser-algorithms/dist/util/replace-component-values.d.ts b/node_modules/@csstools/css-parser-algorithms/dist/util/replace-component-values.d.ts
new file mode 100644
index 00000000..774051c6
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/dist/util/replace-component-values.d.ts
@@ -0,0 +1,2 @@
+import type { ComponentValue } from '../consume/consume-component-block-function';
+export declare function replaceComponentValues(componentValuesList: Array<Array<ComponentValue>>, replaceWith: (componentValue: ComponentValue) => ComponentValue | void): ComponentValue[][];
diff --git a/node_modules/@csstools/css-parser-algorithms/dist/util/source-indices.d.ts b/node_modules/@csstools/css-parser-algorithms/dist/util/source-indices.d.ts
new file mode 100644
index 00000000..92d124be
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/dist/util/source-indices.d.ts
@@ -0,0 +1,9 @@
+import { CSSToken } from '@csstools/css-tokenizer';
+interface TokenConvertible {
+ tokens(): Array<CSSToken>;
+}
+/**
+ * Returns the start and end index of a node in the CSS source string.
+ */
+export declare function sourceIndices(x: TokenConvertible | Array<TokenConvertible>): [number, number];
+export {};
diff --git a/node_modules/@csstools/css-parser-algorithms/dist/util/stringify.d.ts b/node_modules/@csstools/css-parser-algorithms/dist/util/stringify.d.ts
new file mode 100644
index 00000000..6ab4140c
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/dist/util/stringify.d.ts
@@ -0,0 +1,2 @@
+import type { ComponentValue } from '../consume/consume-component-block-function';
+export declare function stringify(componentValueLists: Array<Array<ComponentValue>>): string;
diff --git a/node_modules/@csstools/css-parser-algorithms/dist/util/type-predicates.d.ts b/node_modules/@csstools/css-parser-algorithms/dist/util/type-predicates.d.ts
new file mode 100644
index 00000000..896d3036
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/dist/util/type-predicates.d.ts
@@ -0,0 +1,6 @@
+import { CommentNode, FunctionNode, SimpleBlockNode, TokenNode, WhitespaceNode } from '../consume/consume-component-block-function';
+export declare function isSimpleBlockNode(x: unknown): x is SimpleBlockNode;
+export declare function isFunctionNode(x: unknown): x is FunctionNode;
+export declare function isWhitespaceNode(x: unknown): x is WhitespaceNode;
+export declare function isCommentNode(x: unknown): x is CommentNode;
+export declare function isTokenNode(x: unknown): x is TokenNode;
diff --git a/node_modules/@csstools/css-parser-algorithms/package.json b/node_modules/@csstools/css-parser-algorithms/package.json
new file mode 100644
index 00000000..009c0560
--- /dev/null
+++ b/node_modules/@csstools/css-parser-algorithms/package.json
@@ -0,0 +1,72 @@
+{
+ "name": "@csstools/css-parser-algorithms",
+ "description": "Algorithms to help you parse CSS from an array of tokens.",
+ "version": "2.3.2",
+ "contributors": [
+ {
+ "name": "Antonio Laguna",
+ "email": "antonio@laguna.es",
+ "url": "https://antonio.laguna.es"
+ },
+ {
+ "name": "Romain Menke",
+ "email": "romainmenke@gmail.com"
+ }
+ ],
+ "license": "MIT",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "engines": {
+ "node": "^14 || ^16 || >=18"
+ },
+ "main": "dist/index.cjs",
+ "module": "dist/index.mjs",
+ "types": "dist/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.mjs",
+ "require": "./dist/index.cjs",
+ "default": "./dist/index.mjs"
+ }
+ },
+ "files": [
+ "CHANGELOG.md",
+ "LICENSE.md",
+ "README.md",
+ "dist"
+ ],
+ "peerDependencies": {
+ "@csstools/css-tokenizer": "^2.2.1"
+ },
+ "scripts": {
+ "build": "rollup -c ../../rollup/default.mjs",
+ "lint": "node ../../.github/bin/format-package-json.mjs",
+ "prepublishOnly": "npm run build && npm run test",
+ "stryker": "stryker run --logLevel error",
+ "test": "node ./test/test.mjs && node ./test/_import.mjs && node ./test/_require.cjs",
+ "test:rewrite-expects": "REWRITE_EXPECTS=true node ./test/test.mjs"
+ },
+ "homepage": "https://github.com/csstools/postcss-plugins/tree/main/packages/css-parser-algorithms#readme",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/csstools/postcss-plugins.git",
+ "directory": "packages/css-parser-algorithms"
+ },
+ "bugs": "https://github.com/csstools/postcss-plugins/issues",
+ "keywords": [
+ "css",
+ "parser"
+ ],
+ "volta": {
+ "extends": "../../package.json"
+ }
+}