Skip to content

Commit

Permalink
feat(parse): replace scss-extract with gonzales-pe
Browse files Browse the repository at this point in the history
fixes #18
  • Loading branch information
phlmn committed Oct 13, 2017
1 parent dc20a54 commit b1f26b5
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 10 deletions.
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,10 @@
},
"dependencies": {
"bluebird": "^3.4.7",
"gonzales-pe": "^4.2.2",
"node-sass": "^4.5.3",
"parse-color": "^1.0.0",
"query-ast": "^1.0.1",
"scss-parser": "^1.0.0"
"query-ast": "^1.0.1"
},
"devDependencies": {
"babel-cli": "^6.22.2",
Expand Down
30 changes: 22 additions & 8 deletions src/parse.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { parse, stringify } from 'scss-parser';
import { stringify } from 'scss-parser';
import createQueryWrapper from 'query-ast';
import gonzales from 'gonzales-pe';

const SCOPE_IMPICIT = 'implicit';
const SCOPE_EXPLICIT = 'explicit';
Expand Down Expand Up @@ -39,7 +40,7 @@ function isDefaultDeclaration($ast, node) {
*/
function parseExpression($ast, declaration) {
let flagsReached = false;

return stringify($ast(declaration)
.children('value')
.get(0))
Expand Down Expand Up @@ -75,7 +76,7 @@ function getDeclarationDeps($ast, declaration, scope) {
const requiredArgsCount = argumentsNode.children('variable').length();
const optionalArgsCount = argumentsNode.children('declaration').length();
const totalArgsCount = requiredArgsCount + optionalArgsCount;

if(!DEP_KEYWORDS[atKeyword]) {
return {};
}
Expand All @@ -89,15 +90,15 @@ function getDeclarationDeps($ast, declaration, scope) {
optional: optionalArgsCount,
},
},
};
};
}

/**
* Parse declaration node into declaration object
*/
function parseDeclaration($ast, declaration, scope) {
const variable = {};

const propertyNode = $ast(declaration)
.children('property');

Expand All @@ -121,15 +122,28 @@ function parseDeclaration($ast, declaration, scope) {
* Parse variable declarations from a chunk of sass source
*/
export function parseDeclarations(data) {
const ast = parse(data);
const $ast = createQueryWrapper(ast);
const ast = JSON.parse(gonzales.parse(data, {syntax: 'scss'}).toJson());

let options = {
hasChildren: (node) => Array.isArray(node.content),
getChildren: (node) => node.content,
toJSON: (node, children) => {
return Object.assign({}, node, {
content: children ? children : node.content
})
},
toString: (node) => {
return typeof node.content === 'string' ? node.content : ''
}
}
const $ast = createQueryWrapper(ast, options);

const implicitGlobalDeclarations = $ast('declaration').hasParent('stylesheet');
const explicitGlobalDeclarations = $ast('declaration').hasParent('block')
.filter(node => isExplicitGlobalDeclaration($ast, node));

let implicitGlobals = implicitGlobalDeclarations.map(declaration => parseDeclaration($ast, declaration, SCOPE_IMPICIT));
let explicitGlobals = explicitGlobalDeclarations.map(declaration => parseDeclaration($ast, declaration, SCOPE_EXPLICIT));
let explicitGlobals = explicitGlobalDeclarations.map(declaration => parseDeclaration($ast, declaration, SCOPE_EXPLICIT));

return { explicitGlobals, implicitGlobals };
}

0 comments on commit b1f26b5

Please sign in to comment.