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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@ahamove/asl

v0.0.10

Published

Aha Query Language

Downloads

24

Readme

Table of content

Variables:

string

Example:

declare @name1 = "Linh"
declare @name2 = 'Linh'

number

Example:

declare @year = 2000
declare @date = 2.9

object

Example:

declare @profile = {
	"name": "Linh",
	"age": 18
}

array

Example:

declare @vietlott = (1, 2, 3, 4)

// with multiple types
declare @something = (1, 2.4, "Linh")

Select statement:

with metabase

Example:

select * from metabase
where metabase_id = 11106

-- with alias
select * from metabase 300 as card1
where metabase_id = 11106

-- with where query
select * from metbase 300
where
	name = {{'Linh'}}
	age = {{18}}

-- with variable
declare @matabase_card_id = 300
declare @name = "Linh"
declare @age = 18

select * from metabase @matabase_card_id
where
	name = {{@name}}
	age = {{18}}

with url

Example:

select * from url
where url_id = 'https://jsonplaceholder.typicode.com/todos/1'

-- with alias
select * from url as link1
where url_id = 'https://jsonplaceholder.typicode.com/todos/1'

-- with query string
select * from url as link1
where url_id = 'https://jsonplaceholder.typicode.com/todos/1?name=Linh'

-- with where query
select * from url
where 
	url_id = 'https://jsonplaceholder.typicode.com/todos/1'
	name = {{'Linh'}}

-- with variable
declare @url = 'https://jsonplaceholder.typicode.com/todos/1'
declare @name = "Linh"

select * from url as link2
where 
	url_id = @url
	name = {{@name}}

with tile38

Example:

select * from tile38
where 
	tile38_id = 'sup--location'
	query = "nearby sup--location limit 1 points current_points"

-- with alias
select * from tile38 as sp
where 
	tile38_id = 'sup--location'
	query = "nearby sup--location limit 1 bounds current_bound"

-- or with sql style
declare @wheels = (1, 2, 3, 4)

select * from tile38
where 
	tile38_id = 'sup--location'
	speed >= {{70}}
	age <= {{24}}
	nearby in bounds(current_bound) and
	-- this would be equivlent to bounds(30, -110, 40, -100)
	wheels in @wheels
limit 10

Where

equal

Example:

select * from metabase 11106
where name = "Linh"

not equal

Example:

select * from metabase 11106
where name != "Linh"

greater

Example:

select * from metabase 11106
where age > 18

greater or equal

Example:

select * from metabase 11106
where age >= 18

less

Example:

select * from metabase 11106
where age < 20

less or equal

Example:

select * from metabase 11106
where age <= 20

in

Example:

select * from metabase 11106
where age in (18, 20, 24)

not in

Example:

select * from metabase 11106
where age not in (18, 20, 24)

is

Example:

select * from tile38 'sup--location'
where query is "name=Linh&age=18"

query

Example:

-- with normal style
select * from metabase
where metabase_id = 11106 and name = {{"Linh"}} and age = {{18}}

-- with string style
select * from metabase
where metabase_id = 11106 and query = "name=Linh&age=18"

Tile38

nearby

NEARBY searches a collection for objects that intersect a specified radius.

