UNPKG

7.59 kBJavaScriptView Raw
1"use strict";
2var __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};
13Object.defineProperty(exports, "__esModule", { value: true });
14exports.cssSyntaxDefinitions = exports.extendSyntaxDefinition = exports.getXmlOptions = void 0;
15var emptyXmlOptions = {};
16var defaultXmlOptions = { wildcard: true };
17function 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}
30exports.getXmlOptions = getXmlOptions;
31function withMigration(migration, merge) {
32 return function (base, extension) { return merge(migration(base), migration(extension)); };
33}
34function 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}
43function 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}
51function 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}
68function replaceValueIfSpecified(base, extension) {
69 if (extension !== undefined) {
70 return extension;
71 }
72 return base;
73}
74function concatArray(base, extension) {
75 if (!extension) {
76 return base;
77 }
78 if (!base) {
79 return extension;
80 }
81 return base.concat(extension);
82}
83function 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}
106exports.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}));
132var 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};
149var 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});
167var 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});
199var 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});
236var progressiveSyntaxDefinition = (0, exports.extendSyntaxDefinition)(selectors4SyntaxDefinition, {
237 pseudoElements: {
238 unknown: 'accept'
239 },
240 pseudoClasses: {
241 unknown: 'accept'
242 },
243 attributes: {
244 unknownCaseSensitivityModifiers: 'accept'
245 }
246});
247exports.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};