@spiracss/stylelint-plugin 0.2.2 → 0.3.1

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.
Files changed (390) hide show
  1. package/README.md +14 -18
  2. package/dist/cjs/helpers.d.ts +117 -34
  3. package/dist/cjs/helpers.d.ts.map +1 -1
  4. package/dist/cjs/helpers.js +297 -171
  5. package/dist/cjs/helpers.js.map +1 -1
  6. package/dist/cjs/index.d.ts.map +1 -1
  7. package/dist/cjs/index.js +4 -0
  8. package/dist/cjs/index.js.map +1 -1
  9. package/dist/cjs/rules/spiracss-class-structure.d.ts.map +1 -1
  10. package/dist/cjs/rules/spiracss-class-structure.js +96 -40
  11. package/dist/cjs/rules/spiracss-class-structure.js.map +1 -1
  12. package/dist/cjs/rules/spiracss-class-structure.messages.d.ts +10 -8
  13. package/dist/cjs/rules/spiracss-class-structure.messages.d.ts.map +1 -1
  14. package/dist/cjs/rules/spiracss-class-structure.messages.js +59 -26
  15. package/dist/cjs/rules/spiracss-class-structure.messages.js.map +1 -1
  16. package/dist/cjs/rules/spiracss-class-structure.options.d.ts.map +1 -1
  17. package/dist/cjs/rules/spiracss-class-structure.options.js +71 -56
  18. package/dist/cjs/rules/spiracss-class-structure.options.js.map +1 -1
  19. package/dist/cjs/rules/spiracss-class-structure.patterns.d.ts +4 -4
  20. package/dist/cjs/rules/spiracss-class-structure.patterns.d.ts.map +1 -1
  21. package/dist/cjs/rules/spiracss-class-structure.patterns.js +24 -27
  22. package/dist/cjs/rules/spiracss-class-structure.patterns.js.map +1 -1
  23. package/dist/cjs/rules/spiracss-class-structure.selectors.d.ts +3 -4
  24. package/dist/cjs/rules/spiracss-class-structure.selectors.d.ts.map +1 -1
  25. package/dist/cjs/rules/spiracss-class-structure.selectors.js +34 -60
  26. package/dist/cjs/rules/spiracss-class-structure.selectors.js.map +1 -1
  27. package/dist/cjs/rules/spiracss-class-structure.types.d.ts +32 -12
  28. package/dist/cjs/rules/spiracss-class-structure.types.d.ts.map +1 -1
  29. package/dist/cjs/rules/spiracss-interaction-properties.d.ts.map +1 -1
  30. package/dist/cjs/rules/spiracss-interaction-properties.js +207 -116
  31. package/dist/cjs/rules/spiracss-interaction-properties.js.map +1 -1
  32. package/dist/cjs/rules/spiracss-interaction-properties.messages.d.ts +4 -3
  33. package/dist/cjs/rules/spiracss-interaction-properties.messages.d.ts.map +1 -1
  34. package/dist/cjs/rules/spiracss-interaction-properties.messages.js +11 -12
  35. package/dist/cjs/rules/spiracss-interaction-properties.messages.js.map +1 -1
  36. package/dist/cjs/rules/spiracss-interaction-properties.options.d.ts.map +1 -1
  37. package/dist/cjs/rules/spiracss-interaction-properties.options.js +12 -14
  38. package/dist/cjs/rules/spiracss-interaction-properties.options.js.map +1 -1
  39. package/dist/cjs/rules/spiracss-interaction-properties.types.d.ts +9 -5
  40. package/dist/cjs/rules/spiracss-interaction-properties.types.d.ts.map +1 -1
  41. package/dist/cjs/rules/spiracss-interaction-scope.d.ts.map +1 -1
  42. package/dist/cjs/rules/spiracss-interaction-scope.js +21 -21
  43. package/dist/cjs/rules/spiracss-interaction-scope.js.map +1 -1
  44. package/dist/cjs/rules/spiracss-interaction-scope.messages.d.ts +4 -3
  45. package/dist/cjs/rules/spiracss-interaction-scope.messages.d.ts.map +1 -1
  46. package/dist/cjs/rules/spiracss-interaction-scope.messages.js +9 -11
  47. package/dist/cjs/rules/spiracss-interaction-scope.messages.js.map +1 -1
  48. package/dist/cjs/rules/spiracss-interaction-scope.options.d.ts.map +1 -1
  49. package/dist/cjs/rules/spiracss-interaction-scope.options.js +35 -41
  50. package/dist/cjs/rules/spiracss-interaction-scope.options.js.map +1 -1
  51. package/dist/cjs/rules/spiracss-interaction-scope.types.d.ts +14 -14
  52. package/dist/cjs/rules/spiracss-interaction-scope.types.d.ts.map +1 -1
  53. package/dist/cjs/rules/spiracss-interaction-scope.utils.d.ts.map +1 -1
  54. package/dist/cjs/rules/spiracss-interaction-scope.utils.js +31 -11
  55. package/dist/cjs/rules/spiracss-interaction-scope.utils.js.map +1 -1
  56. package/dist/cjs/rules/spiracss-keyframes-naming.d.ts.map +1 -1
  57. package/dist/cjs/rules/spiracss-keyframes-naming.js +31 -28
  58. package/dist/cjs/rules/spiracss-keyframes-naming.js.map +1 -1
  59. package/dist/cjs/rules/spiracss-keyframes-naming.messages.d.ts +6 -4
  60. package/dist/cjs/rules/spiracss-keyframes-naming.messages.d.ts.map +1 -1
  61. package/dist/cjs/rules/spiracss-keyframes-naming.messages.js +12 -25
  62. package/dist/cjs/rules/spiracss-keyframes-naming.messages.js.map +1 -1
  63. package/dist/cjs/rules/spiracss-keyframes-naming.options.d.ts.map +1 -1
  64. package/dist/cjs/rules/spiracss-keyframes-naming.options.js +46 -24
  65. package/dist/cjs/rules/spiracss-keyframes-naming.options.js.map +1 -1
  66. package/dist/cjs/rules/spiracss-keyframes-naming.types.d.ts +21 -11
  67. package/dist/cjs/rules/spiracss-keyframes-naming.types.d.ts.map +1 -1
  68. package/dist/cjs/rules/spiracss-page-layer.constants.d.ts +2 -0
  69. package/dist/cjs/rules/spiracss-page-layer.constants.d.ts.map +1 -0
  70. package/dist/cjs/rules/spiracss-page-layer.constants.js +5 -0
  71. package/dist/cjs/rules/spiracss-page-layer.constants.js.map +1 -0
  72. package/dist/cjs/rules/spiracss-page-layer.d.ts +5 -0
  73. package/dist/cjs/rules/spiracss-page-layer.d.ts.map +1 -0
  74. package/dist/cjs/rules/spiracss-page-layer.js +243 -0
  75. package/dist/cjs/rules/spiracss-page-layer.js.map +1 -0
  76. package/dist/cjs/rules/spiracss-page-layer.messages.d.ts +7 -0
  77. package/dist/cjs/rules/spiracss-page-layer.messages.d.ts.map +1 -0
  78. package/dist/cjs/rules/spiracss-page-layer.messages.js +15 -0
  79. package/dist/cjs/rules/spiracss-page-layer.messages.js.map +1 -0
  80. package/dist/cjs/rules/spiracss-page-layer.options.d.ts +4 -0
  81. package/dist/cjs/rules/spiracss-page-layer.options.d.ts.map +1 -0
  82. package/dist/cjs/rules/spiracss-page-layer.options.js +59 -0
  83. package/dist/cjs/rules/spiracss-page-layer.options.js.map +1 -0
  84. package/dist/cjs/rules/spiracss-page-layer.types.d.ts +19 -0
  85. package/dist/cjs/rules/spiracss-page-layer.types.d.ts.map +1 -0
  86. package/dist/cjs/rules/spiracss-page-layer.types.js +3 -0
  87. package/dist/cjs/rules/spiracss-page-layer.types.js.map +1 -0
  88. package/dist/cjs/rules/spiracss-property-placement.constants.d.ts +2 -0
  89. package/dist/cjs/rules/spiracss-property-placement.constants.d.ts.map +1 -0
  90. package/dist/cjs/rules/spiracss-property-placement.constants.js +5 -0
  91. package/dist/cjs/rules/spiracss-property-placement.constants.js.map +1 -0
  92. package/dist/cjs/rules/spiracss-property-placement.d.ts +5 -0
  93. package/dist/cjs/rules/spiracss-property-placement.d.ts.map +1 -0
  94. package/dist/cjs/rules/spiracss-property-placement.js +646 -0
  95. package/dist/cjs/rules/spiracss-property-placement.js.map +1 -0
  96. package/dist/cjs/rules/spiracss-property-placement.messages.d.ts +19 -0
  97. package/dist/cjs/rules/spiracss-property-placement.messages.d.ts.map +1 -0
  98. package/dist/cjs/rules/spiracss-property-placement.messages.js +110 -0
  99. package/dist/cjs/rules/spiracss-property-placement.messages.js.map +1 -0
  100. package/dist/cjs/rules/spiracss-property-placement.options.d.ts +4 -0
  101. package/dist/cjs/rules/spiracss-property-placement.options.d.ts.map +1 -0
  102. package/dist/cjs/rules/spiracss-property-placement.options.js +74 -0
  103. package/dist/cjs/rules/spiracss-property-placement.options.js.map +1 -0
  104. package/dist/cjs/rules/spiracss-property-placement.selectors.d.ts +41 -0
  105. package/dist/cjs/rules/spiracss-property-placement.selectors.d.ts.map +1 -0
  106. package/dist/cjs/rules/spiracss-property-placement.selectors.js +983 -0
  107. package/dist/cjs/rules/spiracss-property-placement.selectors.js.map +1 -0
  108. package/dist/cjs/rules/spiracss-property-placement.types.d.ts +28 -0
  109. package/dist/cjs/rules/spiracss-property-placement.types.d.ts.map +1 -0
  110. package/dist/cjs/rules/spiracss-property-placement.types.js +3 -0
  111. package/dist/cjs/rules/spiracss-property-placement.types.js.map +1 -0
  112. package/dist/cjs/rules/spiracss-property-placement.values.d.ts +19 -0
  113. package/dist/cjs/rules/spiracss-property-placement.values.d.ts.map +1 -0
  114. package/dist/cjs/rules/spiracss-property-placement.values.js +176 -0
  115. package/dist/cjs/rules/spiracss-property-placement.values.js.map +1 -0
  116. package/dist/cjs/rules/spiracss-pseudo-nesting.d.ts.map +1 -1
  117. package/dist/cjs/rules/spiracss-pseudo-nesting.js +18 -18
  118. package/dist/cjs/rules/spiracss-pseudo-nesting.js.map +1 -1
  119. package/dist/cjs/rules/spiracss-pseudo-nesting.messages.d.ts +6 -0
  120. package/dist/cjs/rules/spiracss-pseudo-nesting.messages.d.ts.map +1 -0
  121. package/dist/cjs/rules/spiracss-pseudo-nesting.messages.js +10 -0
  122. package/dist/cjs/rules/spiracss-pseudo-nesting.messages.js.map +1 -0
  123. package/dist/cjs/rules/spiracss-pseudo-nesting.types.d.ts +1 -1
  124. package/dist/cjs/rules/spiracss-pseudo-nesting.types.d.ts.map +1 -1
  125. package/dist/cjs/rules/spiracss-rel-comments.alias.d.ts.map +1 -1
  126. package/dist/cjs/rules/spiracss-rel-comments.alias.js +59 -11
  127. package/dist/cjs/rules/spiracss-rel-comments.alias.js.map +1 -1
  128. package/dist/cjs/rules/spiracss-rel-comments.d.ts.map +1 -1
  129. package/dist/cjs/rules/spiracss-rel-comments.js +123 -44
  130. package/dist/cjs/rules/spiracss-rel-comments.js.map +1 -1
  131. package/dist/cjs/rules/spiracss-rel-comments.messages.d.ts +6 -5
  132. package/dist/cjs/rules/spiracss-rel-comments.messages.d.ts.map +1 -1
  133. package/dist/cjs/rules/spiracss-rel-comments.messages.js +16 -12
  134. package/dist/cjs/rules/spiracss-rel-comments.messages.js.map +1 -1
  135. package/dist/cjs/rules/spiracss-rel-comments.options.d.ts.map +1 -1
  136. package/dist/cjs/rules/spiracss-rel-comments.options.js +84 -34
  137. package/dist/cjs/rules/spiracss-rel-comments.options.js.map +1 -1
  138. package/dist/cjs/rules/spiracss-rel-comments.selectors.d.ts.map +1 -1
  139. package/dist/cjs/rules/spiracss-rel-comments.selectors.js +4 -5
  140. package/dist/cjs/rules/spiracss-rel-comments.selectors.js.map +1 -1
  141. package/dist/cjs/rules/spiracss-rel-comments.types.d.ts +32 -16
  142. package/dist/cjs/rules/spiracss-rel-comments.types.d.ts.map +1 -1
  143. package/dist/cjs/types.d.ts +2 -0
  144. package/dist/cjs/types.d.ts.map +1 -1
  145. package/dist/cjs/utils/cache.d.ts +3 -0
  146. package/dist/cjs/utils/cache.d.ts.map +1 -1
  147. package/dist/cjs/utils/cache.js +30 -6
  148. package/dist/cjs/utils/cache.js.map +1 -1
  149. package/dist/cjs/utils/constants.d.ts +1 -0
  150. package/dist/cjs/utils/constants.d.ts.map +1 -1
  151. package/dist/cjs/utils/constants.js +14 -1
  152. package/dist/cjs/utils/constants.js.map +1 -1
  153. package/dist/cjs/utils/formatting.d.ts +5 -1
  154. package/dist/cjs/utils/formatting.d.ts.map +1 -1
  155. package/dist/cjs/utils/formatting.js +16 -7
  156. package/dist/cjs/utils/formatting.js.map +1 -1
  157. package/dist/cjs/utils/messages.d.ts +25 -0
  158. package/dist/cjs/utils/messages.d.ts.map +1 -0
  159. package/dist/cjs/utils/messages.js +174 -0
  160. package/dist/cjs/utils/messages.js.map +1 -0
  161. package/dist/cjs/utils/naming.d.ts +1 -2
  162. package/dist/cjs/utils/naming.d.ts.map +1 -1
  163. package/dist/cjs/utils/naming.js +1 -9
  164. package/dist/cjs/utils/naming.js.map +1 -1
  165. package/dist/cjs/utils/normalize.d.ts +1 -0
  166. package/dist/cjs/utils/normalize.d.ts.map +1 -1
  167. package/dist/cjs/utils/normalize.js +53 -8
  168. package/dist/cjs/utils/normalize.js.map +1 -1
  169. package/dist/cjs/utils/option-schema.d.ts +11 -8
  170. package/dist/cjs/utils/option-schema.d.ts.map +1 -1
  171. package/dist/cjs/utils/option-schema.js +12 -9
  172. package/dist/cjs/utils/option-schema.js.map +1 -1
  173. package/dist/cjs/utils/options.d.ts +34 -0
  174. package/dist/cjs/utils/options.d.ts.map +1 -0
  175. package/dist/cjs/utils/options.js +41 -0
  176. package/dist/cjs/utils/options.js.map +1 -0
  177. package/dist/cjs/utils/rule-docs.d.ts +2 -0
  178. package/dist/cjs/utils/rule-docs.d.ts.map +1 -0
  179. package/dist/cjs/utils/rule-docs.js +22 -0
  180. package/dist/cjs/utils/rule-docs.js.map +1 -0
  181. package/dist/cjs/utils/section.d.ts.map +1 -1
  182. package/dist/cjs/utils/section.js +32 -39
  183. package/dist/cjs/utils/section.js.map +1 -1
  184. package/dist/cjs/utils/selector-policy.d.ts +16 -0
  185. package/dist/cjs/utils/selector-policy.d.ts.map +1 -0
  186. package/dist/cjs/utils/selector-policy.js +57 -0
  187. package/dist/cjs/utils/selector-policy.js.map +1 -0
  188. package/dist/cjs/utils/selector.d.ts +4 -1
  189. package/dist/cjs/utils/selector.d.ts.map +1 -1
  190. package/dist/cjs/utils/selector.js +62 -37
  191. package/dist/cjs/utils/selector.js.map +1 -1
  192. package/dist/cjs/utils/stylelint.d.ts +0 -1
  193. package/dist/cjs/utils/stylelint.d.ts.map +1 -1
  194. package/dist/cjs/utils/stylelint.js +18 -4
  195. package/dist/cjs/utils/stylelint.js.map +1 -1
  196. package/dist/esm/helpers.d.ts +117 -34
  197. package/dist/esm/helpers.d.ts.map +1 -1
  198. package/dist/esm/helpers.js +297 -171
  199. package/dist/esm/helpers.js.map +1 -1
  200. package/dist/esm/index.d.ts.map +1 -1
  201. package/dist/esm/index.js +4 -0
  202. package/dist/esm/index.js.map +1 -1
  203. package/dist/esm/rules/spiracss-class-structure.d.ts.map +1 -1
  204. package/dist/esm/rules/spiracss-class-structure.js +101 -45
  205. package/dist/esm/rules/spiracss-class-structure.js.map +1 -1
  206. package/dist/esm/rules/spiracss-class-structure.messages.d.ts +10 -8
  207. package/dist/esm/rules/spiracss-class-structure.messages.d.ts.map +1 -1
  208. package/dist/esm/rules/spiracss-class-structure.messages.js +59 -23
  209. package/dist/esm/rules/spiracss-class-structure.messages.js.map +1 -1
  210. package/dist/esm/rules/spiracss-class-structure.options.d.ts.map +1 -1
  211. package/dist/esm/rules/spiracss-class-structure.options.js +73 -58
  212. package/dist/esm/rules/spiracss-class-structure.options.js.map +1 -1
  213. package/dist/esm/rules/spiracss-class-structure.patterns.d.ts +4 -4
  214. package/dist/esm/rules/spiracss-class-structure.patterns.d.ts.map +1 -1
  215. package/dist/esm/rules/spiracss-class-structure.patterns.js +25 -28
  216. package/dist/esm/rules/spiracss-class-structure.patterns.js.map +1 -1
  217. package/dist/esm/rules/spiracss-class-structure.selectors.d.ts +3 -4
  218. package/dist/esm/rules/spiracss-class-structure.selectors.d.ts.map +1 -1
  219. package/dist/esm/rules/spiracss-class-structure.selectors.js +34 -59
  220. package/dist/esm/rules/spiracss-class-structure.selectors.js.map +1 -1
  221. package/dist/esm/rules/spiracss-class-structure.types.d.ts +32 -12
  222. package/dist/esm/rules/spiracss-class-structure.types.d.ts.map +1 -1
  223. package/dist/esm/rules/spiracss-interaction-properties.d.ts.map +1 -1
  224. package/dist/esm/rules/spiracss-interaction-properties.js +203 -112
  225. package/dist/esm/rules/spiracss-interaction-properties.js.map +1 -1
  226. package/dist/esm/rules/spiracss-interaction-properties.messages.d.ts +4 -3
  227. package/dist/esm/rules/spiracss-interaction-properties.messages.d.ts.map +1 -1
  228. package/dist/esm/rules/spiracss-interaction-properties.messages.js +11 -9
  229. package/dist/esm/rules/spiracss-interaction-properties.messages.js.map +1 -1
  230. package/dist/esm/rules/spiracss-interaction-properties.options.d.ts.map +1 -1
  231. package/dist/esm/rules/spiracss-interaction-properties.options.js +13 -15
  232. package/dist/esm/rules/spiracss-interaction-properties.options.js.map +1 -1
  233. package/dist/esm/rules/spiracss-interaction-properties.types.d.ts +9 -5
  234. package/dist/esm/rules/spiracss-interaction-properties.types.d.ts.map +1 -1
  235. package/dist/esm/rules/spiracss-interaction-scope.d.ts.map +1 -1
  236. package/dist/esm/rules/spiracss-interaction-scope.js +22 -22
  237. package/dist/esm/rules/spiracss-interaction-scope.js.map +1 -1
  238. package/dist/esm/rules/spiracss-interaction-scope.messages.d.ts +4 -3
  239. package/dist/esm/rules/spiracss-interaction-scope.messages.d.ts.map +1 -1
  240. package/dist/esm/rules/spiracss-interaction-scope.messages.js +9 -8
  241. package/dist/esm/rules/spiracss-interaction-scope.messages.js.map +1 -1
  242. package/dist/esm/rules/spiracss-interaction-scope.options.d.ts.map +1 -1
  243. package/dist/esm/rules/spiracss-interaction-scope.options.js +37 -43
  244. package/dist/esm/rules/spiracss-interaction-scope.options.js.map +1 -1
  245. package/dist/esm/rules/spiracss-interaction-scope.types.d.ts +14 -14
  246. package/dist/esm/rules/spiracss-interaction-scope.types.d.ts.map +1 -1
  247. package/dist/esm/rules/spiracss-interaction-scope.utils.d.ts.map +1 -1
  248. package/dist/esm/rules/spiracss-interaction-scope.utils.js +31 -11
  249. package/dist/esm/rules/spiracss-interaction-scope.utils.js.map +1 -1
  250. package/dist/esm/rules/spiracss-keyframes-naming.d.ts.map +1 -1
  251. package/dist/esm/rules/spiracss-keyframes-naming.js +32 -29
  252. package/dist/esm/rules/spiracss-keyframes-naming.js.map +1 -1
  253. package/dist/esm/rules/spiracss-keyframes-naming.messages.d.ts +6 -4
  254. package/dist/esm/rules/spiracss-keyframes-naming.messages.d.ts.map +1 -1
  255. package/dist/esm/rules/spiracss-keyframes-naming.messages.js +12 -22
  256. package/dist/esm/rules/spiracss-keyframes-naming.messages.js.map +1 -1
  257. package/dist/esm/rules/spiracss-keyframes-naming.options.d.ts.map +1 -1
  258. package/dist/esm/rules/spiracss-keyframes-naming.options.js +47 -25
  259. package/dist/esm/rules/spiracss-keyframes-naming.options.js.map +1 -1
  260. package/dist/esm/rules/spiracss-keyframes-naming.types.d.ts +21 -11
  261. package/dist/esm/rules/spiracss-keyframes-naming.types.d.ts.map +1 -1
  262. package/dist/esm/rules/spiracss-page-layer.constants.d.ts +2 -0
  263. package/dist/esm/rules/spiracss-page-layer.constants.d.ts.map +1 -0
  264. package/dist/esm/rules/spiracss-page-layer.constants.js +2 -0
  265. package/dist/esm/rules/spiracss-page-layer.constants.js.map +1 -0
  266. package/dist/esm/rules/spiracss-page-layer.d.ts +5 -0
  267. package/dist/esm/rules/spiracss-page-layer.d.ts.map +1 -0
  268. package/dist/esm/rules/spiracss-page-layer.js +237 -0
  269. package/dist/esm/rules/spiracss-page-layer.js.map +1 -0
  270. package/dist/esm/rules/spiracss-page-layer.messages.d.ts +7 -0
  271. package/dist/esm/rules/spiracss-page-layer.messages.d.ts.map +1 -0
  272. package/dist/esm/rules/spiracss-page-layer.messages.js +12 -0
  273. package/dist/esm/rules/spiracss-page-layer.messages.js.map +1 -0
  274. package/dist/esm/rules/spiracss-page-layer.options.d.ts +4 -0
  275. package/dist/esm/rules/spiracss-page-layer.options.d.ts.map +1 -0
  276. package/dist/esm/rules/spiracss-page-layer.options.js +55 -0
  277. package/dist/esm/rules/spiracss-page-layer.options.js.map +1 -0
  278. package/dist/esm/rules/spiracss-page-layer.types.d.ts +19 -0
  279. package/dist/esm/rules/spiracss-page-layer.types.d.ts.map +1 -0
  280. package/dist/esm/rules/spiracss-page-layer.types.js +2 -0
  281. package/dist/esm/rules/spiracss-page-layer.types.js.map +1 -0
  282. package/dist/esm/rules/spiracss-property-placement.constants.d.ts +2 -0
  283. package/dist/esm/rules/spiracss-property-placement.constants.d.ts.map +1 -0
  284. package/dist/esm/rules/spiracss-property-placement.constants.js +2 -0
  285. package/dist/esm/rules/spiracss-property-placement.constants.js.map +1 -0
  286. package/dist/esm/rules/spiracss-property-placement.d.ts +5 -0
  287. package/dist/esm/rules/spiracss-property-placement.d.ts.map +1 -0
  288. package/dist/esm/rules/spiracss-property-placement.js +640 -0
  289. package/dist/esm/rules/spiracss-property-placement.js.map +1 -0
  290. package/dist/esm/rules/spiracss-property-placement.messages.d.ts +19 -0
  291. package/dist/esm/rules/spiracss-property-placement.messages.d.ts.map +1 -0
  292. package/dist/esm/rules/spiracss-property-placement.messages.js +107 -0
  293. package/dist/esm/rules/spiracss-property-placement.messages.js.map +1 -0
  294. package/dist/esm/rules/spiracss-property-placement.options.d.ts +4 -0
  295. package/dist/esm/rules/spiracss-property-placement.options.d.ts.map +1 -0
  296. package/dist/esm/rules/spiracss-property-placement.options.js +70 -0
  297. package/dist/esm/rules/spiracss-property-placement.options.js.map +1 -0
  298. package/dist/esm/rules/spiracss-property-placement.selectors.d.ts +41 -0
  299. package/dist/esm/rules/spiracss-property-placement.selectors.d.ts.map +1 -0
  300. package/dist/esm/rules/spiracss-property-placement.selectors.js +970 -0
  301. package/dist/esm/rules/spiracss-property-placement.selectors.js.map +1 -0
  302. package/dist/esm/rules/spiracss-property-placement.types.d.ts +28 -0
  303. package/dist/esm/rules/spiracss-property-placement.types.d.ts.map +1 -0
  304. package/dist/esm/rules/spiracss-property-placement.types.js +2 -0
  305. package/dist/esm/rules/spiracss-property-placement.types.js.map +1 -0
  306. package/dist/esm/rules/spiracss-property-placement.values.d.ts +19 -0
  307. package/dist/esm/rules/spiracss-property-placement.values.d.ts.map +1 -0
  308. package/dist/esm/rules/spiracss-property-placement.values.js +169 -0
  309. package/dist/esm/rules/spiracss-property-placement.values.js.map +1 -0
  310. package/dist/esm/rules/spiracss-pseudo-nesting.d.ts.map +1 -1
  311. package/dist/esm/rules/spiracss-pseudo-nesting.js +18 -18
  312. package/dist/esm/rules/spiracss-pseudo-nesting.js.map +1 -1
  313. package/dist/esm/rules/spiracss-pseudo-nesting.messages.d.ts +6 -0
  314. package/dist/esm/rules/spiracss-pseudo-nesting.messages.d.ts.map +1 -0
  315. package/dist/esm/rules/spiracss-pseudo-nesting.messages.js +7 -0
  316. package/dist/esm/rules/spiracss-pseudo-nesting.messages.js.map +1 -0
  317. package/dist/esm/rules/spiracss-pseudo-nesting.types.d.ts +1 -1
  318. package/dist/esm/rules/spiracss-pseudo-nesting.types.d.ts.map +1 -1
  319. package/dist/esm/rules/spiracss-rel-comments.alias.d.ts.map +1 -1
  320. package/dist/esm/rules/spiracss-rel-comments.alias.js +59 -11
  321. package/dist/esm/rules/spiracss-rel-comments.alias.js.map +1 -1
  322. package/dist/esm/rules/spiracss-rel-comments.d.ts.map +1 -1
  323. package/dist/esm/rules/spiracss-rel-comments.js +127 -48
  324. package/dist/esm/rules/spiracss-rel-comments.js.map +1 -1
  325. package/dist/esm/rules/spiracss-rel-comments.messages.d.ts +6 -5
  326. package/dist/esm/rules/spiracss-rel-comments.messages.d.ts.map +1 -1
  327. package/dist/esm/rules/spiracss-rel-comments.messages.js +16 -9
  328. package/dist/esm/rules/spiracss-rel-comments.messages.js.map +1 -1
  329. package/dist/esm/rules/spiracss-rel-comments.options.d.ts.map +1 -1
  330. package/dist/esm/rules/spiracss-rel-comments.options.js +86 -36
  331. package/dist/esm/rules/spiracss-rel-comments.options.js.map +1 -1
  332. package/dist/esm/rules/spiracss-rel-comments.selectors.d.ts.map +1 -1
  333. package/dist/esm/rules/spiracss-rel-comments.selectors.js +4 -5
  334. package/dist/esm/rules/spiracss-rel-comments.selectors.js.map +1 -1
  335. package/dist/esm/rules/spiracss-rel-comments.types.d.ts +32 -16
  336. package/dist/esm/rules/spiracss-rel-comments.types.d.ts.map +1 -1
  337. package/dist/esm/types.d.ts +2 -0
  338. package/dist/esm/types.d.ts.map +1 -1
  339. package/dist/esm/utils/cache.d.ts +3 -0
  340. package/dist/esm/utils/cache.d.ts.map +1 -1
  341. package/dist/esm/utils/cache.js +27 -5
  342. package/dist/esm/utils/cache.js.map +1 -1
  343. package/dist/esm/utils/constants.d.ts +1 -0
  344. package/dist/esm/utils/constants.d.ts.map +1 -1
  345. package/dist/esm/utils/constants.js +13 -0
  346. package/dist/esm/utils/constants.js.map +1 -1
  347. package/dist/esm/utils/formatting.d.ts +5 -1
  348. package/dist/esm/utils/formatting.d.ts.map +1 -1
  349. package/dist/esm/utils/formatting.js +14 -6
  350. package/dist/esm/utils/formatting.js.map +1 -1
  351. package/dist/esm/utils/messages.d.ts +25 -0
  352. package/dist/esm/utils/messages.d.ts.map +1 -0
  353. package/dist/esm/utils/messages.js +160 -0
  354. package/dist/esm/utils/messages.js.map +1 -0
  355. package/dist/esm/utils/naming.d.ts +1 -2
  356. package/dist/esm/utils/naming.d.ts.map +1 -1
  357. package/dist/esm/utils/naming.js +2 -10
  358. package/dist/esm/utils/naming.js.map +1 -1
  359. package/dist/esm/utils/normalize.d.ts +1 -0
  360. package/dist/esm/utils/normalize.d.ts.map +1 -1
  361. package/dist/esm/utils/normalize.js +51 -7
  362. package/dist/esm/utils/normalize.js.map +1 -1
  363. package/dist/esm/utils/option-schema.d.ts +11 -8
  364. package/dist/esm/utils/option-schema.d.ts.map +1 -1
  365. package/dist/esm/utils/option-schema.js +12 -9
  366. package/dist/esm/utils/option-schema.js.map +1 -1
  367. package/dist/esm/utils/options.d.ts +34 -0
  368. package/dist/esm/utils/options.d.ts.map +1 -0
  369. package/dist/esm/utils/options.js +36 -0
  370. package/dist/esm/utils/options.js.map +1 -0
  371. package/dist/esm/utils/rule-docs.d.ts +2 -0
  372. package/dist/esm/utils/rule-docs.d.ts.map +1 -0
  373. package/dist/esm/utils/rule-docs.js +18 -0
  374. package/dist/esm/utils/rule-docs.js.map +1 -0
  375. package/dist/esm/utils/section.d.ts.map +1 -1
  376. package/dist/esm/utils/section.js +31 -38
  377. package/dist/esm/utils/section.js.map +1 -1
  378. package/dist/esm/utils/selector-policy.d.ts +16 -0
  379. package/dist/esm/utils/selector-policy.d.ts.map +1 -0
  380. package/dist/esm/utils/selector-policy.js +51 -0
  381. package/dist/esm/utils/selector-policy.js.map +1 -0
  382. package/dist/esm/utils/selector.d.ts +4 -1
  383. package/dist/esm/utils/selector.d.ts.map +1 -1
  384. package/dist/esm/utils/selector.js +59 -36
  385. package/dist/esm/utils/selector.js.map +1 -1
  386. package/dist/esm/utils/stylelint.d.ts +0 -1
  387. package/dist/esm/utils/stylelint.d.ts.map +1 -1
  388. package/dist/esm/utils/stylelint.js +17 -2
  389. package/dist/esm/utils/stylelint.js.map +1 -1
  390. package/package.json +6 -5
