Giter Site home page Giter Site logo

gulp-prompt's Introduction

Hello I'm Freyskeyd!

Senior software engineer @toposware

I'm a curious, quick learner and passionate developer. Mostly working on Rust related projects.

About

I post stuff on my blog and sometimes on Twitter. Working on Real time messaging application by day building stuff in Rust by night.

โšก Technologies

Talk to me about

  • Backend development using Rust, Erlang, Elixir
  • Front-end development (but be gentle)
  • Software architecture design for scalable and distributed application

gulp-prompt's People

Contributors

crookedneighbor avatar freyskeyd avatar giovannigiordano avatar shannonlal avatar simongiraud avatar spiceboi avatar syrenio 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

gulp-prompt's Issues

Checkbox weird behavior

I'm sorry if this is a stupid question but I can't seem to get it to work. I was trying the basic checkbox tutorial and my code is

gulp.task('spellcheck', function() {
    return gulp.src('app/index.html')
        .pipe($.prompt.prompt({
            type: 'checkbox',
            name: 'bump',
            message: 'What type of bump would you like to do?',
            choices: ['Yes', 'No']
        }, function(res) {
            //value is in res.bump (as an array) 
            console.log(JSON.stringify(res))
            console.log(JSON.stringify(res.bump))
            if(**** == "Yes"){
            }
        })) 
});

What would I put in for the asterisks, the first console returns {"bump":[]} and the second (obviously) returns []. What am I missing?

confirm - no kills whole sequence not just current task in sequence

I have a set of tasks that are run in sequence using run-sequence:

const gulp = require('gulp');
const sequence = require('run-sequence');

const setupTask = cb => {
    sequence(
        'updatePackageScripts',
        'installPeerDeps',
        'scaffoldConfigs',
        'scaffoldProject',
        cb
    );
};

gulp.task('setup', setupTask);

module.exports = setupTask;

In the installPeerDeps task, I'm using gulp-prompt:

const peerDependenciesTask = () => {
    const peers = keys(mapKeys(packageJSON.peerDependencies, (value, key) => {
        return `${key}@${value}`;
    })).join(' ');

    return gulp.src(`${projectPath(global.SETTINGS_CONFIG.root.path)}/package.json`, {read: false})
        .pipe(prompt.confirm({
            message: 'Also install peerDependencies? (Required when starting a new project with ACE)',
            default: true
        }))
        .pipe(shell([
            `npm install -S ${peers}`
        ], {
            cwd: process.env.INIT_CWD
        }));
};

This works great, however, if I say n to the subsequent prompt, I'd expect it to exit out of this task and continue with the next task in the sequence, scaffoldConfigs, rather than completely exiting the setup task.

Am I missing something that does this? Or is this the expected behavior and I won't be able to use gulp-prompt for this?

Netbeans output window

Strange behaviour in Netbeans output window: The input line for the answer appears first. After entering the anwser, the question of the prompt appears as second line. But the order should actually be reversed. In Powershell the order of the two lines is correct (first the question, second the input).

gulp-prompt prevents use of sftp

When using gulp-prompt in a pipe to query a privatekey pasword before sending to gulp-ftp, sftp hangs (happens with all sftp clients I tried gulp-ftp, gulp-sftp-up5, gulp-ssh). (see ).

Use sample is :
`
gulp.task('deploy-test', function () {

sftpOptions = {
host: 'host',
port: 22,
remotePath: '/var/www/Test/',
key: {
location: "private.key",
passphrase: '12345'
},
buffer:false,
username:"webuser",

};
res = gulp.src(['./.php', './dist/**/','./ws/**/*'],{base: './'})
.pipe(prompt.prompt({
type: 'password',
name: 'pass',
message: 'Please enter your password'
}, function(res){
sftpOptions.key.passphrase=res.pass;
}))
.pipe(sftp(sftpOptions));
return res;
});`

When doing so, the ftp will sort of start then hang. Removing the call to prompt and all works properly again.
How is one supposed to call prompt for such a use case?

