elearning/Frontend-Learner/node_modules/scslre/index.js

2 lines
12 KiB
JavaScript
Raw Normal View History

2026-01-13 10:46:40 +07:00
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("refa"),t=require("regexp-ast-analysis"),r=require("@eslint-community/regexpp");function n(e,t){const r=new Error(t);throw r.data=e,r}function a(t,r){if(void 0!==r&&!e.JS.isFlags(r))throw new Error("Invalid flags");return e.JS.toLiteral({type:"CharacterClass",characters:t},{flags:r})}function s(e){switch(e.type){case"Character":case"CharacterClass":case"CharacterSet":case"ExpressionCharacterClass":return!0;default:return!1}}function i(e){return"Quantifier"===e.type&&s(e.element)}function c(e,r){if(Array.isArray(e)){if(0===e.length)return{consume:t.Chars.empty(r),assert:t.Chars.all(r)};if(1===e.length)return e[0]}let n=t.Chars.empty(r),a=t.Chars.all(r);for(const t of e)if(n=n.intersect(t.consume.union(t.assert)).union(t.consume.intersect(a)),a=a.intersect(t.assert),a.isEmpty&&n.isEmpty)break;return{consume:n,assert:a}}function o(e,r){return u(e,t.Chars.empty(r))}function u(e,t){if(Array.isArray(e)&&1===e.length)return e[0];let r=t,n=t;for(const t of e)r=r.union(t.consume),n=n.union(t.assert);return{consume:r,assert:n}}function l(t){return{consume:e.CharSet.empty(t.consume.maximum),assert:t.consume.union(t.assert)}}function m(r,a){if(Array.isArray(r))return o(r.map((e=>m(e,a))),a);switch(r.type){case"Alternative":return c(function*(){for(const e of r.elements)yield m(e,a)}(),a);case"Assertion":switch(r.kind){case"end":case"start":return a.multiline?{consume:t.Chars.empty(a),assert:t.Chars.lineTerminator(a)}:{consume:t.Chars.empty(a),assert:t.Chars.empty(a)};case"word":{const e=t.Chars.word(a),n=e.negate();for(const s of["ltr","rtl"]){const i=t.getFirstCharAfter(r,s,a);if(!i.edge){if(i.char.isSubsetOf(e))return{consume:t.Chars.empty(a),assert:r.negate?e:n};if(i.char.isSubsetOf(n))return{consume:t.Chars.empty(a),assert:r.negate?n:e}}}return r.negate?{consume:t.Chars.empty(a),assert:t.Chars.all(a)}:{consume:t.Chars.empty(a),assert:t.Chars.empty(a)}}case"lookahead":case"lookbehind":{const e=l(m(r.alternatives,a));return r.negate?{consume:t.Chars.empty(a),assert:e.assert.negate()}:e}}return n(r);case"CapturingGroup":case"Group":case"Pattern":return m(r.alternatives,a);case"Character":case"CharacterClass":case"CharacterSet":case"ExpressionCharacterClass":case"ClassIntersection":case"ClassSubtraction":case"ClassStringDisjunction":case"StringAlternative":return function(t){const r=e.CharSet.empty(t.chars.maximum),n=e.CharSet.all(t.chars.maximum),a={consume:t.chars,assert:r};return t.isEmpty||t.accept.isEmpty?a:u([a,...t.accept.wordSets.map((e=>{if(0===e.length)return{consume:r,assert:n};let t=e[0];for(let r=1;r<e.length;r++)t=t.intersect(e[r]);return{consume:t,assert:r}}))],e.CharSet.empty(t.chars.maximum))}(t.toUnicodeSet(r,a));case"Quantifier":return 0===r.max?{consume:t.Chars.empty(a),assert:t.Chars.all(a)}:0===r.min?{consume:m(r.element,a).consume,assert:t.Chars.all(a)}:m(r.element,a);case"RegExpLiteral":return m(r.pattern,a);case"Backreference":if(t.isEmptyBackreference(r,a))return{consume:t.Chars.empty(a),assert:t.Chars.all(a)};{const e=m(r.resolved,a);return t.isStrictBackreference(r)?e:{consume:e.consume,assert:t.Chars.all(a)}}case"CharacterClassRange":case"Flags":throw new Error("This doesn't make any sense");default:n(r)}}function f(e,r,a,s,i){return 1===t.followPaths(e,"enter",0,{fork:e=>e,join:e=>e.every((e=>2===e))?2:e.some((e=>1===e))?1:0,assert:(e,t,r)=>1===r?r:e,continueAfter:(t,r)=>t!==e&&0===r,continueInto:(e,t)=>0===t,enter:(e,t)=>e===r?1:t,leave(e,t){if(0!==t)return t;switch(e.type){case"Assertion":case"Backreference":case"Character":case"CharacterClass":case"CharacterSet":case"ExpressionCharacterClass":{const t=m(e,i),r=t.consume.union(t.assert);return a.isSubsetOf(r)?0:2}case"CapturingGroup":case"Group":case"Quantifier":return t;default:n(e)}}},s)}function p(e){let r=t.getEffectiveMaximumRepetition(e);return"Quantifier"===e.type&&(r*=e.max),r>20}function h(e){let t;if(0===e.min&&1===e.max)t="?";else if(0===e.min&&e.max===1/0)t="*";else if(1===e.min&&e.max===1/0)t="+";else{if(e.min===e.max)return 1===e.min?"":`{${e.min}}`;t=e.ma