GithubHelp home page GithubHelp logo

poppinss / indicative Goto Github PK

View Code? Open in Web Editor NEW
419.0 9.0 52.0 1.98 MB

Indicative is a simple yet powerful data validator for Node.js and browsers. It makes it so simple to write async validations on nested set of data.

Home Page: https://indicative.adonisjs.com/

License: MIT License

JavaScript 0.49% TypeScript 99.51%
validator validation

indicative's People

Contributors

andrewjo avatar andreyco avatar carlsonorozco avatar dependabot-preview[bot] avatar enniel avatar greenkeeperio-bot avatar hadihallak avatar ignatevdev avatar jbruni avatar jettcalleja avatar markangelillo avatar matiasolivera avatar nicklaw5 avatar onyekaijeh avatar pelevesque avatar rapodaca avatar romainlanz avatar thetutlage 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

indicative's Issues

Getting errors one field at a time, instead of a full array of them

Hi, I'm wondering if I'm doing something wrong here, or if Indicative is supposed to send errors one field at a time. My code is:

var schema = {
            title: 'required|min:10|max:100',
            description: 'required|min:30|max:300',
            seller: {
                name: 'required|min:3|max:30',
                email: 'required|email',
            }
 }
var messages = {
            required: 'Por favor ingresá {{ field }}',
            email: 'Por favor ingresá un email válido',
            number: 'Por favor ingresá sólo números en {{ field }}'
}

 Indicative.validate(schema, item, errorMessages).then(function (validation_passed) {
        itemModel.insert(item, function() {
            res.json({
                result: item
            });
        });
    }).catch(function (err) {
        console.log(err);
        res.json({
            error: err
     });
 });

So if the form is empty on Submit, I'm getting the error message just for title, and then when I complete that field and re-submit, then I get an error for the empty description, and so on. Is there any way to get them all at once?

Thank you!

PS: Sorry if my code is ugly, I'm a very newbie programmer :)

Proposal

You have created the rule 'range (alias between)' used as shorthand for 'min' and 'max'
What about doing the same thing for rules 'above' and 'under' ?

eg:
'between' => 'min','max' (used for variable value length)
'range' => 'above','under' (used for number)

In any case thank you for indicative it's really a great validation tool 👍

Install error

My package.json

{
  "name": "adonis-app",
  "version": "1.0.0",
  "description": "Folder structure for adonis application",
  "main": "server.js",
  "scripts": {
    "start": "node --harmony_proxies server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "adonis-ace": "^1.0.3",
    "adonis-commands": "^1.0.4",
    "adonis-config-provider": "^1.0.3",
    "adonis-fold": "^1.0.6",
    "adonis-framework": "^1.1.2",
    "adonis-lucid": "^1.0.3",
    "adonis-validation-provider": "^1.0.1",
    "formidable": "^1.0.17",
    "ouch": "^0.2.0-beta",
    "raw-body": "^2.1.2"
  },
  "autoload": {
    "App": "./app"
  },
  "devDependencies": {
    "sqlite3": "^3.1.0"
  }
}

Output when I run npm install

> [email protected] postinstall /Users/u1/dev/heroku-node/node_modules/indicative
> coffee -c .

/Users/u1/dev/heroku-node/node_modules/indicative/lib/extendedRules.coffee:83:10: error: "offset = 0" cannot be assigned
        [offset = 0,key = 'days'] = args.toString().split ","
         ^^^^^^^^^^
