Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / pas2js / 2019-07

window.fetch API

3 messages · 2 people ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Simon Ameis

Hello all,

I'd like to contribute the bindings for the Fetch API as documented here: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API

The methods in TWindowHelper may be integrated into TJSWindow directly. However I didn't want to modify the pas2js sources for my project.

 TJSReadableStream = class external name 'ReadableStream'
  private
    flocked: Boolean; external name 'locked';
  public
    property locked: Boolean read flocked;
    constructor new(underlyingSource: TJSObject);
    constructor new(underlyingSource, queueingStrategy: TJSObject);
    function cancel(reason: TJSDOMString): TJSPromise;
    function getReader(): TJSObject; overload;
    function getReader(mode: TJSObject): TJSObject; overload;
    function pipeThrough(transformStream: TJSObject): TJSReadableStream;
overload;
    function pipeThrough(transformStream, options: TJSObject):
TJSReadableStream; overload;
    function pipeTo(destination: TJSObject): TJSPromise; overload;
    function pipeTo(destination, options: TJSObject): TJSPromise; overload;
    function tee(): TJSArray; // array containing two TJSReadableStream
instances
  end;
  TJSBody = class external name 'Body' (TJSObject)
  private
    fbody: TJSReadableStream; external name 'body';
    fbodyUsed: Boolean; external name 'bodyUsed';
  public
    property body: TJSReadableStream read fbody;
    property bodyUsed: Boolean read fbodyUsed;
    function arrayBuffer(): TJSPromise; // resolves to TJSArrayBuffer
    function blob(): TJSPromise; // resolves to TJSBlob
    function json(): TJSPromise; // resolves to JSON / TJSValue
    function text(): TJSPromise; // resolves to USVString, always
decoded using UTF-8
  end;
  TJSResponse = class external name 'Response' (TJSBody)
  private
    fheaders: TJSObject;  external name 'headers';
    fok: Boolean; external name 'ok';
    fredirected: Boolean; external name 'redirected';
    fstatus: NativeInt; external name 'status';
    fstatusText: String; external name 'statusText';
    ftype: String; external name 'type';
    furl: String; external name 'url';
    fuseFinalUrl: Boolean; external name 'useFinalUrl';
  public
    property headers: TJSObject read fheaders; //
    property ok: Boolean read fok;
    property redirected: Boolean read fredirected;
    property status: NativeInt read fstatus;
    property statusText: String read fstatusText; //
    property _type: String read ftype; //
    property url: String read furl; //
    property useFinalUrl: Boolean read fuseFinalUrl write fuseFinalUrl;
    constructor new(body: TJSObject; init: TJSObject); varargs; external
name 'new';
    function clone(): TJSResponse;
    function error(): TJSResponse;
    function redirect(url: String; Status: NativeInt): TJSResponse;
  end;
  TWindowHelper = class helper for TJSWindow
    function fetch(resource: String; init: TJSObject): TJSPromise;
overload; external name 'fetch';
    function fetch(resource: String): TJSPromise; overload; external
name 'fetch';
    function fetch(resource: TJSObject; init: TJSObject): TJSPromise;
overload; external name 'fetch';
    function fetch(resource: TJSObject): TJSPromise; overload; external
name 'fetch';
  end; 

Kind Regards
Simon Ameis

Reply by email

Michael Van Canneyt
to Simon Ameis

Hello,

This is great ! Thank you for this !

I will add them to the web unit, they were on my ToDo list, you saved me some work :-)

Michael.

Simon Ameis wrote 85 lines
Hello all, I'd like to contribute the bindings for the Fetch API as documented here: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API The methods in TWindowHelper may be integrated into TJSWindow directly. However I didn't want to modify the pas2js sources for my project.  TJSReadableStream = class external name 'ReadableStream'   private     flocked: Boolean; external name 'locked';   public     property locked: Boolean read flocked;     constructor new(underlyingSource: TJSObject);     constructor new(underlyingSource, queueingStrategy: TJSObject);     function cancel(reason: TJSDOMString): TJSPromise;     function getReader(): TJSObject; overload;     function getReader(mode: TJSObject): TJSObject; overload;     function pipeThrough(transformStream: TJSObject): TJSReadableStream; overload;     function pipeThrough(transformStream, options: TJSObject): TJSReadableStream; overload;     function pipeTo(destination: TJSObject): TJSPromise; overload;     function pipeTo(destination, options: TJSObject): TJSPromise; overload;     function tee(): TJSArray; // array containing two TJSReadableStream instances   end;   TJSBody = class external name 'Body' (TJSObject)   private     fbody: TJSReadableStream; external name 'body';     fbodyUsed: Boolean; external name 'bodyUsed';   public     property body: TJSReadableStream read fbody;     property bodyUsed: Boolean read fbodyUsed;     function arrayBuffer(): TJSPromise; // resolves to TJSArrayBuffer     function blob(): TJSPromise; // resolves to TJSBlob     function json(): TJSPromise; // resolves to JSON / TJSValue     function text(): TJSPromise; // resolves to USVString, always decoded using UTF-8   end;   TJSResponse = class external name 'Response' (TJSBody)   private     fheaders: TJSObject;  external name 'headers';     fok: Boolean; external name 'ok';     fredirected: Boolean; external name 'redirected';     fstatus: NativeInt; external name 'status';     fstatusText: String; external name 'statusText';     ftype: String; external name 'type';     furl: String; external name 'url';     fuseFinalUrl: Boolean; external name 'useFinalUrl';   public     property headers: TJSObject read fheaders; //     property ok: Boolean read fok;     property redirected: Boolean read fredirected;     property status: NativeInt read fstatus;     property statusText: String read fstatusText; //     property _type: String read ftype; //     property url: String read furl; //     property useFinalUrl: Boolean read fuseFinalUrl write fuseFinalUrl;     constructor new(body: TJSObject; init: TJSObject); varargs; external name 'new';     function clone(): TJSResponse;     function error(): TJSResponse;     function redirect(url: String; Status: NativeInt): TJSResponse;   end;   TWindowHelper = class helper for TJSWindow     function fetch(resource: String; init: TJSObject): TJSPromise; overload; external name 'fetch';     function fetch(resource: String): TJSPromise; overload; external name 'fetch';     function fetch(resource: TJSObject; init: TJSObject): TJSPromise; overload; external name 'fetch';     function fetch(resource: TJSObject): TJSPromise; overload; external name 'fetch';   end;  Kind Regards Simon Ameis _______________________________________________ Pas2js maillist - https://lists.freepascal.org/cgi-bin/mailman/listinfo/pas2js

