Skip to content

Commit c5b9a01

Browse files
author
Alexander Ryzhikov
committed
adds npm files :oops:
1 parent a95132f commit c5b9a01

File tree

1 file changed

+162
-0
lines changed

1 file changed

+162
-0
lines changed

lib/index.js

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
'use strict';
2+
3+
Object.defineProperty(exports, "__esModule", {
4+
value: true
5+
});
6+
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) {
112+
var _this = this;
113+
114+
if (this.cacheable) {
115+
this.cacheable();
116+
}
117+
118+
var options = _loaderUtils2.default.parseQuery(this.query);
119+
var _done = this.async();
120+
121+
var transformToConfig = options.es5 ? toES5Config : toConfig;
122+
var end = function end(err) {
123+
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
124+
var map = arguments[2];
125+
126+
if (err) {
127+
_done(err);
128+
}
129+
return _done(null, transformToConfig(data), map);
130+
};
131+
132+
var emitWarnings = function emitWarnings(result) {
133+
return result;
134+
};
135+
136+
var onError = function onError(error) {
137+
if (error.name === 'CssSyntaxError') {
138+
_this.emitError(error.message + error.showSourceCode());
139+
end();
140+
} else {
141+
end(error);
142+
}
143+
};
144+
145+
getPostcss(true).process(source, {
146+
from: this.resourcePath
147+
}).then(emitWarnings).then(function (result) {
148+
return end(null, objectify(result.root, _this.resourcePath), result.map);
149+
}).catch(onError);
150+
};
151+
152+
loader.sync = function sync(source, filepath) {
153+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
154+
155+
var transformToConfig = options.es5 ? toES5Config : toConfig;
156+
var root = getPostcss(false).process(source, { from: filepath }).root;
157+
158+
return transformToConfig(objectify(root, filepath));
159+
};
160+
161+
exports.default = loader;
162+
module.exports = exports['default'];

0 commit comments

Comments
 (0)