blob: 37683912287901503ffc4ec8523601a6e041987b [file] [log] [blame]
/**
* @license
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {Side} from '../constants/constants';
import {IronA11yAnnouncer} from '@polymer/iron-a11y-announcer/iron-a11y-announcer';
import {GrDiffLine} from '../elements/diff/gr-diff/gr-diff-line';
import {FlattenedNodesObserver} from '@polymer/polymer/lib/utils/flattened-nodes-observer';
import {PaperInputElement} from '@polymer/paper-input/paper-input';
import {CommitId} from './common';
export function notUndefined<T>(x: T | undefined): x is T {
return x !== undefined;
}
export interface FixIronA11yAnnouncer extends IronA11yAnnouncer {
requestAvailability(): void;
}
export interface CommitRange {
baseCommit: CommitId;
commit: CommitId;
}
export interface CoverageRange {
type: CoverageType;
side: Side;
code_range: {end_line: number; start_line: number};
}
export enum CoverageType {
/**
* start_character and end_character of the range will be ignored for this
* type.
*/
COVERED = 'COVERED',
/**
* start_character and end_character of the range will be ignored for this
* type.
*/
NOT_COVERED = 'NOT_COVERED',
PARTIALLY_COVERED = 'PARTIALLY_COVERED',
/**
* You don't have to use this. If there is no coverage information for a
* range, then it implicitly means NOT_INSTRUMENTED. start_character and
* end_character of the range will be ignored for this type.
*/
NOT_INSTRUMENTED = 'NOT_INSTRUMENTED',
}
export enum ErrorType {
AUTH = 'AUTH',
NETWORK = 'NETWORK',
GENERIC = 'GENERIC',
}
/**
* We would like to access the the typed `nativeInput` of PaperInputElement, so
* we are creating this wrapper.
*/
export type PaperInputElementExt = PaperInputElement & {
$: {nativeInput?: Element};
};
/**
* If Polymer would have exported DomApiNative from its dom.js utility, then we
* would probably not need this type. We just use it for casting the return
* value of dom(element).
*/
export interface PolymerDomWrapper {
getOwnerRoot(): Node & OwnerRoot;
getEffectiveChildNodes(): Node[];
observeNodes(
callback: (p0: {
target: HTMLElement;
addedNodes: Element[];
removedNodes: Element[];
}) => void
): FlattenedNodesObserver;
unobserveNodes(observerHandle: FlattenedNodesObserver): void;
}
export interface OwnerRoot {
host?: HTMLElement;
}
/**
* Event type for an event fired by Polymer for an element generated from a
* dom-repeat template.
*/
export interface PolymerDomRepeatEvent<TModel = unknown> extends Event {
model: PolymerDomRepeatEventModel<TModel>;
}
/**
* Event type for an event fired by Polymer for an element generated from a
* dom-repeat template.
*/
export interface PolymerDomRepeatCustomEvent<
TModel = unknown,
TDetail = unknown
> extends CustomEvent<TDetail> {
model: PolymerDomRepeatEventModel<TModel>;
}
/**
* Model containing additional information about the dom-repeat element
* that fired an event.
*
* Note: This interface is valid only if both dom-repeat properties 'as' and
* 'indexAs' have default values ('item' and 'index' correspondingly)
*/
export interface PolymerDomRepeatEventModel<T> {
/**
* The item corresponding to the element in the dom-repeat.
*/
item: T;
/**
* The index of the element in the dom-repeat.
*/
index: number;
get: (name: string) => T;
set: (name: string, val: T) => void;
}
/** https://highlightjs.readthedocs.io/en/latest/api.html */
export interface HighlightJSResult {
value: string;
top: unknown;
}
/** https://highlightjs.readthedocs.io/en/latest/api.html */
export interface HighlightJS {
configure(options: {classPrefix: string}): void;
getLanguage(languageName: string): unknown | undefined;
highlight(
languageName: string,
code: string,
ignore_illegals: boolean,
continuation: unknown
): HighlightJSResult;
}
export type DiffLayerListener = (
start: number,
end: number,
side: Side
) => void;
export interface DiffLayer {
annotate(el: HTMLElement, lineEl: HTMLElement, line: GrDiffLine): void;
addListener?(listener: DiffLayerListener): void;
removeListener?(listener: DiffLayerListener): void;
}