nest.land icon indicating copy to clipboard operation
nest.land copied to clipboard

Use /x or /mod instead of /package

Open martonlederer opened this issue 3 years ago • 9 comments

Right now we are using the /package/:pkgname route for modules. To align more with the Deno philosophy, we could switch to /x/:modname or /mod/:modname

martonlederer avatar Oct 05 '20 07:10 martonlederer

I completely agree After that it would also be a good idea to replace all occurrences of the word package by module in the internal code

SteelAlloy avatar Oct 05 '20 08:10 SteelAlloy

We could also add a simple redirect for /package/:pkgname. Luckily we don't have it in the actual registry URLs

martonlederer avatar Oct 05 '20 08:10 martonlederer

I like this idea. I would prefer not to have /x (just to avoid confusion between x.nest.land and nest.land/x) unless we can get something working like how deno.land/x does it...

Though, I think @maximousblk has looked into this before, and it may be more effort than I think.

Regardless, @martonlederer's idea of a redirect from the current references would be absolutely critical.

t8 avatar Oct 07 '20 14:10 t8

It can be done with cloudflare workers. We should talk about this too in our meeting

martonlederer avatar Oct 07 '20 15:10 martonlederer

it can also be done with vercel functions. I couldn't implement it in a simple way earlier because the URLs for the raw and web versions were way different. It won't take much effort if the routes work the same way on the web and in deno

what we have now:

  • URL for web: https://nest.land/package/eggs/files/mod.ts
  • URL for deno: https://x.nest.land/[email protected]/mod.ts note: the website is client side rendered so increases complexity when requesting a specific version. also, the current website supports linking to a specific version using a ...?v=0.2.3 query, but that doesn't work for the /files route. (bug?)

what we need:

then we can create a serverless function to forward the requests to the right place and deploy that to https://nest.land/...

you can boil all of that down to "the site is inconsistent"

maximousblk avatar Oct 07 '20 17:10 maximousblk

Use the term "module" instead of "library" or "package".

For clarity and consistency avoid the terms "library" and "package". Instead use "module" to refer to a single JS or TS file and also to refer to a directory of TS/JS code.

https://deno.land/[email protected]/contributing/style_guide#use-the-term-quotmodulequot-instead-of-quotlibraryquot-or-quotpackagequot

I think we should use https://deno.land/std for Standard Library and https://deno.land/x for Third Party Modules just like the https://deno.land/.

VienDinhCom avatar Oct 15 '20 03:10 VienDinhCom

Hi @Maxvien! Thanks for the input.

This was our original plan for the system, however, we encountered some technical issues with that. Because our API is completely separate from the site, we had to put x on its own subdomain.

I wouldn't be against investigating a solution to allow for the /x and /std routes on Nest.land, but I personally do not know of a way around this issue. Note: We'd like to keep our Vercel sponsorship, as our site development/deployment workflow is massively simplified this way.

t8 avatar Oct 16 '20 02:10 t8

I wouldn't be against investigating a solution to allow for the /x and /std routes on Nest.land, but I personally do not know of a way around this issue. Note: We'd like to keep our Vercel sponsorship, as our site development/deployment workflow is massively simplified this way.

If I'm understanding this correctly, we should be able to get away with setting up routes in the vercel.json file. See here for more info.

Basically at the root of the repo we would create the vercel.json file, and add something like this:

{
  "routes": [
    { "source": "/x/(.*)", "destination": "https://x.nest.land/$1" },
    { "source": "/std/(?<ver>[^/]+)/(.*)", "destination": "https://x.nest.land/std@$ver\$STD_VERSION/$1" }
  ]
}

jasonappah avatar Oct 26 '20 22:10 jasonappah

yes we can set the routes in the vercel.json file but that won't let us dynamically serve the website and raw module based on the request.

maximousblk avatar Oct 27 '20 03:10 maximousblk