Reply by email

Michael Van Canneyt
to Michael Van Canneyt

Added with minor changes, revision 554.

Once more many thanks!

Michael.

Michael Van Canneyt wrote 97 lines
Hello, This is great ! Thank you for this ! I will add them to the web unit, they were on my ToDo list, you saved me some work :-) Michael. On Sat, 27 Jul 2019, Simon Ameis wrote: > Hello all, > > I'd like to contribute the bindings for the Fetch API as documented > here: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API > > The methods in TWindowHelper may be integrated into TJSWindow directly. > However I didn't want to modify the pas2js sources for my project. > >  TJSReadableStream = class external name 'ReadableStream' >   private >     flocked: Boolean; external name 'locked'; >   public >     property locked: Boolean read flocked; >     constructor new(underlyingSource: TJSObject); >     constructor new(underlyingSource, queueingStrategy: TJSObject); >     function cancel(reason: TJSDOMString): TJSPromise; >     function getReader(): TJSObject; overload; >     function getReader(mode: TJSObject): TJSObject; overload; >     function pipeThrough(transformStream: TJSObject): TJSReadableStream; > overload; >     function pipeThrough(transformStream, options: TJSObject): > TJSReadableStream; overload; >     function pipeTo(destination: TJSObject): TJSPromise; overload; >     function pipeTo(destination, options: TJSObject): TJSPromise; overload; >     function tee(): TJSArray; // array containing two TJSReadableStream > instances >   end; > >   TJSBody = class external name 'Body' (TJSObject) >   private >     fbody: TJSReadableStream; external name 'body'; >     fbodyUsed: Boolean; external name 'bodyUsed'; >   public >     property body: TJSReadableStream read fbody; >     property bodyUsed: Boolean read fbodyUsed; >     function arrayBuffer(): TJSPromise; // resolves to TJSArrayBuffer >     function blob(): TJSPromise; // resolves to TJSBlob >     function json(): TJSPromise; // resolves to JSON / TJSValue >     function text(): TJSPromise; // resolves to USVString, always > decoded using UTF-8 >   end; > >   TJSResponse = class external name 'Response' (TJSBody) >   private >     fheaders: TJSObject;  external name 'headers'; >     fok: Boolean; external name 'ok'; >     fredirected: Boolean; external name 'redirected'; >     fstatus: NativeInt; external name 'status'; >     fstatusText: String; external name 'statusText'; >     ftype: String; external name 'type'; >     furl: String; external name 'url'; >     fuseFinalUrl: Boolean; external name 'useFinalUrl'; >   public >     property headers: TJSObject read fheaders; // >     property ok: Boolean read fok; >     property redirected: Boolean read fredirected; >     property status: NativeInt read fstatus; >     property statusText: String read fstatusText; // >     property _type: String read ftype; // >     property url: String read furl; // >     property useFinalUrl: Boolean read fuseFinalUrl write fuseFinalUrl; >     constructor new(body: TJSObject; init: TJSObject); varargs; external > name 'new'; >     function clone(): TJSResponse; >     function error(): TJSResponse; >     function redirect(url: String; Status: NativeInt): TJSResponse; >   end; > >   TWindowHelper = class helper for TJSWindow >     function fetch(resource: String; init: TJSObject): TJSPromise; > overload; external name 'fetch'; >     function fetch(resource: String): TJSPromise; overload; external > name 'fetch'; >     function fetch(resource: TJSObject; init: TJSObject): TJSPromise; > overload; external name 'fetch'; >     function fetch(resource: TJSObject): TJSPromise; overload; external > name 'fetch'; >   end;  > > Kind Regards > Simon Ameis > > _______________________________________________ > Pas2js maillist - > https://lists.freepascal.org/cgi-bin/mailman/listinfo/pas2js

Reply by email