mirror of
https://github.com/cockpit-project/cockpit.git
synced 2026-11-03 21:49:50 -09:00
files.js: make pure to fix font logic
Since15469bb469("tools: Teach webpack-make.js to get node_modules by itself") we want to support people invoking `./build.js` without having run `tools/node-modules checkout`. This commit added an invocation of `tools/node-modules` to make sure that everything is checked out and up to date. Unfortunately, `file.js` gets imported before that happens, and since7cab667c1b("pkg: Change to variable font") this module import isn't pure: it tries to read the font information from the `node_modules` directory at import time, before we've run the update. That means that we can either: - fail completely, if the `node_modules` aren't checked out yet - (maybe worse): read stale information if they're checked out, but to the incorrect version (and get updated in between the read and the build) Move the top-level computation added in that commit to `getFiles()` which gets called — once — at runtime, after we've done the update. We need to rename a local to avoid a shadow. Move related constants, some comments, and a few other "computationy" things (like path computations) which are no longer needed at the toplevel into the function as well. `all_subdirs` is left at the toplevel because it's entirely based on internal data and it's an export (and used from build.js). This module is now side-effect-free on import and the automatic `node_modules` checkout functionality is working properly again.
This commit is contained in:
parent
7a887d89b2
commit
5f3c0e9b8b
1 changed files with 58 additions and 58 deletions
74
files.js
74
files.js
|
|
@ -153,67 +153,67 @@ const info = {
|
|||
]
|
||||
};
|
||||
|
||||
const srcdir = import.meta.dirname;
|
||||
const nodedir = path.join(srcdir, "node_modules");
|
||||
|
||||
export const all_subdirs = Array.from(new Set(info.entries.map(key => key.split('/')[0])));
|
||||
|
||||
// These are the fonts we used up until migrating to Patternfly v6
|
||||
// It is kept here to make sure all dependencies of the fonts works like in
|
||||
// third-party plugins etc.
|
||||
export const getFiles = subdir => {
|
||||
const srcdir = import.meta.dirname;
|
||||
const nodedir = path.join(srcdir, "node_modules");
|
||||
const pkgfile = suffix => `${srcdir}/pkg/${suffix}`;
|
||||
|
||||
// With the PF6 migration we now want to use Variable Fonts (VF) to ensure better
|
||||
// Patternfly visuals, and we will use a new directory structure to avoid hardcoding
|
||||
// @font-face.
|
||||
//
|
||||
// This copies all non-VF Red Hat fonts to our `static/fonts/` directory.
|
||||
const redhat_fonts = [
|
||||
// These are the fonts we used up until migrating to Patternfly v6
|
||||
// It is kept here to make sure all dependencies of the fonts works like in
|
||||
// third-party plugins etc.
|
||||
|
||||
// With the PF6 migration we now want to use Variable Fonts (VF) to ensure better
|
||||
// Patternfly visuals, and we will use a new directory structure to avoid hardcoding
|
||||
// @font-face.
|
||||
//
|
||||
// This copies all non-VF Red Hat fonts to our `static/fonts/` directory.
|
||||
const redhat_fonts = [
|
||||
"Text-Bold", "Text-BoldItalic", "Text-Italic", "Text-Medium", "Text-MediumItalic", "Text-Regular",
|
||||
"Display-Black", "Display-BlackItalic", "Display-Bold", "Display-BoldItalic",
|
||||
"Display-Italic", "Display-Medium", "Display-MediumItalic", "Display-Regular",
|
||||
"Mono-Bold", "Mono-BoldItalic", "Mono-Italic", "Mono-Medium", "Mono-MediumItalic", "Mono-Regular",
|
||||
].map(name => {
|
||||
const subdir = 'RedHat' + name.split('-')[0];
|
||||
].map(name => {
|
||||
const fontfamily = 'RedHat' + name.split('-')[0];
|
||||
const fontsdir = '@patternfly/patternfly/assets/fonts';
|
||||
|
||||
return {
|
||||
from: path.resolve(nodedir, fontsdir, subdir, 'RedHat' + name + '.woff2'),
|
||||
from: path.resolve(nodedir, fontsdir, fontfamily, 'RedHat' + name + '.woff2'),
|
||||
to: 'static/fonts/'
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
// Different directory structure than our redhat_fonts, which makes it easier
|
||||
// to use the Patternfly default src and avoid hardcoding our own @font-face.
|
||||
//
|
||||
// This copies all variable fonts (VF in the name) to subdirectories:
|
||||
// static/fonts/
|
||||
// ├── RedHatDisplay
|
||||
// │ └── RedHatDisplayVF.woff2
|
||||
// ├── RedHatMono
|
||||
// │ ├── RedHatMonoVF-Italic.woff2
|
||||
// │ └── RedHatMonoVF.woff2
|
||||
// ├── RedHatText
|
||||
// │ ├── RedHatTextVF-Italic.woff2
|
||||
// │ └── RedHatTextVF.woff2
|
||||
const redhat_fonts_variable_font = [
|
||||
// Different directory structure than our redhat_fonts, which makes it easier
|
||||
// to use the Patternfly default src and avoid hardcoding our own @font-face.
|
||||
//
|
||||
// This copies all variable fonts (VF in the name) to subdirectories:
|
||||
// static/fonts/
|
||||
// ├── RedHatDisplay
|
||||
// │ └── RedHatDisplayVF.woff2
|
||||
// ├── RedHatMono
|
||||
// │ ├── RedHatMonoVF-Italic.woff2
|
||||
// │ └── RedHatMonoVF.woff2
|
||||
// ├── RedHatText
|
||||
// │ ├── RedHatTextVF-Italic.woff2
|
||||
// │ └── RedHatTextVF.woff2
|
||||
const redhat_fonts_variable_font = [
|
||||
"Text",
|
||||
"Display",
|
||||
"Mono",
|
||||
].flatMap(name => {
|
||||
const subdir = 'RedHat' + name;
|
||||
].flatMap(name => {
|
||||
const fontfamily = 'RedHat' + name;
|
||||
const fontsdir = '@patternfly/patternfly/assets/fonts';
|
||||
const fontsDirPath = path.resolve(nodedir, fontsdir, subdir);
|
||||
const fontsDirPath = path.resolve(nodedir, fontsdir, fontfamily);
|
||||
|
||||
return fs.readdirSync(fontsDirPath)
|
||||
.filter(file => file.includes('VF') && file.endsWith('.woff2'))
|
||||
.map(file => ({
|
||||
from: path.resolve(fontsDirPath, file),
|
||||
to: `static/fonts/${subdir}`
|
||||
to: `static/fonts/${fontfamily}`
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
||||
const pkgfile = suffix => `${srcdir}/pkg/${suffix}`;
|
||||
export const getFiles = subdir => {
|
||||
/* Qualify all the paths in entries */
|
||||
const entryPoints = [];
|
||||
info.entries.forEach(key => {
|
||||
|
|
|
|||
Loading…
Reference in a new issue