1 | "use strict";
|
2 | var __assign = (this && this.__assign) || function () {
|
3 | __assign = Object.assign || function(t) {
|
4 | for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5 | s = arguments[i];
|
6 | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7 | t[p] = s[p];
|
8 | }
|
9 | return t;
|
10 | };
|
11 | return __assign.apply(this, arguments);
|
12 | };
|
13 | Object.defineProperty(exports, "__esModule", { value: true });
|
14 | exports.cssSyntaxDefinitions = exports.extendSyntaxDefinition = exports.getXmlOptions = void 0;
|
15 | var emptyXmlOptions = {};
|
16 | var defaultXmlOptions = { wildcard: true };
|
17 | function getXmlOptions(param) {
|
18 | if (param) {
|
19 | if (typeof param === 'boolean') {
|
20 | return defaultXmlOptions;
|
21 | }
|
22 | else {
|
23 | return param;
|
24 | }
|
25 | }
|
26 | else {
|
27 | return emptyXmlOptions;
|
28 | }
|
29 | }
|
30 | exports.getXmlOptions = getXmlOptions;
|
31 | function withMigration(migration, merge) {
|
32 | return function (base, extension) { return merge(migration(base), migration(extension)); };
|
33 | }
|
34 | function withNoNegative(merge) {
|
35 | return function (base, extension) {
|
36 | var result = merge(base, extension);
|
37 | if (!result) {
|
38 | throw new Error("Syntax definition cannot be null or undefined.");
|
39 | }
|
40 | return result;
|
41 | };
|
42 | }
|
43 | function withPositive(positive, merge) {
|
44 | return function (base, extension) {
|
45 | if (extension === true) {
|
46 | return positive;
|
47 | }
|
48 | return merge(base === true ? positive : base, extension);
|
49 | };
|
50 | }
|
51 | function mergeSection(values) {
|
52 | return function (base, extension) {
|
53 | if (!extension || !base) {
|
54 | return extension;
|
55 | }
|
56 | if (typeof extension !== 'object' || extension === null) {
|
57 | throw new Error("Unexpected syntax definition extension type: ".concat(extension, "."));
|
58 | }
|
59 | var result = __assign({}, base);
|
60 | for (var _i = 0, _a = Object.entries(extension); _i < _a.length; _i++) {
|
61 | var _b = _a[_i], key = _b[0], value = _b[1];
|
62 | var mergeSchema = values[key];
|
63 | result[key] = mergeSchema(base[key], value);
|
64 | }
|
65 | return result;
|
66 | };
|
67 | }
|
68 | function replaceValueIfSpecified(base, extension) {
|
69 | if (extension !== undefined) {
|
70 | return extension;
|
71 | }
|
72 | return base;
|
73 | }
|
74 | function concatArray(base, extension) {
|
75 | if (!extension) {
|
76 | return base;
|
77 | }
|
78 | if (!base) {
|
79 | return extension;
|
80 | }
|
81 | return base.concat(extension);
|
82 | }
|
83 | function mergeDefinitions(base, extension) {
|
84 | if (!extension) {
|
85 | return base;
|
86 | }
|
87 | if (!base) {
|
88 | return extension;
|
89 | }
|
90 | var result = __assign({}, base);
|
91 | for (var _i = 0, _a = Object.entries(extension); _i < _a.length; _i++) {
|
92 | var _b = _a[_i], key = _b[0], value = _b[1];
|
93 | if (!value) {
|
94 | delete result[key];
|
95 | continue;
|
96 | }
|
97 | var baseValue = base[key];
|
98 | if (!baseValue) {
|
99 | result[key] = value;
|
100 | continue;
|
101 | }
|
102 | result[key] = baseValue.concat(value);
|
103 | }
|
104 | return result;
|
105 | }
|
106 | exports.extendSyntaxDefinition = withNoNegative(mergeSection({
|
107 | baseSyntax: replaceValueIfSpecified,
|
108 | tag: withPositive(defaultXmlOptions, mergeSection({
|
109 | wildcard: replaceValueIfSpecified
|
110 | })),
|
111 | ids: replaceValueIfSpecified,
|
112 | classNames: replaceValueIfSpecified,
|
113 | namespace: withPositive(defaultXmlOptions, mergeSection({
|
114 | wildcard: replaceValueIfSpecified
|
115 | })),
|
116 | combinators: concatArray,
|
117 | attributes: mergeSection({
|
118 | operators: concatArray,
|
119 | caseSensitivityModifiers: concatArray,
|
120 | unknownCaseSensitivityModifiers: replaceValueIfSpecified
|
121 | }),
|
122 | pseudoClasses: mergeSection({
|
123 | unknown: replaceValueIfSpecified,
|
124 | definitions: mergeDefinitions
|
125 | }),
|
126 | pseudoElements: mergeSection({
|
127 | unknown: replaceValueIfSpecified,
|
128 | notation: replaceValueIfSpecified,
|
129 | definitions: withMigration(function (definitions) { return (Array.isArray(definitions) ? { NoArgument: definitions } : definitions); }, mergeDefinitions)
|
130 | })
|
131 | }));
|
132 | var css1SyntaxDefinition = {
|
133 | tag: {},
|
134 | ids: true,
|
135 | classNames: true,
|
136 | combinators: [],
|
137 | pseudoElements: {
|
138 | unknown: 'reject',
|
139 | notation: 'singleColon',
|
140 | definitions: ['first-letter', 'first-line']
|
141 | },
|
142 | pseudoClasses: {
|
143 | unknown: 'reject',
|
144 | definitions: {
|
145 | NoArgument: ['link', 'visited', 'active']
|
146 | }
|
147 | }
|
148 | };
|
149 | var css2SyntaxDefinition = (0, exports.extendSyntaxDefinition)(css1SyntaxDefinition, {
|
150 | tag: { wildcard: true },
|
151 | combinators: ['>', '+'],
|
152 | attributes: {
|
153 | unknownCaseSensitivityModifiers: 'reject',
|
154 | operators: ['=', '~=', '|=']
|
155 | },
|
156 | pseudoElements: {
|
157 | definitions: ['before', 'after']
|
158 | },
|
159 | pseudoClasses: {
|
160 | unknown: 'reject',
|
161 | definitions: {
|
162 | NoArgument: ['hover', 'focus', 'first-child'],
|
163 | String: ['lang']
|
164 | }
|
165 | }
|
166 | });
|
167 | var selectors3SyntaxDefinition = (0, exports.extendSyntaxDefinition)(css2SyntaxDefinition, {
|
168 | namespace: {
|
169 | wildcard: true
|
170 | },
|
171 | combinators: ['~'],
|
172 | attributes: {
|
173 | operators: ['^=', '$=', '*=']
|
174 | },
|
175 | pseudoElements: {
|
176 | notation: 'both'
|
177 | },
|
178 | pseudoClasses: {
|
179 | definitions: {
|
180 | NoArgument: [
|
181 | 'root',
|
182 | 'last-child',
|
183 | 'first-of-type',
|
184 | 'last-of-type',
|
185 | 'only-child',
|
186 | 'only-of-type',
|
187 | 'empty',
|
188 | 'target',
|
189 | 'enabled',
|
190 | 'disabled',
|
191 | 'checked',
|
192 | 'indeterminate'
|
193 | ],
|
194 | Formula: ['nth-child', 'nth-last-child', 'nth-of-type', 'nth-last-of-type'],
|
195 | Selector: ['not']
|
196 | }
|
197 | }
|
198 | });
|
199 | var selectors4SyntaxDefinition = (0, exports.extendSyntaxDefinition)(selectors3SyntaxDefinition, {
|
200 | combinators: ['||'],
|
201 | attributes: {
|
202 | caseSensitivityModifiers: ['i', 'I', 's', 'S']
|
203 | },
|
204 | pseudoClasses: {
|
205 | definitions: {
|
206 | NoArgument: [
|
207 | 'any-link',
|
208 | 'local-link',
|
209 | 'target-within',
|
210 | 'scope',
|
211 | 'current',
|
212 | 'past',
|
213 | 'future',
|
214 | 'focus-within',
|
215 | 'focus-visible',
|
216 | 'read-write',
|
217 | 'read-only',
|
218 | 'placeholder-shown',
|
219 | 'default',
|
220 | 'valid',
|
221 | 'invalid',
|
222 | 'in-range',
|
223 | 'out-of-range',
|
224 | 'required',
|
225 | 'optional',
|
226 | 'blank',
|
227 | 'user-invalid'
|
228 | ],
|
229 | Formula: ['nth-col', 'nth-last-col'],
|
230 | String: ['dir'],
|
231 | FormulaOfSelector: ['nth-child', 'nth-last-child'],
|
232 | Selector: ['current', 'is', 'where', 'has']
|
233 | }
|
234 | }
|
235 | });
|
236 | var progressiveSyntaxDefinition = (0, exports.extendSyntaxDefinition)(selectors4SyntaxDefinition, {
|
237 | pseudoElements: {
|
238 | unknown: 'accept'
|
239 | },
|
240 | pseudoClasses: {
|
241 | unknown: 'accept'
|
242 | },
|
243 | attributes: {
|
244 | unknownCaseSensitivityModifiers: 'accept'
|
245 | }
|
246 | });
|
247 | exports.cssSyntaxDefinitions = {
|
248 | css1: css1SyntaxDefinition,
|
249 | css2: css2SyntaxDefinition,
|
250 | css3: selectors3SyntaxDefinition,
|
251 | 'selectors-3': selectors3SyntaxDefinition,
|
252 | 'selectors-4': selectors4SyntaxDefinition,
|
253 | latest: selectors4SyntaxDefinition,
|
254 | progressive: progressiveSyntaxDefinition
|
255 | };
|