Skip to content

Commit a10513d

Browse files
author
Alexander Ryzhikov
committed
Sync loader in separate file
1 parent eb06746 commit a10513d

File tree

9 files changed

+262
-210
lines changed

9 files changed

+262
-210
lines changed

lib/index.js

Lines changed: 14 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -4,111 +4,7 @@ Object.defineProperty(exports, "__esModule", {
44
value: true
55
});
66

7-
var _stringify = require('babel-runtime/core-js/json/stringify');
8-
9-
var _stringify2 = _interopRequireDefault(_stringify);
10-
11-
var _keys = require('babel-runtime/core-js/object/keys');
12-
13-
var _keys2 = _interopRequireDefault(_keys);
14-
15-
var _postcss = require('postcss');
16-
17-
var _postcss2 = _interopRequireDefault(_postcss);
18-
19-
var _postcssJs = require('postcss-js');
20-
21-
var _postcssJs2 = _interopRequireDefault(_postcssJs);
22-
23-
var _postcssCssnext = require('postcss-cssnext');
24-
25-
var _postcssCssnext2 = _interopRequireDefault(_postcssCssnext);
26-
27-
var _postcssImport = require('postcss-import');
28-
29-
var _postcssImport2 = _interopRequireDefault(_postcssImport);
30-
31-
var _compose = require('lodash/fp/compose');
32-
33-
var _compose2 = _interopRequireDefault(_compose);
34-
35-
var _get = require('lodash/fp/get');
36-
37-
var _get2 = _interopRequireDefault(_get);
38-
39-
var _cond = require('lodash/fp/cond');
40-
41-
var _cond2 = _interopRequireDefault(_cond);
42-
43-
var _lowerFirst = require('lodash/lowerFirst');
44-
45-
var _lowerFirst2 = _interopRequireDefault(_lowerFirst);
46-
47-
var _loaderUtils = require('loader-utils');
48-
49-
var _loaderUtils2 = _interopRequireDefault(_loaderUtils);
50-
51-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
52-
53-
var isDev = function isDev() {
54-
return process.env.NODE_ENV === 'development';
55-
};
56-
var isProd = function isProd() {
57-
return !isDev();
58-
};
59-
60-
var transform = function transform(data) {
61-
if (!data) {
62-
return {};
63-
}
64-
return (0, _keys2.default)(data).reduce(function (acc, k) {
65-
var v = data[k];
66-
67-
k = k.replace(/^-+/, ''); // strips '-'
68-
k = (0, _lowerFirst2.default)(k);
69-
acc[k] = v.endsWith('px') ? parseInt(v, 10) : v;
70-
return acc;
71-
}, {});
72-
};
73-
74-
var toProdExport = function toProdExport(code) {
75-
return 'export default ' + code;
76-
};
77-
var toDevExport = function toDevExport(code) {
78-
return 'let config = ' + code + ';\nif (typeof global.Proxy !== \'undefined\') {\n config = new Proxy(config, {\n get(target, key) {\n if (key !== \'__esModule\' && !target[key]) {\n console.error(`No variable found, check variable key: ["${key.toString()}"]`);\n }\n \n return target[key];\n },\n \n set(target, key) {\n throw new Error(\'Config variables are immutable \' + key);\n }\n });\n}\nexport default config';
79-
};
80-
var toES5Export = function toES5Export(code) {
81-
return 'module.exports = ' + code;
82-
};
83-
84-
var toExport = (0, _cond2.default)([[isDev, toDevExport], [isProd, toProdExport]]);
85-
86-
var toString = function toString(data) {
87-
return '' + (0, _stringify2.default)(data, null, '\t');
88-
};
89-
var toData = (0, _compose2.default)(transform, (0, _get2.default)(':root'));
90-
var toConfig = (0, _compose2.default)(toExport, toString, toData);
91-
var toES5Config = (0, _compose2.default)(toES5Export, toString, toData);
92-
93-
var getPostcss = function getPostcss(async) {
94-
return (0, _postcss2.default)().use((0, _postcssImport2.default)({ async: async })).use((0, _postcssCssnext2.default)({
95-
features: {
96-
customProperties: { preserve: 'computed' }
97-
}
98-
}));
99-
};
100-
101-
var objectify = function objectify(root, filepath) {
102-
// removes imported rules, so we have only computed output
103-
root.walkRules(function (r) {
104-
if (r.source.input.file !== filepath) {
105-
r.remove();
106-
}
107-
});
108-
return _postcssJs2.default.objectify(root);
109-
};
110-
111-
var loader = function loader(source) {
7+
exports.default = function (source) {
1128
var _this = this;
1139

11410
if (this.cacheable) {
@@ -118,7 +14,8 @@ var loader = function loader(source) {
11814
var options = _loaderUtils2.default.parseQuery(this.query);
11915
var _done = this.async();
12016

121-
var transformToConfig = options.es5 ? toES5Config : toConfig;
17+
var transformToConfig = options.es5 ? utils.toES5Config : utils.toConfig;
18+
12219
var end = function end(err) {
12320
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
12421
var map = arguments[2];
@@ -145,21 +42,21 @@ var loader = function loader(source) {
14542
}
14643
};
14744

148-
getPostcss(true).process(source, {
149-
from: this.resourcePath
150-
}).then(emitWarnings).then(function (result) {
151-
return end(null, objectify(result.root, _this.resourcePath), result.map);
45+
utils.getPostcss(true).process(source, { from: this.resourcePath }).then(emitWarnings).then(function (result) {
46+
return end(null, utils.objectify(result.root, _this.resourcePath), result.map);
15247
}).catch(onError);
15348
};
15449

155-
loader.sync = function sync(source, filepath) {
156-
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
50+
var _loaderUtils = require('loader-utils');
15751

158-
var transformToConfig = options.es5 ? toES5Config : toConfig;
159-
var root = getPostcss(false).process(source, { from: filepath }).root;
52+
var _loaderUtils2 = _interopRequireDefault(_loaderUtils);
16053

161-
return transformToConfig(objectify(root, filepath));
162-
};
54+
var _utils = require('./utils');
55+
56+
var utils = _interopRequireWildcard(_utils);
57+
58+
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
59+
60+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16361

164-
exports.default = loader;
16562
module.exports = exports['default'];

lib/sync.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
'use strict';
2+
3+
Object.defineProperty(exports, "__esModule", {
4+
value: true
5+
});
6+
exports.default = sync;
7+
8+
var _utils = require('./utils');
9+
10+
var utils = _interopRequireWildcard(_utils);
11+
12+
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
13+
14+
function sync(source, filepath) {
15+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
16+
17+
var transformToConfig = options.es5 ? utils.toES5Config : utils.toConfig;
18+
var root = utils.getPostcss(false).process(source, { from: filepath }).root;
19+
20+
return transformToConfig(utils.objectify(root, filepath));
21+
}
22+
module.exports = exports['default'];

lib/utils.js

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
'use strict';
2+
3+
Object.defineProperty(exports, "__esModule", {
4+
value: true
5+
});
6+
exports.getPostcss = exports.objectify = exports.toES5Config = exports.toConfig = undefined;
7+
8+
var _stringify = require('babel-runtime/core-js/json/stringify');
9+
10+
var _stringify2 = _interopRequireDefault(_stringify);
11+
12+
var _keys = require('babel-runtime/core-js/object/keys');
13+
14+
var _keys2 = _interopRequireDefault(_keys);
15+
16+
var _postcssJs = require('postcss-js');
17+
18+
var _postcssJs2 = _interopRequireDefault(_postcssJs);
19+
20+
var _compose = require('lodash/fp/compose');
21+
22+
var _compose2 = _interopRequireDefault(_compose);
23+
24+
var _get = require('lodash/fp/get');
25+
26+
var _get2 = _interopRequireDefault(_get);
27+
28+
var _cond = require('lodash/fp/cond');
29+
30+
var _cond2 = _interopRequireDefault(_cond);
31+
32+
var _lowerFirst = require('lodash/lowerFirst');
33+
34+
var _lowerFirst2 = _interopRequireDefault(_lowerFirst);
35+
36+
var _postcss = require('postcss');
37+
38+
var _postcss2 = _interopRequireDefault(_postcss);
39+
40+
var _postcssCssnext = require('postcss-cssnext');
41+
42+
var _postcssCssnext2 = _interopRequireDefault(_postcssCssnext);
43+
44+
var _postcssImport = require('postcss-import');
45+
46+
var _postcssImport2 = _interopRequireDefault(_postcssImport);
47+
48+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
49+
50+
var isDev = function isDev() {
51+
return process.env.NODE_ENV === 'development';
52+
};
53+
var isProd = function isProd() {
54+
return !isDev();
55+
};
56+
57+
var transform = function transform(data) {
58+
if (!data) {
59+
return {};
60+
}
61+
return (0, _keys2.default)(data).reduce(function (acc, k) {
62+
var v = data[k];
63+
64+
k = k.replace(/^-+/, ''); // strips '-'
65+
k = (0, _lowerFirst2.default)(k);
66+
acc[k] = v.endsWith('px') ? parseInt(v, 10) : v;
67+
return acc;
68+
}, {});
69+
};
70+
71+
var toProdExport = function toProdExport(code) {
72+
return 'export default ' + code;
73+
};
74+
var toDevExport = function toDevExport(code) {
75+
return 'let config = ' + code + ';\nif (typeof global.Proxy !== \'undefined\') {\n config = new Proxy(config, {\n get(target, key) {\n if (key !== \'__esModule\' && !target[key]) {\n console.error(`No variable found, check variable key: ["${key.toString()}"]`);\n }\n \n return target[key];\n },\n \n set(target, key) {\n throw new Error(\'Config variables are immutable \' + key);\n }\n });\n}\nexport default config';
76+
};
77+
var toES5Export = function toES5Export(code) {
78+
return 'module.exports = ' + code;
79+
};
80+
81+
var toExport = (0, _cond2.default)([[isDev, toDevExport], [isProd, toProdExport]]);
82+
83+
var toString = function toString(data) {
84+
return '' + (0, _stringify2.default)(data, null, '\t');
85+
};
86+
var toData = (0, _compose2.default)(transform, (0, _get2.default)(':root'));
87+
88+
var toConfig = exports.toConfig = (0, _compose2.default)(toExport, toString, toData);
89+
var toES5Config = exports.toES5Config = (0, _compose2.default)(toES5Export, toString, toData);
90+
91+
var objectify = exports.objectify = function objectify(root, filepath) {
92+
// removes imported rules, so we have only computed output
93+
root.walkRules(function (r) {
94+
if (r.source.input.file !== filepath) {
95+
r.remove();
96+
}
97+
});
98+
return _postcssJs2.default.objectify(root);
99+
};
100+
101+
var getPostcss = exports.getPostcss = function getPostcss(async) {
102+
return (0, _postcss2.default)().use((0, _postcssImport2.default)({ async: async })).use((0, _postcssCssnext2.default)({ features: { customProperties: { preserve: 'computed' } } }));
103+
};

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@
2828
"lint": "eslint src test",
2929
"test": "ava --require babel-core/register -T 7s test/index.js",
3030
"validate": "npm run lint && npm test",
31-
"prepare": "npm run build && npm run validate && npm run check",
32-
"preversion": "npm run prepare"
31+
"prepare": "npm run build && npm run validate && npm run check"
3332
},
3433
"author": {
3534
"name": "Alexander Ryzhikov",

0 commit comments

Comments
 (0)