UNPKG

@altostra/core

Version:

Core library for shared types and logic

1 lines 1.14 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.flags=exports.regexpLiteral=exports.regexp=void 0;const Errors_1=require("../Errors"),rxLiteralSym=Symbol("regexp-literal"),rxFlagsSym=Symbol("regexp-flags");function regexp(e,...r){const t=e.raw,s=[t[0]];let l=void 0;isRegExpFlags(r[r.length-1])&&(l=r.pop()[rxFlagsSym]);for(let e=0;e<r.length;e++){const l=r[e];if(isRegExpFlags(l))throw Errors_1.AltoError.create("RegExp flags must be given as the last value");const o=isRegexpLiteral(l)?l.toString():escape(String(l));s.push(o,t[e+1])}return new RegExp(s.join(""),l)}function regexpLiteral(e){return{[rxLiteralSym]:e,toString:()=>"string"==typeof e?e:e.source}}function isRegexpLiteral(e){return"object"==typeof e&&null!==e&&rxLiteralSym in e&&("string"==typeof e[rxLiteralSym]||e[rxLiteralSym]instanceof RegExp)}function escape(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}function flags(e){return{[rxFlagsSym]:e}}function isRegExpFlags(e){return"object"==typeof e&&null!==e&&rxFlagsSym in e&&"string"==typeof e[rxFlagsSym]}exports.regexp=regexp,exports.regexpLiteral=regexpLiteral,exports.flags=flags;