generated from tpl/purs
fix: spago
This commit is contained in:
parent
edf5207dfc
commit
66f87f413b
29
README.md
Normal file
29
README.md
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# purescript-ezfetch
|
||||||
|
High-level bindings to the native `fetch` API
|
||||||
|
|
||||||
|
## `Effect.Aff.HTTP`
|
||||||
|
The main entry point is `Effect.Aff.HTTP.fetch`:
|
||||||
|
|
||||||
|
```purescript
|
||||||
|
fetch <method> <url> <options>
|
||||||
|
```
|
||||||
|
|
||||||
|
* `<method>` is `Effect.Aff.HTTP.Request.Method`:
|
||||||
|
```purescript
|
||||||
|
data Method
|
||||||
|
= GET
|
||||||
|
| PUT
|
||||||
|
| POST
|
||||||
|
| DELETE
|
||||||
|
| PATCH
|
||||||
|
| HEAD
|
||||||
|
```
|
||||||
|
* `<url>` is `Data.URL.URL` (from [`url-immutable`](https://pursuit.purescript.org/packages/purescript-url-immutable/))
|
||||||
|
* `<options>` is a partial record of:
|
||||||
|
```purescript
|
||||||
|
type OptionalFields =
|
||||||
|
( body :: Body
|
||||||
|
, headers :: Headers
|
||||||
|
, credentials :: Credentials
|
||||||
|
)
|
||||||
|
```
|
34
bun/prepare.js
Normal file
34
bun/prepare.js
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import { readFile, writeFile } from 'fs/promises'
|
||||||
|
import { execSync } from 'child_process'
|
||||||
|
|
||||||
|
let ver = process.argv[2]
|
||||||
|
if (!ver) {
|
||||||
|
console.error(`tag required: bun bun/prepare.js v1.0.0`)
|
||||||
|
process.exit(1)
|
||||||
|
} else if (!/v\d+\.\d+\.\d+/.test(ver)) {
|
||||||
|
console.error(`invalid tag: ${ver}`)
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
ver = (/\d+\.\d+\.\d+/.exec(ver) || [])[0] || ''
|
||||||
|
|
||||||
|
const pkg = await readFile('./package.json', 'utf8')
|
||||||
|
const pkgnew = pkg.replace(/"version": ".+"/, `"version": "v${ver}"`)
|
||||||
|
await writeFile('./package.json', pkgnew)
|
||||||
|
|
||||||
|
const spago = await readFile('./spago.yaml', 'utf8')
|
||||||
|
const spagonew = spago.replace(/version: .+/, `version: '${ver}'`)
|
||||||
|
await writeFile('./spago.yaml', spagonew)
|
||||||
|
|
||||||
|
const readme = await readFile('./README.md', 'utf8')
|
||||||
|
const readmenew = readme.replace(
|
||||||
|
/packages\/purescript-fetch\/.+?\//g,
|
||||||
|
`/packages/purescript-fetch/${ver}/`,
|
||||||
|
)
|
||||||
|
await writeFile('./README.md', readmenew)
|
||||||
|
|
||||||
|
execSync(`git add spago.yaml package.json README.md`)
|
||||||
|
execSync(`git commit -m 'chore: prepare v${ver}'`)
|
||||||
|
execSync(`git tag v${ver}`)
|
||||||
|
execSync(`git push --tags`)
|
||||||
|
execSync(`git push --mirror github-mirror`)
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "purs",
|
"name": "purescript-ezfetch",
|
||||||
"private": true,
|
"private": true,
|
||||||
"module": "index.js",
|
"module": "index.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
52
spago.lock
52
spago.lock
@ -1,6 +1,6 @@
|
|||||||
workspace:
|
workspace:
|
||||||
packages:
|
packages:
|
||||||
fetch:
|
ezfetch:
|
||||||
path: ./
|
path: ./
|
||||||
dependencies:
|
dependencies:
|
||||||
- aff: ">=7.1.0 <8.0.0"
|
- aff: ">=7.1.0 <8.0.0"
|
||||||
@ -28,7 +28,7 @@ workspace:
|
|||||||
- transformers: ">=6.0.0 <7.0.0"
|
- transformers: ">=6.0.0 <7.0.0"
|
||||||
- tuples: ">=7.0.0 <8.0.0"
|
- tuples: ">=7.0.0 <8.0.0"
|
||||||
- unsafe-coerce: ">=6.0.0 <7.0.0"
|
- unsafe-coerce: ">=6.0.0 <7.0.0"
|
||||||
- url: "*"
|
- url-immutable: ">=1.0.0 <2.0.0"
|
||||||
- web-file: ">=4.0.0 <5.0.0"
|
- web-file: ">=4.0.0 <5.0.0"
|
||||||
- web-streams: ">=4.0.0 <5.0.0"
|
- web-streams: ">=4.0.0 <5.0.0"
|
||||||
test_dependencies: []
|
test_dependencies: []
|
||||||
@ -86,6 +86,7 @@ workspace:
|
|||||||
- simple-json
|
- simple-json
|
||||||
- st
|
- st
|
||||||
- strings
|
- strings
|
||||||
|
- stringutils
|
||||||
- tailrec
|
- tailrec
|
||||||
- transformers
|
- transformers
|
||||||
- tuples
|
- tuples
|
||||||
@ -94,29 +95,13 @@ workspace:
|
|||||||
- uint
|
- uint
|
||||||
- unfoldable
|
- unfoldable
|
||||||
- unsafe-coerce
|
- unsafe-coerce
|
||||||
- url
|
- url-immutable
|
||||||
- variant
|
- variant
|
||||||
- web-dom
|
- web-dom
|
||||||
- web-events
|
- web-events
|
||||||
- web-file
|
- web-file
|
||||||
- web-streams
|
- web-streams
|
||||||
extra_packages:
|
extra_packages: {}
|
||||||
url:
|
|
||||||
git: https://git.orionkindel.com/thunderstrike/purescript-url-immutable.git
|
|
||||||
ref: dbfa3b6
|
|
||||||
dependencies:
|
|
||||||
- arrays
|
|
||||||
- effect
|
|
||||||
- filterable
|
|
||||||
- foldable-traversable
|
|
||||||
- integers
|
|
||||||
- maybe
|
|
||||||
- newtype
|
|
||||||
- nullable
|
|
||||||
- ordered-collections
|
|
||||||
- prelude
|
|
||||||
- strings
|
|
||||||
- tuples
|
|
||||||
packages:
|
packages:
|
||||||
aff:
|
aff:
|
||||||
type: registry
|
type: registry
|
||||||
@ -701,6 +686,17 @@ packages:
|
|||||||
- tuples
|
- tuples
|
||||||
- unfoldable
|
- unfoldable
|
||||||
- unsafe-coerce
|
- unsafe-coerce
|
||||||
|
stringutils:
|
||||||
|
type: registry
|
||||||
|
version: 0.0.12
|
||||||
|
integrity: sha256-t63QWBlp49U0nRqUcFryKflSJsNKGTQAHKjn24/+ooI=
|
||||||
|
dependencies:
|
||||||
|
- arrays
|
||||||
|
- integers
|
||||||
|
- maybe
|
||||||
|
- partial
|
||||||
|
- prelude
|
||||||
|
- strings
|
||||||
tailrec:
|
tailrec:
|
||||||
type: registry
|
type: registry
|
||||||
version: 6.1.0
|
version: 6.1.0
|
||||||
@ -779,22 +775,28 @@ packages:
|
|||||||
version: 6.0.0
|
version: 6.0.0
|
||||||
integrity: sha256-IqIYW4Vkevn8sI+6aUwRGvd87tVL36BBeOr0cGAE7t0=
|
integrity: sha256-IqIYW4Vkevn8sI+6aUwRGvd87tVL36BBeOr0cGAE7t0=
|
||||||
dependencies: []
|
dependencies: []
|
||||||
url:
|
url-immutable:
|
||||||
type: git
|
type: registry
|
||||||
url: https://git.orionkindel.com/thunderstrike/purescript-url-immutable.git
|
version: 1.0.0
|
||||||
rev: dbfa3b6e3b01b2d6c7b02202054d52754f000b20
|
integrity: sha256-6uCg5k4fjrqyTYUYKTmcykXgXCJKsvVpzx+gZJczAx0=
|
||||||
dependencies:
|
dependencies:
|
||||||
- arrays
|
- arrays
|
||||||
- effect
|
- bifunctors
|
||||||
|
- either
|
||||||
- filterable
|
- filterable
|
||||||
- foldable-traversable
|
- foldable-traversable
|
||||||
|
- foreign
|
||||||
- integers
|
- integers
|
||||||
- maybe
|
- maybe
|
||||||
- newtype
|
- newtype
|
||||||
- nullable
|
- nullable
|
||||||
- ordered-collections
|
- ordered-collections
|
||||||
|
- partial
|
||||||
- prelude
|
- prelude
|
||||||
|
- simple-json
|
||||||
- strings
|
- strings
|
||||||
|
- stringutils
|
||||||
|
- transformers
|
||||||
- tuples
|
- tuples
|
||||||
variant:
|
variant:
|
||||||
type: registry
|
type: registry
|
||||||
|
23
spago.yaml
23
spago.yaml
@ -1,4 +1,6 @@
|
|||||||
|
workspace: {}
|
||||||
package:
|
package:
|
||||||
|
name: 'ezfetch'
|
||||||
dependencies:
|
dependencies:
|
||||||
- aff: ">=7.1.0 <8.0.0"
|
- aff: ">=7.1.0 <8.0.0"
|
||||||
- aff-promise: ">=4.0.0 <5.0.0"
|
- aff-promise: ">=4.0.0 <5.0.0"
|
||||||
@ -25,25 +27,6 @@ package:
|
|||||||
- transformers: ">=6.0.0 <7.0.0"
|
- transformers: ">=6.0.0 <7.0.0"
|
||||||
- tuples: ">=7.0.0 <8.0.0"
|
- tuples: ">=7.0.0 <8.0.0"
|
||||||
- unsafe-coerce: ">=6.0.0 <7.0.0"
|
- unsafe-coerce: ">=6.0.0 <7.0.0"
|
||||||
- url: "*"
|
- url-immutable: ">=1.0.0 <2.0.0"
|
||||||
- web-file: ">=4.0.0 <5.0.0"
|
- web-file: ">=4.0.0 <5.0.0"
|
||||||
- web-streams: ">=4.0.0 <5.0.0"
|
- web-streams: ">=4.0.0 <5.0.0"
|
||||||
name: fetch
|
|
||||||
workspace:
|
|
||||||
extraPackages:
|
|
||||||
url:
|
|
||||||
git: 'https://git.orionkindel.com/thunderstrike/purescript-url-immutable.git'
|
|
||||||
ref: 'dbfa3b6'
|
|
||||||
dependencies:
|
|
||||||
- arrays
|
|
||||||
- effect
|
|
||||||
- filterable
|
|
||||||
- foldable-traversable
|
|
||||||
- integers
|
|
||||||
- maybe
|
|
||||||
- newtype
|
|
||||||
- nullable
|
|
||||||
- ordered-collections
|
|
||||||
- prelude
|
|
||||||
- strings
|
|
||||||
- tuples
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
module HTTP.MIME where
|
module Data.MIME where
|
||||||
|
|
||||||
import Prelude
|
import Prelude
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
module Data.Tuple.Containing where
|
|
||||||
|
|
||||||
import Prelude
|
|
||||||
|
|
||||||
import Data.Tuple (Tuple, fst, snd)
|
|
||||||
import Data.Tuple.Nested (type (/\), (/\))
|
|
||||||
|
|
||||||
-- | given a tuple of any size with at least 1 value
|
|
||||||
-- | of type `a`, `extract` the first occurence of `a`
|
|
||||||
-- | from the tuple
|
|
||||||
class TupleContaining a tup where
|
|
||||||
extract :: tup -> a
|
|
||||||
|
|
||||||
instance TupleContaining a a where
|
|
||||||
extract = identity
|
|
||||||
else instance TupleContaining a (a /\ b) where
|
|
||||||
extract = fst
|
|
||||||
else instance TupleContaining b (a /\ b) where
|
|
||||||
extract = snd
|
|
||||||
else instance TupleContaining b (a /\ b /\ rest) where
|
|
||||||
extract (_ /\ b /\ _) = b
|
|
||||||
else instance TupleContaining c (a /\ b /\ c /\ Unit) where
|
|
||||||
extract (_ /\ _ /\ c /\ _) = c
|
|
||||||
else instance TupleContaining a tail => TupleContaining a (Tuple head tail) where
|
|
||||||
extract (_ /\ tail) = extract tail
|
|
@ -9,5 +9,4 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/** @type {(o: RequestInit) => () => Promise<Response>} */
|
/** @type {(o: RequestInit) => () => Promise<Response>} */
|
||||||
export const fetchImpl = o => () =>
|
export const fetchImpl = o => () => fetch(o.url, { ...o, redirect: 'manual' })
|
||||||
fetch(o.url, {...o, redirect: 'manual'})
|
|
@ -1,4 +1,4 @@
|
|||||||
module HTTP (fetch, fetchWithDefaults, OptionalFields, module X) where
|
module Effect.Aff.HTTP (fetch, fetchWithDefaults, OptionalFields, module X) where
|
||||||
|
|
||||||
import Prelude
|
import Prelude
|
||||||
|
|
||||||
@ -13,12 +13,12 @@ import Effect (Effect)
|
|||||||
import Effect.Aff.Class (class MonadAff, liftAff)
|
import Effect.Aff.Class (class MonadAff, liftAff)
|
||||||
import Foreign.Object (Object)
|
import Foreign.Object (Object)
|
||||||
import Foreign.Object as Object
|
import Foreign.Object as Object
|
||||||
import HTTP.Header (Headers)
|
import Effect.Aff.HTTP.Header (Headers)
|
||||||
import HTTP.Header (headers) as X
|
import Effect.Aff.HTTP.Header (headers) as X
|
||||||
import HTTP.Request (Body(..), Credentials(..), Method, RawBody, bodyHeaders, bodyToRaw)
|
import Effect.Aff.HTTP.Request (Body(..), Credentials(..), Method, RawBody, bodyHeaders, bodyToRaw)
|
||||||
import HTTP.Request (Method(..)) as X
|
import Effect.Aff.HTTP.Request (Method(..)) as X
|
||||||
import HTTP.Request as Req
|
import Effect.Aff.HTTP.Request as Req
|
||||||
import HTTP.Response (Response)
|
import Effect.Aff.HTTP.Response (Response)
|
||||||
import Prim.Row (class Nub, class Union)
|
import Prim.Row (class Nub, class Union)
|
||||||
import Record as Record
|
import Record as Record
|
||||||
import Type.Prelude (Proxy(..))
|
import Type.Prelude (Proxy(..))
|
||||||
@ -54,7 +54,7 @@ makeOptionalFields
|
|||||||
=> Union x OptionalFields o
|
=> Union x OptionalFields o
|
||||||
=> Union x xm OptionalFields
|
=> Union x xm OptionalFields
|
||||||
=> Record OptionalFields
|
=> Record OptionalFields
|
||||||
-> {|x}
|
-> { | x }
|
||||||
-> Record OptionalFields
|
-> Record OptionalFields
|
||||||
makeOptionalFields d x = Record.merge x d
|
makeOptionalFields d x = Record.merge x d
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ fetchWithDefaults
|
|||||||
=> Record OptionalFields
|
=> Record OptionalFields
|
||||||
-> Method
|
-> Method
|
||||||
-> URL
|
-> URL
|
||||||
-> {|x}
|
-> { | x }
|
||||||
-> m Response
|
-> m Response
|
||||||
fetchWithDefaults defaults' method url x =
|
fetchWithDefaults defaults' method url x =
|
||||||
let
|
let
|
||||||
@ -90,7 +90,8 @@ fetchWithDefaults defaults' method url x =
|
|||||||
$ Record.insert (Proxy @"method") methodStr
|
$ Record.insert (Proxy @"method") methodStr
|
||||||
$ Record.insert (Proxy @"url") (URL.toString url)
|
$ Record.insert (Proxy @"url") (URL.toString url)
|
||||||
$ makeOptionalFields @x defaults' x
|
$ makeOptionalFields @x defaults' x
|
||||||
in do
|
in
|
||||||
|
do
|
||||||
bodyHeaders' <- (Object.fromFoldableWithIndex <<< unwrap) <$> bodyHeaders fields.body
|
bodyHeaders' <- (Object.fromFoldableWithIndex <<< unwrap) <$> bodyHeaders fields.body
|
||||||
bodyRaw <- Nullable.toNullable <$> bodyToRaw fields.body
|
bodyRaw <- Nullable.toNullable <$> bodyToRaw fields.body
|
||||||
let
|
let
|
||||||
@ -109,6 +110,6 @@ fetch
|
|||||||
=> Union x xm OptionalFields
|
=> Union x xm OptionalFields
|
||||||
=> Method
|
=> Method
|
||||||
-> URL
|
-> URL
|
||||||
-> {|x}
|
-> { | x }
|
||||||
-> m Response
|
-> m Response
|
||||||
fetch = fetchWithDefaults defaults
|
fetch = fetchWithDefaults defaults
|
@ -1,4 +1,4 @@
|
|||||||
module HTTP.Form where
|
module Effect.Aff.HTTP.Form where
|
||||||
|
|
||||||
import Prelude
|
import Prelude
|
||||||
|
|
||||||
@ -25,8 +25,8 @@ import Effect.Exception (error)
|
|||||||
import Foreign (Foreign, unsafeReadTagged, unsafeToForeign)
|
import Foreign (Foreign, unsafeReadTagged, unsafeToForeign)
|
||||||
import Foreign.Object (Object)
|
import Foreign.Object (Object)
|
||||||
import Foreign.Object as Object
|
import Foreign.Object as Object
|
||||||
import HTTP.MIME (MIME)
|
import Data.MIME (MIME)
|
||||||
import HTTP.MIME as MIME
|
import Data.MIME as MIME
|
||||||
import Simple.JSON (readImpl, unsafeStringify)
|
import Simple.JSON (readImpl, unsafeStringify)
|
||||||
import Unsafe.Coerce (unsafeCoerce)
|
import Unsafe.Coerce (unsafeCoerce)
|
||||||
import Web.File.Blob (Blob)
|
import Web.File.Blob (Blob)
|
@ -1,4 +1,4 @@
|
|||||||
module HTTP.Header where
|
module Effect.Aff.HTTP.Header where
|
||||||
|
|
||||||
import Prelude
|
import Prelude
|
||||||
|
|
||||||
@ -14,8 +14,8 @@ import Data.String.Base64 as String.Base64
|
|||||||
import Data.Tuple (Tuple(..))
|
import Data.Tuple (Tuple(..))
|
||||||
import Effect (Effect)
|
import Effect (Effect)
|
||||||
import Effect.Class (class MonadEffect, liftEffect)
|
import Effect.Class (class MonadEffect, liftEffect)
|
||||||
import HTTP.MIME (MIME)
|
import Data.MIME (MIME)
|
||||||
import HTTP.MIME as MIME
|
import Data.MIME as MIME
|
||||||
|
|
||||||
newtype ContentType = ContentType MIME
|
newtype ContentType = ContentType MIME
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
module HTTP.Request
|
module Effect.Aff.HTTP.Request
|
||||||
( Credentials(..)
|
( Credentials(..)
|
||||||
, Body(..)
|
, Body(..)
|
||||||
, RawBody
|
, RawBody
|
||||||
@ -25,12 +25,12 @@ import Data.Show.Generic (genericShow)
|
|||||||
import Effect (Effect)
|
import Effect (Effect)
|
||||||
import Effect.Aff.Class (class MonadAff, liftAff)
|
import Effect.Aff.Class (class MonadAff, liftAff)
|
||||||
import Effect.Class (class MonadEffect, liftEffect)
|
import Effect.Class (class MonadEffect, liftEffect)
|
||||||
import HTTP.Form (Form, RawFormData)
|
import Effect.Aff.HTTP.Form (Form, RawFormData)
|
||||||
import HTTP.Form as Form
|
import Effect.Aff.HTTP.Form as Form
|
||||||
import HTTP.Header (ContentType(..), Headers)
|
import Effect.Aff.HTTP.Header (ContentType(..), Headers)
|
||||||
import HTTP.Header as Header
|
import Effect.Aff.HTTP.Header as Header
|
||||||
import HTTP.MIME (MIME)
|
import Data.MIME (MIME)
|
||||||
import HTTP.MIME as MIME
|
import Data.MIME as MIME
|
||||||
import Simple.JSON (class WriteForeign, writeJSON)
|
import Simple.JSON (class WriteForeign, writeJSON)
|
||||||
import Unsafe.Coerce (unsafeCoerce)
|
import Unsafe.Coerce (unsafeCoerce)
|
||||||
import Web.File.Blob (Blob)
|
import Web.File.Blob (Blob)
|
@ -1,5 +1,5 @@
|
|||||||
import { Readable } from 'stream';
|
import { Readable } from 'stream'
|
||||||
import { Buffer } from 'buffer';
|
import { Buffer } from 'buffer'
|
||||||
|
|
||||||
/** @type {(r: Response) => () => Promise<Buffer>} */
|
/** @type {(r: Response) => () => Promise<Buffer>} */
|
||||||
export const bufferImpl = r => async () => Buffer.from(await r.arrayBuffer())
|
export const bufferImpl = r => async () => Buffer.from(await r.arrayBuffer())
|
||||||
@ -10,7 +10,7 @@ export const streamImpl = r => () => {
|
|||||||
throw new Error('Response body is empty')
|
throw new Error('Response body is empty')
|
||||||
}
|
}
|
||||||
|
|
||||||
const reader = r.body.getReader();
|
const reader = r.body.getReader()
|
||||||
return new Readable({
|
return new Readable({
|
||||||
read() {
|
read() {
|
||||||
reader
|
reader
|
@ -1,4 +1,4 @@
|
|||||||
module HTTP.Response.Node
|
module Effect.Aff.HTTP.Response.Node
|
||||||
( module X
|
( module X
|
||||||
, buffer
|
, buffer
|
||||||
, stream
|
, stream
|
||||||
@ -11,8 +11,8 @@ import Control.Promise as Promise
|
|||||||
import Effect (Effect)
|
import Effect (Effect)
|
||||||
import Effect.Aff.Class (class MonadAff, liftAff)
|
import Effect.Aff.Class (class MonadAff, liftAff)
|
||||||
import Effect.Class (class MonadEffect, liftEffect)
|
import Effect.Class (class MonadEffect, liftEffect)
|
||||||
import HTTP.Response (Response)
|
import Effect.Aff.HTTP.Response (Response)
|
||||||
import HTTP.Response hiding (stream) as X
|
import Effect.Aff.HTTP.Response hiding (stream) as X
|
||||||
import Node.Buffer (Buffer)
|
import Node.Buffer (Buffer)
|
||||||
import Node.Stream (Readable)
|
import Node.Stream (Readable)
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
module HTTP.Response
|
module Effect.Aff.HTTP.Response
|
||||||
( Response(..)
|
( Response(..)
|
||||||
, stream
|
, stream
|
||||||
, clone
|
, clone
|
||||||
@ -31,8 +31,8 @@ import Effect.Class (class MonadEffect, liftEffect)
|
|||||||
import Effect.Exception (Error, error)
|
import Effect.Exception (Error, error)
|
||||||
import Foreign (Foreign)
|
import Foreign (Foreign)
|
||||||
import Foreign.Object (Object)
|
import Foreign.Object (Object)
|
||||||
import HTTP.Form (Form, RawFormData)
|
import Effect.Aff.HTTP.Form (Form, RawFormData)
|
||||||
import HTTP.Form as Form
|
import Effect.Aff.HTTP.Form as Form
|
||||||
import Simple.JSON (class ReadForeign, readImpl)
|
import Simple.JSON (class ReadForeign, readImpl)
|
||||||
import Web.File.Blob (Blob)
|
import Web.File.Blob (Blob)
|
||||||
import Web.Streams.ReadableStream (ReadableStream)
|
import Web.Streams.ReadableStream (ReadableStream)
|
Loading…
Reference in New Issue
Block a user