Coder Social home page Coder Social logo

easysoap's Introduction

EasySoap

easysoap is a WSDL SoapClient for Node.js.

Support

How to get ?

install with npm

npm i easysoap

Usage

get a soapclient instance

const EasySoap = require('easysoap');
const soapClient = EasySoap(params, opts);

params createParams, soapOptions
response instance of easysoap

possible parameter data

createParams

{
    host               : 'www.example.com',
    path               : '/soap/path',
    wsdl               : '/wsdl/path',
    headers            : Array or Object,
    rejectUnauthorized : true/false
}

soapOptions

{
    secure : true/false //is https or http
}
the following methods available after creating an soapclient instance with easysoap

call

params callParams
response callResponseObject

getRequestXml

params callParams
response xml (string)

callParams

{
    method    : "sampleMethodName",
    attributes: Object of custom tag attributes for given params,
    params	: Object/Array of params
}

getXmlDataAsJson

params xml (string)
response xmldata as json

getAllFunctions

response Function Names (array)

getMethodParamsByName

params methodName (string)
response methodParams (object)

Examples

(() => {
    'use strict';
    const EasySoap = require('easysoap');

    // define soap params
    const params = {
	   host: 'www.sample.com',
	   path: '/path/soap/',
	   wsdl: '/path/wsdl/',

	   // set soap headers (optional)
	   headers: [{
	       'name'      : 'item_name',
            'value'    : 'item_value',
            'namespace': 'item_namespace'
       }]
    }

    /*
     * create the client
     */
    var soapClient = EasySoap(params);


/*
 * get all available functions
 */
soapClient.getAllFunctions()
   .then((functionArray) => { console.log(functionArray); })
   .catch((err) => { throw new Error(err); });


/*
 * get the method params by given methodName
 */
soapClient.getMethodParamsByName('methodName')
   .then((methodParams) => {
      console.log(methodParams.request);
      console.log(methodParams.response);
    })
    .catch((err) => { throw new Error(err); });


/*
 * call soap method
 */
soapClient.call({
   method    : 'methodName',
   attributes: {
      xmlns: 'http://www.sample.com'
   },
   params: {
      testParam: 1,
      testParam: [2, 3],
      testParam: {
         '_value'     : 4,
         '_attributes': {
             'xmlns1': 'http://www.sample.com/other'
         }
      }
   }
})
.then((callResponse) => {
    console.log(callResponse.data);	// response data as json
    console.log(callResponse.body);	// response body
    console.log(callResponse.header);  //response header
})
.catch((err) => { throw new Error(err); });

easysoap's People

Contributors

avindra avatar dependabot-preview[bot] avatar izatop avatar jay-doubleyou avatar knutedelbert avatar moszeed avatar pfeugene avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

easysoap's Issues

Error: No XML to parse!

Hi folks,

I am trying to do a simple request and I am getting the follwing error:

Error: No XML to parse!
at new XmlDocument (/node_modules/xmldoc/lib/xmldoc.js:188:11)
at Object.Wsdlrdr.getXmlDataAsJson (/node_modules/wsdlrdr/src/index.js:390:27)
at wsdlrdr.getMethodParamsByName.then (/node_modules/easysoap/src/easysoap.js:56:58)

client.call({
    'method' : 'generate',
    'params' : args
}).then((callResponse) => {
    console.log(callResponse.data);
    console.log(callResponse.body);
    console.log(callResponse.header);
}).catch((err) => {
    console.log(err)
});

at easysoap.js:56: the soapResponse.body is empty! Am I doing something wrong?

Thanks in advance!

Issue calling soap function

getting TypeError: Cannot read property '0' of null

Code:

var easySoap = require('easysoap');

//soap client params
var clientParams = {

//set soap connection data (mandatory values)
host: 'webservice.kareo.com',
path: '/services/soap/',
wsdl: '/2.1/KareoServices.svc?wsdl',

//set soap header (optional)
header: [{
    'user': 'item_name',
    'password': 'item_value',
    'customerKey': 'item_namespace'
}]

};

//soap client options
var clientOptions = {
secure: true //iss https or http
};

//create new soap client
var SoapClient = new easySoap.Client(clientParams, clientOptions);

SoapClient.on('error', function(error) {
    console.log(error);
});

SoapClient.once('initialized', function() {

    console.log('Initialized');
    //after successful initialized


    //old deprecated way, will be removed in future versions
    // SoapClient.once('soapMethod', function(err, data, header) {
    //     //soap response
    // });

    // SoapClient.call({
    //     'method' : 'soapMethod',
    //     'params' : {
    //         'test' : 1
    //     }
    // });


    //new promise way
    SoapClient.call({
        method : 'GetAppointments',
        params : {
        }
    })
    .done(function(data, header) {

        console.log(data, header);
    }, function(err) {

        console.log('Error: '+err);
    });

});

//initialize soap client
SoapClient.init();

Version 1.0.0

Hi there,
after a long time i nearly finished with a complete rewrite of "easysoap",
it will include following:

  • native Promise based API
  • better error reporting
  • Unit Tests
  • some ES6 Syntax Sugar

so next Version will also only runnable under Node >= 4.0.0.

What compiler is this using?

I see references like (values) => { vs function(values) { and so default npm install easysoap doesn't work. What am I missing?

Allow multi level Header

It should be possible to create a hierarchy of headers.
e.g:

Soap XML Result:

<soap:Header>
  <MySoapHeader xmlns="http://my.service.com/">
    <Token>string</Token>
  </MySoapHeader>
</soap:Header>

Therefore it would be my idea to allow to pass an array of headers to the value attribute of a header.

var client = easysoap.createClient(...);
client.call({
    method: ...,
    attributes: ...,
    headers: [
    {
    'name': 'MySoapHeader',
    'namespace': 'http://my.service.com/',
    'value': [{
        'name': 'Token',
        'value': 'myToken'
    }]
  }],
    params: ...
})

CustomAttributes in Call Params

Hi Hoping this has been answered before

The SOAP service we are working with uses attributes throughout the element tree.

Is there an example of how to create a params object that will produce CML Like the below

 <ParentElement **CustomAttribute0**="yyyyyy">
      <WrappingElement **CustomAttribute1**="false">
        <SubElements>
          <SubElement>**Custom1**="27/02/2019" **Custom2**="IM" **Custom3**="I" **Custom4**="Added></SubElement>
</SubElements>
</Wrapping Element>
</ParentElement >

Self-signed certificate failue

Hi,
I used the basic form (as the example you provided suggests) and even when changing to unsecure:

var clientOptions = {
  secure : false
};

And I got the following error:

{ [Error: self signed certificate] code: 'DEPTH_ZERO_SELF_SIGNED_CERT' }

Thanks!

Better Examples Needed

Thanks for your package, but the example you provided in the Readme is quite vague -- how do you split a SOAP web service URL into the "host", "path" and "wsdl" parameters, for example? I keep getting "Error: no wsdl/xml response" message when I call the "createClient" method.

ReferenceError: name is not defined

Hi,
I'm able to create a client and get methods and params but when I call a method i get:
undefined:8
((__t=( name))==null?'':__t)+
ReferenceError: name is not defined
on
easysoap.js:49:36
this is somehow related to underscore.js but I haven't been able to figure it out. Any idea what i could be doing wrong?
node version is 6.9.1
thank you

How to set soapAction?

When making a call I get

{
    Fault: [ 
        { faultcode: 'soap:Client' },
        { faultstring: 'System.Web.Services.Protocols.SoapException: Unable to handle request without a valid action parameter. Please supply a valid soap action.\r\n   at System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest()\r\n   at System.Web.Services.Protocols.SoapServerProtocol.Initialize()\r\n   at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)' },
        { detail: '' } 
    ]
}

After doing some research I found out that my header needs to include a field called soapAction looking over the API i'm trying to use the soap action seems to change with each request. I'v already tried including the headers when I create my soapClient but this still doesn't affect anything.

A side question which would help further:
Is there a way to see what is being sent when I make a call with easysoap to see what kind of request is being made.

Pass-through request options

Firstly, thanks for easysoap. It's a particularly useful lighter alternative to node-soap in cases where you only need a client.

The soap server I'm using uses HTTPs without a valid certificate (beyond my control). It also expects the SOAPAction header to be set per request, which although is currently supported, such headers are also included in the Soap envelope itself (via getRequestHeadParams), which is causing unexpected behaviour.

Since rejectUnauthorized is already being handled manually, generalising this handle any params would be useful.

Documentation for attributes parameter of call method

I am trying to configure a node.js app to consume a SOAP service for an SSL provider. I am able to call getAllFunctions and getMethodParamsByName without a problem but I am unable to actually call a soap method. The call fails silent so I'm not sure where the problem is.

As a test example, getWebServiceInfo is a method that an unauthenticated user may call with no parameters.

soapClient.call({
    method    : 'getWebServiceInfo',
    params: {
    }
})
.then((callResponse) => {
    console.log(callResponse.data); // response data as json
    console.log(callResponse.body); // response body
    console.log(callResponse.header);  //response header
})
.catch((err) => { throw new Error(err); });

Is there something I'm missing configuration wise? I am basing my node project off a script I wrote using the suds library in Python. Suds just works and exposes a function to instantiate a parameter objects based on its wsdl definition.

Any help would be appreciated.

Elements Object Type check on WSDL parsing

In the getMethodParams function in wsdl.js, when it calls
var elements = searchNode(complex_type, 'element');

elements can return as false. Then it does a _(elements).each which causes a exception when doing a .keys on a non-object. Will there be a fix for this?

WSDL's that import the schema definitions don't come across this issue because it can't find the the node name in the first place and returns true from getParams function.

Attributes in XML now shown.

Got an XML with attributes, these are not parsed into the JSON tho:

<manufacturer key="40" value="Alfa Romeo"/

becomes: { manufacturer: '' },

Procedure processCheckOut not present

I'm trying to call a method but the data that I'm getting is Procedure 'processCheckOut' not present

` var params = {
"host": 'bla bla', "path": '/bla bla.php',
"wsdl": '/bla bla.php?wsdl',
headers: soapHeader};

const soapClient = EasySoap(params, { secure: true });

soapClient.getAllFunctions()
    .then((functionArray) => { console.log(functionArray); })
    .catch((err) => { throw new Error(err); });

soapClient.getMethodParamsByName('processCheckOut')
    .then((methodParams) => {
        console.log("METHOD PARAMS ARE \n "+JSON.stringify(methodParams)+"\n\n");
    })
    .catch((err) => { throw new Error(err); });

soapClient.call({
    method: 'processCheckOut',
    params: args
}).then((callResponse) => {
    console.log("DATA IS --------- " + JSON.stringify(callResponse.data));	// response data as json
    console.log("BODY IS--------- " + callResponse.body);	// response body
    console.log("HEADER IS--------- " + callResponse.header);  //response header
}).catch((err) => { console.log("processCheckout error: " + err) });

`

getAllFunctions() and getMethodParamsByName() returns successfully but soapClient.call() returns procedure not present when logging out data console.log("DATA IS --------- " + JSON.stringify(callResponse.data));

DATA IS --------- {"Fault":{"faultcode":"SOAP-ENV:Server","faultstring":"Procedure 'processCheckOut' not present"}}

Authenticate with Username and Password

Hello everybody,
is there a way to authenticate using easysoap at the specified WSDL?
Just as it is possible with other SOAP clients, such as e.g. at npm soap with:
client.setSecurity(new soap.BasicAuthSecurity('username', 'password'));
or with soapjs :

var c = soap.createClient(wsdl, {
    username: 'username',
    password: 'password'
});

It would be very nice if such a function could be included. Have done so far only good experiences with easysoap.
Thank you very much!

post fails because of a 0 at the end

Here is a sample post from the module:

POST /Service1.asmx HTTP/1.1
Host: localhost:47506
Connection: keep-alive
Transfer-Encoding: chunked
X-Forwarded-For: 127.0.0.1

161
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:ns1="http://localhost/"
    >



<SOAP-ENV:Body>
    <ns1:getMessage>
        <ordinal>5</ordinal>
    </ns1:getMessage>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
0

Yes, the 0 is from the data being send.
here is a output from a .net client:

POST /Service1.asmx HTTP/1.1
Content-Type: text/xml; charset=utf-8
VsDebuggerCausalityData: uIDPo2xiW+VO2jhAnTd4XvVACFgAAAAAqvYHyroubEi+jw88DvVvbJkNACwZyOxFtnYjFimSNSwACQAA
SOAPAction: "http://localhost/getMessage"
Host: localhost:47506
Content-Length: 217
Expect: 100-continue
Connection: Keep-Alive
X-Forwarded-For: 0:0:0:0:0:0:0:1

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><getMessage xmlns="http://localhost/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><ordinal>5</ordinal></getMessage></s:Body></s:Envelope>

Mostly they are the same. The 0 gets in from somewhere and gum up the works

Character encoding

Hi, I have tried to use this module, but I have an error:

statusMessage: Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'.

What's happen? I need to set character encoding to 'ISO-8859-1' too.

Without WSDL?

Is it possible to use this without WSDL api description? I have to send soap message to an api that doesn't provide a wsdl, and am wondering whether I could use this library to do it.

no SOAPAction Header

Hi All, What is the value of SOAPAction header in a wsdl. Is it same value of method what we are calling or a different value?. As I could see in my wsdl it is the method name but when i pass the value as SOAPAction header the response i am getting is No SOAPAction Header. Can anyone please give me solution. Thanks in advance.

Service authorization

Hi, I'm trying to make a call to a webservice server that requires authentication first, is there any way to send this authentication with easysoap?

TypeError: Cannot read property 'children' of null

I'm testing easysoap with a public and simple webservice from http://oracle-base.com/articles/9i/consuming-web-services-9i.php.
The WSDL is http://oracle-base.com/webservices/server.php?wsdl

What I've found is that the function searchNode(node, name) receives null as the node parameter, so node.children raises an error.

If I test for null before testing for node.children

        if (node === null || node.children === void 0 ||
            node.children === null   ||
            _.isEmpty(node.children)) {
            return false;
        }

then I get a TypeError: Cannot read property 'attr' of undefined at line 352, when the function

    getNamespace(methodRequest.attr.message)

is called.

The first error occurs when "input" is passed as the name parameter, so methodRequest is undefined

Does EasySoap Support WSDL as Local File?

I have had problems trying to set up Easy SoapClient with WSDL File being local.

Any suggestions on how to set it up?

  host    : '',
  path    : '',
  wsdl    : './assets/KinteraConnect.wsdl'

Auto scape strings

I have to send a soap request using an xml as a parameter, but the message was rejected because the xml was not ecaped as an string. To solve this problem I have used a CDATA tag to wrap the xml.

It will be usefull if you include an option to auto scape parameters into CDATA tags.

faultcode: 'a:ActionNotSupported' error

I receive this error when I do call to wcf service

{ Fault: 
   [ { faultcode: 'a:ActionNotSupported' },
     { faultstring: 'The message with Action \'\' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver.  Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).' } ] }

Indeed I should have used wcf.js to consume wcf service. Issue solved

Fix to request template

Hi, first of all I am new to github community. I finally integrated my express server with easysoap.

I found a bug inside request.tpl file that made my soapCall respond with an error.

Response from soap server (nusoap php):
{ Fault: [ { faultcode: 'SOAP-ENV:Client' }, { faultactor: '' }, { faultstring: 'error in msg parsing:\nXML error parsing SOAP payload on line 38: Attribute redefined' }, { detail: '' } ] }

Which basically means attibute xmlns:SOAP-ENV is being duplicated.

Removing line:3 xmlns:SOAP-ENV="<%= envelope.soap_env%>" fixes the problem for me. Not sure if it is the correct fix, Perhaps it is better to move this line to else statement like so:

<% if (envelope.namespaces !== null) { %> <% _.each(envelope.namespaces, function(namespace) { %> <% if (namespace.full !== void 0) { %> xmlns:<%=namespace.short%>="<%=namespace.full%>" <% } %> <% }); %> <% } else { %> xmlns:SOAP-ENV="<%= envelope.soap_env%>" <% } %>

#I've created a pull request for this #35

Regards

requestParamsAttributes.params.find is not a function

get all available methods and get their paramsinfo was successful
but call method gave met this error:

TypeError: requestParamsAttributes.params.find is not a function
    at getMethodParamRequestString (D:\projects\nodejs\irdomain\node_modules\easysoap\src\request.js:104:22)
    at getRequestParamsAsString (D:\projects\nodejs\irdomain\node_modules\easysoap\src\request.js:130:17)

this is mycode:

var query= {
            auth:{
                Webservice_id:this.username,
                Webservice_pass:this.password
            },
            domain:domain
        };
soapClient.call({
    method    : 'DomainInfo',
    attributes: {
       xmlns: this.host
    },
    params: query
 })
 .then((callResponse) => {
     console.log(callResponse.data);	// response data as json
     console.log(callResponse.body);	// response body
     console.log(callResponse.header);  //response header
 })
 .catch((err) => { console.log(err); });

Advanced params

Hi everyone and thanks for a great client,

my problem is that I need to create more advanced parameteres than just simple strings - when calling a web service.

1) THE SERVICE I NEED TO USE
This is the url: http://sis.kolumbus.no:90/SXWS/SXService.svc?wsdl
The method is called GetSituationExchange

Here is a SOAP request that works(i have tested it):

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:siri="http://www.kolumbus.no/siri" xmlns:siri1="http://www.siri.org.uk/siri" xmlns:acsb="http://www.ifopt.org.uk/acsb"> <soapenv:Header/> <soapenv:Body> <siri:GetSituationExchange> <ServiceRequestInfo> <siri1:RequestTimestamp>2013-05-22T12:20:40+02:00</siri1:RequestTimestamp> <siri1:RequestorRef>SWM</siri1:RequestorRef> </ServiceRequestInfo> <Request version="1.4"> <siri1:RequestTimestamp>2013-05-22T12:20:40+02:00</siri1:RequestTimestamp> </Request> <RequestExtension> <!--You may enter ANY elements at this point--> </RequestExtension> </siri:GetSituationExchange> </soapenv:Body> </soapenv:Envelope>

2) MY PROBLEM
Is that i need to create those three parameters; ServiceRequestInfo, Request and RequestExtension - but since they have complex parameters within them โ€“ i dont know how to do it! All examples I have found just uses strings.

2) THE CODE OF MYE CLIENT

`var easysoap = require('easysoap');
var params = {
host : 'http://sis.kolumbus.no:90',
path : '/SXWS/SXService.svc',
wsdl : '/SXWS/SXService.svc?wsdl'
}
var soapClient = easysoap.createClient(params);

soapClient.getAllFunctions()
        .then((functionArray) => { 
            console.log(functionArray);     
        })
        .catch((err) => { 

        throw new Error(err);
         });


        soapClient.getMethodParamsByName('GetSituationExchange')
            .then((methodParams) => { 

            console.log(methodParams.request); 
        })
        .catch((err) => { throw new Error(err); });



 soapClient.call({
        method    : 'GetSituationExchange',
        params: {
            ServiceRequestInfo: {
                params: {
                    RequestTimestamp: {
                        '_value'     : '2013-05-22T12:20:40+02:00'
                    },
                    RequestorRef: {
                        '_value'     : 'SWM'
                    }
                }
            },
            Request: {
                params: {
                    RequestTimestamp: {
                        '_value'     : '2013-05-22T12:20:40+02:00'
                    }                    
                }
            },
            RequestExtension: ""                   
        } 

    })
    .then((callResponse) => { 
        console.log(callResponse.data); // response data as json
        console.log(callResponse.body); // response body
        console.log(callResponse.header);  //response header

    })
    .catch((err) => { 
        console.log(err);
    throw new Error(err); });`

4) THE RESULT OF THE LOG WHEN RUNNING THE CODE
`[ 'CheckStatus',
'DeleteSubscription',
'GetCapabilities',
'GetSituationExchange',
'Subscribe' ]

[ { name: 'ServiceRequestInfo',
namespace: 'q1',
type: 'ServiceRequestInfo',
'xmlns:q1': 'http://www.siri.org.uk/siri' },
{ name: 'Request',
namespace: 'q2',
type: 'SituationExchangeRequest',
'xmlns:q2': 'http://www.siri.org.uk/siri' },
{ name: 'RequestExtension',
namespace: 'tns',
type: 'ExtensionsStructure' } ]

{ Fault:
[ { faultcode: 'a:ActionNotSupported' },
{ faultstring: 'The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).' } ] }`

