diff --git a/Makefile b/Makefile deleted file mode 100644 index 451999c..0000000 --- a/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -BABEL_CMD=./node_modules/.bin/babel -MOCHA_CMD=./node_modules/.bin/mocha - -SRC_JS = $(shell find src -name "*.js") -LIB_JS = $(patsubst src/%.js,lib/%.js,$(SRC_JS)) - -build: js - -test: build - $(MOCHA_CMD) lib/**/__tests__/*-test.js --require ./lib/test-init.js - -js: $(LIB_JS) lib/bin/json-sass - -$(LIB_JS): lib/%.js: src/%.js - mkdir -p $(dir $@) && $(BABEL_CMD) $< -o $@ --experimental - -lib/bin/json-sass: - mkdir -p $(dir $@) && $(BABEL_CMD) src/bin/json-sass -o $@ --experimental - -clean: - rm -rf lib/ - -.PHONY: build test js clean diff --git a/README.md b/README.md index 32a6465..9bbcdbb 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Example source file `theme.json`: "array": [1, 2, 3], "object": { "foo": "bar" - } + }, "null": null } diff --git a/src/bin/json-sass b/bin/json-sass similarity index 86% rename from src/bin/json-sass rename to bin/json-sass index 3e9dedd..0963347 100755 --- a/src/bin/json-sass +++ b/bin/json-sass @@ -6,17 +6,17 @@ let jsonSass = require('../jsonSass'); let fs = require('fs'); let path = require('path'); let minimist = require('minimist'); -import { Readable } from 'stream'; +let Readable = require('stream').Readable; let argv = minimist(process.argv.slice(2), { - alias: { - i: 'infile', - o: 'outfile', - h: 'help', - p: 'prefix', - s: 'suffix', - }, - default: { i: '-', o: '-' } + alias: { + i: 'infile', + o: 'outfile', + h: 'help', + p: 'prefix', + s: 'suffix', + }, + default: { i: '-', o: '-' } }); if (argv.help) return showHelp(0); diff --git a/package.json b/package.json index a2bc62f..f004997 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,14 @@ { "name": "json-sass", "version": "1.3.5", - "description": "Transform JSON into scss syntax Sass.", + "description": "Transform JSON into SCSS variable syntax.", "main": "lib/jsonSass.js", - "bin": "lib/bin/json-sass", + "bin": "bin/json-sass", "scripts": { - "test": "make test", - "prepublish": "npm test" + "build": "rm -rf lib && babel ./src -d ./lib", + "pretest": "npm run build", + "test": "mocha --require ./lib/test-init.js lib/**/__tests__/*-test.js", + "prepublish": "in-install || npm test" }, "keywords": [ "sass", @@ -14,8 +16,20 @@ ], "author": "Andrew Clark ", "license": "ISC", + "contributors": [ + "Charlie Robbins " + ], + "repository": { + "type": "git", + "url": "https://github.com/acdlite/json-sass.git" + }, + "babel": { + "presets": [ + "babel-preset-es2015" + ] + }, "dependencies": { - "babel": "~4.1.0", + "in-publish": "^2.0.0", "lodash": "~2.4.1", "lodash-node": "~2.4.1", "minimist": "~1.1.0", @@ -23,6 +37,9 @@ "through2": "~0.6.3" }, "devDependencies": { + "babel-cli": "^6.24.1", + "babel-polyfill": "^6.23.0", + "babel-preset-es2015": "^6.24.1", "chai": "~1.9.2", "mocha": "~2.0.1" } diff --git a/src/__tests__/jsToSassString-test.js b/src/__tests__/jsToSassString-test.js index 25331a5..d115f29 100644 --- a/src/__tests__/jsToSassString-test.js +++ b/src/__tests__/jsToSassString-test.js @@ -13,7 +13,7 @@ var foo = new Foo(); describe('JS to Sass', function() { it('should handle strings', function() { - expect(jsToSassString('foo')).to.equal('foo'); + expect(jsToSassString('foo')).to.equal('"foo"'); }); it('should handle booleans', function() { @@ -49,6 +49,6 @@ describe('JS to Sass', function() { }, }; - expect(jsToSassString(obj)).to.equal('(\n foo: bar,\n bar: (\n baz: foo\n )\n)') + expect(jsToSassString(obj)).to.equal('(\n foo: "bar",\n bar: (\n baz: "foo"\n )\n)') }) }); diff --git a/src/jsToSassString.js b/src/jsToSassString.js index a6553e9..a03be72 100644 --- a/src/jsToSassString.js +++ b/src/jsToSassString.js @@ -13,7 +13,7 @@ function jsToSassString(value) { case 'number': return value.toString(); case 'string': - return value; + return quoteString(value); case 'object': if (isPlainObject(value)) { indentLevel += 1; @@ -39,10 +39,11 @@ function jsToSassString(value) { return result; } else if (isArray(value)) { - let sassVals = [ - for (v of value) if (isNotUndefined(v)) - _jsToSassString(v, indentLevel) - ]; + const sassVals = value.map(v => { + if (isNotUndefined(v)) { + return _jsToSassString(v, indentLevel) + } + }).filter(Boolean); return '(' + sassVals.join(', ') + ')'; } @@ -68,4 +69,11 @@ function isNotUndefined(value) { return typeof value !== 'undefined'; } +function quoteString(value) { + if (value.substring(0,1) === '#') { + return value; + } + return "\"" + value + "\""; +} + export default jsToSassString; diff --git a/src/jsonSass.js b/src/jsonSass.js index 77e958d..6ec1c0c 100644 --- a/src/jsonSass.js +++ b/src/jsonSass.js @@ -9,11 +9,17 @@ let DEFAULTS = { suffix: ';', }; -function jsonSass(options) { - let options = assign({}, DEFAULTS, options); +function jsonSass(opts) { + const options = assign({}, DEFAULTS, opts); return through(function(chunk, enc, callback) { - let jsValue = JSON.parse(chunk); + let jsValue; + try { + jsValue = JSON.parse(chunk); + } + catch (err) { + return callback(err); + } let sassString = jsToSassString(jsValue); sassString = options.prefix + sassString + options.suffix; this.push(sassString); @@ -21,6 +27,11 @@ function jsonSass(options) { }); } +// +// Cover all require use cases. +// +jsonSass.convertJs = jsToSassString; module.exports = jsonSass; + export default jsonSass; export { jsToSassString as convertJs }; diff --git a/src/test-init.js b/src/test-init.js index 399332b..00ff120 100644 --- a/src/test-init.js +++ b/src/test-init.js @@ -1,4 +1,3 @@ -import 'babel/polyfill'; +require('babel-polyfill'); -import { expect } from 'chai'; -global.expect = expect; +global.expect = require('chai').expect;