.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / regex-not / index.js
1 'use strict';
2
3 var extend = require('extend-shallow');
4 var safe = require('safe-regex');
5
6 /**
7  * The main export is a function that takes a `pattern` string and an `options` object.
8  *
9  * ```js
10  & var not = require('regex-not');
11  & console.log(not('foo'));
12  & //=> /^(?:(?!^(?:foo)$).)*$/
13  * ```
14  *
15  * @param {String} `pattern`
16  * @param {Object} `options`
17  * @return {RegExp} Converts the given `pattern` to a regex using the specified `options`.
18  * @api public
19  */
20
21 function toRegex(pattern, options) {
22   return new RegExp(toRegex.create(pattern, options));
23 }
24
25 /**
26  * Create a regex-compatible string from the given `pattern` and `options`.
27  *
28  * ```js
29  & var not = require('regex-not');
30  & console.log(not.create('foo'));
31  & //=> '^(?:(?!^(?:foo)$).)*$'
32  * ```
33  * @param {String} `pattern`
34  * @param {Object} `options`
35  * @return {String}
36  * @api public
37  */
38
39 toRegex.create = function(pattern, options) {
40   if (typeof pattern !== 'string') {
41     throw new TypeError('expected a string');
42   }
43
44   var opts = extend({}, options);
45   if (opts.contains === true) {
46     opts.strictNegate = false;
47   }
48
49   var open = opts.strictOpen !== false ? '^' : '';
50   var close = opts.strictClose !== false ? '$' : '';
51   var endChar = opts.endChar ? opts.endChar : '+';
52   var str = pattern;
53
54   if (opts.strictNegate === false) {
55     str = '(?:(?!(?:' + pattern + ')).)' + endChar;
56   } else {
57     str = '(?:(?!^(?:' + pattern + ')$).)' + endChar;
58   }
59
60   var res = open + str + close;
61   if (opts.safe === true && safe(res) === false) {
62     throw new Error('potentially unsafe regular expression: ' + res);
63   }
64
65   return res;
66 };
67
68 /**
69  * Expose `toRegex`
70  */
71
72 module.exports = toRegex;