Skip to content

Commit

Permalink
site: added error page (#36)
Browse files Browse the repository at this point in the history
- site: added error page
- added: react type definitions
- changed: Return type of `HttpHandler` and `ErrorHandler`  to `void | Promise<void>`
keroxp authored Oct 12, 2019

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent 122d7bc commit c446a63
Showing 29 changed files with 4,195 additions and 125 deletions.
4 changes: 1 addition & 3 deletions fixtures/public/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@
import React from "../../vendor/https/dev.jspm.io/react/index.js";
export default () => (
<html>deno</html>
)
export default () => <html>deno</html>;
2 changes: 1 addition & 1 deletion fixtures/public/not-component.tsx
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export default "string"
export default "string";
27 changes: 24 additions & 3 deletions modules-lock.json
Original file line number Diff line number Diff line change
@@ -9,7 +9,6 @@
"/fs/mod.ts",
"/io/bufio.ts",
"/io/readers.ts",
"/io/readers.ts",
"/io/writers.ts",
"/strings/decode.ts",
"/strings/encode.ts",
@@ -22,10 +21,32 @@
},
"https://dev.jspm.io/react": {
"version": "@16.10.2",
"modules": ["/index.js"]
"modules": ["/index.js"],
"types": {
"/index.js": "./types/react/index.d.ts"
}
},
"https://dev.jspm.io/react-dom": {
"version": "@16.10.2",
"modules": ["/server.js"]
"modules": ["/server.js"],
"types": {
"/server.js": "./types/react-dom/server/index.d.ts"
}
},
"https://dev.jspm.io/@types/react": {
"version": "@16",
"modules": ["/index.d.ts", "/global.d.ts"]
},
"https://dev.jspm.io/@types/react-dom": {
"version": "@16",
"modules": ["/server/index.d.ts"]
},
"https://dev.jspm.io/@types/prop-types": {
"version": "@15.7.2",
"modules": ["/index.d.ts"]
},
"https://dev.jspm.io/csstype": {
"version": "@2.6.7",
"modules": ["/index.d.ts"]
}
}
26 changes: 24 additions & 2 deletions modules.json
Original file line number Diff line number Diff line change
@@ -21,10 +21,32 @@
},
"https://dev.jspm.io/react": {
"version": "@16.10.2",
"modules": ["/index.js"]
"modules": ["/index.js"],
"types": {
"/index.js": "./types/react/index.d.ts"
}
},
"https://dev.jspm.io/react-dom": {
"version": "@16.10.2",
"modules": ["/server.js"]
"modules": ["/server.js"],
"types": {
"/server.js": "./types/react-dom/server/index.d.ts"
}
},
"https://dev.jspm.io/@types/react": {
"version": "@16",
"modules": ["/index.d.ts", "/global.d.ts"]
},
"https://dev.jspm.io/@types/react-dom": {
"version": "@16",
"modules": ["/server/index.d.ts"]
},
"https://dev.jspm.io/@types/prop-types": {
"version": "@15.7.2",
"modules": ["/index.d.ts"]
},
"https://dev.jspm.io/csstype": {
"version": "@2.6.7",
"modules": ["/index.d.ts"]
}
}
33 changes: 25 additions & 8 deletions router.ts
Original file line number Diff line number Diff line change
@@ -14,44 +14,61 @@ import { createLogger, Logger, Loglevel, namedLogger } from "./logger.ts";
import ListenOptions = Deno.ListenOptions;

export interface HttpRouter {
/** Set global middleware */
/**
* Set global middleware.
* It will be called for each request on any routes.
* */
use(...handlers: HttpHandler[]);

/** Register route for any http method */
/**
* Register route with given pattern.
* It will be called for every http method,
* Examples:
* router.handle("/", ...) => Called if request path exactly matches "/".
* router.handle(/^\//, ...) => Called if request path matches given regexp.
* */
handle(pattern: string | RegExp, ...handlers: HttpHandler[]);

/** Register GET route */
/**
* Register GET route.
* Handlers will be called on GET and HEAD method.
* */
get(pattern: string | RegExp, ...handlers: HttpHandler[]);

/** Register POST route */
post(patter: string | RegExp, ...handlers: HttpHandler[]);

/** Set global error handler. Only one handler can be set at same time */
/**
* Set global error handler.
* All unhandled promise rejections while processing requests will be passed into this handler.
* If error is ignored, it will be handled by built-in final error handler.
* Only one handler can be set for one router. */
handleError(handler: ErrorHandler);

/** Start listening with given addr */
listen(addr: string | ListenOptions, opts?: ServeOptions): ServeListener;
}

