Sha256: 237d0c641e0ed109a4979554338c4ce79afb4af596abaeb7fb07ef3dc47cde5f

Contents?: true

Size: 1.79 KB

Versions: 46

Compression:

Stored size: 1.79 KB

Contents

'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
});

Version data entries

46 entries across 39 versions & 3 rubygems

Version Path
opal-0.10.6 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.10.6.beta stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.10.5 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.10.4 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.10.3 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.10.2 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.10.1 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.10.0 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.10.0.rc2 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.9.4 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.9.3 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.10.0.rc1 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.10.0.beta5 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.10.0.beta4 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.10.0.beta3 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.10.0.beta2 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.10.0.beta1 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.9.2 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.9.0 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
opal-0.9.0.rc1 stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js