![Search Nearby](https://github.com/tidwall/tile38/raw/master/.github/images/search-nearby.png =400x)

Example:

select * from tile38
where 
	tile38_id = 'sup--location'
	query is "nearby sup--location limit 1 points current_points"

-- or with sql style
declare @wheels = (1, 2, 3, 4)

select * from tile38
where 
	tile38_id = 'sup--location'
	speed >= 70 or 
	age <= 24 and 
	nearby in bounds(current_bound) and
	wheels in @wheels
limit 10

intersects

INTERSECTS searches a collection for objects that intersect a specified bounding area.

![Search Intersects](https://github.com/tidwall/tile38/raw/master/.github/images/search-intersects.png =400x)

Example:

select * from tile38
where 
	tile38_id = 'sup--location'
	query = "intersects sup--location limit 1 points current_points"

-- or with sql style
declare @wheels = (1, 2, 3, 4)

select * from tile38
where 
	tile38_id = 'sup--location'
	speed >= 70 or 
	age <= 24 and 
	intersects in bounds(current_bound) and
	wheels in @wheels
limit 10

scan

Example:

select * from tile38 scan
where 
	tile38_id = 'sup--location'
	query = "scan sup--location limit 1 points current_points"

-- or with sql style
declare @wheels = (1, 2, 3, 4)

select * from tile38 'sup--location'
where 
	speed >= 70 or 
	age <= 24 and 
	scan in bounds(current_bound) and
	wheels in @wheels

within

WITHIN searches a collection for objects that are fully contained inside a specified bounding area.

![Search Within](https://github.com/tidwall/tile38/raw/master/.github/images/search-within.png =400x)

Example:

select * from tile38
where 
	tile38_id = 'sup--location'
	query = "within sup--location limit 1 points current_points"

-- or with sql style
declare @wheels = (1, 2, 3, 4)

select * from tile38
where 
	tile38_id = 'sup--location' and
	speed >= 70 or 
	age <= 24 and 
	within = bounds(current_bound) and
	wheels in @wheels

Search options

Detect (only tile38)

The detect may be one of the following values.

  • inside is when an object is inside the specified area.
  • outside is when an object is outside the specified area.
  • enter is when an object that was not previously in the fence has entered the area.
  • exit is when an object that was previously in the fence has exited the area.
  • cross is when an object that was not previously in the fence has entered and exited the area

Example:

select * from tile38
where 
	tile38_id = 'sup--location' and
	query = "nearby sup--location detect inside, outside limit 1 points current_points"

-- or with sql style
declare @wheels = (1, 2, 3, 4)

select * from tile38
where 
	tile38_id = 'sup--location' and
	speed >= 70 or 
	age <= 24 and 
	nearby in bounds(current_bound) and
	detect in ('inside', 'outside')
	wheels in @wheels

Sparse (only tile38)

This option will distribute the results of a search evenly across the requested area.
This is very helpful for example; when you have many (perhaps millions) of objects and do not want them all clustered together on a map. Sparse will limit the number of objects returned and provide them evenly distributed so that your map looks clean.

You can choose a value between 1 and 8. The value 1 will result in no more than 4 items. The value 8 will result in no more than 65536. 1=4, 2=16, 3=64, 4=256, 5=1024, 6=4098, 7=16384, 8=65536

| No Sparsing | Sparse 1 | Sparse 2 | Sparse 3| Sparse 4 | Sparse 5 | |--|--|--|--|--|--| | ![Search Within](https://github.com/tidwall/tile38/raw/master/.github/images/sparse-none.png =100x) | ![Search Within](https://github.com/tidwall/tile38/raw/master/.github/images/sparse-1.png =100x)|![Search Within](https://github.com/tidwall/tile38/raw/master/.github/images/sparse-2.png =100x)|![Search Within](https://github.com/tidwall/tile38/raw/master/.github/images/sparse-3.png =100x)|![Search Within](https://github.com/tidwall/tile38/raw/master/.github/images/sparse-4.png =100x)|![Search Within](https://github.com/tidwall/tile38/raw/master/.github/images/sparse-5.png =100x)|

Please note that the higher the sparse value, the slower the performance. Also, LIMIT and CURSOR are not available when using SPARSE. Example:

select * from metabase
where metabase_id = 11106 and name = "Linh"

Limit

LIMIT can be used to limit the number of objects returned for a single search request.

Example:

-- with metabase card
select * from metabase
where metabase_id = 11106
limit 100

-- with url
select from url
where 
	name = {{'Linh'}} and 
	url_id = 'https://jsonplaceholder.typicode.com/todos/1'
limit 100


-- with tile38
declare @wheels = (1, 2, 3, 4)

select from tile38 'sup--location'
where 
	speed >= 70 or 
	age <= 24 and 
	within in bounds(current_bound) and
	wheels in @wheels
limit 100

Output formats

count - Total object count sent in the response. When LIMIT or CURSOR are provided, COUNT returns the number of results that would otherwise be sent as objects. When LIMIT is not specified, COUNT totals up all items starting from provided CURSOR position (or zero if a cursor is omitted). LIMIT and CURSOR options are ignored

ids - A list of IDs belonging to the key. Will not return the objects.

objects - A list of GeoJSON objects.

points - A list of standard latitude, longitude points.

bounds - A list of minimum bounding rectangle.

hashes - A list of Geohash. Requires a precision of 1 to 22.

Area formats

Below is a complete list of area formats. These formats are shared by the WITHIN and INTERSECTS commands.

Important to note that all coordinates are in Longitude, Latitude order.

Bounds

A bounding box consists of two points. The first being the southwestern most point and the second is the northeastern most point.

Objects

GeoJSON is an industry standard format for representing a variety of object types including a point, multipoint, linestring, multilinestring, polygon, multipolygon, geometrycollection, feature, and featurecollection. Tile38 supports all of the standards with these exceptions.

  1. The crs member is not supported and will be ignored. The CRS84/WGS84 projection is assumed.
  2. Any member that is not recognized (including crs) will be ignored.
  3. All coordinates can be 2 or 3 axes. Less than 2 axes or more than 3 will result in a parsing error.

* All ignored members will not persist.

Example:

-- with query string
select from tile38 'sup--location'
where query is 'within sup--location limit 1 objects {"type":"Polygon","coordinates":[[[-111.9787,33.4411],[-111.8902,33.4377],[-111.895,33.2892],[-111.9739,33.2932],[-111.9787,33.4411]]]}'

-- or with sql style
declare @wheels = (1, 2, 3, 4)
declare @object = {
  "type": "Polygon",
  "coordinates": [
    [
      [
        -111.9787,
        33.4411
      ],
      [
        -111.8902,
        33.4377
      ],
      [
        -111.895,
        33.2892
      ],
      [
        -111.9739,
        33.2932
      ],
      [
        -111.9787,
        33.4411
      ]
    ]
  ]
}

select from tile38 'sup--location'
where 
	speed >= {{70}} and 
	age <= {{24}} and 
	within in objects(@object) and
	wheels in {{@wheels}}

Circle

A circle with the specified center and radius.

Example:

select * from tile38
where 
	tile38_id = 'sup--location' and
	query = "nearby sup--location points 21.0247374 105.8058525 1000"

-- or with sql style
select * from tile38
where 
	tile38_id = 'sup--location' and
	speed >= 70 or 
	age <= 24 and 
	nearby in points(21.0247374, 105.8058525, 1000)

Tile

An XYZ tile is rectangle bounding area on earth that is represented by an X, Y coordinate and a Z (zoom) level. Check out maptiler.org for an interactive example.

Quadkey

A QuadKey used the same coordinate system as an XYZ tile except that the string representation is a string characters composed of 0, 1, 2, or 3. For a detailed explanation checkout The Bing Maps Tile System.

Hash

A geohash is a string respresentation of a point. With the length of the string indicating the precision of the point.

Example:

-- hash 9tbnthxzr # this would be equivlent to 'POINT 33.5123 -112.2693'

select * from tile38
where 
	tile38_id = 'sup--location' and
	query = "nearby sup--location hash 9tbnthxzr"

-- or with sql style
select * from tile38
where 
	tile38_id = 'sup--location'
	speed >= 70 or 
	age <= 24 and 
	nearby in hash("9tbnthxzr")

Join

Syntax

-- source_type = ['metabase'|'url'|'tile38']
select from source_type [source]
join source_type on source_type.[column_name] = source_type.[column_name]
where ...

Example:

declare @url = 'https://jsonplaceholder.typicode.com/todos/1'
declare @card_id = 11106
declare @name = "Linh"

-- join url with metabase
select * from url @url
join metabase on url.order_id = metabase.order_id
where name = {{@name}} and metabase_id = 11106 and url_id = @url

-- join url with tile38
select * from url
join tile38 on url.order_id = tile38.order_id
where 
	url_id = @url
	tile38_id = 'order'
	name = {{@name}}
	speed >= 70 or 
	age <= 24 and 
	nearby in hash("9tbnthxzr")

-- join metabase with tile38
select * from metabase
join tile38 on metabase.order_id = tile38.order_id
where 
	metabase_id = @card_id
	tile38_id = 'order'
	speed >= {{70}} or 
	age <= {{24}} and 
	nearby in hash("9tbnthxzr")

Create

config

Example:

create config

-- with alias name
create config 'my-config'

widget

metabase

Example:

create widget 'test' (
	metabase_id = 11106,
	type = 'metabase',
	column = 'name'
)

-- with alias name
declare @column_name = 'name'

create widget 'my-metabase-card' (
	metabase_id = 11106,
	type = 'metabase',
	column = @column_name'
)

bar chart

Example:

-- with horizontal bar
create widget 'test' (
	metabase_id = 11106,
	type = 'horizontal-bar',
	column = 'name'
)
	
-- with vertical bar
create widget 'test' (
	metabase_id = 11106,
	type = 'vertical-bar',
	column = 'name'
)

Alter

config

Example:

alter config

-- doesn't support alias name

widget

metabase

Example:

alter widget 'HSX20XS'(
	type = 'metabase'
	column = 'name'
)

alter widget 'HSX20XS' (
	label = 'Yesss' -- label must be unique
	type = 'metabase'
	column = 'name'
)

bar chart

Example:

-- with horizontal bar
alter widget 'HSX20XS' (
	type = 'horizontal-bar'
	column = 'name'
)
	
-- with vertical bar
alter widget 'HSX20XS' (
	label = 'Yesss' -- label must be unique
	type = 'vertical-bar'
	column = 'name'
)

Drop

config

Example:

drop config

-- doesn't support alias name

widget

Syntax

-- with id
drop widget 'HSX20XS'

-- with label
-- it will delete all widgets has the label 'Yesss'
drop widget 'Yesss'

Builtin constants

current_bounds

current_points

current_features