MCPcopy Index your code
hub / github.com/NativeScript/NativeScript / createSelectorFromAst

Function createSelectorFromAst

packages/core/ui/styling/css-selector.ts:881–934  ·  view source on GitHub ↗
(asts: Array<CSSWhatSelector>)

Source from the content-addressed store, hash-verified

879}
880
881function createSelectorFromAst(asts: Array<CSSWhatSelector>): SimpleSelector | SimpleSelectorSequence | ComplexSelector {
882 let result: SimpleSelector | SimpleSelectorSequence | ComplexSelector;
883
884 if (asts.length === 0) {
885 return new InvalidSelector(new Error('Empty selector.'));
886 }
887
888 if (asts.length === 1) {
889 return createSimpleSelectorFromAst(asts[0]);
890 }
891
892 const simpleSelectorSequences: Array<SimpleSelector | SimpleSelectorSequence> = [];
893
894 let sequenceAsts: CSSWhatSelector[] = [];
895 let combinatorCount: number = 0;
896
897 for (const ast of asts) {
898 const combinator = Combinator[ast.type];
899
900 // Combinator means the end of a sequence
901 if (combinator != null) {
902 const selector = createSimpleSelectorSequenceFromAst(sequenceAsts);
903
904 if (selector instanceof InvalidSelector) {
905 return selector;
906 }
907
908 selector.combinator = combinator;
909 simpleSelectorSequences.push(selector);
910
911 combinatorCount++;
912 // Cleanup stored selectors for the new sequence to take place
913 sequenceAsts = [];
914 } else {
915 sequenceAsts.push(ast);
916 }
917 }
918
919 if (combinatorCount > 0) {
920 // Create a sequence using the remaining selectors after the last combinator
921 if (sequenceAsts.length) {
922 const selector = createSimpleSelectorSequenceFromAst(sequenceAsts);
923
924 if (selector instanceof InvalidSelector) {
925 return selector;
926 }
927
928 simpleSelectorSequences.push(selector);
929 }
930 return new ComplexSelector(simpleSelectorSequences);
931 }
932
933 return createSimpleSelectorSequenceFromAst(sequenceAsts);
934}
935
936export function createSelector(sel: string): SimpleSelector | SimpleSelectorSequence | ComplexSelector {
937 try {

Callers 2

constructorFunction · 0.85
createSelectorFunction · 0.85

Calls 3

pushMethod · 0.45

Tested by

no test coverage detected