UNPKG

110 kBJavaScriptView Raw
1(function webpackUniversalModuleDefinition(root, factory) {
2 if(typeof exports === 'object' && typeof module === 'object')
3 module.exports = factory();
4 else if(typeof define === 'function' && define.amd)
5 define([], factory);
6 else if(typeof exports === 'object')
7 exports["sqlFormatter"] = factory();
8 else
9 root["sqlFormatter"] = factory();
10})(this, function() {
11return /******/ (function(modules) { // webpackBootstrap
12/******/ // The module cache
13/******/ var installedModules = {};
14
15/******/ // The require function
16/******/ function __webpack_require__(moduleId) {
17
18/******/ // Check if module is in cache
19/******/ if(installedModules[moduleId])
20/******/ return installedModules[moduleId].exports;
21
22/******/ // Create a new module (and put it into the cache)
23/******/ var module = installedModules[moduleId] = {
24/******/ exports: {},
25/******/ id: moduleId,
26/******/ loaded: false
27/******/ };
28
29/******/ // Execute the module function
30/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
31
32/******/ // Flag the module as loaded
33/******/ module.loaded = true;
34
35/******/ // Return the exports of the module
36/******/ return module.exports;
37/******/ }
38
39
40/******/ // expose the modules object (__webpack_modules__)
41/******/ __webpack_require__.m = modules;
42
43/******/ // expose the module cache
44/******/ __webpack_require__.c = installedModules;
45
46/******/ // __webpack_public_path__
47/******/ __webpack_require__.p = "";
48
49/******/ // Load entry module and return exports
50/******/ return __webpack_require__(0);
51/******/ })
52/************************************************************************/
53/******/ ([
54/* 0 */
55/***/ (function(module, exports, __webpack_require__) {
56
57 "use strict";
58
59 exports.__esModule = true;
60
61 var _Db2Formatter = __webpack_require__(24);
62
63 var _Db2Formatter2 = _interopRequireDefault(_Db2Formatter);
64
65 var _N1qlFormatter = __webpack_require__(25);
66
67 var _N1qlFormatter2 = _interopRequireDefault(_N1qlFormatter);
68
69 var _PlSqlFormatter = __webpack_require__(26);
70
71 var _PlSqlFormatter2 = _interopRequireDefault(_PlSqlFormatter);
72
73 var _StandardSqlFormatter = __webpack_require__(27);
74
75 var _StandardSqlFormatter2 = _interopRequireDefault(_StandardSqlFormatter);
76
77 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
78
79 exports["default"] = {
80 /**
81 * Format whitespaces in a query to make it easier to read.
82 *
83 * @param {String} query
84 * @param {Object} cfg
85 * @param {String} cfg.language Query language, default is Standard SQL
86 * @param {String} cfg.indent Characters used for indentation, default is " " (2 spaces)
87 * @param {Object} cfg.params Collection of params for placeholder replacement
88 * @return {String}
89 */
90 format: function format(query, cfg) {
91 cfg = cfg || {};
92
93 switch (cfg.language) {
94 case "db2":
95 return new _Db2Formatter2["default"](cfg).format(query);
96 case "n1ql":
97 return new _N1qlFormatter2["default"](cfg).format(query);
98 case "pl/sql":
99 return new _PlSqlFormatter2["default"](cfg).format(query);
100 case "sql":
101 case undefined:
102 return new _StandardSqlFormatter2["default"](cfg).format(query);
103 default:
104 throw Error("Unsupported SQL dialect: " + cfg.language);
105 }
106 }
107 };
108 module.exports = exports["default"];
109
110/***/ }),
111/* 1 */
112/***/ (function(module, exports, __webpack_require__) {
113
114 var freeGlobal = __webpack_require__(12);
115
116 /** Detect free variable `self`. */
117 var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
118
119 /** Used as a reference to the global object. */
120 var root = freeGlobal || freeSelf || Function('return this')();
121
122 module.exports = root;
123
124
125/***/ }),
126/* 2 */
127/***/ (function(module, exports, __webpack_require__) {
128
129 var Symbol = __webpack_require__(9),
130 getRawTag = __webpack_require__(48),
131 objectToString = __webpack_require__(57);
132
133 /** `Object#toString` result references. */
134 var nullTag = '[object Null]',
135 undefinedTag = '[object Undefined]';
136
137 /** Built-in value references. */
138 var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
139
140 /**
141 * The base implementation of `getTag` without fallbacks for buggy environments.
142 *
143 * @private
144 * @param {*} value The value to query.
145 * @returns {string} Returns the `toStringTag`.
146 */
147 function baseGetTag(value) {
148 if (value == null) {
149 return value === undefined ? undefinedTag : nullTag;
150 }
151 return (symToStringTag && symToStringTag in Object(value))
152 ? getRawTag(value)
153 : objectToString(value);
154 }
155
156 module.exports = baseGetTag;
157
158
159/***/ }),
160/* 3 */
161/***/ (function(module, exports, __webpack_require__) {
162
163 var baseIsNative = __webpack_require__(39),
164 getValue = __webpack_require__(50);
165
166 /**
167 * Gets the native function at `key` of `object`.
168 *
169 * @private
170 * @param {Object} object The object to query.
171 * @param {string} key The key of the method to get.
172 * @returns {*} Returns the function if it's native, else `undefined`.
173 */
174 function getNative(object, key) {
175 var value = getValue(object, key);
176 return baseIsNative(value) ? value : undefined;
177 }
178
179 module.exports = getNative;
180
181
182/***/ }),
183/* 4 */
184/***/ (function(module, exports, __webpack_require__) {
185
186 "use strict";
187
188 exports.__esModule = true;
189
190 var _trimEnd = __webpack_require__(74);
191
192 var _trimEnd2 = _interopRequireDefault(_trimEnd);
193
194 var _tokenTypes = __webpack_require__(8);
195
196 var _tokenTypes2 = _interopRequireDefault(_tokenTypes);
197
198 var _Indentation = __webpack_require__(21);
199
200 var _Indentation2 = _interopRequireDefault(_Indentation);
201
202 var _InlineBlock = __webpack_require__(22);
203
204 var _InlineBlock2 = _interopRequireDefault(_InlineBlock);
205
206 var _Params = __webpack_require__(23);
207
208 var _Params2 = _interopRequireDefault(_Params);
209
210 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
211
212 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
213
214 var Formatter = function () {
215 /**
216 * @param {Object} cfg
217 * @param {Object} cfg.indent
218 * @param {Object} cfg.params
219 * @param {Tokenizer} tokenizer
220 */
221 function Formatter(cfg, tokenizer) {
222 _classCallCheck(this, Formatter);
223
224 this.cfg = cfg || {};
225 this.indentation = new _Indentation2["default"](this.cfg.indent);
226 this.inlineBlock = new _InlineBlock2["default"]();
227 this.params = new _Params2["default"](this.cfg.params);
228 this.tokenizer = tokenizer;
229 this.previousReservedWord = {};
230 this.tokens = [];
231 this.index = 0;
232 }
233
234 /**
235 * Formats whitespaces in a SQL string to make it easier to read.
236 *
237 * @param {String} query The SQL query string
238 * @return {String} formatted query
239 */
240
241
242 Formatter.prototype.format = function format(query) {
243 this.tokens = this.tokenizer.tokenize(query);
244 var formattedQuery = this.getFormattedQueryFromTokens();
245
246 return formattedQuery.trim();
247 };
248
249 Formatter.prototype.getFormattedQueryFromTokens = function getFormattedQueryFromTokens() {
250 var _this = this;
251
252 var formattedQuery = "";
253
254 this.tokens.forEach(function (token, index) {
255 _this.index = index;
256
257 if (token.type === _tokenTypes2["default"].WHITESPACE) {
258 // ignore (we do our own whitespace formatting)
259 } else if (token.type === _tokenTypes2["default"].LINE_COMMENT) {
260 formattedQuery = _this.formatLineComment(token, formattedQuery);
261 } else if (token.type === _tokenTypes2["default"].BLOCK_COMMENT) {
262 formattedQuery = _this.formatBlockComment(token, formattedQuery);
263 } else if (token.type === _tokenTypes2["default"].RESERVED_TOPLEVEL) {
264 formattedQuery = _this.formatToplevelReservedWord(token, formattedQuery);
265 _this.previousReservedWord = token;
266 } else if (token.type === _tokenTypes2["default"].RESERVED_NEWLINE) {
267 formattedQuery = _this.formatNewlineReservedWord(token, formattedQuery);
268 _this.previousReservedWord = token;
269 } else if (token.type === _tokenTypes2["default"].RESERVED) {
270 formattedQuery = _this.formatWithSpaces(token, formattedQuery);
271 _this.previousReservedWord = token;
272 } else if (token.type === _tokenTypes2["default"].OPEN_PAREN) {
273 formattedQuery = _this.formatOpeningParentheses(token, formattedQuery);
274 } else if (token.type === _tokenTypes2["default"].CLOSE_PAREN) {
275 formattedQuery = _this.formatClosingParentheses(token, formattedQuery);
276 } else if (token.type === _tokenTypes2["default"].PLACEHOLDER) {
277 formattedQuery = _this.formatPlaceholder(token, formattedQuery);
278 } else if (token.value === ",") {
279 formattedQuery = _this.formatComma(token, formattedQuery);
280 } else if (token.value === ":") {
281 formattedQuery = _this.formatWithSpaceAfter(token, formattedQuery);
282 } else if (token.value === "." || token.value === ";") {
283 formattedQuery = _this.formatWithoutSpaces(token, formattedQuery);
284 } else {
285 formattedQuery = _this.formatWithSpaces(token, formattedQuery);
286 }
287 });
288 return formattedQuery;
289 };
290
291 Formatter.prototype.formatLineComment = function formatLineComment(token, query) {
292 return this.addNewline(query + token.value);
293 };
294
295 Formatter.prototype.formatBlockComment = function formatBlockComment(token, query) {
296 return this.addNewline(this.addNewline(query) + this.indentComment(token.value));
297 };
298
299 Formatter.prototype.indentComment = function indentComment(comment) {
300 return comment.replace(/\n/g, "\n" + this.indentation.getIndent());
301 };
302
303 Formatter.prototype.formatToplevelReservedWord = function formatToplevelReservedWord(token, query) {
304 this.indentation.decreaseTopLevel();
305
306 query = this.addNewline(query);
307
308 this.indentation.increaseToplevel();
309
310 query += this.equalizeWhitespace(token.value);
311 return this.addNewline(query);
312 };
313
314 Formatter.prototype.formatNewlineReservedWord = function formatNewlineReservedWord(token, query) {
315 return this.addNewline(query) + this.equalizeWhitespace(token.value) + " ";
316 };
317
318 // Replace any sequence of whitespace characters with single space
319
320
321 Formatter.prototype.equalizeWhitespace = function equalizeWhitespace(string) {
322 return string.replace(/\s+/g, " ");
323 };
324
325 // Opening parentheses increase the block indent level and start a new line
326
327
328 Formatter.prototype.formatOpeningParentheses = function formatOpeningParentheses(token, query) {
329 // Take out the preceding space unless there was whitespace there in the original query
330 // or another opening parens or line comment
331 var preserveWhitespaceFor = [_tokenTypes2["default"].WHITESPACE, _tokenTypes2["default"].OPEN_PAREN, _tokenTypes2["default"].LINE_COMMENT];
332 if (!preserveWhitespaceFor.includes(this.previousToken().type)) {
333 query = (0, _trimEnd2["default"])(query);
334 }
335 query += token.value;
336
337 this.inlineBlock.beginIfPossible(this.tokens, this.index);
338
339 if (!this.inlineBlock.isActive()) {
340 this.indentation.increaseBlockLevel();
341 query = this.addNewline(query);
342 }
343 return query;
344 };
345
346 // Closing parentheses decrease the block indent level
347
348
349 Formatter.prototype.formatClosingParentheses = function formatClosingParentheses(token, query) {
350 if (this.inlineBlock.isActive()) {
351 this.inlineBlock.end();
352 return this.formatWithSpaceAfter(token, query);
353 } else {
354 this.indentation.decreaseBlockLevel();
355 return this.formatWithSpaces(token, this.addNewline(query));
356 }
357 };
358
359 Formatter.prototype.formatPlaceholder = function formatPlaceholder(token, query) {
360 return query + this.params.get(token) + " ";
361 };
362
363 // Commas start a new line (unless within inline parentheses or SQL "LIMIT" clause)
364
365
366 Formatter.prototype.formatComma = function formatComma(token, query) {
367 query = this.trimTrailingWhitespace(query) + token.value + " ";
368
369 if (this.inlineBlock.isActive()) {
370 return query;
371 } else if (/^LIMIT$/i.test(this.previousReservedWord.value)) {
372 return query;
373 } else {
374 return this.addNewline(query);
375 }
376 };
377
378 Formatter.prototype.formatWithSpaceAfter = function formatWithSpaceAfter(token, query) {
379 return this.trimTrailingWhitespace(query) + token.value + " ";
380 };
381
382 Formatter.prototype.formatWithoutSpaces = function formatWithoutSpaces(token, query) {
383 return this.trimTrailingWhitespace(query) + token.value;
384 };
385
386 Formatter.prototype.formatWithSpaces = function formatWithSpaces(token, query) {
387 return query + token.value + " ";
388 };
389
390 Formatter.prototype.addNewline = function addNewline(query) {
391 return (0, _trimEnd2["default"])(query) + "\n" + this.indentation.getIndent();
392 };
393
394 Formatter.prototype.trimTrailingWhitespace = function trimTrailingWhitespace(query) {
395 if (this.previousNonWhitespaceToken().type === _tokenTypes2["default"].LINE_COMMENT) {
396 return (0, _trimEnd2["default"])(query) + "\n";
397 } else {
398 return (0, _trimEnd2["default"])(query);
399 }
400 };
401
402 Formatter.prototype.previousNonWhitespaceToken = function previousNonWhitespaceToken() {
403 var n = 1;
404 while (this.previousToken(n).type === _tokenTypes2["default"].WHITESPACE) {
405 n++;
406 }
407 return this.previousToken(n);
408 };
409
410 Formatter.prototype.previousToken = function previousToken() {
411 var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
412
413 return this.tokens[this.index - offset] || {};
414 };
415
416 return Formatter;
417 }();
418
419 exports["default"] = Formatter;
420 module.exports = exports["default"];
421
422/***/ }),
423/* 5 */
424/***/ (function(module, exports, __webpack_require__) {
425
426 "use strict";
427
428 exports.__esModule = true;
429
430 var _isEmpty = __webpack_require__(66);
431
432 var _isEmpty2 = _interopRequireDefault(_isEmpty);
433
434 var _escapeRegExp = __webpack_require__(63);
435
436 var _escapeRegExp2 = _interopRequireDefault(_escapeRegExp);
437
438 var _tokenTypes = __webpack_require__(8);
439
440 var _tokenTypes2 = _interopRequireDefault(_tokenTypes);
441
442 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
443
444 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
445
446 var Tokenizer = function () {
447 /**
448 * @param {Object} cfg
449 * @param {String[]} cfg.reservedWords Reserved words in SQL
450 * @param {String[]} cfg.reservedToplevelWords Words that are set to new line separately
451 * @param {String[]} cfg.reservedNewlineWords Words that are set to newline
452 * @param {String[]} cfg.stringTypes String types to enable: "", '', ``, [], N''
453 * @param {String[]} cfg.openParens Opening parentheses to enable, like (, [
454 * @param {String[]} cfg.closeParens Closing parentheses to enable, like ), ]
455 * @param {String[]} cfg.indexedPlaceholderTypes Prefixes for indexed placeholders, like ?
456 * @param {String[]} cfg.namedPlaceholderTypes Prefixes for named placeholders, like @ and :
457 * @param {String[]} cfg.lineCommentTypes Line comments to enable, like # and --
458 * @param {String[]} cfg.specialWordChars Special chars that can be found inside of words, like @ and #
459 */
460 function Tokenizer(cfg) {
461 _classCallCheck(this, Tokenizer);
462
463 this.WHITESPACE_REGEX = /^(\s+)/;
464 this.NUMBER_REGEX = /^((-\s*)?[0-9]+(\.[0-9]+)?|0x[0-9a-fA-F]+|0b[01]+)\b/;
465 this.OPERATOR_REGEX = /^(!=|<>|==|<=|>=|!<|!>|\|\||::|->>|->|~~\*|~~|!~~\*|!~~|~\*|!~\*|!~|.)/;
466
467 this.BLOCK_COMMENT_REGEX = /^(\/\*[^]*?(?:\*\/|$))/;
468 this.LINE_COMMENT_REGEX = this.createLineCommentRegex(cfg.lineCommentTypes);
469
470 this.RESERVED_TOPLEVEL_REGEX = this.createReservedWordRegex(cfg.reservedToplevelWords);
471 this.RESERVED_NEWLINE_REGEX = this.createReservedWordRegex(cfg.reservedNewlineWords);
472 this.RESERVED_PLAIN_REGEX = this.createReservedWordRegex(cfg.reservedWords);
473
474 this.WORD_REGEX = this.createWordRegex(cfg.specialWordChars);
475 this.STRING_REGEX = this.createStringRegex(cfg.stringTypes);
476
477 this.OPEN_PAREN_REGEX = this.createParenRegex(cfg.openParens);
478 this.CLOSE_PAREN_REGEX = this.createParenRegex(cfg.closeParens);
479
480 this.INDEXED_PLACEHOLDER_REGEX = this.createPlaceholderRegex(cfg.indexedPlaceholderTypes, "[0-9]*");
481 this.IDENT_NAMED_PLACEHOLDER_REGEX = this.createPlaceholderRegex(cfg.namedPlaceholderTypes, "[a-zA-Z0-9._$]+");
482 this.STRING_NAMED_PLACEHOLDER_REGEX = this.createPlaceholderRegex(cfg.namedPlaceholderTypes, this.createStringPattern(cfg.stringTypes));
483 }
484
485 Tokenizer.prototype.createLineCommentRegex = function createLineCommentRegex(lineCommentTypes) {
486 return new RegExp("^((?:" + lineCommentTypes.map(function (c) {
487 return (0, _escapeRegExp2["default"])(c);
488 }).join("|") + ").*?(?:\n|$))");
489 };
490
491 Tokenizer.prototype.createReservedWordRegex = function createReservedWordRegex(reservedWords) {
492 var reservedWordsPattern = reservedWords.join("|").replace(/ /g, "\\s+");
493 return new RegExp("^(" + reservedWordsPattern + ")\\b", "i");
494 };
495
496 Tokenizer.prototype.createWordRegex = function createWordRegex() {
497 var specialChars = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
498
499 return new RegExp("^([\\w" + specialChars.join("") + "]+)");
500 };
501
502 Tokenizer.prototype.createStringRegex = function createStringRegex(stringTypes) {
503 return new RegExp("^(" + this.createStringPattern(stringTypes) + ")");
504 };
505
506 // This enables the following string patterns:
507 // 1. backtick quoted string using `` to escape
508 // 2. square bracket quoted string (SQL Server) using ]] to escape
509 // 3. double quoted string using "" or \" to escape
510 // 4. single quoted string using '' or \' to escape
511 // 5. national character quoted string using N'' or N\' to escape
512
513
514 Tokenizer.prototype.createStringPattern = function createStringPattern(stringTypes) {
515 var patterns = {
516 "``": "((`[^`]*($|`))+)",
517 "[]": "((\\[[^\\]]*($|\\]))(\\][^\\]]*($|\\]))*)",
518 "\"\"": "((\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*(\"|$))+)",
519 "''": "(('[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)",
520 "N''": "((N'[^N'\\\\]*(?:\\\\.[^N'\\\\]*)*('|$))+)"
521 };
522
523 return stringTypes.map(function (t) {
524 return patterns[t];
525 }).join("|");
526 };
527
528 Tokenizer.prototype.createParenRegex = function createParenRegex(parens) {
529 var _this = this;
530
531 return new RegExp("^(" + parens.map(function (p) {
532 return _this.escapeParen(p);
533 }).join("|") + ")", "i");
534 };
535
536 Tokenizer.prototype.escapeParen = function escapeParen(paren) {
537 if (paren.length === 1) {
538 // A single punctuation character
539 return (0, _escapeRegExp2["default"])(paren);
540 } else {
541 // longer word
542 return "\\b" + paren + "\\b";
543 }
544 };
545
546 Tokenizer.prototype.createPlaceholderRegex = function createPlaceholderRegex(types, pattern) {
547 if ((0, _isEmpty2["default"])(types)) {
548 return false;
549 }
550 var typesRegex = types.map(_escapeRegExp2["default"]).join("|");
551
552 return new RegExp("^((?:" + typesRegex + ")(?:" + pattern + "))");
553 };
554
555 /**
556 * Takes a SQL string and breaks it into tokens.
557 * Each token is an object with type and value.
558 *
559 * @param {String} input The SQL string
560 * @return {Object[]} tokens An array of tokens.
561 * @return {String} token.type
562 * @return {String} token.value
563 */
564
565
566 Tokenizer.prototype.tokenize = function tokenize(input) {
567 var tokens = [];
568 var token = void 0;
569
570 // Keep processing the string until it is empty
571 while (input.length) {
572 // Get the next token and the token type
573 token = this.getNextToken(input, token);
574 // Advance the string
575 input = input.substring(token.value.length);
576
577 tokens.push(token);
578 }
579 return tokens;
580 };
581
582 Tokenizer.prototype.getNextToken = function getNextToken(input, previousToken) {
583 return this.getWhitespaceToken(input) || this.getCommentToken(input) || this.getStringToken(input) || this.getOpenParenToken(input) || this.getCloseParenToken(input) || this.getPlaceholderToken(input) || this.getNumberToken(input) || this.getReservedWordToken(input, previousToken) || this.getWordToken(input) || this.getOperatorToken(input);
584 };
585
586 Tokenizer.prototype.getWhitespaceToken = function getWhitespaceToken(input) {
587 return this.getTokenOnFirstMatch({
588 input: input,
589 type: _tokenTypes2["default"].WHITESPACE,
590 regex: this.WHITESPACE_REGEX
591 });
592 };
593
594 Tokenizer.prototype.getCommentToken = function getCommentToken(input) {
595 return this.getLineCommentToken(input) || this.getBlockCommentToken(input);
596 };
597
598 Tokenizer.prototype.getLineCommentToken = function getLineCommentToken(input) {
599 return this.getTokenOnFirstMatch({
600 input: input,
601 type: _tokenTypes2["default"].LINE_COMMENT,
602 regex: this.LINE_COMMENT_REGEX
603 });
604 };
605
606 Tokenizer.prototype.getBlockCommentToken = function getBlockCommentToken(input) {
607 return this.getTokenOnFirstMatch({
608 input: input,
609 type: _tokenTypes2["default"].BLOCK_COMMENT,
610 regex: this.BLOCK_COMMENT_REGEX
611 });
612 };
613
614 Tokenizer.prototype.getStringToken = function getStringToken(input) {
615 return this.getTokenOnFirstMatch({
616 input: input,
617 type: _tokenTypes2["default"].STRING,
618 regex: this.STRING_REGEX
619 });
620 };
621
622 Tokenizer.prototype.getOpenParenToken = function getOpenParenToken(input) {
623 return this.getTokenOnFirstMatch({
624 input: input,
625 type: _tokenTypes2["default"].OPEN_PAREN,
626 regex: this.OPEN_PAREN_REGEX
627 });
628 };
629
630 Tokenizer.prototype.getCloseParenToken = function getCloseParenToken(input) {
631 return this.getTokenOnFirstMatch({
632 input: input,
633 type: _tokenTypes2["default"].CLOSE_PAREN,
634 regex: this.CLOSE_PAREN_REGEX
635 });
636 };
637
638 Tokenizer.prototype.getPlaceholderToken = function getPlaceholderToken(input) {
639 return this.getIdentNamedPlaceholderToken(input) || this.getStringNamedPlaceholderToken(input) || this.getIndexedPlaceholderToken(input);
640 };
641
642 Tokenizer.prototype.getIdentNamedPlaceholderToken = function getIdentNamedPlaceholderToken(input) {
643 return this.getPlaceholderTokenWithKey({
644 input: input,
645 regex: this.IDENT_NAMED_PLACEHOLDER_REGEX,
646 parseKey: function parseKey(v) {
647 return v.slice(1);
648 }
649 });
650 };
651
652 Tokenizer.prototype.getStringNamedPlaceholderToken = function getStringNamedPlaceholderToken(input) {
653 var _this2 = this;
654
655 return this.getPlaceholderTokenWithKey({
656 input: input,
657 regex: this.STRING_NAMED_PLACEHOLDER_REGEX,
658 parseKey: function parseKey(v) {
659 return _this2.getEscapedPlaceholderKey({ key: v.slice(2, -1), quoteChar: v.slice(-1) });
660 }
661 });
662 };
663
664 Tokenizer.prototype.getIndexedPlaceholderToken = function getIndexedPlaceholderToken(input) {
665 return this.getPlaceholderTokenWithKey({
666 input: input,
667 regex: this.INDEXED_PLACEHOLDER_REGEX,
668 parseKey: function parseKey(v) {
669 return v.slice(1);
670 }
671 });
672 };
673
674 Tokenizer.prototype.getPlaceholderTokenWithKey = function getPlaceholderTokenWithKey(_ref) {
675 var input = _ref.input,
676 regex = _ref.regex,
677 parseKey = _ref.parseKey;
678
679 var token = this.getTokenOnFirstMatch({ input: input, regex: regex, type: _tokenTypes2["default"].PLACEHOLDER });
680 if (token) {
681 token.key = parseKey(token.value);
682 }
683 return token;
684 };
685
686 Tokenizer.prototype.getEscapedPlaceholderKey = function getEscapedPlaceholderKey(_ref2) {
687 var key = _ref2.key,
688 quoteChar = _ref2.quoteChar;
689
690 return key.replace(new RegExp((0, _escapeRegExp2["default"])("\\") + quoteChar, "g"), quoteChar);
691 };
692
693 // Decimal, binary, or hex numbers
694
695
696 Tokenizer.prototype.getNumberToken = function getNumberToken(input) {
697 return this.getTokenOnFirstMatch({
698 input: input,
699 type: _tokenTypes2["default"].NUMBER,
700 regex: this.NUMBER_REGEX
701 });
702 };
703
704 // Punctuation and symbols
705
706
707 Tokenizer.prototype.getOperatorToken = function getOperatorToken(input) {
708 return this.getTokenOnFirstMatch({
709 input: input,
710 type: _tokenTypes2["default"].OPERATOR,
711 regex: this.OPERATOR_REGEX
712 });
713 };
714
715 Tokenizer.prototype.getReservedWordToken = function getReservedWordToken(input, previousToken) {
716 // A reserved word cannot be preceded by a "."
717 // this makes it so in "mytable.from", "from" is not considered a reserved word
718 if (previousToken && previousToken.value && previousToken.value === ".") {
719 return;
720 }
721 return this.getToplevelReservedToken(input) || this.getNewlineReservedToken(input) || this.getPlainReservedToken(input);
722 };
723
724 Tokenizer.prototype.getToplevelReservedToken = function getToplevelReservedToken(input) {
725 return this.getTokenOnFirstMatch({
726 input: input,
727 type: _tokenTypes2["default"].RESERVED_TOPLEVEL,
728 regex: this.RESERVED_TOPLEVEL_REGEX
729 });
730 };
731
732 Tokenizer.prototype.getNewlineReservedToken = function getNewlineReservedToken(input) {
733 return this.getTokenOnFirstMatch({
734 input: input,
735 type: _tokenTypes2["default"].RESERVED_NEWLINE,
736 regex: this.RESERVED_NEWLINE_REGEX
737 });
738 };
739
740 Tokenizer.prototype.getPlainReservedToken = function getPlainReservedToken(input) {
741 return this.getTokenOnFirstMatch({
742 input: input,
743 type: _tokenTypes2["default"].RESERVED,
744 regex: this.RESERVED_PLAIN_REGEX
745 });
746 };
747
748 Tokenizer.prototype.getWordToken = function getWordToken(input) {
749 return this.getTokenOnFirstMatch({
750 input: input,
751 type: _tokenTypes2["default"].WORD,
752 regex: this.WORD_REGEX
753 });
754 };
755
756 Tokenizer.prototype.getTokenOnFirstMatch = function getTokenOnFirstMatch(_ref3) {
757 var input = _ref3.input,
758 type = _ref3.type,
759 regex = _ref3.regex;
760
761 var matches = input.match(regex);
762
763 if (matches) {
764 return { type: type, value: matches[1] };
765 }
766 };
767
768 return Tokenizer;
769 }();
770
771 exports["default"] = Tokenizer;
772 module.exports = exports["default"];
773
774/***/ }),
775/* 6 */
776/***/ (function(module, exports) {
777
778 /**
779 * Checks if `value` is the
780 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
781 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
782 *
783 * @static
784 * @memberOf _
785 * @since 0.1.0
786 * @category Lang
787 * @param {*} value The value to check.
788 * @returns {boolean} Returns `true` if `value` is an object, else `false`.
789 * @example
790 *
791 * _.isObject({});
792 * // => true
793 *
794 * _.isObject([1, 2, 3]);
795 * // => true
796 *
797 * _.isObject(_.noop);
798 * // => true
799 *
800 * _.isObject(null);
801 * // => false
802 */
803 function isObject(value) {
804 var type = typeof value;
805 return value != null && (type == 'object' || type == 'function');
806 }
807
808 module.exports = isObject;
809
810
811/***/ }),
812/* 7 */
813/***/ (function(module, exports) {
814
815 /**
816 * Checks if `value` is object-like. A value is object-like if it's not `null`
817 * and has a `typeof` result of "object".
818 *
819 * @static
820 * @memberOf _
821 * @since 4.0.0
822 * @category Lang
823 * @param {*} value The value to check.
824 * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
825 * @example
826 *
827 * _.isObjectLike({});
828 * // => true
829 *
830 * _.isObjectLike([1, 2, 3]);
831 * // => true
832 *
833 * _.isObjectLike(_.noop);
834 * // => false
835 *
836 * _.isObjectLike(null);
837 * // => false
838 */
839 function isObjectLike(value) {
840 return value != null && typeof value == 'object';
841 }
842
843 module.exports = isObjectLike;
844
845
846/***/ }),
847/* 8 */
848/***/ (function(module, exports) {
849
850 "use strict";
851
852 exports.__esModule = true;
853 /**
854 * Constants for token types
855 */
856 exports["default"] = {
857 WHITESPACE: "whitespace",
858 WORD: "word",
859 STRING: "string",
860 RESERVED: "reserved",
861 RESERVED_TOPLEVEL: "reserved-toplevel",
862 RESERVED_NEWLINE: "reserved-newline",
863 OPERATOR: "operator",
864 OPEN_PAREN: "open-paren",
865 CLOSE_PAREN: "close-paren",
866 LINE_COMMENT: "line-comment",
867 BLOCK_COMMENT: "block-comment",
868 NUMBER: "number",
869 PLACEHOLDER: "placeholder"
870 };
871 module.exports = exports["default"];
872
873/***/ }),
874/* 9 */
875/***/ (function(module, exports, __webpack_require__) {
876
877 var root = __webpack_require__(1);
878
879 /** Built-in value references. */
880 var Symbol = root.Symbol;
881
882 module.exports = Symbol;
883
884
885/***/ }),
886/* 10 */
887/***/ (function(module, exports, __webpack_require__) {
888
889 var baseToString = __webpack_require__(11);
890
891 /**
892 * Converts `value` to a string. An empty string is returned for `null`
893 * and `undefined` values. The sign of `-0` is preserved.
894 *
895 * @static
896 * @memberOf _
897 * @since 4.0.0
898 * @category Lang
899 * @param {*} value The value to convert.
900 * @returns {string} Returns the converted string.
901 * @example
902 *
903 * _.toString(null);
904 * // => ''
905 *
906 * _.toString(-0);
907 * // => '-0'
908 *
909 * _.toString([1, 2, 3]);
910 * // => '1,2,3'
911 */
912 function toString(value) {
913 return value == null ? '' : baseToString(value);
914 }
915
916 module.exports = toString;
917
918
919/***/ }),
920/* 11 */
921/***/ (function(module, exports, __webpack_require__) {
922
923 var Symbol = __webpack_require__(9),
924 arrayMap = __webpack_require__(33),
925 isArray = __webpack_require__(15),
926 isSymbol = __webpack_require__(19);
927
928 /** Used as references for various `Number` constants. */
929 var INFINITY = 1 / 0;
930
931 /** Used to convert symbols to primitives and strings. */
932 var symbolProto = Symbol ? Symbol.prototype : undefined,
933 symbolToString = symbolProto ? symbolProto.toString : undefined;
934
935 /**
936 * The base implementation of `_.toString` which doesn't convert nullish
937 * values to empty strings.
938 *
939 * @private
940 * @param {*} value The value to process.
941 * @returns {string} Returns the string.
942 */
943 function baseToString(value) {
944 // Exit early for strings to avoid a performance hit in some environments.
945 if (typeof value == 'string') {
946 return value;
947 }
948 if (isArray(value)) {
949 // Recursively convert values (susceptible to call stack limits).
950 return arrayMap(value, baseToString) + '';
951 }
952 if (isSymbol(value)) {
953 return symbolToString ? symbolToString.call(value) : '';
954 }
955 var result = (value + '');
956 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
957 }
958
959 module.exports = baseToString;
960
961
962/***/ }),
963/* 12 */
964/***/ (function(module, exports) {
965
966 /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */
967 var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
968
969 module.exports = freeGlobal;
970
971 /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
972
973/***/ }),
974/* 13 */
975/***/ (function(module, exports) {
976
977 /** Used for built-in method references. */
978 var objectProto = Object.prototype;
979
980 /**
981 * Checks if `value` is likely a prototype object.
982 *
983 * @private
984 * @param {*} value The value to check.
985 * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
986 */
987 function isPrototype(value) {
988 var Ctor = value && value.constructor,
989 proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
990
991 return value === proto;
992 }
993
994 module.exports = isPrototype;
995
996
997/***/ }),
998/* 14 */
999/***/ (function(module, exports) {
1000
1001 /** Used for built-in method references. */
1002 var funcProto = Function.prototype;
1003
1004 /** Used to resolve the decompiled source of functions. */
1005 var funcToString = funcProto.toString;
1006
1007 /**
1008 * Converts `func` to its source code.
1009 *
1010 * @private
1011 * @param {Function} func The function to convert.
1012 * @returns {string} Returns the source code.
1013 */
1014 function toSource(func) {
1015 if (func != null) {
1016 try {
1017 return funcToString.call(func);
1018 } catch (e) {}
1019 try {
1020 return (func + '');
1021 } catch (e) {}
1022 }
1023 return '';
1024 }
1025
1026 module.exports = toSource;
1027
1028
1029/***/ }),
1030/* 15 */
1031/***/ (function(module, exports) {
1032
1033 /**
1034 * Checks if `value` is classified as an `Array` object.
1035 *
1036 * @static
1037 * @memberOf _
1038 * @since 0.1.0
1039 * @category Lang
1040 * @param {*} value The value to check.
1041 * @returns {boolean} Returns `true` if `value` is an array, else `false`.
1042 * @example
1043 *
1044 * _.isArray([1, 2, 3]);
1045 * // => true
1046 *
1047 * _.isArray(document.body.children);
1048 * // => false
1049 *
1050 * _.isArray('abc');
1051 * // => false
1052 *
1053 * _.isArray(_.noop);
1054 * // => false
1055 */
1056 var isArray = Array.isArray;
1057
1058 module.exports = isArray;
1059
1060
1061/***/ }),
1062/* 16 */
1063/***/ (function(module, exports, __webpack_require__) {
1064
1065 var isFunction = __webpack_require__(17),
1066 isLength = __webpack_require__(18);
1067
1068 /**
1069 * Checks if `value` is array-like. A value is considered array-like if it's
1070 * not a function and has a `value.length` that's an integer greater than or
1071 * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
1072 *
1073 * @static
1074 * @memberOf _
1075 * @since 4.0.0
1076 * @category Lang
1077 * @param {*} value The value to check.
1078 * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
1079 * @example
1080 *
1081 * _.isArrayLike([1, 2, 3]);
1082 * // => true
1083 *
1084 * _.isArrayLike(document.body.children);
1085 * // => true
1086 *
1087 * _.isArrayLike('abc');
1088 * // => true
1089 *
1090 * _.isArrayLike(_.noop);
1091 * // => false
1092 */
1093 function isArrayLike(value) {
1094 return value != null && isLength(value.length) && !isFunction(value);
1095 }
1096
1097 module.exports = isArrayLike;
1098
1099
1100/***/ }),
1101/* 17 */
1102/***/ (function(module, exports, __webpack_require__) {
1103
1104 var baseGetTag = __webpack_require__(2),
1105 isObject = __webpack_require__(6);
1106
1107 /** `Object#toString` result references. */
1108 var asyncTag = '[object AsyncFunction]',
1109 funcTag = '[object Function]',
1110 genTag = '[object GeneratorFunction]',
1111 proxyTag = '[object Proxy]';
1112
1113 /**
1114 * Checks if `value` is classified as a `Function` object.
1115 *
1116 * @static
1117 * @memberOf _
1118 * @since 0.1.0
1119 * @category Lang
1120 * @param {*} value The value to check.
1121 * @returns {boolean} Returns `true` if `value` is a function, else `false`.
1122 * @example
1123 *
1124 * _.isFunction(_);
1125 * // => true
1126 *
1127 * _.isFunction(/abc/);
1128 * // => false
1129 */
1130 function isFunction(value) {
1131 if (!isObject(value)) {
1132 return false;
1133 }
1134 // The use of `Object#toString` avoids issues with the `typeof` operator
1135 // in Safari 9 which returns 'object' for typed arrays and other constructors.
1136 var tag = baseGetTag(value);
1137 return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
1138 }
1139
1140 module.exports = isFunction;
1141
1142
1143/***/ }),
1144/* 18 */
1145/***/ (function(module, exports) {
1146
1147 /** Used as references for various `Number` constants. */
1148 var MAX_SAFE_INTEGER = 9007199254740991;
1149
1150 /**
1151 * Checks if `value` is a valid array-like length.
1152 *
1153 * **Note:** This method is loosely based on
1154 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
1155 *
1156 * @static
1157 * @memberOf _
1158 * @since 4.0.0
1159 * @category Lang
1160 * @param {*} value The value to check.
1161 * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
1162 * @example
1163 *
1164 * _.isLength(3);
1165 * // => true
1166 *
1167 * _.isLength(Number.MIN_VALUE);
1168 * // => false
1169 *
1170 * _.isLength(Infinity);
1171 * // => false
1172 *
1173 * _.isLength('3');
1174 * // => false
1175 */
1176 function isLength(value) {
1177 return typeof value == 'number' &&
1178 value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
1179 }
1180
1181 module.exports = isLength;
1182
1183
1184/***/ }),
1185/* 19 */
1186/***/ (function(module, exports, __webpack_require__) {
1187
1188 var baseGetTag = __webpack_require__(2),
1189 isObjectLike = __webpack_require__(7);
1190
1191 /** `Object#toString` result references. */
1192 var symbolTag = '[object Symbol]';
1193
1194 /**
1195 * Checks if `value` is classified as a `Symbol` primitive or object.
1196 *
1197 * @static
1198 * @memberOf _
1199 * @since 4.0.0
1200 * @category Lang
1201 * @param {*} value The value to check.
1202 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
1203 * @example
1204 *
1205 * _.isSymbol(Symbol.iterator);
1206 * // => true
1207 *
1208 * _.isSymbol('abc');
1209 * // => false
1210 */
1211 function isSymbol(value) {
1212 return typeof value == 'symbol' ||
1213 (isObjectLike(value) && baseGetTag(value) == symbolTag);
1214 }
1215
1216 module.exports = isSymbol;
1217
1218
1219/***/ }),
1220/* 20 */
1221/***/ (function(module, exports) {
1222
1223 module.exports = function(module) {
1224 if(!module.webpackPolyfill) {
1225 module.deprecate = function() {};
1226 module.paths = [];
1227 // module.parent = undefined by default
1228 module.children = [];
1229 module.webpackPolyfill = 1;
1230 }
1231 return module;
1232 }
1233
1234
1235/***/ }),
1236/* 21 */
1237/***/ (function(module, exports, __webpack_require__) {
1238
1239 "use strict";
1240
1241 exports.__esModule = true;
1242
1243 var _repeat = __webpack_require__(69);
1244
1245 var _repeat2 = _interopRequireDefault(_repeat);
1246
1247 var _last = __webpack_require__(68);
1248
1249 var _last2 = _interopRequireDefault(_last);
1250
1251 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
1252
1253 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1254
1255 var INDENT_TYPE_TOP_LEVEL = "top-level";
1256 var INDENT_TYPE_BLOCK_LEVEL = "block-level";
1257
1258 /**
1259 * Manages indentation levels.
1260 *
1261 * There are two types of indentation levels:
1262 *
1263 * - BLOCK_LEVEL : increased by open-parenthesis
1264 * - TOP_LEVEL : increased by RESERVED_TOPLEVEL words
1265 */
1266
1267 var Indentation = function () {
1268 /**
1269 * @param {String} indent Indent value, default is " " (2 spaces)
1270 */
1271 function Indentation(indent) {
1272 _classCallCheck(this, Indentation);
1273
1274 this.indent = indent || " ";
1275 this.indentTypes = [];
1276 }
1277
1278 /**
1279 * Returns current indentation string.
1280 * @return {String}
1281 */
1282
1283
1284 Indentation.prototype.getIndent = function getIndent() {
1285 return (0, _repeat2["default"])(this.indent, this.indentTypes.length);
1286 };
1287
1288 /**
1289 * Increases indentation by one top-level indent.
1290 */
1291
1292
1293 Indentation.prototype.increaseToplevel = function increaseToplevel() {
1294 this.indentTypes.push(INDENT_TYPE_TOP_LEVEL);
1295 };
1296
1297 /**
1298 * Increases indentation by one block-level indent.
1299 */
1300
1301
1302 Indentation.prototype.increaseBlockLevel = function increaseBlockLevel() {
1303 this.indentTypes.push(INDENT_TYPE_BLOCK_LEVEL);
1304 };
1305
1306 /**
1307 * Decreases indentation by one top-level indent.
1308 * Does nothing when the previous indent is not top-level.
1309 */
1310
1311
1312 Indentation.prototype.decreaseTopLevel = function decreaseTopLevel() {
1313 if ((0, _last2["default"])(this.indentTypes) === INDENT_TYPE_TOP_LEVEL) {
1314 this.indentTypes.pop();
1315 }
1316 };
1317
1318 /**
1319 * Decreases indentation by one block-level indent.
1320 * If there are top-level indents within the block-level indent,
1321 * throws away these as well.
1322 */
1323
1324
1325 Indentation.prototype.decreaseBlockLevel = function decreaseBlockLevel() {
1326 while (this.indentTypes.length > 0) {
1327 var type = this.indentTypes.pop();
1328 if (type !== INDENT_TYPE_TOP_LEVEL) {
1329 break;
1330 }
1331 }
1332 };
1333
1334 return Indentation;
1335 }();
1336
1337 exports["default"] = Indentation;
1338 module.exports = exports["default"];
1339
1340/***/ }),
1341/* 22 */
1342/***/ (function(module, exports, __webpack_require__) {
1343
1344 "use strict";
1345
1346 exports.__esModule = true;
1347
1348 var _tokenTypes = __webpack_require__(8);
1349
1350 var _tokenTypes2 = _interopRequireDefault(_tokenTypes);
1351
1352 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
1353
1354 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1355
1356 var INLINE_MAX_LENGTH = 50;
1357
1358 /**
1359 * Bookkeeper for inline blocks.
1360 *
1361 * Inline blocks are parenthized expressions that are shorter than INLINE_MAX_LENGTH.
1362 * These blocks are formatted on a single line, unlike longer parenthized
1363 * expressions where open-parenthesis causes newline and increase of indentation.
1364 */
1365
1366 var InlineBlock = function () {
1367 function InlineBlock() {
1368 _classCallCheck(this, InlineBlock);
1369
1370 this.level = 0;
1371 }
1372
1373 /**
1374 * Begins inline block when lookahead through upcoming tokens determines
1375 * that the block would be smaller than INLINE_MAX_LENGTH.
1376 * @param {Object[]} tokens Array of all tokens
1377 * @param {Number} index Current token position
1378 */
1379
1380
1381 InlineBlock.prototype.beginIfPossible = function beginIfPossible(tokens, index) {
1382 if (this.level === 0 && this.isInlineBlock(tokens, index)) {
1383 this.level = 1;
1384 } else if (this.level > 0) {
1385 this.level++;
1386 } else {
1387 this.level = 0;
1388 }
1389 };
1390
1391 /**
1392 * Finishes current inline block.
1393 * There might be several nested ones.
1394 */
1395
1396
1397 InlineBlock.prototype.end = function end() {
1398 this.level--;
1399 };
1400
1401 /**
1402 * True when inside an inline block
1403 * @return {Boolean}
1404 */
1405
1406
1407 InlineBlock.prototype.isActive = function isActive() {
1408 return this.level > 0;
1409 };
1410
1411 // Check if this should be an inline parentheses block
1412 // Examples are "NOW()", "COUNT(*)", "int(10)", key(`somecolumn`), DECIMAL(7,2)
1413
1414
1415 InlineBlock.prototype.isInlineBlock = function isInlineBlock(tokens, index) {
1416 var length = 0;
1417 var level = 0;
1418
1419 for (var i = index; i < tokens.length; i++) {
1420 var token = tokens[i];
1421 length += token.value.length;
1422
1423 // Overran max length
1424 if (length > INLINE_MAX_LENGTH) {
1425 return false;
1426 }
1427
1428 if (token.type === _tokenTypes2["default"].OPEN_PAREN) {
1429 level++;
1430 } else if (token.type === _tokenTypes2["default"].CLOSE_PAREN) {
1431 level--;
1432 if (level === 0) {
1433 return true;
1434 }
1435 }
1436
1437 if (this.isForbiddenToken(token)) {
1438 return false;
1439 }
1440 }
1441 return false;
1442 };
1443
1444 // Reserved words that cause newlines, comments and semicolons
1445 // are not allowed inside inline parentheses block
1446
1447
1448 InlineBlock.prototype.isForbiddenToken = function isForbiddenToken(_ref) {
1449 var type = _ref.type,
1450 value = _ref.value;
1451
1452 return type === _tokenTypes2["default"].RESERVED_TOPLEVEL || type === _tokenTypes2["default"].RESERVED_NEWLINE || type === _tokenTypes2["default"].COMMENT || type === _tokenTypes2["default"].BLOCK_COMMENT || value === ";";
1453 };
1454
1455 return InlineBlock;
1456 }();
1457
1458 exports["default"] = InlineBlock;
1459 module.exports = exports["default"];
1460
1461/***/ }),
1462/* 23 */
1463/***/ (function(module, exports) {
1464
1465 "use strict";
1466
1467 exports.__esModule = true;
1468
1469 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1470
1471 /**
1472 * Handles placeholder replacement with given params.
1473 */
1474 var Params = function () {
1475 /**
1476 * @param {Object} params
1477 */
1478 function Params(params) {
1479 _classCallCheck(this, Params);
1480
1481 this.params = params;
1482 this.index = 0;
1483 }
1484
1485 /**
1486 * Returns param value that matches given placeholder with param key.
1487 * @param {Object} token
1488 * @param {String} token.key Placeholder key
1489 * @param {String} token.value Placeholder value
1490 * @return {String} param or token.value when params are missing
1491 */
1492
1493
1494 Params.prototype.get = function get(_ref) {
1495 var key = _ref.key,
1496 value = _ref.value;
1497
1498 if (!this.params) {
1499 return value;
1500 }
1501 if (key) {
1502 return this.params[key];
1503 }
1504 return this.params[this.index++];
1505 };
1506
1507 return Params;
1508 }();
1509
1510 exports["default"] = Params;
1511 module.exports = exports["default"];
1512
1513/***/ }),
1514/* 24 */
1515/***/ (function(module, exports, __webpack_require__) {
1516
1517 "use strict";
1518
1519 exports.__esModule = true;
1520
1521 var _Formatter = __webpack_require__(4);
1522
1523 var _Formatter2 = _interopRequireDefault(_Formatter);
1524
1525 var _Tokenizer = __webpack_require__(5);
1526
1527 var _Tokenizer2 = _interopRequireDefault(_Tokenizer);
1528
1529 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
1530
1531 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1532
1533 var reservedWords = ["ABS", "ACTIVATE", "ALIAS", "ALL", "ALLOCATE", "ALLOW", "ALTER", "ANY", "ARE", "ARRAY", "AS", "ASC", "ASENSITIVE", "ASSOCIATE", "ASUTIME", "ASYMMETRIC", "AT", "ATOMIC", "ATTRIBUTES", "AUDIT", "AUTHORIZATION", "AUX", "AUXILIARY", "AVG", "BEFORE", "BEGIN", "BETWEEN", "BIGINT", "BINARY", "BLOB", "BOOLEAN", "BOTH", "BUFFERPOOL", "BY", "CACHE", "CALL", "CALLED", "CAPTURE", "CARDINALITY", "CASCADED", "CASE", "CAST", "CCSID", "CEIL", "CEILING", "CHAR", "CHARACTER", "CHARACTER_LENGTH", "CHAR_LENGTH", "CHECK", "CLOB", "CLONE", "CLOSE", "CLUSTER", "COALESCE", "COLLATE", "COLLECT", "COLLECTION", "COLLID", "COLUMN", "COMMENT", "COMMIT", "CONCAT", "CONDITION", "CONNECT", "CONNECTION", "CONSTRAINT", "CONTAINS", "CONTINUE", "CONVERT", "CORR", "CORRESPONDING", "COUNT", "COUNT_BIG", "COVAR_POP", "COVAR_SAMP", "CREATE", "CROSS", "CUBE", "CUME_DIST", "CURRENT", "CURRENT_DATE", "CURRENT_DEFAULT_TRANSFORM_GROUP", "CURRENT_LC_CTYPE", "CURRENT_PATH", "CURRENT_ROLE", "CURRENT_SCHEMA", "CURRENT_SERVER", "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURRENT_TIMEZONE", "CURRENT_TRANSFORM_GROUP_FOR_TYPE", "CURRENT_USER", "CURSOR", "CYCLE", "DATA", "DATABASE", "DATAPARTITIONNAME", "DATAPARTITIONNUM", "DATE", "DAY", "DAYS", "DB2GENERAL", "DB2GENRL", "DB2SQL", "DBINFO", "DBPARTITIONNAME", "DBPARTITIONNUM", "DEALLOCATE", "DEC", "DECIMAL", "DECLARE", "DEFAULT", "DEFAULTS", "DEFINITION", "DELETE", "DENSERANK", "DENSE_RANK", "DEREF", "DESCRIBE", "DESCRIPTOR", "DETERMINISTIC", "DIAGNOSTICS", "DISABLE", "DISALLOW", "DISCONNECT", "DISTINCT", "DO", "DOCUMENT", "DOUBLE", "DROP", "DSSIZE", "DYNAMIC", "EACH", "EDITPROC", "ELEMENT", "ELSE", "ELSEIF", "ENABLE", "ENCODING", "ENCRYPTION", "END", "END-EXEC", "ENDING", "ERASE", "ESCAPE", "EVERY", "EXCEPTION", "EXCLUDING", "EXCLUSIVE", "EXEC", "EXECUTE", "EXISTS", "EXIT", "EXP", "EXPLAIN", "EXTENDED", "EXTERNAL", "EXTRACT", "FALSE", "FENCED", "FETCH", "FIELDPROC", "FILE", "FILTER", "FINAL", "FIRST", "FLOAT", "FLOOR", "FOR", "FOREIGN", "FREE", "FULL", "FUNCTION", "FUSION", "GENERAL", "GENERATED", "GET", "GLOBAL", "GOTO", "GRANT", "GRAPHIC", "GROUP", "GROUPING", "HANDLER", "HASH", "HASHED_VALUE", "HINT", "HOLD", "HOUR", "HOURS", "IDENTITY", "IF", "IMMEDIATE", "IN", "INCLUDING", "INCLUSIVE", "INCREMENT", "INDEX", "INDICATOR", "INDICATORS", "INF", "INFINITY", "INHERIT", "INNER", "INOUT", "INSENSITIVE", "INSERT", "INT", "INTEGER", "INTEGRITY", "INTERSECTION", "INTERVAL", "INTO", "IS", "ISOBID", "ISOLATION", "ITERATE", "JAR", "JAVA", "KEEP", "KEY", "LABEL", "LANGUAGE", "LARGE", "LATERAL", "LC_CTYPE", "LEADING", "LEAVE", "LEFT", "LIKE", "LINKTYPE", "LN", "LOCAL", "LOCALDATE", "LOCALE", "LOCALTIME", "LOCALTIMESTAMP", "LOCATOR", "LOCATORS", "LOCK", "LOCKMAX", "LOCKSIZE", "LONG", "LOOP", "LOWER", "MAINTAINED", "MATCH", "MATERIALIZED", "MAX", "MAXVALUE", "MEMBER", "MERGE", "METHOD", "MICROSECOND", "MICROSECONDS", "MIN", "MINUTE", "MINUTES", "MINVALUE", "MOD", "MODE", "MODIFIES", "MODULE", "MONTH", "MONTHS", "MULTISET", "NAN", "NATIONAL", "NATURAL", "NCHAR", "NCLOB", "NEW", "NEW_TABLE", "NEXTVAL", "NO", "NOCACHE", "NOCYCLE", "NODENAME", "NODENUMBER", "NOMAXVALUE", "NOMINVALUE", "NONE", "NOORDER", "NORMALIZE", "NORMALIZED", "NOT", "NULL", "NULLIF", "NULLS", "NUMERIC", "NUMPARTS", "OBID", "OCTET_LENGTH", "OF", "OFFSET", "OLD", "OLD_TABLE", "ON", "ONLY", "OPEN", "OPTIMIZATION", "OPTIMIZE", "OPTION", "ORDER", "OUT", "OUTER", "OVER", "OVERLAPS", "OVERLAY", "OVERRIDING", "PACKAGE", "PADDED", "PAGESIZE", "PARAMETER", "PART", "PARTITION", "PARTITIONED", "PARTITIONING", "PARTITIONS", "PASSWORD", "PATH", "PERCENTILE_CONT", "PERCENTILE_DISC", "PERCENT_RANK", "PIECESIZE", "PLAN", "POSITION", "POWER", "PRECISION", "PREPARE", "PREVVAL", "PRIMARY", "PRIQTY", "PRIVILEGES", "PROCEDURE", "PROGRAM", "PSID", "PUBLIC", "QUERY", "QUERYNO", "RANGE", "RANK", "READ", "READS", "REAL", "RECOVERY", "RECURSIVE", "REF", "REFERENCES", "REFERENCING", "REFRESH", "REGR_AVGX", "REGR_AVGY", "REGR_COUNT", "REGR_INTERCEPT", "REGR_R2", "REGR_SLOPE", "REGR_SXX", "REGR_SXY", "REGR_SYY", "RELEASE", "RENAME", "REPEAT", "RESET", "RESIGNAL", "RESTART", "RESTRICT", "RESULT", "RESULT_SET_LOCATOR", "RETURN", "RETURNS", "REVOKE", "RIGHT", "ROLE", "ROLLBACK", "ROLLUP", "ROUND_CEILING", "ROUND_DOWN", "ROUND_FLOOR", "ROUND_HALF_DOWN", "ROUND_HALF_EVEN", "ROUND_HALF_UP", "ROUND_UP", "ROUTINE", "ROW", "ROWNUMBER", "ROWS", "ROWSET", "ROW_NUMBER", "RRN", "RUN", "SAVEPOINT", "SCHEMA", "SCOPE", "SCRATCHPAD", "SCROLL", "SEARCH", "SECOND", "SECONDS", "SECQTY", "SECURITY", "SENSITIVE", "SEQUENCE", "SESSION", "SESSION_USER", "SIGNAL", "SIMILAR", "SIMPLE", "SMALLINT", "SNAN", "SOME", "SOURCE", "SPECIFIC", "SPECIFICTYPE", "SQL", "SQLEXCEPTION", "SQLID", "SQLSTATE", "SQLWARNING", "SQRT", "STACKED", "STANDARD", "START", "STARTING", "STATEMENT", "STATIC", "STATMENT", "STAY", "STDDEV_POP", "STDDEV_SAMP", "STOGROUP", "STORES", "STYLE", "SUBMULTISET", "SUBSTRING", "SUM", "SUMMARY", "SYMMETRIC", "SYNONYM", "SYSFUN", "SYSIBM", "SYSPROC", "SYSTEM", "SYSTEM_USER", "TABLE", "TABLESAMPLE", "TABLESPACE", "THEN", "TIME", "TIMESTAMP", "TIMEZONE_HOUR", "TIMEZONE_MINUTE", "TO", "TRAILING", "TRANSACTION", "TRANSLATE", "TRANSLATION", "TREAT", "TRIGGER", "TRIM", "TRUE", "TRUNCATE", "TYPE", "UESCAPE", "UNDO", "UNIQUE", "UNKNOWN", "UNNEST", "UNTIL", "UPPER", "USAGE", "USER", "USING", "VALIDPROC", "VALUE", "VARCHAR", "VARIABLE", "VARIANT", "VARYING", "VAR_POP", "VAR_SAMP", "VCAT", "VERSION", "VIEW", "VOLATILE", "VOLUMES", "WHEN", "WHENEVER", "WHILE", "WIDTH_BUCKET", "WINDOW", "WITH", "WITHIN", "WITHOUT", "WLM", "WRITE", "XMLELEMENT", "XMLEXISTS", "XMLNAMESPACES", "YEAR", "YEARS"];
1534
1535 var reservedToplevelWords = ["ADD", "AFTER", "ALTER COLUMN", "ALTER TABLE", "DELETE FROM", "EXCEPT", "FETCH FIRST", "FROM", "GROUP BY", "GO", "HAVING", "INSERT INTO", "INTERSECT", "LIMIT", "ORDER BY", "SELECT", "SET CURRENT SCHEMA", "SET SCHEMA", "SET", "UNION ALL", "UPDATE", "VALUES", "WHERE"];
1536
1537 var reservedNewlineWords = ["AND", "CROSS JOIN", "INNER JOIN", "JOIN", "LEFT JOIN", "LEFT OUTER JOIN", "OR", "OUTER JOIN", "RIGHT JOIN", "RIGHT OUTER JOIN"];
1538
1539 var tokenizer = void 0;
1540
1541 var Db2Formatter = function () {
1542 /**
1543 * @param {Object} cfg Different set of configurations
1544 */
1545 function Db2Formatter(cfg) {
1546 _classCallCheck(this, Db2Formatter);
1547
1548 this.cfg = cfg;
1549 }
1550
1551 /**
1552 * Formats DB2 query to make it easier to read
1553 *
1554 * @param {String} query The DB2 query string
1555 * @return {String} formatted string
1556 */
1557
1558
1559 Db2Formatter.prototype.format = function format(query) {
1560 if (!tokenizer) {
1561 tokenizer = new _Tokenizer2["default"]({
1562 reservedWords: reservedWords,
1563 reservedToplevelWords: reservedToplevelWords,
1564 reservedNewlineWords: reservedNewlineWords,
1565 stringTypes: ["\"\"", "''", "``", "[]"],
1566 openParens: ["("],
1567 closeParens: [")"],
1568 indexedPlaceholderTypes: ["?"],
1569 namedPlaceholderTypes: [":"],
1570 lineCommentTypes: ["--"],
1571 specialWordChars: ["#", "@"]
1572 });
1573 }
1574 return new _Formatter2["default"](this.cfg, tokenizer).format(query);
1575 };
1576
1577 return Db2Formatter;
1578 }();
1579
1580 exports["default"] = Db2Formatter;
1581 module.exports = exports["default"];
1582
1583/***/ }),
1584/* 25 */
1585/***/ (function(module, exports, __webpack_require__) {
1586
1587 "use strict";
1588
1589 exports.__esModule = true;
1590
1591 var _Formatter = __webpack_require__(4);
1592
1593 var _Formatter2 = _interopRequireDefault(_Formatter);
1594
1595 var _Tokenizer = __webpack_require__(5);
1596
1597 var _Tokenizer2 = _interopRequireDefault(_Tokenizer);
1598
1599 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
1600
1601 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1602
1603 var reservedWords = ["ALL", "ALTER", "ANALYZE", "AND", "ANY", "ARRAY", "AS", "ASC", "BEGIN", "BETWEEN", "BINARY", "BOOLEAN", "BREAK", "BUCKET", "BUILD", "BY", "CALL", "CASE", "CAST", "CLUSTER", "COLLATE", "COLLECTION", "COMMIT", "CONNECT", "CONTINUE", "CORRELATE", "COVER", "CREATE", "DATABASE", "DATASET", "DATASTORE", "DECLARE", "DECREMENT", "DELETE", "DERIVED", "DESC", "DESCRIBE", "DISTINCT", "DO", "DROP", "EACH", "ELEMENT", "ELSE", "END", "EVERY", "EXCEPT", "EXCLUDE", "EXECUTE", "EXISTS", "EXPLAIN", "FALSE", "FETCH", "FIRST", "FLATTEN", "FOR", "FORCE", "FROM", "FUNCTION", "GRANT", "GROUP", "GSI", "HAVING", "IF", "IGNORE", "ILIKE", "IN", "INCLUDE", "INCREMENT", "INDEX", "INFER", "INLINE", "INNER", "INSERT", "INTERSECT", "INTO", "IS", "JOIN", "KEY", "KEYS", "KEYSPACE", "KNOWN", "LAST", "LEFT", "LET", "LETTING", "LIKE", "LIMIT", "LSM", "MAP", "MAPPING", "MATCHED", "MATERIALIZED", "MERGE", "MINUS", "MISSING", "NAMESPACE", "NEST", "NOT", "NULL", "NUMBER", "OBJECT", "OFFSET", "ON", "OPTION", "OR", "ORDER", "OUTER", "OVER", "PARSE", "PARTITION", "PASSWORD", "PATH", "POOL", "PREPARE", "PRIMARY", "PRIVATE", "PRIVILEGE", "PROCEDURE", "PUBLIC", "RAW", "REALM", "REDUCE", "RENAME", "RETURN", "RETURNING", "REVOKE", "RIGHT", "ROLE", "ROLLBACK", "SATISFIES", "SCHEMA", "SELECT", "SELF", "SEMI", "SET", "SHOW", "SOME", "START", "STATISTICS", "STRING", "SYSTEM", "THEN", "TO", "TRANSACTION", "TRIGGER", "TRUE", "TRUNCATE", "UNDER", "UNION", "UNIQUE", "UNKNOWN", "UNNEST", "UNSET", "UPDATE", "UPSERT", "USE", "USER", "USING", "VALIDATE", "VALUE", "VALUED", "VALUES", "VIA", "VIEW", "WHEN", "WHERE", "WHILE", "WITH", "WITHIN", "WORK", "XOR"];
1604
1605 var reservedToplevelWords = ["DELETE FROM", "EXCEPT ALL", "EXCEPT", "EXPLAIN DELETE FROM", "EXPLAIN UPDATE", "EXPLAIN UPSERT", "FROM", "GROUP BY", "HAVING", "INFER", "INSERT INTO", "INTERSECT ALL", "INTERSECT", "LET", "LIMIT", "MERGE", "NEST", "ORDER BY", "PREPARE", "SELECT", "SET CURRENT SCHEMA", "SET SCHEMA", "SET", "UNION ALL", "UNION", "UNNEST", "UPDATE", "UPSERT", "USE KEYS", "VALUES", "WHERE"];
1606
1607 var reservedNewlineWords = ["AND", "INNER JOIN", "JOIN", "LEFT JOIN", "LEFT OUTER JOIN", "OR", "OUTER JOIN", "RIGHT JOIN", "RIGHT OUTER JOIN", "XOR"];
1608
1609 var tokenizer = void 0;
1610
1611 var N1qlFormatter = function () {
1612 /**
1613 * @param {Object} cfg Different set of configurations
1614 */
1615 function N1qlFormatter(cfg) {
1616 _classCallCheck(this, N1qlFormatter);
1617
1618 this.cfg = cfg;
1619 }
1620
1621 /**
1622 * Format the whitespace in a N1QL string to make it easier to read
1623 *
1624 * @param {String} query The N1QL string
1625 * @return {String} formatted string
1626 */
1627
1628
1629 N1qlFormatter.prototype.format = function format(query) {
1630 if (!tokenizer) {
1631 tokenizer = new _Tokenizer2["default"]({
1632 reservedWords: reservedWords,
1633 reservedToplevelWords: reservedToplevelWords,
1634 reservedNewlineWords: reservedNewlineWords,
1635 stringTypes: ["\"\"", "''", "``"],
1636 openParens: ["(", "[", "{"],
1637 closeParens: [")", "]", "}"],
1638 namedPlaceholderTypes: ["$"],
1639 lineCommentTypes: ["#", "--"]
1640 });
1641 }
1642 return new _Formatter2["default"](this.cfg, tokenizer).format(query);
1643 };
1644
1645 return N1qlFormatter;
1646 }();
1647
1648 exports["default"] = N1qlFormatter;
1649 module.exports = exports["default"];
1650
1651/***/ }),
1652/* 26 */
1653/***/ (function(module, exports, __webpack_require__) {
1654
1655 "use strict";
1656
1657 exports.__esModule = true;
1658
1659 var _Formatter = __webpack_require__(4);
1660
1661 var _Formatter2 = _interopRequireDefault(_Formatter);
1662
1663 var _Tokenizer = __webpack_require__(5);
1664
1665 var _Tokenizer2 = _interopRequireDefault(_Tokenizer);
1666
1667 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
1668
1669 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1670
1671 var reservedWords = ["A", "ACCESSIBLE", "AGENT", "AGGREGATE", "ALL", "ALTER", "ANY", "ARRAY", "AS", "ASC", "AT", "ATTRIBUTE", "AUTHID", "AVG", "BETWEEN", "BFILE_BASE", "BINARY_INTEGER", "BINARY", "BLOB_BASE", "BLOCK", "BODY", "BOOLEAN", "BOTH", "BOUND", "BULK", "BY", "BYTE", "C", "CALL", "CALLING", "CASCADE", "CASE", "CHAR_BASE", "CHAR", "CHARACTER", "CHARSET", "CHARSETFORM", "CHARSETID", "CHECK", "CLOB_BASE", "CLONE", "CLOSE", "CLUSTER", "CLUSTERS", "COALESCE", "COLAUTH", "COLLECT", "COLUMNS", "COMMENT", "COMMIT", "COMMITTED", "COMPILED", "COMPRESS", "CONNECT", "CONSTANT", "CONSTRUCTOR", "CONTEXT", "CONTINUE", "CONVERT", "COUNT", "CRASH", "CREATE", "CREDENTIAL", "CURRENT", "CURRVAL", "CURSOR", "CUSTOMDATUM", "DANGLING", "DATA", "DATE_BASE", "DATE", "DAY", "DECIMAL", "DEFAULT", "DEFINE", "DELETE", "DESC", "DETERMINISTIC", "DIRECTORY", "DISTINCT", "DO", "DOUBLE", "DROP", "DURATION", "ELEMENT", "ELSIF", "EMPTY", "ESCAPE", "EXCEPTIONS", "EXCLUSIVE", "EXECUTE", "EXISTS", "EXIT", "EXTENDS", "EXTERNAL", "EXTRACT", "FALSE", "FETCH", "FINAL", "FIRST", "FIXED", "FLOAT", "FOR", "FORALL", "FORCE", "FROM", "FUNCTION", "GENERAL", "GOTO", "GRANT", "GROUP", "HASH", "HEAP", "HIDDEN", "HOUR", "IDENTIFIED", "IF", "IMMEDIATE", "IN", "INCLUDING", "INDEX", "INDEXES", "INDICATOR", "INDICES", "INFINITE", "INSTANTIABLE", "INT", "INTEGER", "INTERFACE", "INTERVAL", "INTO", "INVALIDATE", "IS", "ISOLATION", "JAVA", "LANGUAGE", "LARGE", "LEADING", "LENGTH", "LEVEL", "LIBRARY", "LIKE", "LIKE2", "LIKE4", "LIKEC", "LIMITED", "LOCAL", "LOCK", "LONG", "MAP", "MAX", "MAXLEN", "MEMBER", "MERGE", "MIN", "MINUS", "MINUTE", "MLSLABEL", "MOD", "MODE", "MONTH", "MULTISET", "NAME", "NAN", "NATIONAL", "NATIVE", "NATURAL", "NATURALN", "NCHAR", "NEW", "NEXTVAL", "NOCOMPRESS", "NOCOPY", "NOT", "NOWAIT", "NULL", "NULLIF", "NUMBER_BASE", "NUMBER", "OBJECT", "OCICOLL", "OCIDATE", "OCIDATETIME", "OCIDURATION", "OCIINTERVAL", "OCILOBLOCATOR", "OCINUMBER", "OCIRAW", "OCIREF", "OCIREFCURSOR", "OCIROWID", "OCISTRING", "OCITYPE", "OF", "OLD", "ON", "ONLY", "OPAQUE", "OPEN", "OPERATOR", "OPTION", "ORACLE", "ORADATA", "ORDER", "ORGANIZATION", "ORLANY", "ORLVARY", "OTHERS", "OUT", "OVERLAPS", "OVERRIDING", "PACKAGE", "PARALLEL_ENABLE", "PARAMETER", "PARAMETERS", "PARENT", "PARTITION", "PASCAL", "PCTFREE", "PIPE", "PIPELINED", "PLS_INTEGER", "PLUGGABLE", "POSITIVE", "POSITIVEN", "PRAGMA", "PRECISION", "PRIOR", "PRIVATE", "PROCEDURE", "PUBLIC", "RAISE", "RANGE", "RAW", "READ", "REAL", "RECORD", "REF", "REFERENCE", "RELEASE", "RELIES_ON", "REM", "REMAINDER", "RENAME", "RESOURCE", "RESULT_CACHE", "RESULT", "RETURN", "RETURNING", "REVERSE", "REVOKE", "ROLLBACK", "ROW", "ROWID", "ROWNUM", "ROWTYPE", "SAMPLE", "SAVE", "SAVEPOINT", "SB1", "SB2", "SB4", "SECOND", "SEGMENT", "SELF", "SEPARATE", "SEQUENCE", "SERIALIZABLE", "SHARE", "SHORT", "SIZE_T", "SIZE", "SMALLINT", "SOME", "SPACE", "SPARSE", "SQL", "SQLCODE", "SQLDATA", "SQLERRM", "SQLNAME", "SQLSTATE", "STANDARD", "START", "STATIC", "STDDEV", "STORED", "STRING", "STRUCT", "STYLE", "SUBMULTISET", "SUBPARTITION", "SUBSTITUTABLE", "SUBTYPE", "SUCCESSFUL", "SUM", "SYNONYM", "SYSDATE", "TABAUTH", "TABLE", "TDO", "THE", "THEN", "TIME", "TIMESTAMP", "TIMEZONE_ABBR", "TIMEZONE_HOUR", "TIMEZONE_MINUTE", "TIMEZONE_REGION", "TO", "TRAILING", "TRANSACTION", "TRANSACTIONAL", "TRIGGER", "TRUE", "TRUSTED", "TYPE", "UB1", "UB2", "UB4", "UID", "UNDER", "UNIQUE", "UNPLUG", "UNSIGNED", "UNTRUSTED", "USE", "USER", "USING", "VALIDATE", "VALIST", "VALUE", "VARCHAR", "VARCHAR2", "VARIABLE", "VARIANCE", "VARRAY", "VARYING", "VIEW", "VIEWS", "VOID", "WHENEVER", "WHILE", "WITH", "WORK", "WRAPPED", "WRITE", "YEAR", "ZONE"];
1672
1673 var reservedToplevelWords = ["ADD", "ALTER COLUMN", "ALTER TABLE", "BEGIN", "CONNECT BY", "DECLARE", "DELETE FROM", "DELETE", "END", "EXCEPT", "EXCEPTION", "FETCH FIRST", "FROM", "GROUP BY", "HAVING", "INSERT INTO", "INSERT", "INTERSECT", "LIMIT", "LOOP", "MODIFY", "ORDER BY", "SELECT", "SET CURRENT SCHEMA", "SET SCHEMA", "SET", "START WITH", "UNION ALL", "UNION", "UPDATE", "VALUES", "WHERE"];
1674
1675 var reservedNewlineWords = ["AND", "CROSS APPLY", "CROSS JOIN", "ELSE", "END", "INNER JOIN", "JOIN", "LEFT JOIN", "LEFT OUTER JOIN", "OR", "OUTER APPLY", "OUTER JOIN", "RIGHT JOIN", "RIGHT OUTER JOIN", "WHEN", "XOR"];
1676
1677 var tokenizer = void 0;
1678
1679 var PlSqlFormatter = function () {
1680 /**
1681 * @param {Object} cfg Different set of configurations
1682 */
1683 function PlSqlFormatter(cfg) {
1684 _classCallCheck(this, PlSqlFormatter);
1685
1686 this.cfg = cfg;
1687 }
1688
1689 /**
1690 * Format the whitespace in a PL/SQL string to make it easier to read
1691 *
1692 * @param {String} query The PL/SQL string
1693 * @return {String} formatted string
1694 */
1695
1696
1697 PlSqlFormatter.prototype.format = function format(query) {
1698 if (!tokenizer) {
1699 tokenizer = new _Tokenizer2["default"]({
1700 reservedWords: reservedWords,
1701 reservedToplevelWords: reservedToplevelWords,
1702 reservedNewlineWords: reservedNewlineWords,
1703 stringTypes: ["\"\"", "N''", "''", "``"],
1704 openParens: ["(", "CASE"],
1705 closeParens: [")", "END"],
1706 indexedPlaceholderTypes: ["?"],
1707 namedPlaceholderTypes: [":"],
1708 lineCommentTypes: ["--"],
1709 specialWordChars: ["_", "$", "#", ".", "@"]
1710 });
1711 }
1712 return new _Formatter2["default"](this.cfg, tokenizer).format(query);
1713 };
1714
1715 return PlSqlFormatter;
1716 }();
1717
1718 exports["default"] = PlSqlFormatter;
1719 module.exports = exports["default"];
1720
1721/***/ }),
1722/* 27 */
1723/***/ (function(module, exports, __webpack_require__) {
1724
1725 "use strict";
1726
1727 exports.__esModule = true;
1728
1729 var _Formatter = __webpack_require__(4);
1730
1731 var _Formatter2 = _interopRequireDefault(_Formatter);
1732
1733 var _Tokenizer = __webpack_require__(5);
1734
1735 var _Tokenizer2 = _interopRequireDefault(_Tokenizer);
1736
1737 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
1738
1739 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1740
1741 var reservedWords = ["ACCESSIBLE", "ACTION", "AGAINST", "AGGREGATE", "ALGORITHM", "ALL", "ALTER", "ANALYSE", "ANALYZE", "AS", "ASC", "AUTOCOMMIT", "AUTO_INCREMENT", "BACKUP", "BEGIN", "BETWEEN", "BINLOG", "BOTH", "CASCADE", "CASE", "CHANGE", "CHANGED", "CHARACTER SET", "CHARSET", "CHECK", "CHECKSUM", "COLLATE", "COLLATION", "COLUMN", "COLUMNS", "COMMENT", "COMMIT", "COMMITTED", "COMPRESSED", "CONCURRENT", "CONSTRAINT", "CONTAINS", "CONVERT", "CREATE", "CROSS", "CURRENT_TIMESTAMP", "DATABASE", "DATABASES", "DAY", "DAY_HOUR", "DAY_MINUTE", "DAY_SECOND", "DEFAULT", "DEFINER", "DELAYED", "DELETE", "DESC", "DESCRIBE", "DETERMINISTIC", "DISTINCT", "DISTINCTROW", "DIV", "DO", "DROP", "DUMPFILE", "DUPLICATE", "DYNAMIC", "ELSE", "ENCLOSED", "END", "ENGINE", "ENGINES", "ENGINE_TYPE", "ESCAPE", "ESCAPED", "EVENTS", "EXEC", "EXECUTE", "EXISTS", "EXPLAIN", "EXTENDED", "FAST", "FETCH", "FIELDS", "FILE", "FIRST", "FIXED", "FLUSH", "FOR", "FORCE", "FOREIGN", "FULL", "FULLTEXT", "FUNCTION", "GLOBAL", "GRANT", "GRANTS", "GROUP_CONCAT", "HEAP", "HIGH_PRIORITY", "HOSTS", "HOUR", "HOUR_MINUTE", "HOUR_SECOND", "IDENTIFIED", "IF", "IFNULL", "IGNORE", "IN", "INDEX", "INDEXES", "INFILE", "INSERT", "INSERT_ID", "INSERT_METHOD", "INTERVAL", "INTO", "INVOKER", "IS", "ISOLATION", "KEY", "KEYS", "KILL", "LAST_INSERT_ID", "LEADING", "LEVEL", "LIKE", "LINEAR", "LINES", "LOAD", "LOCAL", "LOCK", "LOCKS", "LOGS", "LOW_PRIORITY", "MARIA", "MASTER", "MASTER_CONNECT_RETRY", "MASTER_HOST", "MASTER_LOG_FILE", "MATCH", "MAX_CONNECTIONS_PER_HOUR", "MAX_QUERIES_PER_HOUR", "MAX_ROWS", "MAX_UPDATES_PER_HOUR", "MAX_USER_CONNECTIONS", "MEDIUM", "MERGE", "MINUTE", "MINUTE_SECOND", "MIN_ROWS", "MODE", "MODIFY", "MONTH", "MRG_MYISAM", "MYISAM", "NAMES", "NATURAL", "NOT", "NOW()", "NULL", "OFFSET", "ON DELETE", "ON UPDATE", "ON", "ONLY", "OPEN", "OPTIMIZE", "OPTION", "OPTIONALLY", "OUTFILE", "PACK_KEYS", "PAGE", "PARTIAL", "PARTITION", "PARTITIONS", "PASSWORD", "PRIMARY", "PRIVILEGES", "PROCEDURE", "PROCESS", "PROCESSLIST", "PURGE", "QUICK", "RAID0", "RAID_CHUNKS", "RAID_CHUNKSIZE", "RAID_TYPE", "RANGE", "READ", "READ_ONLY", "READ_WRITE", "REFERENCES", "REGEXP", "RELOAD", "RENAME", "REPAIR", "REPEATABLE", "REPLACE", "REPLICATION", "RESET", "RESTORE", "RESTRICT", "RETURN", "RETURNS", "REVOKE", "RLIKE", "ROLLBACK", "ROW", "ROWS", "ROW_FORMAT", "SECOND", "SECURITY", "SEPARATOR", "SERIALIZABLE", "SESSION", "SHARE", "SHOW", "SHUTDOWN", "SLAVE", "SONAME", "SOUNDS", "SQL", "SQL_AUTO_IS_NULL", "SQL_BIG_RESULT", "SQL_BIG_SELECTS", "SQL_BIG_TABLES", "SQL_BUFFER_RESULT", "SQL_CACHE", "SQL_CALC_FOUND_ROWS", "SQL_LOG_BIN", "SQL_LOG_OFF", "SQL_LOG_UPDATE", "SQL_LOW_PRIORITY_UPDATES", "SQL_MAX_JOIN_SIZE", "SQL_NO_CACHE", "SQL_QUOTE_SHOW_CREATE", "SQL_SAFE_UPDATES", "SQL_SELECT_LIMIT", "SQL_SLAVE_SKIP_COUNTER", "SQL_SMALL_RESULT", "SQL_WARNINGS", "START", "STARTING", "STATUS", "STOP", "STORAGE", "STRAIGHT_JOIN", "STRING", "STRIPED", "SUPER", "TABLE", "TABLES", "TEMPORARY", "TERMINATED", "THEN", "TO", "TRAILING", "TRANSACTIONAL", "TRUE", "TRUNCATE", "TYPE", "TYPES", "UNCOMMITTED", "UNIQUE", "UNLOCK", "UNSIGNED", "USAGE", "USE", "USING", "VARIABLES", "VIEW", "WHEN", "WITH", "WORK", "WRITE", "YEAR_MONTH"];
1742
1743 var reservedToplevelWords = ["ADD", "AFTER", "ALTER COLUMN", "ALTER TABLE", "DELETE FROM", "EXCEPT", "FETCH FIRST", "FROM", "GROUP BY", "GO", "HAVING", "INSERT INTO", "INSERT", "INTERSECT", "LIMIT", "MODIFY", "ORDER BY", "SELECT", "SET CURRENT SCHEMA", "SET SCHEMA", "SET", "UNION ALL", "UNION", "UPDATE", "VALUES", "WHERE"];
1744
1745 var reservedNewlineWords = ["AND", "CROSS APPLY", "CROSS JOIN", "ELSE", "INNER JOIN", "JOIN", "LEFT JOIN", "LEFT OUTER JOIN", "OR", "OUTER APPLY", "OUTER JOIN", "RIGHT JOIN", "RIGHT OUTER JOIN", "WHEN", "XOR"];
1746
1747 var tokenizer = void 0;
1748
1749 var StandardSqlFormatter = function () {
1750 /**
1751 * @param {Object} cfg Different set of configurations
1752 */
1753 function StandardSqlFormatter(cfg) {
1754 _classCallCheck(this, StandardSqlFormatter);
1755
1756 this.cfg = cfg;
1757 }
1758
1759 /**
1760 * Format the whitespace in a Standard SQL string to make it easier to read
1761 *
1762 * @param {String} query The Standard SQL string
1763 * @return {String} formatted string
1764 */
1765
1766
1767 StandardSqlFormatter.prototype.format = function format(query) {
1768 if (!tokenizer) {
1769 tokenizer = new _Tokenizer2["default"]({
1770 reservedWords: reservedWords,
1771 reservedToplevelWords: reservedToplevelWords,
1772 reservedNewlineWords: reservedNewlineWords,
1773 stringTypes: ["\"\"", "N''", "''", "``", "[]"],
1774 openParens: ["(", "CASE"],
1775 closeParens: [")", "END"],
1776 indexedPlaceholderTypes: ["?"],
1777 namedPlaceholderTypes: ["@", ":"],
1778 lineCommentTypes: ["#", "--"]
1779 });
1780 }
1781 return new _Formatter2["default"](this.cfg, tokenizer).format(query);
1782 };
1783
1784 return StandardSqlFormatter;
1785 }();
1786
1787 exports["default"] = StandardSqlFormatter;
1788 module.exports = exports["default"];
1789
1790/***/ }),
1791/* 28 */
1792/***/ (function(module, exports, __webpack_require__) {
1793
1794 var getNative = __webpack_require__(3),
1795 root = __webpack_require__(1);
1796
1797 /* Built-in method references that are verified to be native. */
1798 var DataView = getNative(root, 'DataView');
1799
1800 module.exports = DataView;
1801
1802
1803/***/ }),
1804/* 29 */
1805/***/ (function(module, exports, __webpack_require__) {
1806
1807 var getNative = __webpack_require__(3),
1808 root = __webpack_require__(1);
1809
1810 /* Built-in method references that are verified to be native. */
1811 var Map = getNative(root, 'Map');
1812
1813 module.exports = Map;
1814
1815
1816/***/ }),
1817/* 30 */
1818/***/ (function(module, exports, __webpack_require__) {
1819
1820 var getNative = __webpack_require__(3),
1821 root = __webpack_require__(1);
1822
1823 /* Built-in method references that are verified to be native. */
1824 var Promise = getNative(root, 'Promise');
1825
1826 module.exports = Promise;
1827
1828
1829/***/ }),
1830/* 31 */
1831/***/ (function(module, exports, __webpack_require__) {
1832
1833 var getNative = __webpack_require__(3),
1834 root = __webpack_require__(1);
1835
1836 /* Built-in method references that are verified to be native. */
1837 var Set = getNative(root, 'Set');
1838
1839 module.exports = Set;
1840
1841
1842/***/ }),
1843/* 32 */
1844/***/ (function(module, exports, __webpack_require__) {
1845
1846 var getNative = __webpack_require__(3),
1847 root = __webpack_require__(1);
1848
1849 /* Built-in method references that are verified to be native. */
1850 var WeakMap = getNative(root, 'WeakMap');
1851
1852 module.exports = WeakMap;
1853
1854
1855/***/ }),
1856/* 33 */
1857/***/ (function(module, exports) {
1858
1859 /**
1860 * A specialized version of `_.map` for arrays without support for iteratee
1861 * shorthands.
1862 *
1863 * @private
1864 * @param {Array} [array] The array to iterate over.
1865 * @param {Function} iteratee The function invoked per iteration.
1866 * @returns {Array} Returns the new mapped array.
1867 */
1868 function arrayMap(array, iteratee) {
1869 var index = -1,
1870 length = array == null ? 0 : array.length,
1871 result = Array(length);
1872
1873 while (++index < length) {
1874 result[index] = iteratee(array[index], index, array);
1875 }
1876 return result;
1877 }
1878
1879 module.exports = arrayMap;
1880
1881
1882/***/ }),
1883/* 34 */
1884/***/ (function(module, exports) {
1885
1886 /**
1887 * Converts an ASCII `string` to an array.
1888 *
1889 * @private
1890 * @param {string} string The string to convert.
1891 * @returns {Array} Returns the converted array.
1892 */
1893 function asciiToArray(string) {
1894 return string.split('');
1895 }
1896
1897 module.exports = asciiToArray;
1898
1899
1900/***/ }),
1901/* 35 */
1902/***/ (function(module, exports) {
1903
1904 /**
1905 * The base implementation of `_.findIndex` and `_.findLastIndex` without
1906 * support for iteratee shorthands.
1907 *
1908 * @private
1909 * @param {Array} array The array to inspect.
1910 * @param {Function} predicate The function invoked per iteration.
1911 * @param {number} fromIndex The index to search from.
1912 * @param {boolean} [fromRight] Specify iterating from right to left.
1913 * @returns {number} Returns the index of the matched value, else `-1`.
1914 */
1915 function baseFindIndex(array, predicate, fromIndex, fromRight) {
1916 var length = array.length,
1917 index = fromIndex + (fromRight ? 1 : -1);
1918
1919 while ((fromRight ? index-- : ++index < length)) {
1920 if (predicate(array[index], index, array)) {
1921 return index;
1922 }
1923 }
1924 return -1;
1925 }
1926
1927 module.exports = baseFindIndex;
1928
1929
1930/***/ }),
1931/* 36 */
1932/***/ (function(module, exports, __webpack_require__) {
1933
1934 var baseFindIndex = __webpack_require__(35),
1935 baseIsNaN = __webpack_require__(38),
1936 strictIndexOf = __webpack_require__(59);
1937
1938 /**
1939 * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
1940 *
1941 * @private
1942 * @param {Array} array The array to inspect.
1943 * @param {*} value The value to search for.
1944 * @param {number} fromIndex The index to search from.
1945 * @returns {number} Returns the index of the matched value, else `-1`.
1946 */
1947 function baseIndexOf(array, value, fromIndex) {
1948 return value === value
1949 ? strictIndexOf(array, value, fromIndex)
1950 : baseFindIndex(array, baseIsNaN, fromIndex);
1951 }
1952
1953 module.exports = baseIndexOf;
1954
1955
1956/***/ }),
1957/* 37 */
1958/***/ (function(module, exports, __webpack_require__) {
1959
1960 var baseGetTag = __webpack_require__(2),
1961 isObjectLike = __webpack_require__(7);
1962
1963 /** `Object#toString` result references. */
1964 var argsTag = '[object Arguments]';
1965
1966 /**
1967 * The base implementation of `_.isArguments`.
1968 *
1969 * @private
1970 * @param {*} value The value to check.
1971 * @returns {boolean} Returns `true` if `value` is an `arguments` object,
1972 */
1973 function baseIsArguments(value) {
1974 return isObjectLike(value) && baseGetTag(value) == argsTag;
1975 }
1976
1977 module.exports = baseIsArguments;
1978
1979
1980/***/ }),
1981/* 38 */
1982/***/ (function(module, exports) {
1983
1984 /**
1985 * The base implementation of `_.isNaN` without support for number objects.
1986 *
1987 * @private
1988 * @param {*} value The value to check.
1989 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
1990 */
1991 function baseIsNaN(value) {
1992 return value !== value;
1993 }
1994
1995 module.exports = baseIsNaN;
1996
1997
1998/***/ }),
1999/* 39 */
2000/***/ (function(module, exports, __webpack_require__) {
2001
2002 var isFunction = __webpack_require__(17),
2003 isMasked = __webpack_require__(54),
2004 isObject = __webpack_require__(6),
2005 toSource = __webpack_require__(14);
2006
2007 /**
2008 * Used to match `RegExp`
2009 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
2010 */
2011 var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
2012
2013 /** Used to detect host constructors (Safari). */
2014 var reIsHostCtor = /^\[object .+?Constructor\]$/;
2015
2016 /** Used for built-in method references. */
2017 var funcProto = Function.prototype,
2018 objectProto = Object.prototype;
2019
2020 /** Used to resolve the decompiled source of functions. */
2021 var funcToString = funcProto.toString;
2022
2023 /** Used to check objects for own properties. */
2024 var hasOwnProperty = objectProto.hasOwnProperty;
2025
2026 /** Used to detect if a method is native. */
2027 var reIsNative = RegExp('^' +
2028 funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
2029 .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
2030 );
2031
2032 /**
2033 * The base implementation of `_.isNative` without bad shim checks.
2034 *
2035 * @private
2036 * @param {*} value The value to check.
2037 * @returns {boolean} Returns `true` if `value` is a native function,
2038 * else `false`.
2039 */
2040 function baseIsNative(value) {
2041 if (!isObject(value) || isMasked(value)) {
2042 return false;
2043 }
2044 var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
2045 return pattern.test(toSource(value));
2046 }
2047
2048 module.exports = baseIsNative;
2049
2050
2051/***/ }),
2052/* 40 */
2053/***/ (function(module, exports, __webpack_require__) {
2054
2055 var baseGetTag = __webpack_require__(2),
2056 isLength = __webpack_require__(18),
2057 isObjectLike = __webpack_require__(7);
2058
2059 /** `Object#toString` result references. */
2060 var argsTag = '[object Arguments]',
2061 arrayTag = '[object Array]',
2062 boolTag = '[object Boolean]',
2063 dateTag = '[object Date]',
2064 errorTag = '[object Error]',
2065 funcTag = '[object Function]',
2066 mapTag = '[object Map]',
2067 numberTag = '[object Number]',
2068 objectTag = '[object Object]',
2069 regexpTag = '[object RegExp]',
2070 setTag = '[object Set]',
2071 stringTag = '[object String]',
2072 weakMapTag = '[object WeakMap]';
2073
2074 var arrayBufferTag = '[object ArrayBuffer]',
2075 dataViewTag = '[object DataView]',
2076 float32Tag = '[object Float32Array]',
2077 float64Tag = '[object Float64Array]',
2078 int8Tag = '[object Int8Array]',
2079 int16Tag = '[object Int16Array]',
2080 int32Tag = '[object Int32Array]',
2081 uint8Tag = '[object Uint8Array]',
2082 uint8ClampedTag = '[object Uint8ClampedArray]',
2083 uint16Tag = '[object Uint16Array]',
2084 uint32Tag = '[object Uint32Array]';
2085
2086 /** Used to identify `toStringTag` values of typed arrays. */
2087 var typedArrayTags = {};
2088 typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
2089 typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
2090 typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
2091 typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
2092 typedArrayTags[uint32Tag] = true;
2093 typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
2094 typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
2095 typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
2096 typedArrayTags[errorTag] = typedArrayTags[funcTag] =
2097 typedArrayTags[mapTag] = typedArrayTags[numberTag] =
2098 typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
2099 typedArrayTags[setTag] = typedArrayTags[stringTag] =
2100 typedArrayTags[weakMapTag] = false;
2101
2102 /**
2103 * The base implementation of `_.isTypedArray` without Node.js optimizations.
2104 *
2105 * @private
2106 * @param {*} value The value to check.
2107 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
2108 */
2109 function baseIsTypedArray(value) {
2110 return isObjectLike(value) &&
2111 isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
2112 }
2113
2114 module.exports = baseIsTypedArray;
2115
2116
2117/***/ }),
2118/* 41 */
2119/***/ (function(module, exports, __webpack_require__) {
2120
2121 var isPrototype = __webpack_require__(13),
2122 nativeKeys = __webpack_require__(55);
2123
2124 /** Used for built-in method references. */
2125 var objectProto = Object.prototype;
2126
2127 /** Used to check objects for own properties. */
2128 var hasOwnProperty = objectProto.hasOwnProperty;
2129
2130 /**
2131 * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
2132 *
2133 * @private
2134 * @param {Object} object The object to query.
2135 * @returns {Array} Returns the array of property names.
2136 */
2137 function baseKeys(object) {
2138 if (!isPrototype(object)) {
2139 return nativeKeys(object);
2140 }
2141 var result = [];
2142 for (var key in Object(object)) {
2143 if (hasOwnProperty.call(object, key) && key != 'constructor') {
2144 result.push(key);
2145 }
2146 }
2147 return result;
2148 }
2149
2150 module.exports = baseKeys;
2151
2152
2153/***/ }),
2154/* 42 */
2155/***/ (function(module, exports) {
2156
2157 /** Used as references for various `Number` constants. */
2158 var MAX_SAFE_INTEGER = 9007199254740991;
2159
2160 /* Built-in method references for those with the same name as other `lodash` methods. */
2161 var nativeFloor = Math.floor;
2162
2163 /**
2164 * The base implementation of `_.repeat` which doesn't coerce arguments.
2165 *
2166 * @private
2167 * @param {string} string The string to repeat.
2168 * @param {number} n The number of times to repeat the string.
2169 * @returns {string} Returns the repeated string.
2170 */
2171 function baseRepeat(string, n) {
2172 var result = '';
2173 if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
2174 return result;
2175 }
2176 // Leverage the exponentiation by squaring algorithm for a faster repeat.
2177 // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
2178 do {
2179 if (n % 2) {
2180 result += string;
2181 }
2182 n = nativeFloor(n / 2);
2183 if (n) {
2184 string += string;
2185 }
2186 } while (n);
2187
2188 return result;
2189 }
2190
2191 module.exports = baseRepeat;
2192
2193
2194/***/ }),
2195/* 43 */
2196/***/ (function(module, exports) {
2197
2198 /**
2199 * The base implementation of `_.slice` without an iteratee call guard.
2200 *
2201 * @private
2202 * @param {Array} array The array to slice.
2203 * @param {number} [start=0] The start position.
2204 * @param {number} [end=array.length] The end position.
2205 * @returns {Array} Returns the slice of `array`.
2206 */
2207 function baseSlice(array, start, end) {
2208 var index = -1,
2209 length = array.length;
2210
2211 if (start < 0) {
2212 start = -start > length ? 0 : (length + start);
2213 }
2214 end = end > length ? length : end;
2215 if (end < 0) {
2216 end += length;
2217 }
2218 length = start > end ? 0 : ((end - start) >>> 0);
2219 start >>>= 0;
2220
2221 var result = Array(length);
2222 while (++index < length) {
2223 result[index] = array[index + start];
2224 }
2225 return result;
2226 }
2227
2228 module.exports = baseSlice;
2229
2230
2231/***/ }),
2232/* 44 */
2233/***/ (function(module, exports) {
2234
2235 /**
2236 * The base implementation of `_.unary` without support for storing metadata.
2237 *
2238 * @private
2239 * @param {Function} func The function to cap arguments for.
2240 * @returns {Function} Returns the new capped function.
2241 */
2242 function baseUnary(func) {
2243 return function(value) {
2244 return func(value);
2245 };
2246 }
2247
2248 module.exports = baseUnary;
2249
2250
2251/***/ }),
2252/* 45 */
2253/***/ (function(module, exports, __webpack_require__) {
2254
2255 var baseSlice = __webpack_require__(43);
2256
2257 /**
2258 * Casts `array` to a slice if it's needed.
2259 *
2260 * @private
2261 * @param {Array} array The array to inspect.
2262 * @param {number} start The start position.
2263 * @param {number} [end=array.length] The end position.
2264 * @returns {Array} Returns the cast slice.
2265 */
2266 function castSlice(array, start, end) {
2267 var length = array.length;
2268 end = end === undefined ? length : end;
2269 return (!start && end >= length) ? array : baseSlice(array, start, end);
2270 }
2271
2272 module.exports = castSlice;
2273
2274
2275/***/ }),
2276/* 46 */
2277/***/ (function(module, exports, __webpack_require__) {
2278
2279 var baseIndexOf = __webpack_require__(36);
2280
2281 /**
2282 * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
2283 * that is not found in the character symbols.
2284 *
2285 * @private
2286 * @param {Array} strSymbols The string symbols to inspect.
2287 * @param {Array} chrSymbols The character symbols to find.
2288 * @returns {number} Returns the index of the last unmatched string symbol.
2289 */
2290 function charsEndIndex(strSymbols, chrSymbols) {
2291 var index = strSymbols.length;
2292
2293 while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
2294 return index;
2295 }
2296
2297 module.exports = charsEndIndex;
2298
2299
2300/***/ }),
2301/* 47 */
2302/***/ (function(module, exports, __webpack_require__) {
2303
2304 var root = __webpack_require__(1);
2305
2306 /** Used to detect overreaching core-js shims. */
2307 var coreJsData = root['__core-js_shared__'];
2308
2309 module.exports = coreJsData;
2310
2311
2312/***/ }),
2313/* 48 */
2314/***/ (function(module, exports, __webpack_require__) {
2315
2316 var Symbol = __webpack_require__(9);
2317
2318 /** Used for built-in method references. */
2319 var objectProto = Object.prototype;
2320
2321 /** Used to check objects for own properties. */
2322 var hasOwnProperty = objectProto.hasOwnProperty;
2323
2324 /**
2325 * Used to resolve the
2326 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
2327 * of values.
2328 */
2329 var nativeObjectToString = objectProto.toString;
2330
2331 /** Built-in value references. */
2332 var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
2333
2334 /**
2335 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
2336 *
2337 * @private
2338 * @param {*} value The value to query.
2339 * @returns {string} Returns the raw `toStringTag`.
2340 */
2341 function getRawTag(value) {
2342 var isOwn = hasOwnProperty.call(value, symToStringTag),
2343 tag = value[symToStringTag];
2344
2345 try {
2346 value[symToStringTag] = undefined;
2347 var unmasked = true;
2348 } catch (e) {}
2349
2350 var result = nativeObjectToString.call(value);
2351 if (unmasked) {
2352 if (isOwn) {
2353 value[symToStringTag] = tag;
2354 } else {
2355 delete value[symToStringTag];
2356 }
2357 }
2358 return result;
2359 }
2360
2361 module.exports = getRawTag;
2362
2363
2364/***/ }),
2365/* 49 */
2366/***/ (function(module, exports, __webpack_require__) {
2367
2368 var DataView = __webpack_require__(28),
2369 Map = __webpack_require__(29),
2370 Promise = __webpack_require__(30),
2371 Set = __webpack_require__(31),
2372 WeakMap = __webpack_require__(32),
2373 baseGetTag = __webpack_require__(2),
2374 toSource = __webpack_require__(14);
2375
2376 /** `Object#toString` result references. */
2377 var mapTag = '[object Map]',
2378 objectTag = '[object Object]',
2379 promiseTag = '[object Promise]',
2380 setTag = '[object Set]',
2381 weakMapTag = '[object WeakMap]';
2382
2383 var dataViewTag = '[object DataView]';
2384
2385 /** Used to detect maps, sets, and weakmaps. */
2386 var dataViewCtorString = toSource(DataView),
2387 mapCtorString = toSource(Map),
2388 promiseCtorString = toSource(Promise),
2389 setCtorString = toSource(Set),
2390 weakMapCtorString = toSource(WeakMap);
2391
2392 /**
2393 * Gets the `toStringTag` of `value`.
2394 *
2395 * @private
2396 * @param {*} value The value to query.
2397 * @returns {string} Returns the `toStringTag`.
2398 */
2399 var getTag = baseGetTag;
2400
2401 // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
2402 if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
2403 (Map && getTag(new Map) != mapTag) ||
2404 (Promise && getTag(Promise.resolve()) != promiseTag) ||
2405 (Set && getTag(new Set) != setTag) ||
2406 (WeakMap && getTag(new WeakMap) != weakMapTag)) {
2407 getTag = function(value) {
2408 var result = baseGetTag(value),
2409 Ctor = result == objectTag ? value.constructor : undefined,
2410 ctorString = Ctor ? toSource(Ctor) : '';
2411
2412 if (ctorString) {
2413 switch (ctorString) {
2414 case dataViewCtorString: return dataViewTag;
2415 case mapCtorString: return mapTag;
2416 case promiseCtorString: return promiseTag;
2417 case setCtorString: return setTag;
2418 case weakMapCtorString: return weakMapTag;
2419 }
2420 }
2421 return result;
2422 };
2423 }
2424
2425 module.exports = getTag;
2426
2427
2428/***/ }),
2429/* 50 */
2430/***/ (function(module, exports) {
2431
2432 /**
2433 * Gets the value at `key` of `object`.
2434 *
2435 * @private
2436 * @param {Object} [object] The object to query.
2437 * @param {string} key The key of the property to get.
2438 * @returns {*} Returns the property value.
2439 */
2440 function getValue(object, key) {
2441 return object == null ? undefined : object[key];
2442 }
2443
2444 module.exports = getValue;
2445
2446
2447/***/ }),
2448/* 51 */
2449/***/ (function(module, exports) {
2450
2451 /** Used to compose unicode character classes. */
2452 var rsAstralRange = '\\ud800-\\udfff',
2453 rsComboMarksRange = '\\u0300-\\u036f',
2454 reComboHalfMarksRange = '\\ufe20-\\ufe2f',
2455 rsComboSymbolsRange = '\\u20d0-\\u20ff',
2456 rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
2457 rsVarRange = '\\ufe0e\\ufe0f';
2458
2459 /** Used to compose unicode capture groups. */
2460 var rsZWJ = '\\u200d';
2461
2462 /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
2463 var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
2464
2465 /**
2466 * Checks if `string` contains Unicode symbols.
2467 *
2468 * @private
2469 * @param {string} string The string to inspect.
2470 * @returns {boolean} Returns `true` if a symbol is found, else `false`.
2471 */
2472 function hasUnicode(string) {
2473 return reHasUnicode.test(string);
2474 }
2475
2476 module.exports = hasUnicode;
2477
2478
2479/***/ }),
2480/* 52 */
2481/***/ (function(module, exports) {
2482
2483 /** Used as references for various `Number` constants. */
2484 var MAX_SAFE_INTEGER = 9007199254740991;
2485
2486 /** Used to detect unsigned integer values. */
2487 var reIsUint = /^(?:0|[1-9]\d*)$/;
2488
2489 /**
2490 * Checks if `value` is a valid array-like index.
2491 *
2492 * @private
2493 * @param {*} value The value to check.
2494 * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
2495 * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
2496 */
2497 function isIndex(value, length) {
2498 var type = typeof value;
2499 length = length == null ? MAX_SAFE_INTEGER : length;
2500
2501 return !!length &&
2502 (type == 'number' ||
2503 (type != 'symbol' && reIsUint.test(value))) &&
2504 (value > -1 && value % 1 == 0 && value < length);
2505 }
2506
2507 module.exports = isIndex;
2508
2509
2510/***/ }),
2511/* 53 */
2512/***/ (function(module, exports, __webpack_require__) {
2513
2514 var eq = __webpack_require__(62),
2515 isArrayLike = __webpack_require__(16),
2516 isIndex = __webpack_require__(52),
2517 isObject = __webpack_require__(6);
2518
2519 /**
2520 * Checks if the given arguments are from an iteratee call.
2521 *
2522 * @private
2523 * @param {*} value The potential iteratee value argument.
2524 * @param {*} index The potential iteratee index or key argument.
2525 * @param {*} object The potential iteratee object argument.
2526 * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
2527 * else `false`.
2528 */
2529 function isIterateeCall(value, index, object) {
2530 if (!isObject(object)) {
2531 return false;
2532 }
2533 var type = typeof index;
2534 if (type == 'number'
2535 ? (isArrayLike(object) && isIndex(index, object.length))
2536 : (type == 'string' && index in object)
2537 ) {
2538 return eq(object[index], value);
2539 }
2540 return false;
2541 }
2542
2543 module.exports = isIterateeCall;
2544
2545
2546/***/ }),
2547/* 54 */
2548/***/ (function(module, exports, __webpack_require__) {
2549
2550 var coreJsData = __webpack_require__(47);
2551
2552 /** Used to detect methods masquerading as native. */
2553 var maskSrcKey = (function() {
2554 var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
2555 return uid ? ('Symbol(src)_1.' + uid) : '';
2556 }());
2557
2558 /**
2559 * Checks if `func` has its source masked.
2560 *
2561 * @private
2562 * @param {Function} func The function to check.
2563 * @returns {boolean} Returns `true` if `func` is masked, else `false`.
2564 */
2565 function isMasked(func) {
2566 return !!maskSrcKey && (maskSrcKey in func);
2567 }
2568
2569 module.exports = isMasked;
2570
2571
2572/***/ }),
2573/* 55 */
2574/***/ (function(module, exports, __webpack_require__) {
2575
2576 var overArg = __webpack_require__(58);
2577
2578 /* Built-in method references for those with the same name as other `lodash` methods. */
2579 var nativeKeys = overArg(Object.keys, Object);
2580
2581 module.exports = nativeKeys;
2582
2583
2584/***/ }),
2585/* 56 */
2586/***/ (function(module, exports, __webpack_require__) {
2587
2588 /* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(12);
2589
2590 /** Detect free variable `exports`. */
2591 var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
2592
2593 /** Detect free variable `module`. */
2594 var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
2595
2596 /** Detect the popular CommonJS extension `module.exports`. */
2597 var moduleExports = freeModule && freeModule.exports === freeExports;
2598
2599 /** Detect free variable `process` from Node.js. */
2600 var freeProcess = moduleExports && freeGlobal.process;
2601
2602 /** Used to access faster Node.js helpers. */
2603 var nodeUtil = (function() {
2604 try {
2605 // Use `util.types` for Node.js 10+.
2606 var types = freeModule && freeModule.require && freeModule.require('util').types;
2607
2608 if (types) {
2609 return types;
2610 }
2611
2612 // Legacy `process.binding('util')` for Node.js < 10.
2613 return freeProcess && freeProcess.binding && freeProcess.binding('util');
2614 } catch (e) {}
2615 }());
2616
2617 module.exports = nodeUtil;
2618
2619 /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(20)(module)))
2620
2621/***/ }),
2622/* 57 */
2623/***/ (function(module, exports) {
2624
2625 /** Used for built-in method references. */
2626 var objectProto = Object.prototype;
2627
2628 /**
2629 * Used to resolve the
2630 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
2631 * of values.
2632 */
2633 var nativeObjectToString = objectProto.toString;
2634
2635 /**
2636 * Converts `value` to a string using `Object.prototype.toString`.
2637 *
2638 * @private
2639 * @param {*} value The value to convert.
2640 * @returns {string} Returns the converted string.
2641 */
2642 function objectToString(value) {
2643 return nativeObjectToString.call(value);
2644 }
2645
2646 module.exports = objectToString;
2647
2648
2649/***/ }),
2650/* 58 */
2651/***/ (function(module, exports) {
2652
2653 /**
2654 * Creates a unary function that invokes `func` with its argument transformed.
2655 *
2656 * @private
2657 * @param {Function} func The function to wrap.
2658 * @param {Function} transform The argument transform.
2659 * @returns {Function} Returns the new function.
2660 */
2661 function overArg(func, transform) {
2662 return function(arg) {
2663 return func(transform(arg));
2664 };
2665 }
2666
2667 module.exports = overArg;
2668
2669
2670/***/ }),
2671/* 59 */
2672/***/ (function(module, exports) {
2673
2674 /**
2675 * A specialized version of `_.indexOf` which performs strict equality
2676 * comparisons of values, i.e. `===`.
2677 *
2678 * @private
2679 * @param {Array} array The array to inspect.
2680 * @param {*} value The value to search for.
2681 * @param {number} fromIndex The index to search from.
2682 * @returns {number} Returns the index of the matched value, else `-1`.
2683 */
2684 function strictIndexOf(array, value, fromIndex) {
2685 var index = fromIndex - 1,
2686 length = array.length;
2687
2688 while (++index < length) {
2689 if (array[index] === value) {
2690 return index;
2691 }
2692 }
2693 return -1;
2694 }
2695
2696 module.exports = strictIndexOf;
2697
2698
2699/***/ }),
2700/* 60 */
2701/***/ (function(module, exports, __webpack_require__) {
2702
2703 var asciiToArray = __webpack_require__(34),
2704 hasUnicode = __webpack_require__(51),
2705 unicodeToArray = __webpack_require__(61);
2706
2707 /**
2708 * Converts `string` to an array.
2709 *
2710 * @private
2711 * @param {string} string The string to convert.
2712 * @returns {Array} Returns the converted array.
2713 */
2714 function stringToArray(string) {
2715 return hasUnicode(string)
2716 ? unicodeToArray(string)
2717 : asciiToArray(string);
2718 }
2719
2720 module.exports = stringToArray;
2721
2722
2723/***/ }),
2724/* 61 */
2725/***/ (function(module, exports) {
2726
2727 /** Used to compose unicode character classes. */
2728 var rsAstralRange = '\\ud800-\\udfff',
2729 rsComboMarksRange = '\\u0300-\\u036f',
2730 reComboHalfMarksRange = '\\ufe20-\\ufe2f',
2731 rsComboSymbolsRange = '\\u20d0-\\u20ff',
2732 rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
2733 rsVarRange = '\\ufe0e\\ufe0f';
2734
2735 /** Used to compose unicode capture groups. */
2736 var rsAstral = '[' + rsAstralRange + ']',
2737 rsCombo = '[' + rsComboRange + ']',
2738 rsFitz = '\\ud83c[\\udffb-\\udfff]',
2739 rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
2740 rsNonAstral = '[^' + rsAstralRange + ']',
2741 rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
2742 rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
2743 rsZWJ = '\\u200d';
2744
2745 /** Used to compose unicode regexes. */
2746 var reOptMod = rsModifier + '?',
2747 rsOptVar = '[' + rsVarRange + ']?',
2748 rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
2749 rsSeq = rsOptVar + reOptMod + rsOptJoin,
2750 rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
2751
2752 /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
2753 var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
2754
2755 /**
2756 * Converts a Unicode `string` to an array.
2757 *
2758 * @private
2759 * @param {string} string The string to convert.
2760 * @returns {Array} Returns the converted array.
2761 */
2762 function unicodeToArray(string) {
2763 return string.match(reUnicode) || [];
2764 }
2765
2766 module.exports = unicodeToArray;
2767
2768
2769/***/ }),
2770/* 62 */
2771/***/ (function(module, exports) {
2772
2773 /**
2774 * Performs a
2775 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
2776 * comparison between two values to determine if they are equivalent.
2777 *
2778 * @static
2779 * @memberOf _
2780 * @since 4.0.0
2781 * @category Lang
2782 * @param {*} value The value to compare.
2783 * @param {*} other The other value to compare.
2784 * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
2785 * @example
2786 *
2787 * var object = { 'a': 1 };
2788 * var other = { 'a': 1 };
2789 *
2790 * _.eq(object, object);
2791 * // => true
2792 *
2793 * _.eq(object, other);
2794 * // => false
2795 *
2796 * _.eq('a', 'a');
2797 * // => true
2798 *
2799 * _.eq('a', Object('a'));
2800 * // => false
2801 *
2802 * _.eq(NaN, NaN);
2803 * // => true
2804 */
2805 function eq(value, other) {
2806 return value === other || (value !== value && other !== other);
2807 }
2808
2809 module.exports = eq;
2810
2811
2812/***/ }),
2813/* 63 */
2814/***/ (function(module, exports, __webpack_require__) {
2815
2816 var toString = __webpack_require__(10);
2817
2818 /**
2819 * Used to match `RegExp`
2820 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
2821 */
2822 var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
2823 reHasRegExpChar = RegExp(reRegExpChar.source);
2824
2825 /**
2826 * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
2827 * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
2828 *
2829 * @static
2830 * @memberOf _
2831 * @since 3.0.0
2832 * @category String
2833 * @param {string} [string=''] The string to escape.
2834 * @returns {string} Returns the escaped string.
2835 * @example
2836 *
2837 * _.escapeRegExp('[lodash](https://lodash.com/)');
2838 * // => '\[lodash\]\(https://lodash\.com/\)'
2839 */
2840 function escapeRegExp(string) {
2841 string = toString(string);
2842 return (string && reHasRegExpChar.test(string))
2843 ? string.replace(reRegExpChar, '\\$&')
2844 : string;
2845 }
2846
2847 module.exports = escapeRegExp;
2848
2849
2850/***/ }),
2851/* 64 */
2852/***/ (function(module, exports, __webpack_require__) {
2853
2854 var baseIsArguments = __webpack_require__(37),
2855 isObjectLike = __webpack_require__(7);
2856
2857 /** Used for built-in method references. */
2858 var objectProto = Object.prototype;
2859
2860 /** Used to check objects for own properties. */
2861 var hasOwnProperty = objectProto.hasOwnProperty;
2862
2863 /** Built-in value references. */
2864 var propertyIsEnumerable = objectProto.propertyIsEnumerable;
2865
2866 /**
2867 * Checks if `value` is likely an `arguments` object.
2868 *
2869 * @static
2870 * @memberOf _
2871 * @since 0.1.0
2872 * @category Lang
2873 * @param {*} value The value to check.
2874 * @returns {boolean} Returns `true` if `value` is an `arguments` object,
2875 * else `false`.
2876 * @example
2877 *
2878 * _.isArguments(function() { return arguments; }());
2879 * // => true
2880 *
2881 * _.isArguments([1, 2, 3]);
2882 * // => false
2883 */
2884 var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
2885 return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
2886 !propertyIsEnumerable.call(value, 'callee');
2887 };
2888
2889 module.exports = isArguments;
2890
2891
2892/***/ }),
2893/* 65 */
2894/***/ (function(module, exports, __webpack_require__) {
2895
2896 /* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(1),
2897 stubFalse = __webpack_require__(70);
2898
2899 /** Detect free variable `exports`. */
2900 var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
2901
2902 /** Detect free variable `module`. */
2903 var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
2904
2905 /** Detect the popular CommonJS extension `module.exports`. */
2906 var moduleExports = freeModule && freeModule.exports === freeExports;
2907
2908 /** Built-in value references. */
2909 var Buffer = moduleExports ? root.Buffer : undefined;
2910
2911 /* Built-in method references for those with the same name as other `lodash` methods. */
2912 var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;
2913
2914 /**
2915 * Checks if `value` is a buffer.
2916 *
2917 * @static
2918 * @memberOf _
2919 * @since 4.3.0
2920 * @category Lang
2921 * @param {*} value The value to check.
2922 * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
2923 * @example
2924 *
2925 * _.isBuffer(new Buffer(2));
2926 * // => true
2927 *
2928 * _.isBuffer(new Uint8Array(2));
2929 * // => false
2930 */
2931 var isBuffer = nativeIsBuffer || stubFalse;
2932
2933 module.exports = isBuffer;
2934
2935 /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(20)(module)))
2936
2937/***/ }),
2938/* 66 */
2939/***/ (function(module, exports, __webpack_require__) {
2940
2941 var baseKeys = __webpack_require__(41),
2942 getTag = __webpack_require__(49),
2943 isArguments = __webpack_require__(64),
2944 isArray = __webpack_require__(15),
2945 isArrayLike = __webpack_require__(16),
2946 isBuffer = __webpack_require__(65),
2947 isPrototype = __webpack_require__(13),
2948 isTypedArray = __webpack_require__(67);
2949
2950 /** `Object#toString` result references. */
2951 var mapTag = '[object Map]',
2952 setTag = '[object Set]';
2953
2954 /** Used for built-in method references. */
2955 var objectProto = Object.prototype;
2956
2957 /** Used to check objects for own properties. */
2958 var hasOwnProperty = objectProto.hasOwnProperty;
2959
2960 /**
2961 * Checks if `value` is an empty object, collection, map, or set.
2962 *
2963 * Objects are considered empty if they have no own enumerable string keyed
2964 * properties.
2965 *
2966 * Array-like values such as `arguments` objects, arrays, buffers, strings, or
2967 * jQuery-like collections are considered empty if they have a `length` of `0`.
2968 * Similarly, maps and sets are considered empty if they have a `size` of `0`.
2969 *
2970 * @static
2971 * @memberOf _
2972 * @since 0.1.0
2973 * @category Lang
2974 * @param {*} value The value to check.
2975 * @returns {boolean} Returns `true` if `value` is empty, else `false`.
2976 * @example
2977 *
2978 * _.isEmpty(null);
2979 * // => true
2980 *
2981 * _.isEmpty(true);
2982 * // => true
2983 *
2984 * _.isEmpty(1);
2985 * // => true
2986 *
2987 * _.isEmpty([1, 2, 3]);
2988 * // => false
2989 *
2990 * _.isEmpty({ 'a': 1 });
2991 * // => false
2992 */
2993 function isEmpty(value) {
2994 if (value == null) {
2995 return true;
2996 }
2997 if (isArrayLike(value) &&
2998 (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
2999 isBuffer(value) || isTypedArray(value) || isArguments(value))) {
3000 return !value.length;
3001 }
3002 var tag = getTag(value);
3003 if (tag == mapTag || tag == setTag) {
3004 return !value.size;
3005 }
3006 if (isPrototype(value)) {
3007 return !baseKeys(value).length;
3008 }
3009 for (var key in value) {
3010 if (hasOwnProperty.call(value, key)) {
3011 return false;
3012 }
3013 }
3014 return true;
3015 }
3016
3017 module.exports = isEmpty;
3018
3019
3020/***/ }),
3021/* 67 */
3022/***/ (function(module, exports, __webpack_require__) {
3023
3024 var baseIsTypedArray = __webpack_require__(40),
3025 baseUnary = __webpack_require__(44),
3026 nodeUtil = __webpack_require__(56);
3027
3028 /* Node.js helper references. */
3029 var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
3030
3031 /**
3032 * Checks if `value` is classified as a typed array.
3033 *
3034 * @static
3035 * @memberOf _
3036 * @since 3.0.0
3037 * @category Lang
3038 * @param {*} value The value to check.
3039 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
3040 * @example
3041 *
3042 * _.isTypedArray(new Uint8Array);
3043 * // => true
3044 *
3045 * _.isTypedArray([]);
3046 * // => false
3047 */
3048 var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
3049
3050 module.exports = isTypedArray;
3051
3052
3053/***/ }),
3054/* 68 */
3055/***/ (function(module, exports) {
3056
3057 /**
3058 * Gets the last element of `array`.
3059 *
3060 * @static
3061 * @memberOf _
3062 * @since 0.1.0
3063 * @category Array
3064 * @param {Array} array The array to query.
3065 * @returns {*} Returns the last element of `array`.
3066 * @example
3067 *
3068 * _.last([1, 2, 3]);
3069 * // => 3
3070 */
3071 function last(array) {
3072 var length = array == null ? 0 : array.length;
3073 return length ? array[length - 1] : undefined;
3074 }
3075
3076 module.exports = last;
3077
3078
3079/***/ }),
3080/* 69 */
3081/***/ (function(module, exports, __webpack_require__) {
3082
3083 var baseRepeat = __webpack_require__(42),
3084 isIterateeCall = __webpack_require__(53),
3085 toInteger = __webpack_require__(72),
3086 toString = __webpack_require__(10);
3087
3088 /**
3089 * Repeats the given string `n` times.
3090 *
3091 * @static
3092 * @memberOf _
3093 * @since 3.0.0
3094 * @category String
3095 * @param {string} [string=''] The string to repeat.
3096 * @param {number} [n=1] The number of times to repeat the string.
3097 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
3098 * @returns {string} Returns the repeated string.
3099 * @example
3100 *
3101 * _.repeat('*', 3);
3102 * // => '***'
3103 *
3104 * _.repeat('abc', 2);
3105 * // => 'abcabc'
3106 *
3107 * _.repeat('abc', 0);
3108 * // => ''
3109 */
3110 function repeat(string, n, guard) {
3111 if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {
3112 n = 1;
3113 } else {
3114 n = toInteger(n);
3115 }
3116 return baseRepeat(toString(string), n);
3117 }
3118
3119 module.exports = repeat;
3120
3121
3122/***/ }),
3123/* 70 */
3124/***/ (function(module, exports) {
3125
3126 /**
3127 * This method returns `false`.
3128 *
3129 * @static
3130 * @memberOf _
3131 * @since 4.13.0
3132 * @category Util
3133 * @returns {boolean} Returns `false`.
3134 * @example
3135 *
3136 * _.times(2, _.stubFalse);
3137 * // => [false, false]
3138 */
3139 function stubFalse() {
3140 return false;
3141 }
3142
3143 module.exports = stubFalse;
3144
3145
3146/***/ }),
3147/* 71 */
3148/***/ (function(module, exports, __webpack_require__) {
3149
3150 var toNumber = __webpack_require__(73);
3151
3152 /** Used as references for various `Number` constants. */
3153 var INFINITY = 1 / 0,
3154 MAX_INTEGER = 1.7976931348623157e+308;
3155
3156 /**
3157 * Converts `value` to a finite number.
3158 *
3159 * @static
3160 * @memberOf _
3161 * @since 4.12.0
3162 * @category Lang
3163 * @param {*} value The value to convert.
3164 * @returns {number} Returns the converted number.
3165 * @example
3166 *
3167 * _.toFinite(3.2);
3168 * // => 3.2
3169 *
3170 * _.toFinite(Number.MIN_VALUE);
3171 * // => 5e-324
3172 *
3173 * _.toFinite(Infinity);
3174 * // => 1.7976931348623157e+308
3175 *
3176 * _.toFinite('3.2');
3177 * // => 3.2
3178 */
3179 function toFinite(value) {
3180 if (!value) {
3181 return value === 0 ? value : 0;
3182 }
3183 value = toNumber(value);
3184 if (value === INFINITY || value === -INFINITY) {
3185 var sign = (value < 0 ? -1 : 1);
3186 return sign * MAX_INTEGER;
3187 }
3188 return value === value ? value : 0;
3189 }
3190
3191 module.exports = toFinite;
3192
3193
3194/***/ }),
3195/* 72 */
3196/***/ (function(module, exports, __webpack_require__) {
3197
3198 var toFinite = __webpack_require__(71);
3199
3200 /**
3201 * Converts `value` to an integer.
3202 *
3203 * **Note:** This method is loosely based on
3204 * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
3205 *
3206 * @static
3207 * @memberOf _
3208 * @since 4.0.0
3209 * @category Lang
3210 * @param {*} value The value to convert.
3211 * @returns {number} Returns the converted integer.
3212 * @example
3213 *
3214 * _.toInteger(3.2);
3215 * // => 3
3216 *
3217 * _.toInteger(Number.MIN_VALUE);
3218 * // => 0
3219 *
3220 * _.toInteger(Infinity);
3221 * // => 1.7976931348623157e+308
3222 *
3223 * _.toInteger('3.2');
3224 * // => 3
3225 */
3226 function toInteger(value) {
3227 var result = toFinite(value),
3228 remainder = result % 1;
3229
3230 return result === result ? (remainder ? result - remainder : result) : 0;
3231 }
3232
3233 module.exports = toInteger;
3234
3235
3236/***/ }),
3237/* 73 */
3238/***/ (function(module, exports, __webpack_require__) {
3239
3240 var isObject = __webpack_require__(6),
3241 isSymbol = __webpack_require__(19);
3242
3243 /** Used as references for various `Number` constants. */
3244 var NAN = 0 / 0;
3245
3246 /** Used to match leading and trailing whitespace. */
3247 var reTrim = /^\s+|\s+$/g;
3248
3249 /** Used to detect bad signed hexadecimal string values. */
3250 var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
3251
3252 /** Used to detect binary string values. */
3253 var reIsBinary = /^0b[01]+$/i;
3254
3255 /** Used to detect octal string values. */
3256 var reIsOctal = /^0o[0-7]+$/i;
3257
3258 /** Built-in method references without a dependency on `root`. */
3259 var freeParseInt = parseInt;
3260
3261 /**
3262 * Converts `value` to a number.
3263 *
3264 * @static
3265 * @memberOf _
3266 * @since 4.0.0
3267 * @category Lang
3268 * @param {*} value The value to process.
3269 * @returns {number} Returns the number.
3270 * @example
3271 *
3272 * _.toNumber(3.2);
3273 * // => 3.2
3274 *
3275 * _.toNumber(Number.MIN_VALUE);
3276 * // => 5e-324
3277 *
3278 * _.toNumber(Infinity);
3279 * // => Infinity
3280 *
3281 * _.toNumber('3.2');
3282 * // => 3.2
3283 */
3284 function toNumber(value) {
3285 if (typeof value == 'number') {
3286 return value;
3287 }
3288 if (isSymbol(value)) {
3289 return NAN;
3290 }
3291 if (isObject(value)) {
3292 var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
3293 value = isObject(other) ? (other + '') : other;
3294 }
3295 if (typeof value != 'string') {
3296 return value === 0 ? value : +value;
3297 }
3298 value = value.replace(reTrim, '');
3299 var isBinary = reIsBinary.test(value);
3300 return (isBinary || reIsOctal.test(value))
3301 ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
3302 : (reIsBadHex.test(value) ? NAN : +value);
3303 }
3304
3305 module.exports = toNumber;
3306
3307
3308/***/ }),
3309/* 74 */
3310/***/ (function(module, exports, __webpack_require__) {
3311
3312 var baseToString = __webpack_require__(11),
3313 castSlice = __webpack_require__(45),
3314 charsEndIndex = __webpack_require__(46),
3315 stringToArray = __webpack_require__(60),
3316 toString = __webpack_require__(10);
3317
3318 /** Used to match leading and trailing whitespace. */
3319 var reTrimEnd = /\s+$/;
3320
3321 /**
3322 * Removes trailing whitespace or specified characters from `string`.
3323 *
3324 * @static
3325 * @memberOf _
3326 * @since 4.0.0
3327 * @category String
3328 * @param {string} [string=''] The string to trim.
3329 * @param {string} [chars=whitespace] The characters to trim.
3330 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
3331 * @returns {string} Returns the trimmed string.
3332 * @example
3333 *
3334 * _.trimEnd(' abc ');
3335 * // => ' abc'
3336 *
3337 * _.trimEnd('-_-abc-_-', '_-');
3338 * // => '-_-abc'
3339 */
3340 function trimEnd(string, chars, guard) {
3341 string = toString(string);
3342 if (string && (guard || chars === undefined)) {
3343 return string.replace(reTrimEnd, '');
3344 }
3345 if (!string || !(chars = baseToString(chars))) {
3346 return string;
3347 }
3348 var strSymbols = stringToArray(string),
3349 end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
3350
3351 return castSlice(strSymbols, 0, end).join('');
3352 }
3353
3354 module.exports = trimEnd;
3355
3356
3357/***/ })
3358/******/ ])
3359});
3360;
\No newline at end of file