npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@quanvndev/waterx

v1.0.5

Published

- @___@ I dont know why i named that lol - Extendsion : waterx - Css support : Yes - Typescript : No - Autocomplete : No - Language: The Water language

Downloads

3

Readme

1.Named: Water Hype ( Fast hydration process )

  • @___@ I dont know why i named that lol
  • Extendsion : waterx
  • Css support : Yes
  • Typescript : No
  • Autocomplete : No
  • Language: The Water language

2. Process

1.Hydration process (Server_side)

2.Poppulating process (Server_side)

3.Caching (Server_side)

4.Repopulating (Client_side)


1. Precaching every element (May make the side unresponeable when developing)

  • Caching using RAM (Variable)
  • Caching using file (Cache file)
  • Caching using database :>>
var prebuildHTML = {}

var prebuildJS = {}

2.Client side caching (this was hard bro)

#hard

Client side caching using service worker api was such a hardcore and nightmare for me bruh

The code belike worker.js:

const Cacheing_Html = async () => {
    console.log("Wait")
    const cache = await caches.open("v1");
    console.log(link)
    const response = await fetch(`/html/${link}`);
    const data = await response.json();
    console.log(data)
    if(link == "index") {
        cache.put(`/`, new Response(data.html));
        cache.put(`/html/${link}`, new Response(JSON.stringify(data)));
    } else {
        cache.put(`/${link}`, new Response(data.html));
        cache.put(`/html/${link}`, new Response(JSON.stringify(data)));
    }
    const response2 = await fetch(`/js/${link}`);
    const data2 = await response2.json();
    cache.put(`/js/${link}`, new Response(JSON.stringify(data2)));
}
self.addEventListener('fetch', (event) => {
    const url = event.request.url;
    var parts = url.split("/"); // split the URL by /
    var lastPart;
    if (parts.length === 2) { // check if the array has only one element
        lastPart = "index"; // return the string "index" as the last part
    } else {
        lastPart = parts.pop(); // get the last element of the array
        if (lastPart === "") { // check if the last element is empty
            lastPart = parts.pop(); // pop again to get the previous element
        }
    }
    console.log(lastPart); // index
    if (lastPart == "index" || lastPart == link) {
      event.respondWith(caches.open("v1").then((cache) => {
        return cacheFirst(event.request.url);
      }));
    } else {
    }
});

3. Server side static page (Caching client side)

#hard

I dont know how but yeah.


1.Recomplie waterx file to javascript and HTML

#hard

1. [DEPRICATE] Divided two of those using -----

yeah I dont know why I using -----

var javascriptPart = content.split("-----")[0]
var htmlPart = content.split("-----")[1]

2. repopulate component

Just simple regex matching

var components = htmlPart.match(/=?{\S+?}/gm);
const title_head = title[0].split(":")[1].trim()

1.Subtask : Adding function or value into props of an element (X)

Who no what I did

2.Subtask : Rewrote Post / Pre javascript for loading page an make it interactive (X)

3.Subtask : [[Caching]] (X)

4. Subtask : Adding css (Today)

List of work todo:

  • [x] Thinking about when to send it (Hmm) ✅ 2024-01-25
  • [x] When to populate in client to aim for best performance ✅ 2024-01-25
  • [x] Remove the heck ----- ✅ 2024-01-25
  • [x] Write Css
  • [x] Caching using file

5. Task that I dont know why I did:>

  • [x] Adding title metadata ✅ 2024-01-25 #normal
  • [x] Adding javascript function inline ✅ 2024-01-25 #normal
  • [x] Cached (The hardest thing todo) ✅ 2024-01-25 #hard

#hard

1.A process to convert the hydration html / javascript to minimal javascript / compressed html

Not yet implented


#normal

Client side population process

  • Damn it easy as this:
	function hydrate(filename_or_path) {
	
		const data = complie(parse("index.waterx"), "index.waterx")
	
		// if(!prebuildHTML["index.langx"]) {
	
		prebuildHTML["index.waterx"] = data[0]
	
		prebuildJS["index.waterx"] = data[1]
	
		// }
	
		const js = data[2]
	
	  
	
		return js
	
	}

Will me more


1. Basic syntax

Using ----- at a separator for javascript and html (Removed)

function Increase() {

    a++;

}
<div>

    <h1>{a}</h1>

    <button onClick={Increase}>Click me</button>

</div>

All the variable which appear in the HTML code as {} Will be populate into span tag

2. Special Keyword

Added soon