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

FEATURE: CSS build refactor (make react-ui-components easy to use) #3366

Merged
merged 50 commits into from
Feb 22, 2023
Merged
Changes from 1 commit
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
5694006
TASK: Rename scss files to css
mhsdesign Feb 11, 2023
36dfbdc
Task: Replace @extends with composes: reset from "../reset.css";
mhsdesign Feb 11, 2023
b9acf92
Task: Rewrite reset.scss in css
mhsdesign Feb 11, 2023
788608c
Task: Update esbuild to remove duplicate css across files
mhsdesign Feb 11, 2023
d46b909
Task: Remove sass
mhsdesign Feb 11, 2023
f2e1a85
Task: Apply `&` in nested css to comply with the draft
mhsdesign Feb 12, 2023
d19234b
Task: Use css module composes for grid-area
mhsdesign Feb 12, 2023
e59b797
Task: Css modules use `:global(` function syntax instead of context s…
mhsdesign Feb 14, 2023
51e03a1
Task: Use lightningcss for css modules instead of postcss
mhsdesign Feb 14, 2023
426f0a8
Feature: Fully working "react-ui-components" consumer friendly build
mhsdesign Feb 14, 2023
bc54470
Task: revert to not use :where() in .reset
mhsdesign Feb 14, 2023
e322532
Task: rename reset.css to reset.module.css
mhsdesign Feb 14, 2023
67bf977
Task: mark old css var config as LEGACY
mhsdesign Feb 14, 2023
ca5ce09
Task: document things
mhsdesign Feb 14, 2023
b368fbb
Task: Fix css variables lightningcss plugin
mhsdesign Feb 15, 2023
80f3e34
Task: Fix linter
mhsdesign Feb 15, 2023
5918a72
Task: inline isNil to avoid having '@neos-project/utils-helpers' as n…
mhsdesign Feb 15, 2023
08b6edb
Task: inline @mhsdesign/esbuild-composes-from-css-modules instead
mhsdesign Feb 15, 2023
aa9f549
Task: optimize css modules plugin
mhsdesign Feb 15, 2023
8a401cc
Task: fix linter
mhsdesign Feb 15, 2023
0ede0fb
Task: remove `{isManifestLoaded, getManifest} from '@neos-project/bui…
mhsdesign Feb 15, 2023
837fd53
Task: remove left over references to `.scss`
mhsdesign Feb 15, 2023
4a34d62
Task: remove useless NEOS_BUILD_ROOT
mhsdesign Feb 15, 2023
76a144e
Task: cleanup webpack extensibility and remove its postcss-css-variab…
mhsdesign Feb 15, 2023
57bad12
Task: update esbuild
mhsdesign Feb 15, 2023
86b38c2
Task: remove legacy generation of postcss.rc
mhsdesign Feb 15, 2023
b7202e9
Task: fix linting
mhsdesign Feb 15, 2023
d5cabab
Task: react-ui-components build add check for missing dependencies
mhsdesign Feb 15, 2023
b39b6e4
Task: Fix dateInput style
mhsdesign Feb 17, 2023
c6c9761
Task: cleanup compileWithCssVariables
mhsdesign Feb 17, 2023
48d78fe
Merge remote-tracking branch 'origin/8.3' into feature/cssBuildRefactor
mhsdesign Feb 17, 2023
5850c1a
TASK: Analyze bundle size and health `node esbuild.js --production --…
mhsdesign Feb 18, 2023
f089c83
TasK: Make neos-ui/packages 100% pure esm
mhsdesign Feb 18, 2023
3687084
Bugfix: Revert css style changes #3330 and #3282
mhsdesign Feb 19, 2023
f435ee2
TASK: explain `value == null`
mhsdesign Feb 19, 2023
d7f736d
TASK: Rect-ui-components only expose `index` and `unstyled`
mhsdesign Feb 19, 2023
328c107
Bugfix: Remove sideeffect from `<Icon />` #3378
mhsdesign Feb 19, 2023
79dcd4b
Task: Prefix dist cssmodule from react-ui-components to prevent namin…
mhsdesign Feb 19, 2023
ac52aa4
Task: Fix CI Install
mhsdesign Feb 19, 2023
f326188
Task: React-ui-components build faster build consistency check
mhsdesign Feb 19, 2023
977dee4
Task: Fix Font-awesome tests
mhsdesign Feb 19, 2023
1059be2
TASK: Document new usage ;)
mhsdesign Feb 20, 2023
f67ce2d
Merge remote-tracking branch 'origin/8.3' into feature/cssBuildRefactor
mhsdesign Feb 20, 2023
2128f07
Task: Cleanup react-ui-component typescript-utils
mhsdesign Feb 20, 2023
fd993bd
Task: Better splitting & Docs
mhsdesign Feb 20, 2023
8087038
Update README.md
mhsdesign Feb 21, 2023
d8ab716
Docs: Add example and how to use Noto Sans font
mhsdesign Feb 21, 2023
eefb66d
Task: Use different approach to build react-ui-components: build each…
mhsdesign Feb 21, 2023
a74638e
Task: cssModules omit sourcemap for generated code
mhsdesign Feb 22, 2023
f710274
Merge pull request #3383 from neos/task/analyzeBundleSizeAndHealth
markusguenther Feb 22, 2023
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
Prev Previous commit
Next Next commit
Task: optimize css modules plugin
  • Loading branch information
