diff --git a/client/core/src/lib/moduleLoader.js b/client/core/src/lib/moduleLoader.js index 3408afe31..82d671454 100644 --- a/client/core/src/lib/moduleLoader.js +++ b/client/core/src/lib/moduleLoader.js @@ -1,59 +1,59 @@ import {module} from '../module'; import splitingRegister from './splitingRegister'; -factory.$inject = ['$translatePartialLoader', '$http', '$window', '$ocLazyLoad', '$q', '$translate']; -export function factory($translatePartialLoader, $http, $window, $ocLazyLoad, $q, $translate) { +factory.$inject = ['$http', '$window', '$ocLazyLoad', '$translatePartialLoader', '$translate']; +export function factory($http, $window, $ocLazyLoad, $translatePartialLoader, $translate) { class ModuleLoader { constructor() { - this._loadedModules = {}; + this._loaded = {}; } load(moduleName, validations) { - if (this._loadedModules[moduleName]) - return; + let loaded = this._loaded; - this._loadedModules[moduleName] = true; + if (loaded[moduleName]) + return loaded[moduleName]; + + loaded[moduleName] = Promise.resolve(true); let deps = splitingRegister.getDependencies(moduleName); - let modules = splitingRegister.modules; - let promises = []; + let depPromises = []; + + if (deps) + for (let dep of deps) + depPromises.push(this.load(dep, validations)); + + loaded[moduleName] = new Promise((resolve, reject) => { + Promise.all(depPromises) + .then(() => { + let promises = []; + + // FIXME: https://github.com/angular-translate/angular-translate/pull/1674 + $translatePartialLoader.addPart(moduleName); + promises.push($translate.refresh()); + + if (validations) + promises.push(new Promise(resolve => { + $http.get(`/${moduleName}/validations`).then( + json => this.onValidationsReady(json, resolve), + json => resolve() + ); + })); - for (let dep of deps) { - this._loadedModules[dep] = true; - promises.push(modules[dep]()); - if (validations) promises.push(new Promise(resolve => { - $http.get(`/${dep}/validations`).then( - json => this.onValidationsReady(json, resolve), - json => resolve() - ); + splitingRegister.modules[moduleName](resolve); })); - $translatePartialLoader.addPart(dep); - // FIXME: https://github.com/angular-translate/angular-translate/pull/1674 - // promises.push($translate.refresh()); - setTimeout(() => $translate.refresh(), 500); - } - - let ocDeps = deps.map(item => { - return {name: item}; + Promise.all(promises) + .then(() => { + this._loaded[moduleName] = true; + resolve($ocLazyLoad.load({name: moduleName})); + }) + .catch(reject); + }) + .catch(reject); }); - return new Promise(resolve => { - Promise.all(promises).then( - () => resolve($ocLazyLoad.load(ocDeps)) - ); - }); - } - parseValidation(val) { - switch (val.validation) { - case 'custom': - // TODO: Reemplazar eval - val.bindedFunction = eval(`(${val.bindedFunction})`); - break; - case 'format': - val.with = new RegExp(val.with); - break; - } + return loaded[moduleName]; } onValidationsReady(json, resolve) { let entities = json.data; @@ -69,6 +69,17 @@ export function factory($translatePartialLoader, $http, $window, $ocLazyLoad, $q Object.assign($window.validations, json.data); resolve(); } + parseValidation(val) { + switch (val.validation) { + case 'custom': + // TODO: Replace eval + val.bindedFunction = eval(`(${val.bindedFunction})`); + break; + case 'format': + val.with = new RegExp(val.with); + break; + } + } } return new ModuleLoader(); diff --git a/client/core/src/lib/splitingRegister.js b/client/core/src/lib/splitingRegister.js index 60c52f0bc..d6af3de64 100644 --- a/client/core/src/lib/splitingRegister.js +++ b/client/core/src/lib/splitingRegister.js @@ -1,29 +1,11 @@ class SplitingRegister { constructor() { - this._graph = null; - this._modules = {}; + this.graph = null; + this.modules = {}; } - get modules() { - return this._modules; - } - getDependencies(dependency) { - var array = []; - array.push(dependency); - var first = this._graph[dependency]; - - if (first) - while (first.length > 0) { - dependency = first.shift(); - array = array.concat(this.getDependencies(dependency)); - } - return array; - } - registerGraph(graph) { - this._graph = graph; - } - register(moduleName, loader) { - this._modules[moduleName] = loader; + getDependencies(moduleName) { + return this.graph[moduleName]; } } diff --git a/client/modules.json b/client/modules.json deleted file mode 100644 index d7dd0f7ce..000000000 --- a/client/modules.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "salix": [], - "auth": [], - "core": [], - "client": [], - "production": [], - "route": [], - "locator": [], - "item": [] -} diff --git a/client/modules.yml b/client/modules.yml new file mode 100644 index 000000000..0236ce1e3 --- /dev/null +++ b/client/modules.yml @@ -0,0 +1,8 @@ +salix: [] +auth: [] +core: [] +client: [] +production: [] +route: [] +locator: [] +item: [] diff --git a/client/salix/src/app.js b/client/salix/src/app.js index a4b45629e..5695d02b5 100644 --- a/client/salix/src/app.js +++ b/client/salix/src/app.js @@ -1,5 +1,4 @@ import './module'; -import './spliting'; import './configroutes'; import './config'; import './run'; diff --git a/client/salix/src/configroutes.js b/client/salix/src/configroutes.js index e5ab72fb8..357bb4880 100644 --- a/client/salix/src/configroutes.js +++ b/client/salix/src/configroutes.js @@ -1,6 +1,6 @@ -import './spliting'; -import deps from 'client/modules.json'; import ngModule from './module'; +import deps from 'client/modules.yml'; +import modules from 'client/spliting'; import {splitingRegister} from 'core'; function loader(moduleName, validations) { @@ -13,7 +13,9 @@ function loader(moduleName, validations) { config.$inject = ['$stateProvider', '$urlRouterProvider', 'aclServiceProvider', 'modulesFactoryProvider']; function config($stateProvider, $urlRouterProvider, aclServiceProvider, modulesFactory) { - splitingRegister.registerGraph(deps); + splitingRegister.graph = deps; + splitingRegister.modules = modules; + let aclService = aclServiceProvider.$get(); function getParams(route) { @@ -61,7 +63,7 @@ function config($stateProvider, $urlRouterProvider, aclServiceProvider, modulesF configRoute.abstract = true; if (route.routeParams) configRoute.params = route.routeParams; - + $stateProvider.state(route.state, configRoute); } else if (route.state === mainModule.state) { break; diff --git a/client/salix/src/spliting.js b/client/salix/src/spliting.js deleted file mode 100644 index b1a2a4d19..000000000 --- a/client/salix/src/spliting.js +++ /dev/null @@ -1,56 +0,0 @@ -import * as core from 'core'; - -export const client = () => { - return new Promise(resolve => { - require.ensure([], () => { - require('client'); - resolve('client'); - }, 'client'); - }); -}; - -core.splitingRegister.register('client', client); - -export const production = () => { - return new Promise(resolve => { - require.ensure([], () => { - require('production'); - resolve('production'); - }, 'production'); - }); -}; - -core.splitingRegister.register('production', production); - -export const route = () => { - return new Promise(resolve => { - require.ensure([], () => { - require('route'); - resolve('route'); - }, 'route'); - }); -}; - -core.splitingRegister.register('route', route); - -export const locator = () => { - return new Promise(resolve => { - require.ensure([], () => { - require('locator'); - resolve('locator'); - }, 'locator'); - }); -}; - -core.splitingRegister.register('locator', locator); - -export const item = () => { - return new Promise(resolve => { - require.ensure([], () => { - require('item'); - resolve('item'); - }, 'item'); - }); -}; - -core.splitingRegister.register('item', item); diff --git a/client/spliting.js b/client/spliting.js new file mode 100644 index 000000000..9d472675f --- /dev/null +++ b/client/spliting.js @@ -0,0 +1,12 @@ +export default { + client: + cb => require.ensure([], () => cb(require('client'))), + production: + cb => require.ensure([], () => cb(require('production'))), + route: + cb => require.ensure([], () => cb(require('route'))), + locator: + cb => require.ensure([], () => cb(require('locator'))), + item: + cb => require.ensure([], () => cb(require('item'))) +}; diff --git a/gulpfile.js b/gulpfile.js index 845df3885..5fa20ad2c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,3 +1,4 @@ +require('require-yaml'); const gulp = require('gulp'); const gutil = require('gulp-util'); const wrap = require('gulp-wrap'); @@ -22,11 +23,11 @@ const servicesDir = './services'; const nginxDir = `${servicesDir}/nginx`; const buildDir = `${nginxDir}/static`; -const modules = require('./client/modules.json'); +const modules = require('./client/modules.yml'); const webpackConfig = require('./webpack.config.js'); -let proxyConf = require(`${nginxDir}/config.json`); -let proxyEnvFile = `${nginxDir}/config.${env}.json`; +let proxyConf = require(`${nginxDir}/config.yml`); +let proxyEnvFile = `${nginxDir}/config.${env}.yml`; if (fs.existsSync(proxyEnvFile)) Object.assign(proxyConf, require(proxyEnvFile)); @@ -80,7 +81,7 @@ gulp.task('e2e-run', () => { gulp.task('clean', () => { const del = require('del'); - return del([`${buildDir}/*`, `${nginxDir}/temp/*`, `!${buildDir}/templates`, `!${buildDir}/images`], {force: true}); + return del([`${buildDir}/*`, `!${buildDir}/templates`, `!${buildDir}/images`], {force: true}); }); gulp.task('install', () => { @@ -144,7 +145,7 @@ gulp.task('nginx', ['nginx-conf'], callback => { let command = isWindows ? 'start.cmd' : 'start.sh'; command = path.join(`${nginxDir}/${command}`); exec(command, (err, stdout, stderr) => { - if (stderr) console.log(stderr); + // if (stderr) console.log(stderr); callback(err); }); }); @@ -172,6 +173,11 @@ gulp.task('nginx-conf', async () => { await fs.writeFile(`${nginxDir}/temp/nginx.conf`, nginxConf); }); +gulp.task('nginx-clean', () => { + const del = require('del'); + return del([`${nginxDir}/temp/*`], {force: true}); +}); + let services; async function getServices() { diff --git a/package-lock.json b/package-lock.json index b4e722f51..8eee2975c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -132,19 +132,19 @@ "integrity": "sha1-cC9XTW0UBpADXqxkOV/jEfeYf7s=" }, "angular-translate": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/angular-translate/-/angular-translate-2.13.1.tgz", - "integrity": "sha1-BWc+s3GYb8Ee3BUfWQKZ1+DEYig=", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/angular-translate/-/angular-translate-2.17.0.tgz", + "integrity": "sha512-SudfI0R0Hhtvngc0X3wFChXQGmw90o95i+QPZ11LhJJryneTq8LR3+3E4E7jgHA4fu6TcswgcfZ9+cp5ckbUHw==", "requires": { "angular": "1.6.8" } }, "angular-translate-loader-partial": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/angular-translate-loader-partial/-/angular-translate-loader-partial-2.13.1.tgz", - "integrity": "sha1-U3g7SK7OUJFS1NwfZMIxaKaTadM=", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/angular-translate-loader-partial/-/angular-translate-loader-partial-2.17.0.tgz", + "integrity": "sha512-pyRJcRc93iwiUnRnh9ZfehbQE/yxO5T6jmEqIvLEVz8gKLjDqDLKcaQFgPef9wCIN2n3e531YbStkkbSH3LYmQ==", "requires": { - "angular-translate": "2.13.1" + "angular-translate": "2.17.0" } }, "ansi-align": { @@ -267,7 +267,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, "requires": { "sprintf-js": "1.0.3" } @@ -5329,7 +5328,7 @@ "fsevents": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha1-EfgjGPX+e7LNIpZaEI6TBiCCFtg=", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", "dev": true, "optional": true, "requires": { @@ -9980,9 +9979,9 @@ "dev": true }, "json-loader": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.4.tgz", - "integrity": "sha1-i6oTZaYy9Yo8RtIBdfxgAsluN94=", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", "dev": true }, "json-schema": { @@ -12665,6 +12664,30 @@ "resolve-from": "1.0.1" } }, + "require-yaml": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/require-yaml/-/require-yaml-0.0.1.tgz", + "integrity": "sha1-LhsY2RPDuqcqWk03O28Tjd0sMr0=", + "requires": { + "js-yaml": "3.10.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" + }, + "js-yaml": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } + } + } + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -12820,9 +12843,9 @@ } }, "sass-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-4.0.2.tgz", - "integrity": "sha1-phbrdwNmVD5k9UfIYw85xNp18V0=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-4.1.1.tgz", + "integrity": "sha1-ee+UaM8L9kbClSnh8sumvW5Rx7w=", "dev": true, "requires": { "async": "2.1.2", @@ -13535,8 +13558,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sqlstring": { "version": "2.3.0", @@ -14879,7 +14901,7 @@ "async": "2.1.2", "enhanced-resolve": "3.0.3", "interpret": "1.0.1", - "json-loader": "0.5.4", + "json-loader": "0.5.7", "loader-runner": "2.3.0", "loader-utils": "0.2.16", "memory-fs": "0.4.1", @@ -15264,6 +15286,15 @@ "integrity": "sha1-MGxUODXwnuGkyyO3vOmrNByRzdQ=", "dev": true }, + "yaml-loader": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/yaml-loader/-/yaml-loader-0.5.0.tgz", + "integrity": "sha512-p9QIzcFSNm4mCw/m5NdyMfN4RE4aFZJWRRb01ERVNGCym8VNbKtw3OYZXnvUIkim6U/EjqE/2yIh9F/msShH9A==", + "dev": true, + "requires": { + "js-yaml": "3.10.0" + } + }, "yargs": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", diff --git a/package.json b/package.json index b8b6e1412..eb43736ed 100644 --- a/package.json +++ b/package.json @@ -13,13 +13,14 @@ "angular": "^1.6.8", "angular-cookies": "^1.6.4", "angular-paging": "^2.2.2", - "angular-translate": "^2.13.1", - "angular-translate-loader-partial": "^2.13.1", + "angular-translate": "^2.17.0", + "angular-translate-loader-partial": "^2.17.0", "flatpickr": "^2.6.3", "fs-extra": "^5.0.0", "material-design-lite": "^1.3.0", "mg-crud": "^1.1.2", "oclazyload": "^0.6.3", + "require-yaml": "0.0.1", "validator": "^6.2.1" }, "devDependencies": { @@ -53,6 +54,7 @@ "jasmine": "^2.9.0", "jasmine-spec-reporter": "^4.2.1", "js-yaml": "^3.10.0", + "json-loader": "^0.5.7", "karma": "^1.7.1", "karma-chrome-launcher": "^2.2.0", "karma-firefox-launcher": "^1.1.0", @@ -68,10 +70,11 @@ "nodemon": "^1.12.1", "raw-loader": "*", "run-sequence": "^2.2.0", - "sass-loader": "^4.0.2", + "sass-loader": "^4.1.1", "style-loader": "^0.13.1", "webpack": "^2.2.0", - "webpack-dev-server": "^2.2.0" + "webpack-dev-server": "^2.2.0", + "yaml-loader": "^0.5.0" }, "scripts": { "test": "nodemon -q services_tests.js -w services", diff --git a/services/mailer/application/config.js b/services/mailer/application/config.js index cfb06544d..335441531 100644 --- a/services/mailer/application/config.js +++ b/services/mailer/application/config.js @@ -1,3 +1,4 @@ +require('require-yaml'); var fs = require('fs-extra'); let env = process.env.NODE_ENV ? process.env.NODE_ENV : 'development'; @@ -8,8 +9,8 @@ let configEnvFile = `${__dirname}/config/datasources.${env}.json`; if (fs.existsSync(configEnvFile)) Object.assign(config, require(configEnvFile)); -let proxyConf = require(`../../nginx/config.json`); -let proxyEnvFile = `../../nginx/config.${env}.json`; +let proxyConf = require(`../../nginx/config.yml`); +let proxyEnvFile = `../../nginx/config.${env}.yml`; if (fs.existsSync(proxyEnvFile)) Object.assign(proxyConf, require(proxyEnvFile)); diff --git a/services/nginx/.gitignore b/services/nginx/.gitignore index 4a76957db..c68eb0b10 100644 --- a/services/nginx/.gitignore +++ b/services/nginx/.gitignore @@ -1,4 +1,3 @@ -logs/* static/* temp/* !static/templates diff --git a/services/nginx/config.json b/services/nginx/config.json deleted file mode 100644 index bcaede858..000000000 --- a/services/nginx/config.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "host": "localhost", - "port": 5000, - "main": "salix", - "defaultPort": 3000, - "devServerPort": 8081 -} \ No newline at end of file diff --git a/services/nginx/config.production.json b/services/nginx/config.production.json deleted file mode 100644 index 6fde3b708..000000000 --- a/services/nginx/config.production.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "host": "salix", - "port": 80 -} \ No newline at end of file diff --git a/services/nginx/config.production.yml b/services/nginx/config.production.yml new file mode 100644 index 000000000..80792e8a0 --- /dev/null +++ b/services/nginx/config.production.yml @@ -0,0 +1,2 @@ +host: salix +port: 80 \ No newline at end of file diff --git a/services/nginx/config.test.json b/services/nginx/config.test.json deleted file mode 100644 index 2d4f04528..000000000 --- a/services/nginx/config.test.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "host": "test-salix", - "port": 80 -} \ No newline at end of file diff --git a/services/nginx/config.test.yml b/services/nginx/config.test.yml new file mode 100644 index 000000000..3852100af --- /dev/null +++ b/services/nginx/config.test.yml @@ -0,0 +1,2 @@ +host: test-salix +port: 80 \ No newline at end of file diff --git a/services/nginx/config.yml b/services/nginx/config.yml new file mode 100644 index 000000000..6783c674d --- /dev/null +++ b/services/nginx/config.yml @@ -0,0 +1,5 @@ +host: localhost +port: 5000 +main: salix +defaultPort: 3000 +devServerPort: 8081 \ No newline at end of file diff --git a/services/nginx/start.cmd b/services/nginx/start.cmd index 45c1440a9..a64a5ba84 100644 --- a/services/nginx/start.cmd +++ b/services/nginx/start.cmd @@ -2,7 +2,7 @@ set nginxDir=%~dp0 set nginxTemp=%nginxDir%\temp -set nginxConf=%nginxTemp%\nginx.conf +set nginxConf=temp\nginx.conf if "%1"=="" goto caseStart if "%1"=="start" goto caseStart diff --git a/services/print/application/config.js b/services/print/application/config.js index cfb06544d..335441531 100644 --- a/services/print/application/config.js +++ b/services/print/application/config.js @@ -1,3 +1,4 @@ +require('require-yaml'); var fs = require('fs-extra'); let env = process.env.NODE_ENV ? process.env.NODE_ENV : 'development'; @@ -8,8 +9,8 @@ let configEnvFile = `${__dirname}/config/datasources.${env}.json`; if (fs.existsSync(configEnvFile)) Object.assign(config, require(configEnvFile)); -let proxyConf = require(`../../nginx/config.json`); -let proxyEnvFile = `../../nginx/config.${env}.json`; +let proxyConf = require(`../../nginx/config.yml`); +let proxyEnvFile = `../../nginx/config.${env}.yml`; if (fs.existsSync(proxyEnvFile)) Object.assign(proxyConf, require(proxyEnvFile)); diff --git a/webpack.config.js b/webpack.config.js index bad3138e5..8062d9979 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -25,20 +25,19 @@ var config = { query: { presets: ['es2015'] } - }, - { + }, { + test: /\.yml$/, + loader: 'json-loader!yaml-loader' + }, { test: /\.html$/, loader: 'html-loader' - }, - { + }, { test: /\.css$/, loader: 'style-loader!css-loader' - }, - { + }, { test: /\.scss$/, loader: 'style-loader!css-loader!sass-loader' - }, - { + }, { test: /\.(svg|png|ttf|woff|woff2)$/, loader: 'file-loader' }