Skip to content

Commit 227bb51

Browse files
devextreme-scss build refactor
1 parent 8e289f4 commit 227bb51

6 files changed

Lines changed: 442 additions & 394 deletions

File tree

packages/devextreme/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@
231231
"build:testcafe": "cross-env DEVEXTREME_TEST_CI=TRUE BUILD_ESM_PACKAGE=true BUILD_TESTCAFE=TRUE gulp default",
232232
"build-npm-devextreme": "cross-env BUILD_ESM_PACKAGE=true gulp default",
233233
"build-dist": "cross-env BUILD_ESM_PACKAGE=true gulp default --uglify",
234-
"build-themes": "pnpm nx build:themes devextreme-scss && pnpm nx copy:assets devextreme-scss",
234+
"build-themes": "pnpm nx build devextreme-scss",
235235
"build:react": "gulp generate-react",
236236
"build:react:watch": "gulp generate-react-watch",
237237
"build:react:typescript": "gulp generate-react-typescript",

packages/nx-infra-plugin/src/executors/scss-assemble/scss-assemble.impl.ts

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,16 @@ import { createExecutor } from '../../utils/create-executor';
66
import { toPosixPath } from '../../utils/path-resolver';
77
import { readFileText, writeFileText, ensureDir } from '../../utils/file-operations';
88
import { copyDirectory } from '../copy-files/copy-files.impl';
9+
import {
10+
DATA_URI_SCSS_REGEX,
11+
encodeDataUriForCssUrl,
12+
} from '../../utils/scss-data-uri';
913
import { ScssAssembleExecutorSchema } from './schema';
1014

11-
const DATA_URI_REGEX = /data-uri\((?:'(image\/svg\+xml;charset=UTF-8)',\s)?['"]?([^)'"]+)['"]?\)/g;
12-
1315
const SCSS_EXTENSIONS = new Set(['.scss', '.css']);
1416

15-
function encodeSvg(buffer: Buffer, svgEncoding?: string): string {
16-
const encoding = svgEncoding ?? 'image/svg+xml;charset=UTF-8';
17-
return `"data:${encoding},${encodeURIComponent(buffer.toString())}"`;
18-
}
19-
20-
function encodeImage(buffer: Buffer, ext: string): string {
21-
return `"data:image/${ext};base64,${buffer.toString('base64')}"`;
22-
}
23-
2417
async function inlineDataUri(content: string, scssRoot: string): Promise<string> {
25-
const matches = [...content.matchAll(DATA_URI_REGEX)];
18+
const matches = [...content.matchAll(DATA_URI_SCSS_REGEX)];
2619
if (matches.length === 0) return content;
2720

2821
const replacements = new Map<string, string>();
@@ -35,15 +28,13 @@ async function inlineDataUri(content: string, scssRoot: string): Promise<string>
3528
const svgEncoding = match[1];
3629
const fileName = match[2];
3730
const filePath = path.resolve(scssRoot, fileName);
38-
const ext = path.extname(filePath).slice(1);
3931
const buffer = await fs.readFile(filePath);
40-
const escapedString =
41-
ext === 'svg' ? encodeSvg(buffer, svgEncoding) : encodeImage(buffer, ext);
32+
const escapedString = encodeDataUriForCssUrl(buffer, filePath, svgEncoding);
4233
replacements.set(matchStr, `url(${escapedString})`);
4334
}),
4435
);
4536

46-
return content.replace(DATA_URI_REGEX, (match) => replacements.get(match) ?? match);
37+
return content.replace(DATA_URI_SCSS_REGEX, (match) => replacements.get(match) ?? match);
4738
}
4839

4940
async function copyScssWithInlineDataUri(

0 commit comments

Comments
 (0)