Skip to content

Commit 7439ba7

Browse files
committed
chore: migrate off of css-selector-tokenizer
1 parent dd5bcf6 commit 7439ba7

File tree

2 files changed

+532
-532
lines changed

2 files changed

+532
-532
lines changed

index.js

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ function trimSelectors(selector) {
4545
}
4646
}
4747

48-
function localizeNodez(rule, mode, options) {
48+
function localizeNode(rule, mode, options) {
4949
const isScopePseudo = node =>
5050
node.value === ':local' || node.value === ':global';
5151

@@ -87,27 +87,26 @@ function localizeNodez(rule, mode, options) {
8787
context.global = resultingGlobal;
8888

8989
node.nodes = normalizeNodeArray(newNodes);
90-
// console.log(node.nodes);
9190
break;
9291
}
9392
case 'selector': {
9493
newNodes = node.map(childNode => transform(childNode, context));
9594

9695
node = node.clone();
9796
node.nodes = normalizeNodeArray(newNodes);
98-
console.log('SECLE', node.toString());
9997
break;
10098
}
10199
case 'combinator': {
102-
if (!isSpacing(node)) break;
103-
104-
if (context.ignoreNextSpacing) {
105-
context.ignoreNextSpacing = false;
106-
context.lastWasSpacing = false;
107-
context.enforceNoSpacing = false;
108-
return null;
100+
if (isSpacing(node)) {
101+
if (context.ignoreNextSpacing) {
102+
context.ignoreNextSpacing = false;
103+
context.lastWasSpacing = false;
104+
context.enforceNoSpacing = false;
105+
return null;
106+
}
107+
context.lastWasSpacing = true;
108+
return node;
109109
}
110-
context.lastWasSpacing = true;
111110
break;
112111
}
113112
case 'pseudo': {
@@ -132,7 +131,6 @@ function localizeNodez(rule, mode, options) {
132131
hasLocals: false,
133132
explicit: true,
134133
};
135-
// console.log('PSUDI', node.nodes);
136134

137135
newNodes = node
138136
.map(childNode => transform(childNode, childContext))
@@ -147,12 +145,9 @@ function localizeNodez(rule, mode, options) {
147145
first.spaces = { before, after: first.spaces.after };
148146
last.spaces = { before: last.spaces.before, after };
149147
}
150-
console.log('PSUDI', node);
148+
151149
node = newNodes;
152150

153-
// // don't leak spacing
154-
// node[0].spaces.before = '';
155-
// node[node.length - 1].spaces.after = '';
156151
break;
157152
} else {
158153
childContext = {
@@ -185,36 +180,41 @@ function localizeNodez(rule, mode, options) {
185180
);
186181
}
187182

188-
const next = node.next();
189-
console.log('SPACESS', next, node.spaces);
190-
if (next) next.spaces = node.spaces;
183+
const next = node.parent;
184+
const addBackSpacing = !!node.spaces.before;
191185

192186
context.ignoreNextSpacing = context.lastWasSpacing
193187
? node.value
194188
: false;
189+
195190
context.enforceNoSpacing = context.lastWasSpacing
196191
? false
197192
: node.value;
193+
198194
context.global = node.value === ':global';
199195
context.explicit = true;
200-
return null;
196+
197+
// because this node has spacing that is lost when we remove it
198+
// we make up for it by adding an extra combinator in since adding
199+
// spacing on the parent selector doesn't work
200+
return addBackSpacing
201+
? selectorParser.combinator({ value: ' ' })
202+
: null;
201203
}
202204
break;
203205
}
204206
case 'id':
205207
case 'class': {
206208
if (!context.global) {
207-
console.log('REPLCE', node.spaces);
208209
const innerNode = node.clone();
209-
console.log(innerNode);
210210
innerNode.spaces = { before: '', after: '' };
211211

212212
node = selectorParser.pseudo({
213213
value: ':local',
214214
nodes: [innerNode],
215215
spaces: node.spaces,
216216
});
217-
// console.log('HERE');
217+
218218
context.hasLocals = true;
219219
}
220220

@@ -233,11 +233,11 @@ function localizeNodez(rule, mode, options) {
233233
hasPureGlobals: false,
234234
};
235235

236-
const updatedRule = selectorParser(root => {
236+
const selector = selectorParser(root => {
237237
transform(root, rootContext);
238-
}).processSync(rule, { updateSelector: true, lossless: true });
238+
}).processSync(rule, { updateSelector: false, lossless: true });
239239

240-
// console.log('HERE', rule.selector);
240+
rootContext.selector = selector;
241241
return rootContext;
242242
}
243243

@@ -479,7 +479,9 @@ module.exports = postcss.plugin('postcss-modules-local-by-default', function(
479479
return;
480480
}
481481

482-
const context = localizeNodez(rule, options.mode, options);
482+
const context = localizeNode(rule, options.mode);
483+
484+
context.options = options;
483485

484486
if (pureMode && context.hasPureGlobals) {
485487
throw rule.error(
@@ -489,12 +491,10 @@ module.exports = postcss.plugin('postcss-modules-local-by-default', function(
489491
'(pure selectors must contain at least one local class or id)'
490492
);
491493
}
494+
rule.selector = context.selector;
492495
// Less-syntax mixins parse as rules with no nodes
493496
if (rule.nodes) {
494-
rule.nodes.forEach(function(decl) {
495-
console.log(context);
496-
localizeDecl(decl, context);
497-
});
497+
rule.nodes.forEach(decl => localizeDecl(decl, context));
498498
}
499499
});
500500
};

0 commit comments

Comments
 (0)