81 lines
2.2 KiB
TypeScript
81 lines
2.2 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google Inc. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
|
|
import {LContainerNode, LElementNode, LTextNode} from './node';
|
|
|
|
/**
|
|
* Linked list of projected nodes (using the pNextOrParent property).
|
|
*/
|
|
export interface LProjection {
|
|
head: LElementNode|LTextNode|LContainerNode|null;
|
|
tail: LElementNode|LTextNode|LContainerNode|null;
|
|
}
|
|
|
|
/**
|
|
* Expresses a single CSS Selector.
|
|
*
|
|
* Beginning of array
|
|
* - First index: element name
|
|
* - Subsequent odd indices: attr keys
|
|
* - Subsequent even indices: attr values
|
|
*
|
|
* After SelectorFlags.CLASS flag
|
|
* - Class name values
|
|
*
|
|
* SelectorFlags.NOT flag
|
|
* - Changes the mode to NOT
|
|
* - Can be combined with other flags to set the element / attr / class mode
|
|
*
|
|
* e.g. SelectorFlags.NOT | SelectorFlags.ELEMENT
|
|
*
|
|
* Example:
|
|
* Original: `div.foo.bar[attr1=val1][attr2]`
|
|
* Parsed: ['div', 'attr1', 'val1', 'attr2', '', SelectorFlags.CLASS, 'foo', 'bar']
|
|
*
|
|
* Original: 'div[attr1]:not(.foo[attr2])
|
|
* Parsed: [
|
|
* 'div', 'attr1', '',
|
|
* SelectorFlags.NOT | SelectorFlags.ATTRIBUTE 'attr2', '', SelectorFlags.CLASS, 'foo'
|
|
* ]
|
|
*
|
|
* See more examples in node_selector_matcher_spec.ts
|
|
*/
|
|
export type CssSelector = (string | SelectorFlags)[];
|
|
|
|
/**
|
|
* A list of CssSelectors.
|
|
*
|
|
* A directive or component can have multiple selectors. This type is used for
|
|
* directive defs so any of the selectors in the list will match that directive.
|
|
*
|
|
* Original: 'form, [ngForm]'
|
|
* Parsed: [['form'], ['', 'ngForm', '']]
|
|
*/
|
|
export type CssSelectorList = CssSelector[];
|
|
|
|
/** Flags used to build up CssSelectors */
|
|
export const enum SelectorFlags {
|
|
/** Indicates this is the beginning of a new negative selector */
|
|
NOT = 0b0001,
|
|
|
|
/** Mode for matching attributes */
|
|
ATTRIBUTE = 0b0010,
|
|
|
|
/** Mode for matching tag names */
|
|
ELEMENT = 0b0100,
|
|
|
|
/** Mode for matching class names */
|
|
CLASS = 0b1000,
|
|
}
|
|
|
|
export const NG_PROJECT_AS_ATTR_NAME = 'ngProjectAs';
|
|
|
|
// Note: This hack is necessary so we don't erroneously get a circular dependency
|
|
// failure based on types.
|
|
export const unusedValueExportToPlacateAjd = 1;
|