source: imaps-frontend/node_modules/nano-css/addon/validate.js

main
Last change on this file was d565449, checked in by stefan toskovski <stefantoska84@…>, 4 weeks ago

Update repo after prototype presentation

  • Property mode set to 100644
File size: 2.5 KB
Line 
1'use strict';
2
3var csstree = require('css-tree');
4var syntax = csstree.lexer;
5
6function validate(css, filename) {
7 var errors = [];
8 var ast = csstree.parse(css, {
9 filename: filename,
10 positions: true,
11 onParseError: function(error) {
12 errors.push(error);
13 }
14 });
15
16 csstree.walk(ast, {
17 visit: 'Declaration',
18 enter: function(node) {
19 var match = syntax.matchDeclaration(node);
20 var error = match.error;
21
22 if (error) {
23 var message = error.rawMessage || error.message || error;
24
25 // ignore errors except those which make sense
26 if (error.name !== 'SyntaxMatchError' &&
27 error.name !== 'SyntaxReferenceError') {
28 return;
29 }
30
31 if (message === 'Mismatch') {
32 message = 'Invalid value for `' + node.property + '`';
33 } else if (message === 'Uncomplete match') {
34 message = 'The rest part of value can\'t be matched to `' + node.property + '` syntax';
35 }
36
37 errors.push({
38 name: error.name,
39 node: node,
40 loc: error.loc || node.loc,
41 line: error.line || node.loc && node.loc.start && node.loc.start.line,
42 column: error.column || node.loc && node.loc.start && node.loc.start.column,
43 property: node.property,
44 message: message,
45 error: error
46 });
47 }
48 }
49 });
50
51 return errors;
52}
53
54exports.addon = function (renderer) {
55 if (process.env.NODE_ENV !== 'production') {
56 require('./__dev__/warnOnMissingDependencies')('validate', renderer, ['putRaw']);
57 }
58
59 if (process.env.NODE_ENV === 'production') {
60 console.warn(
61 'You are using nano-css "validate" in production. ' +
62 'This addon is meant to be used only in development.'
63 );
64 }
65
66 var putRaw = renderer.putRaw;
67
68 renderer.putRaw = function (rawCssRule) {
69 var errors = validate(rawCssRule);
70
71 if (errors && errors.length) {
72 errors.forEach(function (error) {
73 console.error('nano-css error, ' + error.name + ': ' + error.message);
74 // eslint-disable-next-line
75 console.log(error);
76 console.error(rawCssRule);
77 });
78 }
79
80 return putRaw.apply(renderer, arguments);
81 };
82};
Note: See TracBrowser for help on using the repository browser.