From 8d79f511f10db40c8c9eb3ce7a8641d78348ffa0 Mon Sep 17 00:00:00 2001 From: Daniel Cherubini Date: Fri, 6 Oct 2017 15:52:27 +0200 Subject: [PATCH 1/2] fixes stupid cheating shit --- package-lock.json | 38 ++++++++++++------------- src/utils/string.js | 46 +++++++++++++++++++++---------- tests/example/components/uuid.vue | 2 +- 3 files changed, 52 insertions(+), 34 deletions(-) diff --git a/package-lock.json b/package-lock.json index cdf4943..187bc04 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "express-vue-renderer", - "version": "0.6.10", + "version": "0.7.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -4060,6 +4060,15 @@ } } }, + "string_decoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -4071,15 +4080,6 @@ "strip-ansi": "3.0.1" } }, - "string_decoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", - "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", @@ -9398,6 +9398,15 @@ "duplexer": "0.1.1" } }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, "string-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", @@ -9430,15 +9439,6 @@ } } }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", diff --git a/src/utils/string.js b/src/utils/string.js index 0bf464e..aaa2f96 100644 --- a/src/utils/string.js +++ b/src/utils/string.js @@ -11,16 +11,34 @@ class PropClass { } } +function isLastElement(script: Object | any, currentElement: string): string { + const elementArray = Object.keys(script); + const lastElement = elementArray[elementArray.length - 1]; + + if (currentElement === lastElement) { + return ''; + } else { + return ','; + } +} + function routesToString(routes: Object[]): string { let routeString = ''; - routes.forEach(script => routeString += scriptToString(script) + ','); - return `[${routeString}]`.replace(new RegExp(/,}/, 'g'), '}').replace(new RegExp(/,]/, 'g'), ']'); + const lastRoute = routes[routes.length-1]; + routes.forEach(route => { + if (route !== lastRoute) { + routeString += scriptToString(route) + ','; + } else { + routeString += scriptToString(route); + } + }); + return `[${routeString}]`; } function routeComponentsToString(script: Object): string { let componentString = ''; for (let member in script) { - componentString += member + ': __' + script[member] + ','; + componentString += member + ': __' + script[member] + isLastElement(script, member); } return `{${componentString}}`; } @@ -60,44 +78,44 @@ function scriptToString(script: Object | any): string { const dataObj = xss(JSON.stringify(script[member]())); scriptString += `${member}: function(){return ${dataObj}},`; } else { - scriptString += member + ': ' + String(script[member]) + ','; + scriptString += member + ': ' + String(script[member]) + isLastElement(script, member); } break; case 'object': if (member === 'data') { - scriptString += member + ': ' + xss(JSON.stringify(script[member])) + ','; + scriptString += member + ': ' + xss(JSON.stringify(script[member])) + isLastElement(script, member); } else if (member === 'routes' || member === 'children') { - scriptString += member + ': ' + routesToString(script[member]) + ','; + scriptString += member + ': ' + routesToString(script[member]) + isLastElement(script, member); } else if (member === 'components' && script['path'] !== undefined) { // Checks if 'components' is in a route object - scriptString += member + ': ' + routeComponentsToString(script[member]) + ','; + scriptString += member + ': ' + routeComponentsToString(script[member]) + isLastElement(script, member); } else if (member === 'mixins') { scriptString += member + ': [' + mixinsToString(script[member]) + '],'; } else if (script[member].constructor === Array) { - scriptString += member + ': ' + xss(JSON.stringify(script[member])) + ','; + scriptString += member + ': ' + xss(JSON.stringify(script[member])) + isLastElement(script, member); } else if (member === 'props') { if (script[member][Object.keys(script[member])[0]].type === null) { var propsArray = Object.keys(script[member]); - scriptString += member + ': ' + xss(JSON.stringify(propsArray)) + ','; + scriptString += member + ': ' + xss(JSON.stringify(propsArray)) + isLastElement(script, member); } else { - // scriptString += member + ': ' + scriptToString(script[member]) + ','; + // scriptString += member + ': ' + scriptToString(script[member]) + isLastElement(script, member); const propsString = propsToString(script[member]); scriptString += `${member}: ${propsString},`; } } else { - scriptString += member + ': ' + scriptToString(script[member]) + ','; + scriptString += member + ': ' + scriptToString(script[member]) + isLastElement(script, member); } break; default: if (member === 'component' && script['path'] !== undefined) { // Checks if 'component' is in a route object - scriptString += member + ': __' + script[member] + ','; + scriptString += member + ': __' + script[member] + isLastElement(script, member); } else { - scriptString += member + ': ' + JSON.stringify(script[member]) + ','; + scriptString += member + ': ' + JSON.stringify(script[member]) + isLastElement(script, member); } break; } } - let finalScriptString = `{${scriptString}}`.replace(new RegExp(/,}/, 'g'), '}').replace(new RegExp(/,]/, 'g'), ']'); + let finalScriptString = `{${scriptString}}`; return finalScriptString; } diff --git a/tests/example/components/uuid.vue b/tests/example/components/uuid.vue index 4e82a52..60ff155 100644 --- a/tests/example/components/uuid.vue +++ b/tests/example/components/uuid.vue @@ -12,7 +12,7 @@ export default { uuid: { type: String, default: 'missing', - required: true + required: false } }, data: function () { From e33715639030d70b7eed20a3afb0c8371e57ee59 Mon Sep 17 00:00:00 2001 From: Daniel Cherubini Date: Fri, 6 Oct 2017 15:58:06 +0200 Subject: [PATCH 2/2] fixes tests --- tests/example/components/uuid.vue | 2 +- tests/utils/string.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/example/components/uuid.vue b/tests/example/components/uuid.vue index 60ff155..4e82a52 100644 --- a/tests/example/components/uuid.vue +++ b/tests/example/components/uuid.vue @@ -12,7 +12,7 @@ export default { uuid: { type: String, default: 'missing', - required: false + required: true } }, data: function () { diff --git a/tests/utils/string.js b/tests/utils/string.js index ee7c6d5..85582a1 100644 --- a/tests/utils/string.js +++ b/tests/utils/string.js @@ -145,7 +145,7 @@ const components = { const componentsString = routeComponentsToString(components); test('Route components', (t) => { - t.is(componentsString.includes(`{myview0: __mycomponent0,myview1: __mycomponent1,myview3: __mycomponent2,}`), true); + t.is(componentsString.includes(`{myview0: __mycomponent0,myview1: __mycomponent1,myview3: __mycomponent2}`), true); }); // Test scriptToString() using properties named 'component' and 'components'