479 verbose stack Error: [email protected] postinstall: `coffee -c .`
479 verbose stack Exit status 1
479 verbose stack     at EventEmitter.<anonymous> (/usr/local/lib/node_modules/npm/lib/utils/lifecycle.js:233:16)
479 verbose stack     at emitTwo (events.js:87:13)
479 verbose stack     at EventEmitter.emit (events.js:172:7)
479 verbose stack     at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/lib/utils/spawn.js:24:14)
479 verbose stack     at emitTwo (events.js:87:13)
479 verbose stack     at ChildProcess.emit (events.js:172:7)
479 verbose stack     at maybeClose (internal/child_process.js:818:16)
479 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5)
480 verbose pkgid [email protected]
481 verbose cwd /Users/albin/dev/heroku-node
482 error Darwin 15.0.0
483 error argv "/usr/local/Cellar/node/0.12.4/bin/node" "/usr/local/bin/npm" "install"
484 error node v5.0.0
485 error npm  v3.3.6
486 error code ELIFECYCLE
487 error [email protected] postinstall: `coffee -c .`
487 error Exit status 1
488 error Failed at the [email protected] postinstall script 'coffee -c .'.
488 error This is most likely a problem with the indicative package,
488 error not with npm itself.
488 error Tell the author that this fails on your system:
488 error     coffee -c .
488 error You can get their info via:
488 error     npm owner ls indicative
488 error There is likely additional logging output above.
489 verbose exit [ 1, true ]

My node version: node -v v5.0.0
My npm version: npm -v 3.3.6

Sanitization in Schema

A lot of validation libraries support sanitization in schema. Are you planning to add this feature? A use case would be:

let data = {
    number : '25'
};
let rules = {
    number : 'to_int|min:10|max:45'
};

indicative.validate(data, rules);

Schema rule 'above' works incorrectly

Given "above:0.5", the following output are returned:

-1 -> fail (expected)
0 -> fail (expected)
0.5 -> fail (expected)
0.7 -> fail (UNEXPECTED)
1 -> pass (expected)
1.7 -> pass (expected)

Seems to be interpreting the argument as an integer and then performing the greater than check.

when trying to use validateAll get error

had this line of code and it worked except the messages.

indicative.validate(rules, request.body, valMessages)

when i switched it to this:

indicative.validateAll(rules, request.body, valMessages)

i got this error:

Unhandled rejection TypeError: Cannot read property 'toString' of undefined
at Validator.ExtendedRules.validations.min...
extendedRules.js:490:34)

version: "indicative": "^1.0.8",

How to write a custom Method Regex validation

Hi sorry if I am being obviously stupid, can you point in the direction of how to write a custom Regex validation? example validation should contain Alphanumeric and special characters.

Escaping colon character in the format string of date_format validation rule

I'd like to validate a string that contains time in 24h syntax
with a colon between the hours and minutes.

I tried different ways like:

time: "date_format:HH:mm"
time: "date_format:'HH:mm'"
time: 'date_format:"HH:mm"'
time: 'date_format:HH\:mm'
time: 'date_format:HH::mm'

Neither of them worked. Is it possible somehow?

IP validation passing incorrectly

I'm not sure if I'm doing this correctly but for some reason, this passes.

Indicative
    .validate({ip: 'required|ip'}, {ip: 'H'})
    .then(function(passed) {
        console.log('passed');
    })
    .catch(function(err) {
        console.log(err);
    });

Validating dynamic keys

How would one go about validating dynamic key values using Indicative? For example, if I'm expecting all numeric keys, but I don't know which ones. I'm would be happy to create a PR if it's necessary, some guidance would be appreciated.

email validation trouble

first of all, nice project, it makes me happy with json validation :)

My point here is I want to validate email format only if my field has data.

var indic = new(require('../lib/indic_validator'));

var schema = {
  email: 'email'
};

var data = {
  email: null
};

indic.validateAll(schema, data)
.then(function() { console.log('ok') })
.catch(function() { console.log('bad email format') });

// log "bad email format"
// I expect "ok"

The problem is in this case, I get an error even if there is no data in email field.

I just want to get an error if there is data in email.

Is it possible to handle this ?

Even if validation is passed, it takes me to error callback

Here is my code,

function validateData(res){
    var schema = {
        username: 'required'
    };

    var data = {
        username: "foobar"
    };
 indicative.validate(schema, data)
.then(function(success){
        // Validation passed
        res.send("in success");              
    })
    .catch(function(errors){
        console.log("in errrors");
        // Validation failed
        res.send(errors);
    });       
}

Let me know if something is mistaken form my side

support global / extend message

Problem: If we wanna change default message, each time have to pass message value

