michael 5 лет назад
Родитель
Сommit
84b1c93a7d
3 измененных файлов с 292 добавлено и 0 удалено
  1. 203 0
      packages/nodejs/nodejshttp.pp
  2. 13 0
      packages/nodejs/nodejsnet.pp
  3. 76 0
      packages/nodejs/nodejsurl.pp

+ 203 - 0
packages/nodejs/nodejshttp.pp

@@ -0,0 +1,203 @@
+unit nodejshttp;
+
+{$mode objfpc}
+{$modeswitch externalclass}
+
+interface
+
+uses
+  js, nodejs, types;
+
+Type
+  TNJSStreamDuplex = class external name 'stream.Duplex' (TJSObject);
+
+  TJSHandleObj = class external name 'Object' (TJSObject);
+
+  TJSNetSocket = class external name 'net.Socket' (TJSObject);
+
+  TNJSNetCallback = reference to procedure(Obj : TJSObject);
+  TNJSNetGetConnectionsCallback = reference to procedure(err : TJSObject; count : Integer);
+  TNJSNetListenCallBack = reference to procedure(err : TJSObject);
+
+  TJSNetServerOptions = class external name 'Object' (TJSObject)
+    port : cardinal;
+    host : string;
+    path : string;
+    backlog : Cardinal;
+    exclusive : boolean;
+    readableAll : Boolean;
+    writableAll : Boolean;
+    ipv6only : Boolean;
+  end;
+
+  TNJSNetServer = class external name 'net.Server' (TJSObject)
+    listening : boolean;
+    maxConnections : NativeInt;
+    procedure close(Callback : TNJSNetCallback = Nil);
+    procedure getConnections(CallBack : TNJSNetGetConnectionsCallback);
+    function listen(handle : TJSHandleObj) : TNJSNetServer;
+    function listen(handle : TJSHandleObj; BackLog : Cardinal) : TNJSNetServer;
+    function listen(handle : TJSHandleObj; BackLog : Cardinal; ErrCallback : TNJSNetListenCallBack) : TNJSNetServer;
+    function listen(Options : TJSObject) : TNJSNetServer;
+    function listen(Options : TJSObject; ErrCallback : TNJSNetListenCallBack) : TNJSNetServer;
+    function listen(Options : TJSNetServerOptions) : TNJSNetServer;
+    function listen(Options : TJSNetServerOptions; ErrCallback : TNJSNetListenCallBack) : TNJSNetServer;
+    function listen(Port : Cardinal) : TNJSNetServer;
+    function listen(Port : Cardinal; ErrCallback : TNJSNetListenCallBack) : TNJSNetServer;
+    function listen(Port : Cardinal; Host : string) : TNJSNetServer;
+    function listen(Port : Cardinal; Host : string; ErrCallback : TNJSNetListenCallBack) : TNJSNetServer;
+    function listen(Port : Cardinal; Host : string; backlog : Cardinal) : TNJSNetServer;
+    function listen(Port : Cardinal; Host : string; backlog : Cardinal; ErrCallback : TNJSNetListenCallBack) : TNJSNetServer;
+    procedure ref;
+    procedure unref;
+  end;
+
+  { TNJSHTTPIncomingMessage }
+
+  TNJSHTTPIncomingMessage = class external name 'http.IncomingMessage' (TJSObject)
+  private
+    FAborted: boolean; external name 'aborted';
+    FComplete: boolean; external name 'complete';
+    FHeaders: TJSObject; external name 'headers';
+    FhttpVersion : String; external name 'httpVersion';
+    FMethod : String; external name 'method';
+    FrawHeaders : TStringDynArray; external name 'rawHeaders';
+    FrawTrailers : TStringDynArray; external name 'rawTrailers';
+    Fsocket : TNJSStreamDuplex; external name 'socket';
+    FstatusCode : NativeInt; external name 'statusCode';
+    FstatusMessage : string; external name 'statusMessage';
+    Ftrailers: TJSObject; external name 'trailers';
+    FURL : String; external name 'url';
+  Public
+    procedure destroy;
+    procedure destroy(aError : TJSError);
+    procedure setTimeout(msecs : NativeInt);
+    procedure setTimeout(msecs : NativeInt; callBack : TNJSEventEmitterHandler);
+    Property aborted : boolean Read FAborted;
+    Property complete : boolean Read FComplete;
+    Property headers : TJSObject Read FHeaders;
+    property httpVersion : String Read FhttpVersion;
+    property method : String Read Fmethod;
+    property rawHeaders : TStringDynArray read FrawHeaders;
+    property rawTrailers : TStringDynArray read FrawTrailers;
+    property socket : TNJSStreamDuplex Read FSocket;
+    property statusCode : NativeInt Read FstatusCode;
+    property statusMessage : String Read FstatusMessage;
+    Property trailers : TJSObject Read FTrailers;
+    Property url : String Read FURL;
+  end;
+
+  TNJSHTTPClientRequest = class external name 'http.ClientRequest' (TJSObject)
+  end;
+
+  TNJSHTTPServerResponse = class external name 'http.ServerResponse' (TJSObject)
+  Private
+    FHeadersSent : Boolean; external name 'headersSent';
+    fSocket : TNJSStreamDuplex; external name 'socket';
+    FwritableEnded : Boolean; external name 'writableEnded';
+  Public
+    sendDate : boolean;
+    statusCode : NativeInt;
+    statusMessage : string;
+    Procedure AddTrailers(Headers : TJSObject);
+    Procedure cork;
+    function end_ : TNJSHTTPServerResponse; overload; external name 'end';
+    function end_(data : String): TNJSHTTPServerResponse; overload;  external name 'end';
+    function end_(data,encoding : String): TNJSHTTPServerResponse; overload;  external name 'end';
+    function end_(data,encoding : String; Callback : TNJSEventEmitterHandler ) : TNJSHTTPServerResponse; overload;  external name 'end';
+    procedure flushHeaders;
+    function getHeader(aName : string) : JSValue;
+    function getHeaderNames : TStringDynArray;
+    function getHeaders : TJSObject;
+    function hasHeader(aName : string) : Boolean;
+    procedure removeHeader(aName : string);
+    procedure setHeader(aName : string; aValue : String); overload;
+    procedure setHeader(aName : string; aValue : Nativeint); overload;
+    procedure setHeader(aName : string; aValue : TStringDynArray); overload;
+    procedure setHeader(aName : string; aValue : TJSArray); overload;
+    procedure setHeader(aName : string; aValue : JSValue); overload;
+    procedure setTimeOut(mSecs : NativeInt); overload;
+    procedure setTimeOut(mSecs : NativeInt; aCallBack : TNJSEventEmitterHandler); overload;
+    procedure uncork;
+    procedure write(chunk : string);
+    procedure write(buffer : TNJSBuffer);
+    property headersSent : Boolean read FHeadersSent;
+    property socket : TNJSStreamDuplex read fSocket;
+    property writableEnded : Boolean read FwritableEnded;
+  end;
+
+  TNJSHTTPServer = class external name 'http.Server' (TNJSNetServer)
+  end;
+
+  TNJSAgentCreateConnectionCallBack = reference to function (err,stream : TJSObject) : TJSObject;
+
+  TNJSHTTPAgent = class external name 'http.Agent' (TJSObject)
+
+  end;
+
+  TNJSRequestHandler = reference to procedure (Request : TNJSHTTPIncomingMessage; Response : TNJSHTTPServerResponse);
+  TNJSGetRequestHandler = reference to procedure (Request :TNJSHTTPIncomingMessage);
+
+  TNJSHTTPServerOptions = Class external name 'Object' (TJSObject)
+    IncomingMessage : TNJSHTTPIncomingMessage;
+    ServerResponse : TNJSHTTPServerResponse;
+    insecureHTTPParser : Boolean;
+    maxHeaderSize : NativeInt;
+  end;
+
+  TNJSHTTPRequestOptions = Class external name 'Object' (TJSObject)
+  Private
+    FAgentAsBoolean : Boolean external name 'agent';
+  Public
+    agent : TNJSHTTPAgent;
+    auth : String;
+    createConnection : TNJSAgentCreateConnectionCallBack;
+    defaultPort : word;
+    family : word;
+    headers : TJSObject;
+    host : string;
+    hostname : string;
+    insecureHTTPParser : Boolean;
+    localAddress : string;
+    maxHeaderSize : NativeInt;
+    method : String;
+    Path : String;
+    port : word;
+    protocol : string;
+    setHost : Boolean;
+    socketPath : string;
+    timeout : cardinal;
+    Property agentAsBoolean : Boolean Read FAgentAsBoolean Write FAgentAsBoolean;
+  end;
+
+  TNJSHTTP = class external name 'http' (TJSObject)
+  Private
+    fmethods : TStringDynArray; external name 'METHODS';
+    fstatuscodes : TJSObject; external name 'STATUS_CODES';
+    fglobalagent : TNJSHTTPAgent; external name 'globalAgent';
+    fmaxHeaderSize : Cardinal; external name 'maxHeaderSize';
+  Public
+    property METHODS : TStringDynArray read fmethods;
+    property STATUS_CODES : TJSObject read fstatuscodes;
+    property globalAgent : TNJSHTTPAgent Read fglobalagent;
+    property maxHeaderSize : Cardinal read FmaxHeaderSize;
+    function createServer(options : TNJSHTTPServerOptions; Listener : TNJSRequestHandler = Nil) : TNJSHTTPServer;
+    function createServer(options : TJSObject; Listener : TNJSRequestHandler = Nil) : TNJSHTTPServer;
+    function createServer(Listener : TNJSRequestHandler = Nil) : TNJSHTTPServer;
+    function get(options: TNJSHTTPRequestOptions; aCallBack : TNJSGetRequestHandler = nil) : TNJSHTTPIncomingMessage;
+    function get(options: TJSObject; aCallBack : TNJSGetRequestHandler = nil) : TNJSHTTPIncomingMessage;
+    function get(URL : string; options: TJSObject; aCallBack : TNJSGetRequestHandler = nil) : TNJSHTTPIncomingMessage;
+    function get(URL : string; options: TNJSHTTPRequestOptions; aCallBack : TNJSGetRequestHandler = nil) : TNJSHTTPIncomingMessage;
+    function request(options: TJSObject; aCallBack : TNJSGetRequestHandler = nil) : TNJSHTTPIncomingMessage;
+    function request(URL : string; options: TNJSHTTPRequestOptions; aCallBack : TNJSGetRequestHandler = nil) : TNJSHTTPIncomingMessage;
+  end;
+
+var
+  http : TNJSHTTP;
+
+implementation
+
+initialization
+  http:=TNJSHTTP(require('http'));
+end.
+

