2 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13 * or implied. See the License for the specific language governing
14 * permissions and limitations under the License.
16 var gulp, replace, rename, fs, prompt, Promise;
18 function mergePromptOptions(options) {
20 return new Promise(function(resolve, reject) {
21 var lang = options.lang;
22 var warDir = options.warDir;
26 description: 'Enter war directory',
31 description: 'Enter locale.json parent directory name',
35 ], function (err, result) {
38 reject(new Error('mergePromptOptions::>\n ' + err));
42 var warDir = result.warDir;
43 var lang = result.lang;
45 console.log('\nlocale.json parent directory name> "' + lang + '"');
46 console.log('war director>"' + warDir + '"');
56 function isBundleExists(path) {
57 return new Promise(function(resolve) {
58 fs.stat(path, function(err) {
60 /*if null == err then file exists.*/
65 function copyEnglishBundle(enBundlePath, lang) {
66 return new Promise(function(resolve, reject) {
67 gulp.src(enBundlePath, {base: './'})
68 .pipe(rename({basename: 'bundle_' + lang}))
69 .pipe(gulp.dest('./'))
70 .on('end', function() {
73 .on('error', function(err) {
74 reject(new Error('copyEnglishBundle::>\n ' + err));
79 function getLocaleContent(localePath) {
81 return new Promise(function(resolve, reject) {
82 fs.readFile(localePath, {encoding: 'utf-8'}, function(err,data){
84 reject('getLocaleContent()::>\n ' + err);
93 function extractLocaleJsonContent(localeDataStr) {
95 var localeJsonStrI18nStartIdx = localeDataStr.indexOf('I18N_IDENTIFIER_START');
96 var localeJsonStrI18nEndIdx = localeDataStr.indexOf('I18N_IDENTIFIER_END');
98 if(-1 === localeJsonStrI18nStartIdx || -1 === localeJsonStrI18nEndIdx) {
99 return Promise.reject(new Error('extractLocaleJsonContent::> localeDataStr must contain %I18N_IDENTIFIER_START% and %I18N_IDENTIFIER_END%'));
102 var localeJsonStr = localeDataStr.substring(
103 localeDataStr.indexOf('{', localeJsonStrI18nStartIdx),
104 localeDataStr.lastIndexOf('}', localeJsonStrI18nEndIdx) + 1
108 JSON.parse(localeJsonStr);
110 return Promise.reject(new Error('extractLocaleJsonContent::> localeDataStr must contain a valid json between %I18N_IDENTIFIER_START% and %I18N_IDENTIFIER_END%=>' + e));
113 return Promise.resolve(localeJsonStr);
116 function setBundleLocaleContent(bundlePath, localeJsonStr) {
117 return new Promise(function(resolve, reject) {
118 gulp.src(bundlePath, {base: './'})
119 .pipe(replace(/I18N_IDENTIFIER_START(.|[\r\n])*?I18N_IDENTIFIER_END/i, function(expr) {
120 return expr.substring(0, expr.indexOf('{')) + localeJsonStr + expr.substring(expr.lastIndexOf('}') + 1);
122 .pipe(gulp.dest('./'))
123 .on('end', function() {
126 .on('error', function(err) {
127 reject(new Error('setBundleLocaleContent::>\n ' + err));
133 function update(options) {
135 gulp = require('gulp');
136 replace = require('gulp-replace');
137 rename = require('gulp-rename');
139 prompt = require('prompt');
140 Promise = require('bluebird');
142 return mergePromptOptions(options).then(function(mergedOptions) {
143 var lang = mergedOptions.lang;
144 var warDir = mergedOptions.warDir;
146 var bundlePath = warDir + '/js/bundle_' + lang + '.js';
147 var localePath = warDir + '/i18n/' + lang + '/locale.json';
149 return isBundleExists(bundlePath)
150 .then(function(isBundleExist) {
151 var englishBundlePath;
153 englishBundlePath = warDir + '/js/bundle_en.js';
154 return copyEnglishBundle(englishBundlePath, lang);
157 .then(getLocaleContent.bind(null, localePath))
158 .then(extractLocaleJsonContent)
159 .then(setBundleLocaleContent.bind(null, bundlePath));
166 module.exports = update;