From 648295955908980d262def8f9b4c04debe88234f Mon Sep 17 00:00:00 2001 From: "nezed [CustoMac]" Date: Sun, 26 May 2019 21:10:15 +0300 Subject: [PATCH 1/3] Add babel build --- .babelrc | 23 ++++++++++++++++++++++ .gitignore | 12 ++++++++++- .npmignore | 3 +++ .travis.yml | 13 ++++++------ index.js | 15 ++++++++++++++ package.json | 17 +++++++++++++--- src/clickhouse.js | 7 ++++--- src/legacy-support.js | 46 ------------------------------------------- 8 files changed, 77 insertions(+), 59 deletions(-) create mode 100644 .babelrc create mode 100644 .npmignore create mode 100644 index.js delete mode 100644 src/legacy-support.js 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..55ab0f4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Built library assets +lib* + # Logs logs *.log @@ -11,8 +14,9 @@ pids # Directory for instrumented libs generated by jscoverage/JSCover lib-cov -# Coverage directory used by tools like istanbul +# Coverage used by tools like istanbul coverage +coverage.* # nyc test coverage .nyc_output @@ -35,3 +39,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..810cdef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,16 +1,16 @@ language: node_js matrix: include: +# Babel runtime aren't working on node <= 6 # - node_js: '0.10' -# env: _CXXAUTO=1 +# env: BABEL_ENV=legacy # - node_js: '0.12' -# env: _CXXAUTO=1 +# env: BABEL_ENV=legacy # - node_js: '4' -# env: CXX=g++-4.8 +# env: BABEL_ENV=legacy - node_js: '6' -# env: CXX=g++-4.8 + env: BABEL_ENV=legacy - node_js: '8' -# env: CXX=g++-4.8 - node_js: '10' dist: trusty sudo: required @@ -35,6 +35,7 @@ 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 +script: + - npm run test after_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..d01b514 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/polyfill": "^7.4.4", + "@babel/preset-env": "^7.4.5", + "@babel/register": "^7.4.4", "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 + "`"); - -} From 0df503bf795fb8db1f3d6558140e7a8f7f449c87 Mon Sep 17 00:00:00 2001 From: "nezed [CustoMac]" Date: Sun, 26 May 2019 23:23:03 +0300 Subject: [PATCH 2/3] Fix main entry --- .npmignore | 1 + index.js | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.npmignore b/.npmignore index 161482c..e9e933e 100644 --- a/.npmignore +++ b/.npmignore @@ -1,3 +1,4 @@ * !lib*/**/*.js !lib*/**/*.js.map +!index.js diff --git a/index.js b/index.js index 737755e..b0b8956 100644 --- a/index.js +++ b/index.js @@ -2,14 +2,14 @@ try { var nodeVer = process.version.substr(1).split ('.') if (nodeVer[0] >= 6) { - return module.exports = require('lib/clickhouse') + return module.exports = require('./lib/clickhouse') } } catch (e) {} // Tries to import library built for legacy nodejs try { - module.exports = require('lib-legacy/clickhouse') + module.exports = require('./lib-legacy/clickhouse') } catch (e) { // If all imports are failed it may be dev enviroment - module.exports = require('src/clickhouse') + module.exports = require('./src/clickhouse') } From ae156809ac49a3ba430896b352aa8b16778b74c6 Mon Sep 17 00:00:00 2001 From: "nezed [CustoMac]" Date: Sun, 26 May 2019 23:23:20 +0300 Subject: [PATCH 3/3] Add prepublishOnly script --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index d01b514..296fe47 100644 --- a/package.json +++ b/package.json @@ -2,16 +2,16 @@ "name": "@apla/clickhouse", "version": "1.6.0", "description": "Yandex ClickHouse database interface", - "main": "src/clickhouse.js", + "main": "index.js", "scripts": { - "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 --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", - "build": "rm -r lib*/; babel src -d lib --source-maps && BABEL_ENV=legacy babel src -d lib-legacy --source-maps" + "build": "rm -r lib*/; babel src -d lib --source-maps && BABEL_ENV=legacy babel src -d lib-legacy --source-maps", + "prepublishOnly": "npm run build" }, "repository": { "type": "git",