mhsdesign committed Feb 15, 2023
commit aa9f5497678225b8b9414b247f97042aaa165447
45 changes: 29 additions & 16 deletions cssModules.js
Original file line number Diff line number Diff line change
@@ -41,8 +41,6 @@ const cssModules = (options) => {
if (options.excludeFilter && options.excludeFilter.test(path)) {
return;
}

// @todo cache it...

const rawCssBuffer = await fs.readFile(path)

@@ -70,46 +68,61 @@ const cssModules = (options) => {
{ code: finalcode, resolveDir: dirname(path) }
)

let jsHead = "";
const quote = JSON.stringify;

let jsBody = `import "${id}" \nexport default {`;

let dependencyCount = 0;
const escape = (string) => JSON.stringify(string).slice(1, -1)

let contents = "";

/** @type {Map<string, string>} */
const dependencies = new Map()

/** @param {String} path */
const importDependeny = (path) => {
if (dependencies.has(path)) {
return dependencies.get(path)
}
const dependenciesName = `dependency_${dependencies.size}`
// prepend dependeny to to the contents
contents = `import ${dependenciesName} from ${quote(path)}\n` + contents;
dependencies.set(path, dependenciesName)
return dependenciesName;
}

contents += `import ${quote(id)}\n`;
contents += `export default {`;

for (const [cssClassReadableName, cssClassExport] of Object.entries(exports)) {

let compiledCssClasses = `"${cssClassExport.name}`
let compiledCssClasses = `"${escape(cssClassExport.name)}`

if (cssClassExport.composes) {
for (const composition of cssClassExport.composes) {
switch (composition.type) {
case "local":
compiledCssClasses += " " + composition.name
compiledCssClasses += " " + escape(composition.name)
break;

case "global":
compiledCssClasses += " " + composition.name
compiledCssClasses += " " + escape(composition.name)
break;

case "dependency":
jsHead += `import dependency_${dependencyCount} from ${JSON.stringify(composition.specifier)}\n`
compiledCssClasses += ` " + dependency_${dependencyCount}["${composition.name}"] + "`

dependencyCount ++
compiledCssClasses += ` " + ${importDependeny(composition.specifier)}[${quote(composition.name)}] + "`
break;
}
}
}

compiledCssClasses += `"`

jsBody += `"${cssClassReadableName}":${compiledCssClasses},`
contents += `${quote(cssClassReadableName)}:${compiledCssClasses},`
}

jsBody += "}"
contents += "}"

return {
contents: jsHead + jsBody,
contents,
loader: "js",
}
})