diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..629796b --- /dev/null +++ b/.babelrc @@ -0,0 +1,23 @@ +{ + "env": { + "default": { + "presets": [ + ["@babel/preset-env", { + "targets": "node 8.0", + "useBuiltIns": "usage", + "corejs": 3, + "exclude": ["es.promise", "es.string.trim"] + }] + ] + }, + "legacy": { + "presets": [ + ["@babel/preset-env", { + "targets": "node 0.10", + "useBuiltIns": "usage", + "corejs": 3 + }] + ] + }, + } +} diff --git a/.gitignore b/.gitignore index 5148e52..798a297 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Built library assets +lib* + # Logs logs *.log @@ -35,3 +38,9 @@ jspm_packages # Optional REPL history .node_repl_history + +# OS-specific files +.DS_Store +.Trash* +.fseventsd +.Spotlight* diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..161482c --- /dev/null +++ b/.npmignore @@ -0,0 +1,3 @@ +* +!lib*/**/*.js +!lib*/**/*.js.map diff --git a/.travis.yml b/.travis.yml index fd3d0c1..fdfa4ca 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,10 @@ language: node_js matrix: include: -# - node_js: '0.10' -# env: _CXXAUTO=1 -# - node_js: '0.12' -# env: _CXXAUTO=1 + - node_js: '0.10' + env: BABEL_ENV=legacy + - node_js: '0.12' + env: BABEL_ENV=legacy # - node_js: '4' # env: CXX=g++-4.8 - node_js: '6' @@ -22,6 +22,7 @@ addons: # - gcc-4.8 # - g++-4.8 before_script: + - npm run build - sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4 - echo "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" | sudo tee -a /etc/apt/sources.list - sudo apt-get update -qq @@ -35,6 +36,5 @@ before_script: - (ls -la /var/lib/clickhouse/data/default/ || exit 0) - (ls -la /var/lib/clickhouse/metadata/default/ || exit 0) - curl -v "http://127.0.0.1:8123/" - - npm run legacy-install -after_script: +script: - npm run report diff --git a/index.js b/index.js new file mode 100644 index 0000000..737755e --- /dev/null +++ b/index.js @@ -0,0 +1,15 @@ +// Tries to import library built for modern nodejs +try { + var nodeVer = process.version.substr(1).split ('.') + if (nodeVer[0] >= 6) { + return module.exports = require('lib/clickhouse') + } +} catch (e) {} + +// Tries to import library built for legacy nodejs +try { + module.exports = require('lib-legacy/clickhouse') +} catch (e) { + // If all imports are failed it may be dev enviroment + module.exports = require('src/clickhouse') +} diff --git a/package.json b/package.json index cbbeb2b..4155fc0 100644 --- a/package.json +++ b/package.json @@ -7,10 +7,11 @@ "legacy-install": "node ./src/legacy-support.js", "launch-docker-image": "docker run --rm -d -p 8123:8123 --name clickhouse-server yandex/clickhouse-server", "stop-docker-image": "docker stop clickhouse-server", - "test": "nyc mocha --recursive ./test -R spec", + "test": "nyc mocha --require babel-polyfill --require babel-register --recursive ./test -R spec", "report": "nyc report --reporter=lcov > coverage.lcov && codecov", "simpletest": "mocha --recursive ./test -R spec", - "torturetest": "TORTURE=1 mocha -gc --recursive ./test -R spec" + "torturetest": "TORTURE=1 mocha -gc --recursive ./test -R spec", + "build": "rm -r lib*/; babel src -d lib --source-maps && BABEL_ENV=legacy babel src -d lib-legacy --source-maps" }, "repository": { "type": "git", @@ -27,8 +28,18 @@ "url": "https://github.com/apla/node-clickhouse/issues" }, "homepage": "https://github.com/apla/node-clickhouse#readme", - "dependencies": {}, + "dependencies": { + "core-js": "3" + }, + "optionalDependencies": { + "buffer-indexof-polyfill": "^1.0.1" + }, "devDependencies": { + "@babel/cli": "^7.4.4", + "@babel/core": "^7.4.5", + "@babel/preset-env": "^7.4.5", + "babel-polyfill": "^6.26.0", + "babel-register": "^6.26.0", "bluebird": "^3.5.0", "codecov": "^2.2.0", "mocha": "^2.5.3", diff --git a/src/clickhouse.js b/src/clickhouse.js index c04c1ac..3f58551 100644 --- a/src/clickhouse.js +++ b/src/clickhouse.js @@ -6,11 +6,12 @@ var util = require ('util'); // var debug = require ('debug')('clickhouse'); -require ('./legacy-support'); - var RecordStream = require ('./streams').RecordStream; var JSONStream = require ('./streams').JSONStream; +// node <6 polyfill +require('buffer-indexof-polyfill') + var parseError = require ('./parse-error'); function httpResponseHandler (stream, reqParams, reqData, cb, response) { @@ -183,7 +184,7 @@ function httpRequest (reqParams, reqData, cb) { stream.emit ('error', e); return cb && cb (e); }); - + req.on('timeout', function (e) { req.abort(); }) diff --git a/src/legacy-support.js b/src/legacy-support.js deleted file mode 100644 index 03ea998..0000000 --- a/src/legacy-support.js +++ /dev/null @@ -1,46 +0,0 @@ -var nodeVer = process.version.substr (1).split ('.'); - -if (nodeVer[0] >= 6) - return; - -var legacyModulesInstallCmd = 'npm install object-assign buffer-indexof-polyfill'; - -if (process.mainModule === module) { - var spawn = require ('child_process').spawn; - - var child = spawn (legacyModulesInstallCmd); - child.stdout.pipe (process.stdout); - child.stderr.pipe (process.stderr); - - child.on ('error', function (err) { - process.exit (1); - }); - - child.on ('exit', function (code) { - process.exit (0); - }); - - return; -} - - -try { - -if (nodeVer[0] < 4) { - global.Promise = global.Promise || require ('bluebird'); - Object.assign = Object.assign || require ('object-assign'); - Array.isArray = function(arg) { - return Object.prototype.toString.call(arg) === '[object Array]'; - }; -} - -if (nodeVer[0] < 6) { - require ('buffer-indexof-polyfill'); -} - -} catch (err) { - console.warn ("You're using outdated nodejs version."); - console.warn ("This module supports nodejs down to the version 0.10, but some legwork required."); - console.warn ("Either install version >= 6, or add dependencies to your own project with `" + legacyModulesInstallCmd + "`"); - -}