Skip to content

Commit

Permalink
fuck
Browse files Browse the repository at this point in the history
  • Loading branch information
thoughtspile committed Sep 29, 2021
1 parent d79d96f commit c270ab9
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 7 deletions.
60 changes: 60 additions & 0 deletions babel-flatten-css.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
const fs = require('fs');
const { join, relative, dirname } = require('path');
const { addSideEffect } = require('@babel/helper-module-imports');
const { parse } = require('@babel/parser');
const traverse = require('@babel/traverse').default;

const cache = {};
function extractCssImports(src) {
// remove cycles
if (cache[src]) {
return cache[src];
}
if (src.endsWith('.css')) {
return [src];
}
const resolved = ['ts', 'tsx'].map(ext => `${src}.${ext}`).find(f => fs.existsSync(f));
const ast = parse('' + fs.readFileSync(resolved), {
sourceFileName: src,
sourceType: 'module',
plugins: ['jsx', 'typescript'],
});
const css = cache[src] = [];
traverse(ast, {
ImportDeclaration(path) {
if (path.node.source.value.match(/^[a-z@]/i)) {
return;
}
const fullPath = join(dirname(src), path.node.source.value);
css.push(...extractCssImports(fullPath));
},
});
return css;
}

module.exports = (t, opts) => ({
visitor: {
Program: (path, ctx) => {
if (!opts.test(ctx.filename)) {
return;
}
const imports = path.node.body.filter(c => {
return c.type === 'ImportDeclaration' && !c.source.value.match(/^[a-z@]/i);
});
const cssImports = imports.filter(i => i.source.value.endsWith('.css'));
if (cssImports.length) {
const orderedCssImports = new Set();
imports.forEach(i => {
extractCssImports(join(dirname(ctx.filename), i.source.value))
.forEach(p => orderedCssImports.add(p));
});

path.node.body = path.node.body.filter(n => !cssImports.includes(n));
orderedCssImports.forEach(p => {
const rel = relative(dirname(ctx.filename), p);
addSideEffect(path, rel[0] === '.' ? rel : `./${rel}`, { importPosition: 'after' });
});
}
}
}
});
11 changes: 4 additions & 7 deletions babel.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,7 @@ const testFiles = [

module.exports = {
presets: [
['@babel/preset-env', {
modules: useModules ? false : 'commonjs',
exclude: [
'@babel/plugin-proposal-unicode-property-regex',
'@babel/plugin-transform-unicode-regex'
]
}],
['@babel/preset-env', { modules: useModules ? false : 'commonjs' }],
['@babel/preset-react', {
pragma: "createScopedElement",
pragmaFrag: "createScopedElement.Fragment",
Expand All @@ -31,6 +25,9 @@ module.exports = {
}]
],
plugins: [
[require.resolve('./babel-flatten-css'), {
test: filename => filename.includes('/components/'),
}],
'@babel/plugin-proposal-class-properties',
'@babel/plugin-proposal-object-rest-spread',
['@babel/plugin-transform-runtime', { version: runtimeVersion }],
Expand Down

0 comments on commit c270ab9

Please sign in to comment.