chrome-devtools-frontend 1.0.961907 → 1.0.962581

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.eslintignore CHANGED
@@ -5,13 +5,14 @@
5
5
  // clang-format check also ignores that file
6
6
  front_end/.eslintrc.js
7
7
  front_end/diff/diff_match_patch.js
8
+ front_end/generated/protocol.ts
8
9
  front_end/javascript_metadata/NativeFunctions.js
9
10
  front_end/third_party/
11
+ node_modules
12
+ scripts/migration/**/*.js
13
+ scripts/protocol_typescript/*.js
14
+ test/**/fixtures/
10
15
  test/e2e/**/*.js
11
16
  test/shared/**/*.js
12
- test/**/fixtures/
13
- scripts/protocol_typescript/*.js
14
- scripts/migration/**/*.js
15
- node_modules
16
17
 
17
18
  *.d.ts
@@ -659,6 +659,7 @@ grd_files_debug_sources = [
659
659
  "front_end/generated/ARIAProperties.js",
660
660
  "front_end/generated/InspectorBackendCommands.js",
661
661
  "front_end/generated/SupportedCSSProperties.js",
662
+ "front_end/generated/protocol.js",
662
663
  "front_end/legacy_test_runner/test_runner/TestRunner.js",
663
664
  "front_end/models/bindings/BreakpointManager.js",
664
665
  "front_end/models/bindings/CSSWorkspaceBinding.js",
@@ -735,7 +736,6 @@ grd_files_debug_sources = [
735
736
  "front_end/models/persistence/WorkspaceSettingsTab.js",
736
737
  "front_end/models/persistence/editFileSystemView.css.js",
737
738
  "front_end/models/persistence/workspaceSettingsTab.css.js",
738
- "front_end/models/text_utils/CodeMirrorUtils.js",
739
739
  "front_end/models/text_utils/ContentProvider.js",
740
740
  "front_end/models/text_utils/StaticContentProvider.js",
741
741
  "front_end/models/text_utils/Text.js",
@@ -30,7 +30,7 @@
30
30
 
31
31
  import {NodeURL} from './NodeURL.js';
32
32
  import type * as ProtocolProxyApi from '../../generated/protocol-proxy-api.js';
33
- import * as Protocol from '../../generated/protocol.js';
33
+ import type * as Protocol from '../../generated/protocol.js';
34
34
 
35
35
  export const DevToolsStubErrorCode = -32015;
36
36
  // TODO(dgozman): we are not reporting generic errors in tests, but we should
@@ -147,14 +147,14 @@ export class InspectorBackend {
147
147
 
148
148
  registerEnum(type: QualifiedName, values: Object): void {
149
149
  const [domain, name] = splitQualifiedName(type);
150
- // @ts-ignore Protocol global namespace pollution
151
- if (!Protocol[domain]) {
152
- // @ts-ignore Protocol global namespace pollution
153
- Protocol[domain] = {};
150
+ // @ts-ignore globalThis global namespace pollution
151
+ if (!globalThis.Protocol[domain]) {
152
+ // @ts-ignore globalThis global namespace pollution
153
+ globalThis.Protocol[domain] = {};
154
154
  }
155
155
 
156
- // @ts-ignore Protocol global namespace pollution
157
- Protocol[domain][name] = values;
156
+ // @ts-ignore globalThis global namespace pollution
157
+ globalThis.Protocol[domain][name] = values;
158
158
  this.#initialized = true;
159
159
  }
160
160
 
@@ -3,13 +3,10 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import * as TextUtils from '../../models/text_utils/text_utils.js';
6
- import * as Common from '../common/common.js';
6
+ import type * as Common from '../common/common.js';
7
7
  import * as HostModule from '../host/host.js';
8
- import * as Platform from '../platform/platform.js';
9
- import * as Root from '../root/root.js';
10
8
  import type * as Protocol from '../../generated/protocol.js';
11
9
 
12
- import {cssMetadata, GridAreaRowRegex} from './CSSMetadata.js';
13
10
  import type {Edit} from './CSSModel.js';
14
11
  import type {CSSStyleDeclaration} from './CSSStyleDeclaration.js';
15
12
 
@@ -163,113 +160,17 @@ export class CSSProperty {
163
160
  }
164
161
 
165
162
  const range = this.range.relativeTo(this.ownerStyle.range.startLine, this.ownerStyle.range.startColumn);
166
- const indentation = this.ownerStyle.cssText ?
167
- this.detectIndentation(this.ownerStyle.cssText) :
168
- Common.Settings.Settings.instance().moduleSetting('textEditorIndent').get();
169
- const endIndentation = this.ownerStyle.cssText ? indentation.substring(0, this.ownerStyle.range.endColumn) : '';
170
163
  const text = new TextUtils.Text.Text(this.ownerStyle.cssText || '');
171
- const newStyleText = text.replaceRange(range, Platform.StringUtilities.sprintf(';%s;', propertyText));
172
- const tokenizerFactory = TextUtils.CodeMirrorUtils.TokenizerFactory.instance();
173
- const styleText = CSSProperty.formatStyle(newStyleText, indentation, endIndentation, tokenizerFactory);
174
- return this.ownerStyle.setText(styleText, majorChange);
175
- }
176
-
177
- static formatStyle(
178
- styleText: string, indentation: string, endIndentation: string,
179
- tokenizerFactory: TextUtils.TextUtils.TokenizerFactory): string {
180
- const doubleIndent = indentation.substring(endIndentation.length) + indentation;
181
- if (indentation) {
182
- indentation = '\n' + indentation;
183
- }
184
- let result = '';
185
- let propertyName = '';
186
- let propertyText = '';
187
- let insideProperty = false;
188
- let needsSemi = false;
189
- const tokenize = tokenizerFactory.createTokenizer('text/css');
190
-
191
- tokenize('*{' + styleText + '}', processToken);
192
- if (insideProperty) {
193
- result += propertyText;
194
- }
195
- result = result.substring(2, result.length - 1).trimRight();
196
- return result + (indentation ? '\n' + endIndentation : '');
197
-
198
- function processToken(token: string, tokenType: string|null, _column: number, _newColumn: number): void {
199
- if (!insideProperty) {
200
- const disabledProperty = tokenType && tokenType.includes('comment') && isDisabledProperty(token);
201
- const isPropertyStart = tokenType &&
202
- (tokenType.includes('string') || tokenType.includes('meta') || tokenType.includes('property') ||
203
- tokenType.includes('variable-2'));
204
- if (disabledProperty) {
205
- result = result.trimRight() + indentation + token;
206
- } else if (isPropertyStart) {
207
- insideProperty = true;
208
- propertyText = token;
209
- } else if (token !== ';' || needsSemi) {
210
- result += token;
211
- if (token.trim() && !(tokenType && tokenType.includes('comment'))) {
212
- needsSemi = token !== ';';
213
- }
214
- }
215
- if (token === '{' && !tokenType) {
216
- needsSemi = false;
217
- }
218
- return;
219
- }
220
-
221
- if (token === '}' || token === ';') {
222
- // While `propertyText` can generally be trimmed, doing so
223
- // breaks valid CSS declarations such as `--foo: ;` which would
224
- // then produce invalid CSS of the form `--foo:;`. This
225
- // implementation takes special care to restore a single
226
- // whitespace token in this edge case. https://crbug.com/1071296
227
- const trimmedPropertyText = propertyText.trim();
228
- result =
229
- result.trimRight() + indentation + trimmedPropertyText + (trimmedPropertyText.endsWith(':') ? ' ' : '');
230
- needsSemi = false;
231
- insideProperty = false;
232
- propertyName = '';
233
- if (Root.Runtime.experiments.isEnabled('preciseChanges')) {
234
- result += token;
235
- return;
236
- }
237
- // We preserve the legacy behavior to always add semicolon to
238
- // declarations regardless of its original text.
239
- result += ';';
240
- if (token === '}') {
241
- result += '}';
242
- }
243
- } else {
244
- if (cssMetadata().isGridAreaDefiningProperty(propertyName)) {
245
- const rowResult = GridAreaRowRegex.exec(token);
246
- if (rowResult && rowResult.index === 0 && !propertyText.trimRight().endsWith(']')) {
247
- propertyText = propertyText.trimRight() + '\n' + doubleIndent;
248
- }
249
- }
250
- if (!propertyName && token === ':') {
251
- propertyName = propertyText;
252
- }
253
- propertyText += token;
254
- }
164
+ const textBeforeInsertion =
165
+ text.extract(new TextUtils.TextRange.TextRange(0, 0, range.startLine, range.startColumn));
166
+ // If we are appending after the last property and that property doesn't have a semicolon at the end
167
+ // (which is only legal in the last position), then add the semicolon in front of the new text to avoid
168
+ // CSS parsing errors. However, we shouldn't prepend semicolons on the first line or after a comment.
169
+ if (textBeforeInsertion.trim().length && !/[;{\/]\s*$/.test(textBeforeInsertion)) {
170
+ propertyText = ';' + propertyText;
255
171
  }
256
-
257
- function isDisabledProperty(text: string): boolean {
258
- const colon = text.indexOf(':');
259
- if (colon === -1) {
260
- return false;
261
- }
262
- const propertyName = text.substring(2, colon).trim();
263
- return cssMetadata().isCSSPropertyName(propertyName);
264
- }
265
- }
266
-
267
- private detectIndentation(text: string): string {
268
- const lines = text.split('\n');
269
- if (lines.length < 2) {
270
- return '';
271
- }
272
- return TextUtils.TextUtils.Utils.lineIndent(lines[1]);
172
+ const newStyleText = text.replaceRange(range, propertyText);
173
+ return this.ownerStyle.setText(newStyleText, majorChange);
273
174
  }
274
175
 
275
176
  setValue(newValue: string, majorChange: boolean, overwrite: boolean, userCallback?: ((arg0: boolean) => void)): void {
@@ -288,7 +189,18 @@ export class CSSProperty {
288
189
  return Promise.resolve(true);
289
190
  }
290
191
  const propertyText = this.text.trim();
291
- const text = disabled ? '/* ' + propertyText + ' */' : this.text.substring(2, propertyText.length - 2).trim();
192
+ // Ensure that if we try to enable/disable a property that has no semicolon (which is only legal
193
+ // in the last position of a css rule), we add it. This ensures that if we then later try
194
+ // to re-enable/-disable the rule, we end up with legal syntax (if the user adds more properties
195
+ // after the disabled rule).
196
+ const appendSemicolonIfMissing = (propertyText: string): string =>
197
+ propertyText + (propertyText.endsWith(';') ? '' : ';');
198
+ let text: string;
199
+ if (disabled) {
200
+ text = '/* ' + appendSemicolonIfMissing(propertyText) + ' */';
201
+ } else {
202
+ text = appendSemicolonIfMissing(this.text.substring(2, propertyText.length - 2).trim());
203
+ }
292
204
  return this.setText(text, true, true);
293
205
  }
294
206
 
@@ -3,8 +3,8 @@
3
3
  "composite": true
4
4
  },
5
5
  "files": [
6
- "protocol.d.ts",
6
+ "protocol.ts",
7
7
  "protocol-mapping.d.ts",
8
8
  "protocol-proxy-api.d.ts"
9
9
  ]
10
- }
10
+ }