Giter Site home page Giter Site logo

polyjuice's Introduction

Polyjuice

Build Status Coverage Status Code Climate npm version

Converts .jshintrc and .jscsrc files into .eslintrc and vice-versa

Polyjuice is a utility that converts JSHint and JSCS files into ESLint files and the other way around.

Install

$ npm install --save-dev polyjuice

Usage

var polyjuice = require('polyjuice')

var to_eslint = {
  jshint: polyjuice.from.jshint(['./.jshintrc']),
  jscs  : polyjuice.from.jscs(['./.jscsrc']),
  both  : polyjuice.to.eslint(['./.jshintrc'], ['./.jscsrc'])
}

var to_jscs_and_jshint = {
  jshint: polyjuice.to.jshint(['./.eslintrc')],
  jscs  : polyjuice.to.jscs(['./.eslintrc')],
  both  : polyjuice.from.eslint(['./.eslintrc'])
}

When using polyjuice.from.eslint an object with keys jscs and jshint is returned.

CLI

If installed globally, you can use polyjuice as a command line utility. You can check which rules have been discarded by adding --discarded or -d to your command.

To ESLint

You must provide the files to be assessed by using the options --jshint and --jscs, for instance:

$ polyjuice --jshint .jshintrc --jscs .jscsrc > .eslintrc

Note you are allowed to pass in any number of files

To JSHint and JSCS

You must provide the file to be assessed by using the option --eslint and also which output you want by using either --to-jshint or --to-jscs, for instance:

$ polyjuice --eslint .eslintrc --to-jshint > .jshintrc

Note you are allowed to pass in any number of files

Contributing

Contributions are always welcome! If you want to have a better understanding about the conversion files, I encourage you to take a look at the conversion page. You can also check the rules discarded when parsing JSCS, parsing JSHint and parsing ESLint.

Versions used

These are the versions used as source of the translation. Therefore, you may expect all rules up to those versions to have been mapped to the target tool.

  • ESLint: v1.7.2
  • JSCS: v3.0.2
  • JSHint: v2.9.2

License

MIT

polyjuice's People

Contributors

brenolf avatar pdehaan avatar qfox avatar terrenceljones 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

polyjuice's Issues

eslint to jscs conversion: valid-jsdoc: 0, converts to true

When converting from eslint to jscs, valid-jsdoc: 0 converts to jsDoc: true. The issue is that jscs wants the jsDoc option to be an object.

After looking through the eslint rules for this, I think the defaults should be something like:

"jsDoc": {
      "requireReturnTypes": true,
      "requireReturnDescription": true,
      "requireParamDescription": true
  },

jshint env dojo

if the .jscsrc file has dojo:true then the .eslintrc file should have amd:true. This did not carry over for my conversion.

JSCS `requireSpaceAfterKeywords` to ESLint `keyword-spacing`

Given this JSCS rule: http://jscs.info/rule/requireSpaceAfterKeywords

    "requireSpaceAfterKeywords": [
        "if",
        "else",
        "for",
        "while",
        "do",
        "switch",
        "return",
        "try",
        "catch"
    ],

Results in ESLint: http://eslint.org/docs/rules/keyword-spacing

    "keyword-spacing": [2, {
        "overrides": {
          "catch": {      "after": true   }
          "do": {    "after": true    },
          "else": {   "after":   },
          "for": {  "after": true    },
          "if": {  "after": true     },
          "return": {     "after": true    },
          "switch": {        "after": true   },
          "try": {   "after": true  },
          "while": {   "after": true      },
        }
      }],

Expected ESLint rule:

    "keyword-spacing": 2,

As catch, do, else, for, if, return, switch, try, and while are included in the default ESLint keyword-spacing rule, this is why I state that 'keyword-spacing': 2, was expected.

I'm not sure if this is something polyjuice already handles in other rule conversions but just wanted to put it out there, more than happy to fix this manually and have this issue closed as a won't fix ๐Ÿ˜„

Configuration for rule "quotes" is invalid when setting escape=true

Steps to reproduce:

  1. We have a .jscsrc file which has the following rule:

    {
      "validateQuoteMarks": { "mark": true, "escape": true }
    }
  2. If we run $ polyjuice --jscs=.jscsrc > .eslintrc we get the following generated .eslintrc file:

    {
      "rules": {
        "quotes": [2, "single", true]
      }
    }
  3. Run $ eslint .

