Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PostCSS support #241

Merged
merged 17 commits into from
Aug 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 23 additions & 16 deletions demo/__tests__/style.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ import { render } from '@testing-library/react';

import App from '../App';

function getDocumentHTML() {
return document.documentElement.outerHTML.replace(/\r\n|\n|\r/g, '\n');
}

describe('Style', () => {
it('should render CSS correctly in JSDOM', () => {
render(<App />);
Expand All @@ -10,46 +14,49 @@ describe('Style', () => {
// Global CSS
// TODO: Global CSS is saved into the `.cache` folder, so we can't assert it directly within the JSDOM
// Imported CSS
expect(document.documentElement.outerHTML).toContain(
'<link rel="stylesheet" href="/demo/App.css">',
expect(getDocumentHTML()).toContain(
`.App {
text-align: center;
}`,
);
expect(document.documentElement.outerHTML).toContain(
'<link rel="stylesheet" href="/demo/assets/css/App.css">',
expect(getDocumentHTML()).toContain(
`.logo2 {
max-width: 300px;
background: yellow;
}`,
);

// styled-components
expect(document.documentElement.outerHTML).toContain(
expect(getDocumentHTML()).toContain(
'<style data-styled="active" data-styled-version="5.3.5">',
);
expect(document.documentElement.outerHTML).toContain('.dgihId{color:red;}');
expect(getDocumentHTML()).toContain('.dgihId{color:red;}');

// emotion
expect(document.documentElement.outerHTML).toContain(
expect(getDocumentHTML()).toContain(
'<style data-emotion="css" data-s="">.css-2m18qq{color:orange;}</style>',
);

// CSS Modules
// Global
// TODO: not implemented yet
// Import
expect(
document.documentElement.outerHTML.replace(/\r\n|\n|\r/g, ''),
).toContain(
`<style type=\"text/css\">._cssModule_1gc0y_1 { color: green;}</style>`,
expect(getDocumentHTML()).toContain(
`._cssModule_1gc0y_1 {
color: green;
}`,
);

// Sass
// Global
// TODO: Global SCSS is saved into the `.cache` folder, not in the JSDOM, need to find a way to test it
// Import
expect(document.documentElement.outerHTML)
.toContain(`header .imported-sass {
expect(getDocumentHTML()).toContain(`header .imported-sass {
text-transform: uppercase;
}`);
expect(document.documentElement.outerHTML)
.toContain(`header .imported-sass {
expect(getDocumentHTML()).toContain(`header .imported-sass {
color: pink;
}</style>`);
}`);
// import ~
// TODO: Not implemented yet
// loadPaths
Expand Down
3 changes: 3 additions & 0 deletions examples/angular/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,12 @@
"@types/jest": "^28.1.6",
"@types/node": "16.11.7",
"@types/testing-library__jest-dom": "^5.14.5",
"autoprefixer": "^10.4.8",
"jest": "^28.1.3",
"jest-preview": "^0.2.8",
"postcss": "^8.4.16",
"start-server-and-test": "^1.14.0",
"tailwindcss": "^3.1.8",
"typescript": "~4.7.2"
}
}
1 change: 1 addition & 0 deletions examples/angular/src/app/app.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export const styleUrls = [
This text is styled by global configured SASS
</p>
<p class="imported-sass">This text is styled by imported SASS</p>
<p class="text-xanh">TailwindCSS Green</p>
<p>
<app-counter></app-counter>
</p>
Expand Down
4 changes: 4 additions & 0 deletions examples/angular/src/styles/index.css
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
Expand Down
11 changes: 11 additions & 0 deletions examples/angular/tailwind.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ['./src/**/*.{html,ts}'],
theme: {
extend: {},
colors: {
xanh: '#34eb4f',
},
},
plugins: [],
};
4 changes: 3 additions & 1 deletion examples/create-react-app/src/__tests__/transform.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ describe('transform', () => {
it('should generate snapshots correctly in different OS', () => {
render(<App />);

expect(document.body.outerHTML).toMatchInlineSnapshot(
expect(
document.body.outerHTML.replace(/\r\n|\n|\r/g, '\n'),
).toMatchInlineSnapshot(
`"<body><div><div class=\\"App\\"><header class=\\"App-header\\"><svg xmlns=\\"http://www.w3.org/2000/svg\\" viewBox=\\"0 0 841.9 595.3\\" class=\\"svg-component\\"><g fill=\\"#61DAFB\\"><path d=\\"M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z\\"></path><circle cx=\\"420.9\\" cy=\\"296.5\\" r=\\"45.7\\"></circle><path d=\\"M520.5 78.1z\\"></path></g></svg><img src=\\"/src/logo.svg\\" class=\\"App-logo\\" alt=\\"logo\\"><div><img src=\\"/src/assets/images/logo.svg\\" class=\\"logo2\\" alt=\\"logo2\\"><img src=\\"/src/assets/images/favicon.ico\\" alt=\\"static react\\"></div><p>Create React App example</p><p class=\\"_textOrange_p6ddy_1\\">Styled by CSS Modules</p><p class=\\"global-configured-sass\\">This text is styled by global configured SASS</p><p class=\\"imported-sass\\">This text is styled by imported SASS</p><p class=\\"load-path-sass\\">This text is styled by SASS from load paths</p><div class=\\"animated fadeIn\\"><p>An animated element style using @import ~</p><p>Watch me fade in!</p></div><button data-testid=\\"increase\\" type=\\"button\\">count is: <div data-testid=\\"count\\">0</div></button><a class=\\"App-link\\" href=\\"https://reactjs.org\\" target=\\"_blank\\" rel=\\"noopener noreferrer\\">Learn React</a></header></div></div></body>"`,
);
});
Expand Down
3 changes: 3 additions & 0 deletions examples/vite-react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,16 @@
"@vitejs/plugin-react": "^1.0.7",
"animate-sass": "^0.8.2",
"animate.css": "^4.1.1",
"autoprefixer": "^10.4.8",
"cross-env": "^7.0.3",
"jest": "^27.5.1",
"jest-preview": "file:../..",
"jest-watch-typeahead": "^1.0.0",
"npm-run-all": "^4.1.5",
"postcss": "^8.4.16",
"prettier": "^2.6.0",
"sass": "^1.50.0",
"tailwindcss": "^3.1.8",
"typescript": "^4.5.4",
"vite": "^2.8.0"
}
Expand Down
6 changes: 6 additions & 0 deletions examples/vite-react/postcss.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}
1 change: 1 addition & 0 deletions examples/vite-react/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ function App() {
<p className="load-path-sass">
This text is styled by SASS from load paths
</p>
<p className="text-xanh">TailwindCSS - Green</p>
<p className="animate__animated animate__bounce">
An animated element style using @use ~
</p>
Expand Down
4 changes: 4 additions & 0 deletions examples/vite-react/src/index.css
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
Expand Down
11 changes: 11 additions & 0 deletions examples/vite-react/tailwind.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'],
theme: {
extend: {},
colors: {
xanh: '#34eb4f',
},
},
plugins: [],
};
3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
"server": "node cli/index.js",
"server:watch": "nodemon cli/index.js",
"test:dev": "cross-env NODE_ENV=test jest --watch --no-cache App",
"test:dev:cache": "cross-env NODE_ENV=test jest --watch App",
"test:ci": "cross-env NODE_ENV=test jest",
"clearCache": "node cli/clearCache.js",
"test": "npm-run-all -p server test:dev",
Expand All @@ -69,6 +70,7 @@
"connect": "^3.7.0",
"find-node-modules": "^2.1.3",
"open": "^8.4.0",
"postcss-load-config": "^4.0.1",
"sirv": "^2.0.2",
"slash": "^3.0.0",
"string-hash": "^1.1.3",
Expand Down Expand Up @@ -106,6 +108,7 @@
"npm-run-all": "^4.1.5",
"postcss": "^8.4.14",
"postcss-modules": "^4.3.1",
"postcss-trolling": "^0.1.7",
"prettier": "^2.6.0",
"react": "^17.0.2",
"react-dom": "^17.0.2",
Expand Down
3 changes: 3 additions & 0 deletions playground/index.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
a {
color: aliceblue;
}
45 changes: 45 additions & 0 deletions playground/postcss-load-config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
const { spawnSync } = require('child_process');

// const result = spawnSync('node', [
// '-e',
// `const postcss = require('postcss');
// const postcssrc = require('postcss-load-config');
// const { readFileSync } = require('fs');
// const css = readFileSync('index.css', 'utf8');

// postcssrc().then(({ plugins, options }) => {
// // console.log({ plugins, options });

// postcss(plugins)
// .process(css, { ...options, from: 'index.css' })
// .then((result) => console.log(result.css));
// });`,
// ]);
// const stderr = result.stderr.toString('utf-8').trim();
// if (stderr) console.error(stderr);
// if (result.error) throw result.error;
// const a = result.stdout.toString();
// console.log(a);

function havePostCss() {
const result = spawnSync('node', [
'-e',
`const postcssrc = require('postcss-load-config');

postcssrc().then(({ plugins, options }) => {
console.log(true)
})
.catch(error=>{
if (!/No PostCSS Config found/.test(error.message)) {
throw new Error("Failed to load PostCSS config", error)
}
console.log(false)
});`,
]);
const stderr = result.stderr.toString('utf-8').trim();
if (stderr) console.error(stderr);
if (result.error) throw result.error;
return result.stdout.toString().trim() === 'true';
}

console.log(havePostCss());
7 changes: 7 additions & 0 deletions playground/postcss.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
// 'postcss-trolling': {},
},
};
Loading