Skip to content

Commit c8acb5a

Browse files
author
e2tha-e
committed
replacing JSON with JSON5 for better error messaging
1 parent 2a297f4 commit c8acb5a

File tree

5 files changed

+50
-9
lines changed

5 files changed

+50
-9
lines changed

core/lib/list_item_hunter.js

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
var list_item_hunter = function () {
1414

1515
var extend = require('util')._extend,
16+
JSON = require('json5'),
1617
pa = require('./pattern_assembler'),
1718
smh = require('./style_modifier_hunter'),
1819
pattern_assembler = new pa(),
@@ -44,7 +45,13 @@ var list_item_hunter = function () {
4445
}
4546

4647
//check for a local listitems.json file
47-
var listData = JSON.parse(JSON.stringify(patternlab.listitems));
48+
var listData;
49+
try {
50+
listData = JSON.parse(JSON.stringify(patternlab.listitems));
51+
} catch (err) {
52+
console.log('There was an error parsing JSON for ' + pattern.abspath);
53+
console.log(err);
54+
}
4855
listData = pattern_assembler.merge_data(listData, pattern.listitems);
4956

5057
//iterate over each copied block, rendering its contents along with pattenlab.listitems[i]
@@ -54,8 +61,15 @@ var list_item_hunter = function () {
5461

5562
//combine listItem data with pattern data with global data
5663
var itemData = listData['' + items.indexOf(loopNumberString)]; //this is a property like "2"
57-
var globalData = JSON.parse(JSON.stringify(patternlab.data));
58-
var localData = JSON.parse(JSON.stringify(pattern.jsonFileData));
64+
var globalData;
65+
var localData;
66+
try {
67+
globalData = JSON.parse(JSON.stringify(patternlab.data));
68+
localData = JSON.parse(JSON.stringify(pattern.jsonFileData));
69+
} catch (err) {
70+
console.log('There was an error parsing JSON for ' + pattern.abspath);
71+
console.log(err);
72+
}
5973

6074
var allData = pattern_assembler.merge_data(globalData, localData);
6175
allData = pattern_assembler.merge_data(allData, itemData !== undefined ? itemData[i] : {}); //itemData could be undefined if the listblock contains no partial, just markup
@@ -71,7 +85,13 @@ var list_item_hunter = function () {
7185
var partialPattern = pattern_assembler.get_pattern_by_key(partialName, patternlab);
7286

7387
//create a copy of the partial so as to not pollute it after the get_pattern_by_key call.
74-
var cleanPartialPattern = JSON.parse(JSON.stringify(partialPattern));
88+
var cleanPartialPattern;
89+
try {
90+
cleanPartialPattern = JSON.parse(JSON.stringify(partialPattern));
91+
} catch (err) {
92+
console.log('There was an error parsing JSON for ' + pattern.abspath);
93+
console.log(err);
94+
}
7595

7696
//if partial has style modifier data, replace the styleModifier value
7797
if (foundPartials[j].indexOf(':') > -1) {

core/lib/parameter_hunter.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
var parameter_hunter = function () {
1414

1515
var extend = require('util')._extend,
16+
JSON = require('json5'),
1617
pa = require('./pattern_assembler'),
1718
smh = require('./style_modifier_hunter'),
1819
pattern_assembler = new pa(),
@@ -223,8 +224,9 @@ var parameter_hunter = function () {
223224
paramData = JSON.parse(paramStringWellFormed);
224225
globalData = JSON.parse(JSON.stringify(patternlab.data));
225226
localData = JSON.parse(JSON.stringify(pattern.jsonFileData || {}));
226-
} catch (e) {
227-
console.log(e);
227+
} catch (err) {
228+
console.log('There was an error parsing JSON for ' + pattern.abspath);
229+
console.log(err);
228230
}
229231

230232
var allData = pattern_assembler.merge_data(globalData, localData);

core/lib/pattern_assembler.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@ var pattern_assembler = function () {
332332
}
333333

334334
function parseDataLinksHelper(patternlab, obj, key) {
335+
var JSON = require('json5');
335336
var linkRE, dataObjAsString, linkMatches, expandedLink;
336337

337338
linkRE = /link\.[A-z0-9-_]+/g;
@@ -349,7 +350,16 @@ var pattern_assembler = function () {
349350
}
350351
}
351352
}
352-
return JSON.parse(dataObjAsString);
353+
354+
var dataObj;
355+
try {
356+
dataObj = JSON.parse(dataObjAsString);
357+
} catch (err) {
358+
console.log('There was an error parsing JSON for ' + key);
359+
console.log(err);
360+
}
361+
362+
return dataObj;
353363
}
354364

355365
//look for pattern links included in data files.

core/lib/patternlab.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ var patternlab_engine = function (config) {
1212
'use strict';
1313

1414
var path = require('path'),
15+
JSON = require('json5'),
1516
fs = require('fs-extra'),
1617
diveSync = require('diveSync'),
1718
of = require('./object_factory'),
@@ -191,7 +192,13 @@ var patternlab_engine = function (config) {
191192
pattern.lineageR = lineageRArray;
192193

193194
//render the pattern, but first consolidate any data we may have
194-
var allData = JSON.parse(JSON.stringify(patternlab.data));
195+
var allData;
196+
try {
197+
allData = JSON.parse(JSON.stringify(patternlab.data));
198+
} catch (err) {
199+
console.log('There was an error parsing JSON for ' + pattern.abspath);
200+
console.log(err);
201+
}
195202
allData = pattern_assembler.merge_data(allData, pattern.jsonFileData);
196203

197204
//also add the cachebuster value. slight chance this could collide with a user that has defined cacheBuster as a value

test/parameter_hunter_tests.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,12 +311,14 @@
311311
patternlab.patterns[0].template = "<p>{{foo}}</p>";
312312
patternlab.patterns[0].extendedTemplate = patternlab.patterns[0].template;
313313

314+
currentPattern.abspath = __filename;
314315
currentPattern.template = "{{> molecules-single-comment( missing-val: , : missing-key, : , , foo: \"Hello World\") }}";
315316
currentPattern.extendedTemplate = currentPattern.template;
316317
currentPattern.parameteredPartials[0] = currentPattern.template;
317318

319+
console.log('\nPattern Lab should catch JSON.parse() errors and output useful debugging information...');
318320
parameter_hunter.find_parameters(currentPattern, patternlab);
319-
test.equals(currentPattern.extendedTemplate, '<p>Hello World</p>');
321+
test.equals(currentPattern.extendedTemplate, '<p></p>');
320322

321323
test.done();
322324
}

0 commit comments

Comments
 (0)