@uindow/css 1.0.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.
- package/LICENSE.txt +21 -0
- package/README.md +294 -0
- package/index.js +28 -0
- package/index.js.map +6 -0
- package/index.mjs +28 -0
- package/index.mjs.map +6 -0
- package/package.json +55 -0
- package/types/index.d.ts +216 -0
package/LICENSE.txt
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026-present Uindow™ (https://uindow.com)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# @uindow/css - The Smarter CSS Selector Generator
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<a href="https://uindow.com/?ref=github">
|
|
5
|
+
<img src="https://uindow.github.io/img/github-banner-css.png?v=2"/>
|
|
6
|
+
</a>
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
Generate one - or many - unique CSS selectors for any DOM element. Clean, human-readable output. A configurable penalty model that ranks results from most semantic to most specific. Built for performance, designed to stay out of your way.
|
|
10
|
+
|
|
11
|
+
Works everywhere JavaScript runs: Node.js, browsers, and any environment with a DOM.
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
<a href="https://uindow.github.io/img/uindow-css.gif" target="_blank">
|
|
15
|
+
<img src="https://uindow.github.io/img/uindow-css.gif"/>
|
|
16
|
+
</a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Installation
|
|
22
|
+
|
|
23
|
+
**npm**
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install @uindow/css
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```js
|
|
30
|
+
const { findOne, findAll } = require("@uindow/css");
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Browser (standalone)**
|
|
34
|
+
|
|
35
|
+
```html
|
|
36
|
+
<script src="https://uindow.github.io/css/selector.js"></script>
|
|
37
|
+
<script>
|
|
38
|
+
const { findOne, findAll } = Uindow_CSS;
|
|
39
|
+
</script>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Quick start
|
|
45
|
+
|
|
46
|
+
```js
|
|
47
|
+
const { findOne, findAll } = require("@uindow/css");
|
|
48
|
+
|
|
49
|
+
// The single best selector
|
|
50
|
+
const { selector, penalty } = findOne(document.querySelector(".hero"));
|
|
51
|
+
// → '[data-id="42"] .hero'
|
|
52
|
+
|
|
53
|
+
// Every viable selector, ranked from best to most specific
|
|
54
|
+
const results = findAll(document.querySelector(".hero"), { maxResults: 5 });
|
|
55
|
+
// → [
|
|
56
|
+
// { selector: '[data-id="42"] .hero', penalty: 1.3 },
|
|
57
|
+
// { selector: '.hero', penalty: 1.3 },
|
|
58
|
+
// { selector: 'section [data-id="42"] .hero', penalty: 2.6 },
|
|
59
|
+
// { selector: 'main .hero', penalty: 2.75 },
|
|
60
|
+
// { selector: 'main .hero:nth-of-type(1)', penalty: 4.4 },
|
|
61
|
+
// ]
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Why @uindow/css?
|
|
67
|
+
|
|
68
|
+
Most CSS selector generators treat the problem as a lookup: walk up the DOM, find something unique, done. One selector, take it or leave it.
|
|
69
|
+
|
|
70
|
+
`@uindow/css` treats it as a **search problem**. It explores the space of possible selectors across every ancestor level, scores each candidate against a configurable penalty model, prunes aggressively to stay fast, and surfaces a ranked list of results - so you always get the shortest, most readable, most stable selector first, with fallbacks already computed.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Comparison with `@medv/finder`
|
|
75
|
+
|
|
76
|
+
| Feature | **@uindow/css** | **@medv/finder** |
|
|
77
|
+
|---|---|---|
|
|
78
|
+
| **Custom root element** | ✅ Any `HTMLElement`, `Document`, or `ShadowRoot` | ✅ Supported |
|
|
79
|
+
| **ID filter** | ✅ `idFilter` filter | ✅ `idName` filter |
|
|
80
|
+
| **Tag filter** | ✅ `tagFilter` filter | ✅ `tagName` filter |
|
|
81
|
+
| **Class filter** | ✅ Excludes `is-*`, `has-*`, `js-*`, `css-*` by default | ⚠️ Less opinionated defaults |
|
|
82
|
+
| **Attribute filter** | ✅ Excludes `style`, `width`, `height`, URLs, values ≥ 32 chars by default | ⚠️ Less opinionated defaults |
|
|
83
|
+
| **Search timeout** | ✅ `timeout` with graceful fallback | ⚠️ May quit before an exhaustive search |
|
|
84
|
+
| [**Returns multiple selectors**](#multiple-selectors-ranked-by-quality) | ✅ Up to `maxResults`, ranked by penalty | ❌ Single selector only |
|
|
85
|
+
| [**Per-type penalty tuning**](#fine-grained-penalty-model) | ✅ `idPenalty`, `tagPenalty`, `attrPenalty`, `attrMatchPenalty`, `classPenalty`, `nthOfTypePenalty`, `nthChildPenalty`, `lengthPenaltyThreshold` | ❌ Not configurable |
|
|
86
|
+
| [**Candidate/path caps**](#performance-controls) | ✅ `maxCandidatesPerLevel`, `maxPathsPerLevel`, `maxPathsTotal` | ❌ Not supported |
|
|
87
|
+
| [**Prefix/suffix attribute matching**](#prefix-and-suffix-attribute-matching) | ✅ `[attr^="start"]`, `[attr$="end"]` | ❌ Not supported |
|
|
88
|
+
| [**Human-readable attribute selectors**](#clean-human-readable-output) | ✅ Always emits `[attr="123"]` | ❌ Uses `CSS.escape()` |
|
|
89
|
+
| [**Fuzziness**](#fuzziness) | ✅ Trade exclusivity for shorter selectors (`0%` to `100%`) | ❌ Not supported |
|
|
90
|
+
| [**Effort**](#effort) | ✅ Trade processing time for shorter selectors (`0%` to `100%`) | ❌ Not supported |
|
|
91
|
+
| [**Compound selectors**](#compound-selectors-at-every-level) | ✅ Attempts to merge tag, classes, and attributes at each level: `input.check[type="checkbox"][value="2"]` | ❌ Simple selectors only |
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Features
|
|
96
|
+
|
|
97
|
+
### Multiple selectors, ranked by quality
|
|
98
|
+
|
|
99
|
+
`findAll()` returns up to `maxResults` selectors sorted by ascending penalty - from the most semantic to the most specific. Pick the best one programmatically, or hand the whole list to your users.
|
|
100
|
+
|
|
101
|
+
```js
|
|
102
|
+
const { findAll } = require("@uindow/css");
|
|
103
|
+
|
|
104
|
+
const results = findAll(el, { maxResults: 10 });
|
|
105
|
+
|
|
106
|
+
results.forEach(({ selector, penalty }) => {
|
|
107
|
+
console.log(`${selector} (penalty: ${penalty})`);
|
|
108
|
+
});
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Prefix and suffix attribute matching
|
|
112
|
+
|
|
113
|
+
When an exact attribute match would be brittle or unavailable, `@uindow/css` can generate selectors using the CSS `^=` (prefix) and `$=` (suffix) operators. They carry their own separate penalty so they only surface when genuinely useful.
|
|
114
|
+
|
|
115
|
+
```css
|
|
116
|
+
/* Exact match - always preferred */
|
|
117
|
+
[data-id="42"]
|
|
118
|
+
|
|
119
|
+
/* Prefix match - used when it uniquely identifies the element */
|
|
120
|
+
[data-id^="prod-"]
|
|
121
|
+
|
|
122
|
+
/* Suffix match */
|
|
123
|
+
[data-id$="-active"]
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Tune how eagerly these appear with `attrMatchPenalty` (default `1.2`).
|
|
127
|
+
|
|
128
|
+
### Clean, human-readable output
|
|
129
|
+
|
|
130
|
+
Every selector is emitted in the plain `[attr="value"]` format. No CSS-escaped sequences, no surprises when you read, copy, or paste the result.
|
|
131
|
+
|
|
132
|
+
```css
|
|
133
|
+
/* ✅ @uindow/css */
|
|
134
|
+
[data-id="123"] .nav-item
|
|
135
|
+
|
|
136
|
+
/* ❌ Other tools */
|
|
137
|
+
[data-id="\31 23"] .nav-item
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Sensible default filters
|
|
141
|
+
|
|
142
|
+
Unstable and noisy parts of the DOM are excluded before the search begins:
|
|
143
|
+
|
|
144
|
+
- **Attributes** - `style`, `width`, `height`, URL values, and anything over 32 characters are ignored by default.
|
|
145
|
+
- **Classes** - `is-*`, `has-*`, `js-*`, and `css-*` are ignored by default. These are state and behaviour hooks - they change at runtime and make brittle selectors.
|
|
146
|
+
- **IDs** - all IDs are allowed by default. Provide your own `idFilter` to exclude auto-generated or dynamic ones.
|
|
147
|
+
|
|
148
|
+
Every filter is a plain function, so your own rules are one line of code.
|
|
149
|
+
|
|
150
|
+
### Fine-grained penalty model
|
|
151
|
+
|
|
152
|
+
Each selector type has an independent penalty weight. Lower means it shows up more often in results; higher means it only appears when nothing better is available.
|
|
153
|
+
|
|
154
|
+
| Option | Default | Controls |
|
|
155
|
+
|---|---|---|
|
|
156
|
+
| `idPenalty` | `1` | `#id` selectors |
|
|
157
|
+
| `tagPenalty` | `1.1` | `div`, `span`, … |
|
|
158
|
+
| `attrPenalty` | `1.25` | `[name]`, `[value="1"]` |
|
|
159
|
+
| `attrMatchPenalty` | `1.2` | `[name^="x"]`, `[value$="5"]` |
|
|
160
|
+
| `classPenalty` | `1.3` | `.button`, `.nav-item`, … |
|
|
161
|
+
| `nthOfTypePenalty` | `3` | `div:nth-of-type(2)` |
|
|
162
|
+
| `nthChildPenalty` | `6` | `:nth-child(3)` |
|
|
163
|
+
| `lengthPenaltyThreshold` | `32` | Extra penalty for selectors longer than N chars |
|
|
164
|
+
|
|
165
|
+
### Performance controls
|
|
166
|
+
|
|
167
|
+
For large or deeply nested DOMs, hard caps keep the search bounded:
|
|
168
|
+
|
|
169
|
+
```js
|
|
170
|
+
const { findAll } = require("@uindow/css");
|
|
171
|
+
|
|
172
|
+
findAll(el, {
|
|
173
|
+
maxCandidatesPerLevel: 2500, // Candidates evaluated per ancestor level
|
|
174
|
+
maxPathsPerLevel: 50, // Unique paths kept per level
|
|
175
|
+
maxPathsTotal: 1000, // Unique paths across the entire search
|
|
176
|
+
timeout: 1500, // Return best found so far after N ms
|
|
177
|
+
});
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Fuzziness
|
|
181
|
+
|
|
182
|
+
By default, `@uindow/css` only returns selectors that match the target element exclusively. Set `fuzziness > 0` to allow selectors that match the target *first* while potentially matching other elements too - trading strict uniqueness for shorter, cleaner output.
|
|
183
|
+
|
|
184
|
+
```js
|
|
185
|
+
findAll(el, { fuzziness: 0 }); // Strict - only exclusive selectors (default)
|
|
186
|
+
findAll(el, { fuzziness: 5 }); // Up to 5% non-exclusive matches allowed
|
|
187
|
+
findAll(el, { fuzziness: 20 }); // Relaxed - prioritise brevity
|
|
188
|
+
findAll(el, { fuzziness: 100 }); // Fuzzy - only non-exclusive (first-match) selectors
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Effort
|
|
192
|
+
|
|
193
|
+
Controls how much effort is spent optimizing partial results before returning the final list. This setting trades speed for result quality: higher values spend more time exploring candidates before producing the final result set.
|
|
194
|
+
|
|
195
|
+
```js
|
|
196
|
+
findAll(el, { effort: 0 }); // Low effort - quickly returns the first `maxResults`
|
|
197
|
+
findAll(el, { effort: 50 }); // Medium effort - evaluates 25 × `maxResults` candidates before returning the final results
|
|
198
|
+
findAll(el, { effort: 100 }); // Maximum effort - evaluates 50 × `maxResults` candidates before returning the final results
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Compound selectors at every level
|
|
202
|
+
|
|
203
|
+
Most CSS selector generators pick a single token per ancestor level - a class, or an attribute, or a tag - and move on. This produces selectors that are either fragile (too generic) or bloated (too many levels deep).
|
|
204
|
+
|
|
205
|
+
`@uindow/css` builds **compound selectors** at each level by default, combining the tag, relevant classes, and attributes into a single, precise token:
|
|
206
|
+
|
|
207
|
+
```css
|
|
208
|
+
/* ✅ @uindow/css - compound, precise, readable */
|
|
209
|
+
input.check[type="checkbox"][value="2"]
|
|
210
|
+
|
|
211
|
+
/* ❌ Other tools - simple, one token at a time */
|
|
212
|
+
input
|
|
213
|
+
.check
|
|
214
|
+
[type="checkbox"]
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
The result is selectors that are shorter, more stable, and immediately understandable at a glance.
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## API
|
|
222
|
+
|
|
223
|
+
### `findOne(element, options?)`
|
|
224
|
+
|
|
225
|
+
Returns the single best selector for `element`, or throws if none can be generated.
|
|
226
|
+
|
|
227
|
+
```js
|
|
228
|
+
const { findOne } = require("@uindow/css");
|
|
229
|
+
|
|
230
|
+
const { selector, penalty } = findOne(document.getElementById("main"));
|
|
231
|
+
// → { selector: '#main', penalty: 1 }
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### `findAll(element, options?)`
|
|
235
|
+
|
|
236
|
+
Returns up to `maxResults` selectors sorted by ascending penalty, or throws if none can be generated.
|
|
237
|
+
|
|
238
|
+
```js
|
|
239
|
+
const { findAll } = require("@uindow/css");
|
|
240
|
+
|
|
241
|
+
const results = findAll(document.getElementById("main"), {
|
|
242
|
+
maxResults: 10,
|
|
243
|
+
});
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Configuration reference
|
|
249
|
+
|
|
250
|
+
All configuration items are optional. Any omitted option falls back to its default.
|
|
251
|
+
|
|
252
|
+
```js
|
|
253
|
+
const { findAll } = require("@uindow/css");
|
|
254
|
+
|
|
255
|
+
findAll(el, {
|
|
256
|
+
// Scope - nothing above this element appears in any selector
|
|
257
|
+
root: document.querySelector("#app"), // Default: document.documentElement
|
|
258
|
+
|
|
259
|
+
// Filters - return false to exclude a candidate from the search
|
|
260
|
+
idFilter: (name) => !name.startsWith("auto-"),
|
|
261
|
+
tagFilter: (name) => name !== "div",
|
|
262
|
+
classFilter: (name) => !name.startsWith("is-"),
|
|
263
|
+
attrFilter: (name, value) => name.startsWith("data-") && value.length < 32,
|
|
264
|
+
|
|
265
|
+
// Penalties - lower value → type appears more often in results
|
|
266
|
+
idPenalty: 1,
|
|
267
|
+
tagPenalty: 1.1,
|
|
268
|
+
attrPenalty: 1.25,
|
|
269
|
+
attrMatchPenalty: 1.2,
|
|
270
|
+
classPenalty: 1.3,
|
|
271
|
+
nthOfTypePenalty: 3,
|
|
272
|
+
nthChildPenalty: 6,
|
|
273
|
+
lengthPenaltyThreshold: 32,
|
|
274
|
+
|
|
275
|
+
// Performance caps
|
|
276
|
+
maxCandidatesPerLevel: 2500,
|
|
277
|
+
maxPathsPerLevel: 50,
|
|
278
|
+
maxPathsTotal: 1000,
|
|
279
|
+
maxResults: 25,
|
|
280
|
+
timeout: 1500,
|
|
281
|
+
|
|
282
|
+
// Percentage of shorter, first-match selectors
|
|
283
|
+
fuzziness: 0,
|
|
284
|
+
|
|
285
|
+
// Effort spent on optimizing candidates
|
|
286
|
+
effort: 50
|
|
287
|
+
});
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## License
|
|
293
|
+
|
|
294
|
+
MIT © 2026 [Uindow™](https://uindow.com)
|
package/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Uindow's CSS Selector Generator
|
|
3
|
+
*
|
|
4
|
+
* @architect Mark Jivko <mark@uindow.com>
|
|
5
|
+
* @copyright © 2026 Uindow™ (https://uindow.com)
|
|
6
|
+
* @license MIT
|
|
7
|
+
*
|
|
8
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
|
9
|
+
* a copy of this software and associated documentation files
|
|
10
|
+
* (the "Software"), to deal in the Software without restriction,
|
|
11
|
+
* including without limitation the rights to use, copy, modify, merge,
|
|
12
|
+
* publish, distribute, sublicense, and/or sell copies of the Software,
|
|
13
|
+
* and to permit persons to whom the Software is furnished to do so,
|
|
14
|
+
* subject to the following conditions:
|
|
15
|
+
*
|
|
16
|
+
* The above copyright notice and this permission notice shall be
|
|
17
|
+
* included in all copies or substantial portions of the Software.
|
|
18
|
+
*
|
|
19
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
20
|
+
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
21
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
22
|
+
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
23
|
+
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
24
|
+
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
|
|
25
|
+
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
26
|
+
*/
|
|
27
|
+
"use strict";var E=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var W=Object.prototype.hasOwnProperty;var v=f=>{throw TypeError(f)};var C=(f,e)=>E(f,"name",{value:e,configurable:!0});var q=(f,e)=>{for(var t in e)E(f,t,{get:e[t],enumerable:!0})},B=(f,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of V(e))!W.call(f,a)&&a!==t&&E(f,a,{get:()=>e[a],enumerable:!(n=I(e,a))||n.enumerable});return f};var J=f=>B(E({},"__esModule",{value:!0}),f);var K=(f,e,t)=>e.has(f)||v("Cannot "+t);var A=(f,e,t)=>e.has(f)?v("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(f):e.set(f,t);var h=(f,e,t)=>(K(f,e,"access private method"),t);var Y={};q(Y,{findAll:()=>X,findOne:()=>Q});module.exports=J(Y);var i,D,j,F,G,R,U,$,N;const c=class c{static findOne(e,t={}){return(typeof t!="object"||t===null)&&(t={}),c.findAll(e,{...t,maxResults:1})[0]}static findAll(e,t={}){var b,L,o,u,m,y,P;if(Node.ELEMENT_NODE!==e?.nodeType)throw new Error("Cannot generate a CSS selector for this element");if(e.tagName.toLowerCase()==="html")return[{selector:"html",penalty:0}];const n=h(b=c,i,D).call(b,t),a=performance.now(),r=(()=>{const s=e.getRootNode?.();return s?.constructor?.name==="ShadowRoot"?s:Node.DOCUMENT_NODE===n.root.nodeType?n.root:n.root.ownerDocument??n.root})(),l={},S=[];for(const{candidate:s,level:d}of h(L=c,i,j).call(L,e,n,r)){if(performance.now()-a>n.timeout)break;if(typeof l[d]>"u"&&(l[d]=0),!(l[d]>=n.maxPathsPerLevel)&&h(o=c,i,N).call(o,e,n,s,r)&&(S.push({path:s,penalty:h(u=c,i,U).call(u,s,n)}),l[d]++,S.length>=n.maxPathsTotal))break}if(S.length===0){const s=(()=>{var k,z;const d=[];let M=0,x=e;for(;x&&x!==r;){const H=x.tagName.toLowerCase(),O=h(k=c,i,$).call(k,x,H);if(O===-1)return[];d.push({compound:`${H}:nth-of-type(${O})`,penalty:n.nthOfTypePenalty,level:M}),x=x.parentElement,M++}return h(z=c,i,N).call(z,e,n,d,r)?d:[]})();if(!s.length)throw new Error("No fallback CSS selector was not found");return[{selector:h(m=c,i,R).call(m,s),penalty:h(y=c,i,U).call(y,s,n)}]}S.sort((s,d)=>s.penalty-d.penalty);const p=[],g=new Set,w=C(s=>{var M,x;const d=h(M=c,i,R).call(M,s);!d||g.has(d)||(g.add(d),p.push({selector:d,penalty:h(x=c,i,U).call(x,s,n)}))},"append"),_=n.maxResults*Math.round(1+n.effort/100*49);t:for(const{path:s}of S){for(const d of h(P=c,i,F).call(P,s,e,n,r))if(w(d),p.length>=_)break t;w(s)}return p.sort((s,d)=>s.penalty-d.penalty),p.slice(0,n.maxResults)}};i=new WeakSet,D=C(function(e={}){(typeof e!="object"||e===null)&&(e={});const t={};t.root=e.root instanceof HTMLElement?e.root:document.documentElement,t.idFilter=typeof e.idFilter=="function"?e.idFilter:()=>!0,t.tagFilter=typeof e.tagFilter=="function"?e.tagFilter:()=>!0,t.classFilter=typeof e.classFilter=="function"?e.classFilter:r=>!r.match(/^(is-|has-|js-|css-)/),t.attrFilter=typeof e.attrFilter=="function"?e.attrFilter:(r,l)=>!/(?:width|height|style)$/i.test(r)&&l.length<=32&&!/^(?:\w+:)?\/\/?/i.test(l);const n={lengthPenaltyThreshold:32,maxCandidatesPerLevel:2500,maxPathsPerLevel:50,maxPathsTotal:1e3,maxResults:25,fuzziness:0,effort:50,timeout:1500};for(const r of Object.keys(n))t[r]=Number.isInteger(e[r])?Math.abs(e[r]):n[r];t.fuzziness>100&&(t.fuzziness=100),t.effort>100&&(t.effort=100),t.lengthPenaltyThreshold<1&&(t.lengthPenaltyThreshold=1),t.maxResults<1&&(t.maxResults=1),t.maxPathsTotal<t.maxResults&&(t.maxPathsTotal=t.maxResults),t.maxPathsPerLevel<t.maxResults&&(t.maxPathsPerLevel=t.maxResults),t.maxCandidatesPerLevel<t.maxPathsPerLevel&&(t.maxCandidatesPerLevel=t.maxPathsPerLevel);const a={idPenalty:1,tagPenalty:1.1,classPenalty:1.3,attrPenalty:1.25,attrMatchPenalty:1.2,nthOfTypePenalty:3,nthChildPenalty:6};for(const r of Object.keys(a))t[r]=Number.isFinite(e[r])?Math.abs(e[r]):a[r];return t},"#config"),j=C(function*(e,t,n){var p;let a=e,r=0;function*l(g,w=[],_={count:0}){if(!(_.count>=t.maxCandidatesPerLevel)){if(!g.length){_.count++,yield w;return}for(const b of g[0]){if(_.count>=t.maxCandidatesPerLevel)return;yield*l(g.slice(1),w.concat(b),_)}}}C(l,"combine");const S=[];for(;a&&a!==n;){S.push(h(p=c,i,G).call(p,a,t,r));const g=[...l(S)];g.sort((w,_)=>{var b,L;return h(b=c,i,U).call(b,w,t)-h(L=c,i,U).call(L,_,t)});for(const w of g)yield{candidate:w,level:r};a=a.parentElement,r++}},"#find"),F=C(function*(e,t,n,a){var r,l;if(!(e.length<=2))for(let S=1;S<e.length-1;S++){const p=[...e];p.splice(S,1),h(r=c,i,N).call(r,t,n,p,a)&&(yield*h(l=c,i,F).call(l,p,t,n,a),yield p)}},"#optimize"),G=C(function(e,t,n=0){var b,L;const a=[],r=e.getAttribute("id");r&&t.idFilter(r)&&a.push({compound:"#"+CSS.escape(r),penalty:t.idPenalty,level:n});const l=e.tagName.toLowerCase();if(t.tagFilter(l)){a.push({compound:l,penalty:t.tagPenalty,level:n});const o=h(b=c,i,$).call(b,e,l);o!==-1&&a.push({compound:`${l}:nth-of-type(${o})`,penalty:t.nthOfTypePenalty,level:n});const u=h(L=c,i,$).call(L,e);u!==-1&&a.push({compound:`:nth-child(${u})`,penalty:t.nthChildPenalty,level:n})}const S=C((o,u)=>{if(!Array.isArray(o)||o.length<2||!Number.isFinite(u))return;const m=Math.min(8,o.length);for(let y=0;y<m;y++){a.push({compound:`${l}${o[y]}`,penalty:u,level:n});for(let P=y+1;P<m;P++){const s=`${o[y]}${o[P]}`;a.push({compound:s,penalty:u,level:n}),a.push({compound:`${l}${s}`,penalty:u,level:n})}}},"mergeTwo"),p=C((o,u)=>{if(!Array.isArray(o)||o.length<3||!Number.isFinite(u))return;const m=Math.min(8,o.length);for(let y=0;y<m;y++)for(let P=y+1;P<m;P++)for(let s=P+1;s<m;s++){const d=`${o[y]}${o[P]}${o[s]}`;a.push({compound:d,penalty:u,level:n}),a.push({compound:`${l}${d}`,penalty:u,level:n})}},"mergeThree"),g=[];for(let o=0;o<e.classList.length;o++)if(t.classFilter(e.classList[o])){const u=`.${CSS.escape(e.classList[o])}`;g.push(u),a.push({compound:u,penalty:t.classPenalty,level:n})}S(g,t.classPenalty);const w=[],_=C(o=>o.replace(/\\/g,"\\\\").replace(/"/g,'\\"'),"safeValue");for(let o=0;o<e.attributes.length;o++){const u=e.attributes[o].name.toLowerCase(),m=`${e.attributes[o].value}`;if(!(u==="id"||u==="class")&&t.attrFilter(u,m)){const y=`[${CSS.escape(u)}${m.length?`="${_(m)}"`:""}]`;w.push(y),a.push({compound:y,penalty:t.attrPenalty,level:n});const P=m.match(/^(\w{2,12})/g);if(P&&P[0].length<m.length){const d=`[${CSS.escape(u)}^="${_(P[0])}"]`;a.push({compound:d,penalty:t.attrMatchPenalty,level:n})}const s=m.match(/(\w{2,12})$/g);if(s&&s[0].length<m.length){const d=`[${CSS.escape(u)}$="${_(s[0])}"]`;a.push({compound:d,penalty:t.attrMatchPenalty,level:n})}}}return S(w,t.attrPenalty),p([...g.slice(0,4),...w.slice(0,4)],Math.min(t.attrPenalty,t.classPenalty)),a},"#path"),R=C(function(e){if(!e.length)return"";let t=e[0],n=t.compound;for(let a=1;a<e.length;a++){const r=(e[a].level??0)-1===t.level;n=`${e[a].compound} ${r?"> ":""}${n}`,t=e[a]}return n},"#selector"),U=C(function(e,t){const n=e.reduce((r,l)=>r+l.compound.length,0),a=t.lengthPenaltyThreshold>0&&n>t.lengthPenaltyThreshold?n/t.lengthPenaltyThreshold:1;return Math.round(1e3*e.reduce((r,l)=>r*l.penalty*1,1)*a)/1e3},"#penalty"),$=C(function(e,t){if(!e.parentNode)return-1;let n=e.parentNode.firstChild;if(!n)return-1;let a=0;for(;n&&(Node.ELEMENT_NODE===n.nodeType&&(typeof t!="string"||n.tagName.toLowerCase()===t)&&a++,n!==e);)n=n.nextSibling;return a},"#indexOf"),N=C(function(e,t,n,a){var r;try{const l=a.querySelectorAll(h(r=c,i,R).call(r,n));return t.fuzziness>=100||t.fuzziness>0&&Math.floor(Math.random()*100)<t.fuzziness?l[0]===e:l.length===1}catch{}return!1},"#matches"),A(c,i),C(c,"Uindow_CSS");let T=c;const Q=T.findOne.bind(T),X=T.findAll.bind(T);0&&(module.exports={findAll,findOne});
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
package/index.js.map
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["src/index.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["index_exports", "__export", "findAll", "findOne", "__toCommonJS", "_Uindow_CSS_static", "config_fn", "find_fn", "optimize_fn", "path_fn", "selector_fn", "penalty_fn", "indexOf_fn", "matches_fn", "_Uindow_CSS", "element", "options", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "config", "__privateMethod", "startTime", "root", "shadowRoot", "pathsPerLevel", "candidates", "candidate", "level", "fallbackPath", "path", "current", "tag", "idxOfType", "a", "b", "results", "selectors", "append", "__name", "selector", "extendedMaxResults", "treatRaw", "optimized", "n", "v", "integers", "key", "floats", "curr", "combine", "paths", "counter", "node", "pathList", "index", "shorter", "elementId", "nthIdx", "mergeTwo", "items", "penalty", "end", "i", "j", "mergeThree", "k", "classSelectors", "attrSelectors", "safeValue", "val", "attrName", "attrValue", "startWord", "startSelector", "endWord", "endSelector", "isParent", "length", "acc", "pLength", "filterTag", "child", "domElements", "__privateAdd", "Uindow_CSS", "findOne", "findAll"]
|
|
6
|
+
}
|
package/index.mjs
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Uindow's CSS Selector Generator
|
|
3
|
+
*
|
|
4
|
+
* @architect Mark Jivko <mark@uindow.com>
|
|
5
|
+
* @copyright © 2026 Uindow™ (https://uindow.com)
|
|
6
|
+
* @license MIT
|
|
7
|
+
*
|
|
8
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
|
9
|
+
* a copy of this software and associated documentation files
|
|
10
|
+
* (the "Software"), to deal in the Software without restriction,
|
|
11
|
+
* including without limitation the rights to use, copy, modify, merge,
|
|
12
|
+
* publish, distribute, sublicense, and/or sell copies of the Software,
|
|
13
|
+
* and to permit persons to whom the Software is furnished to do so,
|
|
14
|
+
* subject to the following conditions:
|
|
15
|
+
*
|
|
16
|
+
* The above copyright notice and this permission notice shall be
|
|
17
|
+
* included in all copies or substantial portions of the Software.
|
|
18
|
+
*
|
|
19
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
20
|
+
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
21
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
22
|
+
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
23
|
+
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
24
|
+
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
|
|
25
|
+
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
26
|
+
*/
|
|
27
|
+
var G=Object.defineProperty;var O=_=>{throw TypeError(_)};var P=(_,e)=>G(_,"name",{value:e,configurable:!0});var I=(_,e,t)=>e.has(_)||O("Cannot "+t);var v=(_,e,t)=>e.has(_)?O("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(_):e.set(_,t);var h=(_,e,t)=>(I(_,e,"access private method"),t);var i,A,D,N,j,E,U,R,$;const c=class c{static findOne(e,t={}){return(typeof t!="object"||t===null)&&(t={}),c.findAll(e,{...t,maxResults:1})[0]}static findAll(e,t={}){var b,L,o,u,f,S,y;if(Node.ELEMENT_NODE!==e?.nodeType)throw new Error("Cannot generate a CSS selector for this element");if(e.tagName.toLowerCase()==="html")return[{selector:"html",penalty:0}];const n=h(b=c,i,A).call(b,t),a=performance.now(),r=(()=>{const s=e.getRootNode?.();return s?.constructor?.name==="ShadowRoot"?s:Node.DOCUMENT_NODE===n.root.nodeType?n.root:n.root.ownerDocument??n.root})(),l={},m=[];for(const{candidate:s,level:d}of h(L=c,i,D).call(L,e,n,r)){if(performance.now()-a>n.timeout)break;if(typeof l[d]>"u"&&(l[d]=0),!(l[d]>=n.maxPathsPerLevel)&&h(o=c,i,$).call(o,e,n,s,r)&&(m.push({path:s,penalty:h(u=c,i,U).call(u,s,n)}),l[d]++,m.length>=n.maxPathsTotal))break}if(m.length===0){const s=(()=>{var F,k;const d=[];let M=0,x=e;for(;x&&x!==r;){const z=x.tagName.toLowerCase(),H=h(F=c,i,R).call(F,x,z);if(H===-1)return[];d.push({compound:`${z}:nth-of-type(${H})`,penalty:n.nthOfTypePenalty,level:M}),x=x.parentElement,M++}return h(k=c,i,$).call(k,e,n,d,r)?d:[]})();if(!s.length)throw new Error("No fallback CSS selector was not found");return[{selector:h(f=c,i,E).call(f,s),penalty:h(S=c,i,U).call(S,s,n)}]}m.sort((s,d)=>s.penalty-d.penalty);const C=[],p=new Set,g=P(s=>{var M,x;const d=h(M=c,i,E).call(M,s);!d||p.has(d)||(p.add(d),C.push({selector:d,penalty:h(x=c,i,U).call(x,s,n)}))},"append"),w=n.maxResults*Math.round(1+n.effort/100*49);t:for(const{path:s}of m){for(const d of h(y=c,i,N).call(y,s,e,n,r))if(g(d),C.length>=w)break t;g(s)}return C.sort((s,d)=>s.penalty-d.penalty),C.slice(0,n.maxResults)}};i=new WeakSet,A=P(function(e={}){(typeof e!="object"||e===null)&&(e={});const t={};t.root=e.root instanceof HTMLElement?e.root:document.documentElement,t.idFilter=typeof e.idFilter=="function"?e.idFilter:()=>!0,t.tagFilter=typeof e.tagFilter=="function"?e.tagFilter:()=>!0,t.classFilter=typeof e.classFilter=="function"?e.classFilter:r=>!r.match(/^(is-|has-|js-|css-)/),t.attrFilter=typeof e.attrFilter=="function"?e.attrFilter:(r,l)=>!/(?:width|height|style)$/i.test(r)&&l.length<=32&&!/^(?:\w+:)?\/\/?/i.test(l);const n={lengthPenaltyThreshold:32,maxCandidatesPerLevel:2500,maxPathsPerLevel:50,maxPathsTotal:1e3,maxResults:25,fuzziness:0,effort:50,timeout:1500};for(const r of Object.keys(n))t[r]=Number.isInteger(e[r])?Math.abs(e[r]):n[r];t.fuzziness>100&&(t.fuzziness=100),t.effort>100&&(t.effort=100),t.lengthPenaltyThreshold<1&&(t.lengthPenaltyThreshold=1),t.maxResults<1&&(t.maxResults=1),t.maxPathsTotal<t.maxResults&&(t.maxPathsTotal=t.maxResults),t.maxPathsPerLevel<t.maxResults&&(t.maxPathsPerLevel=t.maxResults),t.maxCandidatesPerLevel<t.maxPathsPerLevel&&(t.maxCandidatesPerLevel=t.maxPathsPerLevel);const a={idPenalty:1,tagPenalty:1.1,classPenalty:1.3,attrPenalty:1.25,attrMatchPenalty:1.2,nthOfTypePenalty:3,nthChildPenalty:6};for(const r of Object.keys(a))t[r]=Number.isFinite(e[r])?Math.abs(e[r]):a[r];return t},"#config"),D=P(function*(e,t,n){var C;let a=e,r=0;function*l(p,g=[],w={count:0}){if(!(w.count>=t.maxCandidatesPerLevel)){if(!p.length){w.count++,yield g;return}for(const b of p[0]){if(w.count>=t.maxCandidatesPerLevel)return;yield*l(p.slice(1),g.concat(b),w)}}}P(l,"combine");const m=[];for(;a&&a!==n;){m.push(h(C=c,i,j).call(C,a,t,r));const p=[...l(m)];p.sort((g,w)=>{var b,L;return h(b=c,i,U).call(b,g,t)-h(L=c,i,U).call(L,w,t)});for(const g of p)yield{candidate:g,level:r};a=a.parentElement,r++}},"#find"),N=P(function*(e,t,n,a){var r,l;if(!(e.length<=2))for(let m=1;m<e.length-1;m++){const C=[...e];C.splice(m,1),h(r=c,i,$).call(r,t,n,C,a)&&(yield*h(l=c,i,N).call(l,C,t,n,a),yield C)}},"#optimize"),j=P(function(e,t,n=0){var b,L;const a=[],r=e.getAttribute("id");r&&t.idFilter(r)&&a.push({compound:"#"+CSS.escape(r),penalty:t.idPenalty,level:n});const l=e.tagName.toLowerCase();if(t.tagFilter(l)){a.push({compound:l,penalty:t.tagPenalty,level:n});const o=h(b=c,i,R).call(b,e,l);o!==-1&&a.push({compound:`${l}:nth-of-type(${o})`,penalty:t.nthOfTypePenalty,level:n});const u=h(L=c,i,R).call(L,e);u!==-1&&a.push({compound:`:nth-child(${u})`,penalty:t.nthChildPenalty,level:n})}const m=P((o,u)=>{if(!Array.isArray(o)||o.length<2||!Number.isFinite(u))return;const f=Math.min(8,o.length);for(let S=0;S<f;S++){a.push({compound:`${l}${o[S]}`,penalty:u,level:n});for(let y=S+1;y<f;y++){const s=`${o[S]}${o[y]}`;a.push({compound:s,penalty:u,level:n}),a.push({compound:`${l}${s}`,penalty:u,level:n})}}},"mergeTwo"),C=P((o,u)=>{if(!Array.isArray(o)||o.length<3||!Number.isFinite(u))return;const f=Math.min(8,o.length);for(let S=0;S<f;S++)for(let y=S+1;y<f;y++)for(let s=y+1;s<f;s++){const d=`${o[S]}${o[y]}${o[s]}`;a.push({compound:d,penalty:u,level:n}),a.push({compound:`${l}${d}`,penalty:u,level:n})}},"mergeThree"),p=[];for(let o=0;o<e.classList.length;o++)if(t.classFilter(e.classList[o])){const u=`.${CSS.escape(e.classList[o])}`;p.push(u),a.push({compound:u,penalty:t.classPenalty,level:n})}m(p,t.classPenalty);const g=[],w=P(o=>o.replace(/\\/g,"\\\\").replace(/"/g,'\\"'),"safeValue");for(let o=0;o<e.attributes.length;o++){const u=e.attributes[o].name.toLowerCase(),f=`${e.attributes[o].value}`;if(!(u==="id"||u==="class")&&t.attrFilter(u,f)){const S=`[${CSS.escape(u)}${f.length?`="${w(f)}"`:""}]`;g.push(S),a.push({compound:S,penalty:t.attrPenalty,level:n});const y=f.match(/^(\w{2,12})/g);if(y&&y[0].length<f.length){const d=`[${CSS.escape(u)}^="${w(y[0])}"]`;a.push({compound:d,penalty:t.attrMatchPenalty,level:n})}const s=f.match(/(\w{2,12})$/g);if(s&&s[0].length<f.length){const d=`[${CSS.escape(u)}$="${w(s[0])}"]`;a.push({compound:d,penalty:t.attrMatchPenalty,level:n})}}}return m(g,t.attrPenalty),C([...p.slice(0,4),...g.slice(0,4)],Math.min(t.attrPenalty,t.classPenalty)),a},"#path"),E=P(function(e){if(!e.length)return"";let t=e[0],n=t.compound;for(let a=1;a<e.length;a++){const r=(e[a].level??0)-1===t.level;n=`${e[a].compound} ${r?"> ":""}${n}`,t=e[a]}return n},"#selector"),U=P(function(e,t){const n=e.reduce((r,l)=>r+l.compound.length,0),a=t.lengthPenaltyThreshold>0&&n>t.lengthPenaltyThreshold?n/t.lengthPenaltyThreshold:1;return Math.round(1e3*e.reduce((r,l)=>r*l.penalty*1,1)*a)/1e3},"#penalty"),R=P(function(e,t){if(!e.parentNode)return-1;let n=e.parentNode.firstChild;if(!n)return-1;let a=0;for(;n&&(Node.ELEMENT_NODE===n.nodeType&&(typeof t!="string"||n.tagName.toLowerCase()===t)&&a++,n!==e);)n=n.nextSibling;return a},"#indexOf"),$=P(function(e,t,n,a){var r;try{const l=a.querySelectorAll(h(r=c,i,E).call(r,n));return t.fuzziness>=100||t.fuzziness>0&&Math.floor(Math.random()*100)<t.fuzziness?l[0]===e:l.length===1}catch{}return!1},"#matches"),v(c,i),P(c,"Uindow_CSS");let T=c;const W=T.findOne.bind(T),q=T.findAll.bind(T);export{q as findAll,W as findOne};
|
|
28
|
+
//# sourceMappingURL=index.mjs.map
|
package/index.mjs.map
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["src/index.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["_Uindow_CSS_static", "config_fn", "find_fn", "optimize_fn", "path_fn", "selector_fn", "penalty_fn", "indexOf_fn", "matches_fn", "_Uindow_CSS", "element", "options", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "config", "__privateMethod", "startTime", "root", "shadowRoot", "pathsPerLevel", "candidates", "candidate", "level", "fallbackPath", "path", "current", "tag", "idxOfType", "a", "b", "results", "selectors", "append", "__name", "selector", "extendedMaxResults", "treatRaw", "optimized", "n", "v", "integers", "key", "floats", "curr", "combine", "paths", "counter", "node", "pathList", "index", "shorter", "elementId", "nthIdx", "mergeTwo", "items", "penalty", "end", "i", "j", "mergeThree", "k", "classSelectors", "attrSelectors", "safeValue", "val", "attrName", "attrValue", "startWord", "startSelector", "endWord", "endSelector", "isParent", "length", "acc", "pLength", "filterTag", "child", "domElements", "__privateAdd", "Uindow_CSS", "findOne", "findAll"]
|
|
6
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@uindow/css",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "CSS Selector Generator",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"module": "index.mjs",
|
|
7
|
+
"types": "types/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"require": "./index.js",
|
|
11
|
+
"import": "./index.mjs"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"index.js",
|
|
16
|
+
"index.js.map",
|
|
17
|
+
"index.mjs",
|
|
18
|
+
"index.mjs.map",
|
|
19
|
+
"types/index.d.ts"
|
|
20
|
+
],
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"author": "Mark Jivko <mark@uindow.com> (https://uindow.com)",
|
|
23
|
+
"homepage": "https://uindow.com",
|
|
24
|
+
"keywords": [
|
|
25
|
+
"css",
|
|
26
|
+
"uindow",
|
|
27
|
+
"selector",
|
|
28
|
+
"generator",
|
|
29
|
+
"css-selector",
|
|
30
|
+
"dom-selector",
|
|
31
|
+
"css-selector-generator",
|
|
32
|
+
"dom-selector-generator"
|
|
33
|
+
],
|
|
34
|
+
"scripts": {
|
|
35
|
+
"format": "prettier --write \"**/*.{js,cjs,ts}\"",
|
|
36
|
+
"lint": "eslint --fix --cache \"src/**/*.ts\"",
|
|
37
|
+
"build": "npm run lint && tsc && npm run format && node ./tools/build.cjs"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@typescript-eslint/eslint-plugin": "8.60.0",
|
|
41
|
+
"esbuild": "0.25.9",
|
|
42
|
+
"eslint": "8.57.1",
|
|
43
|
+
"eslint-config-prettier": "8.10.0",
|
|
44
|
+
"eslint-plugin-prettier": "4.2.1",
|
|
45
|
+
"prettier": "2.8.8",
|
|
46
|
+
"typescript": "6.0.3"
|
|
47
|
+
},
|
|
48
|
+
"repository": {
|
|
49
|
+
"type": "git",
|
|
50
|
+
"url": "git+https://github.com/uindow/css.git"
|
|
51
|
+
},
|
|
52
|
+
"publishConfig": {
|
|
53
|
+
"access": "public"
|
|
54
|
+
}
|
|
55
|
+
}
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Uindow's CSS Selector Generator
|
|
3
|
+
*
|
|
4
|
+
* @architect Mark Jivko <mark@uindow.com>
|
|
5
|
+
* @copyright © 2026-present Uindow™ (https://uindow.com)
|
|
6
|
+
* @license MIT
|
|
7
|
+
*
|
|
8
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
|
9
|
+
* a copy of this software and associated documentation files
|
|
10
|
+
* (the "Software"), to deal in the Software without restriction,
|
|
11
|
+
* including without limitation the rights to use, copy, modify, merge,
|
|
12
|
+
* publish, distribute, sublicense, and/or sell copies of the Software,
|
|
13
|
+
* and to permit persons to whom the Software is furnished to do so,
|
|
14
|
+
* subject to the following conditions:
|
|
15
|
+
*
|
|
16
|
+
* The above copyright notice and this permission notice shall be
|
|
17
|
+
* included in all copies or substantial portions of the Software.
|
|
18
|
+
*
|
|
19
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
20
|
+
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
21
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
22
|
+
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
23
|
+
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
24
|
+
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
|
|
25
|
+
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* Configuration options for the CSS selector generator
|
|
29
|
+
*/
|
|
30
|
+
export interface Uindow_CSS_Config {
|
|
31
|
+
/**
|
|
32
|
+
* The root element to search from. Selectors will be built relative to this
|
|
33
|
+
* element; nothing above it will appear in any generated selector.
|
|
34
|
+
*
|
|
35
|
+
* @default document.documentElement
|
|
36
|
+
*/
|
|
37
|
+
root: HTMLElement | Document;
|
|
38
|
+
/**
|
|
39
|
+
* Function that decides whether an HTML ID attribute may be used in a selector.
|
|
40
|
+
* Defaults to allowing all IDs.
|
|
41
|
+
*/
|
|
42
|
+
idFilter: (name: string) => boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Penalty applied to id selectors.
|
|
45
|
+
* Example: `#id`
|
|
46
|
+
*
|
|
47
|
+
* A lower value tends to yield more ID-based CSS selectors.
|
|
48
|
+
*
|
|
49
|
+
* @default 1
|
|
50
|
+
*/
|
|
51
|
+
idPenalty: number;
|
|
52
|
+
/**
|
|
53
|
+
* Function that decides whether an HTML tag name may be used in a selector.
|
|
54
|
+
* Defaults to allowing all tags.
|
|
55
|
+
*/
|
|
56
|
+
tagFilter: (name: string) => boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Penalty applied to tag selectors.
|
|
59
|
+
* Example: `div`
|
|
60
|
+
*
|
|
61
|
+
* A lower value tends to yield more tag-based CSS selectors.
|
|
62
|
+
*
|
|
63
|
+
* @default 1.1
|
|
64
|
+
*/
|
|
65
|
+
tagPenalty: number;
|
|
66
|
+
/**
|
|
67
|
+
* Function that decides whether a CSS class name may be used in a selector.
|
|
68
|
+
* Defaults to disallowing `is-*|has-*|js-*|css-*` classes.
|
|
69
|
+
*/
|
|
70
|
+
classFilter: (name: string) => boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Penalty applied to class name selectors.
|
|
73
|
+
* Example: `.button`
|
|
74
|
+
*
|
|
75
|
+
* A lower value tends to yield more class-based CSS selectors.
|
|
76
|
+
*
|
|
77
|
+
* @default 1.3
|
|
78
|
+
*/
|
|
79
|
+
classPenalty: number;
|
|
80
|
+
/**
|
|
81
|
+
* Function that decides whether an attribute `(name, value)` pair may be used
|
|
82
|
+
* in a selector. Defaults to allowing any attribute except `*style|*width|*height`
|
|
83
|
+
* that is shorter than 32 characters, and not a URL.
|
|
84
|
+
*/
|
|
85
|
+
attrFilter: (name: string, value: string) => boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Penalty applied to attribute selectors.
|
|
88
|
+
* Example: `[name]`, `[value="1"]`
|
|
89
|
+
*
|
|
90
|
+
* A lower value tends to yield more attribute-based CSS selectors.
|
|
91
|
+
*
|
|
92
|
+
* @default 1.25
|
|
93
|
+
*/
|
|
94
|
+
attrPenalty: number;
|
|
95
|
+
/**
|
|
96
|
+
* Penalty applied to prefix-matched and suffix-matched attribute selectors.
|
|
97
|
+
* Example prefix-matched attribute selector: `[name^="a"]`
|
|
98
|
+
* Example suffix-matched attribute selector: `[name$="z"]`
|
|
99
|
+
*
|
|
100
|
+
* A lower value tends to yield more CSS selectors that contain
|
|
101
|
+
* prefix-matched and suffix-matched attribute selectors.
|
|
102
|
+
*
|
|
103
|
+
* @default 1.2
|
|
104
|
+
*/
|
|
105
|
+
attrMatchPenalty: number;
|
|
106
|
+
/**
|
|
107
|
+
* Penalty applied to nth-of-type selectors.
|
|
108
|
+
* Example: `div:nth-of-type(1)`
|
|
109
|
+
*
|
|
110
|
+
* A lower value tends to yield more nth-of-type CSS selectors.
|
|
111
|
+
*
|
|
112
|
+
* @default 3
|
|
113
|
+
*/
|
|
114
|
+
nthOfTypePenalty: number;
|
|
115
|
+
/**
|
|
116
|
+
* Penalty applied to nth-child selectors.
|
|
117
|
+
* Example: `:nth-child(1)`
|
|
118
|
+
*
|
|
119
|
+
* A lower value tends to yield more nth-child CSS selectors.
|
|
120
|
+
*
|
|
121
|
+
* @default 6
|
|
122
|
+
*/
|
|
123
|
+
nthChildPenalty: number;
|
|
124
|
+
/**
|
|
125
|
+
* Apply a penalty to CSS selectors whose length exceeds this number of characters.
|
|
126
|
+
*
|
|
127
|
+
* A lower value tends to yield shorter CSS selectors.
|
|
128
|
+
* Must be greater than or equal to 1.
|
|
129
|
+
*
|
|
130
|
+
* @default 32
|
|
131
|
+
*/
|
|
132
|
+
lengthPenaltyThreshold: number;
|
|
133
|
+
/**
|
|
134
|
+
* Hard cap on the number of candidates yielded per level.
|
|
135
|
+
* Useful for very deep or very wide DOMs where the search space is large.
|
|
136
|
+
*
|
|
137
|
+
* Must be greater than or equal to `maxPathsPerLevel`.
|
|
138
|
+
*
|
|
139
|
+
* @default 2500
|
|
140
|
+
*/
|
|
141
|
+
maxCandidatesPerLevel: number;
|
|
142
|
+
/**
|
|
143
|
+
* Hard cap on the number of unique paths yielded per level.
|
|
144
|
+
* Useful for very deep or very wide DOMs where the search space is large.
|
|
145
|
+
*
|
|
146
|
+
* Must be greater than or equal to `maxResults`.
|
|
147
|
+
*
|
|
148
|
+
* @default 50
|
|
149
|
+
*/
|
|
150
|
+
maxPathsPerLevel: number;
|
|
151
|
+
/**
|
|
152
|
+
* Hard cap on the number of unique paths yielded in total.
|
|
153
|
+
* Useful for very deep or very wide DOMs where the search space is large.
|
|
154
|
+
*
|
|
155
|
+
* Must be greater than or equal to `maxResults`.
|
|
156
|
+
*
|
|
157
|
+
* @default 1000
|
|
158
|
+
*/
|
|
159
|
+
maxPathsTotal: number;
|
|
160
|
+
/**
|
|
161
|
+
* Maximum number of optimized selectors to return, sorted by increasing penalty.
|
|
162
|
+
*
|
|
163
|
+
* Must be greater than or equal to 1.
|
|
164
|
+
*
|
|
165
|
+
* @default 25
|
|
166
|
+
*/
|
|
167
|
+
maxResults: number;
|
|
168
|
+
/**
|
|
169
|
+
* Trade exclusivity for shorter selectors.
|
|
170
|
+
* Fuzziness defines the percentage of CSS selectors that match the target element first,
|
|
171
|
+
* while potentially also matching additional elements on the page.
|
|
172
|
+
* Set to `0` to ensure CSS selectors match the target element exclusively.
|
|
173
|
+
* Must be a positive integer between `0` and `100`.
|
|
174
|
+
*
|
|
175
|
+
* A higher value tends to yield shorter CSS selectors.
|
|
176
|
+
*
|
|
177
|
+
* @default 0
|
|
178
|
+
*/
|
|
179
|
+
fuzziness: number;
|
|
180
|
+
/**
|
|
181
|
+
* Trade processing time for shorter selectors.
|
|
182
|
+
* Spend more time optimizing candidate selectors for shorter and more desirable paths.
|
|
183
|
+
* Must be a positive integer between `0` and `100`.
|
|
184
|
+
*
|
|
185
|
+
* A higher value tends to yield shorter CSS selectors at the cost of extra processing time.
|
|
186
|
+
*
|
|
187
|
+
* @default 50
|
|
188
|
+
*/
|
|
189
|
+
effort: number;
|
|
190
|
+
/**
|
|
191
|
+
* Maximum time in milliseconds to spend searching before giving up and
|
|
192
|
+
* returning however many results have been found so far, or the nth-of-type fallback
|
|
193
|
+
* if none were found.
|
|
194
|
+
*
|
|
195
|
+
* An small additional delay will be incurred after the search, during the
|
|
196
|
+
* CSS path optimization phase.
|
|
197
|
+
*
|
|
198
|
+
* @default 1500
|
|
199
|
+
*/
|
|
200
|
+
timeout: number;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* CSS selector result
|
|
204
|
+
*/
|
|
205
|
+
export interface Uindow_CSS_Result {
|
|
206
|
+
/**
|
|
207
|
+
* Optimized CSS selector
|
|
208
|
+
*/
|
|
209
|
+
selector: string;
|
|
210
|
+
/**
|
|
211
|
+
* CSS selector penalty (the lower, the better)
|
|
212
|
+
*/
|
|
213
|
+
penalty: number;
|
|
214
|
+
}
|
|
215
|
+
export declare const findOne: (element: HTMLElement, options?: Partial<Uindow_CSS_Config>) => Uindow_CSS_Result;
|
|
216
|
+
export declare const findAll: (element: HTMLElement, options?: Partial<Uindow_CSS_Config>) => Uindow_CSS_Result[];
|