From 785cbba140bf10d630564457b48834f9ad06be87 Mon Sep 17 00:00:00 2001 From: Nikita Chuklinov Date: Wed, 31 Jan 2018 19:23:11 +0300 Subject: [PATCH 1/3] added eval of ${var} variables in templates --- index.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index 35e12c3..97ac0d9 100644 --- a/index.js +++ b/index.js @@ -53,15 +53,21 @@ function readPackageJSON (encoding) { function filterConfig (configTmpl, pkg) { // create a config object from the config template // replace {key} with the key's value in package.json + // replace ${key} with eval(key) var obj = extend({}, configTmpl); Object.keys(obj).forEach(function (key) { var value = obj[key]; if (typeof value != 'string') { return; } - obj[key] = value.replace(/{([^}]+)}/g, function (org, key) { - if (pkg[key] === undefined) { return org; } - return pkg[key]; - }); + obj[key] = value + .replace(/\${([^}]+)}/g, function(org, key) { + if (eval(key) === undefined) { return org; } + return eval(key); + }) + .replace(/{([^}]+)}/g, function (org, key) { + if (pkg[key] === undefined) { return org; } + return pkg[key]; + }); }); return obj; From feeb23e5a8b52dfd599eb112b8db4d30c6cf034d Mon Sep 17 00:00:00 2001 From: Nikita Chuklinov Date: Sun, 25 Feb 2018 00:54:14 +0300 Subject: [PATCH 2/3] Added Mustache to use templates in config with {{env}} and {{package}} --- index.js | 11 ++++++----- package.json | 1 + test.js | 21 +++++++++++++++++++++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/index.js b/index.js index 97ac0d9..fb69e6c 100644 --- a/index.js +++ b/index.js @@ -7,6 +7,7 @@ var exec = require('child_process').exec; var defineOpts = require('define-options'); var semver = require('semver'); var isBinaryFile = require('isbinaryfile'); +var Mustache = require('mustache'); var validateConfig, validateRepos, validateRepo, userConfig; @@ -55,15 +56,15 @@ function filterConfig (configTmpl, pkg) { // replace {key} with the key's value in package.json // replace ${key} with eval(key) var obj = extend({}, configTmpl); + var replacibleKeys = { + env: process.env, + package: pkg + }; Object.keys(obj).forEach(function (key) { var value = obj[key]; if (typeof value != 'string') { return; } - obj[key] = value - .replace(/\${([^}]+)}/g, function(org, key) { - if (eval(key) === undefined) { return org; } - return eval(key); - }) + obj[key] = Mustache.render(value, replacibleKeys) .replace(/{([^}]+)}/g, function (org, key) { if (pkg[key] === undefined) { return org; } return pkg[key]; diff --git a/package.json b/package.json index b5b3944..90609c6 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "fs-walk": "0.0.1", "isbinaryfile": "^3.0.0", "jszip": "^2.5.0", + "mustache": "^2.3.0", "semver": "^5.1.0", "util-extend": "^1.0.3" }, diff --git a/test.js b/test.js index 5823c83..eefa876 100644 --- a/test.js +++ b/test.js @@ -42,6 +42,13 @@ const GROUP_ID = 'com.dummy', classifier: TEST_CLASSIFIER, generatePom: false, pomFile: 'existing-pom.xml' + }, + TEST_CONFIG_WITH_ENV_VARIABLE = { + groupId: GROUP_ID, + repositories: [DUMMY_REPO_SNAPSHOT, DUMMY_REPO_RELEASE], + classifier: TEST_CLASSIFIER, + generatePom: false, + 'finalName': '{name}-{{env.NODE_ENV}}.{{package.version}}', }; var childProcessMock; @@ -118,6 +125,7 @@ describe('maven-deploy', function () { execSpy = childProcessMock.exec; fs = createFakeFS(); + process.env.NODE_ENV = 'test'; maven = proxyquire('./index.js', { 'child_process': childProcessMock, @@ -140,6 +148,19 @@ describe('maven-deploy', function () { }); }); }); + it('should render correct config with {env} and {package} values', function () { + const EXPECTED_ARGS = [ + '-Dfile=dist' + path.sep + TEST_PKG_JSON.name + '-' + + process.env.NODE_ENV + + '.'+semver.inc(TEST_PKG_JSON.version,'patch')+ + '-SNAPSHOT' + '.war', + ]; + maven.config(TEST_CONFIG_WITH_ENV_VARIABLE); + maven.install(); + + assert.equal(process.env.NODE_ENV,'test'); + assertArgs(execSpy.args[0][0], EXPECTED_ARGS); + }); }); describe('package', function () { From ab5b1e9e826e585d832107ee3b39ba4710ab8dd8 Mon Sep 17 00:00:00 2001 From: Nikita Chuklinov Date: Tue, 27 Feb 2018 23:10:50 +0300 Subject: [PATCH 3/3] code style fix --- test.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test.js b/test.js index eefa876..6168e8f 100644 --- a/test.js +++ b/test.js @@ -48,7 +48,7 @@ const GROUP_ID = 'com.dummy', repositories: [DUMMY_REPO_SNAPSHOT, DUMMY_REPO_RELEASE], classifier: TEST_CLASSIFIER, generatePom: false, - 'finalName': '{name}-{{env.NODE_ENV}}.{{package.version}}', + finalName: '{name}-{{env.NODE_ENV}}.{{package.version}}', }; var childProcessMock; @@ -150,15 +150,15 @@ describe('maven-deploy', function () { }); it('should render correct config with {env} and {package} values', function () { const EXPECTED_ARGS = [ - '-Dfile=dist' + path.sep + TEST_PKG_JSON.name + '-' + + '-Dfile=dist' + path.sep + TEST_PKG_JSON.name + '-' + process.env.NODE_ENV + - '.'+semver.inc(TEST_PKG_JSON.version,'patch')+ + '.' + semver.inc(TEST_PKG_JSON.version, 'patch') + '-SNAPSHOT' + '.war', ]; maven.config(TEST_CONFIG_WITH_ENV_VARIABLE); maven.install(); - assert.equal(process.env.NODE_ENV,'test'); + assert.equal(process.env.NODE_ENV, 'test'); assertArgs(execSpy.args[0][0], EXPECTED_ARGS); }); });