Commit 536fb73
committed
feat(0.1.0): release candidate for Router
This change pulls the core ideas of pick into a single router.ts file
and implements what I think is a decent interface for the original
Router. In the process I moved the indexed async state either monad, now
called Effect, to the fun library. Effect is now variadic in a clever
but very useful way. Many of the interfaces for Handler, Route, and
Router have breaking changes. I've implemented a very basic but quite
performant default router that does fallthrough routing after matching
on the request method.
There is also the majority of the initial SiteBuilder work done. The
idea behind a site builder was to point it at a directory and have it
turn .tsx files into a SPA, .ts files into api routes, and everything
else into static assets. It's construction should be extensible enough
that new RouteBuilders can be created externally so that other filetypes
can be turned into routes. ie. Markdown files can be pre-rendered, image
files can be compressed, etc etc. It's also meant to be generic enough
that it can be run on any platform and not just on Deno.
Currently, the SiteBuilder only has a static route builder. The
following is intended to be done soon:
* Server route builders should be straightforward, but I'd like to add
some degree of type checking to make them break at app start and not
at runtime.
* Client route builders are simple enough to build, since they will all
serve the same index file.. but there is a chicken and egg issue here.
* I need to spec types for a ClientBuilder/ClientBundler that takes the
array of ClientRoutes and turns them into a bundle! Hopefully it's
easy enough.
Once these features are complete and test coverage is at 100% I will
likey take a break from pick for awhile, but I do want to return at a
later date to implement the following features:
* Routes should take optional input/output schemas that match OpenAPI
definitions. Or default to unknown.
* Routers should have a get_description method that returns a sorted
list of all Routes without their Handlers.
* We should have some tooling for converting a Route list to a sitemap
or an OpenAPI spec.
* SiteBuilder should have an option to mount an OpenAPI spec or a
sitemap at unused paths (and probably write those files into the root
site path).
All in all, a good amount of cleanup and work is done now. Should have
the bare minimum of what I need soon. I think capnweb is going to pull
me away from swagger/openapi generators and client generators for
awhile. This SiteBuilder approach resolves tons of issues with cors,
versioning, and type safety.1 parent c386a04 commit 536fb73
File tree
30 files changed
+2247
-801
lines changed- .github/workflows
- examples
- routes
- testing
30 files changed
+2247
-801
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
| 4 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
4 | | - | |
5 | 3 | | |
6 | 4 | | |
7 | 5 | | |
| |||
21 | 19 | | |
22 | 20 | | |
23 | 21 | | |
24 | | - | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
61 | | - | |
62 | 61 | | |
63 | | - | |
64 | | - | |
65 | | - | |
| 62 | + | |
66 | 63 | | |
67 | | - | |
68 | 64 | | |
69 | 65 | | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
74 | 72 | | |
75 | 73 | | |
76 | 74 | | |
| |||
91 | 89 | | |
92 | 90 | | |
93 | 91 | | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
108 | | - | |
109 | | - | |
110 | | - | |
111 | | - | |
112 | | - | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
113 | 109 | | |
114 | 110 | | |
115 | 111 | | |
| |||
This file was deleted.
0 commit comments