+ 13 - 0
packages/nodejs/nodejsnet.pp

@@ -0,0 +1,13 @@
+unit nodejsnet;
+
+{$mode objfpc}
+
+interface
+
+uses
+  Classes, SysUtils;
+
+implementation
+
+end.
+

+ 76 - 0
packages/nodejs/nodejsurl.pp

@@ -0,0 +1,76 @@
+unit nodejsurl;
+
+{$mode objfpc}
+{$ModeSwitch externalclass}
+
+interface
+
+uses
+  Types, JS, nodeJS;
+
+Type
+  TNJSURLSearchParams = Class external name 'URLSearchParams' (TJSObject)
+    constructor new; overload;
+    constructor new(aQueryString : string);overload;
+    constructor new(aObject : TJSObject);overload;
+    constructor new(aMap : TJSMap);overload;
+    constructor new(aArray : TJSArray);overload;
+    procedure append(const aName, aValue : string);
+    procedure delete(const aName : string);
+    function entries : TJSIterator;
+    function get(const aName : string) : string;
+    function getAll(const aName : string) : TStringDynArray;
+    function has(const aName : string) : boolean;
+    function keys : TJSIterator;
+    procedure set_(const aName, aValue : string); external name 'set';
+    procedure sort;
+    function toString : string;
+    function values: TJSIterator;
+  end;
+
+  TNJSURL = Class external name 'URL' (TJSObject)
+  Public
+    hash : string;
+    host : string;
+    hostname : string;
+    href : string;
+    origin : string;
+    password : string;
+    pathname : string;
+    port : string;
+    protocol : string;
+    search : String;
+    searchParams : TNJSURLSearchParams;
+    username : string;
+    constructor new(aURL : string); overload;
+    constructor new(aURL,aBase : string); overload;
+    constructor new(aURL : string; aBase : TNJSURL); overload;
+    function toString : string;
+    function toJSON : string;
+  end;
+
+  TJNSURLGlobalFormatOptions =  class external name 'Object' (TJSObject)
+    auth : boolean;
+    fragment : boolean;
+    search : boolean;
+    unicode : boolean;
+  end;
+
+  TJNSUrlGlobal =  class external name 'Object' (TJSObject)
+    class function domainToASCII(adomain : string) : string;
+    class function domainToUnicode(adomain : string) : string;
+    class function fileURLToPath(aURL : string) : string;
+    class function format(aURL : TNJSURL; Options : TJSObject) : string;
+    class function format(aURL : TNJSURL; Options : TJNSURLGlobalFormatOptions) : string;
+    class function pathToFileURL(aPath : string) : TNJSURL;
+  end;
+
+var
+  url : TJNSUrlGlobal;
+
+implementation
+
+initialization
+  url:=TJNSUrlGlobal(require('url'));
+end.
+