Skip to content

Commit

Permalink
Merge pull request #4 from danmademe/develop
Browse files Browse the repository at this point in the history
2.0.5
  • Loading branch information
danielcherubini committed Oct 31, 2016
2 parents 5fab8ad + a827312 commit 107f1f3
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 34 deletions.
54 changes: 26 additions & 28 deletions dist/parser/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ var _defaults = require('../defaults');

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var htmlMinifier = _htmlMinifier2.default.minify;
var htmlRegex = /(<template?.*>)([\s\S]*?)(<\/template>)/gm;
var scriptRegex = /(<script?.*>)([\s\S]*?)(<\/script>)/gm;
Expand All @@ -37,39 +39,30 @@ function htmlParser(body, minify) {
return bodyString;
}

function dataMatcher(vueData, controllerData, type) {
var obj = {};
for (var controllerDataKey in controllerData) {
if (controllerData.hasOwnProperty(controllerDataKey)) {
for (var vueDataKey in vueData) {
if (vueData.hasOwnProperty(vueDataKey)) {
switch (type) {
case types.LAYOUT:
break;
case types.COMPONENT:
obj[controllerDataKey] = controllerData[controllerDataKey];
obj[vueDataKey] = vueData[vueDataKey];
break;
case types.SUBCOMPONENT:
obj[vueDataKey] = vueData[vueDataKey];
break;
}
}
}
}
var DataObject = function DataObject(componentData, defaultData, type) {
_classCallCheck(this, DataObject);

switch (type) {
case types.COMPONENT:
this.data = Object.assign({}, componentData, defaultData);
break;
case types.SUBCOMPONENT:
this.data = componentData;
break;
}
var output = 'data: () => {return ' + JSON.stringify(obj) + ';};';
return output;
}
};

function dataParser(script, defaults, type) {
var finalScript = {};
for (var element in script) {
if (script.hasOwnProperty(element)) {
if (element === 'data') {
var data = script.data();
var output = dataMatcher(data, defaults.options.data, type);
finalScript[element] = eval(output);
(function () {
var data = new DataObject(script.data(), defaults.options.data, type).data;
finalScript[element] = function () {
return data;
};
})();
} else {
finalScript[element] = script[element];
}
Expand All @@ -79,9 +72,14 @@ function dataParser(script, defaults, type) {
}

function scriptParser(script, defaults, type) {
var options = {
'presets': ['es2015'],
'plugins': ['add-module-exports']
};
var scriptString = script.match(scriptRegex)[0].replace(scriptRegex, '$2');
var babelScript = require('babel-core').transform(scriptString, { 'presets': ['es2015'] }).code;
var evalScript = eval(babelScript);
var babelScript = require('babel-core').transform(scriptString, options);
// TODO: Remove EVAL!!!!!
var evalScript = eval(babelScript.code);
var finalScript = dataParser(evalScript, defaults, type);
return finalScript;
}
Expand Down
1 change: 0 additions & 1 deletion dist/utils/render.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ function layoutUtil(components) {
layout = component;
break;
case types.COMPONENT:
layout.template = layout.template.replace(appRegex, '<div id="app">' + component.script.template + '</div>');
layout.script = component.script;
break;
case types.SUBCOMPONENT:
Expand Down
16 changes: 14 additions & 2 deletions dist/utils/string.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,34 @@
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.scriptToString = undefined;

var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };

var _xss = require('xss');

var _xss2 = _interopRequireDefault(_xss);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function scriptToString(script) {
var string = '';
for (var member in script) {
switch (_typeof(script[member])) {
case 'function':
string += member + ': ' + String(script[member]) + ',';
if (member === 'data') {
var dataObj = (0, _xss2.default)(JSON.stringify(script[member]()));
string += member + ': function(){return ' + dataObj + '},';
} else {
string += member + ': ' + String(script[member]) + ',';
}
break;
case 'string':
string += member + ': ' + JSON.stringify(script[member]) + ',';
break;
case 'object':
if (member === 'data') {
string += member + ': ' + JSON.stringify(script[member]) + ',';
string += member + ': ' + (0, _xss2.default)(JSON.stringify(script[member])) + ',';
} else {
string += member + ': ' + scriptToString(script[member]) + ',';
}
Expand Down
4 changes: 2 additions & 2 deletions lib/parser/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import fs from 'fs';
import minify from 'html-minifier';
import {Types} from '../defaults';
import requireFromString from 'require-from-string';

const htmlMinifier = minify.minify;
const htmlRegex = /(<template?.*>)([\s\S]*?)(<\/template>)/gm;
Expand Down Expand Up @@ -59,8 +60,7 @@ function scriptParser(script, defaults, type) {
};
let scriptString = script.match(scriptRegex)[0].replace(scriptRegex, '$2');
let babelScript = require('babel-core').transform(scriptString, options);
// TODO: Remove EVAL!!!!!
let evalScript = eval(babelScript.code);
let evalScript = requireFromString(babelScript.code);
let finalScript = dataParser(evalScript, defaults, type);
return finalScript;
}
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "express-vue",
"version": "2.0.4",
"version": "2.0.5",
"description": "Vue rendering engine for Express.js",
"homepage": "https://github.com/danmademe/express-vue",
"author": {
Expand Down Expand Up @@ -57,6 +57,7 @@
"babel-plugin-transform-flow-strip-types": "^6.18.0",
"babel-preset-es2015": "^6.9.0",
"html-minifier": "^3.1.0",
"require-from-string": "^1.2.1",
"vue": "^2.0.3",
"vue-server-renderer": "^2.0.3",
"xss": "^0.2.16"
Expand Down

0 comments on commit 107f1f3

Please sign in to comment.