summary refs log tree commit diff stats
path: root/lib/std/jsfetch.nim
diff options
context:
space:
mode:
authorJuan Carlos <juancarlospaco@gmail.com>2021-08-22 16:32:55 -0300
committerGitHub <noreply@github.com>2021-08-22 12:32:55 -0700
commite65dc36ddd6bbb1a87a607ee8c8491732730fa95 (patch)
treef4cec916a6c42bacb83afb72ea85ee226cfa5f80 /lib/std/jsfetch.nim
parentcc08d5c2c641e9390e9e05012defc9616f5d6ba8 (diff)
downloadNim-e65dc36ddd6bbb1a87a607ee8c8491732730fa95.tar.gz
Implement RFC-391 (#18585)
Diffstat (limited to 'lib/std/jsfetch.nim')
-rw-r--r--lib/std/jsfetch.nim213
1 files changed, 106 insertions, 107 deletions
diff --git a/lib/std/jsfetch.nim b/lib/std/jsfetch.nim
index 1e7bb4d29..a25fe7ca8 100644
--- a/lib/std/jsfetch.nim
+++ b/lib/std/jsfetch.nim
@@ -1,121 +1,120 @@
 ## - Fetch for the JavaScript target: https://developer.mozilla.org/docs/Web/API/Fetch_API
-## .. Note:: jsfetch is Experimental. jsfetch module requires `-d:nimExperimentalJsfetch`
+## .. Note:: jsfetch is Experimental.
 when not defined(js):
   {.fatal: "Module jsfetch is designed to be used with the JavaScript backend.".}
 
-when defined(nimExperimentalJsfetch):
-  import std/[asyncjs, jsheaders, jsformdata]
-  from std/httpcore import HttpMethod
-  from std/jsffi import JsObject
-
-  type
-    FetchOptions* = ref object of JsRoot  ## Options for Fetch API.
-      keepalive*: bool
-      metod* {.importjs: "method".}: cstring
-      body*, integrity*, referrer*, mode*, credentials*, cache*, redirect*, referrerPolicy*: cstring
-
-    FetchModes* = enum  ## Mode options.
-      fmCors = "cors"
-      fmNoCors = "no-cors"
-      fmSameOrigin = "same-origin"
-
-    FetchCredentials* = enum  ## Credential options. See https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials
-      fcInclude = "include"
-      fcSameOrigin = "same-origin"
-      fcOmit = "omit"
-
-    FetchCaches* = enum  ## https://developer.mozilla.org/docs/Web/API/Request/cache
-      fchDefault = "default"
-      fchNoStore = "no-store"
-      fchReload = "reload"
-      fchNoCache = "no-cache"
-      fchForceCache = "force-cache"
-
-    FetchRedirects* = enum  ## Redirects options.
-      frFollow = "follow"
-      frError = "error"
-      frManual = "manual"
-
-    FetchReferrerPolicies* = enum  ## Referrer Policy options.
-      frpNoReferrer = "no-referrer"
-      frpNoReferrerWhenDowngrade = "no-referrer-when-downgrade"
-      frpOrigin = "origin"
-      frpOriginWhenCrossOrigin = "origin-when-cross-origin"
-      frpUnsafeUrl = "unsafe-url"
-
-    Body* = ref object of JsRoot  ## https://developer.mozilla.org/en-US/docs/Web/API/Body
-      bodyUsed*: bool
-
-    Response* = ref object of JsRoot  ## https://developer.mozilla.org/en-US/docs/Web/API/Response
-      bodyUsed*, ok*, redirected*: bool
-      typ* {.importjs: "type".}: cstring
-      url*, statusText*: cstring
-      status*: cint
-      headers*: Headers
-      body*: Body
-
-    Request* = ref object of JsRoot  ## https://developer.mozilla.org/en-US/docs/Web/API/Request
-      bodyUsed*, ok*, redirected*: bool
-      typ* {.importjs: "type".}: cstring
-      url*, statusText*: cstring
-      status*: cint
-      headers*: Headers
-      body*: Body
-
-
-  func newResponse*(body: cstring | FormData): Response {.importjs: "(new Response(#))".}
-    ## Constructor for `Response`. This does *not* call `fetch()`. Same as `new Response()`.
-
-  func newRequest*(url: cstring): Request {.importjs: "(new Request(#))".}
-    ## Constructor for `Request`. This does *not* call `fetch()`. Same as `new Request()`.
-
-  func clone*(self: Response | Request): Response {.importjs: "#.$1()".}
-    ## https://developer.mozilla.org/en-US/docs/Web/API/Response/clone
-
-  proc text*(self: Response): Future[cstring] {.importjs: "#.$1()".}
-    ## https://developer.mozilla.org/en-US/docs/Web/API/Body/text
-
-  proc json*(self: Response): Future[JsObject] {.importjs: "#.$1()".}
-    ## https://developer.mozilla.org/en-US/docs/Web/API/Body/json
-
-  proc formData*(self: Body): Future[FormData] {.importjs: "#.$1()".}
-    ## https://developer.mozilla.org/en-US/docs/Web/API/Body/formData
-
-  proc unsafeNewFetchOptions*(metod, body, mode, credentials, cache, referrerPolicy: cstring;
-      keepalive: bool; redirect = "follow".cstring; referrer = "client".cstring; integrity = "".cstring): FetchOptions {.importjs:
-      "{method: #, body: #, mode: #, credentials: #, cache: #, referrerPolicy: #, keepalive: #, redirect: #, referrer: #, integrity: #}".}
-    ## .. warning:: Unsafe `newfetchOptions`.
-
-  func newfetchOptions*(metod: HttpMethod; body: cstring;
-      mode: FetchModes; credentials: FetchCredentials; cache: FetchCaches; referrerPolicy: FetchReferrerPolicies;
-      keepalive: bool; redirect = frFollow; referrer = "client".cstring; integrity = "".cstring): FetchOptions =
-    ## Constructor for `FetchOptions`.
-    result = FetchOptions(
-      body: body, mode: $mode, credentials: $credentials, cache: $cache, referrerPolicy: $referrerPolicy,
-      keepalive: keepalive, redirect: $redirect, referrer: referrer, integrity: integrity,
-      metod: (case metod
-        of HttpHead:   "HEAD".cstring
-        of HttpGet:    "GET".cstring
-        of HttpPost:   "POST".cstring
-        of HttpPut:    "PUT".cstring
-        of HttpDelete: "DELETE".cstring
-        of HttpPatch:  "PATCH".cstring
-        else:          "GET".cstring
-      )
+import std/[asyncjs, jsheaders, jsformdata]
+from std/httpcore import HttpMethod
+from std/jsffi import JsObject
+
+type
+  FetchOptions* = ref object of JsRoot  ## Options for Fetch API.
+    keepalive*: bool
+    metod* {.importjs: "method".}: cstring
+    body*, integrity*, referrer*, mode*, credentials*, cache*, redirect*, referrerPolicy*: cstring
+
+  FetchModes* = enum  ## Mode options.
+    fmCors = "cors"
+    fmNoCors = "no-cors"
+    fmSameOrigin = "same-origin"
+
+  FetchCredentials* = enum  ## Credential options. See https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials
+    fcInclude = "include"
+    fcSameOrigin = "same-origin"
+    fcOmit = "omit"
+
+  FetchCaches* = enum  ## https://developer.mozilla.org/docs/Web/API/Request/cache
+    fchDefault = "default"
+    fchNoStore = "no-store"
+    fchReload = "reload"
+    fchNoCache = "no-cache"
+    fchForceCache = "force-cache"
+
+  FetchRedirects* = enum  ## Redirects options.
+    frFollow = "follow"
+    frError = "error"
+    frManual = "manual"
+
+  FetchReferrerPolicies* = enum  ## Referrer Policy options.
+    frpNoReferrer = "no-referrer"
+    frpNoReferrerWhenDowngrade = "no-referrer-when-downgrade"
+    frpOrigin = "origin"
+    frpOriginWhenCrossOrigin = "origin-when-cross-origin"
+    frpUnsafeUrl = "unsafe-url"
+
+  Body* = ref object of JsRoot  ## https://developer.mozilla.org/en-US/docs/Web/API/Body
+    bodyUsed*: bool
+
+  Response* = ref object of JsRoot  ## https://developer.mozilla.org/en-US/docs/Web/API/Response
+    bodyUsed*, ok*, redirected*: bool
+    typ* {.importjs: "type".}: cstring
+    url*, statusText*: cstring
+    status*: cint
+    headers*: Headers
+    body*: Body
+
+  Request* = ref object of JsRoot  ## https://developer.mozilla.org/en-US/docs/Web/API/Request
+    bodyUsed*, ok*, redirected*: bool
+    typ* {.importjs: "type".}: cstring
+    url*, statusText*: cstring
+    status*: cint
+    headers*: Headers
+    body*: Body
+
+
+func newResponse*(body: cstring | FormData): Response {.importjs: "(new Response(#))".}
+  ## Constructor for `Response`. This does *not* call `fetch()`. Same as `new Response()`.
+
+func newRequest*(url: cstring): Request {.importjs: "(new Request(#))".}
+  ## Constructor for `Request`. This does *not* call `fetch()`. Same as `new Request()`.
+
+func clone*(self: Response | Request): Response {.importjs: "#.$1()".}
+  ## https://developer.mozilla.org/en-US/docs/Web/API/Response/clone
+
+proc text*(self: Response): Future[cstring] {.importjs: "#.$1()".}
+  ## https://developer.mozilla.org/en-US/docs/Web/API/Body/text
+
+proc json*(self: Response): Future[JsObject] {.importjs: "#.$1()".}
+  ## https://developer.mozilla.org/en-US/docs/Web/API/Body/json
+
+proc formData*(self: Body): Future[FormData] {.importjs: "#.$1()".}
+  ## https://developer.mozilla.org/en-US/docs/Web/API/Body/formData
+
+proc unsafeNewFetchOptions*(metod, body, mode, credentials, cache, referrerPolicy: cstring;
+    keepalive: bool; redirect = "follow".cstring; referrer = "client".cstring; integrity = "".cstring): FetchOptions {.importjs:
+    "{method: #, body: #, mode: #, credentials: #, cache: #, referrerPolicy: #, keepalive: #, redirect: #, referrer: #, integrity: #}".}
+  ## .. warning:: Unsafe `newfetchOptions`.
+
+func newfetchOptions*(metod: HttpMethod; body: cstring;
+    mode: FetchModes; credentials: FetchCredentials; cache: FetchCaches; referrerPolicy: FetchReferrerPolicies;
+    keepalive: bool; redirect = frFollow; referrer = "client".cstring; integrity = "".cstring): FetchOptions =
+  ## Constructor for `FetchOptions`.
+  result = FetchOptions(
+    body: body, mode: $mode, credentials: $credentials, cache: $cache, referrerPolicy: $referrerPolicy,
+    keepalive: keepalive, redirect: $redirect, referrer: referrer, integrity: integrity,
+    metod: (case metod
+      of HttpHead:   "HEAD".cstring
+      of HttpGet:    "GET".cstring
+      of HttpPost:   "POST".cstring
+      of HttpPut:    "PUT".cstring
+      of HttpDelete: "DELETE".cstring
+      of HttpPatch:  "PATCH".cstring
+      else:          "GET".cstring
     )
+  )
 
-  proc fetch*(url: cstring | Request): Future[Response] {.importjs: "$1(#)".}
-    ## `fetch()` API, simple `GET` only, returns a `Future[Response]`.
+proc fetch*(url: cstring | Request): Future[Response] {.importjs: "$1(#)".}
+  ## `fetch()` API, simple `GET` only, returns a `Future[Response]`.
 
-  proc fetch*(url: cstring | Request; options: FetchOptions): Future[Response] {.importjs: "$1(#, #)".}
-    ## `fetch()` API that takes a `FetchOptions`, returns a `Future[Response]`.
+proc fetch*(url: cstring | Request; options: FetchOptions): Future[Response] {.importjs: "$1(#, #)".}
+  ## `fetch()` API that takes a `FetchOptions`, returns a `Future[Response]`.
 
-  func toCstring*(self: Request | Response | Body | FetchOptions): cstring {.importjs: "JSON.stringify(#)".}
+func toCstring*(self: Request | Response | Body | FetchOptions): cstring {.importjs: "JSON.stringify(#)".}
 
-  func `$`*(self: Request | Response | Body | FetchOptions): string = $toCstring(self)
+func `$`*(self: Request | Response | Body | FetchOptions): string = $toCstring(self)
 
 
-runnableExamples("-d:nimExperimentalJsfetch -r:off"):
+runnableExamples("-r:off"):
   import std/[asyncjs, jsconsole, jsheaders, jsformdata]
   from std/httpcore import HttpMethod
   from std/jsffi import JsObject