Remove .src

This plugin does not modify a file's content, or do anything with files.
It does not need a vinyl file input, and should be labeled as "gulpfriendly"

CC @contra

prompt.prompt() doesn't support chainFunction

It's not a bug, but it seems only "prompt.confirm()" that support the chainFunction, and "prompt.prompt()" doesn't. Would be good to modify it to support chainFunction for both.

Radio button behaviour?

The checkbox behaviour allows the selection of multiple items. Is it possible to use this in a way that radio buttons work? Otherwise it would be nice to have.

SyntaxError: Invalid regular expression: /.{1,0}/

I get the error below trying to use gulp-prompt from within IntelliJ IDEA 2016.2.3 on OS X. It works fine if I invoke the same task via gulp from Terminal.app. It appears a newer build of Inquirer may fix this issue per SBoudrias/Inquirer.js#290.

? Are you sure? (y/N) [14:42:56] '<anonymous>' errored after 35 ms
[14:42:56] SyntaxError: Invalid regular expression: /.{1,0}/: numbers out of order in {} quantifier.
    at new RegExp (native)
    at breakLines (/Users/ibrandt/Development/git/myproject/node_modules/gulp-prompt/node_modules/inquirer/lib/utils/screen-manager.js:108:15)
    at [object Object].ScreenManager.render (/Users/ibrandt/Development/git/myproject/node_modules/gulp-prompt/node_modules/inquirer/lib/utils/screen-manager.js:55:22)
    at Prompt.render (/Users/ibrandt/Development/git/myproject/node_modules/gulp-prompt/node_modules/inquirer/lib/prompts/confirm.js:85:15)
    at Prompt._run (/Users/ibrandt/Development/git/myproject/node_modules/gulp-prompt/node_modules/inquirer/lib/prompts/confirm.js:65:8)
    at Prompt.run (/Users/ibrandt/Development/git/myproject/node_modules/gulp-prompt/node_modules/inquirer/lib/prompts/base.js:57:8)
    at Object.<anonymous> (/Users/ibrandt/Development/git/myproject/node_modules/gulp-prompt/node_modules/inquirer/lib/ui/prompt.js:84:12)
    at module.exports (/Users/ibrandt/Development/git/myproject/node_modules/run-async/index.js:15:21)
    at AnonymousObservable.__subscribe (/Users/ibrandt/Development/git/myproject/node_modules/gulp-prompt/node_modules/inquirer/lib/utils/utils.js:16:7)
    at AnonymousObservable.tryCatcher (/Users/ibrandt/Development/git/myproject/node_modules/rx-lite/rx.lite.js:63:31)
    at setDisposable (/Users/ibrandt/Development/git/myproject/node_modules/rx-lite/rx.lite.js:5741:44)
    at AnonymousObservable.innerSubscribe [as _subscribe] (/Users/ibrandt/Development/git/myproject/node_modules/rx-lite/rx.lite.js:5755:9)
    at AnonymousObservable.Rx.Observable.observableProto.subscribe.observableProto.forEach (/Users/ibrandt/Development/git/myproject/node_modules/rx-lite/rx.lite.js:1604:19)
    at AnonymousObservable.__subscribe (/Users/ibrandt/Development/git/myproject/node_modules/rx-lite/rx.lite.js:2112:21)
    at AnonymousObservable.tryCatcher (/Users/ibrandt/Development/git/myproject/node_modules/rx-lite/rx.lite.js:63:31)
    at setDisposable (/Users/ibrandt/Development/git/myproject/node_modules/rx-lite/rx.lite.js:5741:44)
[14:42:56] 'deploy' errored after 162 ms

Release must use semver

Hello,

Our project must use semver for release. The v1.0 isn't semver. It should be v1.0.0

Tasks break when run from IntelliJ Run tab

When trying to run a task from the Gulp window within WebStorm or IntelliJ, Prompt throws a Syntax Error.

Here is the stack trace for the bug:


SyntaxError: Invalid regular expression: /.{1,0}/: numbers out of order in {} quantifier.
    at new RegExp (native)
    at breakLines (.\node_modules\gulp-prompt\node_modules\inquirer\lib\utils\screen-manager.js:108:15)
    at ScreenManager.render (.\node_modules\gulp-prompt\node_modules\inquirer\lib\utils\screen-manager.js:55:22)
    at Prompt.render (.\node_modules\gulp-prompt\node_modules\inquirer\lib\prompts\input.js:75:15)
    at Prompt._run (.\node_modules\gulp-prompt\node_modules\inquirer\lib\prompts\input.js:49:8)
    at Prompt.run (.\node_modules\gulp-prompt\node_modules\inquirer\lib\prompts\base.js:57:8)
    at Object.<anonymous> (.\node_modules\gulp-prompt\node_modules\inquirer\lib\ui\prompt.js:84:12)
    at module.exports (.\node_modules\gulp-prompt\node_modules\inquirer\node_modules\run-async\index.js:15:21)
    at AnonymousObservable.__subscribe (.\node_modules\gulp-prompt\node_modules\inquirer\lib\utils\utils.js:16:7)
    at AnonymousObservable.tryCatcher (.\node_modules\gulp-prompt\node_modules\inquirer\node_modules\rx-lite\rx.lite.js:63:31)

How to properly integrate gulp-prompt in the pipe together with other plugins?

I'm sorry if this question has a simple answer, but I spent quite some time trying to integrate gulp-prompt in my tasks and I don't seem to be able to make it work correctly.

As an example, here is the definition of a sample task, taken from your own examples and slightly modified to be written in the Gulp 4 default task syntax:

function setversion(done) {
	src('test.js')
		.pipe(prompt.prompt({
			type: 'checkbox',
			name: 'bump',
			message: 'What type of bump would you like to do?',
			choices: ['patch', 'minor', 'major']
		}, function(res){
			//value is in res.bump (as an array)
		}))
		.pipe(dest('./'))
	done();
}

exports.setversion = setversion;

If I want, in example, integrate gulp-bump and passing to it the value taken from choices, what exactly should I write in the line that currently has //value is in res.bump (as an array)?
Like I said I've tried a lot but can't seem to find the proper syntax to make this work correctly.

Thank you in advance for your help.

Error: prompt.confirm is not a function

I'm using prompt in various tasks without problems, but if I try to use a confirm i get this error:

TypeError: prompt.confirm is not a function
    at Gulp.<anonymous> (/Users/.../project/gulpfile.js:178:18)
    at module.exports (/Users/.../project/node_modules/gulp/node_modules/orchestrator/lib/runTask.js:34:7)
    at Gulp.Orchestrator._runTask (/Users/.../project/node_modules/gulp/node_modules/orchestrator/index.js:273:3)
    at Gulp.Orchestrator._runStep (/Users/.../project/node_modules/gulp/node_modules/orchestrator/index.js:214:10)
    at /Users/.../project/node_modules/gulp/node_modules/orchestrator/index.js:279:18
    at finish (/Users/.../project/node_modules/gulp/node_modules/orchestrator/lib/runTask.js:21:8)
    at module.exports (/Users/.../project/node_modules/gulp/node_modules/orchestrator/lib/runTask.js:60:3)
    at Gulp.Orchestrator._runTask (/Users/.../project/node_modules/gulp/node_modules/orchestrator/index.js:273:3)
    at Gulp.Orchestrator._runStep (/Users/.../project/node_modules/gulp/node_modules/orchestrator/index.js:214:10)
    at Gulp.Orchestrator.start (/Users/.../project/node_modules/gulp/node_modules/orchestrator/index.js:134:8)
    at runNextSet (/Users/.../project/node_modules/run-sequence/index.js:88:16)
    at runSequence (/Users/.../project/node_modules/run-sequence/index.js:99:2)
    at Gulp.<anonymous> (/Users/.../project/gulpfile.js:164:5)
    at module.exports (/Users/.../project/node_modules/gulp/node_modules/orchestrator/lib/runTask.js:34:7)
    at Gulp.Orchestrator._runTask (/Users/.../project/node_modules/gulp/node_modules/orchestrator/index.js:273:3)
    at Gulp.Orchestrator._runStep (/Users/.../project/node_modules/gulp/node_modules/orchestrator/index.js:214:10)

