Skip to content

Commit

Permalink
refactor(create-optimized-css): convert to one argument
Browse files Browse the repository at this point in the history
  • Loading branch information
metonym committed Apr 14, 2024
1 parent 37760e3 commit d210b34
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 19 deletions.
10 changes: 5 additions & 5 deletions src/plugins/OptimizeCssPlugin.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import type { Compiler } from "webpack";
import { isCarbonSvelteImport, isCssFile } from "../utils";
import { printDiff } from "./print-diff";
import type { OptimizeCssOptions } from "./create-optimized-css";
import { createOptimizedCss } from "./create-optimized-css";
import { printDiff } from "./print-diff";

// Webpack plugin to optimize CSS for Carbon Svelte components.
class OptimizeCssPlugin {
Expand Down Expand Up @@ -52,11 +52,11 @@ class OptimizeCssPlugin {
for (const [id] of Object.entries(assets)) {
if (isCssFile(id)) {
const original_css = assets[id].source();
const optimized_css = createOptimizedCss(
original_css,
const optimized_css = createOptimizedCss({
...this.options,
source: original_css,
ids,
this.options,
);
});

compilation.updateAsset(id, new RawSource(optimized_css));

Expand Down
14 changes: 8 additions & 6 deletions src/plugins/create-optimized-css.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,13 @@ export type OptimizeCssOptions = {
preserveAllIBMFonts?: boolean;
};

export function createOptimizedCss(
original_css: Uint8Array | string,
ids: string[],
options?: OptimizeCssOptions,
) {
type CreateOptimizedCssOptions = OptimizeCssOptions & {
source: Uint8Array | string;
ids: string[];
};

export function createOptimizedCss(options: CreateOptimizedCssOptions) {
const { source, ids } = options;
const preserveAllIBMFonts = options?.preserveAllIBMFonts === true;

// List of Carbon classes that must be preserved in the CSS
Expand Down Expand Up @@ -119,5 +121,5 @@ export function createOptimizedCss(
},
},
discardEmpty(),
]).process(original_css).css;
]).process(source).css;
}
8 changes: 6 additions & 2 deletions src/plugins/optimize-css.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import type { Plugin } from "vite";
import { isCarbonSvelteImport, isCssFile } from "../utils";
import { printDiff } from "./print-diff";
import type { OptimizeCssOptions } from "./create-optimized-css";
import { createOptimizedCss } from "./create-optimized-css";
import { printDiff } from "./print-diff";

// Vite plugin (Rollup-compatible) to optimize CSS for Carbon Svelte components.
export const optimizeCss = (options?: OptimizeCssOptions): Plugin => {
Expand All @@ -27,7 +27,11 @@ export const optimizeCss = (options?: OptimizeCssOptions): Plugin => {

if (file.type === "asset" && isCssFile(id)) {
const original_css = file.source;
const optimized_css = createOptimizedCss(original_css, ids, options);
const optimized_css = createOptimizedCss({
...options,
source: original_css,
ids,
});

file.source = optimized_css;

Expand Down
17 changes: 11 additions & 6 deletions tests/create-optimized-css.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@ import { createOptimizedCss } from "../src/plugins/create-optimized-css";

describe("create-optimized-css", () => {
test("removes unused selectors", () => {
const result = createOptimizedCss(
`
const result = createOptimizedCss({
source: `
* { box-sizing: border-box }
a { color: blue }
button.bx--btn { background-color: red }
.bx--btn, .bx--btn--primary { color: white }
.bx--accordion { background-color: yellow }
.bx--accordion--end, .bx--accordion__content {color: black }
`,
["/Accordion.svelte"],
);
ids: ["/Accordion.svelte"],
});
expect(result).toMatchSnapshot();
});

Expand Down Expand Up @@ -55,12 +55,17 @@ describe("create-optimized-css", () => {
}`;

test("removes unused @font rules", () => {
const result = createOptimizedCss(font_rules, ["/Accordion.svelte"]);
const result = createOptimizedCss({
source: font_rules,
ids: ["/Accordion.svelte"],
});
expect(result).toMatchSnapshot();
});

test("preserves all IBM fonts", () => {
const result = createOptimizedCss(font_rules, ["/Accordion.svelte"], {
const result = createOptimizedCss({
source: font_rules,
ids: ["/Accordion.svelte"],
preserveAllIBMFonts: true,
});
expect(result).toMatchSnapshot();
Expand Down

0 comments on commit d210b34

Please sign in to comment.