@@ -3,41 +3,54 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.normalizeOptions = void 0;
4
4
  const cache_1 = require("../utils/cache");
5
5
  const normalize_1 = require("../utils/normalize");
6
+ const options_1 = require("../utils/options");
7
+ const selector_policy_1 = require("../utils/selector-policy");
6
8
  const defaultValueNaming = {
7
9
  case: 'kebab',
8
10
  maxWords: 2
9
11
  };
12
+ const baseSelectorPolicy = (0, selector_policy_1.createDefaultSelectorPolicyBase)();
10
13
  const defaultSelectorPolicy = {
11
14
  valueNaming: defaultValueNaming,
12
15
  variant: {
13
- mode: 'data',
14
- dataKeys: ['data-variant'],
16
+ ...baseSelectorPolicy.variant,
15
17
  valueNaming: defaultValueNaming
16
18
  },
17
19
  state: {
18
- mode: 'data',
19
- dataKey: 'data-state',
20
- ariaKeys: ['aria-expanded', 'aria-selected', 'aria-disabled'],
20
+ ...baseSelectorPolicy.state,
21
21
  valueNaming: defaultValueNaming
22
22
  }
23
23
  };
24
24
  const ERROR_PREFIX = '[spiracss]';
25
25
  const defaultOptions = {
26
- // SpiraCSS recommends up to ~4 levels, so default to 4.
27
- allowElementChainDepth: 4,
28
- allowExternalClasses: [],
29
- allowExternalPrefixes: [],
30
- enforceChildCombinator: true,
31
- enforceSingleRootBlock: true,
32
- enforceRootFileName: true,
33
- rootFileCase: 'preserve',
34
- childScssDir: 'scss',
35
- componentsDirs: ['components'],
26
+ element: {
27
+ // SpiraCSS recommends up to ~4 levels, so default to 4.
28
+ depth: 4
29
+ },
30
+ external: {
31
+ classes: [],
32
+ prefixes: []
33
+ },
34
+ child: {
35
+ combinator: true,
36
+ nesting: true
37
+ },
38
+ root: {
39
+ single: true,
40
+ file: true,
41
+ case: 'preserve'
42
+ },
43
+ paths: {
44
+ childDir: 'scss',
45
+ components: ['components']
46
+ },
36
47
  naming: undefined,
37
- sharedCommentPattern: /--shared/i,
38
- interactionCommentPattern: /--interaction/i,
48
+ comments: {
49
+ shared: /--shared/i,
50
+ interaction: /--interaction/i
51
+ },
39
52
  selectorPolicy: defaultSelectorPolicy,
40
- cacheSizes: cache_1.DEFAULT_CACHE_SIZES
53
+ cache: cache_1.DEFAULT_CACHE_SIZES
41
54
  };