This is the gulpfile.js code where I get the error:

var gulp = require('gulp'),
prompt = require('gulp-prompt').prompt,
otherDependances = require('...');

gulp.task('theme:project', function(){
    gulp.src(includes.projectFiles)
    .pipe(prompt.confirm({
        message: 'Would you like to place frontsize automation project files on your main project root folder?\nWARNING: package.json, Gruntfile.js and gulpfile.js will be overwritten.',
        default: true
    }))
    .pipe(prompt({
        type: 'input',
        name: 'path',
        message: 'Set the main project root folder:'
    }, function(res){
        includes.rootFolder = res.path;
    }));
    runSequence('theme:rootProject');
});

gulp.task('theme:rootProject', function(){
    return gulp.src(includes.projectFiles)
    .pipe(gulpCopy(includes.rootPath));
});

I've excluded the tasks which works fine.

Am I wrong somewhere?

Can't paste in to prompts on a Windows computer

I love this module, but some of my Windows users are having trouble when entering values on a Windows machine. Even though Command Prompt in Windows 10 now fully supports pasting data, these inputs don't seem to register the paste commands. It's weird, because this works fine on Unix systems.

New Maintainer

We just started using gulp-prompt as part of our deployment process and I noticed that it is looking for a new maintainer. I would be open to helping and or taken it on if you still need a maintainer.

Not able to run an async task from callback of gulp-prompt

gulp.task("watch-confirm", function(done) {
  return gulp.src(web_app_dir).pipe(
    $.prompt.prompt(
      {
        type: "confirm",
        message: `Current tomcat root dir -> ${tomcat_root_dir}, continue?`,
        default: true,
        name: "start"
      },
      function(res) {
        if (res.start) {
          gulp.series("watch");
        } else {
         
          done();
        }
      }
    )
  );
});

The task, watch is async and watches the changes in the file using gulp-watch and run tasks within on the change of JS or CSS. But, once I confirm, I am not getting that 'watch' task is finished.

If I start the watch task from within the callback of the prompt, I get following response:
Screen Shot 2019-06-18 at 4 13 17 PM

But, when I try to run the same task from the command line, I get the correct response. Any idea what basically I have to do in this case? Not sure if spawning will help.
Screen Shot 2019-06-18 at 4 13 45 PM

Task finishing before I could use the result of the prompt

I have a task asking the user some translations that should be saved to a file. Except that the task finishes before the user is given a chance to answer the prompt.

Here is a simplified version of the gulp task :