indicative.validate(rules, schema, messages)

could do something just like indicative.extend:

indicative.message()

Can't install on OS X

When installing on OS X I get the following error:
npm ERR! [email protected] install: node ./node_modules/coffee-script/bin/coffee -c .
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script 'node ./node_modules/coffee-script/bin/coffee -c .'.
npm ERR! This is most likely a problem with the indicative package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node ./node_modules/coffee-script/bin/coffee -c .

It seems that npm can't find coffee-script module. The search path is "Project root/node_modules/indicative/node_modules/coffee-script/bin/coffee".

Validation causes TypeError

Using indicative 2.1.0
Was having trouble in my build after upgrading from 1.3.x and wrote a sanity script just to make sure.
http://pastebin.com/9gS1084h

Tested with all variations of validate and ValidateAll, with and without message parameter.
Every time it results in this:

\node_modules\indicative\src\Parser\index.js:60
const validationsArray = validations instanceof Array ? validations : validations.split('|')
^
TypeError: validations.split is not a function

As far as I can tell I've followed the new docs to the letter. Am I missing something really obvious that I failed to read or is this a bug?

Regex rule example in the documentation is incorrect

The example in the documentation of the regex rule is as follows:

'regex:/^[(]{0,1}[0-9]{3}[)]{0,1}[-\s\.]{0,1}[0-9]{3}[-\s\.]{0,1}[0-9]{4}$/'

however it doesn't work this way. The correct way is the following:

'regex:^[(]{0,1}[0-9]{3}[)]{0,1}[-\s\.]{0,1}[0-9]{3}[-\s\.]{0,1}[0-9]{4}$'

that is, the slashes at the beginning and the end of the regex is not necessary.

Unable to use custom regex validation

Tried using the below pattern to validate

[a-zA-Z0-9-~!@#$%^*()_+{}:|""?`;',./[]<>&]+

Unhandled rejection TypeError: Cannot read property 'call' of undefined

Benchmarks

The comparisons on your benchmarks would be a lot more interesting if they just captured the validate methods. Benchmarking the creation of the schema object is pointless since that code would only run once in a normal application.

Not getting custom messages.

When trying this:

var rules = eventsValidation.eventCreationRules();
var valMessages = eventsValidation.eventCreationMessages();
 indicative
 .validate(rules, request.body, valMessages)

with valMessages like this:

var messages = {
    title: "Title is required, and must be 10-200 characters.",
    description: "Description is required, and must be 10-2000 characters"
}

produces error messages like this:

[ { field: 'title',
message: 'min validation failed on title',
rule: 'min' } ]

in the documentation it says use validate method, but example has "build" and "success". Those failed as well.

Nested schema

Hello,

I have two questions :

First, is it possible to validate nested arrays like :
{
name: "hello",
friends: [{ userId: 12, age: 23 }, { userId: 13, age: 25 }]
}

I would like to validate objects in friends array...

Second, is it a way to embeded schema ? For instance :
{
name: "required",
friends: ["Friend"]
}

Where "Friend" refers to another indicative schema called Friend.

Thanks for taking time to answer and sorry for my bad english, I'm french :)
Jérémie.

multiple validation return "too many errors"

On my use case at least.

With following code

var indicative = new(require('indicative'));

var stub      = {
    email       : ''
  };

var schema   = {
    email:  'required|email'
  };

//first call
 indicative
    .validateAll(schema, stub)
    .then(function(success){
      console.log('success', success);
    })
    .catch(function(errors){
      console.log('error', errors);
    });
//second call
 indicative
    .validateAll(schema, stub)
    .then(function(success){
      console.log('success', success);
    })
    .catch(function(errors){
      console.log('error', errors);
    });

I expect result

// for first validation
error [ { field: 'email',
    message: 'required validation failed on email',
    rule: 'required' } ]

// for second validation
error [ { field: 'email',
    message: 'required validation failed on email',
    rule: 'required' } ]

But I get this result

// for first validation
error [ { field: 'email',
    message: 'required validation failed on email',
    rule: 'required' },
  { field: 'email',
    message: 'required validation failed on email',
    rule: 'required' } ]

// for second validation
error [ { field: 'email',
    message: 'required validation failed on email',
    rule: 'required' },
  { field: 'email',
    message: 'required validation failed on email',
    rule: 'required' } ]

As you can see errors for both validation is returned on each result.

Dynamic Array data validation

I'm looking for an example where a dynamic array is validated. Something like below:

//! Should detect that test array is not comprised of only integers
var schema = {
  test : 'required|array|integer'
}
var data = {
  test : [ 0, 0, 1, 'a']
};

Thanks for any help!

Regex min max length matches not working

Using [email protected] in node.

I am trying to match phone numbers via regex, with my regex stating that I want at least 10 digits or more.

Schema

const schema = {
    phone: "regex:^\\d{10,}$"
};

Data

const data = {
    phone: "1234567890"
};

Expected: then invocation; no errors.

Actual: catch is invoked, with errors.

If I remove the ,} from the regex, the validation passes. If I put in a range cap, such as {10,20}, the validation fails.

