@ismail-elkorchi/css-parser 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -69
- package/dist/internal/cssom/declarations.d.ts +36 -0
- package/dist/internal/cssom/declarations.js +177 -0
- package/dist/internal/generated/css-data.d.ts +2 -0
- package/dist/internal/generated/css-data.js +16229 -0
- package/dist/internal/grammar/catalog-types.d.ts +26 -0
- package/dist/internal/grammar/value-definition.d.ts +63 -0
- package/dist/internal/grammar/value-definition.js +439 -0
- package/dist/internal/properties/matcher.d.ts +29 -0
- package/dist/internal/properties/matcher.js +791 -0
- package/dist/internal/properties/registry.d.ts +24 -0
- package/dist/internal/properties/registry.js +52 -0
- package/dist/internal/selectors/matcher.d.ts +96 -0
- package/dist/internal/selectors/matcher.js +616 -0
- package/dist/internal/selectors/parser.d.ts +2 -0
- package/dist/internal/selectors/parser.js +702 -0
- package/dist/internal/selectors/specificity.d.ts +3 -0
- package/dist/internal/selectors/specificity.js +77 -0
- package/dist/internal/selectors/types.d.ts +110 -0
- package/dist/internal/syntax/ast.d.ts +70 -0
- package/dist/internal/syntax/ast.js +1 -0
- package/dist/internal/syntax/characters.d.ts +8 -0
- package/dist/internal/syntax/characters.js +45 -0
- package/dist/internal/syntax/encoding.d.ts +15 -0
- package/dist/internal/syntax/encoding.js +161 -0
- package/dist/internal/syntax/input.d.ts +23 -0
- package/dist/internal/syntax/input.js +184 -0
- package/dist/internal/syntax/parser.d.ts +26 -0
- package/dist/internal/syntax/parser.js +581 -0
- package/dist/internal/syntax/resources.d.ts +28 -0
- package/dist/internal/syntax/resources.js +135 -0
- package/dist/internal/syntax/serialize.d.ts +10 -0
- package/dist/internal/syntax/serialize.js +630 -0
- package/dist/internal/syntax/token-stream.d.ts +16 -0
- package/dist/internal/syntax/token-stream.js +66 -0
- package/dist/internal/syntax/tokenizer.d.ts +21 -0
- package/dist/internal/syntax/tokenizer.js +571 -0
- package/dist/internal/syntax/tokens.d.ts +115 -0
- package/dist/internal/syntax/tokens.js +1 -0
- package/dist/internal/syntax/types.d.ts +46 -0
- package/dist/internal/syntax/types.js +1 -0
- package/dist/mod.d.ts +7 -1
- package/dist/mod.js +7 -1
- package/dist/public/edits.d.ts +12 -0
- package/dist/public/edits.js +195 -0
- package/dist/public/mod.d.ts +13 -35
- package/dist/public/mod.js +12 -1740
- package/dist/public/parse.d.ts +37 -0
- package/dist/public/parse.js +298 -0
- package/dist/public/traversal.d.ts +13 -0
- package/dist/public/traversal.js +96 -0
- package/dist/public/types.d.ts +78 -264
- package/package.json +32 -53
- package/THIRD_PARTY_NOTICES.md +0 -19
- package/dist/internal/csstree-runtime.d.ts +0 -20
- package/dist/internal/csstree-runtime.js +0 -21
- package/dist/internal/encoding/mod.d.ts +0 -1
- package/dist/internal/encoding/mod.js +0 -1
- package/dist/internal/encoding/sniff.d.ts +0 -14
- package/dist/internal/encoding/sniff.js +0 -95
- package/dist/internal/serializer/mod.d.ts +0 -1
- package/dist/internal/serializer/mod.js +0 -1
- package/dist/internal/serializer/serialize.d.ts +0 -3
- package/dist/internal/serializer/serialize.js +0 -89
- package/dist/internal/tokenizer/mod.d.ts +0 -2
- package/dist/internal/tokenizer/mod.js +0 -1
- package/dist/internal/tokenizer/tokenize.d.ts +0 -2
- package/dist/internal/tokenizer/tokenize.js +0 -39
- package/dist/internal/tokenizer/tokens.d.ts +0 -23
- package/dist/internal/tree/build.d.ts +0 -2
- package/dist/internal/tree/build.js +0 -85
- package/dist/internal/tree/mod.d.ts +0 -2
- package/dist/internal/tree/mod.js +0 -1
- package/dist/internal/tree/types.d.ts +0 -25
- package/dist/internal/vendor/csstree/LICENSE +0 -19
- package/dist/internal/vendor/csstree/csstree.esm.js +0 -12
- package/dist/internal/version.d.ts +0 -1
- package/dist/internal/version.js +0 -1
- package/dist/public/index.d.ts +0 -1
- package/dist/public/index.js +0 -1
- /package/dist/internal/{tokenizer/tokens.js → grammar/catalog-types.js} +0 -0
- /package/dist/internal/{tree → selectors}/types.js +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface CustomPropertySemantics {
|
|
2
|
+
readonly kind: "custom";
|
|
3
|
+
readonly name: string;
|
|
4
|
+
}
|
|
5
|
+
export interface StandardPropertySemantics {
|
|
6
|
+
readonly kind: "standard";
|
|
7
|
+
readonly requestedName: string;
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly legacyAlias: boolean;
|
|
10
|
+
readonly syntax: string | null;
|
|
11
|
+
readonly styleDeclaration: readonly string[];
|
|
12
|
+
readonly longhands: readonly string[];
|
|
13
|
+
readonly resetLonghands: readonly string[];
|
|
14
|
+
readonly initial: string | null;
|
|
15
|
+
readonly appliesTo: string | null;
|
|
16
|
+
readonly inherited: string | null;
|
|
17
|
+
readonly percentages: string | null;
|
|
18
|
+
readonly computedValue: string | null;
|
|
19
|
+
readonly animationType: string | null;
|
|
20
|
+
readonly canonicalOrder: string | null;
|
|
21
|
+
readonly specRef: string;
|
|
22
|
+
}
|
|
23
|
+
export type CssPropertySemantics = CustomPropertySemantics | StandardPropertySemantics;
|
|
24
|
+
export declare function resolveCssProperty(name: string): CssPropertySemantics | null;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { CSS_WEBREF_DATA } from "../generated/css-data.js";
|
|
2
|
+
import { tokenizeCss } from "../syntax/tokenizer.js";
|
|
3
|
+
const PROPERTY_DATA = new Map(CSS_WEBREF_DATA.properties.map((property) => [property.name, property]));
|
|
4
|
+
function lowerAscii(value) {
|
|
5
|
+
return value.replace(/[A-Z]/gu, (character) => character.toLowerCase());
|
|
6
|
+
}
|
|
7
|
+
function freezeStrings(values) {
|
|
8
|
+
return Object.freeze([...(values ?? [])]);
|
|
9
|
+
}
|
|
10
|
+
function isCustomPropertyName(name) {
|
|
11
|
+
if (!name.startsWith("--") || name.length === 2)
|
|
12
|
+
return false;
|
|
13
|
+
const result = tokenizeCss(name);
|
|
14
|
+
return (result.errors.length === 0 &&
|
|
15
|
+
result.tokens.length === 1 &&
|
|
16
|
+
result.tokens[0]?.kind === "ident" &&
|
|
17
|
+
result.tokens[0].value === name);
|
|
18
|
+
}
|
|
19
|
+
function standardSemantics(requestedName, requested) {
|
|
20
|
+
const canonicalName = requested.legacyAliasOf ?? requested.name;
|
|
21
|
+
const canonical = PROPERTY_DATA.get(canonicalName);
|
|
22
|
+
if (canonical === undefined)
|
|
23
|
+
return null;
|
|
24
|
+
return Object.freeze({
|
|
25
|
+
kind: "standard",
|
|
26
|
+
requestedName,
|
|
27
|
+
name: canonical.name,
|
|
28
|
+
legacyAlias: canonical !== requested,
|
|
29
|
+
syntax: canonical.syntax ?? null,
|
|
30
|
+
styleDeclaration: freezeStrings(canonical.styleDeclaration),
|
|
31
|
+
longhands: freezeStrings(canonical.longhands),
|
|
32
|
+
resetLonghands: freezeStrings(canonical.resetLonghands),
|
|
33
|
+
initial: canonical.initial ?? null,
|
|
34
|
+
appliesTo: canonical.appliesTo ?? null,
|
|
35
|
+
inherited: canonical.inherited ?? null,
|
|
36
|
+
percentages: canonical.percentages ?? null,
|
|
37
|
+
computedValue: canonical.computedValue ?? null,
|
|
38
|
+
animationType: canonical.animationType ?? null,
|
|
39
|
+
canonicalOrder: canonical.canonicalOrder ?? null,
|
|
40
|
+
specRef: canonical.href
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
export function resolveCssProperty(name) {
|
|
44
|
+
if (isCustomPropertyName(name)) {
|
|
45
|
+
return Object.freeze({ kind: "custom", name });
|
|
46
|
+
}
|
|
47
|
+
const requestedName = lowerAscii(name);
|
|
48
|
+
const requested = PROPERTY_DATA.get(requestedName);
|
|
49
|
+
return requested === undefined
|
|
50
|
+
? null
|
|
51
|
+
: standardSemantics(requestedName, requested);
|
|
52
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { SelectorList, SelectorPseudoClass } from "./types.js";
|
|
2
|
+
import type { SelectorResourceLimits, ResourceUsage, SourceSpan } from "../syntax/types.js";
|
|
3
|
+
export type SelectorDecision = "match" | "no-match" | "unknown";
|
|
4
|
+
export interface SelectorAttributeData {
|
|
5
|
+
readonly namespace: string | null;
|
|
6
|
+
readonly localName: string;
|
|
7
|
+
readonly value: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SelectorElementData {
|
|
10
|
+
readonly kind: "element";
|
|
11
|
+
readonly namespace: string | null;
|
|
12
|
+
readonly localName: string;
|
|
13
|
+
readonly attributes: readonly SelectorAttributeData[];
|
|
14
|
+
}
|
|
15
|
+
export interface SelectorTextData {
|
|
16
|
+
readonly kind: "text";
|
|
17
|
+
readonly value: string;
|
|
18
|
+
}
|
|
19
|
+
export interface SelectorOtherNodeData {
|
|
20
|
+
readonly kind: "other";
|
|
21
|
+
}
|
|
22
|
+
export type SelectorNodeData = SelectorElementData | SelectorTextData | SelectorOtherNodeData;
|
|
23
|
+
export interface SelectorTreeAdapter<TNode extends object> {
|
|
24
|
+
readonly data: (node: TNode) => SelectorNodeData;
|
|
25
|
+
readonly children: (node: TNode) => readonly TNode[];
|
|
26
|
+
}
|
|
27
|
+
export type SelectorNamespaceResolution = {
|
|
28
|
+
readonly status: "resolved";
|
|
29
|
+
readonly namespace: string | null;
|
|
30
|
+
} | {
|
|
31
|
+
readonly status: "unknown";
|
|
32
|
+
};
|
|
33
|
+
export type SelectorDefaultNamespace = {
|
|
34
|
+
readonly kind: "any";
|
|
35
|
+
} | {
|
|
36
|
+
readonly kind: "namespace";
|
|
37
|
+
readonly namespace: string | null;
|
|
38
|
+
};
|
|
39
|
+
export type SelectorDocumentMode = {
|
|
40
|
+
readonly syntax: "html";
|
|
41
|
+
readonly quirks: "no-quirks" | "limited-quirks" | "quirks";
|
|
42
|
+
} | {
|
|
43
|
+
readonly syntax: "xml";
|
|
44
|
+
};
|
|
45
|
+
export interface SelectorPseudoContext<TNode extends object> {
|
|
46
|
+
readonly root: TNode;
|
|
47
|
+
readonly scopes: ReadonlySet<TNode>;
|
|
48
|
+
}
|
|
49
|
+
export interface SelectorEnvironment<TNode extends object> {
|
|
50
|
+
readonly tree: SelectorTreeAdapter<TNode>;
|
|
51
|
+
readonly documentMode: SelectorDocumentMode;
|
|
52
|
+
readonly defaultNamespace: SelectorDefaultNamespace;
|
|
53
|
+
readonly idValues: (node: TNode, element: SelectorElementData) => readonly string[];
|
|
54
|
+
readonly classNames: (node: TNode, element: SelectorElementData) => readonly string[];
|
|
55
|
+
readonly resolveNamespacePrefix: (prefix: string) => SelectorNamespaceResolution;
|
|
56
|
+
readonly attributeValueCaseSensitivity: (element: SelectorElementData, attribute: SelectorAttributeData) => "sensitive" | "ascii-insensitive";
|
|
57
|
+
readonly matchPseudoClass: (node: TNode, pseudo: SelectorPseudoClass, context: SelectorPseudoContext<TNode>) => SelectorDecision;
|
|
58
|
+
}
|
|
59
|
+
export interface SelectorMatchOptions<TNode extends object = object> {
|
|
60
|
+
readonly limits?: SelectorResourceLimits;
|
|
61
|
+
readonly signal?: AbortSignal;
|
|
62
|
+
readonly scopes?: ReadonlySet<TNode>;
|
|
63
|
+
readonly nesting?: SelectorList;
|
|
64
|
+
}
|
|
65
|
+
export interface SelectorUnknownReason {
|
|
66
|
+
readonly code: "namespace-prefix" | "pseudo-class";
|
|
67
|
+
readonly name: string;
|
|
68
|
+
readonly span: SourceSpan;
|
|
69
|
+
}
|
|
70
|
+
export type SelectorMatchResult = {
|
|
71
|
+
readonly status: "match";
|
|
72
|
+
readonly usage: ResourceUsage;
|
|
73
|
+
} | {
|
|
74
|
+
readonly status: "no-match";
|
|
75
|
+
readonly usage: ResourceUsage;
|
|
76
|
+
} | {
|
|
77
|
+
readonly status: "unknown";
|
|
78
|
+
readonly reasons: readonly SelectorUnknownReason[];
|
|
79
|
+
readonly usage: ResourceUsage;
|
|
80
|
+
};
|
|
81
|
+
export interface SelectorQueryUnknown<TNode extends object> {
|
|
82
|
+
readonly node: TNode;
|
|
83
|
+
readonly reasons: readonly SelectorUnknownReason[];
|
|
84
|
+
}
|
|
85
|
+
export interface SelectorQueryResult<TNode extends object> {
|
|
86
|
+
readonly matches: readonly TNode[];
|
|
87
|
+
readonly unknown: readonly SelectorQueryUnknown<TNode>[];
|
|
88
|
+
readonly usage: ResourceUsage;
|
|
89
|
+
}
|
|
90
|
+
export declare class SelectorTreeError extends TypeError {
|
|
91
|
+
readonly reason: "cycle" | "shared-node";
|
|
92
|
+
readonly code = "CSS_SELECTOR_INVALID_TREE";
|
|
93
|
+
constructor(reason: "cycle" | "shared-node");
|
|
94
|
+
}
|
|
95
|
+
export declare function matchSelectorList<TNode extends object>(selector: SelectorList, node: TNode, root: TNode, environment: SelectorEnvironment<TNode>, options?: SelectorMatchOptions<TNode>): SelectorMatchResult;
|
|
96
|
+
export declare function querySelectorList<TNode extends object>(selector: SelectorList, root: TNode, environment: SelectorEnvironment<TNode>, options?: SelectorMatchOptions<TNode>): SelectorQueryResult<TNode>;
|