@markuplint/selector 4.1.0 → 4.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-specificity.d.ts","sourceRoot":"","sources":["../src/compare-specificity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,cAehE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-selector.d.ts","sourceRoot":"","sources":["../src/create-selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAKpD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,YAkBhE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,eAAO,MAAM,GAAG,gBAAoB,CAAC;AAErC,wBAAgB,WAAW,SAU1B"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aria-pseudo-class.d.ts","sourceRoot":"","sources":["../../src/extended-selector/aria-pseudo-class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD;;GAEG;AACH,wBAAgB,eAAe,cACb,MAAM,UAGjB,OAAO,KACT,cAAc,CAkClB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aria-role-pseudo-class.d.ts","sourceRoot":"","sources":["../../src/extended-selector/aria-role-pseudo-class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAIjE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,aACjC,MAAM,UAGjB,OAAO,KACT,cAAc,CAmBlB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-model-pseudo-class.d.ts","sourceRoot":"","sources":["../../src/extended-selector/content-model-pseudo-class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,cAAc,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAM9D,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,QAAQ,cACpC,MAAM,UAGlB,OAAO,KACT,cAAc,CAoDlB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,cAAc,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalid-selector-error.d.ts","sourceRoot":"","sources":["../src/invalid-selector-error.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAqB,SAAQ,KAAK;IAC9C,IAAI,SAA0B;IAC9B,QAAQ,EAAE,MAAM,CAAC;gBACL,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAI9C"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is.d.ts","sourceRoot":"","sources":["../src/is.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAExB,IAAI,EAAE,IAAI,GACR,IAAI,IAAI,OAAO,CAEjB;AAED,wBAAgB,0BAA0B,CAEzC,IAAI,EAAE,IAAI,GACR,IAAI,IAAI,OAAO,GAAG,aAAa,CAEjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAEhC,EAAE,EAAE,OAAO,WAGX"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match-selector.d.ts","sourceRoot":"","sources":["../src/match-selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAA4D,MAAM,YAAY,CAAC;AAOvH,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG,iBAAiB,CAAC;AAElE,KAAK,eAAe,GAAG;IACtB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACjD,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACxB,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;CACxB,CAAC;AAEF,wBAAgB,aAAa,CAE5B,EAAE,EAAE,IAAI,EACR,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,GAC1C,eAAe,CAuBjB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-selector-matches.d.ts","sourceRoot":"","sources":["../src/regex-selector-matches.ts"],"names":[],"mappings":"AAAA,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO;;SAiB7F"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../src/selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAcrF,KAAK,mBAAmB,GAAG,QAAQ,CAClC,MAAM,CACL,MAAM,EACN,CAAC,OAAO,EAAE,MAAM,KAAK,CAEpB,EAAE,EAAE,OAAO,KACP,cAAc,CACnB,CACD,CAAC;AAEF,qBAAa,QAAQ;;gBAGR,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,mBAAwB;IAIhE,KAAK,CAEJ,EAAE,EAAE,IAAI,EAER,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,GACvB,WAAW,GAAG,KAAK;IAWtB,MAAM,CAEL,EAAE,EAAE,IAAI,EAER,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI;CAK1B"}
package/lib/selector.js CHANGED
@@ -80,11 +80,17 @@ class Ruleset {
80
80
  el,
81
81
  // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
82
82
  scope) {
83
- coreLog('<%s> (%s)', isElement(el) ? el.localName : el.nodeName, scope ? (isElement(scope) ? scope.localName : scope.nodeName) : null);
83
+ if (coreLog.enabled) {
84
+ coreLog('<%s> (%s)', isElement(el) ? el.localName : el.nodeName, scope ? (isElement(scope) ? scope.localName : scope.nodeName) : null);
85
+ }
84
86
  return __classPrivateFieldGet(this, _Ruleset_selectorGroup, "f").map(selector => {
85
- selLog('"%s"', selector.selector);
87
+ if (selLog.enabled) {
88
+ selLog('"%s"', selector.selector);
89
+ }
86
90
  const res = selector.match(el, scope);
87
- resLog('%s "%s" => %o', isElement(el) ? el.localName : el.nodeName, selector.selector, res);
91
+ if (resLog.enabled) {
92
+ resLog('%s "%s" => %o', isElement(el) ? el.localName : el.nodeName, selector.selector, res);
93
+ }
88
94
  return res;
89
95
  });
90
96
  }
@@ -423,6 +429,14 @@ class SelectorTarget {
423
429
  }
424
430
  }
425
431
  }
432
+ /**
433
+ * Matching is executed in this order: ID > tag name > classes > attributes > pseudo-elements.
434
+ * If any of the selectors are unmatched, the rest of the selectors is skipped for better performance.
435
+ *
436
+ * @param el
437
+ * @param scope
438
+ * @private
439
+ */
426
440
  _matchWithoutCombineChecking(
427
441
  // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
428
442
  el,
@@ -464,32 +478,11 @@ class SelectorTarget {
464
478
  if (!__classPrivateFieldGet(this, _SelectorTarget_isAdded, "f") && !isScope(el, scope)) {
465
479
  matched = false;
466
480
  }
467
- if (!this.id.every(id => id.value === el.id)) {
481
+ if (matched && !this.id.every(id => id.value === el.id)) {
468
482
  matched = false;
469
483
  }
470
484
  specificity[0] += this.id.length;
471
- if (!this.class.every(className => el.classList.contains(className.value))) {
472
- matched = false;
473
- }
474
- specificity[1] += this.class.length;
475
- if (!this.attr.every(attr => attrMatch(attr, el))) {
476
- matched = false;
477
- }
478
- specificity[1] += this.attr.length;
479
- for (const pseudo of this.pseudo) {
480
- const pseudoRes = pseudoMatch(pseudo, el, scope, __classPrivateFieldGet(this, _SelectorTarget_extended, "f"), this.depth);
481
- specificity[0] += pseudoRes.specificity[0];
482
- specificity[1] += pseudoRes.specificity[1];
483
- specificity[2] += pseudoRes.specificity[2];
484
- if (pseudoRes.matched) {
485
- has.push(...pseudoRes.has);
486
- }
487
- else {
488
- not.push(...(pseudoRes.not ?? []));
489
- matched = false;
490
- }
491
- }
492
- if (this.tag && this.tag.type === 'tag') {
485
+ if (matched && this.tag && this.tag.type === 'tag') {
493
486
  specificity[2] += 1;
494
487
  let a = this.tag.value;
495
488
  let b = el.localName;
@@ -501,6 +494,29 @@ class SelectorTarget {
501
494
  matched = false;
502
495
  }
503
496
  }
497
+ if (matched && !this.class.every(className => el.classList.contains(className.value))) {
498
+ matched = false;
499
+ }
500
+ specificity[1] += this.class.length;
501
+ if (matched && !this.attr.every(attr => attrMatch(attr, el))) {
502
+ matched = false;
503
+ }
504
+ specificity[1] += this.attr.length;
505
+ if (matched) {
506
+ for (const pseudo of this.pseudo) {
507
+ const pseudoRes = pseudoMatch(pseudo, el, scope, __classPrivateFieldGet(this, _SelectorTarget_extended, "f"), this.depth);
508
+ specificity[0] += pseudoRes.specificity[0];
509
+ specificity[1] += pseudoRes.specificity[1];
510
+ specificity[2] += pseudoRes.specificity[2];
511
+ if (pseudoRes.matched) {
512
+ has.push(...pseudoRes.has);
513
+ }
514
+ else {
515
+ not.push(...(pseudoRes.not ?? []));
516
+ matched = false;
517
+ }
518
+ }
519
+ }
504
520
  if (matched) {
505
521
  return {
506
522
  specificity,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG,qBAAqB,GAAG,uBAAuB,CAAC;AAE7E,MAAM,MAAM,qBAAqB,GAAG;IACnC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;IAC5C,QAAQ,CAAC,GAAG,EAAE,SAAS,qBAAqB,EAAE,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACrC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,+BAA+B,GAAG;IAC7D,QAAQ,CAAC,WAAW,CAAC,EAAE;QACtB,QAAQ,CAAC,UAAU,EAAE,uBAAuB,CAAC;KAC7C,GAAG,aAAa,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpF,MAAM,MAAM,+BAA+B,GAAG;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@markuplint/selector",
3
- "version": "4.1.0",
3
+ "version": "4.2.0",
4
4
  "description": "Extended W3C Selectors matcher",
5
5
  "repository": "git@github.com:markuplint/markuplint.git",
6
6
  "author": "Yusuke Hirao <yusukehirao@me.com>",
@@ -25,7 +25,7 @@
25
25
  "clean": "tsc --build --clean"
26
26
  },
27
27
  "dependencies": {
28
- "@markuplint/ml-spec": "4.0.1",
28
+ "@markuplint/ml-spec": "4.1.0",
29
29
  "@types/debug": "^4.1.12",
30
30
  "debug": "^4.3.4",
31
31
  "postcss-selector-parser": "^6.0.15",
@@ -35,5 +35,5 @@
35
35
  "@types/jsdom": "21.1.6",
36
36
  "jsdom": "24.0.0"
37
37
  },
38
- "gitHead": "b9817c30c2df71faa866e3b3fe286afa499deede"
38
+ "gitHead": "d5d99c5d84b676f8b2bb84684533ed74cf2f1da6"
39
39
  }