mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-06 12:01:40 +08:00
To remove the module.json file in perf_ui, we need to migrate the resources to the new `generate_css` template. However, perf_ui is a bit special, in that it doesn't properly use the widget structure. As such, it sometimes injects CSS in places where there is no clear shadowRoot available. Therefore, it is not possible to migrate to CSSStyleSheet in combination with adoptedStylesheets. As a workaround (to unblock the module.json removal), we augment `generate_css` to add legacy file generation. All remaining resources in DevTools will migrate to these `.css.legacy.js` files. That's because these resources either are special (perf_ui) or are used in the `device_mode_emulation_frame` which can't use `CSSStyleSheet` itself. The files export an object, rather than a plain string. That's because we need to be able to distinguish what string is referencing a CSS file path and which strings contain the actual CSS styles. By using an object, we can remain using the `typeof` check for string in the legacy CSS infrastructure and otherwise destructure the object. After this, we can remove perf_ui from the module.json structure and properly bundle+minify the CSS resources. R=jacktfranklin@chromium.org Bug: 1190991, 1127902 Change-Id: I7523333e8025ae5fe5ed74b99b4e45907ff9ad97 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3275787 Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org> Auto-Submit: Tim van der Lippe <tvanderlippe@chromium.org> Reviewed-by: Jack Franklin <jacktfranklin@chromium.org>
50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
// Copyright 2021 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
'use strict';
|
|
|
|
/**
|
|
* @fileoverview Prevent usage of customElements.define() and use the helper
|
|
* function instead
|
|
*/
|
|
|
|
// ------------------------------------------------------------------------------
|
|
// Rule Definition
|
|
// ------------------------------------------------------------------------------
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
module.exports = {
|
|
meta: {
|
|
type: 'problem',
|
|
|
|
docs: {
|
|
description: 'check CSS file imports',
|
|
category: 'Possible Errors',
|
|
},
|
|
fixable: 'code',
|
|
schema: [] // no options
|
|
},
|
|
create: function(context) {
|
|
return {
|
|
ImportDeclaration(node) {
|
|
const importPath = path.normalize(node.source.value);
|
|
|
|
if (importPath.endsWith('.css.js') || importPath.endsWith('.css.legacy.js')) {
|
|
const importingFileName = path.resolve(context.getFilename());
|
|
const exportingFileName = path.resolve(path.dirname(importingFileName), importPath);
|
|
const importedCSS = exportingFileName.replace(/(\.legacy)?\.js$/, '');
|
|
|
|
if (!fs.existsSync(importedCSS)) {
|
|
context.report({
|
|
node,
|
|
message: `File ${path.basename(importedCSS)} does not exist. Check you are importing the correct file.`
|
|
});
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|
|
};
|