Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
return css => {
// https://github.com/postcss/postcss/blob/master/docs/api.md#inputfile
const file = css.source.input.file;
const translations = {};
const exportTokens = {};
css.walkRules(importRegexp, rule => {
const exports = fetch(RegExp.$1, file);
rule.walkDecls(decl => translations[decl.prop] = exports[decl.value]);
rule.remove();
});
replaceSymbols(css, translations);
css.walkRules(exportRegexp, rule => {
rule.walkDecls(decl => {
forEach(translations, (value, key) => decl.value = decl.value.replace(key, value));
exportTokens[decl.prop] = decl.value;
});
rule.remove();
});
css.tokens = exportTokens;
};
});
}
})
/* We want to export anything defined by now, but don't add it to the CSS yet or
it well get picked up by the replacement stuff */
let exportDeclarations = Object.keys(definitions).map(key => postcss.decl({
value: definitions[key],
prop: key,
raws: { before: "\n " }
}))
/* If we have no definitions, don't continue */
if (!Object.keys(definitions).length) return
/* Perform replacements */
replaceSymbols(css, definitions)
/* Add export rules if any */
if (exportDeclarations.length > 0) {
let exportRule = postcss.rule({
selector: `:export`,
raws: { after: "\n" }
})
exportRule.append(exportDeclarations)
css.prepend(exportRule)
}
/* Add import rules */
importAliases.reverse().forEach(({ path, imports }) => {
let importRule = postcss.rule({
selector: `:import(${path})`,
raws: { after: "\n" }
}
})
/* We want to export anything defined by now, but don't add it to the CSS yet or
it well get picked up by the replacement stuff */
let exportDeclarations = Object.keys(definitions).map(key => postcss.decl({
value: definitions[key],
prop: key,
raws: { before: "\n " }
}))
/* If we have no definitions, don't continue */
if (!Object.keys(definitions).length) return
/* Perform replacements */
replaceSymbols(css, definitions)
/* Add export rules if any */
if (exportDeclarations.length > 0) {
let exportRule = postcss.rule({
selector: `:export`,
raws: { after: "\n" }
})
exportRule.append(exportDeclarations)
css.prepend(exportRule)
}
/* Add import rules */
importAliases.reverse().forEach(({ path, imports }) => {
let importRule = postcss.rule({
selector: `:import(${path})`,
raws: { after: "\n" }
const addDefinition = atRule => {
let matches
while (matches = matchValueDefinition.exec(atRule.params)) {
let [/*match*/, key, value] = matches
// Add to the definitions, knowing that values can refer to each other
definitions[key] = replaceAll(definitions, value)
atRule.remove()
}
}
const addDefinition = atRule => {
let matches;
while ((matches = matchValueDefinition.exec(atRule.params))) {
let [, /*match*/ key, value] = matches;
// Add to the definitions, knowing that values can refer to each other
definitions[key] = replaceSymbols.replaceAll(definitions, value);
atRule.remove();
}
};
const addDefinition = atRule => {
let matches
while (matches = matchValueDefinition.exec(atRule.params)) {
let [/*match*/, key, value] = matches
// Add to the definitions, knowing that values can refer to each other
definitions[key] = replaceAll(definitions, value)
atRule.remove()
}
}
it well get picked up by the replacement stuff */
const exportDeclarations = Object.keys(definitions).map(key =>
postcss.decl({
value: definitions[key],
prop: key,
raws: { before: '\n ' }
})
);
/* If we have no definitions, don't continue */
if (!Object.keys(definitions).length) {
return;
}
/* Perform replacements */
ICSSReplaceSymbols.default(css, definitions);
/* Add export rules if any */
if (exportDeclarations.length > 0) {
const exportRule = postcss.rule({
selector: ':export',
raws: { after: '\n' }
});
exportRule.append(exportDeclarations);
css.prepend(exportRule);
}
/* Add import rules */
importAliases.reverse().forEach(({ path, imports }) => {
const importRule = postcss.rule({
selector: `:import(${path})`,
raws: { after: '\n' }
return (css, result) => {
let translations = {};
let exportTokens = result.exportTokens = {};
return Promise.all(fetchAllImports(css, translations, options))
.then(replaceSymbols.bind(null, css, translations))
.then(extractExports.bind(null, css, translations, exportTokens));
};
});