translationPrompts = [{
			type: 'input',
			name: 'translation1',
			message: 'Enter the fr translation for Name :'
			},
                            {
			type: 'input',
			name: 'translation2',
			message: 'Enter the fr translation for Debug level :'
			}];
            
 gulp.task('i18n:update-locales-translations', function(done) {
	var path = 'src/i18n/messages.fr.xlf';

	gulp.src(path)
	.pipe(prompt.prompt(translationPrompts, function(res) {
    	// saving res data in a file
    	},
    	parserOptions: {
    		xmlMode: true
    	}))
  .pipe(gulp.dest(config.i18n.folderPath));
  done();
};

and below the result of the console :

[16:07:10] Starting 'i18n'...
[16:07:10] Starting 'i18n:update-locales-translations'...
[16:07:10] Finished 'i18n:update-locales-translations' after 138 ms
[16:07:10] Finished 'i18n' after 13 s
? Enter the fr translation for Name : rdfgd
? Enter the fr translation for Debug level : gfdg

Any idea how I could make the task wait for the prompt to be done ?
Thanks

Is it possible to loop through an arbitrary number of fields?

I'm trying to set up an "init" gulp task that makes it easier for me to get up and running with new projects. I'd like to set up some fields to handle my color variables, but there can be an arbitrary number of colors set. My idea is to continue prompting for additional colors until the user enters a blank value.

Is this possible?

Also, I'd be interested in taking up maintenance for this module if you've abandoned it; I'm not exactly an expert at Node, but I'm decent with vanilla JS and PHP, so I think I'd catch on pretty quickly :)

Is it possible to adjust menu list height?

I am using a prompt type "list" with several items, it starts to "scroll-wrap" after 6 items and below is a notice, "Move up and down to reveal more choices".

Is there a way to stop the wrapping or adjust the number of items displayed? Thanks

Not possible to pass the answer object from prompt method into next piped stream.

Sometimes i need to ask end-user for response more than once, so both the source file object and answer object from prompt are required.

I'd like to have such a thing as following:

prompt: function(questions, callback) {

        return es.map(function(file, cb) {

            if (!questions instanceof Array) {
                questions = [questions];
            }

            if (typeof callback !== 'function') {
                callback = function() {};
            }

            inq.prompt(questions, function(res) {
                callback(res);
                cb(null, {
                    source: file,
                    answer: res
                });
            });

        });
    }

Do you have any idea about this requirement?

Gulp task finishes but process never ends

I've tried a simple example with gulp-prompt. The task finishes, but the process never exits. Actually, I can't even ctrl+c in the terminal anymore... It's working fine with prompt.confirm. It's basically the same behaviour as in #24. According to some gulp issues, this is related with a process not ending... gulpjs/gulp#903 (comment)

    "gulp": "^4.0.0",
    "gulp-prompt": "^1.1.0",
gulp.task('test', done => {
  return gulp.src('./package.json')
    .pipe(prompt.prompt({
      type: 'list',
      name: 'name',
      message: 'Select Choice:',
      choices: ['1', '2'],
      pageSize: '10',
    }))

I even tried one of the samples:

const gulp = require('gulp')
const prompt = require('gulp-prompt')

gulp.task('getSelection', done => {
  gulp.src('./settings.js')
    .pipe(prompt.prompt({
      type: 'list',
      name: 'env',
      message: 'Please enter selection?',
      choices: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'],
      pageSize: '3',
    }, (res) => {
      console.log('Result', res)
      return done()
    }))
})

Output:

$ gulp getSelection
[14:50:20] Using gulpfile ~\tmp\gulpfile.js
[14:50:20] Starting 'getSelection'...
? Please enter selection? b
Result { env: 'b' }
[14:50:23] Finished 'getSelection' after 3.24 s
<TERMINAL HANGS>

Process not exiting

The process does not exit.

Minimal Example

gulp.task('test', function() {
    return gulp.src('/')
        .pipe(prompt.confirm('Are you ready for Gulp?'));
});

Result

[15:32:11] Starting 'test'...
[?] Are you ready for Gulp? (y/N) Y
[?] Are you ready for Gulp? Yes
[15:32:12] Finished 'test' after 917 ms

But the process itself runs forever. Am I doing something wrong here or is this simply a bug?

Unit Testing

I messaged Simon this week about taking over the project and started looking through the code. One of the issues I had was when trying to understand the code is that there where no unit tests. There are a couple of things about doing this. The first is the index.js file is pretty small and functionality is straight forward and the second thing is the index.js file requires some external modules that would need to be mocked for unit testing to work. I found a couple of libraries that could help with this and put together a some sample unit tests in mocha that work. Again these are pretty straight forward and probably overkill; however, they may be helpful for other developers who want to add some more functionality in the future.

Type 'Radio' a 'Checkbox' not working properly if first question

I have this issue when trying to use Radios or Checkboxes:
If it's the first question asked, i can't navigate through the answers with the arrows, can't select with spacebar, et if i press enter it fail...

This issue is fixed when i add another question first, a simple confirm question for example ... In this case i have the common behavior, i can choose my answer and select it with spacebar.

Do you have a fix for this ?

Use prompt without pipe

Hi, take a look @ this code:

gulp.task('install', function(){
  gulp.src('config/db.js')
  .pipe(
    gp_prompt.prompt(
      { type: 'input'
      , name: 'dbname'
      , message: 'Type your DB name:'
      },
      function (res){
        gulp.src('config./db.js')
        .pipe(gp_replace('_DBNAME_', res.dbname))
        .pipe(savefile())
      }
    )
  )
});

There's a way to use gulp-prompt without open 2 gulp.src('config/db.js') ?

input masking

is there a way to mask an input? example passwords

checkbox not support multiple defaults

Hi there,

Recently I use prompt to process flow, need a function support default selected multiple value on checkbox component. But I can find any config on it. Is there any new features for this? Thanks.

Chaining Prompts

I can't chain chain 2 .pipe(prompt.confirm()) :

When i confirm the first question, it instantly confirm the second, is there another way to do that ?

Include Code Metrics for NPM

I saw this on another npm project I am looking at using which includes code metrics such as coverage or downloads. This should be a relatively easy issue for someone to tackle if they are interested.

Ask once for multiple files in stream

Currently if I have two files in the process, and pipe that to prompt.confirm, the question is asked twice, and, even worse, the process crashes no matter what you choose:

gulp.src(paths.versionToBump) // get all the files to bump version in
    .pipe(prompt.confirm('Have you commited all the changes to be included by this version?'));

results in

[?] Have you commited all the changes to be included by this version? No

C:\work\code\sndapi-js\node_modules\gulp-prompt\node_modules\inquirer\lib\inquirer.js:71
    this.rl.removeListener( "SIGINT", this.onForceClose );
            ^
TypeError: Cannot call method 'removeListener' of null
    at Object.<anonymous> (C:\work\code\sndapi-js\node_modules\gulp-prompt\node_modules\inquirer\lib\inquirer.js:71:13)
    at C:\work\code\sndapi-js\node_modules\gulp-prompt\node_modules\inquirer\node_modules\async\lib\async.js:232:13
    at C:\work\code\sndapi-js\node_modules\gulp-prompt\node_modules\inquirer\node_modules\async\lib\async.js:142:25
    at C:\work\code\sndapi-js\node_modules\gulp-prompt\node_modules\inquirer\node_modules\async\lib\async.js:229:17
    at Object.<anonymous> (C:\work\code\sndapi-js\node_modules\gulp-prompt\node_modules\inquirer\lib\inquirer.js:89:7)
    at Object.utils.runAsync (C:\work\code\sndapi-js\node_modules\gulp-prompt\node_modules\inquirer\lib\utils\utils.js:44:5)
    at Prompt.filter (C:\work\code\sndapi-js\node_modules\gulp-prompt\node_modules\inquirer\lib\prompts\base.js:198:9)
    at Prompt.done (C:\work\code\sndapi-js\node_modules\gulp-prompt\node_modules\inquirer\lib\prompts\base.js:68:10)
    at Prompt.<anonymous> (C:\work\code\sndapi-js\node_modules\gulp-prompt\node_modules\inquirer\lib\prompts\confirm.js:97:10)
    at Object.utils.runAsync (C:\work\code\sndapi-js\node_modules\gulp-prompt\node_modules\inquirer\lib\utils\utils.js:44:5)

and the question(s) is(are) in the form:

[?] Have you commited all the changes to be included by this version? (y/N) [?] Are you sure? (y/N)

Feature Request: Masking passwords

Thanks for this awesome gulp plugin.

I notice that when prompting for a password the password isn't masked.

Is there a way to implement this particular feature downstream from inquirer? I see the recently fixed this in inquirer

SBoudrias/Inquirer.js#271

If so i would love to provide a pull request and any pointers or tips to get this rectified would be helpful.

Allow templating

You should be able to use templating in the prompt message.

Use gulp-util .template for this.

Conditional Prompts?

Is it possible to chain together two prompts in the same gulp task with the 2nd prompt conditional on the value of the first prompt?

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.