summaryrefslogtreecommitdiff
path: root/tools/eslint/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/eslint/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js')
-rw-r--r--tools/eslint/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js84
1 files changed, 84 insertions, 0 deletions
diff --git a/tools/eslint/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js b/tools/eslint/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
new file mode 100644
index 0000000000..07ef5218ed
--- /dev/null
+++ b/tools/eslint/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
@@ -0,0 +1,84 @@
+'use strict';
+
+var Type = require('../../type');
+
+function resolveJavascriptRegExp(data) {
+ if (null === data) {
+ return false;
+ }
+
+ if (0 === data.length) {
+ return false;
+ }
+
+ var regexp = data,
+ tail = /\/([gim]*)$/.exec(data),
+ modifiers = '';
+
+ // if regexp starts with '/' it can have modifiers and must be properly closed
+ // `/foo/gim` - modifiers tail can be maximum 3 chars
+ if ('/' === regexp[0]) {
+ if (tail) {
+ modifiers = tail[1];
+ }
+
+ if (modifiers.length > 3) { return false; }
+ // if expression starts with /, is should be properly terminated
+ if (regexp[regexp.length - modifiers.length - 1] !== '/') { return false; }
+
+ regexp = regexp.slice(1, regexp.length - modifiers.length - 1);
+ }
+
+ try {
+ var dummy = new RegExp(regexp, modifiers);
+ return true;
+ } catch (error) {
+ return false;
+ }
+}
+
+function constructJavascriptRegExp(data) {
+ var regexp = data,
+ tail = /\/([gim]*)$/.exec(data),
+ modifiers = '';
+
+ // `/foo/gim` - tail can be maximum 4 chars
+ if ('/' === regexp[0]) {
+ if (tail) {
+ modifiers = tail[1];
+ }
+ regexp = regexp.slice(1, regexp.length - modifiers.length - 1);
+ }
+
+ return new RegExp(regexp, modifiers);
+}
+
+function representJavascriptRegExp(object /*, style*/) {
+ var result = '/' + object.source + '/';
+
+ if (object.global) {
+ result += 'g';
+ }
+
+ if (object.multiline) {
+ result += 'm';
+ }
+
+ if (object.ignoreCase) {
+ result += 'i';
+ }
+
+ return result;
+}
+
+function isRegExp(object) {
+ return '[object RegExp]' === Object.prototype.toString.call(object);
+}
+
+module.exports = new Type('tag:yaml.org,2002:js/regexp', {
+ kind: 'scalar',
+ resolve: resolveJavascriptRegExp,
+ construct: constructJavascriptRegExp,
+ predicate: isRegExp,
+ represent: representJavascriptRegExp
+});