You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
767 lines
22 KiB
767 lines
22 KiB
'use strict'; |
|
|
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } |
|
|
|
var postcss = _interopDefault(require('postcss')); |
|
var fs = _interopDefault(require('fs')); |
|
var path = _interopDefault(require('path')); |
|
|
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { |
|
try { |
|
var info = gen[key](arg); |
|
var value = info.value; |
|
} catch (error) { |
|
reject(error); |
|
return; |
|
} |
|
|
|
if (info.done) { |
|
resolve(value); |
|
} else { |
|
Promise.resolve(value).then(_next, _throw); |
|
} |
|
} |
|
|
|
function _asyncToGenerator(fn) { |
|
return function () { |
|
var self = this, |
|
args = arguments; |
|
return new Promise(function (resolve, reject) { |
|
var gen = fn.apply(self, args); |
|
|
|
function _next(value) { |
|
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); |
|
} |
|
|
|
function _throw(err) { |
|
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); |
|
} |
|
|
|
_next(undefined); |
|
}); |
|
}; |
|
} |
|
|
|
function _defineProperty(obj, key, value) { |
|
if (key in obj) { |
|
Object.defineProperty(obj, key, { |
|
value: value, |
|
enumerable: true, |
|
configurable: true, |
|
writable: true |
|
}); |
|
} else { |
|
obj[key] = value; |
|
} |
|
|
|
return obj; |
|
} |
|
|
|
function _objectSpread(target) { |
|
for (var i = 1; i < arguments.length; i++) { |
|
var source = arguments[i] != null ? arguments[i] : {}; |
|
var ownKeys = Object.keys(source); |
|
|
|
if (typeof Object.getOwnPropertySymbols === 'function') { |
|
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { |
|
return Object.getOwnPropertyDescriptor(source, sym).enumerable; |
|
})); |
|
} |
|
|
|
ownKeys.forEach(function (key) { |
|
_defineProperty(target, key, source[key]); |
|
}); |
|
} |
|
|
|
return target; |
|
} |
|
|
|
function _slicedToArray(arr, i) { |
|
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); |
|
} |
|
|
|
function _arrayWithHoles(arr) { |
|
if (Array.isArray(arr)) return arr; |
|
} |
|
|
|
function _iterableToArrayLimit(arr, i) { |
|
var _arr = []; |
|
var _n = true; |
|
var _d = false; |
|
var _e = undefined; |
|
|
|
try { |
|
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { |
|
_arr.push(_s.value); |
|
|
|
if (i && _arr.length === i) break; |
|
} |
|
} catch (err) { |
|
_d = true; |
|
_e = err; |
|
} finally { |
|
try { |
|
if (!_n && _i["return"] != null) _i["return"](); |
|
} finally { |
|
if (_d) throw _e; |
|
} |
|
} |
|
|
|
return _arr; |
|
} |
|
|
|
function _nonIterableRest() { |
|
throw new TypeError("Invalid attempt to destructure non-iterable instance"); |
|
} |
|
|
|
function parse(string, splitByAnd) { |
|
const array = []; |
|
let buffer = ''; |
|
let split = false; |
|
let func = 0; |
|
let i = -1; |
|
|
|
while (++i < string.length) { |
|
const char = string[i]; |
|
|
|
if (char === '(') { |
|
func += 1; |
|
} else if (char === ')') { |
|
if (func > 0) { |
|
func -= 1; |
|
} |
|
} else if (func === 0) { |
|
if (splitByAnd && andRegExp.test(buffer + char)) { |
|
split = true; |
|
} else if (!splitByAnd && char === ',') { |
|
split = true; |
|
} |
|
} |
|
|
|
if (split) { |
|
array.push(splitByAnd ? new MediaExpression(buffer + char) : new MediaQuery(buffer)); |
|
buffer = ''; |
|
split = false; |
|
} else { |
|
buffer += char; |
|
} |
|
} |
|
|
|
if (buffer !== '') { |
|
array.push(splitByAnd ? new MediaExpression(buffer) : new MediaQuery(buffer)); |
|
} |
|
|
|
return array; |
|
} |
|
|
|
class MediaQueryList { |
|
constructor(string) { |
|
this.nodes = parse(string); |
|
} |
|
|
|
invert() { |
|
this.nodes.forEach(node => { |
|
node.invert(); |
|
}); |
|
return this; |
|
} |
|
|
|
clone() { |
|
return new MediaQueryList(String(this)); |
|
} |
|
|
|
toString() { |
|
return this.nodes.join(','); |
|
} |
|
|
|
} |
|
|
|
class MediaQuery { |
|
constructor(string) { |
|
const _string$match = string.match(spaceWrapRegExp), |
|
_string$match2 = _slicedToArray(_string$match, 4), |
|
before = _string$match2[1], |
|
media = _string$match2[2], |
|
after = _string$match2[3]; |
|
|
|
const _ref = media.match(mediaRegExp) || [], |
|
_ref2 = _slicedToArray(_ref, 9), |
|
_ref2$ = _ref2[1], |
|
modifier = _ref2$ === void 0 ? '' : _ref2$, |
|
_ref2$2 = _ref2[2], |
|
afterModifier = _ref2$2 === void 0 ? ' ' : _ref2$2, |
|
_ref2$3 = _ref2[3], |
|
type = _ref2$3 === void 0 ? '' : _ref2$3, |
|
_ref2$4 = _ref2[4], |
|
beforeAnd = _ref2$4 === void 0 ? '' : _ref2$4, |
|
_ref2$5 = _ref2[5], |
|
and = _ref2$5 === void 0 ? '' : _ref2$5, |
|
_ref2$6 = _ref2[6], |
|
beforeExpression = _ref2$6 === void 0 ? '' : _ref2$6, |
|
_ref2$7 = _ref2[7], |
|
expression1 = _ref2$7 === void 0 ? '' : _ref2$7, |
|
_ref2$8 = _ref2[8], |
|
expression2 = _ref2$8 === void 0 ? '' : _ref2$8; |
|
|
|
const raws = { |
|
before, |
|
after, |
|
afterModifier, |
|
originalModifier: modifier || '', |
|
beforeAnd, |
|
and, |
|
beforeExpression |
|
}; |
|
const nodes = parse(expression1 || expression2, true); |
|
Object.assign(this, { |
|
modifier, |
|
type, |
|
raws, |
|
nodes |
|
}); |
|
} |
|
|
|
clone(overrides) { |
|
const instance = new MediaQuery(String(this)); |
|
Object.assign(instance, overrides); |
|
return instance; |
|
} |
|
|
|
invert() { |
|
this.modifier = this.modifier ? '' : this.raws.originalModifier; |
|
return this; |
|
} |
|
|
|
toString() { |
|
const raws = this.raws; |
|
return `${raws.before}${this.modifier}${this.modifier ? `${raws.afterModifier}` : ''}${this.type}${raws.beforeAnd}${raws.and}${raws.beforeExpression}${this.nodes.join('')}${this.raws.after}`; |
|
} |
|
|
|
} |
|
|
|
class MediaExpression { |
|
constructor(string) { |
|
const _ref3 = string.match(andRegExp) || [null, string], |
|
_ref4 = _slicedToArray(_ref3, 5), |
|
value = _ref4[1], |
|
_ref4$ = _ref4[2], |
|
after = _ref4$ === void 0 ? '' : _ref4$, |
|
_ref4$2 = _ref4[3], |
|
and = _ref4$2 === void 0 ? '' : _ref4$2, |
|
_ref4$3 = _ref4[4], |
|
afterAnd = _ref4$3 === void 0 ? '' : _ref4$3; |
|
|
|
const raws = { |
|
after, |
|
and, |
|
afterAnd |
|
}; |
|
Object.assign(this, { |
|
value, |
|
raws |
|
}); |
|
} |
|
|
|
clone(overrides) { |
|
const instance = new MediaExpression(String(this)); |
|
Object.assign(instance, overrides); |
|
return instance; |
|
} |
|
|
|
toString() { |
|
const raws = this.raws; |
|
return `${this.value}${raws.after}${raws.and}${raws.afterAnd}`; |
|
} |
|
|
|
} |
|
|
|
const modifierRE = '(not|only)'; |
|
const typeRE = '(all|print|screen|speech)'; |
|
const noExpressionRE = '([\\W\\w]*)'; |
|
const expressionRE = '([\\W\\w]+)'; |
|
const noSpaceRE = '(\\s*)'; |
|
const spaceRE = '(\\s+)'; |
|
const andRE = '(?:(\\s+)(and))'; |
|
const andRegExp = new RegExp(`^${expressionRE}(?:${andRE}${spaceRE})$`, 'i'); |
|
const spaceWrapRegExp = new RegExp(`^${noSpaceRE}${noExpressionRE}${noSpaceRE}$`); |
|
const mediaRegExp = new RegExp(`^(?:${modifierRE}${spaceRE})?(?:${typeRE}(?:${andRE}${spaceRE}${expressionRE})?|${expressionRE})$`, 'i'); |
|
var mediaASTFromString = (string => new MediaQueryList(string)); |
|
|
|
var getCustomMediaFromRoot = ((root, opts) => { |
|
// initialize custom selectors |
|
const customMedias = {}; // for each custom selector atrule that is a child of the css root |
|
|
|
root.nodes.slice().forEach(node => { |
|
if (isCustomMedia(node)) { |
|
// extract the name and selectors from the params of the custom selector |
|
const _node$params$match = node.params.match(customMediaParamsRegExp), |
|
_node$params$match2 = _slicedToArray(_node$params$match, 3), |
|
name = _node$params$match2[1], |
|
selectors = _node$params$match2[2]; // write the parsed selectors to the custom selector |
|
|
|
|
|
customMedias[name] = mediaASTFromString(selectors); // conditionally remove the custom selector atrule |
|
|
|
if (!Object(opts).preserve) { |
|
node.remove(); |
|
} |
|
} |
|
}); |
|
return customMedias; |
|
}); // match the custom selector name |
|
|
|
const customMediaNameRegExp = /^custom-media$/i; // match the custom selector params |
|
|
|
const customMediaParamsRegExp = /^(--[A-z][\w-]*)\s+([\W\w]+)\s*$/; // whether the atrule is a custom selector |
|
|
|
const isCustomMedia = node => node.type === 'atrule' && customMediaNameRegExp.test(node.name) && customMediaParamsRegExp.test(node.params); |
|
|
|
/* Get Custom Media from CSS File |
|
/* ========================================================================== */ |
|
|
|
function getCustomMediaFromCSSFile(_x) { |
|
return _getCustomMediaFromCSSFile.apply(this, arguments); |
|
} |
|
/* Get Custom Media from Object |
|
/* ========================================================================== */ |
|
|
|
|
|
function _getCustomMediaFromCSSFile() { |
|
_getCustomMediaFromCSSFile = _asyncToGenerator(function* (from) { |
|
const css = yield readFile(from); |
|
const root = postcss.parse(css, { |
|
from |
|
}); |
|
return getCustomMediaFromRoot(root, { |
|
preserve: true |
|
}); |
|
}); |
|
return _getCustomMediaFromCSSFile.apply(this, arguments); |
|
} |
|
|
|
function getCustomMediaFromObject(object) { |
|
const customMedia = Object.assign({}, Object(object).customMedia, Object(object)['custom-media']); |
|
|
|
for (const key in customMedia) { |
|
customMedia[key] = mediaASTFromString(customMedia[key]); |
|
} |
|
|
|
return customMedia; |
|
} |
|
/* Get Custom Media from JSON file |
|
/* ========================================================================== */ |
|
|
|
|
|
function getCustomMediaFromJSONFile(_x2) { |
|
return _getCustomMediaFromJSONFile.apply(this, arguments); |
|
} |
|
/* Get Custom Media from JS file |
|
/* ========================================================================== */ |
|
|
|
|
|
function _getCustomMediaFromJSONFile() { |
|
_getCustomMediaFromJSONFile = _asyncToGenerator(function* (from) { |
|
const object = yield readJSON(from); |
|
return getCustomMediaFromObject(object); |
|
}); |
|
return _getCustomMediaFromJSONFile.apply(this, arguments); |
|
} |
|
|
|
function getCustomMediaFromJSFile(_x3) { |
|
return _getCustomMediaFromJSFile.apply(this, arguments); |
|
} |
|
/* Get Custom Media from Sources |
|
/* ========================================================================== */ |
|
|
|
|
|
function _getCustomMediaFromJSFile() { |
|
_getCustomMediaFromJSFile = _asyncToGenerator(function* (from) { |
|
const object = yield Promise.resolve(require(from)); |
|
return getCustomMediaFromObject(object); |
|
}); |
|
return _getCustomMediaFromJSFile.apply(this, arguments); |
|
} |
|
|
|
function getCustomMediaFromSources(sources) { |
|
return sources.map(source => { |
|
if (source instanceof Promise) { |
|
return source; |
|
} else if (source instanceof Function) { |
|
return source(); |
|
} // read the source as an object |
|
|
|
|
|
const opts = source === Object(source) ? source : { |
|
from: String(source) |
|
}; // skip objects with custom media |
|
|
|
if (Object(opts).customMedia || Object(opts)['custom-media']) { |
|
return opts; |
|
} // source pathname |
|
|
|
|
|
const from = path.resolve(String(opts.from || '')); // type of file being read from |
|
|
|
const type = (opts.type || path.extname(from).slice(1)).toLowerCase(); |
|
return { |
|
type, |
|
from |
|
}; |
|
}).reduce( |
|
/*#__PURE__*/ |
|
function () { |
|
var _ref = _asyncToGenerator(function* (customMedia, source) { |
|
const _ref2 = yield source, |
|
type = _ref2.type, |
|
from = _ref2.from; |
|
|
|
if (type === 'css' || type === 'pcss') { |
|
return Object.assign((yield customMedia), (yield getCustomMediaFromCSSFile(from))); |
|
} |
|
|
|
if (type === 'js') { |
|
return Object.assign((yield customMedia), (yield getCustomMediaFromJSFile(from))); |
|
} |
|
|
|
if (type === 'json') { |
|
return Object.assign((yield customMedia), (yield getCustomMediaFromJSONFile(from))); |
|
} |
|
|
|
return Object.assign((yield customMedia), getCustomMediaFromObject((yield source))); |
|
}); |
|
|
|
return function (_x4, _x5) { |
|
return _ref.apply(this, arguments); |
|
}; |
|
}(), {}); |
|
} |
|
/* Helper utilities |
|
/* ========================================================================== */ |
|
|
|
const readFile = from => new Promise((resolve, reject) => { |
|
fs.readFile(from, 'utf8', (error, result) => { |
|
if (error) { |
|
reject(error); |
|
} else { |
|
resolve(result); |
|
} |
|
}); |
|
}); |
|
|
|
const readJSON = |
|
/*#__PURE__*/ |
|
function () { |
|
var _ref3 = _asyncToGenerator(function* (from) { |
|
return JSON.parse((yield readFile(from))); |
|
}); |
|
|
|
return function readJSON(_x6) { |
|
return _ref3.apply(this, arguments); |
|
}; |
|
}(); |
|
|
|
// return transformed medias, replacing custom pseudo medias with custom medias |
|
function transformMediaList(mediaList, customMedias) { |
|
let index = mediaList.nodes.length - 1; |
|
|
|
while (index >= 0) { |
|
const transformedMedias = transformMedia(mediaList.nodes[index], customMedias); |
|
|
|
if (transformedMedias.length) { |
|
mediaList.nodes.splice(index, 1, ...transformedMedias); |
|
} |
|
|
|
--index; |
|
} |
|
|
|
return mediaList; |
|
} // return custom pseudo medias replaced with custom medias |
|
|
|
function transformMedia(media, customMedias) { |
|
const transpiledMedias = []; |
|
|
|
for (const index in media.nodes) { |
|
const _media$nodes$index = media.nodes[index], |
|
value = _media$nodes$index.value, |
|
nodes = _media$nodes$index.nodes; |
|
const key = value.replace(customPseudoRegExp, '$1'); |
|
|
|
if (key in customMedias) { |
|
var _iteratorNormalCompletion = true; |
|
var _didIteratorError = false; |
|
var _iteratorError = undefined; |
|
|
|
try { |
|
for (var _iterator = customMedias[key].nodes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { |
|
const replacementMedia = _step.value; |
|
// use the first available modifier unless they cancel each other out |
|
const modifier = media.modifier !== replacementMedia.modifier ? media.modifier || replacementMedia.modifier : ''; |
|
const mediaClone = media.clone({ |
|
modifier, |
|
// conditionally use the raws from the first available modifier |
|
raws: !modifier || media.modifier ? _objectSpread({}, media.raws) : _objectSpread({}, replacementMedia.raws), |
|
type: media.type || replacementMedia.type |
|
}); // conditionally include more replacement raws when the type is present |
|
|
|
if (mediaClone.type === replacementMedia.type) { |
|
Object.assign(mediaClone.raws, { |
|
and: replacementMedia.raws.and, |
|
beforeAnd: replacementMedia.raws.beforeAnd, |
|
beforeExpression: replacementMedia.raws.beforeExpression |
|
}); |
|
} |
|
|
|
mediaClone.nodes.splice(index, 1, ...replacementMedia.clone().nodes.map(node => { |
|
// use raws and spacing from the current usage |
|
if (media.nodes[index].raws.and) { |
|
node.raws = _objectSpread({}, media.nodes[index].raws); |
|
} |
|
|
|
node.spaces = _objectSpread({}, media.nodes[index].spaces); |
|
return node; |
|
})); // remove the currently transformed key to prevent recursion |
|
|
|
const nextCustomMedia = getCustomMediasWithoutKey(customMedias, key); |
|
const retranspiledMedias = transformMedia(mediaClone, nextCustomMedia); |
|
|
|
if (retranspiledMedias.length) { |
|
transpiledMedias.push(...retranspiledMedias); |
|
} else { |
|
transpiledMedias.push(mediaClone); |
|
} |
|
} |
|
} catch (err) { |
|
_didIteratorError = true; |
|
_iteratorError = err; |
|
} finally { |
|
try { |
|
if (!_iteratorNormalCompletion && _iterator.return != null) { |
|
_iterator.return(); |
|
} |
|
} finally { |
|
if (_didIteratorError) { |
|
throw _iteratorError; |
|
} |
|
} |
|
} |
|
|
|
return transpiledMedias; |
|
} else if (nodes && nodes.length) { |
|
transformMediaList(media.nodes[index], customMedias); |
|
} |
|
} |
|
|
|
return transpiledMedias; |
|
} |
|
|
|
const customPseudoRegExp = /\((--[A-z][\w-]*)\)/; |
|
|
|
const getCustomMediasWithoutKey = (customMedias, key) => { |
|
const nextCustomMedias = Object.assign({}, customMedias); |
|
delete nextCustomMedias[key]; |
|
return nextCustomMedias; |
|
}; |
|
|
|
var transformAtrules = ((root, customMedia, opts) => { |
|
root.walkAtRules(mediaAtRuleRegExp, atrule => { |
|
if (customPseudoRegExp$1.test(atrule.params)) { |
|
const mediaAST = mediaASTFromString(atrule.params); |
|
const params = String(transformMediaList(mediaAST, customMedia)); |
|
|
|
if (opts.preserve) { |
|
atrule.cloneBefore({ |
|
params |
|
}); |
|
} else { |
|
atrule.params = params; |
|
} |
|
} |
|
}); |
|
}); |
|
const mediaAtRuleRegExp = /^media$/i; |
|
const customPseudoRegExp$1 = /\(--[A-z][\w-]*\)/; |
|
|
|
/* Write Custom Media from CSS File |
|
/* ========================================================================== */ |
|
|
|
function writeCustomMediaToCssFile(_x, _x2) { |
|
return _writeCustomMediaToCssFile.apply(this, arguments); |
|
} |
|
/* Write Custom Media from JSON file |
|
/* ========================================================================== */ |
|
|
|
|
|
function _writeCustomMediaToCssFile() { |
|
_writeCustomMediaToCssFile = _asyncToGenerator(function* (to, customMedia) { |
|
const cssContent = Object.keys(customMedia).reduce((cssLines, name) => { |
|
cssLines.push(`@custom-media ${name} ${customMedia[name]};`); |
|
return cssLines; |
|
}, []).join('\n'); |
|
const css = `${cssContent}\n`; |
|
yield writeFile(to, css); |
|
}); |
|
return _writeCustomMediaToCssFile.apply(this, arguments); |
|
} |
|
|
|
function writeCustomMediaToJsonFile(_x3, _x4) { |
|
return _writeCustomMediaToJsonFile.apply(this, arguments); |
|
} |
|
/* Write Custom Media from Common JS file |
|
/* ========================================================================== */ |
|
|
|
|
|
function _writeCustomMediaToJsonFile() { |
|
_writeCustomMediaToJsonFile = _asyncToGenerator(function* (to, customMedia) { |
|
const jsonContent = JSON.stringify({ |
|
'custom-media': customMedia |
|
}, null, ' '); |
|
const json = `${jsonContent}\n`; |
|
yield writeFile(to, json); |
|
}); |
|
return _writeCustomMediaToJsonFile.apply(this, arguments); |
|
} |
|
|
|
function writeCustomMediaToCjsFile(_x5, _x6) { |
|
return _writeCustomMediaToCjsFile.apply(this, arguments); |
|
} |
|
/* Write Custom Media from Module JS file |
|
/* ========================================================================== */ |
|
|
|
|
|
function _writeCustomMediaToCjsFile() { |
|
_writeCustomMediaToCjsFile = _asyncToGenerator(function* (to, customMedia) { |
|
const jsContents = Object.keys(customMedia).reduce((jsLines, name) => { |
|
jsLines.push(`\t\t'${escapeForJS(name)}': '${escapeForJS(customMedia[name])}'`); |
|
return jsLines; |
|
}, []).join(',\n'); |
|
const js = `module.exports = {\n\tcustomMedia: {\n${jsContents}\n\t}\n};\n`; |
|
yield writeFile(to, js); |
|
}); |
|
return _writeCustomMediaToCjsFile.apply(this, arguments); |
|
} |
|
|
|
function writeCustomMediaToMjsFile(_x7, _x8) { |
|
return _writeCustomMediaToMjsFile.apply(this, arguments); |
|
} |
|
/* Write Custom Media to Exports |
|
/* ========================================================================== */ |
|
|
|
|
|
function _writeCustomMediaToMjsFile() { |
|
_writeCustomMediaToMjsFile = _asyncToGenerator(function* (to, customMedia) { |
|
const mjsContents = Object.keys(customMedia).reduce((mjsLines, name) => { |
|
mjsLines.push(`\t'${escapeForJS(name)}': '${escapeForJS(customMedia[name])}'`); |
|
return mjsLines; |
|
}, []).join(',\n'); |
|
const mjs = `export const customMedia = {\n${mjsContents}\n};\n`; |
|
yield writeFile(to, mjs); |
|
}); |
|
return _writeCustomMediaToMjsFile.apply(this, arguments); |
|
} |
|
|
|
function writeCustomMediaToExports(customMedia, destinations) { |
|
return Promise.all(destinations.map( |
|
/*#__PURE__*/ |
|
function () { |
|
var _ref = _asyncToGenerator(function* (destination) { |
|
if (destination instanceof Function) { |
|
yield destination(defaultCustomMediaToJSON(customMedia)); |
|
} else { |
|
// read the destination as an object |
|
const opts = destination === Object(destination) ? destination : { |
|
to: String(destination) |
|
}; // transformer for custom media into a JSON-compatible object |
|
|
|
const toJSON = opts.toJSON || defaultCustomMediaToJSON; |
|
|
|
if ('customMedia' in opts) { |
|
// write directly to an object as customMedia |
|
opts.customMedia = toJSON(customMedia); |
|
} else if ('custom-media' in opts) { |
|
// write directly to an object as custom-media |
|
opts['custom-media'] = toJSON(customMedia); |
|
} else { |
|
// destination pathname |
|
const to = String(opts.to || ''); // type of file being written to |
|
|
|
const type = (opts.type || path.extname(to).slice(1)).toLowerCase(); // transformed custom media |
|
|
|
const customMediaJSON = toJSON(customMedia); |
|
|
|
if (type === 'css') { |
|
yield writeCustomMediaToCssFile(to, customMediaJSON); |
|
} |
|
|
|
if (type === 'js') { |
|
yield writeCustomMediaToCjsFile(to, customMediaJSON); |
|
} |
|
|
|
if (type === 'json') { |
|
yield writeCustomMediaToJsonFile(to, customMediaJSON); |
|
} |
|
|
|
if (type === 'mjs') { |
|
yield writeCustomMediaToMjsFile(to, customMediaJSON); |
|
} |
|
} |
|
} |
|
}); |
|
|
|
return function (_x9) { |
|
return _ref.apply(this, arguments); |
|
}; |
|
}())); |
|
} |
|
/* Helper utilities |
|
/* ========================================================================== */ |
|
|
|
const defaultCustomMediaToJSON = customMedia => { |
|
return Object.keys(customMedia).reduce((customMediaJSON, key) => { |
|
customMediaJSON[key] = String(customMedia[key]); |
|
return customMediaJSON; |
|
}, {}); |
|
}; |
|
|
|
const writeFile = (to, text) => new Promise((resolve, reject) => { |
|
fs.writeFile(to, text, error => { |
|
if (error) { |
|
reject(error); |
|
} else { |
|
resolve(); |
|
} |
|
}); |
|
}); |
|
|
|
const escapeForJS = string => string.replace(/\\([\s\S])|(')/g, '\\$1$2').replace(/\n/g, '\\n').replace(/\r/g, '\\r'); |
|
|
|
var index = postcss.plugin('postcss-custom-media', opts => { |
|
// whether to preserve custom media and at-rules using them |
|
const preserve = 'preserve' in Object(opts) ? Boolean(opts.preserve) : false; // sources to import custom media from |
|
|
|
const importFrom = [].concat(Object(opts).importFrom || []); // destinations to export custom media to |
|
|
|
const exportTo = [].concat(Object(opts).exportTo || []); // promise any custom media are imported |
|
|
|
const customMediaPromise = getCustomMediaFromSources(importFrom); |
|
return ( |
|
/*#__PURE__*/ |
|
function () { |
|
var _ref = _asyncToGenerator(function* (root) { |
|
const customMedia = Object.assign((yield customMediaPromise), getCustomMediaFromRoot(root, { |
|
preserve |
|
})); |
|
yield writeCustomMediaToExports(customMedia, exportTo); |
|
transformAtrules(root, customMedia, { |
|
preserve |
|
}); |
|
}); |
|
|
|
return function (_x) { |
|
return _ref.apply(this, arguments); |
|
}; |
|
}() |
|
); |
|
}); |
|
|
|
module.exports = index; |
|
//# sourceMappingURL=index.cjs.js.map
|
|
|