42
55
  const isWordCase = (value) => value === 'kebab' || value === 'snake' || value === 'camel' || value === 'pascal';
43
56
  const normalizeFileNameCase = (value, fallback) => {
@@ -47,24 +60,30 @@ const normalizeFileNameCase = (value, fallback) => {
47
60
  return value;
48
61
  return fallback;
49
62
  };
50
- const normalizeValueNaming = (raw, fallback, fieldName) => {
63
+ const normalizeValueNaming = (raw, fallback, fieldName, reportInvalid) => {
51
64
  if (!raw || typeof raw !== 'object')
52
65
  return { ...fallback };
53
66
  const value = raw;
54
- if (value.case !== undefined && !isWordCase(value.case)) {
55
- throw new Error(`${ERROR_PREFIX} ${fieldName}.case must be "kebab" | "snake" | "camel" | "pascal".`);
67
+ const normalized = { ...fallback };
68
+ if (value.case !== undefined) {
69
+ if (!isWordCase(value.case)) {
70
+ reportInvalid?.(`${fieldName}.case`, value.case, `${ERROR_PREFIX} ${fieldName}.case must be "kebab" | "snake" | "camel" | "pascal".`);
71
+ }
72
+ else {
73
+ normalized.case = value.case;
74
+ }
56
75
  }
57
76
  if (value.maxWords !== undefined) {
58
77
  if (typeof value.maxWords !== 'number' ||
59
78
  !Number.isInteger(value.maxWords) ||
60
79
  value.maxWords < 1) {
61
- throw new Error(`${ERROR_PREFIX} ${fieldName}.maxWords must be a positive integer.`);
80
+ reportInvalid?.(`${fieldName}.maxWords`, value.maxWords, `${ERROR_PREFIX} ${fieldName}.maxWords must be a positive integer.`);
81
+ }
82
+ else {
83
+ normalized.maxWords = value.maxWords;
62
84
  }
63
85
  }
64
- return {
65
- case: value.case ?? fallback.case,
66
- maxWords: value.maxWords ?? fallback.maxWords
67
- };
86
+ return normalized;
68
87
  };
69
88
  const normalizeSelectorPolicy = (raw, reportInvalid) => {
70
89
  const defaults = {
@@ -78,13 +97,13 @@ const normalizeSelectorPolicy = (raw, reportInvalid) => {
78
97
  ariaKeys: defaultSelectorPolicy.state.ariaKeys
79
98
  }
80
99
  };
81
- const base = (0, normalize_1.normalizeSelectorPolicyBase)(raw, defaults, reportInvalid);
100
+ const base = (0, normalize_1.safeNormalizeSelectorPolicyBase)(raw, defaults, reportInvalid);
82
101
  const policy = (raw && typeof raw === 'object' ? raw : {});
83
102
  const variant = policy.variant || {};
84
103
  const state = policy.state || {};
85
- const baseValueNaming = normalizeValueNaming(policy.valueNaming, defaultSelectorPolicy.valueNaming, 'selectorPolicy.valueNaming');
86
- const variantValueNaming = normalizeValueNaming(variant.valueNaming, baseValueNaming, 'selectorPolicy.variant.valueNaming');
87
- const stateValueNaming = normalizeValueNaming(state.valueNaming, baseValueNaming, 'selectorPolicy.state.valueNaming');
104
+ const baseValueNaming = normalizeValueNaming(policy.valueNaming, defaultSelectorPolicy.valueNaming, 'selectorPolicy.valueNaming', reportInvalid);
105
+ const variantValueNaming = normalizeValueNaming(variant.valueNaming, baseValueNaming, 'selectorPolicy.variant.valueNaming', reportInvalid);
106
+ const stateValueNaming = normalizeValueNaming(state.valueNaming, baseValueNaming, 'selectorPolicy.state.valueNaming', reportInvalid);
88
107
  return {
89
108
  valueNaming: baseValueNaming,
90
109
  variant: {
@@ -104,34 +123,30 @@ const normalizeOptions = (raw, reportInvalid) => {
104
123
  if (!raw || typeof raw !== 'object')
105
124
  return { ...defaultOptions };
106
125
  const opt = raw;
126
+ const selectorPolicy = opt.selectorPolicy;
107
127
  const safeNormalizeKeyList = (value, fallback, fieldName) => (0, normalize_1.normalizeKeyList)(value, fallback, fieldName, reportInvalid);
108
- const safeNormalizeSelectorPolicy = (value) => {
109
- try {
110
- return normalizeSelectorPolicy(value, reportInvalid);
111
- }
112
- catch (error) {
113
- const detail = error instanceof Error ? error.message : String(error);
114
- reportInvalid?.('selectorPolicy', value, detail);
115
- return { ...defaultOptions.selectorPolicy };
116
- }
117
- };
128
+ const common = (0, options_1.normalizeCommonOptions)(opt, (0, options_1.pickCommonDefaults)(defaultOptions), reportInvalid);
118
129
  return {
119
- allowElementChainDepth: typeof opt.allowElementChainDepth === 'number'
120
- ? opt.allowElementChainDepth
121
- : defaultOptions.allowElementChainDepth,
122
- allowExternalClasses: (0, normalize_1.normalizeStringArray)(opt.allowExternalClasses, defaultOptions.allowExternalClasses),
123
- allowExternalPrefixes: (0, normalize_1.normalizeStringArray)(opt.allowExternalPrefixes, defaultOptions.allowExternalPrefixes),
124
- enforceChildCombinator: (0, normalize_1.normalizeBoolean)(opt.enforceChildCombinator, defaultOptions.enforceChildCombinator),
125
- enforceSingleRootBlock: (0, normalize_1.normalizeBoolean)(opt.enforceSingleRootBlock, defaultOptions.enforceSingleRootBlock),
126
- enforceRootFileName: (0, normalize_1.normalizeBoolean)(opt.enforceRootFileName, defaultOptions.enforceRootFileName),
127
- rootFileCase: normalizeFileNameCase(opt.rootFileCase, defaultOptions.rootFileCase),
128
- childScssDir: (0, normalize_1.normalizeString)(opt.childScssDir, defaultOptions.childScssDir),
129
- componentsDirs: safeNormalizeKeyList(opt.componentsDirs, defaultOptions.componentsDirs, 'componentsDirs'),
130
- naming: opt.naming || defaultOptions.naming,
131
- sharedCommentPattern: (0, normalize_1.normalizeCommentPattern)(opt.sharedCommentPattern, defaultOptions.sharedCommentPattern, 'sharedCommentPattern', reportInvalid),
132
- interactionCommentPattern: (0, normalize_1.normalizeCommentPattern)(opt.interactionCommentPattern, defaultOptions.interactionCommentPattern, 'interactionCommentPattern', reportInvalid),
133
- selectorPolicy: safeNormalizeSelectorPolicy(opt.selectorPolicy),
134
- cacheSizes: (0, cache_1.normalizeCacheSizes)(opt.cacheSizes, reportInvalid)
130
+ element: {
131
+ depth: typeof opt.elementDepth === 'number'
132
+ ? opt.elementDepth
133
+ : defaultOptions.element.depth
134
+ },
135
+ child: {
136
+ combinator: (0, normalize_1.normalizeBoolean)(opt.childCombinator, defaultOptions.child.combinator),
137
+ nesting: (0, normalize_1.normalizeBoolean)(opt.childNesting, defaultOptions.child.nesting)
138
+ },
139
+ root: {
140
+ single: (0, normalize_1.normalizeBoolean)(opt.rootSingle, defaultOptions.root.single),
141
+ file: (0, normalize_1.normalizeBoolean)(opt.rootFile, defaultOptions.root.file),
142
+ case: normalizeFileNameCase(opt.rootCase, defaultOptions.root.case)
143
+ },
144
+ paths: {
145
+ childDir: (0, normalize_1.normalizeString)(opt.childDir, defaultOptions.paths.childDir),
146
+ components: safeNormalizeKeyList(opt.componentsDirs, defaultOptions.paths.components, 'componentsDirs')
147
+ },
148
+ selectorPolicy: normalizeSelectorPolicy(selectorPolicy, reportInvalid),
149
+ ...common
135
150
  };
136
151
  };
137
152
  exports.normalizeOptions = normalizeOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"spiracss-class-structure.options.js","sourceRoot":"","sources":["../../../src/rules/spiracss-class-structure.options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spiracss-class-structure.options.js","sourceRoot":"","sources":["../../../src/rules/spiracss-class-structure.options.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import type { NormalizedCacheSizes } from '../types';
2
2
  import type { InvalidOptionReporter } from '../utils/normalize';
3
- import type { Kind, NormalizedSelectorPolicy, Options, Patterns, SelectorPolicyData } from './spiracss-class-structure.types';
4
- type NamingHintOptions = Pick<Options, 'naming'>;
3
+ import type { ClassifyOptions, Kind, NormalizedSelectorPolicy, Patterns, SelectorPolicyData } from './spiracss-class-structure.types';
4
+ type NamingHintOptions = Pick<ClassifyOptions, 'naming'>;
5
5
  export declare const formatNamingHint: (options: NamingHintOptions) => string;
6
- export declare const buildPatterns: (options: Options, cacheSizes?: NormalizedCacheSizes, reportInvalid?: InvalidOptionReporter) => Patterns;
6
+ export declare const buildPatterns: (options: ClassifyOptions, cacheSizes: NormalizedCacheSizes, reportInvalid?: InvalidOptionReporter) => Patterns;
7
7
  export declare const buildSelectorPolicyData: (policy: NormalizedSelectorPolicy) => SelectorPolicyData;
8
8
  /**
9
9
  * Classifies a class name using SpiraCSS patterns and external class allowances.
@@ -12,6 +12,6 @@ export declare const buildSelectorPolicyData: (policy: NormalizedSelectorPolicy)
12
12
  * @param patterns - Compiled naming patterns for Block/Element/Modifier.
13
13
  * @returns Classification kind for the class name.
14
14
  */
15
- export declare const classify: (name: string, options: Options, patterns: Patterns) => Kind;
15
+ export declare const classify: (name: string, options: ClassifyOptions, patterns: Patterns) => Kind;
16
16
  export {};
17
17
  //# sourceMappingURL=spiracss-class-structure.patterns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spiracss-class-structure.patterns.d.ts","sourceRoot":"","sources":["../../../src/rules/spiracss-class-structure.patterns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAY,MAAM,UAAU,CAAA;AAO9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,KAAK,EACV,IAAI,EACJ,wBAAwB,EACxB,OAAO,EACP,QAAQ,EACR,kBAAkB,EAEnB,MAAM,kCAAkC,CAAA;AAEzC,KAAK,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAgDhD,eAAO,MAAM,gBAAgB,GAAI,SAAS,iBAAiB,KAAG,MAiC7D,CAAA;AAED,eAAO,MAAM,aAAa,GACxB,SAAS,OAAO,EAChB,aAAa,oBAAoB,EACjC,gBAAgB,qBAAqB,KACpC,QAwGF,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,QAAQ,wBAAwB,KAC/B,kBAMD,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,EAAE,SAAS,OAAO,EAAE,UAAU,QAAQ,KAAG,IAS7E,CAAA"}
1
+ {"version":3,"file":"spiracss-class-structure.patterns.d.ts","sourceRoot":"","sources":["../../../src/rules/spiracss-class-structure.patterns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAY,MAAM,UAAU,CAAA;AAQ9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,KAAK,EACV,eAAe,EACf,IAAI,EACJ,wBAAwB,EACxB,QAAQ,EACR,kBAAkB,EAEnB,MAAM,kCAAkC,CAAA;AAEzC,KAAK,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;AA2CxD,eAAO,MAAM,gBAAgB,GAAI,SAAS,iBAAiB,KAAG,MAkC7D,CAAA;AAED,eAAO,MAAM,aAAa,GACxB,SAAS,eAAe,EACxB,YAAY,oBAAoB,EAChC,gBAAgB,qBAAqB,KACpC,QAwGF,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,QAAQ,wBAAwB,KAC/B,kBAMD,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GACnB,MAAM,MAAM,EACZ,SAAS,eAAe,EACxB,UAAU,QAAQ,KACjB,IASF,CAAA"}
@@ -3,16 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.classify = exports.buildSelectorPolicyData = exports.buildPatterns = exports.formatNamingHint = void 0;
4
4
  const cache_1 = require("../utils/cache");
5
5
  const naming_1 = require("../utils/naming");
6
+ const messages_1 = require("../utils/messages");
6
7
  const serializePattern = (pattern) => pattern ? `${pattern.source}/${pattern.flags}` : '';
7
- const patternsCaches = new Map();
8
- const getPatternsCache = (maxSize) => {
9
- const cached = patternsCaches.get(maxSize);
10
- if (cached)
11
- return cached;
12
- const created = (0, cache_1.createLruCache)(maxSize);
13
- patternsCaches.set(maxSize, created);
14
- return created;
15
- };
8
+ const normalizeWordCase = (value, fallback) => value === 'kebab' || value === 'snake' || value === 'camel' || value === 'pascal'
9
+ ? value
10
+ : fallback;
11
+ const getPatternsCache = (0, cache_1.createSharedCacheAccessor)();
16
12
  const buildValuePattern = (naming) => {
17
13
  const maxWords = naming.maxWords;
18
14
  switch (naming.case) {
@@ -45,37 +41,38 @@ const buildValuePattern = (naming) => {
45
41
  };
46
42
  const formatNamingHint = (options) => {
47
43
  const naming = options?.naming || {};
48
- const blockCase = naming.blockCase || 'kebab';
49
- const elementCase = naming.elementCase || 'kebab';
50
- const modifierCase = naming.modifierCase || 'kebab';
44
+ const blockCase = normalizeWordCase(naming.blockCase, 'kebab');
45
+ const elementCase = normalizeWordCase(naming.elementCase, 'kebab');
46
+ const modifierCase = normalizeWordCase(naming.modifierCase, 'kebab');
51
47
  const modifierPrefix = naming.modifierPrefix ?? '-';
48
+ const prefixLabel = modifierPrefix === '' ? '(none)' : modifierPrefix;
52
49
  const blockMaxWords = (0, naming_1.normalizeBlockMaxWords)(naming.blockMaxWords);
53
50
  const parts = [
54
- `blockCase=${blockCase}`,
55
- `blockMaxWords=${blockMaxWords}`,
56
- `elementCase=${elementCase}`,
57
- `modifierCase=${modifierCase}`,
58
- `modifierPrefix="${modifierPrefix}"`
51
+ `blockCase=${(0, messages_1.formatCode)(blockCase)}`,
52
+ `blockMaxWords=${(0, messages_1.formatCode)(String(blockMaxWords))}`,
53
+ `elementCase=${(0, messages_1.formatCode)(elementCase)}`,
54
+ `modifierCase=${(0, messages_1.formatCode)(modifierCase)}`,
55
+ `modifierPrefix=${(0, messages_1.formatCode)(prefixLabel)}`
59
56
  ];
60
57
  const customParts = [];
61
58
  const customBlock = (0, naming_1.normalizeCustomPattern)(naming.customPatterns?.block, 'naming.customPatterns.block');
62
59
  const customElement = (0, naming_1.normalizeCustomPattern)(naming.customPatterns?.element, 'naming.customPatterns.element');
63
60
  const customModifier = (0, naming_1.normalizeCustomPattern)(naming.customPatterns?.modifier, 'naming.customPatterns.modifier');
64
61
  if (customBlock)
65
- customParts.push(`block=${customBlock}`);
62
+ customParts.push(`block=${(0, messages_1.formatPattern)(customBlock)}`);
66
63
  if (customElement)
67
- customParts.push(`element=${customElement}`);
64
+ customParts.push(`element=${(0, messages_1.formatPattern)(customElement)}`);
68
65
  if (customModifier)
69
- customParts.push(`modifier=${customModifier}`);
66
+ customParts.push(`modifier=${(0, messages_1.formatPattern)(customModifier)}`);
70
67
  const customHint = customParts.length > 0 ? ` Custom patterns: ${customParts.join(', ')}.` : '';
71
68
  return `Naming: ${parts.join(', ')}.${customHint}`;
72
69
  };
73
70
  exports.formatNamingHint = formatNamingHint;
74
71
  const buildPatterns = (options, cacheSizes, reportInvalid) => {
75
72
  const naming = options.naming || {};
76
- const blockCase = naming.blockCase || 'kebab';
77
- const elementCase = naming.elementCase || 'kebab';
78
- const modifierCase = naming.modifierCase || 'kebab';
73
+ const blockCase = normalizeWordCase(naming.blockCase, 'kebab');
74
+ const elementCase = normalizeWordCase(naming.elementCase, 'kebab');
75
+ const modifierCase = normalizeWordCase(naming.modifierCase, 'kebab');
79
76
  const modifierPrefix = naming.modifierPrefix ?? '-';
80
77
  const blockMaxWords = (0, naming_1.normalizeBlockMaxWords)(naming.blockMaxWords);
81
78
  // Support partial customPatterns overrides (only specified ones replace defaults).
@@ -92,11 +89,11 @@ const buildPatterns = (options, cacheSizes, reportInvalid) => {
92
89
  serializePattern(customElement),
93
90
  serializePattern(customModifier)
94
91
  ].join('|');
95
- const patternsCache = getPatternsCache(cacheSizes?.patterns ?? cache_1.DEFAULT_CACHE_SIZE);
92
+ const patternsCache = getPatternsCache(cacheSizes.patterns);
96
93
  const cached = patternsCache.get(cacheKey);
97
94
  if (cached)
98
95
  return cached;
99
- const blockRe = (0, naming_1.buildBlockPattern)(naming, cacheSizes?.naming ?? cache_1.DEFAULT_CACHE_SIZE, reportInvalid, {
96
+ const blockRe = (0, naming_1.buildBlockPattern)(naming, cacheSizes.naming, reportInvalid, {
100
97
  customBlock,
101
98
  skipCustomPatternValidation: true
102
99
  });
@@ -171,8 +168,8 @@ exports.buildSelectorPolicyData = buildSelectorPolicyData;
171
168
  * @returns Classification kind for the class name.
172
169
  */
173
170
  const classify = (name, options, patterns) => {
174
- const { allowExternalClasses, allowExternalPrefixes } = options;
175
- if (allowExternalClasses.includes(name) || allowExternalPrefixes.some((p) => name.startsWith(p))) {
171
+ const external = options.external;
172
+ if (external.classes.includes(name) || external.prefixes.some((p) => name.startsWith(p))) {
176
173
  return 'external';
177
174
  }
178
175
  if (patterns.modifierRe.test(name))
@@ -1 +1 @@
1
- {"version":3,"file":"spiracss-class-structure.patterns.js","sourceRoot":"","sources":["../../../src/rules/spiracss-class-structure.patterns.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spiracss-class-structure.patterns.js","sourceRoot":"","sources":["../../../src/rules/spiracss-class-structure.patterns.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
- import type { Node as PostcssNode, Rule } from 'postcss';
2
1
  import type { Selector } from 'postcss-selector-parser';
3
- import type { Kind, Options, Patterns, SelectorPolicyData } from './spiracss-class-structure.types';
4
- export declare const collectRootBlockNames: (selectors: Selector[], options: Options, patterns: Patterns) => string[];
2
+ import type { ClassifyOptions, Kind, Options, Patterns, SelectorPolicyData } from './spiracss-class-structure.types';
3
+ export declare const collectRootBlockNames: (selectors: Selector[], options: ClassifyOptions, patterns: Patterns) => string[];
5
4
  export declare const hasValidSpiraClass: (selectors: Selector[], options: Options, patterns: Patterns) => boolean;
6
5
  export declare const analyzeRootSelector: (sel: Selector, rootBlockName: string, options: Options, patterns: Patterns) => {
7
6
  hasSpiraClass: boolean;
@@ -20,6 +19,7 @@ type ProcessContext = {
20
19
  namingHint: string;
21
20
  isShared: boolean;
22
21
  isInteraction: boolean;
22
+ hasBlockAncestor: boolean;
23
23
  };
24
24
  /**
25
25
  * Analyze a selector in context and emit structure/naming violations.
@@ -29,7 +29,6 @@ type ProcessContext = {
29
29
  */
30
30
  export declare const processSelector: (sel: Selector, ctx: ProcessContext) => Kind | null;
31
31
  export declare const mergeRuleKinds: (kinds: Kind[]) => Kind | null;
32
- export declare const findNearestParentRule: (node: PostcssNode) => Rule | null;
33
32
  export declare const hasSegmentSequence: (segments: string[], sequence: string[]) => boolean;
34
33
  export {};
35
34
  //# sourceMappingURL=spiracss-class-structure.selectors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spiracss-class-structure.selectors.d.ts","sourceRoot":"","sources":["../../../src/rules/spiracss-class-structure.selectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,IAAI,WAAW,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AACxD,OAAO,KAAK,EAAmC,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAUxF,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAEnG,eAAO,MAAM,qBAAqB,GAChC,WAAW,QAAQ,EAAE,EACrB,SAAS,OAAO,EAChB,UAAU,QAAQ,KACjB,MAAM,EAcR,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC7B,WAAW,QAAQ,EAAE,EACrB,SAAS,OAAO,EAChB,UAAU,QAAQ,KACjB,OAUF,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,KAAK,QAAQ,EACb,eAAe,MAAM,EACrB,SAAS,OAAO,EAChB,UAAU,QAAQ,KACjB;IAAE,aAAa,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAgDzE,CAAA;AAED,KAAK,cAAc,GAAG;IACpB,UAAU,CAAC,EAAE,IAAI,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,kBAAkB,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,aAAa,EAAE,OAAO,CAAA;CACvB,CAAA;AA2PD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,QAAQ,EAAE,KAAK,cAAc,KAAG,IAAI,GAAG,IA+E3E,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,OAAO,IAAI,EAAE,KAAG,IAAI,GAAG,IAOrD,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,MAAM,WAAW,KAAG,IAAI,GAAG,IAOhE,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,EAAE,EAAE,UAAU,MAAM,EAAE,KAAG,OAa3E,CAAA"}
1
+ {"version":3,"file":"spiracss-class-structure.selectors.d.ts","sourceRoot":"","sources":["../../../src/rules/spiracss-class-structure.selectors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmC,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAYxF,OAAO,KAAK,EACV,eAAe,EACf,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,kBAAkB,EACnB,MAAM,kCAAkC,CAAA;AAIzC,eAAO,MAAM,qBAAqB,GAChC,WAAW,QAAQ,EAAE,EACrB,SAAS,eAAe,EACxB,UAAU,QAAQ,KACjB,MAAM,EAcR,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC7B,WAAW,QAAQ,EAAE,EACrB,SAAS,OAAO,EAChB,UAAU,QAAQ,KACjB,OAUF,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,KAAK,QAAQ,EACb,eAAe,MAAM,EACrB,SAAS,OAAO,EAChB,UAAU,QAAQ,KACjB;IAAE,aAAa,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAkBzE,CAAA;AAED,KAAK,cAAc,GAAG;IACpB,UAAU,CAAC,EAAE,IAAI,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,kBAAkB,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,aAAa,EAAE,OAAO,CAAA;IACtB,gBAAgB,EAAE,OAAO,CAAA;CAC1B,CAAA;AAqSD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,QAAQ,EAAE,KAAK,cAAc,KAAG,IAAI,GAAG,IAuF3E,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,OAAO,IAAI,EAAE,KAAG,IAAI,GAAG,IAOrD,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,EAAE,EAAE,UAAU,MAAM,EAAE,KAAG,OAa3E,CAAA"}
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasSegmentSequence = exports.findNearestParentRule = exports.mergeRuleKinds = exports.processSelector = exports.analyzeRootSelector = exports.hasValidSpiraClass = exports.collectRootBlockNames = void 0;
3
+ exports.hasSegmentSequence = exports.mergeRuleKinds = exports.processSelector = exports.analyzeRootSelector = exports.hasValidSpiraClass = exports.collectRootBlockNames = void 0;
4
4
  const selector_1 = require("../utils/selector");
5
+ const selector_policy_1 = require("../utils/selector-policy");
5
6
  const spiracss_class_structure_messages_1 = require("./spiracss-class-structure.messages");
6
7
  const spiracss_class_structure_patterns_1 = require("./spiracss-class-structure.patterns");
8
+ const isClassNode = (node) => node.type === 'class';
7
9
  const collectRootBlockNames = (selectors, options, patterns) => {
8
10
  const names = new Set();
9
11
  const rootPseudos = new Set([':is', ':where']);
@@ -40,44 +42,14 @@ const analyzeRootSelector = (sel, rootBlockName, options, patterns) => {
40
42
  let hasRootBlock = false;
41
43
  let hasOtherBlock = false;
42
44
  const sameElementPseudos = new Set([':is', ':where']);
43
- const isContainer = (node) => Boolean(node && 'nodes' in node && Array.isArray(node.nodes));
44
- const hasCombinator = (container) => {
45
- const nodes = container?.nodes;
46
- if (!nodes || nodes.length === 0)
47
- return false;
48
- return nodes.some((node) => {
49
- if (node.type === 'combinator')
50
- return true;
51
- if (isContainer(node))
52
- return hasCombinator(node);
53
- return false;
54
- });
55
- };
56
- const isInsideNonSameElementPseudo = (node) => {
57
- let current = node.parent;
58
- let selectorInPseudo = null;
59
- while (current) {
60
- if (current.type === 'selector')
61
- selectorInPseudo = current;
62
- if (current.type === 'pseudo') {
63
- const pseudo = typeof current.value === 'string' ? current.value.toLowerCase() : '';
64
- if (!sameElementPseudos.has(pseudo))
65
- return true;
66
- if (selectorInPseudo && hasCombinator(selectorInPseudo))
67
- return true;
68
- }
69
- current = current.parent;
70
- }
71
- return false;
72
- };
73
45
  sel.walk((node) => {
74
- if (node.type !== 'class')
46
+ if (!isClassNode(node))
75
47
  return;
76
48
  const name = node.value;
77
49
  const kind = (0, spiracss_class_structure_patterns_1.classify)(name, options, patterns);
78
50
  if (kind !== 'external')
79
51
  hasSpiraClass = true;
80
- if (isInsideNonSameElementPseudo(node))
52
+ if ((0, selector_1.isInsideNonSameElementPseudo)(node, sameElementPseudos))
81
53
  return;
82
54
  if (name === rootBlockName)
83
55
  hasRootBlock = true;
@@ -89,6 +61,8 @@ const analyzeRootSelector = (sel, rootBlockName, options, patterns) => {
89
61
  exports.analyzeRootSelector = analyzeRootSelector;
90
62
  const MAX_BLOCK_NESTING_DEPTH = 1;
91
63
  const getModifierExample = (options) => {
64
+ if (options.naming?.customPatterns?.modifier)
65
+ return '';
92
66
  const naming = options.naming ?? {};
93
67
  const prefix = naming.modifierPrefix ?? '-';
94
68
  const modifierCase = naming.modifierCase ?? 'kebab';
@@ -97,9 +71,12 @@ const getModifierExample = (options) => {
97
71
  };
98
72
  const reportAttributeViolations = (compounds, ctx) => {
99
73
  const { parentKind, report, options, patterns, policyData } = ctx;
100
- const policy = options.selectorPolicy;
74
+ const selectorPolicy = options.selectorPolicy;
75
+ const variantValueNaming = selectorPolicy.variant.valueNaming;
76
+ const stateValueNaming = selectorPolicy.state.valueNaming;
101
77
  const { reservedVariantKeys, reservedStateKey, reservedAriaKeys, variantValuePattern, stateValuePattern } = policyData;
102
78
  const modifierExample = getModifierExample(options);
79
+ const customModifierPattern = options.naming?.customPatterns?.modifier;
103
80
  compounds.forEach((compound) => {
104
81
  if (compound.attributes.length === 0)
105
82
  return;
@@ -115,27 +92,27 @@ const reportAttributeViolations = (compounds, ctx) => {
115
92
  return;
116
93
  if (name.startsWith('data-')) {
117
94
  if (reservedVariantKeys.has(name)) {
118
- if (policy.variant.mode === 'class') {
119
- report(spiracss_class_structure_messages_1.messages.invalidVariantAttribute(name, modifierExample));
95
+ if (selectorPolicy.variant.mode === 'class') {
96
+ report(spiracss_class_structure_messages_1.messages.invalidVariantAttribute(name, modifierExample, customModifierPattern));
120
97
  return;
121
98
  }
122
99
  if (attrValue && !variantValuePattern.test(attrValue)) {
123
- report(spiracss_class_structure_messages_1.messages.invalidDataValue(name, attrValue));
100
+ report(spiracss_class_structure_messages_1.messages.invalidDataValue(name, attrValue, variantValueNaming.case, variantValueNaming.maxWords));
124
101
  }
125
102
  }
126
103
  else if (name === reservedStateKey) {
127
- if (policy.state.mode !== 'data') {
128
- report(spiracss_class_structure_messages_1.messages.invalidStateAttribute(name, modifierExample));
104
+ if (selectorPolicy.state.mode !== 'data') {
105
+ report(spiracss_class_structure_messages_1.messages.invalidStateAttribute(name, modifierExample, customModifierPattern));
129
106
  return;
130
107
  }
131
108
  if (attrValue && !stateValuePattern.test(attrValue)) {
132
- report(spiracss_class_structure_messages_1.messages.invalidDataValue(name, attrValue));
109
+ report(spiracss_class_structure_messages_1.messages.invalidDataValue(name, attrValue, stateValueNaming.case, stateValueNaming.maxWords));
133
110
  }
134
111
  }
135
112
  }
136
113
  else if (name.startsWith('aria-')) {
137
- if (reservedAriaKeys.has(name) && policy.state.mode !== 'data') {
138
- report(spiracss_class_structure_messages_1.messages.invalidStateAttribute(name, modifierExample));
114
+ if (reservedAriaKeys.has(name) && selectorPolicy.state.mode !== 'data') {
115
+ report(spiracss_class_structure_messages_1.messages.invalidStateAttribute(name, modifierExample, customModifierPattern));
139
116
  }
140
117
  }
141
118
  });
@@ -197,8 +174,8 @@ const reportElementHierarchyViolations = (ctx, kind, baseKind, baseValue, depth)
197
174
  return true;
198
175
  }
199
176
  if (baseKind === 'element') {
200
- if (depth > options.allowElementChainDepth) {
201
- report(spiracss_class_structure_messages_1.messages.elementChainTooDeep(parentLabel, baseValue, depth, options.allowElementChainDepth));
177
+ if (depth > options.element.depth) {
178
+ report(spiracss_class_structure_messages_1.messages.elementChainTooDeep(parentLabel, baseValue, depth, options.element.depth));
202
179
  }
203
180
  return true;
204
181
  }
@@ -217,12 +194,12 @@ const reportBlockCombinatorViolations = (ctx, kind, baseValue, hasNesting, first
217
194
  const { parentKind, parentSelector, options, report, isShared, isInteraction } = ctx;
218
195
  if (parentKind !== 'block' || kind === 'modifier')
219
196
  return;
220
- if (!options.enforceChildCombinator || isShared || isInteraction)
197
+ if (!options.child.combinator || isShared || isInteraction)
221
198
  return;
222
199
  const missingChild = !hasNesting && !firstCombinator;
223
200
  const wrongCombinator = firstCombinator && firstCombinator !== '>';
224
201
  if (missingChild || wrongCombinator) {
225
- report(spiracss_class_structure_messages_1.messages.needChild(baseValue));
202
+ report(spiracss_class_structure_messages_1.messages.needChild(baseValue, options.comments.shared, options.comments.interaction));
226
203
  return;
227
204
  }
228
205
  if (combinatorCount > 1 && parentSelector) {
@@ -273,16 +250,23 @@ const processSelector = (sel, ctx) => {
273
250
  reportInvalidClassNames(classes, invalidNestingClasses, options, patterns, namingHint, report);
274
251
  const modifierClasses = classes.filter((c) => patterns.modifierRe.test(c.value));
275
252
  const modifierClass = modifierClasses[0];
276
- const modifiersAllowed = !(options.selectorPolicy.variant.mode === 'data' && options.selectorPolicy.state.mode === 'data');
253
+ const modifiersAllowed = !(options.selectorPolicy.variant.mode === 'data' &&
254
+ options.selectorPolicy.state.mode === 'data');
277
255
  if (!modifiersAllowed && modifierClasses.length > 0) {
278
- modifierClasses.forEach(() => {
279
- report(spiracss_class_structure_messages_1.messages.disallowedModifier());
280
- });
256
+ // Display lowercase keys in messages to match actual selector matching behavior.
257
+ const { variantKeys, stateKeys } = (0, selector_policy_1.getLowercasePolicyKeys)(options.selectorPolicy);
258
+ report(spiracss_class_structure_messages_1.messages.disallowedModifier(variantKeys, stateKeys));
281
259
  }
282
260
  // Ignore selectors that are purely external, but still catch SpiraCSS classes
283
261
  // even if the last segment is external.
284
262
  const base = resolveBaseClass(classes, modifierClass, options, patterns);
285
263
  const baseKind = (0, spiracss_class_structure_patterns_1.classify)(base.value, options, patterns);
264
+ if (options.child.nesting && combinatorCount > 0 && !ctx.hasBlockAncestor) {
265
+ const rootBlocks = (0, exports.collectRootBlockNames)([sel], options, patterns);
266
+ if (rootBlocks.length > 0) {
267
+ report(spiracss_class_structure_messages_1.messages.needChildNesting(sel.toString().trim()));
268
+ }
269
+ }
286
270
  // Kind resolution:
287
271
  // 1. If a Modifier exists -> 'modifier'
288
272
  // 2. If hasNesting:
@@ -321,16 +305,6 @@ const mergeRuleKinds = (kinds) => {
321
305
  return null;
322
306
  };
323
307
  exports.mergeRuleKinds = mergeRuleKinds;
324
- const findNearestParentRule = (node) => {
325
- let current = node.parent;
326
- while (current) {
327
- if (current.type === 'rule')
328
- return current;
329
- current = current.parent;
330
- }
331
- return null;
332
- };
333
- exports.findNearestParentRule = findNearestParentRule;
334
308
  const hasSegmentSequence = (segments, sequence) => {
335
309
  if (sequence.length === 0 || segments.length < sequence.length)
336
310
  return false;