Actual results:

It seems to blow up on the true in [2, "single", true]:

โœ— eslint .

/Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/config-validator.js:88
        throw new Error(message.join(""));
              ^
Error: /Users/pdehaan/dev/fxa-content-server_pd/fxa-content-server/.eslintrc:
    Configuration for rule "quotes" is invalid:
    Value "true" must be an enum value.

    at validateRuleOptions (/Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/config-validator.js:88:15)
    at /Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/config-validator.js:101:13
    at Array.forEach (native)
    at Object.validate (/Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/config-validator.js:100:35)
    at loadConfig (/Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/config.js:107:19)
    at getLocalConfig (/Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/config.js:243:23)
    at Config.getConfig (/Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/config.js:371:22)
    at processText (/Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/cli-engine.js:181:27)
    at processFile (/Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/cli-engine.js:224:12)
    at /Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/cli-engine.js:320:26

This seems to be due to the escape: true in the .jscsrc rule, if I remove that bit and regenerate the .eslintrc file, everything works as expected. See http://jscs.info/rule/validateQuoteMarks.html

If I understand correctly, instead of an optional Boolean third param in ESLint quotes rule, it should pass the string "avoid-escape" if true or probably nothing otherwise.

JSCS `requireSpaceAfterPrefixUnaryOperators` to ESLint `space-unary-ops`

Given this JSCS rule: http://jscs.info/rule/requireSpaceAfterPrefixUnaryOperators

    "requireSpaceAfterPrefixUnaryOperators": ["!"],

Results in ESLint: http://eslint.org/docs/rules/space-unary-ops

 "space-unary-ops": 2,

Expected ESLint rule:

'space-unary-ops': [2, {overrides: {"!": true}}],

The default ESLint rule is for unary operators is to be not followed by whitespace, the {overrides: {"!": true}} adds an override/exception that ! should be followed by a single space.

Tests for JSCS

It should either test the dictionary or have a file-to-file approach just like JSHint.

Breaks on .jshintrc comments

running on my .jshintrc (which contains explanatory comments) throws errors:

"asi": true, // this option suppresses warnings about missing semicolons.

Seems like this should be supported (even if not carried over).

TypeError: Cannot read property 'overrides' of undefined

I am trying to convert .jscsrc to eslint,
but failed with the following error message.

var overrides = rule[1].overrides = (rule[1].overrides || {})
                                                ^
TypeError: Cannot read property 'overrides' of undefined
    at module.exports.truthy (/Users/Naver/Workspace/ugc/SE3/SE3-Server/web/node_modules/polyjuice/lib/dictionaries/jscs/requireSpaceBeforeKeywords.js:18:49)
    at get (/Users/Naver/Workspace/ugc/SE3/SE3-Server/web/node_modules/polyjuice/lib/polyjuice/reader.js:64:26)
    at module.exports (/Users/Naver/Workspace/ugc/SE3/SE3-Server/web/node_modules/polyjuice/lib/polyjuice/interpreter.js:27:24)
    at Object.module.exports [as jscs] (/Users/Naver/Workspace/ugc/SE3/SE3-Server/web/node_modules/polyjuice/lib/polyjuice/jscs.js:33:18)
    at Object.<anonymous> (/Users/Naver/Workspace/ugc/SE3/SE3-Server/web/convert.js:4:23)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)

This is my .jscsrc rules.