export type RoutedServerRequest = ServerRequest & {
/** Match object for route with regexp pattern. */
match: RegExpMatchArray;
};

/** Basic handler for http request */
export type HttpHandler = (req: RoutedServerRequest) => Promise<any>;
export type HttpHandler = (req: RoutedServerRequest) => void | Promise<void>;

/** Global error handler for requests */
export type ErrorHandler = (
e: any,
e: any | RoutingError,
req: RoutedServerRequest
) => any | Promise<any>;
) => void | Promise<void>;

export type RouterOptions = {
logger?: Logger;
logLevel?: Loglevel;
};

/** create HttpRouter object */
/** Create HttpRouter */
export function createRouter(
opts: RouterOptions = {
logger: createLogger()
5 changes: 2 additions & 3 deletions serve_jsx.ts
Original file line number Diff line number Diff line change
@@ -5,11 +5,10 @@ import { resolveIndexPath } from "./router_util.ts";

/** Serve jsx/tsx by dynamic import */
export function serveJsx(
dirOrUrl: string | URL,
dir: string,
parentComponent: any = React.Fragment
): HttpHandler {
const dir = dirOrUrl instanceof URL ? dirOrUrl.pathname : dirOrUrl;
return async req => {
return async function serveJsx(req) {
const { pathname } = new URL(req.url, "http://dummy");
const p = await resolveIndexPath(dir, pathname, [".tsx", ".jsx"]);
if (p) {
2 changes: 1 addition & 1 deletion serve_jsx_test.ts
Original file line number Diff line number Diff line change
@@ -10,7 +10,7 @@ import { pathResolver, readString } from "./util.ts";
import { it } from "./test_util.ts";

it("serveJsx", t => {
const func = serveJsx(pathResolver(import.meta.url)("./fixtures/public"));
const func = serveJsx(pathResolver(import.meta)("./fixtures/public"));
t.run("basic", async () => {
const rec = createRecorder({
url: "/",
16 changes: 12 additions & 4 deletions serve_static.ts
Original file line number Diff line number Diff line change
@@ -6,17 +6,26 @@ import { resolveIndexPath } from "./router_util.ts";

export type ServeStaticOptions = {
/**
* content type resolvers
* Custom Content-Type mapper.
* .ext -> application/some-type
* By default, .ts/.tsx will be resolved by application/typescript
* By default, .ts/.tsx will be resolved by application/typescript.
*/
contentTypeMap?: Map<string, string>;
/**
* Custom Content-Disposition mapper.
* .ext -> "inline" | "attachment"
* By default, Content-Disposition header won't be set for any files.
*/
contentDispositionMap?: Map<string, "inline" | "attachment">;
/** Custom filter function for files */
filter?: (file: string) => boolean | Promise<boolean>;
};

/**
* Serve static files in specified directory.
* */
export function serveStatic(
dirOrUrl: string | URL,
dir: string,
opts: ServeStaticOptions = {}
): HttpHandler {
const contentTypeMap = new Map<string, string>([
@@ -26,7 +35,6 @@ export function serveStatic(
]);
const contentDispositionMap = opts.contentDispositionMap || new Map([]);
const filter = opts.filter || (() => true);
const dir = dirOrUrl instanceof URL ? dirOrUrl.pathname : dirOrUrl;
return async function serveStatic(req) {
if (req.method === "GET" || req.method === "HEAD") {
const url = new URL(req.url, "http://dummy");
8 changes: 4 additions & 4 deletions site/components/code.tsx
Original file line number Diff line number Diff line change
@@ -7,19 +7,19 @@ export type CodeState = {
code: string;
};

export const Code = ({ id, title, code, href }: CodeState) => {
const {pathname} = new URL(href, "https://dummy");
export const Code: React.FC<CodeState> = ({ id, title, code, href }) => {
const { pathname } = new URL(href, "https://dummy");
const basename = pathname.split("/").pop();
return (
<div id={id}>
<h2>{title}</h2>
<div class="codeLink">
<div className="codeLink">
<a href={href} target="_blank">
{basename}
</a>
</div>
<pre>
<code class="ts">{code}</code>
<code className="ts">{code}</code>
</pre>
</div>
);
59 changes: 31 additions & 28 deletions site/components/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,32 +1,35 @@
import React from "../../vendor/https/dev.jspm.io/react/index.js";

export const Layout = ({children}: {
children?: any
}) => (
export const Layout: React.FC = ({ children }) => (
<html lang="en">
<head>
<meta charSet="UTF-8"/>
<title>Servest: A progressive http server for Deno</title>
<meta
name="viewport"
content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover"
/>
<link rel="icon" href="/favicon.ico" />
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
<meta name="description"
content="Servest is simple, stable, and progressive http module for Deno" />
<meta name="keywords" content="Deno,TypeScript,JavaScript,Framework,HTTP,Server,Servest" />
<link href="./reset.css" rel="stylesheet" />
<link href="./index.css" rel="stylesheet"/>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/styles/solarized-dark.min.css"
/>
</head>
<body>
{children}
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/highlight.min.js" />
<script>hljs.initHighlightingOnLoad();</script>
</body>
<head>
<meta charSet="UTF-8" />
<title>Servest: A progressive http server for Deno</title>
<meta
name="viewport"
content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover"
/>
<link rel="icon" href="/favicon.ico" />
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
<meta
name="description"
content="Servest is simple, stable, and progressive http module for Deno"
/>
<meta
name="keywords"
content="Deno,TypeScript,JavaScript,Framework,HTTP,Server,Servest"
/>
<link href="./reset.css" rel="stylesheet" />
<link href="./index.css" rel="stylesheet" />
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/styles/solarized-dark.min.css"
/>
</head>
<body>
{children}
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/highlight.min.js" />
<script>hljs.initHighlightingOnLoad();</script>
</body>
</html>
);
);
5 changes: 5 additions & 0 deletions site/dext.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import React from "../vendor/https/dev.jspm.io/react/index.js";

export type DFC<P={}> = React.FC<P> & {
getInitialProps?: () => Promise<P>
}
23 changes: 18 additions & 5 deletions site/index.tsx
Original file line number Diff line number Diff line change
@@ -1,24 +1,37 @@
// Copyright 2019 Yusuke Sakurai. All rights reserved. MIT license.
import React from "../vendor/https/dev.jspm.io/react/index.js";

import { createRouter } from "../router.ts";
import { serveStatic } from "../serve_static.ts";
import { Loglevel } from "../logger.ts";
import { Layout } from "./components/layout.tsx";
import { pathResolver } from "../util.ts";
import { serveJsx } from "../serve_jsx.ts";
import { RoutingError } from "../error.ts";

const port = Deno.env()["PORT"] || "8899";
const router = createRouter({ logLevel: Loglevel.INFO });
const resolve = pathResolver(import.meta.url);
const resolve = pathResolver(import.meta);
router.use(serveStatic(resolve("./public")));
router.use(serveJsx(resolve("./pages"), Layout));
router.get(new RegExp("/@(?<version>.*?)/(?<pathname>.+?)$"), async req => {
router.get(new RegExp("^/@(?<version>.*?)/(?<pathname>.+?)$"), async req => {
let { version, pathname } = req.match.groups;
if (!version) {
version = "master"
version = "master";
}
const u = `https://raw.githubusercontent.com/keroxp/servest/${version}/${pathname}`;
await fetch(u).then(req.respond);
});
router.handleError(async (e, req) => {
if (e instanceof RoutingError) {
const body = await Deno.open(resolve("./public/error.html"), "r");
await req
.respond({
status: e.status,
headers: new Headers({
"content-type": "text/html; charset=UTF-8"
}),
body
})
.finally(() => body.close());
}
});
router.listen(":" + port);
4 changes: 2 additions & 2 deletions site/main.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#!/usr/bin/env deno --allow-net --allow-read --allow-env
import { pathResolver } from "../util.ts";
const resolve = pathResolver(import.meta.url);
const resolve = pathResolver(import.meta);
async function main() {
const pages = await Deno.readDir(resolve("./pages").pathname);
const pages = await Deno.readDir(resolve("./pages"));
// load components
await Promise.all(
pages.map(v => {
60 changes: 29 additions & 31 deletions site/pages/index.tsx
Original file line number Diff line number Diff line change
@@ -1,45 +1,43 @@
import React from "../../vendor/https/dev.jspm.io/react/index.js";
import { Code, CodeState } from "../components/code.tsx";
import { loadContents } from "../content.ts";
import { DFC } from "../dext.ts";

function Index({ codes }: { codes: CodeState[] }) {
const Index: DFC<{ codes: CodeState[] }> = ({ codes }) => {
return (
<>
<div className="root">
<div className="content">
<div className="sidebar">
<div className="heading">
<h1>Servest</h1>
<p>A progressive http server for Deno</p>
</div>
<hr />
<div className="sidebarSection">Examples</div>
{codes.map(({ id, title }) => (
<div className="sidebarLink">
<a href={"#" + id}>{title}</a>
</div>
))}
<hr />
<div className="sidebarLink">
<a href="https://github.com/keroxp/servest" target="_blank">
Github
</a>
</div>
<div className="root">
<div className="content">
<div className="sidebar">
<div className="heading">
<h1>Servest</h1>
<p>A progressive http server for Deno</p>
</div>
<div className="article">
{codes.map(v => (
<Code {...v} />
))}
<hr />
<div className="sidebarSection">Examples</div>
{codes.map(({ id, title }) => (
<div key={id} className="sidebarLink">
<a href={"#" + id}>{title}</a>
</div>
))}
<hr />
<div className="sidebarLink">
<a href="https://github.com/keroxp/servest" target="_blank">
Github
</a>
</div>
</div>
<div className="footer">
(c) 2019 Yusuke Sakurai, MIT License, Powered by{" "}
<a href="/">Servest</a>
<div className="article">
{codes.map((v,i) => (
<Code key={i} {...v} />
))}
</div>
</div>
</>
<div className="footer">
(c) 2019 Yusuke Sakurai, MIT License, Powered by <a href="/">Servest</a>
</div>
</div>
);
}
};

Index.getInitialProps = async () => {
const codes = await loadContents();
30 changes: 30 additions & 0 deletions site/public/error.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<html>
<head>
<meta charset="UTF-8" />
<title>Servest: A progressive http server for Deno</title>
<meta
name="viewport"
content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover"
/>
<link rel="icon" href="/favicon.ico" />
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
<meta
name="description"
content="Servest is simple, stable, and progressive http module for Deno"
/>
<meta
name="keywords"
content="Deno,TypeScript,JavaScript,Framework,HTTP,Server,Servest"
/>
</head>
<body>
<div class="errorPage">
<h2>404: NotFound</h2>
<a href="https://github.com/hashrock/deno-gifs" target="_blank">
<img
src="https://raw.githubusercontent.com/hashrock/deno-gifs/master/deno-firework.gif"
/>
</a>
</div>
</body>
</html>
16 changes: 7 additions & 9 deletions site/public/example/use_jsx.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from "https://dev.jspm.io/react"
import ReactDOMServer from "https://dev.jspm.io/react-dom/server"
import React from "https://dev.jspm.io/react";
import ReactDOMServer from "https://dev.jspm.io/react-dom/server";
import { createRouter } from "https://servestjs.org/@/router.ts";

const router = createRouter();
@@ -11,13 +11,11 @@ router.handle("/", async req => {
}),
body: ReactDOMServer.renderToString(
<html>
<head>
<meta charSet="utf-8" />
<title>servest</title>
</head>
<body>
Hello Servest!
</body>
<head>
<meta charSet="utf-8" />
<title>servest</title>
</head>
<body>Hello Servest!</body>
</html>
)
});
26 changes: 13 additions & 13 deletions site/public/index.css
Original file line number Diff line number Diff line change
@@ -4,12 +4,13 @@ html {
code {
font-family: Menlo, Monaco, serif;
}
a, a:active {
a,
a:active {
text-decoration: none;
color: inherit;
}
a {
color: rgb(72, 196, 200)
color: rgb(72, 196, 200);
}

h1 {
@@ -32,7 +33,7 @@ code {
line-height: 1.1em;
}
body {
background-color: #F5F7F9;
background-color: #f5f7f9;
}
.root {
width: 100%;
@@ -42,9 +43,9 @@ body {
position: relative;
}
.sidebar {
padding: 15px ;
padding: 15px;
position: fixed;
left: 0
left: 0;
}
@media (max-width: 480px) and (orientation: portrait) {
.content {
@@ -55,13 +56,12 @@ body {
}
}


.heading p{
color: #9DAAB6;
.heading p {
color: #9daab6;
margin-bottom: 15px;
}
.sidebarSection {
color: #9DAAB6;
color: #9daab6;
font-weight: bold;
margin: 10px 0;
}
@@ -70,7 +70,7 @@ body {
list-style: none;
}
.article {
padding: 15px;
padding: 15px;
box-sizing: border-box;
margin-left: 320px;
background-color: white;
@@ -86,8 +86,8 @@ body {
}
.footer {
text-align: center;
background-color:#E6ECF1;
background-color: #e6ecf1;
padding: 15px 0;
color: #9DAAB6;
color: #9daab6;
width: 100%;
}
}
51 changes: 51 additions & 0 deletions types/react-dom/server/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// forward declarations
declare global {
namespace NodeJS {
// tslint:disable-next-line:no-empty-interface
interface ReadableStream {}
}
}

import { ReactElement } from "../../react/index.d.ts";

/**
* Render a React element to its initial HTML. This should only be used on the server.
* React will return an HTML string. You can use this method to generate HTML on the server
* and send the markup down on the initial request for faster page loads and to allow search
* engines to crawl your pages for SEO purposes.
*
* If you call `ReactDOM.render()` on a node that already has this server-rendered markup,
* React will preserve it and only attach event handlers, allowing you
* to have a very performant first-load experience.
*/
export function renderToString(element: ReactElement): string;

/**
* Render a React element to its initial HTML. Returns a Readable stream that outputs
* an HTML string. The HTML output by this stream is exactly equal to what
* `ReactDOMServer.renderToString()` would return.
*/
export function renderToNodeStream(
element: ReactElement
): NodeJS.ReadableStream;

/**
* Similar to `renderToString`, except this doesn't create extra DOM attributes
* such as `data-reactid`, that React uses internally. This is useful if you want
* to use React as a simple static page generator, as stripping away the extra
* attributes can save lots of bytes.
*/
export function renderToStaticMarkup(element: ReactElement): string;

/**
* Similar to `renderToNodeStream`, except this doesn't create extra DOM attributes
* such as `data-reactid`, that React uses internally. The HTML output by this stream
* is exactly equal to what `ReactDOMServer.renderToStaticMarkup()` would return.
*/
export function renderToStaticNodeStream(
element: ReactElement
): NodeJS.ReadableStream;

export const version: string;

export as namespace ReactDOMServer;
145 changes: 145 additions & 0 deletions types/react/global.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
/*
React projects that don't include the DOM library need these interfaces to compile.
React Native applications use React, but there is no DOM available. The JavaScript runtime
is ES6/ES2015 only. These definitions allow such projects to compile with only `--lib ES6`.
*/

// interface Event { }
interface AnimationEvent extends Event {}
interface ClipboardEvent extends Event {}
interface CompositionEvent extends Event {}
interface DragEvent extends Event {}
interface FocusEvent extends Event {}
interface KeyboardEvent extends Event {}
interface MouseEvent extends Event {}
interface TouchEvent extends Event {}
interface PointerEvent extends Event {}
interface TransitionEvent extends Event {}
interface UIEvent extends Event {}
interface WheelEvent extends Event {}

// interface EventTarget { }
interface Document {}
interface DataTransfer {}
interface StyleMedia {}

interface Element {}

interface HTMLElement extends Element {}
interface HTMLAnchorElement extends HTMLElement {}
interface HTMLAreaElement extends HTMLElement {}
interface HTMLAudioElement extends HTMLElement {}
interface HTMLBaseElement extends HTMLElement {}
interface HTMLBodyElement extends HTMLElement {}
interface HTMLBRElement extends HTMLElement {}
interface HTMLButtonElement extends HTMLElement {}
interface HTMLCanvasElement extends HTMLElement {}
interface HTMLDataElement extends HTMLElement {}
interface HTMLDataListElement extends HTMLElement {}
interface HTMLDialogElement extends HTMLElement {}
interface HTMLDivElement extends HTMLElement {}
interface HTMLDListElement extends HTMLElement {}
interface HTMLEmbedElement extends HTMLElement {}
interface HTMLFieldSetElement extends HTMLElement {}
interface HTMLFormElement extends HTMLElement {}
interface HTMLHeadingElement extends HTMLElement {}
interface HTMLHeadElement extends HTMLElement {}
interface HTMLHRElement extends HTMLElement {}
interface HTMLHtmlElement extends HTMLElement {}
interface HTMLIFrameElement extends HTMLElement {}
interface HTMLImageElement extends HTMLElement {}
interface HTMLInputElement extends HTMLElement {}
interface HTMLModElement extends HTMLElement {}
interface HTMLLabelElement extends HTMLElement {}
interface HTMLLegendElement extends HTMLElement {}
interface HTMLLIElement extends HTMLElement {}
interface HTMLLinkElement extends HTMLElement {}
interface HTMLMapElement extends HTMLElement {}
interface HTMLMetaElement extends HTMLElement {}
interface HTMLObjectElement extends HTMLElement {}
interface HTMLOListElement extends HTMLElement {}
interface HTMLOptGroupElement extends HTMLElement {}
interface HTMLOptionElement extends HTMLElement {}
interface HTMLParagraphElement extends HTMLElement {}
interface HTMLParamElement extends HTMLElement {}
interface HTMLPreElement extends HTMLElement {}
interface HTMLProgressElement extends HTMLElement {}
interface HTMLQuoteElement extends HTMLElement {}
interface HTMLScriptElement extends HTMLElement {}
interface HTMLSelectElement extends HTMLElement {}
interface HTMLSourceElement extends HTMLElement {}
interface HTMLSpanElement extends HTMLElement {}
interface HTMLStyleElement extends HTMLElement {}
interface HTMLTableElement extends HTMLElement {}
interface HTMLTableColElement extends HTMLElement {}
interface HTMLTableDataCellElement extends HTMLElement {}
interface HTMLTableHeaderCellElement extends HTMLElement {}
interface HTMLTableRowElement extends HTMLElement {}
interface HTMLTableSectionElement extends HTMLElement {}
interface HTMLTemplateElement extends HTMLElement {}
interface HTMLTextAreaElement extends HTMLElement {}
interface HTMLTitleElement extends HTMLElement {}
interface HTMLTrackElement extends HTMLElement {}
interface HTMLUListElement extends HTMLElement {}
interface HTMLVideoElement extends HTMLElement {}
interface HTMLWebViewElement extends HTMLElement {}

interface SVGElement extends Element {}
interface SVGSVGElement extends SVGElement {}
interface SVGCircleElement extends SVGElement {}
interface SVGClipPathElement extends SVGElement {}
interface SVGDefsElement extends SVGElement {}
interface SVGDescElement extends SVGElement {}
interface SVGEllipseElement extends SVGElement {}
interface SVGFEBlendElement extends SVGElement {}
interface SVGFEColorMatrixElement extends SVGElement {}
interface SVGFEComponentTransferElement extends SVGElement {}
interface SVGFECompositeElement extends SVGElement {}
interface SVGFEConvolveMatrixElement extends SVGElement {}
interface SVGFEDiffuseLightingElement extends SVGElement {}
interface SVGFEDisplacementMapElement extends SVGElement {}
interface SVGFEDistantLightElement extends SVGElement {}
interface SVGFEDropShadowElement extends SVGElement {}
interface SVGFEFloodElement extends SVGElement {}
interface SVGFEFuncAElement extends SVGElement {}
interface SVGFEFuncBElement extends SVGElement {}
interface SVGFEFuncGElement extends SVGElement {}
interface SVGFEFuncRElement extends SVGElement {}
interface SVGFEGaussianBlurElement extends SVGElement {}
interface SVGFEImageElement extends SVGElement {}
interface SVGFEMergeElement extends SVGElement {}
interface SVGFEMergeNodeElement extends SVGElement {}
interface SVGFEMorphologyElement extends SVGElement {}
interface SVGFEOffsetElement extends SVGElement {}
interface SVGFEPointLightElement extends SVGElement {}
interface SVGFESpecularLightingElement extends SVGElement {}
interface SVGFESpotLightElement extends SVGElement {}
interface SVGFETileElement extends SVGElement {}
interface SVGFETurbulenceElement extends SVGElement {}
interface SVGFilterElement extends SVGElement {}
interface SVGForeignObjectElement extends SVGElement {}
interface SVGGElement extends SVGElement {}
interface SVGImageElement extends SVGElement {}
interface SVGLineElement extends SVGElement {}
interface SVGLinearGradientElement extends SVGElement {}
interface SVGMarkerElement extends SVGElement {}
interface SVGMaskElement extends SVGElement {}
interface SVGMetadataElement extends SVGElement {}
interface SVGPathElement extends SVGElement {}
interface SVGPatternElement extends SVGElement {}
interface SVGPolygonElement extends SVGElement {}
interface SVGPolylineElement extends SVGElement {}
interface SVGRadialGradientElement extends SVGElement {}
interface SVGRectElement extends SVGElement {}
interface SVGStopElement extends SVGElement {}
interface SVGSwitchElement extends SVGElement {}
interface SVGSymbolElement extends SVGElement {}
interface SVGTextElement extends SVGElement {}
interface SVGTextPathElement extends SVGElement {}
interface SVGTSpanElement extends SVGElement {}
interface SVGUseElement extends SVGElement {}
interface SVGViewElement extends SVGElement {}

interface Text {}
interface TouchList {}
interface WebGLRenderingContext {}
3,755 changes: 3,755 additions & 0 deletions types/react/index.d.ts

Large diffs are not rendered by default.

6 changes: 2 additions & 4 deletions util.ts
Original file line number Diff line number Diff line change
@@ -37,10 +37,8 @@ export function dateToDateHeader(time: Date = new Date()): string {
);
}

export function pathResolver(base: string): (path: string) => URL {
return p => {
return new URL(p, base);
};
export function pathResolver(meta: ImportMeta): (p: string) => string {
return p => new URL(p, meta.url).pathname;
}

export async function readString(r: Deno.Reader): Promise<string> {
8 changes: 4 additions & 4 deletions util_test.ts
Original file line number Diff line number Diff line change
@@ -10,12 +10,12 @@ test("dateToDateHeader", () => {
});
it("pathResolver", t => {
[
["file://src/deno/index.js", "./other.js", "file://src/deno/other.js"],
["file://src/deno/", "./other.js", "file://src/deno/other.js"]
["file:///src/deno/index.js", "./other.js", "/src/deno/other.js"],
["file:///src/deno/index.js", "../other.js", "/src/other.js"]
].forEach(([base, path, exp]) => {
t.run(`${base} + ${path}`, () => {
const u = pathResolver(base)(path);
assertEquals(u.toString(), exp);
const u = pathResolver({ url: base, main: false })(path);
assertEquals(u, exp);
});
});
});
1 change: 1 addition & 0 deletions vendor/https/dev.jspm.io/@types/prop-types/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from "https://dev.jspm.io/npm:@types/prop-types@15.7.2/index.d.ts";
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from "https://dev.jspm.io/npm:@types/react-dom@16.9.1/server/index.d.ts";
1 change: 1 addition & 0 deletions vendor/https/dev.jspm.io/@types/react/global.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from "https://dev.jspm.io/npm:@types/react@16.9.5/global.d.ts";
1 change: 1 addition & 0 deletions vendor/https/dev.jspm.io/@types/react/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from "https://dev.jspm.io/npm:@types/react@16.9.5/index.d.ts";
1 change: 1 addition & 0 deletions vendor/https/dev.jspm.io/csstype/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from "https://dev.jspm.io/npm:csstype@2.6.7/index.d.ts";
2 changes: 2 additions & 0 deletions vendor/https/dev.jspm.io/react-dom/server.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// @deno-types="../../../../types/react-dom/server/index.d.ts"
export * from "https://dev.jspm.io/react-dom@16.10.2/server.js";
// @deno-types="../../../../types/react-dom/server/index.d.ts"
import { default as dew } from "https://dev.jspm.io/react-dom@16.10.2/server.js";
export default dew;
2 changes: 2 additions & 0 deletions vendor/https/dev.jspm.io/react/index.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// @deno-types="../../../../types/react/index.d.ts"
export * from "https://dev.jspm.io/react@16.10.2/index.js";
// @deno-types="../../../../types/react/index.d.ts"
import { default as dew } from "https://dev.jspm.io/react@16.10.2/index.js";
export default dew;

0 comments on commit c446a63

Please sign in to comment.