Here is some code I used for sanity check and validated the data above fine:

const regex = /^\d{10,}$/
regex.test(data.phone); // -> true

Change param locations [suggestion]

May I consider we change the parameter location of data and the filter from indicative.validate(filter, data) to indicative.validate(data, filter)... It makes logical sense to have the data input before the filter input, and it makes formatting a little cleaner:
FROM:

indicative.validate({
    username :  'required|alpha',
    password :  'required|min:6|max:14',
    email    :  'required|email'
}, data).then(function(success){
    // Validation passed
}).catch(function(errors){
    // Validation failed
});

TO:

indicative.validate(data, {
    username :  'required|alpha',
    password :  'required|min:6|max:14',
    email    :  'required|email'
}).then(function(success){
    // Validation passed
}).catch(function(errors){
    // Validation failed
});

extra pipe character introduce confusion

accidental extra pipe character in schema declaration makes promises always rejected with empty (object/array) error objerct

var schema = {
    name: 'required|string|max:255|min:6|' /* <-- notice extra pipe here */

};
var v = {
    "name": "1234567"
};


indicative
    .validate(schema, v)
    .then(function (data) {
        // Never here.
        console.log('Hore! ' + JSON.stringify(data));
    })
    .catch(function (err) {
        // Always here!
        console.log('Nooo ' + JSON.stringify(err)); // Nooo {}
    });

range not working well with decimal

var schema= {
    latitude : 'required|decimal|range:-90,90',
    longitude : 'required|decimal|range:-180.0,180.0'
};

var fixture = {
    latitude : 89.0,
    longitude : 89.1
};

indicative
        .validateAll(schema,fixture)
        .then(function(succes){

                })
                .catch(function(err){
                   /*
                   err = [{field: 'latitude', message: 'decimal validation failed on latitude', rule: 'decimal'}, {field: 'longitude', message: 'range validation failed on longitude', rule: 'range'}}
                   */
                });

required rule for integer=0

Hi,

Assume I use the following rule for the amount property: required|integer.

amount is integer and it is ok to be zero, but if set to zero, it is not going to be validated by required rule.

indicative utilized is.truthy, but is.truthy explicitly rejects the number values equal to zero:

is.truthy = function(value) {
    return is.existy(value) && value !== false && is.not.nan(value) && value !== "" && value !== 0;
};

Problem updating to new structure

I have used this module and there was lib folder where in message.js i have modified as my need but when i am updating module .. the whole structure is changed and i cant find lib folder can i get older structure code

While using indicative.extend, even if the second argument of custom message is provided it still uses the default one

My code :

function validateData(stub){
    indicative.extend('titleRule','nothing s here', validations.titleRule)
    var rules = {
        phno :  'required|min:10',
        title: 'title_rule'
    };       
    return indicative.validate(rules, stub)       
}

possibly it is because,

