From 2c9ce0f8c03ebaa7e31ad25ce849a629bde1d0d6 Mon Sep 17 00:00:00 2001 From: "Dilip Kr. Shukla" Date: Fri, 3 Dec 2021 15:25:44 +0100 Subject: [PATCH 01/17] migrate to cloudflare services --- .gitignore | 1 + css/style.css | 3 - deploy.js | 110 -- dom/main.js | 25 - functions/main.js | 1 - functions/package/[[package]].js | 80 + functions/remove-slash.js | 31 - importmap-generator.js | 24 - index.html | 25 - package-lock.json | 3186 ++++++++++++++++++++++++++++++ package.html | 53 - package.json | 29 + packages.html | 25 - server.js | 123 -- 14 files changed, 3296 insertions(+), 420 deletions(-) create mode 100644 .gitignore delete mode 100644 css/style.css delete mode 100644 deploy.js delete mode 100644 dom/main.js delete mode 100644 functions/main.js create mode 100644 functions/package/[[package]].js delete mode 100644 functions/remove-slash.js delete mode 100644 importmap-generator.js delete mode 100644 index.html create mode 100644 package-lock.json delete mode 100644 package.html create mode 100644 package.json delete mode 100644 packages.html delete mode 100644 server.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/css/style.css b/css/style.css deleted file mode 100644 index ac93dc6..0000000 --- a/css/style.css +++ /dev/null @@ -1,3 +0,0 @@ -jspm-package-name, jspm-package-version, jspm-package-description, jspm-package-license, jspm-package-file{ - display: block; -} \ No newline at end of file diff --git a/deploy.js b/deploy.js deleted file mode 100644 index 28fe663..0000000 --- a/deploy.js +++ /dev/null @@ -1,110 +0,0 @@ -// currently copy of server.js with Deno.readFile instead of fetch -import { serve } from "https://deno.land/std@0.116.0/http/server.ts"; -import { contentType, lookup } from "https://deno.land/x/media_types@v2.11.0/mod.ts"; -// import { removeSlashes } from "./functions/remove-slash.js"; - -const assetMap = { - "/": "./index.html", - "/dom/main.js": "./dom/main.js", - "/functions/main.js": "./functions/main.js", - "/functions/remove-slash.js": "./functions/remove-slash.js", - "/packages": "./packages.html", - "/packages/[package]": "./package.html", - "/packages/[package]/css/style.css": "./css/style.css", - "/packages/[package]/dom/main.js": "./dom/main.js", - "/packages/[package]/functions/main.js": "./functions/main.js", - "/packages/[package]/functions/remove-slash.js": "./functions/remove-slash.js", - "/packages/[package]/components/package.js": "./components/package.js", -}; - -async function requestHandler(request) { - try { - const site = request.headers.get("sec-fetch-site"); - if (site !== "same-origin") { - // 👻 - } - const mode = request.headers.get("sec-fetch-mode"); - const dest = request.headers.get("sec-fetch-dest"); - - const { pathname } = new URL(request.url); - - const staticAsset = assetMap[pathname]; - - if (staticAsset) { - const response = await Deno.readFile(staticAsset); - - return new Response(response, { - headers: { "content-type": contentType(lookup(staticAsset)) }, - }); - } - - // const [pathPrefix, packageName] = removeSlashes(pathname).split("/"); - - if (pathname.startsWith("/packages/")) { - const packageName = pathname.substring(10); - - if (packageName) { - if (mode === "navigate" || dest === "document") { - const response = await Deno.readFile(assetMap["/packages/[package]"]) - - return new Response(response, { - headers: { "content-type": contentType("html") }, - }); - } - - if (dest === "style") { - const [, cssFilePath] = packageName.split('css/'); - const response = await Deno.readFile(assetMap[`/packages/[package]/css/${cssFilePath}`]); - - return new Response(response, { - headers: { "content-type": contentType("css") }, - }); - } - - if (dest === "script") { - const jsContexts = ['functions/', 'components/', 'dom/']; - const jsContext = jsContexts.find(jsContext => packageName.includes(jsContext)); - - if(jsContext){ - const [, jsFilePath] = packageName.split(jsContext) - const response = await Deno.readFile(assetMap[`/packages/[package]/${jsContext}${jsFilePath}`]); - - return new Response(response, { - headers: { "content-type": contentType("js") }, - }); - } - } - } - } - - if (pathname.startsWith("/api/")) { - const packageName = pathname.substring(5); - const NPM_PROVIDER_URL = "https://ga.jspm.io/npm:"; - - let version = packageName.split("@")[packageName.startsWith('@') ? 2 : 1]; - - if (!version) { - const response = await fetch(`${NPM_PROVIDER_URL}${packageName}`); - version = await response.text(); - } - - return fetch(`${NPM_PROVIDER_URL}${packageName}@${version}/package.json`); - } - - return new Response("404", { - headers: { "content-type": contentType("html") }, - }); - } catch (error) { - return new Response(error.message || error.toString(), { status: 500 }); - } -} - -if (import.meta?.main) { - const timestamp = Date.now(); - const humanReadableDateTime = new Date(timestamp).toLocaleString(); - - console.log("Current Date: ", humanReadableDateTime); - console.info(`Server Listening on http://localhost:8000`); - - await serve(requestHandler); -} diff --git a/dom/main.js b/dom/main.js deleted file mode 100644 index a2614b5..0000000 --- a/dom/main.js +++ /dev/null @@ -1,25 +0,0 @@ -import { render, jsx } from 'nano-jsx'; -import { marked } from 'marked'; -import Package from '../components/package.js'; - -async function main({ mountDOMElement, packageName }) { - try { - const { default: data } = await import(`/api/${packageName}`, { - assert: { type: "json" }, - }); - - const { name, description, keywords, version, homepage, license, files, exports } = data; - - // /^readme\.[^\.]+$/i - const readme = files.find(file => file.toLowerCase() === 'readme.md'); - // Dry this - const readmeFile = await fetch(`https://ga.jspm.io/npm:${name}@${version}/${readme}`); - const readmeFileContent = await readmeFile.text(); - const html = marked.parse(readmeFileContent); - render(jsx`<${Package} name=${name} description=${description} version=${version} homepage=${homepage} license=${license} files=${files} exports=${exports} readme=${html} />`, mountDOMElement) - } catch (error) { - console.error(error); - } -} - -export { main }; diff --git a/functions/main.js b/functions/main.js deleted file mode 100644 index e4180d9..0000000 --- a/functions/main.js +++ /dev/null @@ -1 +0,0 @@ -export { removeSlashes } from './remove-slash.js'; \ No newline at end of file diff --git a/functions/package/[[package]].js b/functions/package/[[package]].js new file mode 100644 index 0000000..65af554 --- /dev/null +++ b/functions/package/[[package]].js @@ -0,0 +1,80 @@ +import { Helmet, jsx, renderSSR } from "nano-jsx"; +import { marked } from "marked"; +import Package from "../../components/package.js"; + +export async function onRequestGet(context) { + // Contents of context object + const { + request, // same as existing Worker API + env, // same as existing Worker API + params, // if filename includes [id] or [[path]] + waitUntil, // same as ctx.waitUntil in existing Worker API + next, // used for middleware or to fetch assets + data, // arbitrary space for passing data between middlewares + } = context; + + const NPM_PROVIDER_URL = "https://ga.jspm.io/npm:"; + const packageName = params.package.join("/"); + + const jspmPackage = await fetch( + `${NPM_PROVIDER_URL}${packageName}/package.json`, + ); + const { + name, + description, + keywords, + version, + homepage, + license, + files, + exports, + } = await jspmPackage.json(); + const readmeFileName = files.find((file) => + file.toLowerCase() === "readme.md" + ); + const readmeFile = await fetch( + `${NPM_PROVIDER_URL}${packageName}/${readmeFileName}`, + ); + const readmeFileContent = await readmeFile.text(); + const readmeHTML = marked.parse(readmeFileContent); + const app = renderSSR( + jsx + `<${Package} name=${name} description=${description} version=${version} homepage=${homepage} license=${license} files=${files} exports=${exports} readme=${readmeHTML} />`, + ); + const { body, head, footer } = Helmet.SSR(app); + + const css = ` + @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;0,900;1,700&family=Source+Code+Pro&display=swap'); + + body{ + font-family: 'Playfair Display', serif; + } + code{ + font-family: 'Source Code Pro', monospace; + } + jspm-package-name, jspm-package-version, jspm-package-description, jspm-package-license, jspm-package-file{ + display: block; + } + `; + + const html = ` + + + + + + ${head.join("\n")} From aaac47951247d5b1b70747f8537db6ac05677f68 Mon Sep 17 00:00:00 2001 From: "Dilip Kr. Shukla" Date: Fri, 3 Dec 2021 16:17:25 +0100 Subject: [PATCH 04/17] add ad-hoc home pagee --- index.html | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 index.html diff --git a/index.html b/index.html new file mode 100644 index 0000000..3263e22 --- /dev/null +++ b/index.html @@ -0,0 +1,25 @@ + + + + + + + + @jspm/packages + + + +
+

@jspm/packages / Home Page

+ +
+ + + \ No newline at end of file From d6e13a30798fdb9265412932546ad16c5a0f9774 Mon Sep 17 00:00:00 2001 From: "Dilip Kr. Shukla" Date: Fri, 3 Dec 2021 16:21:38 +0100 Subject: [PATCH 05/17] fix link --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 3263e22..9730929 100644 --- a/index.html +++ b/index.html @@ -14,7 +14,7 @@

@jspm/packages / Home Page