@tapie-kr/inspire-react
Version:
React Component Collection for INSPIRE
21 lines (17 loc) • 8.23 kB
JavaScript
/* eslint-disable */
/*
* INSPIRE : Creative Kit
* React Component Collection for INSPIRE
*
* This file is generated automatically. Do not modify it manually
* Generated at : 2025. 3. 4. 오후 6:18:13
* @tapie-kr/inspire-react version: 0.2.15
*
* (c) 2025 TAPIE. All rights reserved.
* MIT License
*/
;
var types = require('./types.js');
const reName=/^[^\\#]?(?:\\(?:[\da-f]{1,6}\s?|.)|[\w\-\u00b0-\uFFFF])+/;const reEscape=/\\([\da-f]{1,6}\s?|(\s)|.)/gi;const actionTypes=new Map([[126,types.AttributeAction.Element],[94,types.AttributeAction.Start],[36,types.AttributeAction.End],[42,types.AttributeAction.Any],[33,types.AttributeAction.Not],[124,types.AttributeAction.Hyphen]]);const unpackPseudos=new Set(["has","not","matches","is","where","host","host-context"]);function isTraversal(selector){switch(selector.type){case types.SelectorType.Adjacent:case types.SelectorType.Child:case types.SelectorType.Descendant:case types.SelectorType.Parent:case types.SelectorType.Sibling:case types.SelectorType.ColumnCombinator:return true;default:return false}}const stripQuotesFromPseudos=new Set(["contains","icontains"]);function funescape(_,escaped,escapedWhitespace){const high=parseInt(escaped,16)-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)}function unescapeCSS(str){return str.replace(reEscape,funescape)}function isQuote(c){return c===39||c===34}function isWhitespace(c){return c===32||c===9||c===10||c===12||c===13}function parse(selector){const subselects=[];const endIndex=parseSelector(subselects,`${selector}`,0);if(endIndex<selector.length){throw new Error(`Unmatched selector: ${selector.slice(endIndex)}`)}return subselects}function parseSelector(subselects,selector,selectorIndex){let tokens=[];function getName(offset){const match=selector.slice(selectorIndex+offset).match(reName);if(!match){throw new Error(`Expected name, found ${selector.slice(selectorIndex)}`)}const[name]=match;selectorIndex+=offset+name.length;return unescapeCSS(name)}function stripWhitespace(offset){selectorIndex+=offset;while(selectorIndex<selector.length&&isWhitespace(selector.charCodeAt(selectorIndex))){selectorIndex++;}}function readValueWithParenthesis(){selectorIndex+=1;const start=selectorIndex;let counter=1;for(;counter>0&&selectorIndex<selector.length;selectorIndex++){if(selector.charCodeAt(selectorIndex)===40&&!isEscaped(selectorIndex)){counter++;}else if(selector.charCodeAt(selectorIndex)===41&&!isEscaped(selectorIndex)){counter--;}}if(counter){throw new Error("Parenthesis not matched")}return unescapeCSS(selector.slice(start,selectorIndex-1))}function isEscaped(pos){let slashCount=0;while(selector.charCodeAt(--pos)===92)slashCount++;return (slashCount&1)===1}function ensureNotTraversal(){if(tokens.length>0&&isTraversal(tokens[tokens.length-1])){throw new Error("Did not expect successive traversals.")}}function addTraversal(type){if(tokens.length>0&&tokens[tokens.length-1].type===types.SelectorType.Descendant){tokens[tokens.length-1].type=type;return}ensureNotTraversal();tokens.push({type});}function addSpecialAttribute(name,action){tokens.push({type:types.SelectorType.Attribute,name,action,value:getName(1),namespace:null,ignoreCase:"quirks"});}function finalizeSubselector(){if(tokens.length&&tokens[tokens.length-1].type===types.SelectorType.Descendant){tokens.pop();}if(tokens.length===0){throw new Error("Empty sub-selector")}subselects.push(tokens);}stripWhitespace(0);if(selector.length===selectorIndex){return selectorIndex}loop:while(selectorIndex<selector.length){const firstChar=selector.charCodeAt(selectorIndex);switch(firstChar){case 32:case 9:case 10:case 12:case 13:{if(tokens.length===0||tokens[0].type!==types.SelectorType.Descendant){ensureNotTraversal();tokens.push({type:types.SelectorType.Descendant});}stripWhitespace(1);break}case 62:{addTraversal(types.SelectorType.Child);stripWhitespace(1);break}case 60:{addTraversal(types.SelectorType.Parent);stripWhitespace(1);break}case 126:{addTraversal(types.SelectorType.Sibling);stripWhitespace(1);break}case 43:{addTraversal(types.SelectorType.Adjacent);stripWhitespace(1);break}case 46:{addSpecialAttribute("class",types.AttributeAction.Element);break}case 35:{addSpecialAttribute("id",types.AttributeAction.Equals);break}case 91:{stripWhitespace(1);let name;let namespace=null;if(selector.charCodeAt(selectorIndex)===124){name=getName(1);}else if(selector.startsWith("*|",selectorIndex)){namespace="*";name=getName(2);}else {name=getName(0);if(selector.charCodeAt(selectorIndex)===124&&selector.charCodeAt(selectorIndex+1)!==61){namespace=name;name=getName(1);}}stripWhitespace(0);let action=types.AttributeAction.Exists;const possibleAction=actionTypes.get(selector.charCodeAt(selectorIndex));if(possibleAction){action=possibleAction;if(selector.charCodeAt(selectorIndex+1)!==61){throw new Error("Expected `=`")}stripWhitespace(2);}else if(selector.charCodeAt(selectorIndex)===61){action=types.AttributeAction.Equals;stripWhitespace(1);}let value="";let ignoreCase=null;if(action!=="exists"){if(isQuote(selector.charCodeAt(selectorIndex))){const quote=selector.charCodeAt(selectorIndex);let sectionEnd=selectorIndex+1;while(sectionEnd<selector.length&&(selector.charCodeAt(sectionEnd)!==quote||isEscaped(sectionEnd))){sectionEnd+=1;}if(selector.charCodeAt(sectionEnd)!==quote){throw new Error("Attribute value didn't end")}value=unescapeCSS(selector.slice(selectorIndex+1,sectionEnd));selectorIndex=sectionEnd+1;}else {const valueStart=selectorIndex;while(selectorIndex<selector.length&&(!isWhitespace(selector.charCodeAt(selectorIndex))&&selector.charCodeAt(selectorIndex)!==93||isEscaped(selectorIndex))){selectorIndex+=1;}value=unescapeCSS(selector.slice(valueStart,selectorIndex));}stripWhitespace(0);const forceIgnore=selector.charCodeAt(selectorIndex)|32;if(forceIgnore===115){ignoreCase=false;stripWhitespace(1);}else if(forceIgnore===105){ignoreCase=true;stripWhitespace(1);}}if(selector.charCodeAt(selectorIndex)!==93){throw new Error("Attribute selector didn't terminate")}selectorIndex+=1;const attributeSelector={type:types.SelectorType.Attribute,name,action,value,namespace,ignoreCase};tokens.push(attributeSelector);break}case 58:{if(selector.charCodeAt(selectorIndex+1)===58){tokens.push({type:types.SelectorType.PseudoElement,name:getName(2).toLowerCase(),data:selector.charCodeAt(selectorIndex)===40?readValueWithParenthesis():null});continue}const name=getName(1).toLowerCase();let data=null;if(selector.charCodeAt(selectorIndex)===40){if(unpackPseudos.has(name)){if(isQuote(selector.charCodeAt(selectorIndex+1))){throw new Error(`Pseudo-selector ${name} cannot be quoted`)}data=[];selectorIndex=parseSelector(data,selector,selectorIndex+1);if(selector.charCodeAt(selectorIndex)!==41){throw new Error(`Missing closing parenthesis in :${name} (${selector})`)}selectorIndex+=1;}else {data=readValueWithParenthesis();if(stripQuotesFromPseudos.has(name)){const quot=data.charCodeAt(0);if(quot===data.charCodeAt(data.length-1)&&isQuote(quot)){data=data.slice(1,-1);}}data=unescapeCSS(data);}}tokens.push({type:types.SelectorType.Pseudo,name,data});break}case 44:{finalizeSubselector();tokens=[];stripWhitespace(1);break}default:{if(selector.startsWith("/*",selectorIndex)){const endIndex=selector.indexOf("*/",selectorIndex+2);if(endIndex<0){throw new Error("Comment was not terminated")}selectorIndex=endIndex+2;if(tokens.length===0){stripWhitespace(0);}break}let namespace=null;let name;if(firstChar===42){selectorIndex+=1;name="*";}else if(firstChar===124){name="";if(selector.charCodeAt(selectorIndex+1)===124){addTraversal(types.SelectorType.ColumnCombinator);stripWhitespace(2);break}}else if(reName.test(selector.slice(selectorIndex))){name=getName(0);}else {break loop}if(selector.charCodeAt(selectorIndex)===124&&selector.charCodeAt(selectorIndex+1)!==124){namespace=name;if(selector.charCodeAt(selectorIndex+1)===42){name="*";selectorIndex+=2;}else {name=getName(1);}}tokens.push(name==="*"?{type:types.SelectorType.Universal,namespace}:{type:types.SelectorType.Tag,name,namespace});}}}finalizeSubselector();return selectorIndex}
exports.isTraversal = isTraversal;
exports.parse = parse;