Validator.prototype.validate = function(rulesHash, data, messages) {
      var normalizedData, parsedRules, ruleCopy, self;
      self = this;
      this.initiate(messages);

this.initiate(messages) clears the extended custom message and uses the default one.
Let me know if something is incorrect from my side.
Thankx in advance.

Documentation for Basics/templating/min is misleading

In Basics/Templating the example for "argument" is a use of min. The example implies it is a greater than check, not a length check as stated in the documentation for min.

`const messages = {
min: '{{field}} must be over {{argument.0}} years'
}

const schema = {
age: 'min:18'
}

const data = {
age: 10
}`

Example request

Can you provide an example of validating with both the schema and raw validations? For example, validating both a name and telephone number.

validateAll - error not complete

Hi,

sorry I missed the point of async.filter that only return the filtered list (thus only field name in error) and not the full error.

I make a new pull request to fix this issue

Unhandled rejection Error

Hey there,

Trying to use Indicative and Mongoose to validate and insert some data into MongoDB but keep on being hit with an unhandled rejection error exception.

var user = new model.User(req.body);
    user.validate(req.body).then(function(x) {

        user.save(function(err) {
            if (err) {
                res.send(new restify.errors.BadRequestError());
            } else {
                res.send({
                    userId: user._id
                })
            }
        });

    }).catch(function(err) {
        res.send(new restify.errors.BadRequestError());
        return next();
    }).done();

It seems as soon as I call user.save, it throws:

Unhandled rejection Error: [object Object],[object Object],[object Object]
    at Object.ensureErrorObject (/home/ubuntu/workspace/node_modules/indicative/node_modules/bluebird/js/main/util.js:232:20)
    at Promise._rejectCallback (/home/ubuntu/workspace/node_modules/indicative/node_modules/bluebird/js/main/promise.js:416:22)
    at /home/ubuntu/workspace/node_modules/indicative/node_modules/bluebird/js/main/promise.js:433:17
    at /home/ubuntu/workspace/node_modules/indicative/lib/validator.js:114:20
    at /home/ubuntu/workspace/node_modules/indicative/node_modules/async/lib/async.js:304:13
    at done (/home/ubuntu/workspace/node_modules/indicative/node_modules/async/lib/async.js:132:19)
    at /home/ubuntu/workspace/node_modules/indicative/node_modules/async/lib/async.js:32:16
    at /home/ubuntu/workspace/node_modules/indicative/node_modules/async/lib/async.js:301:17
    at /home/ubuntu/workspace/node_modules/indicative/lib/validator.js:107:18
    at tryCatcher (/home/ubuntu/workspace/node_modules/indicative/node_modules/bluebird/js/main/util.js:24:31)
    at Promise._settlePromiseFromHandler (/home/ubuntu/workspace/node_modules/indicative/node_modules/bluebird/js/main/promise.js:454:31)
    at Promise._settlePromiseAt (/home/ubuntu/workspace/node_modules/indicative/node_modules/bluebird/js/main/promise.js:530:18)
    at Promise._settlePromises (/home/ubuntu/workspace/node_modules/indicative/node_modules/bluebird/js/main/promise.js:646:14)
    at Promise.b (domain.js:183:18)
    at Async._drainQueue (/home/ubuntu/workspace/node_modules/indicative/node_modules/bluebird/js/main/async.js:187:12)
    at Async._drainQueues (/home/ubuntu/workspace/node_modules/indicative/node_modules/bluebird/js/main/async.js:192:10)
    at Async.drainQueues (/home/ubuntu/workspace/node_modules/indicative/node_modules/bluebird/js/main/async.js:15:14)
    at process._tickDomainCallback (node.js:486:13)

FYI, user.validate is simply a prototype method of my mongoose model:

var mongoose = require('mongoose'),
    Indicative = require('indicative'),
    indicative = new Indicative();

var userSchema = new mongoose.Schema({
    email: String,
    forename: String,
    surname: String,
    username: String,
    password: String,
    source: String,
    profileImage: String,
    packageId: Number,
    oAuth: {
        userId: Number,
        token: String
    }
});

var User = mongoose.model('User', userSchema);

User.prototype.validate = function(data) {

    var rules = {
        email     :  'required|email',
        password  :  'required',
        packageId :  'required|number'
    }

    return indicative.validateAll(rules, data);

}

module.exports = {
  User: User
}

Am I completely missing something here?

Thanks

Gavin

required|array error

When trying to validate a required array I am getting an issue. When I run the example provided in example.js cars also has the same failure. Hopefully the example makes sense.

Example:

//! This produces an error when validating saying that test is required even though it is present
var schema = {
  test : 'required|array'
};
data = {
  test : [0, 1]
}

//! Test is now being detected correctly and the error comes up saying it must be an array
data = {
  test: 1
}

Raw validations in Schema

Is there a reason for not using all raw validations in schemas? For instance, string and number validations would be very appreciated.

Trying to redefine `Text` which is a string

'appData.Text': 'object', 'appData.Text.size': 'required_if:appData.Text|integer',
is my schema.

Am I wrong at using the module this way? My idea is to check if appData.Text is there and an object. If it's an object I need the size attribute.

Error: Trying to redefine 'Text' which is a string at DotObject._fill (\node_modules\indicative\node_modules\dot-object\index.js:73:15) at DotObject._fill (\node_modules\indicative\node_modules\dot-object\index.js:79:10) at \node_modules\indicative\node_modules\dot-object\index.js:96:12 at Array.forEach (native) at DotObject.object (\node_modules\indicative\node_modules\dot-object\index.js:92:20) at Function.<anonymous> (\node_modules\indicative\node_modules\dot-object\index.js:59:31) at Validator.validate (\node_modules\indicative\lib\validator.js:133:11)

Beside this: Thanks for the module!

EDIT:
Ok, I could ask for appData.Text.size. This implicit appData.Text is a object.
Seams like a legit workaround for my case.

Unhandled rejection TypeError: Cannot read property 'call' of undefined

Hey,

The following code:

var paramsObj = {
        phone: "111111111111"
        appid: 0
        timestamp: "1447146467120"
        text: "some text"
    };

    //Validate the parameters
    var rules = {
        phone: 'required|regex:^[0-9]*$',
        appid:'integer',
        timestamp:'required',
        text:'requires|string'
    };


    Indicative.validate(rules,paramsObj)
        .then(function(success){
            console.log(success);
        }).catch(function(err){
            console.log(err);
        }).done();

is throwing the following exception when the validation is passed:

Unhandled rejection TypeError: Cannot read property 'call' of undefined
    at /Users/tomerb15/WebstormProjects/chatDel/node_modules/indicative/lib/validator.js:70:40
    at tryCatcher (/Users/tomerb15/WebstormProjects/chatDel/node_modules/indicative/node_modules/bluebird/js/main/util.js:26:23)
    at ReductionPromiseArray.module.exports.ReductionPromiseArray._promiseFulfilled (/Users/tomerb15/WebstormProjects/chatDel/node_modules/indicative/node_modules/bluebird/js/main/reduce.js:109:18)
    at ReductionPromiseArray.init (/Users/tomerb15/WebstormProjects/chatDel/node_modules/indicative/node_modules/bluebird/js/main/promise_array.js:92:18)
    at ReductionPromiseArray.init (/Users/tomerb15/WebstormProjects/chatDel/node_modules/indicative/node_modules/bluebird/js/main/reduce.js:42:10)
    at Async._drainQueue (/Users/tomerb15/WebstormProjects/chatDel/node_modules/indicative/node_modules/bluebird/js/main/async.js:128:12)
    at Async._drainQueues (/Users/tomerb15/WebstormProjects/chatDel/node_modules/indicative/node_modules/bluebird/js/main/async.js:133:10)
    at Immediate.__dirname.drainQueues [as _onImmediate] (/Users/tomerb15/WebstormProjects/chatDel/node_modules/indicative/node_modules/bluebird/js/main/async.js:15:14)
    at processImmediate [as _immediateCallback] (timers.js:383:17)

Which is originated from validator.js:70:40:

return self.validations[rule].call(self, data, field, message, args)["catch"](function(message) {

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.