{
    "excludeFiles": ["*.jsx", "**/mobile/**/*.js"],
    "disallowEmptyBlocks" : true,
    "disallowKeywordsOnNewLine" : ["else"],
    "disallowKeywords" : ["with"],
    "disallowMixedSpacesAndTabs" : true,
    "disallowMultipleLineBreaks" : true,
    "disallowMultipleVarDecl" : true,
    "disallowMultipleLineStrings" : true,
    "disallowNewlineBeforeBlockStatements" : true,
    "disallowSpaceAfterObjectKeys" : true,
    "disallowSpaceAfterPrefixUnaryOperators" : true,
    "disallowSpaceBeforeBinaryOperators" : [","],
    "disallowSpaceBeforePostfixUnaryOperators" : true,
    "disallowSpacesInCallExpression" : true,
    "disallowSpacesInsideArrayBrackets" : "all",
    "disallowSpacesInsideObjectBrackets" : "all",
    "disallowSpacesInsideParentheses" : true,
    "disallowTrailingComma" : true,
    "disallowTrailingWhitespace" : true,
    "disallowYodaConditions" : true,
    "maximumLineLength" : {"value": 120, "allExcept": ["comments", "urlComments"] },
    "requireBlocksOnNewline" : true,
    "validateParameterSeparator" : ", ",
    "requireCapitalizedConstructors" : true,
    "requireCurlyBraces" : ["if","else","for","while","do","try","catch"],
    "requireDollarBeforejQueryAssignment" : true,
    "requireDotNotation": { "allExcept": [ "snake_case" ] },
    "requireOperatorBeforeLineBreak" : true,
    "requirePaddingNewLinesBeforeLineComments" : {"allExcept":"firstAfterCurly"},
    "requireParenthesesAroundIIFE" : true,
    "requireSemicolons" : true,
    "requireSpaceAfterBinaryOperators" : true,
    "requireSpaceAfterKeywords" : ["if","else","for","while","do","switch","return","try","catch"],
    "requireSpaceBeforeBinaryOperators" : ["=","+=","-=","*=","/=","%=","<<=",">>=",">>>=","&=","|=","^=","+=","+","-","*","/","%","<<",">>",">>>","&","|","^","&&","||","===","==",">=","<=","<",">","!=","!=="],
    "requireSpaceBeforeBlockStatements" : true,
    "requireSpaceBeforeKeywords" : [ "else", "else if", "catch" ],
    "requireSpaceBeforeObjectValues" : true,
    "requireSpaceBetweenArguments" : true,
    "requireSpacesInConditionalExpression" : true,
    "requireSpacesInForStatement" : true,
    "requireSpacesInFunction" : {"beforeOpeningCurlyBrace":true},
    "safeContextKeyword" : "self",
    "validateLineBreaks" : "LF",
    "validateIndentation": { "value": "\t", "allExcept": ["comments"] },
    "validateParameterSeparator" : ", ",
    "validateQuoteMarks" : {"mark":"\"","escape":true},
    "maxErrors" : -1
}

yargs dependency is crashing polyjuice

It seems there is an error in the yargs dependency. Tested this issue on Node v4, 5, 6, 6.1. Maybe an update to the latest version of yargs might resolve this?

Error log below:

โžœ  ~ polyjuice  
/usr/local/lib/node_modules/polyjuice/node_modules/yargs/lib/usage.js:243
      var e = epilog.replace(/\$0/g, yargs.$0)
                     ^

TypeError: epilog.replace is not a function
    at Object.self.help (/usr/local/lib/node_modules/polyjuice/node_modules/yargs/lib/usage.js:243:22)
    at Object.self.showHelp (/usr/local/lib/node_modules/polyjuice/node_modules/yargs/lib/usage.js:318:25)
    at Object.Argv.self.showHelp (/usr/local/lib/node_modules/polyjuice/node_modules/yargs/index.js:382:11)
    at Object.<anonymous> (/usr/local/lib/node_modules/polyjuice/lib/bin.js:59:9)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:456:32)
    at tryModuleLoad (module.js:415:12)
    at Function.Module._load (module.js:407:3)
    at Function.Module.runMain (module.js:575:10)

Configuration for rule "max-depth" is invalid

I'm running polyjuice globally from the CLI on this repo's .jshintrc file and am getting an error when I try and run ESLint:

โžœ  polyjuice git:(master) โœ— polyjuice .jshintrc > .eslintrc
โžœ  polyjuice git:(master) โœ— eslint .

/Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/config-validator.js:88
        throw new Error(message.join(""));
              ^
Error: /Users/pdehaan/dev/github/polyjuice/.eslintrc:
    Configuration for rule "max-depth" is invalid:
    Value "3" must be an enum value.

    at validateRuleOptions (/Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/config-validator.js:88:15)
    at /Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/config-validator.js:101:13
    at Array.forEach (native)
    at Object.validate (/Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/config-validator.js:100:35)
    at loadConfig (/Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/config.js:107:19)
    at getLocalConfig (/Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/config.js:243:23)
    at Config.getConfig (/Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/config.js:371:22)
    at processText (/Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/cli-engine.js:181:27)
    at processFile (/Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/cli-engine.js:224:12)
    at /Users/pdehaan/.npm-packages/lib/node_modules/eslint/lib/cli-engine.js:320:26

And the generated .eslintrc file is:

{
  "env": {
    "browser": true,
    "browserify": true,
    "couch": false,
    "devel": true,
    "dojo": false,
    "jquery": false,
    "mootools": false,
    "node": false,
    "prototypejs": false,
    "rhino": false,
    "wsh": true
  },
  "rules": {
    "linebreak-style": 2,
    "comma-style": [
      2,
      "last"
    ],
    "no-debuger": 2,
    "strict": 0,
    "semi": 0,
    "eqeqeq": 2,
    "no-eval": 0,
    "no-unused-expressions": 0,
    "guard-for-in": 0,
    "no-use-before-define": 2,
    "no-loop-func": 0,
    "no-caller": 2,
    "no-script-url": 0,
    "no-shadow": 2,
    "no-new-func": 2,
    "no-new-wrappers": 2,
    "no-unused-vars": 2,
    "no-undef": 2,
    "max-depth": 3,
    "max-params": 4
  }
}

So the max-depth and max-params values aren't getting set correctly (should probably be "max-depth: [2, 3] and max-params: [2, 4] respectively.

TypeError: Cannot read property 'indexOf' of undefined

Hello! This looks great but i'm unable to convert my jscs.

polyjuice --jscs=.jscsrc > .eslintrc

Gives me this error

/usr/local/lib/node_modules/polyjuice/lib/dictionaries/jscs.js:534
      if (value.allExcept.indexOf('{') > -1) {
                         ^
TypeError: Cannot read property 'indexOf' of undefined
    at Object.module.exports.requireSpacesInsideArrayBrackets._truthy (/usr/local/lib/node_modules/polyjuice/lib/dictionaries/jscs.js:534:26)
    at get (/usr/local/lib/node_modules/polyjuice/lib/polyjuice/reader.js:59:37)
    at module.exports (/usr/local/lib/node_modules/polyjuice/lib/polyjuice/interpreter.js:26:24)
    at Object.module.exports [as jscs] (/usr/local/lib/node_modules/polyjuice/lib/polyjuice/jscs.js:21:18)
    at Object.<anonymous> (/usr/local/lib/node_modules/polyjuice/lib/bin.js:40:27)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)

This is the .jscsrc file i'm tryint to convert
https://gist.github.com/kokarn/d41147c9526b5933c538

Thanks!

Include jscs custom rules support

    "additionalRules" : [
        ".jscs_rules/*.js"
    ],
    "disallowNaiveIdentifiers": "ignoreProperties",
    "disallowNativeDate": "ignoreProperties",

Node error when running commands from --help

I happened to be looking at --help and noticed a lack of = between the flag and the filename. Feeling bold, I tested it. It didn't end well.

$ polyjuice --help

Usage: polyjuice [options]

    --help, -h
        Displays help information about this script
        'polyjuice -h' or 'polyjuice --help'

    --jshint
        Defines the source file for jshint
        'polyjuice --jshint .jshintrc'

    --jscs
        Defines the source file for jscs
        'polyjuice --jscs .jscsrc'

And here is the output:

$ polyjuice --jscs .jscsrc

fs.js:439
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^
Error: ENOENT, no such file or directory 'true'
    at Object.fs.openSync (fs.js:439:18)
    at Object.fs.readFileSync (fs.js:290:15)
    at Object.module.exports [as jscs] (/Users/pdehaan/.npm-packages/lib/node_modules/polyjuice/lib/polyjuice/jscs.js:17:28)
    at Object.<anonymous> (/Users/pdehaan/.npm-packages/lib/node_modules/polyjuice/lib/bin.js:30:27)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)

Long story longer, I think the --help docs need to be updated to include an = between the --jscs=.jscsrc (and same w/ JSHint example).

jscs requireSpaceAfterKeywords and space-before-function-paren

http://jscs.info/rule/requireSpaceBeforeKeywords
http://jscs.info/rule/disallowSpacesInNamedFunctionExpression
http://jscs.info/rule/disallowSpacesInFunctionDeclaration

given .jscs

   "requireSpaceAfterKeywords": [
        "function"
    ],

created

   "space-before-function-paren": [
      2,
      "never"
    ],

When I think it should be

      { "anonymous": "always", "named": "never" }

instead of never

    "disallowSpacesInNamedFunctionExpression": {
        "beforeOpeningRoundBrace": true
    },
    "disallowSpacesInFunctionDeclaration": {
        "beforeOpeningRoundBrace": true
    },

might be throwing it off?

TypeError: Cannot read property 'align' of undefined

Here's the error I'm getting:

/node_modules/polyjuice/lib/dictionaries/eslint.js:441
if (value[1].align === 'colon') {
            ^

TypeError: Cannot read property 'align' of undefined
    at module.exports.key-spacing.eval (/usr/local/lib/node_modules/polyjuice/lib/dictionaries/eslint.js:441:19)
    at get (/usr/local/lib/node_modules/polyjuice/lib/polyjuice/reader.js:29:33)
    at module.exports (/usr/local/lib/node_modules/polyjuice/lib/polyjuice/interpreter.js:27:24)
    at module.exports (/usr/local/lib/node_modules/polyjuice/lib/polyjuice/eslint.js:18:10)
    at Object.module.exports.to.jscs (/usr/local/lib/node_modules/polyjuice/lib/polyjuice.js:32:19)
    at Object.<anonymous> (/usr/local/lib/node_modules/polyjuice/lib/bin.js:56:32)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)

It looks like if value is 0, the if (value[0] === 0) check and return doesn't catch and tries to parse the rest of the function.

Only list valid/enabled environments?

Found while reporting #2.

Not sure about the current env behavior. I don't know if you want to only list environments that are true. So instead of this:

  "env": {
    "browser": true,
    "browserify": true,
    "couch": false,
    "devel": true,
    "dojo": false,
    "jquery": false,
    "mootools": false,
    "node": false,
    "prototypejs": false,
    "rhino": false,
    "wsh": true
  }

Something like this (assuming these are valid ESLint environments):

  "env": {
    "browser": true,
    "browserify": true,
    "devel": true,
    "wsh": true
  },

JSCS *CommaBeforeLineBreak reversed

The conversion you have for the JSCS rules requireCommaBeforeLineBreak and disallowCommaBeforeLineBreak are reversed. The former should check that the comma comes last and the latter should check that it comes first. Currently you have that backwards.

When installing globally, it couldn't find module "argv"

I think this is because the argv dependency is listed as a dev dependency.

Used npm install -g polyjuice to install.

Also, thanks for investing time in this. I've been hoping that someone would provide a converter between these for a long while ๐Ÿ‘

Add JSCS `requireSpaceAfterComma` rule

http://jscs.info/rule/requireSpaceAfterComma http://eslint.org/docs/rules/comma-spacing

JSCS Rule: "requireSpaceAfterComma": true,

ESlint Rule: "comma-spacing"

I have the following JSCS rules in my jscsrc file:
โ€ข "disallowSpaceBeforeComma": true,
โ€ข "disallowTrailingComma": true,
โ€ข "requireCommaBeforeLineBreak": true,
โ€ข "requireSpaceAfterComma": true,

The resulting eslintrc is: "comma-spacing": [2, { "before": false }],

What I expected was "comma-spacing": [2,{ "before": false, "after": true }], or "comma-spacing": 2,

The comma-spacing rule includes some defaults: http://eslint.org/docs/rules/comma-spacing#options which is how I arrived at "comma-spacing": 2, via JSCS "disallowSpaceBeforeComma": true, and "requireSpaceAfterComma": true, rules.

"before": false (default) disallows spaces before commas
"before": true requires one or more spaces before commas
"after": true (default) requires one or more spaces after commas
"after": false disallows spaces after commas

Error: Missing rule name for requireSpaceAfterKeywords

Commit 58648dd seems to have introduced a bug related to the jscs rule: requireSpaceAfterKeywords. After this commit, anytime this rule needs to be converted to eslint, the following error is being displayed:

| $ polyjuice --jscs .jscsrc > .eslintrc
/usr/local/lib/node_modules/polyjuice/lib/polyjuice/reader.js:50
      throw new Error('Missing rule name')
      ^

Error: Missing rule name
    at get (/usr/local/lib/node_modules/polyjuice/lib/polyjuice/reader.js:50:13)
    at module.exports (/usr/local/lib/node_modules/polyjuice/lib/polyjuice/interpreter.js:27:24)
    at Object.module.exports [as jscs] (/usr/local/lib/node_modules/polyjuice/lib/polyjuice/jscs.js:33:18)
    at Object.<anonymous> (/usr/local/lib/node_modules/polyjuice/lib/bin.js:52:27)
    at Module._compile (module.js:434:26)
    at Object.Module._extensions..js (module.js:452:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:475:10)
    at startup (node.js:117:18)

Candidate #78 should fix this issue.

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.