css-to-tailwind-react 0.1.2 → 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/dist/cssParser.d.ts +9 -1
- package/dist/cssParser.js +131 -24
- package/dist/index.d.ts +3 -1
- package/dist/index.js +11 -2
- package/dist/jsxDescendantTransformer.d.ts +18 -0
- package/dist/jsxDescendantTransformer.js +324 -0
- package/dist/transformer.js +42 -3
- package/dist/utils/descendantSelectorResolver.d.ts +20 -0
- package/dist/utils/descendantSelectorResolver.js +186 -0
- package/package.json +1 -1
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isHtmlElement = isHtmlElement;
|
|
4
|
+
exports.parseDescendantSelector = parseDescendantSelector;
|
|
5
|
+
exports.isDescendantSelector = isDescendantSelector;
|
|
6
|
+
exports.isSimpleSelector = isSimpleSelector;
|
|
7
|
+
exports.processDescendantSelector = processDescendantSelector;
|
|
8
|
+
const logger_1 = require("./logger");
|
|
9
|
+
const HTML_ELEMENTS = new Set([
|
|
10
|
+
'a', 'abbr', 'address', 'article', 'aside', 'audio',
|
|
11
|
+
'b', 'blockquote', 'body', 'br', 'button',
|
|
12
|
+
'canvas', 'caption', 'cite', 'code', 'col', 'colgroup',
|
|
13
|
+
'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt',
|
|
14
|
+
'em', 'embed',
|
|
15
|
+
'fieldset', 'figcaption', 'figure', 'footer', 'form',
|
|
16
|
+
'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html',
|
|
17
|
+
'i', 'iframe', 'img', 'input', 'ins',
|
|
18
|
+
'kbd',
|
|
19
|
+
'label', 'legend', 'li', 'link',
|
|
20
|
+
'main', 'map', 'mark', 'menu', 'meta', 'meter',
|
|
21
|
+
'nav', 'noscript',
|
|
22
|
+
'object', 'ol', 'optgroup', 'option', 'output',
|
|
23
|
+
'p', 'param', 'picture', 'pre', 'progress',
|
|
24
|
+
'q',
|
|
25
|
+
'rp', 'rt', 'ruby',
|
|
26
|
+
's', 'samp', 'script', 'search', 'section', 'select', 'slot', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'svg',
|
|
27
|
+
'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track',
|
|
28
|
+
'u', 'ul',
|
|
29
|
+
'var', 'video',
|
|
30
|
+
'wbr'
|
|
31
|
+
]);
|
|
32
|
+
function isHtmlElement(name) {
|
|
33
|
+
return HTML_ELEMENTS.has(name.toLowerCase());
|
|
34
|
+
}
|
|
35
|
+
function parseSelectorPart(part) {
|
|
36
|
+
const trimmed = part.trim();
|
|
37
|
+
if (!trimmed)
|
|
38
|
+
return null;
|
|
39
|
+
if (trimmed.startsWith('.')) {
|
|
40
|
+
const className = trimmed.slice(1);
|
|
41
|
+
if (!className || !/^[a-zA-Z_-][a-zA-Z0-9_-]*$/.test(className)) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return { type: 'class', name: className };
|
|
45
|
+
}
|
|
46
|
+
if (/^[a-zA-Z][a-zA-Z0-9]*$/.test(trimmed)) {
|
|
47
|
+
return { type: 'element', name: trimmed.toLowerCase() };
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
function parseDescendantSelector(selector) {
|
|
52
|
+
const trimmed = selector.trim();
|
|
53
|
+
if (trimmed.includes(',')) {
|
|
54
|
+
return {
|
|
55
|
+
parent: undefined,
|
|
56
|
+
target: { type: 'element', name: '' },
|
|
57
|
+
isComplex: true,
|
|
58
|
+
reason: `Skipped comma-separated selector (${selector})`
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (trimmed.includes('>')) {
|
|
62
|
+
return {
|
|
63
|
+
parent: undefined,
|
|
64
|
+
target: { type: 'element', name: '' },
|
|
65
|
+
isComplex: true,
|
|
66
|
+
reason: `Skipped child combinator selector (${selector})`
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (trimmed.includes('+')) {
|
|
70
|
+
return {
|
|
71
|
+
parent: undefined,
|
|
72
|
+
target: { type: 'element', name: '' },
|
|
73
|
+
isComplex: true,
|
|
74
|
+
reason: `Skipped adjacent sibling selector (${selector})`
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
if (trimmed.includes('~')) {
|
|
78
|
+
return {
|
|
79
|
+
parent: undefined,
|
|
80
|
+
target: { type: 'element', name: '' },
|
|
81
|
+
isComplex: true,
|
|
82
|
+
reason: `Skipped general sibling selector (${selector})`
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (trimmed.includes(':not') || trimmed.includes(':has') || trimmed.includes(':is') || trimmed.includes(':where')) {
|
|
86
|
+
return {
|
|
87
|
+
parent: undefined,
|
|
88
|
+
target: { type: 'element', name: '' },
|
|
89
|
+
isComplex: true,
|
|
90
|
+
reason: `Skipped pseudo-class with argument (${selector})`
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
if (trimmed.includes('[') && trimmed.includes(']')) {
|
|
94
|
+
return {
|
|
95
|
+
parent: undefined,
|
|
96
|
+
target: { type: 'element', name: '' },
|
|
97
|
+
isComplex: true,
|
|
98
|
+
reason: `Skipped attribute selector (${selector})`
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
if (trimmed.includes(':')) {
|
|
102
|
+
const colonCount = (trimmed.match(/:/g) || []).length;
|
|
103
|
+
if (colonCount > 2 || trimmed.includes('::before') || trimmed.includes('::after')) {
|
|
104
|
+
return {
|
|
105
|
+
parent: undefined,
|
|
106
|
+
target: { type: 'element', name: '' },
|
|
107
|
+
isComplex: true,
|
|
108
|
+
reason: `Skipped selector with pseudo (${selector})`
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const parts = trimmed.split(/\s+/).filter(Boolean);
|
|
113
|
+
if (parts.length === 1) {
|
|
114
|
+
const part = parseSelectorPart(parts[0]);
|
|
115
|
+
if (!part) {
|
|
116
|
+
return {
|
|
117
|
+
parent: undefined,
|
|
118
|
+
target: { type: 'element', name: '' },
|
|
119
|
+
isComplex: true,
|
|
120
|
+
reason: `Invalid selector part (${parts[0]})`
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
parent: undefined,
|
|
125
|
+
target: part,
|
|
126
|
+
isComplex: false
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
if (parts.length === 2) {
|
|
130
|
+
const parentPart = parseSelectorPart(parts[0]);
|
|
131
|
+
const targetPart = parseSelectorPart(parts[1]);
|
|
132
|
+
if (!parentPart || !targetPart) {
|
|
133
|
+
return {
|
|
134
|
+
parent: undefined,
|
|
135
|
+
target: { type: 'element', name: '' },
|
|
136
|
+
isComplex: true,
|
|
137
|
+
reason: `Invalid selector part in (${selector})`
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
parent: parentPart,
|
|
142
|
+
target: targetPart,
|
|
143
|
+
isComplex: false
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
if (parts.length > 2) {
|
|
147
|
+
return {
|
|
148
|
+
parent: undefined,
|
|
149
|
+
target: { type: 'element', name: '' },
|
|
150
|
+
isComplex: true,
|
|
151
|
+
reason: `Skipped multi-level descendant selector (${selector})`
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
parent: undefined,
|
|
156
|
+
target: { type: 'element', name: '' },
|
|
157
|
+
isComplex: true,
|
|
158
|
+
reason: `Unable to parse selector (${selector})`
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function isDescendantSelector(selector) {
|
|
162
|
+
const parsed = parseDescendantSelector(selector);
|
|
163
|
+
return !parsed.isComplex && parsed.parent !== undefined;
|
|
164
|
+
}
|
|
165
|
+
function isSimpleSelector(selector) {
|
|
166
|
+
const parsed = parseDescendantSelector(selector);
|
|
167
|
+
return !parsed.isComplex && parsed.parent === undefined;
|
|
168
|
+
}
|
|
169
|
+
function processDescendantSelector(selector) {
|
|
170
|
+
const parsed = parseDescendantSelector(selector);
|
|
171
|
+
if (parsed.isComplex) {
|
|
172
|
+
logger_1.logger.verbose(parsed.reason || `Skipped complex selector: ${selector}`);
|
|
173
|
+
return { parsed: null, skipped: true, reason: parsed.reason };
|
|
174
|
+
}
|
|
175
|
+
if (parsed.parent) {
|
|
176
|
+
const parentDesc = parsed.parent.type === 'class'
|
|
177
|
+
? `.${parsed.parent.name}`
|
|
178
|
+
: parsed.parent.name;
|
|
179
|
+
const targetDesc = parsed.target.type === 'class'
|
|
180
|
+
? `.${parsed.target.name}`
|
|
181
|
+
: parsed.target.name;
|
|
182
|
+
logger_1.logger.verbose(`Parsed descendant selector: ${parentDesc} ${targetDesc}`);
|
|
183
|
+
}
|
|
184
|
+
return { parsed, skipped: false };
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY2VuZGFudFNlbGVjdG9yUmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZGVzY2VuZGFudFNlbGVjdG9yUmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF3Q0Esc0NBRUM7QUFxQkQsMERBNEhDO0FBRUQsb0RBR0M7QUFFRCw0Q0FHQztBQUVELDhEQXVCQztBQTlORCxxQ0FBa0M7QUFnQmxDLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDO0lBQzVCLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTztJQUNuRCxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUTtJQUN6QyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVU7SUFDdEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSTtJQUM5RSxJQUFJLEVBQUUsT0FBTztJQUNiLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNO0lBQ3BELElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNO0lBQzVFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLO0lBQ3BDLEtBQUs7SUFDTCxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNO0lBQy9CLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTztJQUM5QyxLQUFLLEVBQUUsVUFB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Q0FBQywrQkFBK0IsVUFBVSxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdG9yVHlwZSA9ICdjbGFzcycgfCAnZWxlbWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0b3JQYXJ0IHtcbiAgdHlwZTogU2VsZWN0b3JUeXBlO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY2VuZGFudFNlbGVjdG9yIHtcbiAgcGFyZW50PzogU2VsZWN0b3JQYXJ0O1xuICB0YXJnZXQ6IFNlbGVjdG9yUGFydDtcbiAgaXNDb21wbGV4OiBib29sZWFuO1xuICByZWFzb24/OiBzdHJpbmc7XG59XG5cbmNvbnN0IEhUTUxfRUxFTUVOVFMgPSBuZXcgU2V0KFtcbiAgJ2EnLCAnYWJicicsICdhZGRyZXNzJywgJ2FydGljbGUnLCAnYXNpZGUnLCAnYXVkaW8nLFxuICAnYicsICdibG9ja3F1b3RlJywgJ2JvZHknLCAnYnInLCAnYnV0dG9uJyxcbiAgJ2NhbnZhcycsICdjYXB0aW9uJywgJ2NpdGUnLCAnY29kZScsICdjb2wnLCAnY29sZ3JvdXAnLFxuICAnZGF0YScsICdkYXRhbGlzdCcsICdkZCcsICdkZWwnLCAnZGV0YWlscycsICdkZm4nLCAnZGlhbG9nJywgJ2RpdicsICdkbCcsICdkdCcsXG4gICdlbScsICdlbWJlZCcsXG4gICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb290ZXInLCAnZm9ybScsXG4gICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkJywgJ2hlYWRlcicsICdoZ3JvdXAnLCAnaHInLCAnaHRtbCcsXG4gICdpJywgJ2lmcmFtZScsICdpbWcnLCAnaW5wdXQnLCAnaW5zJyxcbiAgJ2tiZCcsXG4gICdsYWJlbCcsICdsZWdlbmQnLCAnbGknLCAnbGluaycsXG4gICdtYWluJywgJ21hcCcsICdtYXJrJywgJ21lbnUnLCAnbWV0YScsICdtZXRlcicsXG4gICduYXYnLCAnbm9zY3JpcHQnLFxuICAnb2JqZWN0JywgJ29sJywgJ29wdGdyb3VwJywgJ29wdGlvbicsICdvdXRwdXQnLFxuICAncCcsICdwYXJhbScsICdwaWN0dXJlJywgJ3ByZScsICdwcm9ncmVzcycsXG4gICdxJyxcbiAgJ3JwJywgJ3J0JywgJ3J1YnknLFxuICAncycsICdzYW1wJywgJ3NjcmlwdCcsICdzZWFyY2gnLCAnc2VjdGlvbicsICdzZWxlY3QnLCAnc2xvdCcsICdzbWFsbCcsICdzb3VyY2UnLCAnc3BhbicsICdzdHJvbmcnLCAnc3R5bGUnLCAnc3ViJywgJ3N1bW1hcnknLCAnc3VwJywgJ3N2ZycsXG4gICd0YWJsZScsICd0Ym9keScsICd0ZCcsICd0ZW1wbGF0ZScsICd0ZXh0YXJlYScsICd0Zm9vdCcsICd0aCcsICd0aGVhZCcsICd0aW1lJywgJ3RpdGxlJywgJ3RyJywgJ3RyYWNrJyxcbiAgJ3UnLCAndWwnLFxuICAndmFyJywgJ3ZpZGVvJyxcbiAgJ3dicidcbl0pO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNIdG1sRWxlbWVudChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEhUTUxfRUxFTUVOVFMuaGFzKG5hbWUudG9Mb3dlckNhc2UoKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2VsZWN0b3JQYXJ0KHBhcnQ6IHN0cmluZyk6IFNlbGVjdG9yUGFydCB8IG51bGwge1xuICBjb25zdCB0cmltbWVkID0gcGFydC50cmltKCk7XG4gIGlmICghdHJpbW1lZCkgcmV0dXJuIG51bGw7XG4gIFxuICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCcuJykpIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0cmltbWVkLnNsaWNlKDEpO1xuICAgIGlmICghY2xhc3NOYW1lIHx8ICEvXlthLXpBLVpfLV1bYS16QS1aMC05Xy1dKiQvLnRlc3QoY2xhc3NOYW1lKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7IHR5cGU6ICdjbGFzcycsIG5hbWU6IGNsYXNzTmFtZSB9O1xuICB9XG4gIFxuICBpZiAoL15bYS16QS1aXVthLXpBLVowLTldKiQvLnRlc3QodHJpbW1lZCkpIHtcbiAgICByZXR1cm4geyB0eXBlOiAnZWxlbWVudCcsIG5hbWU6IHRyaW1tZWQudG9Mb3dlckNhc2UoKSB9O1xuICB9XG4gIFxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGVzY2VuZGFudFNlbGVjdG9yKHNlbGVjdG9yOiBzdHJpbmcpOiBEZXNjZW5kYW50U2VsZWN0b3Ige1xuICBjb25zdCB0cmltbWVkID0gc2VsZWN0b3IudHJpbSgpO1xuICBcbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJywnKSkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnQ6IHVuZGVmaW5lZCxcbiAgICAgIHRhcmdldDogeyB0eXBlOiAnZWxlbWVudCcsIG5hbWU6ICcnIH0sXG4gICAgICBpc0NvbXBsZXg6IHRydWUsXG4gICAgICByZWFzb246IGBTa2lwcGVkIGNvbW1hLXNlcGFyYXRlZCBzZWxlY3RvciAoJHtzZWxlY3Rvcn0pYFxuICAgIH07XG4gIH1cbiAgXG4gIGlmICh0cmltbWVkLmluY2x1ZGVzKCc+JykpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyZW50OiB1bmRlZmluZWQsXG4gICAgICB0YXJnZXQ6IHsgdHlwZTogJ2VsZW1lbnQnLCBuYW1lOiAnJyB9LFxuICAgICAgaXNDb21wbGV4OiB0cnVlLFxuICAgICAgcmVhc29uOiBgU2tpcHBlZCBjaGlsZCBjb21iaW5hdG9yIHNlbGVjdG9yICgke3NlbGVjdG9yfSlgXG4gICAgfTtcbiAgfVxuICBcbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJysnKSkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnQ6IHVuZGVmaW5lZCxcbiAgICAgIHRhcmdldDogeyB0eXBlOiAnZWxlbWVudCcsIG5hbWU6ICcnIH0sXG4gICAgICBpc0NvbXBsZXg6IHRydWUsXG4gICAgICByZWFzb246IGBTa2lwcGVkIGFkamFjZW50IHNpYmxpbmcgc2VsZWN0b3IgKCR7c2VsZWN0b3J9KWBcbiAgICB9O1xuICB9XG4gIFxuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnficpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudDogdW5kZWZpbmVkLFxuICAgICAgdGFyZ2V0OiB7IHR5cGU6ICdlbGVtZW50JywgbmFtZTogJycgfSxcbiAgICAgIGlzQ29tcGxleDogdHJ1ZSxcbiAgICAgIHJlYXNvbjogYFNraXBwZWQgZ2VuZXJhbCBzaWJsaW5nIHNlbGVjdG9yICgke3NlbGVjdG9yfSlgXG4gICAgfTtcbiAgfVxuICBcbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJzpub3QnKSB8fCB0cmltbWVkLmluY2x1ZGVzKCc6aGFzJykgfHwgdHJpbW1lZC5pbmNsdWRlcygnOmlzJykgfHwgdHJpbW1lZC5pbmNsdWRlcygnOndoZXJlJykpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyZW50OiB1bmRlZmluZWQsXG4gICAgICB0YXJnZXQ6IHsgdHlwZTogJ2VsZW1lbnQnLCBuYW1lOiAnJyB9LFxuICAgICAgaXNDb21wbGV4OiB0cnVlLFxuICAgICAgcmVhc29uOiBgU2tpcHBlZCBwc2V1ZG8tY2xhc3Mgd2l0aCBhcmd1bWVudCAoJHtzZWxlY3Rvcn0pYFxuICAgIH07XG4gIH1cbiAgXG4gIGlmICh0cmltbWVkLmluY2x1ZGVzKCdbJykgJiYgdHJpbW1lZC5pbmNsdWRlcygnXScpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudDogdW5kZWZpbmVkLFxuICAgICAgdGFyZ2V0OiB7IHR5cGU6ICdlbGVtZW50JywgbmFtZTogJycgfSxcbiAgICAgIGlzQ29tcGxleDogdHJ1ZSxcbiAgICAgIHJlYXNvbjogYFNraXBwZWQgYXR0cmlidXRlIHNlbGVjdG9yICgke3NlbGVjdG9yfSlgXG4gICAgfTtcbiAgfVxuICBcbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJzonKSkge1xuICAgIGNvbnN0IGNvbG9uQ291bnQgPSAodHJpbW1lZC5tYXRjaCgvOi9nKSB8fCBbXSkubGVuZ3RoO1xuICAgIGlmIChjb2xvbkNvdW50ID4gMiB8fCB0cmltbWVkLmluY2x1ZGVzKCc6OmJlZm9yZScpIHx8IHRyaW1tZWQuaW5jbHVkZXMoJzo6YWZ0ZXInKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFyZW50OiB1bmRlZmluZWQsXG4gICAgICAgIHRhcmdldDogeyB0eXBlOiAnZWxlbWVudCcsIG5hbWU6ICcnIH0sXG4gICAgICAgIGlzQ29tcGxleDogdHJ1ZSxcbiAgICAgICAgcmVhc29uOiBgU2tpcHBlZCBzZWxlY3RvciB3aXRoIHBzZXVkbyAoJHtzZWxlY3Rvcn0pYFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIGNvbnN0IHBhcnRzID0gdHJpbW1lZC5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKTtcbiAgXG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFyc2VTZWxlY3RvclBhcnQocGFydHNbMF0pO1xuICAgIGlmICghcGFydCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFyZW50OiB1bmRlZmluZWQsXG4gICAgICAgIHRhcmdldDogeyB0eXBlOiAnZWxlbWVudCcsIG5hbWU6ICcnIH0sXG4gICAgICAgIGlzQ29tcGxleDogdHJ1ZSxcbiAgICAgICAgcmVhc29uOiBgSW52YWxpZCBzZWxlY3RvciBwYXJ0ICgke3BhcnRzWzBdfSlgXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgcGFyZW50OiB1bmRlZmluZWQsXG4gICAgICB0YXJnZXQ6IHBhcnQsXG4gICAgICBpc0NvbXBsZXg6IGZhbHNlXG4gICAgfTtcbiAgfVxuICBcbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNvbnN0IHBhcmVudFBhcnQgPSBwYXJzZVNlbGVjdG9yUGFydChwYXJ0c1swXSk7XG4gICAgY29uc3QgdGFyZ2V0UGFydCA9IHBhcnNlU2VsZWN0b3JQYXJ0KHBhcnRzWzFdKTtcbiAgICBcbiAgICBpZiAoIXBhcmVudFBhcnQgfHwgIXRhcmdldFBhcnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhcmVudDogdW5kZWZpbmVkLFxuICAgICAgICB0YXJnZXQ6IHsgdHlwZTogJ2VsZW1lbnQnLCBuYW1lOiAnJyB9LFxuICAgICAgICBpc0NvbXBsZXg6IHRydWUsXG4gICAgICAgIHJlYXNvbjogYEludmFsaWQgc2VsZWN0b3IgcGFydCBpbiAoJHtzZWxlY3Rvcn0pYFxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudDogcGFyZW50UGFydCxcbiAgICAgIHRhcmdldDogdGFyZ2V0UGFydCxcbiAgICAgIGlzQ29tcGxleDogZmFsc2VcbiAgICB9O1xuICB9XG4gIFxuICBpZiAocGFydHMubGVuZ3RoID4gMikge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnQ6IHVuZGVmaW5lZCxcbiAgICAgIHRhcmdldDogeyB0eXBlOiAnZWxlbWVudCcsIG5hbWU6ICcnIH0sXG4gICAgICBpc0NvbXBsZXg6IHRydWUsXG4gICAgICByZWFzb246IGBTa2lwcGVkIG11bHRpLWxldmVsIGRlc2NlbmRhbnQgc2VsZWN0b3IgKCR7c2VsZWN0b3J9KWBcbiAgICB9O1xuICB9XG4gIFxuICByZXR1cm4ge1xuICAgIHBhcmVudDogdW5kZWZpbmVkLFxuICAgIHRhcmdldDogeyB0eXBlOiAnZWxlbWVudCcsIG5hbWU6ICcnIH0sXG4gICAgaXNDb21wbGV4OiB0cnVlLFxuICAgIHJlYXNvbjogYFVuYWJsZSB0byBwYXJzZSBzZWxlY3RvciAoJHtzZWxlY3Rvcn0pYFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEZXNjZW5kYW50U2VsZWN0b3Ioc2VsZWN0b3I6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZURlc2NlbmRhbnRTZWxlY3RvcihzZWxlY3Rvcik7XG4gIHJldHVybiAhcGFyc2VkLmlzQ29tcGxleCAmJiBwYXJzZWQucGFyZW50ICE9PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpbXBsZVNlbGVjdG9yKHNlbGVjdG9yOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VEZXNjZW5kYW50U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICByZXR1cm4gIXBhcnNlZC5pc0NvbXBsZXggJiYgcGFyc2VkLnBhcmVudCA9PT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0Rlc2NlbmRhbnRTZWxlY3RvcihzZWxlY3Rvcjogc3RyaW5nKToge1xuICBwYXJzZWQ6IERlc2NlbmRhbnRTZWxlY3RvciB8IG51bGw7XG4gIHNraXBwZWQ6IGJvb2xlYW47XG4gIHJlYXNvbj86IHN0cmluZztcbn0ge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZURlc2NlbmRhbnRTZWxlY3RvcihzZWxlY3Rvcik7XG4gIFxuICBpZiAocGFyc2VkLmlzQ29tcGxleCkge1xuICAgIGxvZ2dlci52ZXJib3NlKHBhcnNlZC5yZWFzb24gfHwgYFNraXBwZWQgY29tcGxleCBzZWxlY3RvcjogJHtzZWxlY3Rvcn1gKTtcbiAgICByZXR1cm4geyBwYXJzZWQ6IG51bGwsIHNraXBwZWQ6IHRydWUsIHJlYXNvbjogcGFyc2VkLnJlYXNvbiB9O1xuICB9XG4gIFxuICBpZiAocGFyc2VkLnBhcmVudCkge1xuICAgIGNvbnN0IHBhcmVudERlc2MgPSBwYXJzZWQucGFyZW50LnR5cGUgPT09ICdjbGFzcycgXG4gICAgICA/IGAuJHtwYXJzZWQucGFyZW50Lm5hbWV9YCBcbiAgICAgIDogcGFyc2VkLnBhcmVudC5uYW1lO1xuICAgIGNvbnN0IHRhcmdldERlc2MgPSBwYXJzZWQudGFyZ2V0LnR5cGUgPT09ICdjbGFzcycgXG4gICAgICA/IGAuJHtwYXJzZWQudGFyZ2V0Lm5hbWV9YCBcbiAgICAgIDogcGFyc2VkLnRhcmdldC5uYW1lO1xuICAgIGxvZ2dlci52ZXJib3NlKGBQYXJzZWQgZGVzY2VuZGFudCBzZWxlY3RvcjogJHtwYXJlbnREZXNjfSAke3RhcmdldERlc2N9YCk7XG4gIH1cbiAgXG4gIHJldHVybiB7IHBhcnNlZCwgc2tpcHBlZDogZmFsc2UgfTtcbn0iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "css-to-tailwind-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Convert traditional CSS (inline, internal, and external) into Tailwind CSS utility classes for React-based frameworks",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|