generated from tpl/purs
feat: init
This commit is contained in:
parent
41b649db58
commit
1b43507f25
@ -1,3 +1,2 @@
|
||||
bun 1.0.11
|
||||
purescript 0.15.12
|
||||
nodejs 20.9.0
|
||||
bun 1.1.0
|
||||
purescript 0.15.16-0
|
||||
|
1017
spago.lock
Normal file
1017
spago.lock
Normal file
File diff suppressed because it is too large
Load Diff
26
spago.yaml
26
spago.yaml
@ -1,24 +1,16 @@
|
||||
package:
|
||||
name: bun-serve
|
||||
build:
|
||||
strict: true
|
||||
pedantic_packages: true
|
||||
pedanticPackages: true
|
||||
dependencies:
|
||||
- prelude
|
||||
- aff
|
||||
- aff-promise
|
||||
- effect
|
||||
- either
|
||||
- maybe
|
||||
- foldable-traversable
|
||||
- console
|
||||
- newtype
|
||||
- strings
|
||||
- stringutils
|
||||
- transformers
|
||||
- tuples
|
||||
- typelevel-prelude
|
||||
name: project
|
||||
- exceptions
|
||||
- foreign
|
||||
- prelude
|
||||
workspace:
|
||||
extra_packages: {}
|
||||
package_set:
|
||||
url: https://raw.githubusercontent.com/purescript/package-sets/psc-0.15.10-20230930/packages.json
|
||||
hash: sha256-nTsd44o7/hrTdk0c6dh0wyBqhFFDJJIeKdQU6L1zv/A=
|
||||
extraPackages: {}
|
||||
packageSet:
|
||||
registry: 50.5.0
|
||||
|
3
src/Bun.Serve.Request.purs
Normal file
3
src/Bun.Serve.Request.purs
Normal file
@ -0,0 +1,3 @@
|
||||
module Bun.Serve.Request where
|
||||
|
||||
foreign import data Request :: Type
|
3
src/Bun.Serve.Response.purs
Normal file
3
src/Bun.Serve.Response.purs
Normal file
@ -0,0 +1,3 @@
|
||||
module Bun.Serve.Response where
|
||||
|
||||
foreign import data Response :: Type
|
21
src/Bun.Serve.js
Normal file
21
src/Bun.Serve.js
Normal file
@ -0,0 +1,21 @@
|
||||
import Bun from 'bun'
|
||||
|
||||
/**
|
||||
* @typedef
|
||||
* {{
|
||||
* error?: (_: Error) => unknown,
|
||||
* }}
|
||||
* ServeOptionsExtra
|
||||
*/
|
||||
|
||||
/** @type {(mapErr: (_a: ServeOptionsExtra['error']) => Bun.ServeOptions['error']) => (opts: Bun.ServeOptions & ServeOptionsExtra) => Bun.ServeOptions} */
|
||||
export const __mapOptError = mapErr => opts => {
|
||||
if ('error' in opts && opts['error']) {
|
||||
opts.error = mapErr(opts.error)
|
||||
}
|
||||
return opts
|
||||
}
|
||||
|
||||
/** @type {(opts: Bun.ServeOptions) => (fetch: (r: Request) => (s: Bun.Server) => () => Promise<Response>) => () => Bun.Server} */
|
||||
export const __serve = opts => fetch => () =>
|
||||
Bun.serve({ ...opts, fetch: (req, server) => fetch(req)(server)() })
|
50
src/Bun.Serve.purs
Normal file
50
src/Bun.Serve.purs
Normal file
@ -0,0 +1,50 @@
|
||||
module Bun.Serve where
|
||||
|
||||
import Prelude
|
||||
|
||||
import Bun.Serve.Request (Request)
|
||||
import Bun.Serve.Response (Response)
|
||||
import Control.Promise (Promise)
|
||||
import Control.Promise as Promise
|
||||
import Effect (Effect)
|
||||
import Effect.Aff (Aff)
|
||||
import Effect.Exception (Error)
|
||||
import Effect.Unsafe (unsafePerformEffect)
|
||||
import Foreign (Foreign, unsafeToForeign)
|
||||
import Prim.Row (class Union)
|
||||
|
||||
foreign import data Server :: Type
|
||||
foreign import __serve :: Foreign -> (Request -> Server -> Promise Unit) -> Effect Server
|
||||
foreign import __mapOptError :: ((Error -> Aff Response) -> Error -> Promise Response) -> Foreign -> Foreign
|
||||
|
||||
type TLSOptionsRequired r = (key :: String, cert :: String | r)
|
||||
type TLSOptionsExtra r = (ca :: String, passphrase :: String | r)
|
||||
|
||||
type Options tls =
|
||||
( hostname :: String
|
||||
, port :: Number
|
||||
, development :: Boolean
|
||||
, error :: Error -> Aff Response
|
||||
, maxRequestBodySize :: Int
|
||||
, lowMemoryMode :: Boolean
|
||||
, tls :: Record tls
|
||||
)
|
||||
|
||||
class IsTLSOptions :: Row Type -> Row Type -> Row Type -> Constraint
|
||||
class (Union r () (TLSOptionsRequired notrequired), Union notrequired missing (TLSOptionsExtra ())) <= IsTLSOptions r missing notrequired | r -> missing notrequired
|
||||
|
||||
instance (Union r () (TLSOptionsRequired notrequired), Union notrequired missing (TLSOptionsExtra ())) => IsTLSOptions r missing notrequired
|
||||
|
||||
serve
|
||||
:: forall opts optsmissing tls tlsm tlsnr
|
||||
. Union opts optsmissing (Options tls)
|
||||
=> IsTLSOptions tls tlsm tlsnr
|
||||
=> Record opts
|
||||
-> (Request -> Server -> Aff Unit)
|
||||
-> Effect Server
|
||||
serve opts fetch = do
|
||||
let
|
||||
fetch' r s = unsafePerformEffect $ Promise.fromAff $ fetch r s
|
||||
mapErr f = unsafePerformEffect <<< Promise.fromAff <<< f
|
||||
opts' = __mapOptError mapErr $ unsafeToForeign opts
|
||||
__serve opts' fetch'
|
@ -1,7 +0,0 @@
|
||||
module Main where
|
||||
|
||||
import Prelude
|
||||
import Effect (Effect)
|
||||
|
||||
main :: Effect Unit
|
||||
main = pure unit
|
Loading…
Reference in New Issue
Block a user