Can anyone help me with this?
Kind Regards,
Anders

Override default options of request module

I want to proxy my requests via socks5 protocol.
Is it possible to set default options for request module?
So as I see it, it should look something like this:

const request = require('request');
const Agent = require('socks5-https-client/lib/Agent');
const request_with_defaults = request.defaults({
    strictSSL: true,
    agentClass: Agent,
    agentOptions: {
        socksHost: 'host'
        socksUsername: 'user',
        socksPassword: 'password',
        socksPort: 1080
    }, 
    'timeout': 5000, 'connection': 'keep-alive'
});

const soapOptions = {
    request: request_with_defaults,
};

let soapClient = EasySoap(params, soapOptions);

Two typos in your how to use

First of all, thanks for authoring easysoap.

This may be trivial, but there are two typos in your How to use demo.

  1. in the params variable, the '/path/wsdl is missing a trailing single quote character.
  2. the part where getMethodParamsByName is called says respone instead of response.

TypeError: fs.stat is not a function

I'm trying to follow the example in a ReactJS app, I'm using it this way

import EasySoap from 'easysoap';
...
componentDidMount(){
  let params = {
    host  : 'http://www.xignite.com/',
    path  : 'xcurrencies.asmx',
    wsdl  : '?wsdl'
  };

  var soapClient = EasySoap(params);

  soapClient.getAllFunctions()
    .then((functionArray) => { 
      console.log(functionArray); 
    })
    .catch((err) => { 
      throw new Error(err); 
    });
}

and i'm getting the error:
Uncaught (in promise) Error: Error: TypeError: fs.stat is not a function

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.