ut-tools
Version:
Build and Release management automation package.
70 lines (59 loc) • 1.65 kB
JavaScript
var index = (function () {
'use strict';
const FSLASH_CODE = 47; // '/'
const BSLASH_CODE = 92; // '\\'
var index = {
name: 'regex',
init(jsep) {
// Regex literal: /abc123/ig
jsep.hooks.add('gobble-token', function gobbleRegexLiteral(env) {
if (this.code === FSLASH_CODE) {
const patternIndex = ++this.index;
let inCharSet = false;
while (this.index < this.expr.length) {
if (this.code === FSLASH_CODE && !inCharSet) {
const pattern = this.expr.slice(patternIndex, this.index);
let flags = '';
while (++this.index < this.expr.length) {
const code = this.code;
if ((code >= 97 && code <= 122) // a...z
|| (code >= 65 && code <= 90) // A...Z
|| (code >= 48 && code <= 57)) { // 0-9
flags += this.char;
}
else {
break;
}
}
let value;
try {
value = new RegExp(pattern, flags);
}
catch (e) {
this.throwError(e.message);
}
env.node = {
type: jsep.LITERAL,
value,
raw: this.expr.slice(patternIndex - 1, this.index),
};
// allow . [] and () after regex: /regex/.test(a)
env.node = this.gobbleTokenProperty(env.node);
return env.node;
}
if (this.code === jsep.OBRACK_CODE) {
inCharSet = true;
}
else if (inCharSet && this.code === jsep.CBRACK_CODE) {
inCharSet = false;
}
this.index += this.code === BSLASH_CODE ? 2 : 1;
}
this.throwError('Unclosed Regex');
}
});
},
};
return index;
}());
//# sourceMappingURL=index.iife.js.map