1.2.0 โ€ข Published 12 months ago

@igor.dvlpr/magic-queryselector v1.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
12 months ago

๐Ÿ“ƒ Table of contents


๐ŸŽฌ Demonstration

Here's magic-querySelector in action.

https://github.com/user-attachments/assets/eb0b6695-be60-4a6e-b935-5996b40c5d78

https://github.com/user-attachments/assets/2251724d-98d7-4deb-8a82-8b4f0a6a6e31


๐Ÿ•ต๐Ÿผ Usage

Install it by executing:

npm i -D "@igor.dvlpr/magic-queryselector"

Including the magic-queryselector into your project depends on the language of it.

Please see the appropriate section for your project:


TypeScript

If you want to use it with TypeScript, you need to copy the following code

import '@igor.dvlpr/magic-queryselector'

and then do one of the following:

[ 1st option ]

Create a d.ts file (recommended)

!WARNING This method requires a valid tsconfig.json file to be present in the root of your project.

Create a magic.d.ts file in the root directory of your project and add the snippet you copied:

magic.d.ts

import '@igor.dvlpr/magic-queryselector'

That's it! ๐Ÿฅณ You're all set up.

!TIP TypeScript server sometimes likes to play games, if the patch doesn't work immediately please restart TypeScript server or Visual Studio Code.


[ 2nd option ]

Add to the entrypoint

Add the code snippet you copied to the top of your entrypoint/main TypeScript file.

index.ts

import '@igor.dvlpr/magic-queryselector'

!TIP TypeScript server sometimes likes to play games, if the patch doesn't work immediately please restart TypeScript server or Visual Studio Code.


JavaScript

!NOTE If you want to use it with JavaScript, you don't need to do anything besides installing the package.

!TIP TypeScript server sometimes likes to play games, if the patch doesn't work immediately please restart TypeScript server or Visual Studio Code.


๐Ÿค– Implementation

This patch extends the default (return) type inference of TypeScript by inferring the types from the input string containing selectors/combinators passed to querySelector() / querySelectorAll().

!NOTE querySelector() will return the type listed in the table below, e.g. HTMLDivElement, while querySelectorAll() will return NodeListOf<T> of the same type, e.g. NodeListOf<HTMLDivElement>.

For brevity this table only shows the types for querySelector().

Read more about selector structure External link and selectors and combinators External link on MDN.

The following table shows which selectors/combinators are supported along with the inferred return types for the given examples.

Implementation table
Selector/CombinatorExampleCompatibilityInferenceBefore/After
Type + IDdiv#appโœ…PatchedElement/HTMLDivElement
Type + Classa.myLinkโœ…PatchedElement/HTMLAnchorElement
Type + Attributea[title]โœ…PatchedElement/HTMLAnchorElement
Descendantdiv videoโœ…PatchedElement/HTMLVideoElement
Childmain > aโœ…PatchedElement/HTMLAnchorElement
Next-siblingdiv + spanโœ…PatchedElement/HTMLSpanElement
Subsequent-siblingh1 ~ preโœ…PatchedElement/HTMLPreElement
Pseudo-class :root:rootโœ…PatchedElement/HTMLHtmlElement
Column (1)col \|\| tdโœ…PatchedElement/HTMLTableCellElement
Universal*โ€”NativeElement/Element
Typeliโ€”NativeHTMLLIElement/HTMLLIElement
ID#shareโ€”NativeElement/Element
Class.footerโ€”NativeElement/Element
Attribute[title]โ€”NativeElement/Element

(1) The column combinator is a highly-experimental upcoming combinator "that is placed between two CSS selectors. It matches only those elements matched by the second selector that belong to the column elements matched by the first." (source: MDN )


โœจ Examples

main.js

const video = document.querySelector('div#app > video') // HTMLVideoElement | null
const audios = document.querySelectorAll('div#app > audio') // NodeListOf<HTMLAudioElement>

if(video) {
  video.src = '<some_URL>' // now we can access all <video> properties and methods
}

if(audios.length > 0) {
  audios[0].src = '<some_URL>' // ๐Ÿ˜€๐Ÿ˜€๐Ÿ˜€
}

๐Ÿ“ Changelog

๐Ÿ“‘ Changelog is available here: CHANGELOG.md.


๐Ÿชช License

Licensed under the MIT license which is available here, MIT license.


๐Ÿงฌ Related

@igor.dvlpr/jmap

๐Ÿ•ถ๏ธ Reads a JSON file into a Map. ๐ŸŒป

@igor.dvlpr/extendable-string

๐Ÿฆ€ ExtendableString allows you to create strings on steroids that have custom transformations applied to them, unlike common, plain strings.. ๐Ÿช€

@igor.dvlpr/unc-path

๐Ÿฅฝ Provides ways of parsing UNC paths and checking whether they are valid. ๐ŸŽฑ

@igor.dvlpr/duoscribi

โœ’ DรบรถScrรญbรฎ allows you to convert letters with diacritics to regular letters. ๐Ÿค“

@igor.dvlpr/node-clone-js

๐Ÿงฌ A lightweight JavaScript utility allowing deep copy-by-value of nested objects, arrays and arrays of objects. ๐Ÿช


๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป Author

Created by Igor Dimitrijeviฤ‡ (@igorskyflyer).